@leemour/max-cli 0.5.0 → 0.6.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 (141) hide show
  1. package/README.md +14 -5
  2. package/dist/cache/store.d.ts.map +1 -1
  3. package/dist/cache/store.js +1 -0
  4. package/dist/cache/store.js.map +1 -1
  5. package/dist/client.d.ts +57 -3
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +229 -78
  8. package/dist/client.js.map +1 -1
  9. package/dist/commands/commands.d.ts +8 -0
  10. package/dist/commands/commands.d.ts.map +1 -0
  11. package/dist/commands/commands.js +36 -0
  12. package/dist/commands/commands.js.map +1 -0
  13. package/dist/commands/config.d.ts.map +1 -1
  14. package/dist/commands/config.js +2 -0
  15. package/dist/commands/config.js.map +1 -1
  16. package/dist/commands/context.d.ts +18 -0
  17. package/dist/commands/context.d.ts.map +1 -1
  18. package/dist/commands/context.js +21 -0
  19. package/dist/commands/context.js.map +1 -1
  20. package/dist/commands/inbox.d.ts +14 -0
  21. package/dist/commands/inbox.d.ts.map +1 -0
  22. package/dist/commands/inbox.js +90 -0
  23. package/dist/commands/inbox.js.map +1 -0
  24. package/dist/commands/messages.d.ts.map +1 -1
  25. package/dist/commands/messages.js +6 -2
  26. package/dist/commands/messages.js.map +1 -1
  27. package/dist/commands/reactions.d.ts +3 -0
  28. package/dist/commands/reactions.d.ts.map +1 -0
  29. package/dist/commands/reactions.js +26 -0
  30. package/dist/commands/reactions.js.map +1 -0
  31. package/dist/commands/recipients.d.ts +9 -0
  32. package/dist/commands/recipients.d.ts.map +1 -0
  33. package/dist/commands/recipients.js +68 -0
  34. package/dist/commands/recipients.js.map +1 -0
  35. package/dist/commands/sends.d.ts +4 -0
  36. package/dist/commands/sends.d.ts.map +1 -0
  37. package/dist/commands/sends.js +21 -0
  38. package/dist/commands/sends.js.map +1 -0
  39. package/dist/commands/session.d.ts.map +1 -1
  40. package/dist/commands/session.js +80 -15
  41. package/dist/commands/session.js.map +1 -1
  42. package/dist/commands/skill.d.ts.map +1 -1
  43. package/dist/commands/skill.js +2 -1
  44. package/dist/commands/skill.js.map +1 -1
  45. package/dist/config.d.ts +9 -1
  46. package/dist/config.d.ts.map +1 -1
  47. package/dist/config.js +16 -0
  48. package/dist/config.js.map +1 -1
  49. package/dist/domain/map.d.ts +3 -1
  50. package/dist/domain/map.d.ts.map +1 -1
  51. package/dist/domain/map.js +9 -0
  52. package/dist/domain/map.js.map +1 -1
  53. package/dist/domain/models.d.ts +33 -0
  54. package/dist/domain/models.d.ts.map +1 -1
  55. package/dist/domain/models.js.map +1 -1
  56. package/dist/generated/client.generated.d.ts +10 -0
  57. package/dist/generated/client.generated.d.ts.map +1 -1
  58. package/dist/generated/client.generated.js +10 -0
  59. package/dist/generated/client.generated.js.map +1 -1
  60. package/dist/generated/opcodes.generated.d.ts +13 -0
  61. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  62. package/dist/generated/opcodes.generated.js +13 -0
  63. package/dist/generated/opcodes.generated.js.map +1 -1
  64. package/dist/generated/operations.generated.d.ts +86 -1
  65. package/dist/generated/operations.generated.d.ts.map +1 -1
  66. package/dist/generated/operations.generated.js +10 -1
  67. package/dist/generated/operations.generated.js.map +1 -1
  68. package/dist/markdown.d.ts +18 -0
  69. package/dist/markdown.d.ts.map +1 -0
  70. package/dist/markdown.js +52 -0
  71. package/dist/markdown.js.map +1 -0
  72. package/dist/program.d.ts.map +1 -1
  73. package/dist/program.js +10 -0
  74. package/dist/program.js.map +1 -1
  75. package/dist/rendering/messages.d.ts.map +1 -1
  76. package/dist/rendering/messages.js +6 -0
  77. package/dist/rendering/messages.js.map +1 -1
  78. package/dist/resolve.d.ts +15 -0
  79. package/dist/resolve.d.ts.map +1 -0
  80. package/dist/resolve.js +48 -0
  81. package/dist/resolve.js.map +1 -0
  82. package/dist/sends/guard.d.ts +26 -0
  83. package/dist/sends/guard.d.ts.map +1 -0
  84. package/dist/sends/guard.js +48 -0
  85. package/dist/sends/guard.js.map +1 -0
  86. package/dist/sends/journal.d.ts +29 -0
  87. package/dist/sends/journal.d.ts.map +1 -0
  88. package/dist/sends/journal.js +40 -0
  89. package/dist/sends/journal.js.map +1 -0
  90. package/dist/sends/recipients.d.ts +29 -0
  91. package/dist/sends/recipients.d.ts.map +1 -0
  92. package/dist/sends/recipients.js +62 -0
  93. package/dist/sends/recipients.js.map +1 -0
  94. package/dist/session/adopt.d.ts.map +1 -1
  95. package/dist/session/adopt.js +7 -6
  96. package/dist/session/adopt.js.map +1 -1
  97. package/dist/session/browser.d.ts +55 -0
  98. package/dist/session/browser.d.ts.map +1 -0
  99. package/dist/session/browser.js +292 -0
  100. package/dist/session/browser.js.map +1 -0
  101. package/dist/session/handshake.d.ts +2 -0
  102. package/dist/session/handshake.d.ts.map +1 -1
  103. package/dist/session/handshake.js +3 -1
  104. package/dist/session/handshake.js.map +1 -1
  105. package/dist/session/login.d.ts +20 -0
  106. package/dist/session/login.d.ts.map +1 -0
  107. package/dist/session/login.js +66 -0
  108. package/dist/session/login.js.map +1 -0
  109. package/dist/session/prompt.d.ts +3 -1
  110. package/dist/session/prompt.d.ts.map +1 -1
  111. package/dist/session/prompt.js +2 -2
  112. package/dist/session/prompt.js.map +1 -1
  113. package/dist/session/qr-terminal.d.ts +9 -0
  114. package/dist/session/qr-terminal.d.ts.map +1 -0
  115. package/dist/session/qr-terminal.js +34 -0
  116. package/dist/session/qr-terminal.js.map +1 -0
  117. package/dist/session/store.d.ts +2 -0
  118. package/dist/session/store.d.ts.map +1 -1
  119. package/dist/session/store.js +2 -0
  120. package/dist/session/store.js.map +1 -1
  121. package/dist/spec/index.d.ts.map +1 -1
  122. package/dist/spec/index.js +11 -1
  123. package/dist/spec/index.js.map +1 -1
  124. package/dist/spec/operations/login.d.ts +64 -0
  125. package/dist/spec/operations/login.d.ts.map +1 -0
  126. package/dist/spec/operations/login.js +99 -0
  127. package/dist/spec/operations/login.js.map +1 -0
  128. package/dist/spec/operations/messages.d.ts +27 -1
  129. package/dist/spec/operations/messages.d.ts.map +1 -1
  130. package/dist/spec/operations/messages.js +46 -2
  131. package/dist/spec/operations/messages.js.map +1 -1
  132. package/dist/testing/mock-max.d.ts +3 -2
  133. package/dist/testing/mock-max.d.ts.map +1 -1
  134. package/dist/testing/mock-max.js +1 -1
  135. package/dist/testing/mock-max.js.map +1 -1
  136. package/dist/testing/sandbox.js +1 -0
  137. package/dist/testing/sandbox.js.map +1 -1
  138. package/dist/version.d.ts +1 -1
  139. package/dist/version.js +1 -1
  140. package/package.json +7 -3
  141. package/skills/max-cli/SKILL.md +14 -3
@@ -12,6 +12,8 @@ export const Opcode = {
12
12
  * home.
13
13
  */
14
14
  PROFILE: 16,
15
+ AUTH_REQUEST: 17,
16
+ AUTH: 18,
15
17
  LOGIN: 19,
16
18
  /**
17
19
  * **Declared, never sent.** `max session end` forgets the token locally and tells MAX nothing. Ending the session
@@ -42,5 +44,16 @@ export const Opcode = {
42
44
  MSG_DELETE: 66,
43
45
  VIDEO_PLAY: 83,
44
46
  FILE_DOWNLOAD: 88,
47
+ AUTH_LOGIN_CHECK_PASSWORD: 115,
48
+ MSG_REACTION: 178,
49
+ MSG_GET_REACTIONS: 180,
50
+ GET_QR: 288,
51
+ GET_QR_STATUS: 289,
52
+ /**
53
+ * **Declared, never sent.** The phone's side of a QR login: it lets whoever showed the code into the owner's
54
+ * account. A CLI logging itself in never approves anybody.
55
+ */
56
+ AUTH_QR_APPROVE: 290,
57
+ LOGIN_BY_QR: 291,
45
58
  };
46
59
  //# sourceMappingURL=opcodes.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opcodes.generated.js","sourceRoot":"","sources":["../../src/generated/opcodes.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,CAAC;IACf;;;;OAIG;IACH,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;IACT;;;OAGG;IACH,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB;;;;;OAKG;IACH,eAAe,EAAE,EAAE;IACnB,YAAY,EAAE,EAAE;IAChB;;;;OAIG;IACH,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,EAAE;IACZ;;;OAGG;IACH,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;CACT,CAAA"}
1
+ {"version":3,"file":"opcodes.generated.js","sourceRoot":"","sources":["../../src/generated/opcodes.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,YAAY,EAAE,CAAC;IACf;;;;OAIG;IACH,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT;;;OAGG;IACH,MAAM,EAAE,EAAE;IACV,YAAY,EAAE,EAAE;IAChB;;;;;OAKG;IACH,eAAe,EAAE,EAAE;IACnB,YAAY,EAAE,EAAE;IAChB;;;;OAIG;IACH,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,EAAE;IACZ;;;OAGG;IACH,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;IACjB,yBAAyB,EAAE,GAAG;IAC9B,YAAY,EAAE,GAAG;IACjB,iBAAiB,EAAE,GAAG;IACtB,MAAM,EAAE,GAAG;IACX,aAAa,EAAE,GAAG;IAClB;;;OAGG;IACH,eAAe,EAAE,GAAG;IACpB,WAAW,EAAE,GAAG;CACR,CAAA"}
@@ -35,6 +35,67 @@ export declare const OPERATIONS: {
35
35
  readonly config: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
36
36
  readonly videoChatHistory: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
37
37
  }, undefined>>;
38
+ readonly "login.qrRequest": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{}, undefined>, import("valibot").LooseObjectSchema<{
39
+ readonly qrLink: import("valibot").StringSchema<undefined>;
40
+ readonly trackId: import("valibot").StringSchema<undefined>;
41
+ readonly pollingInterval: import("valibot").NumberSchema<undefined>;
42
+ readonly expiresAt: import("valibot").NumberSchema<undefined>;
43
+ }, undefined>>;
44
+ readonly "login.qrStatus": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
45
+ readonly trackId: import("valibot").StringSchema<undefined>;
46
+ }, undefined>, import("valibot").LooseObjectSchema<{
47
+ readonly status: import("valibot").LooseObjectSchema<{
48
+ readonly expiresAt: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
49
+ readonly loginAvailable: import("valibot").OptionalSchema<import("valibot").BooleanSchema<undefined>, undefined>;
50
+ }, undefined>;
51
+ }, undefined>>;
52
+ readonly "login.byQr": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
53
+ readonly trackId: import("valibot").StringSchema<undefined>;
54
+ }, undefined>, import("valibot").LooseObjectSchema<{
55
+ tokenAttrs: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
56
+ readonly LOGIN: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
57
+ readonly token: import("valibot").StringSchema<undefined>;
58
+ }, undefined>, undefined>;
59
+ }, undefined>, undefined>;
60
+ passwordChallenge: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
61
+ readonly trackId: import("valibot").StringSchema<undefined>;
62
+ readonly hint: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
63
+ }, undefined>, undefined>;
64
+ }, undefined>>;
65
+ readonly "login.smsRequest": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
66
+ readonly phone: import("valibot").StringSchema<undefined>;
67
+ readonly type: import("valibot").LiteralSchema<"START_AUTH", undefined>;
68
+ readonly language: import("valibot").StringSchema<undefined>;
69
+ }, undefined>, import("valibot").LooseObjectSchema<{
70
+ readonly token: import("valibot").StringSchema<undefined>;
71
+ readonly codeLength: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
72
+ }, undefined>>;
73
+ readonly "login.smsCode": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
74
+ readonly token: import("valibot").StringSchema<undefined>;
75
+ readonly verifyCode: import("valibot").StringSchema<undefined>;
76
+ readonly authTokenType: import("valibot").LiteralSchema<"CHECK_CODE", undefined>;
77
+ }, undefined>, import("valibot").LooseObjectSchema<{
78
+ tokenAttrs: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
79
+ readonly LOGIN: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
80
+ readonly token: import("valibot").StringSchema<undefined>;
81
+ }, undefined>, undefined>;
82
+ }, undefined>, undefined>;
83
+ passwordChallenge: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
84
+ readonly trackId: import("valibot").StringSchema<undefined>;
85
+ readonly hint: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
86
+ }, undefined>, undefined>;
87
+ }, undefined>>;
88
+ readonly "login.password": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
89
+ readonly trackId: import("valibot").StringSchema<undefined>;
90
+ readonly password: import("valibot").StringSchema<undefined>;
91
+ }, undefined>, import("valibot").LooseObjectSchema<{
92
+ readonly tokenAttrs: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
93
+ readonly LOGIN: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{
94
+ readonly token: import("valibot").StringSchema<undefined>;
95
+ }, undefined>, undefined>;
96
+ }, undefined>, undefined>;
97
+ readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
98
+ }, undefined>>;
38
99
  readonly "contacts.info": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
39
100
  readonly contactIds: import("valibot").ArraySchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>, undefined>;
40
101
  }, undefined>, import("valibot").LooseObjectSchema<{
@@ -65,13 +126,37 @@ export declare const OPERATIONS: {
65
126
  readonly message: import("valibot").StrictObjectSchema<{
66
127
  readonly text: import("valibot").StringSchema<undefined>;
67
128
  readonly cid: import("valibot").SchemaWithPipe<readonly [import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>]>;
68
- readonly elements: import("valibot").ArraySchema<import("valibot").UnknownSchema, undefined>;
129
+ readonly elements: import("valibot").ArraySchema<import("valibot").StrictObjectSchema<{
130
+ readonly type: import("valibot").StringSchema<undefined>;
131
+ readonly from: import("valibot").NumberSchema<undefined>;
132
+ readonly length: import("valibot").NumberSchema<undefined>;
133
+ }, undefined>, undefined>;
69
134
  readonly attaches: import("valibot").ArraySchema<import("valibot").UnknownSchema, undefined>;
135
+ readonly link: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
136
+ readonly type: import("valibot").LiteralSchema<"REPLY", undefined>;
137
+ readonly messageId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
138
+ }, undefined>, undefined>;
70
139
  }, undefined>;
71
140
  readonly notify: import("valibot").BooleanSchema<undefined>;
72
141
  }, undefined>, import("valibot").LooseObjectSchema<{
73
142
  readonly message: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{}, undefined>, undefined>;
74
143
  }, undefined>>;
144
+ readonly "messages.react": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
145
+ readonly chatId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
146
+ readonly messageId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
147
+ readonly reaction: import("valibot").StrictObjectSchema<{
148
+ readonly reactionType: import("valibot").LiteralSchema<"EMOJI", undefined>;
149
+ readonly id: import("valibot").StringSchema<undefined>;
150
+ }, undefined>;
151
+ }, undefined>, import("valibot").LooseObjectSchema<{
152
+ readonly reactionInfo: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{}, undefined>, undefined>;
153
+ }, undefined>>;
154
+ readonly "messages.reactions": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
155
+ readonly chatId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
156
+ readonly messageIds: import("valibot").ArraySchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>, undefined>;
157
+ }, undefined>, import("valibot").LooseObjectSchema<{
158
+ readonly messagesReactions: import("valibot").OptionalSchema<import("valibot").LooseObjectSchema<{}, undefined>, undefined>;
159
+ }, undefined>>;
75
160
  readonly "attachments.video": import("../spec/define.js").Operation<import("valibot").StrictObjectSchema<{
76
161
  readonly chatId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
77
162
  readonly messageId: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").RegexAction<string, "an id is a whole number written as a string">, import("valibot").TransformAction<string, bigint>]>;
@@ -1 +1 @@
1
- {"version":3,"file":"operations.generated.d.ts","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAQA,yEAAyE;AACzE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASb,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAA"}
1
+ {"version":3,"file":"operations.generated.d.ts","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAgBA,yEAAyE;AACzE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBb,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAA"}
@@ -2,16 +2,25 @@
2
2
  import { attachmentsFile, attachmentsVideo } from "../spec/operations/attachments.js";
3
3
  import { chatsHistory, chatsList } from "../spec/operations/chats.js";
4
4
  import { contactsInfo } from "../spec/operations/contacts.js";
5
- import { messagesSend } from "../spec/operations/messages.js";
5
+ import { loginByQr, loginPassword, loginQrRequest, loginQrStatus, loginSmsCode, loginSmsRequest, } from "../spec/operations/login.js";
6
+ import { messagesReact, messagesReactions, messagesSend } from "../spec/operations/messages.js";
6
7
  import { sessionInit, sessionLogin } from "../spec/operations/session.js";
7
8
  /** Every operation that may be sent, by the name the client calls it. */
8
9
  export const OPERATIONS = {
9
10
  "session.init": sessionInit,
10
11
  "session.login": sessionLogin,
12
+ "login.qrRequest": loginQrRequest,
13
+ "login.qrStatus": loginQrStatus,
14
+ "login.byQr": loginByQr,
15
+ "login.smsRequest": loginSmsRequest,
16
+ "login.smsCode": loginSmsCode,
17
+ "login.password": loginPassword,
11
18
  "contacts.info": contactsInfo,
12
19
  "chats.history": chatsHistory,
13
20
  "chats.list": chatsList,
14
21
  "messages.send": messagesSend,
22
+ "messages.react": messagesReact,
23
+ "messages.reactions": messagesReactions,
15
24
  "attachments.video": attachmentsVideo,
16
25
  "attachments.file": attachmentsFile,
17
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"operations.generated.js","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,YAAY;IAC7B,mBAAmB,EAAE,gBAAgB;IACrC,kBAAkB,EAAE,eAAe;CAC3B,CAAA"}
1
+ {"version":3,"file":"operations.generated.js","sourceRoot":"","sources":["../../src/generated/operations.generated.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC/F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAEzE,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,WAAW;IAC3B,eAAe,EAAE,YAAY;IAC7B,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,aAAa;IAC/B,YAAY,EAAE,SAAS;IACvB,kBAAkB,EAAE,eAAe;IACnC,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,aAAa;IAC/B,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,aAAa;IAC/B,oBAAoB,EAAE,iBAAiB;IACvC,mBAAmB,EAAE,gBAAgB;IACrC,kBAAkB,EAAE,eAAe;CAC3B,CAAA"}
@@ -0,0 +1,18 @@
1
+ /** One span of markup, in UTF-16 positions over the text as sent — which is what JavaScript counts. */
2
+ export interface Markup {
3
+ type: string;
4
+ from: number;
5
+ length: number;
6
+ }
7
+ /**
8
+ * Markdown's inline marks, one level deep: the text inside a mark is kept as typed.
9
+ *
10
+ * ⚠ `_` and `*` open and close only at a word's edge, so `file_name_here` and `2*3*4` stay as they
11
+ * are — the case where turning Markdown on would otherwise change a message nobody meant to format.
12
+ * A backslash keeps the next character literal.
13
+ */
14
+ export declare const parseMarkdown: (input: string) => {
15
+ text: string;
16
+ markup: Markup[];
17
+ };
18
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAYD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CA2B7E,CAAA"}
@@ -0,0 +1,52 @@
1
+ const MARKERS = [
2
+ ["**", "STRONG"],
3
+ ["~~", "STRIKETHROUGH"],
4
+ ["`", "MONOSPACED"],
5
+ ["_", "EMPHASIZED"],
6
+ ["*", "EMPHASIZED"],
7
+ ];
8
+ const WORD = /[\p{L}\p{N}]/u;
9
+ /**
10
+ * Markdown's inline marks, one level deep: the text inside a mark is kept as typed.
11
+ *
12
+ * ⚠ `_` and `*` open and close only at a word's edge, so `file_name_here` and `2*3*4` stay as they
13
+ * are — the case where turning Markdown on would otherwise change a message nobody meant to format.
14
+ * A backslash keeps the next character literal.
15
+ */
16
+ export const parseMarkdown = (input) => {
17
+ let text = "";
18
+ const markup = [];
19
+ let index = 0;
20
+ while (index < input.length) {
21
+ const char = input[index];
22
+ if (char === "\\" && index + 1 < input.length) {
23
+ text += input[index + 1];
24
+ index += 2;
25
+ continue;
26
+ }
27
+ const found = MARKERS.find(([marker]) => input.startsWith(marker, index));
28
+ const span = found && closing(input, index, found[0]);
29
+ if (found && span !== undefined) {
30
+ const inner = input.slice(index + found[0].length, span);
31
+ markup.push({ type: found[1], from: text.length, length: inner.length });
32
+ text += inner;
33
+ index = span + found[0].length;
34
+ continue;
35
+ }
36
+ text += char;
37
+ index += 1;
38
+ }
39
+ return { text, markup };
40
+ };
41
+ const closing = (input, open, marker) => {
42
+ const start = open + marker.length;
43
+ const end = input.indexOf(marker, start);
44
+ if (end <= start || input.slice(start, end).includes("\n"))
45
+ return undefined;
46
+ if (marker === "_" || marker === "*") {
47
+ if (WORD.test(input[open - 1] ?? "") || WORD.test(input[end + 1] ?? ""))
48
+ return undefined;
49
+ }
50
+ return end;
51
+ };
52
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,GAAuB;IAClC,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,CAAC,IAAI,EAAE,eAAe,CAAC;IACvB,CAAC,GAAG,EAAE,YAAY,CAAC;IACnB,CAAC,GAAG,EAAE,YAAY,CAAC;IACnB,CAAC,GAAG,EAAE,YAAY,CAAC;CACpB,CAAA;AAED,MAAM,IAAI,GAAG,eAAe,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAsC,EAAE;IACjF,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAW,CAAA;QACnC,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YACxB,KAAK,IAAI,CAAC,CAAA;YACV,SAAQ;QACV,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QACzE,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YACxE,IAAI,IAAI,KAAK,CAAA;YACb,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAC9B,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,IAAI,CAAA;QACZ,KAAK,IAAI,CAAC,CAAA;IACZ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,MAAc,EAAsB,EAAE;IAClF,MAAM,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxC,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IAC5E,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAAE,OAAO,SAAS,CAAA;IAC3F,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -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;AAMnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,uBAAuB,CAAA;AASjE,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,OAuDjE,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;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"}
package/dist/program.js CHANGED
@@ -3,12 +3,17 @@ import { Command, CommanderError } from "commander";
3
3
  import { accountCommand } from "./commands/account.js";
4
4
  import { cacheCommand } from "./commands/cache.js";
5
5
  import { chatsCommand } from "./commands/chats.js";
6
+ import { commandsCommand } from "./commands/commands.js";
6
7
  import { configCommand } from "./commands/config.js";
7
8
  import { contactsCommand } from "./commands/contacts.js";
8
9
  import { provide } from "./commands/context.js";
9
10
  import { doctorCommand } from "./commands/doctor.js";
11
+ import { inboxCommand } from "./commands/inbox.js";
10
12
  import { messagesCommand } from "./commands/messages.js";
13
+ import { reactionsCommand } from "./commands/reactions.js";
14
+ import { recipientsCommand } from "./commands/recipients.js";
11
15
  import { runsCommand } from "./commands/runs.js";
16
+ import { sendsCommand } from "./commands/sends.js";
12
17
  import { sessionCommand } from "./commands/session.js";
13
18
  import { skillCommand } from "./commands/skill.js";
14
19
  import { commandWords, liftProfile } from "./profile.js";
@@ -47,11 +52,16 @@ export const createProgram = ({ out, err } = {}) => {
47
52
  program.addCommand(chatsCommand());
48
53
  program.addCommand(contactsCommand());
49
54
  program.addCommand(messagesCommand());
55
+ program.addCommand(reactionsCommand());
56
+ program.addCommand(recipientsCommand());
57
+ program.addCommand(sendsCommand());
58
+ program.addCommand(inboxCommand());
50
59
  program.addCommand(configCommand());
51
60
  program.addCommand(doctorCommand());
52
61
  program.addCommand(cacheCommand());
53
62
  program.addCommand(runsCommand());
54
63
  program.addCommand(skillCommand());
64
+ program.addCommand(commandsCommand());
55
65
  // Depth-first: Commander does not pass `configureOutput` down to a command added with
56
66
  // `addCommand`, so `max messages --help` would write to the real terminal while the top level
57
67
  // wrote to the injected streams — and a test reading stdout would see nothing at all.
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/rendering/messages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,OAAO,EAAE,UAAU,EAAiB,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1G,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AASD,eAAO,MAAM,cAAc,GACzB,UAAU,CAAC,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC,EAAE,EACpD,UAAS,aAAkB,KAC1B,MAcF,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO,GAAG,UAAU,GAAG,eAAe,EAAE,UAAS,aAAkB,KAAG,MA+C5G,CAAA"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/rendering/messages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,OAAO,EAAE,UAAU,EAA4B,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErH,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AASD,eAAO,MAAM,cAAc,GACzB,UAAU,CAAC,OAAO,GAAG,UAAU,GAAG,eAAe,CAAC,EAAE,EACpD,UAAS,aAAkB,KAC1B,MAcF,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO,GAAG,UAAU,GAAG,eAAe,EAAE,UAAS,aAAkB,KAAG,MAgD5G,CAAA"}
@@ -42,6 +42,8 @@ export const renderMessage = (message, options = {}) => {
42
42
  if (message.text)
43
43
  lines.push(...body(message.text));
44
44
  lines.push(...attachmentLines(message.attachments, paint, options));
45
+ if (message.reactions && message.reactions.total > 0)
46
+ lines.push(paint("dim", reactionLine(message.reactions)));
45
47
  if (message.editedAt)
46
48
  lines.push(paint("dim", `edited ${editedAt(message, options)}`));
47
49
  if (verbosity >= 1) {
@@ -129,6 +131,10 @@ const dayFormatter = ({ locale = "ru-RU", timeZone }) => {
129
131
  });
130
132
  return (iso) => format.format(new Date(iso)).replace(/\s*г\.$/, "");
131
133
  };
134
+ const reactionLine = ({ counts, mine }) => {
135
+ const shown = counts.map(({ reaction, count }) => `${reaction} ${count}`).join(" ");
136
+ return mine ? `${shown} (you: ${mine})` : shown;
137
+ };
132
138
  const editedAt = (message, options) => {
133
139
  const edited = message.editedAt ?? message.timestamp;
134
140
  const time = timeFormatter(options)(edited);
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/rendering/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAqBhC,MAAM,UAAU,GAAG,CAAC,CAAA;AACpB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;AACzC,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAU,CAAA;AAE7E,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAoD,EACpD,UAAyB,EAAE,EACnB,EAAE;IACV,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAA;IAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE9B,IAAI,QAA4B,CAAA;IAChC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAA;QACjE,QAAQ,GAAG,IAAI,CAAA;QACf,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA+C,EAAE,UAAyB,EAAE,EAAU,EAAE;IACpH,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IAClC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;IAExC,MAAM,IAAI,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpG,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9E,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;IACvG,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAE/E,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAClF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/E,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,OAAO,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IACnE,IAAI,OAAO,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAEtF,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,MAAM,GAA0C;YACpD,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;YACvB,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;YAC5B,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;YACxB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACjC,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YACzC,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACjF,CAAA;QACD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CACT,CAAC,UAAU,EAAE,KAAK,CAAC,EACnB,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAC5B,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAC3B,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC5B,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC9E,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CACvF,CAAA;QACH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IAChG,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACxG,CAAC,CAAA;AAED,MAAM,OAAO,GACX,CAAC,EAAE,KAAK,GAAG,KAAK,EAAiB,EAAE,EAAE,CACrC,CAAC,KAAY,EAAE,IAAY,EAAU,EAAE,CACrC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAEpE,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,OAAsB,EAAU,EAAE;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,OAAO,CAAA;IAChG,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAyD,EAAU,EAAE,CACnH,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,QAAQ,IAAI,SAAS,CAAC,CAAA;AAElE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAElH,+EAA+E;AAC/E,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAqB,EAAE,IAAY,EAAU,EAAE;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5G,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,MAAM,CAAC,EAAE,EAAE,CAAA;IACzF,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AACtE,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAG,CACtB,WAAyB,EACzB,KAAiC,EACjC,OAAsB,EACZ,EAAE;IACZ,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAuB,EAAE,EAAE,CACtD,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,GAAG,SAAS,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAA;IAElH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;IAC9C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAA;QAClE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;QAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QACvF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/F,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAC1C,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAA;AAE7G,MAAM,KAAK,GAAG,CAAC,MAA2B,EAAE,GAAW,EAAE,EAAE,CACzD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AAEjG,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAiB,EAAE,EAAE;IACpD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC9C,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,KAAK;QAChB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC,CAAA;IACF,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACnD,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE,CAAA;IACtC,CAAC,CAAA;AACH,CAAC,CAAA;AAED,4GAA4G;AAC5G,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAiB,EAAE,EAAE;IACrE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QAC7C,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,SAAS;QACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC,CAAA;IACF,OAAO,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,OAAsB,EAAU,EAAE;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAA;IACpD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;AACjF,CAAC,CAAA"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/rendering/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CacheStore } from "./cache/store.js";
2
+ import type { Chat, Contact } from "./domain/models.js";
3
+ export declare const isId: (reference: string) => boolean;
4
+ /**
5
+ * A name matched exactly first, then as a fragment — and **an ambiguous one is an error, not a
6
+ * guess**: sending to the wrong conversation is not undoable, so the caller is shown the
7
+ * candidates and asked to be specific.
8
+ */
9
+ export declare const pickChat: (reference: string, chats: Chat[]) => Chat;
10
+ /**
11
+ * As `pickChat`, over names and @usernames. Matched here rather than in SQL because SQLite's
12
+ * `lower()` folds ASCII only, and most of these names are Cyrillic.
13
+ */
14
+ export declare const pickPerson: (reference: string, cache: CacheStore) => Contact;
15
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAM,MAAM,oBAAoB,CAAA;AAE3D,eAAO,MAAM,IAAI,GAAI,WAAW,MAAM,KAAG,OAA2C,CAAA;AAEpF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,EAAE,OAAO,IAAI,EAAE,KAAG,IAe3D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,WAAW,MAAM,EAAE,OAAO,UAAU,KAAG,OAwBjE,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ export const isId = (reference) => /^-?\d+$/.test(reference.trim());
3
+ /**
4
+ * A name matched exactly first, then as a fragment — and **an ambiguous one is an error, not a
5
+ * guess**: sending to the wrong conversation is not undoable, so the caller is shown the
6
+ * candidates and asked to be specific.
7
+ */
8
+ export const pickChat = (reference, chats) => {
9
+ const wanted = reference.trim().toLowerCase();
10
+ const titled = chats.filter((chat) => chat.title !== null);
11
+ const exact = titled.filter((chat) => chat.title?.toLowerCase() === wanted);
12
+ const matches = exact.length > 0 ? exact : titled.filter((chat) => chat.title?.toLowerCase().includes(wanted));
13
+ if (matches.length === 1 && matches[0])
14
+ return matches[0];
15
+ if (matches.length === 0)
16
+ throw new CliError("not_found", `no chat matches "${reference}"`);
17
+ throw ambiguous(reference, "chats", matches.map((chat) => ({ id: chat.id, title: chat.title })), ({ title }) => String(title));
18
+ };
19
+ /**
20
+ * As `pickChat`, over names and @usernames. Matched here rather than in SQL because SQLite's
21
+ * `lower()` folds ASCII only, and most of these names are Cyrillic.
22
+ */
23
+ export const pickPerson = (reference, cache) => {
24
+ const trimmed = reference.trim();
25
+ if (isId(trimmed)) {
26
+ const known = cache.people.get(trimmed);
27
+ if (!known)
28
+ throw new CliError("not_found", `no person ${trimmed} in what this account has seen`);
29
+ return known;
30
+ }
31
+ const wanted = trimmed.replace(/^@/, "").toLowerCase();
32
+ const everyone = cache.people.page({ order: "name", limit: Number.MAX_SAFE_INTEGER, offset: 0 });
33
+ const fields = (person) => [person.name, person.username].filter(isPresent).map((one) => one.toLowerCase());
34
+ const exact = everyone.filter((person) => fields(person).includes(wanted));
35
+ const matches = exact.length > 0 ? exact : everyone.filter((person) => fields(person).some((one) => one.includes(wanted)));
36
+ if (matches.length === 1 && matches[0])
37
+ return matches[0];
38
+ if (matches.length === 0)
39
+ throw new CliError("not_found", `nobody matches "${reference}"`);
40
+ throw ambiguous(reference, "people", matches.map(({ id, name, username }) => ({ id, name, username })), ({ name, username }) => [name, username && `@${username}`].filter(isPresent).join(" "));
41
+ };
42
+ const ambiguous = (reference, what, candidates, label) => {
43
+ const width = Math.max(...candidates.map(({ id }) => id.length));
44
+ const lines = candidates.map((candidate) => ` ${candidate.id.padEnd(width)} ${label(candidate)}`).join("\n");
45
+ return new CliError("validation_error", `"${reference}" matches ${candidates.length} ${what} — name one by its id:\n${lines}`, { candidates });
46
+ };
47
+ const isPresent = (value) => value !== null && value !== undefined;
48
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Id } from "../domain/models.js";
2
+ import type { SendEntry, SendJournal, SendKind } from "./journal.js";
3
+ import type { RecipientList } from "./recipients.js";
4
+ /** What `MaxClient.messages.send` asks before it sends, and tells after — on every outcome. */
5
+ export interface SendGuard {
6
+ check(chatId: Id, kind?: SendKind): void;
7
+ record(entry: Omit<SendEntry, "at" | "profile">): void;
8
+ }
9
+ export interface SendGuardOptions {
10
+ profile: string;
11
+ readOnly: boolean;
12
+ /** Named in the refusal, so the owner can find what decided it. */
13
+ readOnlyFrom: string;
14
+ sendsPerHour: number;
15
+ journal: SendJournal;
16
+ recipients: RecipientList;
17
+ warn: (message: string) => void;
18
+ now?: () => Date;
19
+ }
20
+ /**
21
+ * These stop a model that was talked into sending by a message it read. They do **not** stop an
22
+ * agent that edits the configuration itself — that needs a boundary outside this process
23
+ * (`docs/security.md`).
24
+ */
25
+ export declare const sendGuard: ({ profile, readOnly, readOnlyFrom, sendsPerHour, journal, recipients, warn, now, }: SendGuardOptions) => SendGuard;
26
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/sends/guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD,+FAA+F;AAC/F,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACxC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;IACpB,UAAU,EAAE,aAAa,CAAA;IACzB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,oFASvB,gBAAgB,KAAG,SAoDpB,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ const HOUR_MS = 60 * 60 * 1000;
3
+ /**
4
+ * These stop a model that was talked into sending by a message it read. They do **not** stop an
5
+ * agent that edits the configuration itself — that needs a boundary outside this process
6
+ * (`docs/security.md`).
7
+ */
8
+ export const sendGuard = ({ profile, readOnly, readOnlyFrom, sendsPerHour, journal, recipients, warn, now = () => new Date(), }) => ({
9
+ check: (chatId, kind = "message") => {
10
+ if (readOnly) {
11
+ throw new CliError("permission_error", `profile ${profile} is read-only (readOnly, from the ${readOnlyFrom}) — it cannot send or react`);
12
+ }
13
+ const allowed = recipients.read();
14
+ if (allowed && !allowed.some((chat) => chat.id === chatId)) {
15
+ throw new CliError("confirmation_required", `chat ${chatId} is not on the recipient list of profile ${profile} — ` +
16
+ `the owner adds it with \`max ${profile} recipients add ${chatId}\``, { chatId });
17
+ }
18
+ // The limit is about messages, by the owner's ruling (`NEED-168`): a reaction wakes nobody up.
19
+ if (kind === "reaction")
20
+ return;
21
+ const since = now().getTime() - HOUR_MS;
22
+ const counted = journal
23
+ .entries()
24
+ .filter((entry) => entry.kind !== "reaction")
25
+ .filter((entry) => entry.outcome === "sent" || entry.outcome === "outcome_unknown")
26
+ .map((entry) => Date.parse(entry.at))
27
+ .filter((time) => time > since)
28
+ .sort((a, b) => a - b);
29
+ if (counted.length >= sendsPerHour) {
30
+ // The limit may have been lowered below what the last hour already holds.
31
+ const nextMs = (counted[counted.length - sendsPerHour] ?? 0) + HOUR_MS;
32
+ const next = new Date(nextMs).toISOString();
33
+ throw new CliError("rate_limited", `profile ${profile} has sent ${counted.length} messages in the last hour, and its limit is ` +
34
+ `${sendsPerHour} (sendsPerHour) — the next send is possible at ${next}`, { retryAfterMs: nextMs - now().getTime(), retryAt: next });
35
+ }
36
+ },
37
+ // After a send, a failure to write here must not become the command's answer: the message is
38
+ // already with a person, and an error would invite the caller to send it again.
39
+ record: (entry) => {
40
+ try {
41
+ journal.append({ at: now().toISOString(), profile, ...entry });
42
+ }
43
+ catch (error) {
44
+ warn(`this send is not in the send journal: ${error instanceof Error ? error.message : String(error)}`);
45
+ }
46
+ },
47
+ });
48
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/sends/guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Id } from "../domain/models.js";
2
+ export type SendOutcome = "sent" | "outcome_unknown" | "refused" | "failed";
3
+ /** Absent in the journal means a message: that is every line written before reactions were guarded. */
4
+ export type SendKind = "message" | "reaction";
5
+ /** One attempt to send. **Never the text** — only its length. */
6
+ export interface SendEntry {
7
+ at: string;
8
+ profile: string;
9
+ chatId: Id;
10
+ outcome: SendOutcome;
11
+ kind?: SendKind;
12
+ messageId?: Id;
13
+ cid?: number;
14
+ length?: number;
15
+ errorCode?: string;
16
+ }
17
+ /**
18
+ * `<state dir>/sends/<profile>.jsonl` — beside `runs`, never in the cache directory, so that
19
+ * `max cache clear` cannot erase what was sent in the owner's name (the reason of `NEED-51`).
20
+ */
21
+ export declare const sendsPathFor: (profile: string, env?: NodeJS.ProcessEnv) => string;
22
+ export declare class SendJournal {
23
+ readonly path: string;
24
+ constructor(path: string);
25
+ append(entry: SendEntry): void;
26
+ /** Oldest first. A line that does not parse is skipped: a torn last write must not block sending. */
27
+ entries(): SendEntry[];
28
+ }
29
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/sends/journal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE3E,uGAAuG;AACvG,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAE7C,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,EAAE,CAAA;IACV,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,SAAS,CAAC,EAAE,EAAE,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,MAAK,MAAM,CAAC,UAAwB,KAAG,MACc,CAAA;AAEnG,qBAAa,WAAW;IACV,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;IAEjC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAK9B,qGAAqG;IACrG,OAAO,IAAI,SAAS,EAAE;CAkBvB"}