@sympoies/dsh-telegram 0.0.0-bootstrap.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 (194) hide show
  1. package/LICENSE +1 -2
  2. package/NOTICE +19 -0
  3. package/README.md +589 -2
  4. package/cordis.patch.yml +14 -0
  5. package/lib/access.d.ts +76 -0
  6. package/lib/access.d.ts.map +1 -0
  7. package/lib/access.js +137 -0
  8. package/lib/access.js.map +1 -0
  9. package/lib/client.js +835 -0
  10. package/lib/commands.d.ts +51 -0
  11. package/lib/commands.d.ts.map +1 -0
  12. package/lib/commands.js +83 -0
  13. package/lib/commands.js.map +1 -0
  14. package/lib/config.d.ts +125 -0
  15. package/lib/config.d.ts.map +1 -0
  16. package/lib/config.js +97 -0
  17. package/lib/config.js.map +1 -0
  18. package/lib/diagnostics.d.ts +58 -0
  19. package/lib/diagnostics.d.ts.map +1 -0
  20. package/lib/diagnostics.js +59 -0
  21. package/lib/diagnostics.js.map +1 -0
  22. package/lib/failures.d.ts +71 -0
  23. package/lib/failures.d.ts.map +1 -0
  24. package/lib/failures.js +139 -0
  25. package/lib/failures.js.map +1 -0
  26. package/lib/harness/host.d.ts +106 -0
  27. package/lib/harness/host.d.ts.map +1 -0
  28. package/lib/harness/host.js +142 -0
  29. package/lib/harness/host.js.map +1 -0
  30. package/lib/harness/message.d.ts +45 -0
  31. package/lib/harness/message.d.ts.map +1 -0
  32. package/lib/harness/message.js +28 -0
  33. package/lib/harness/message.js.map +1 -0
  34. package/lib/harness/model-selection.d.ts +82 -0
  35. package/lib/harness/model-selection.d.ts.map +1 -0
  36. package/lib/harness/model-selection.js +103 -0
  37. package/lib/harness/model-selection.js.map +1 -0
  38. package/lib/harness/questions-seam.d.ts +34 -0
  39. package/lib/harness/questions-seam.d.ts.map +1 -0
  40. package/lib/harness/questions-seam.js +45 -0
  41. package/lib/harness/questions-seam.js.map +1 -0
  42. package/lib/harness/types.d.ts +108 -0
  43. package/lib/harness/types.d.ts.map +1 -0
  44. package/lib/harness/types.js +23 -0
  45. package/lib/harness/types.js.map +1 -0
  46. package/lib/index.d.ts +65 -0
  47. package/lib/index.d.ts.map +1 -0
  48. package/lib/index.js +977 -0
  49. package/lib/index.js.map +1 -0
  50. package/lib/interact/approvals.d.ts +59 -0
  51. package/lib/interact/approvals.d.ts.map +1 -0
  52. package/lib/interact/approvals.js +132 -0
  53. package/lib/interact/approvals.js.map +1 -0
  54. package/lib/interact/pending.d.ts +56 -0
  55. package/lib/interact/pending.d.ts.map +1 -0
  56. package/lib/interact/pending.js +89 -0
  57. package/lib/interact/pending.js.map +1 -0
  58. package/lib/interact/questions.d.ts +100 -0
  59. package/lib/interact/questions.d.ts.map +1 -0
  60. package/lib/interact/questions.js +255 -0
  61. package/lib/interact/questions.js.map +1 -0
  62. package/lib/interact/surface.d.ts +33 -0
  63. package/lib/interact/surface.d.ts.map +1 -0
  64. package/lib/interact/surface.js +39 -0
  65. package/lib/interact/surface.js.map +1 -0
  66. package/lib/interact/text-capture.d.ts +38 -0
  67. package/lib/interact/text-capture.d.ts.map +1 -0
  68. package/lib/interact/text-capture.js +75 -0
  69. package/lib/interact/text-capture.js.map +1 -0
  70. package/lib/media/collect.d.ts +157 -0
  71. package/lib/media/collect.d.ts.map +1 -0
  72. package/lib/media/collect.js +235 -0
  73. package/lib/media/collect.js.map +1 -0
  74. package/lib/media/extractor.d.ts +117 -0
  75. package/lib/media/extractor.d.ts.map +1 -0
  76. package/lib/media/extractor.js +207 -0
  77. package/lib/media/extractor.js.map +1 -0
  78. package/lib/media/intake.d.ts +57 -0
  79. package/lib/media/intake.d.ts.map +1 -0
  80. package/lib/media/intake.js +115 -0
  81. package/lib/media/intake.js.map +1 -0
  82. package/lib/media/limits.d.ts +69 -0
  83. package/lib/media/limits.d.ts.map +1 -0
  84. package/lib/media/limits.js +97 -0
  85. package/lib/media/limits.js.map +1 -0
  86. package/lib/media/ocr.d.ts +66 -0
  87. package/lib/media/ocr.d.ts.map +1 -0
  88. package/lib/media/ocr.js +131 -0
  89. package/lib/media/ocr.js.map +1 -0
  90. package/lib/media/screenshot.d.ts +57 -0
  91. package/lib/media/screenshot.d.ts.map +1 -0
  92. package/lib/media/screenshot.js +101 -0
  93. package/lib/media/screenshot.js.map +1 -0
  94. package/lib/media/vision.d.ts +60 -0
  95. package/lib/media/vision.d.ts.map +1 -0
  96. package/lib/media/vision.js +74 -0
  97. package/lib/media/vision.js.map +1 -0
  98. package/lib/render/clamp.d.ts +34 -0
  99. package/lib/render/clamp.d.ts.map +1 -0
  100. package/lib/render/clamp.js +65 -0
  101. package/lib/render/clamp.js.map +1 -0
  102. package/lib/render/escape.d.ts +15 -0
  103. package/lib/render/escape.d.ts.map +1 -0
  104. package/lib/render/escape.js +17 -0
  105. package/lib/render/escape.js.map +1 -0
  106. package/lib/reply/activity.d.ts +31 -0
  107. package/lib/reply/activity.d.ts.map +1 -0
  108. package/lib/reply/activity.js +88 -0
  109. package/lib/reply/activity.js.map +1 -0
  110. package/lib/reply/rich-stream.d.ts +173 -0
  111. package/lib/reply/rich-stream.d.ts.map +1 -0
  112. package/lib/reply/rich-stream.js +286 -0
  113. package/lib/reply/rich-stream.js.map +1 -0
  114. package/lib/reply/split-markdown.d.ts +21 -0
  115. package/lib/reply/split-markdown.d.ts.map +1 -0
  116. package/lib/reply/split-markdown.js +87 -0
  117. package/lib/reply/split-markdown.js.map +1 -0
  118. package/lib/reply/turn-bridge.d.ts +143 -0
  119. package/lib/reply/turn-bridge.d.ts.map +1 -0
  120. package/lib/reply/turn-bridge.js +182 -0
  121. package/lib/reply/turn-bridge.js.map +1 -0
  122. package/lib/router.d.ts +415 -0
  123. package/lib/router.d.ts.map +1 -0
  124. package/lib/router.js +663 -0
  125. package/lib/router.js.map +1 -0
  126. package/lib/secrets.d.ts +30 -0
  127. package/lib/secrets.d.ts.map +1 -0
  128. package/lib/secrets.js +51 -0
  129. package/lib/secrets.js.map +1 -0
  130. package/lib/session/bindings.d.ts +81 -0
  131. package/lib/session/bindings.d.ts.map +1 -0
  132. package/lib/session/bindings.js +170 -0
  133. package/lib/session/bindings.js.map +1 -0
  134. package/lib/session/history.d.ts +50 -0
  135. package/lib/session/history.d.ts.map +1 -0
  136. package/lib/session/history.js +127 -0
  137. package/lib/session/history.js.map +1 -0
  138. package/lib/session/models.d.ts +99 -0
  139. package/lib/session/models.d.ts.map +1 -0
  140. package/lib/session/models.js +123 -0
  141. package/lib/session/models.js.map +1 -0
  142. package/lib/session/permission.d.ts +83 -0
  143. package/lib/session/permission.d.ts.map +1 -0
  144. package/lib/session/permission.js +107 -0
  145. package/lib/session/permission.js.map +1 -0
  146. package/lib/session/picker.d.ts +49 -0
  147. package/lib/session/picker.d.ts.map +1 -0
  148. package/lib/session/picker.js +107 -0
  149. package/lib/session/picker.js.map +1 -0
  150. package/lib/session/preferences.d.ts +55 -0
  151. package/lib/session/preferences.d.ts.map +1 -0
  152. package/lib/session/preferences.js +102 -0
  153. package/lib/session/preferences.js.map +1 -0
  154. package/lib/session/recovery.d.ts +66 -0
  155. package/lib/session/recovery.d.ts.map +1 -0
  156. package/lib/session/recovery.js +112 -0
  157. package/lib/session/recovery.js.map +1 -0
  158. package/lib/session/runner.d.ts +223 -0
  159. package/lib/session/runner.d.ts.map +1 -0
  160. package/lib/session/runner.js +260 -0
  161. package/lib/session/runner.js.map +1 -0
  162. package/lib/session/workspaces.d.ts +28 -0
  163. package/lib/session/workspaces.d.ts.map +1 -0
  164. package/lib/session/workspaces.js +53 -0
  165. package/lib/session/workspaces.js.map +1 -0
  166. package/lib/telegram/addressing.d.ts +39 -0
  167. package/lib/telegram/addressing.d.ts.map +1 -0
  168. package/lib/telegram/addressing.js +81 -0
  169. package/lib/telegram/addressing.js.map +1 -0
  170. package/lib/telegram/albums.d.ts +46 -0
  171. package/lib/telegram/albums.d.ts.map +1 -0
  172. package/lib/telegram/albums.js +104 -0
  173. package/lib/telegram/albums.js.map +1 -0
  174. package/lib/telegram/api.d.ts +238 -0
  175. package/lib/telegram/api.d.ts.map +1 -0
  176. package/lib/telegram/api.js +518 -0
  177. package/lib/telegram/api.js.map +1 -0
  178. package/lib/telegram/poller.d.ts +59 -0
  179. package/lib/telegram/poller.d.ts.map +1 -0
  180. package/lib/telegram/poller.js +94 -0
  181. package/lib/telegram/poller.js.map +1 -0
  182. package/lib/telegram/types.d.ts +130 -0
  183. package/lib/telegram/types.d.ts.map +1 -0
  184. package/lib/telegram/types.js +9 -0
  185. package/lib/telegram/types.js.map +1 -0
  186. package/lib/telegram/typing.d.ts +47 -0
  187. package/lib/telegram/typing.d.ts.map +1 -0
  188. package/lib/telegram/typing.js +91 -0
  189. package/lib/telegram/typing.js.map +1 -0
  190. package/lib/versions.d.ts +63 -0
  191. package/lib/versions.d.ts.map +1 -0
  192. package/lib/versions.js +135 -0
  193. package/lib/versions.js.map +1 -0
  194. package/package.json +94 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The one place that knows what must never be written down.
3
+ *
4
+ * A bot token reaches further than the code that uses it. It sits in every
5
+ * request URL, so a network library that quotes the URL in an error — undici
6
+ * does — hands the token to whatever catches that error: a log, a status file,
7
+ * a message posted back into the chat. Each of those is a different module,
8
+ * and asking each to remember the token would mean each can forget.
9
+ *
10
+ * So the token is registered once and every outbound text passes through here.
11
+ */
12
+ export declare class SecretRegistry {
13
+ private readonly secrets;
14
+ /**
15
+ * Register a value that must never appear in text this plugin emits.
16
+ *
17
+ * @param secret - the raw value; ignored when too short to redact safely.
18
+ */
19
+ protect(secret: string | undefined): void;
20
+ /**
21
+ * Strip every registered secret from a string.
22
+ *
23
+ * @param text - anything bound for a log, a file, or a chat.
24
+ * @returns the same text with each secret replaced by a marker.
25
+ */
26
+ redact(text: string): string;
27
+ /** A bound redactor, for passing to a module that should not hold the registry. */
28
+ redactor(): (text: string) => string;
29
+ }
30
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAMzC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM5B,mFAAmF;IACnF,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;CAGrC"}
package/lib/secrets.js ADDED
@@ -0,0 +1,51 @@
1
+ /**
2
+ * The one place that knows what must never be written down.
3
+ *
4
+ * A bot token reaches further than the code that uses it. It sits in every
5
+ * request URL, so a network library that quotes the URL in an error — undici
6
+ * does — hands the token to whatever catches that error: a log, a status file,
7
+ * a message posted back into the chat. Each of those is a different module,
8
+ * and asking each to remember the token would mean each can forget.
9
+ *
10
+ * So the token is registered once and every outbound text passes through here.
11
+ */
12
+ /**
13
+ * Shortest secret worth stripping.
14
+ *
15
+ * Redacting a short string would mangle ordinary text — and redacting the
16
+ * empty string would insert a marker between every character — so anything
17
+ * below this is refused rather than trusted to be harmless.
18
+ */
19
+ const MIN_SECRET_LENGTH = 8;
20
+ export class SecretRegistry {
21
+ secrets = new Set();
22
+ /**
23
+ * Register a value that must never appear in text this plugin emits.
24
+ *
25
+ * @param secret - the raw value; ignored when too short to redact safely.
26
+ */
27
+ protect(secret) {
28
+ if (secret === undefined)
29
+ return;
30
+ if (secret.length < MIN_SECRET_LENGTH)
31
+ return;
32
+ this.secrets.add(secret);
33
+ }
34
+ /**
35
+ * Strip every registered secret from a string.
36
+ *
37
+ * @param text - anything bound for a log, a file, or a chat.
38
+ * @returns the same text with each secret replaced by a marker.
39
+ */
40
+ redact(text) {
41
+ let safe = text;
42
+ for (const secret of this.secrets)
43
+ safe = safe.split(secret).join('<redacted>');
44
+ return safe;
45
+ }
46
+ /** A bound redactor, for passing to a module that should not hold the registry. */
47
+ redactor() {
48
+ return (text) => this.redact(text);
49
+ }
50
+ }
51
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,MAAM,OAAO,cAAc;IACR,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IAE5C;;;;OAIG;IACH,OAAO,CAAC,MAA0B;QAChC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB;YAAE,OAAM;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAY;QACjB,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,mFAAmF;IACnF,QAAQ;QACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;CACF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Which harness session each Telegram conversation is talking to.
3
+ *
4
+ * This mapping has to outlive the process: a user who messages the bot on
5
+ * Monday and again on Tuesday expects the same conversation, and the harness
6
+ * can resume the session from its log — but only if we still remember which
7
+ * session id belonged to that chat.
8
+ *
9
+ * The reverse direction matters just as much. When the agent asks a question,
10
+ * all we have is a session id, and we need the chat to ask in. So both
11
+ * directions are indexed, and every mutation keeps them consistent.
12
+ *
13
+ * A group's forum topics are separate conversations: the same chat id with a
14
+ * different thread id gets its own session, because that is how the people in
15
+ * the group are already using it.
16
+ */
17
+ import type { ChatTarget } from '../interact/surface.js';
18
+ /** One remembered conversation. */
19
+ export interface Binding {
20
+ readonly chatId: string;
21
+ readonly threadId?: number;
22
+ readonly sessionId: string;
23
+ readonly createdAt: number;
24
+ readonly updatedAt: number;
25
+ /**
26
+ * Whether this session's log carries an image.
27
+ *
28
+ * A provider checks the WHOLE request history for images, not just the new
29
+ * message, so one image makes every later turn fail on a model that cannot
30
+ * see. The flag is durable because that fact outlives the process: after a
31
+ * restart the conversation must still be routed somewhere that can read it.
32
+ */
33
+ readonly hasImages?: boolean;
34
+ }
35
+ export declare class BindingStore {
36
+ private readonly file;
37
+ /** Keyed by conversation key; the durable form. */
38
+ private bindings;
39
+ /** Session id → conversation key; derived, rebuilt on every mutation. */
40
+ private bySession;
41
+ private constructor();
42
+ /**
43
+ * Load the store, or start empty when there is nothing readable yet.
44
+ *
45
+ * A corrupt file is not fatal: losing the mapping costs the user their
46
+ * conversation continuity, while refusing to start costs them the bot.
47
+ *
48
+ * @param file - absolute path to the JSON document.
49
+ */
50
+ static open(file: string): Promise<BindingStore>;
51
+ /** The binding for a conversation, if it has one. */
52
+ forChat(target: ChatTarget): Binding | undefined;
53
+ /** The conversation a session belongs to, if any. */
54
+ forSession(sessionId: string): ChatTarget | undefined;
55
+ /** Every remembered conversation. */
56
+ list(): Binding[];
57
+ /**
58
+ * Bind a conversation to a session, replacing any previous binding.
59
+ *
60
+ * @param target - the conversation.
61
+ * @param sessionId - the harness session it now talks to.
62
+ */
63
+ bind(target: ChatTarget, sessionId: string): Promise<void>;
64
+ /**
65
+ * Record that this conversation's session log now carries an image.
66
+ *
67
+ * @param target - the conversation.
68
+ */
69
+ markImages(target: ChatTarget): Promise<void>;
70
+ /**
71
+ * Forget a conversation's binding, so its next message starts fresh.
72
+ *
73
+ * @param target - the conversation to forget.
74
+ */
75
+ unbind(target: ChatTarget): Promise<void>;
76
+ /** Swap in a new binding set and rebuild the session index from it. */
77
+ private replaceAll;
78
+ /** Write the document atomically, so a crash cannot leave a half file. */
79
+ private persist;
80
+ }
81
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/session/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAExD,mCAAmC;AACnC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,YAAY;IAMH,OAAO,CAAC,QAAQ,CAAC,IAAI;IALzC,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,yEAAyE;IACzE,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO;IAEP;;;;;;;OAOG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMtD,qDAAqD;IACrD,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;IAIhD,qDAAqD;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAWrD,qCAAqC;IACrC,IAAI,IAAI,OAAO,EAAE;IAIjB;;;;;OAKG;IACG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhE;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,uEAAuE;IACvE,OAAO,CAAC,UAAU;IAKlB,0EAA0E;YAC5D,OAAO;CAQtB"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Which harness session each Telegram conversation is talking to.
3
+ *
4
+ * This mapping has to outlive the process: a user who messages the bot on
5
+ * Monday and again on Tuesday expects the same conversation, and the harness
6
+ * can resume the session from its log — but only if we still remember which
7
+ * session id belonged to that chat.
8
+ *
9
+ * The reverse direction matters just as much. When the agent asks a question,
10
+ * all we have is a session id, and we need the chat to ask in. So both
11
+ * directions are indexed, and every mutation keeps them consistent.
12
+ *
13
+ * A group's forum topics are separate conversations: the same chat id with a
14
+ * different thread id gets its own session, because that is how the people in
15
+ * the group are already using it.
16
+ */
17
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
18
+ import { dirname } from 'node:path';
19
+ export class BindingStore {
20
+ file;
21
+ /** Keyed by conversation key; the durable form. */
22
+ bindings = new Map();
23
+ /** Session id → conversation key; derived, rebuilt on every mutation. */
24
+ bySession = new Map();
25
+ constructor(file) {
26
+ this.file = file;
27
+ }
28
+ /**
29
+ * Load the store, or start empty when there is nothing readable yet.
30
+ *
31
+ * A corrupt file is not fatal: losing the mapping costs the user their
32
+ * conversation continuity, while refusing to start costs them the bot.
33
+ *
34
+ * @param file - absolute path to the JSON document.
35
+ */
36
+ static async open(file) {
37
+ const store = new BindingStore(file);
38
+ store.replaceAll(await readBindings(file));
39
+ return store;
40
+ }
41
+ /** The binding for a conversation, if it has one. */
42
+ forChat(target) {
43
+ return this.bindings.get(keyOf(target));
44
+ }
45
+ /** The conversation a session belongs to, if any. */
46
+ forSession(sessionId) {
47
+ const key = this.bySession.get(sessionId);
48
+ const binding = key === undefined ? undefined : this.bindings.get(key);
49
+ if (!binding)
50
+ return undefined;
51
+ return {
52
+ chatId: binding.chatId,
53
+ ...(binding.threadId !== undefined ? { threadId: binding.threadId } : {}),
54
+ };
55
+ }
56
+ /** Every remembered conversation. */
57
+ list() {
58
+ return [...this.bindings.values()];
59
+ }
60
+ /**
61
+ * Bind a conversation to a session, replacing any previous binding.
62
+ *
63
+ * @param target - the conversation.
64
+ * @param sessionId - the harness session it now talks to.
65
+ */
66
+ async bind(target, sessionId) {
67
+ const key = keyOf(target);
68
+ const now = Date.now();
69
+ const previous = this.bindings.get(key);
70
+ const next = new Map(this.bindings);
71
+ next.set(key, {
72
+ chatId: target.chatId,
73
+ ...(target.threadId !== undefined ? { threadId: target.threadId } : {}),
74
+ sessionId,
75
+ createdAt: previous?.createdAt ?? now,
76
+ updatedAt: now,
77
+ });
78
+ this.replaceAll(next);
79
+ await this.persist();
80
+ }
81
+ /**
82
+ * Record that this conversation's session log now carries an image.
83
+ *
84
+ * @param target - the conversation.
85
+ */
86
+ async markImages(target) {
87
+ const key = keyOf(target);
88
+ const binding = this.bindings.get(key);
89
+ if (!binding || binding.hasImages)
90
+ return;
91
+ const next = new Map(this.bindings);
92
+ next.set(key, { ...binding, hasImages: true, updatedAt: Date.now() });
93
+ this.replaceAll(next);
94
+ await this.persist();
95
+ }
96
+ /**
97
+ * Forget a conversation's binding, so its next message starts fresh.
98
+ *
99
+ * @param target - the conversation to forget.
100
+ */
101
+ async unbind(target) {
102
+ const next = new Map(this.bindings);
103
+ if (!next.delete(keyOf(target)))
104
+ return;
105
+ this.replaceAll(next);
106
+ await this.persist();
107
+ }
108
+ /** Swap in a new binding set and rebuild the session index from it. */
109
+ replaceAll(bindings) {
110
+ this.bindings = new Map(bindings);
111
+ this.bySession = new Map([...bindings].map(([key, binding]) => [binding.sessionId, key]));
112
+ }
113
+ /** Write the document atomically, so a crash cannot leave a half file. */
114
+ async persist() {
115
+ const document = Object.fromEntries(this.bindings);
116
+ const temporary = `${this.file}.${process.pid}.tmp`;
117
+ await mkdir(dirname(this.file), { recursive: true });
118
+ await writeFile(temporary, `${JSON.stringify(document, undefined, 2)}\n`, 'utf8');
119
+ await rename(temporary, this.file);
120
+ }
121
+ }
122
+ /** The durable key for one conversation; a forum topic is its own conversation. */
123
+ function keyOf(target) {
124
+ return target.threadId === undefined ? target.chatId : `${target.chatId}#${target.threadId}`;
125
+ }
126
+ /** Read and validate the document, keeping only entries with a usable shape. */
127
+ async function readBindings(file) {
128
+ const bindings = new Map();
129
+ let raw;
130
+ try {
131
+ raw = await readFile(file, 'utf8');
132
+ }
133
+ catch {
134
+ return bindings;
135
+ }
136
+ let parsed;
137
+ try {
138
+ parsed = JSON.parse(raw);
139
+ }
140
+ catch {
141
+ return bindings;
142
+ }
143
+ if (typeof parsed !== 'object' || parsed === null)
144
+ return bindings;
145
+ for (const [key, value] of Object.entries(parsed)) {
146
+ const binding = asBinding(value);
147
+ if (binding)
148
+ bindings.set(key, binding);
149
+ }
150
+ return bindings;
151
+ }
152
+ /** Narrow one stored entry, or reject it. */
153
+ function asBinding(value) {
154
+ if (typeof value !== 'object' || value === null)
155
+ return undefined;
156
+ const record = value;
157
+ if (typeof record.chatId !== 'string' || typeof record.sessionId !== 'string')
158
+ return undefined;
159
+ if (record.threadId !== undefined && typeof record.threadId !== 'number')
160
+ return undefined;
161
+ return {
162
+ chatId: record.chatId,
163
+ ...(typeof record.threadId === 'number' ? { threadId: record.threadId } : {}),
164
+ sessionId: record.sessionId,
165
+ createdAt: typeof record.createdAt === 'number' ? record.createdAt : Date.now(),
166
+ updatedAt: typeof record.updatedAt === 'number' ? record.updatedAt : Date.now(),
167
+ ...(record.hasImages === true ? { hasImages: true } : {}),
168
+ };
169
+ }
170
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/session/bindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * The conversations a chat has had, so one can be picked up again.
3
+ *
4
+ * `/new` is otherwise a one-way door: the harness keeps every session's log,
5
+ * but the binding that named it is replaced, and from a phone there is no
6
+ * other way back. Someone who starts a fresh conversation to ask one quick
7
+ * thing loses the one they were in the middle of.
8
+ *
9
+ * Kept by this plugin rather than read from the harness's own session index,
10
+ * because the question is "which conversations happened in THIS chat" — a
11
+ * Telegram fact the harness does not record. The index would also mix in every
12
+ * session from the web UI, which is not what anyone means by "my
13
+ * conversations" when they ask from Telegram.
14
+ */
15
+ import type { ChatTarget } from '../interact/surface.js';
16
+ /** One past conversation. */
17
+ export interface PastSession {
18
+ readonly sessionId: string;
19
+ readonly startedAt: number;
20
+ readonly cwd: string;
21
+ /** The opening words, so the list is readable at a glance. */
22
+ readonly label?: string;
23
+ }
24
+ export declare class ChatHistory {
25
+ private readonly file;
26
+ private entries;
27
+ private constructor();
28
+ /**
29
+ * Load the history, or start empty when there is nothing readable yet.
30
+ *
31
+ * @param file - absolute path to the JSON document.
32
+ */
33
+ static open(file: string): Promise<ChatHistory>;
34
+ /** What this chat has talked to, newest first. */
35
+ forChat(target: ChatTarget): readonly PastSession[];
36
+ /**
37
+ * Record a conversation, or refresh the label of one already known.
38
+ *
39
+ * @param target - the conversation's chat.
40
+ * @param session - the session, and what it opened with.
41
+ */
42
+ remember(target: ChatTarget, session: PastSession): Promise<void>;
43
+ /** Forget one conversation — its log is gone, or it could not be resumed. */
44
+ forget(target: ChatTarget, sessionId: string): Promise<void>;
45
+ /** Write the document atomically, so a crash cannot leave a half file. */
46
+ private persist;
47
+ }
48
+ /** Cut a label to length, marking that it was cut. */
49
+ export declare function clip(text: string): string;
50
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAQxD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,WAAW;IAGF,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFzC,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO;IAEP;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMrD,kDAAkD;IAClD,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,WAAW,EAAE;IAInD;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvE,6EAA6E;IACvE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE,0EAA0E;YAC5D,OAAO;CAQtB;AAED,sDAAsD;AACtD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * The conversations a chat has had, so one can be picked up again.
3
+ *
4
+ * `/new` is otherwise a one-way door: the harness keeps every session's log,
5
+ * but the binding that named it is replaced, and from a phone there is no
6
+ * other way back. Someone who starts a fresh conversation to ask one quick
7
+ * thing loses the one they were in the middle of.
8
+ *
9
+ * Kept by this plugin rather than read from the harness's own session index,
10
+ * because the question is "which conversations happened in THIS chat" — a
11
+ * Telegram fact the harness does not record. The index would also mix in every
12
+ * session from the web UI, which is not what anyone means by "my
13
+ * conversations" when they ask from Telegram.
14
+ */
15
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
16
+ import { dirname } from 'node:path';
17
+ /** How many conversations to remember per chat. */
18
+ const KEEP = 20;
19
+ /** Longest label kept; a first message can be a whole stack trace. */
20
+ const MAX_LABEL = 60;
21
+ export class ChatHistory {
22
+ file;
23
+ entries = new Map();
24
+ constructor(file) {
25
+ this.file = file;
26
+ }
27
+ /**
28
+ * Load the history, or start empty when there is nothing readable yet.
29
+ *
30
+ * @param file - absolute path to the JSON document.
31
+ */
32
+ static async open(file) {
33
+ const history = new ChatHistory(file);
34
+ history.entries = await read(file);
35
+ return history;
36
+ }
37
+ /** What this chat has talked to, newest first. */
38
+ forChat(target) {
39
+ return this.entries.get(keyOf(target)) ?? [];
40
+ }
41
+ /**
42
+ * Record a conversation, or refresh the label of one already known.
43
+ *
44
+ * @param target - the conversation's chat.
45
+ * @param session - the session, and what it opened with.
46
+ */
47
+ async remember(target, session) {
48
+ const key = keyOf(target);
49
+ const existing = this.entries.get(key) ?? [];
50
+ const label = session.label === undefined ? undefined : clip(session.label);
51
+ const known = existing.find((entry) => entry.sessionId === session.sessionId);
52
+ // A session already at the head with the same label is the common case —
53
+ // every message after the first — and rewriting the file for it would turn
54
+ // one conversation into a stream of disk writes.
55
+ if (known?.label === label && existing[0]?.sessionId === session.sessionId)
56
+ return;
57
+ // A label is only taken once: the opening words identify a conversation,
58
+ // and replacing them with the latest message would make the list churn.
59
+ const kept = known?.label ?? label;
60
+ const entry = {
61
+ sessionId: session.sessionId,
62
+ startedAt: known?.startedAt ?? session.startedAt,
63
+ cwd: session.cwd,
64
+ ...(kept === undefined ? {} : { label: kept }),
65
+ };
66
+ const next = new Map(this.entries);
67
+ next.set(key, [entry, ...existing.filter((item) => item.sessionId !== entry.sessionId)].slice(0, KEEP));
68
+ this.entries = next;
69
+ await this.persist();
70
+ }
71
+ /** Forget one conversation — its log is gone, or it could not be resumed. */
72
+ async forget(target, sessionId) {
73
+ const key = keyOf(target);
74
+ const existing = this.entries.get(key);
75
+ if (!existing?.some((entry) => entry.sessionId === sessionId))
76
+ return;
77
+ const next = new Map(this.entries);
78
+ next.set(key, existing.filter((entry) => entry.sessionId !== sessionId));
79
+ this.entries = next;
80
+ await this.persist();
81
+ }
82
+ /** Write the document atomically, so a crash cannot leave a half file. */
83
+ async persist() {
84
+ const document = Object.fromEntries(this.entries);
85
+ const temporary = `${this.file}.${process.pid}.tmp`;
86
+ await mkdir(dirname(this.file), { recursive: true });
87
+ await writeFile(temporary, `${JSON.stringify(document, undefined, 2)}\n`, 'utf8');
88
+ await rename(temporary, this.file);
89
+ }
90
+ }
91
+ /** Cut a label to length, marking that it was cut. */
92
+ export function clip(text) {
93
+ const line = text.replace(/\s+/g, ' ').trim();
94
+ if (line.length <= MAX_LABEL)
95
+ return line;
96
+ return `${line.slice(0, MAX_LABEL - 1)}…`;
97
+ }
98
+ /** The durable key for one conversation; a forum topic is its own conversation. */
99
+ function keyOf(target) {
100
+ return target.threadId === undefined ? target.chatId : `${target.chatId}#${target.threadId}`;
101
+ }
102
+ /** Read the document, keeping only entries with a usable shape. */
103
+ async function read(file) {
104
+ const entries = new Map();
105
+ let parsed;
106
+ try {
107
+ parsed = JSON.parse(await readFile(file, 'utf8'));
108
+ }
109
+ catch {
110
+ return entries;
111
+ }
112
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
113
+ return entries;
114
+ for (const [key, value] of Object.entries(parsed)) {
115
+ if (!Array.isArray(value))
116
+ continue;
117
+ const sessions = value.filter((entry) => typeof entry === 'object' &&
118
+ entry !== null &&
119
+ typeof entry.sessionId === 'string' &&
120
+ typeof entry.startedAt === 'number' &&
121
+ typeof entry.cwd === 'string');
122
+ if (sessions.length > 0)
123
+ entries.set(key, sessions.slice(0, KEEP));
124
+ }
125
+ return entries;
126
+ }
127
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/session/history.ts"],"names":[],"mappings":"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"}