autodev-cli 1.4.0 → 1.4.3

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 (237) hide show
  1. package/bin/autodev.js +0 -0
  2. package/out/agentBackup/archive.d.ts +44 -0
  3. package/out/agentBackup/archive.js +131 -0
  4. package/out/agentBackup/archive.js.map +1 -0
  5. package/out/agentBackup/export.d.ts +18 -0
  6. package/out/agentBackup/export.js +92 -0
  7. package/out/agentBackup/export.js.map +1 -0
  8. package/out/agentBackup/import.d.ts +21 -0
  9. package/out/agentBackup/import.js +40 -0
  10. package/out/agentBackup/import.js.map +1 -0
  11. package/out/agentBackup/index.d.ts +6 -0
  12. package/out/agentBackup/index.js +11 -0
  13. package/out/agentBackup/index.js.map +1 -0
  14. package/out/agentBackup/layout.d.ts +30 -0
  15. package/out/agentBackup/layout.js +126 -0
  16. package/out/agentBackup/layout.js.map +1 -0
  17. package/out/agentBackup/manifest.d.ts +24 -0
  18. package/out/agentBackup/manifest.js +70 -0
  19. package/out/agentBackup/manifest.js.map +1 -0
  20. package/out/agentBackup/opencodeDb.d.ts +20 -0
  21. package/out/agentBackup/opencodeDb.js +213 -0
  22. package/out/agentBackup/opencodeDb.js.map +1 -0
  23. package/out/agentBackup/sessionProviders.d.ts +35 -0
  24. package/out/agentBackup/sessionProviders.js +263 -0
  25. package/out/agentBackup/sessionProviders.js.map +1 -0
  26. package/out/agentBackup/upload.d.ts +9 -0
  27. package/out/agentBackup/upload.js +121 -0
  28. package/out/agentBackup/upload.js.map +1 -0
  29. package/out/cli.d.ts +1 -0
  30. package/out/cli.js +8 -0
  31. package/out/cli.js.map +1 -1
  32. package/out/cliExit.d.ts +34 -0
  33. package/out/cliExit.js +159 -0
  34. package/out/cliExit.js.map +1 -0
  35. package/out/commands/config.d.ts +2 -0
  36. package/out/commands/config.js +7 -7
  37. package/out/commands/config.js.map +1 -1
  38. package/out/commands/connect.d.ts +2 -0
  39. package/out/commands/connect.js +11 -0
  40. package/out/commands/connect.js.map +1 -1
  41. package/out/commands/export.d.ts +2 -0
  42. package/out/commands/export.js +79 -0
  43. package/out/commands/export.js.map +1 -0
  44. package/out/commands/import.d.ts +2 -0
  45. package/out/commands/import.js +92 -0
  46. package/out/commands/import.js.map +1 -0
  47. package/out/commands/init.d.ts +16 -0
  48. package/out/commands/init.js +9 -5
  49. package/out/commands/init.js.map +1 -1
  50. package/out/commands/resume.d.ts +2 -0
  51. package/out/commands/resume.js +65 -0
  52. package/out/commands/resume.js.map +1 -0
  53. package/out/commands/sessions.d.ts +2 -0
  54. package/out/commands/sessions.js +64 -0
  55. package/out/commands/sessions.js.map +1 -0
  56. package/out/commands/start.d.ts +2 -0
  57. package/out/commands/start.js +40 -7
  58. package/out/commands/start.js.map +1 -1
  59. package/out/commands/status.d.ts +2 -0
  60. package/out/commands/status.js +3 -3
  61. package/out/commands/status.js.map +1 -1
  62. package/out/commands/tailOutput.d.ts +12 -0
  63. package/out/commands/up.d.ts +3 -0
  64. package/out/configManager.d.ts +42 -0
  65. package/out/configManager.js +430 -0
  66. package/out/configManager.js.map +1 -0
  67. package/out/connect.d.ts +4 -0
  68. package/out/connect.js +7 -7
  69. package/out/connect.js.map +1 -1
  70. package/out/core/adapters.d.ts +34 -0
  71. package/out/core/adapters.js +84 -0
  72. package/out/core/adapters.js.map +1 -0
  73. package/out/core/commandHelpers.d.ts +12 -0
  74. package/out/core/commandHelpers.js +96 -0
  75. package/out/core/commandHelpers.js.map +1 -0
  76. package/out/core/projectMcp.d.ts +25 -0
  77. package/out/core/projectMcp.js +144 -0
  78. package/out/core/projectMcp.js.map +1 -0
  79. package/out/core/provider/BaseProvider.d.ts +14 -0
  80. package/out/core/provider/BaseProvider.js +25 -0
  81. package/out/core/provider/BaseProvider.js.map +1 -0
  82. package/out/core/provider/ProviderRegistry.d.ts +12 -0
  83. package/out/core/provider/ProviderRegistry.js +40 -0
  84. package/out/core/provider/ProviderRegistry.js.map +1 -0
  85. package/out/core/provider/contract.d.ts +62 -0
  86. package/out/core/provider/contract.js +9 -0
  87. package/out/core/provider/contract.js.map +1 -0
  88. package/out/core/provider/implementations.d.ts +54 -0
  89. package/out/core/provider/implementations.js +147 -0
  90. package/out/core/provider/implementations.js.map +1 -0
  91. package/out/core/settingsLoader.d.ts +221 -0
  92. package/out/core/settingsLoader.js +176 -0
  93. package/out/core/settingsLoader.js.map +1 -0
  94. package/out/discordGateway.d.ts +26 -0
  95. package/out/discordGateway.js +230 -0
  96. package/out/discordGateway.js.map +1 -0
  97. package/out/discordPoller.d.ts +28 -0
  98. package/out/discordPoller.js +247 -0
  99. package/out/discordPoller.js.map +1 -0
  100. package/out/dispatcher.d.ts +12 -0
  101. package/out/dispatcher.js +214 -0
  102. package/out/dispatcher.js.map +1 -0
  103. package/out/emailPoller.d.ts +42 -0
  104. package/out/emailPoller.js +221 -0
  105. package/out/emailPoller.js.map +1 -0
  106. package/out/git/gitService.d.ts +36 -0
  107. package/out/git/gitService.js +165 -0
  108. package/out/git/gitService.js.map +1 -0
  109. package/out/hookEventNormalizer.d.ts +39 -0
  110. package/out/hookEventNormalizer.js +397 -0
  111. package/out/hookEventNormalizer.js.map +1 -0
  112. package/out/hooksManager.d.ts +25 -0
  113. package/out/hooksManager.js +471 -0
  114. package/out/hooksManager.js.map +1 -0
  115. package/out/launchIde.d.ts +14 -0
  116. package/out/logger.d.ts +12 -0
  117. package/out/mcpEmailTest.d.ts +29 -0
  118. package/out/mcpEmailTest.js +245 -0
  119. package/out/mcpEmailTest.js.map +1 -0
  120. package/out/mcpInstallCheck.d.ts +23 -0
  121. package/out/mcpInstallCheck.js +219 -0
  122. package/out/mcpInstallCheck.js.map +1 -0
  123. package/out/mcpManager.d.ts +35 -0
  124. package/out/mcpManager.js +371 -0
  125. package/out/mcpManager.js.map +1 -0
  126. package/out/messageBuilder.d.ts +54 -0
  127. package/out/messageBuilder.js +373 -0
  128. package/out/messageBuilder.js.map +1 -0
  129. package/out/openCodeHooksManager.d.ts +23 -0
  130. package/out/openCodeHooksManager.js +511 -0
  131. package/out/openCodeHooksManager.js.map +1 -0
  132. package/out/periodicActions.d.ts +63 -0
  133. package/out/periodicActions.js +237 -0
  134. package/out/periodicActions.js.map +1 -0
  135. package/out/profileBuilder.d.ts +29 -0
  136. package/out/profileBuilder.js +366 -0
  137. package/out/profileBuilder.js.map +1 -0
  138. package/out/prompt.d.ts +12 -0
  139. package/out/prompt.js +18 -0
  140. package/out/prompt.js.map +1 -0
  141. package/out/protocolSections.d.ts +26 -0
  142. package/out/protocolSections.js +209 -0
  143. package/out/protocolSections.js.map +1 -0
  144. package/out/providers/claudeCliProvider.d.ts +71 -0
  145. package/out/providers/claudeCliProvider.js +425 -0
  146. package/out/providers/claudeCliProvider.js.map +1 -0
  147. package/out/providers/claudeTuiProvider.d.ts +23 -0
  148. package/out/providers/claudeTuiProvider.js +296 -0
  149. package/out/providers/claudeTuiProvider.js.map +1 -0
  150. package/out/providers/copilotCliProvider.d.ts +16 -0
  151. package/out/providers/copilotCliProvider.js +44 -0
  152. package/out/providers/copilotCliProvider.js.map +1 -0
  153. package/out/providers/copilotSdkProvider.d.ts +12 -0
  154. package/out/providers/copilotSdkProvider.js +445 -0
  155. package/out/providers/copilotSdkProvider.js.map +1 -0
  156. package/out/providers/grokTuiProvider.d.ts +14 -0
  157. package/out/providers/grokTuiProvider.js +271 -0
  158. package/out/providers/grokTuiProvider.js.map +1 -0
  159. package/out/providers/opencodeCliProvider.d.ts +29 -0
  160. package/out/providers/opencodeCliProvider.js +199 -0
  161. package/out/providers/opencodeCliProvider.js.map +1 -0
  162. package/out/providers/opencodeSdkProvider.d.ts +22 -0
  163. package/out/providers/opencodeSdkProvider.js +557 -0
  164. package/out/providers/opencodeSdkProvider.js.map +1 -0
  165. package/out/providers.d.ts +9 -0
  166. package/out/providers.js +44 -0
  167. package/out/providers.js.map +1 -0
  168. package/out/rateLimit.d.ts +18 -0
  169. package/out/rateLimit.js +90 -0
  170. package/out/rateLimit.js.map +1 -0
  171. package/out/rdp/auth.d.ts +55 -0
  172. package/out/rdp/auth.js +197 -0
  173. package/out/rdp/auth.js.map +1 -0
  174. package/out/rdp/bridge.d.ts +86 -0
  175. package/out/rdp/bridge.js +1398 -0
  176. package/out/rdp/bridge.js.map +1 -0
  177. package/out/rdp/constants.d.ts +86 -0
  178. package/out/rdp/constants.js +182 -0
  179. package/out/rdp/constants.js.map +1 -0
  180. package/out/rdp/index.d.ts +7 -0
  181. package/out/rdp/index.js +14 -0
  182. package/out/rdp/index.js.map +1 -0
  183. package/out/rdp/session.d.ts +30 -0
  184. package/out/rdp/session.js +196 -0
  185. package/out/rdp/session.js.map +1 -0
  186. package/out/rdp/types.d.ts +27 -0
  187. package/out/rdp/types.js +6 -0
  188. package/out/rdp/types.js.map +1 -0
  189. package/out/sdk/index.d.ts +22 -0
  190. package/out/sdk/index.js +81 -0
  191. package/out/sdk/index.js.map +1 -0
  192. package/out/sessionState.d.ts +54 -0
  193. package/out/sessionState.js +284 -0
  194. package/out/sessionState.js.map +1 -0
  195. package/out/sessions.d.ts +11 -0
  196. package/out/sessions.js +32 -0
  197. package/out/sessions.js.map +1 -0
  198. package/out/taskLoop.d.ts +152 -0
  199. package/out/taskLoop.js +2505 -0
  200. package/out/taskLoop.js.map +1 -0
  201. package/out/todo.d.ts +42 -0
  202. package/out/todo.js +311 -0
  203. package/out/todo.js.map +1 -0
  204. package/out/todoWriteManager.d.ts +26 -0
  205. package/out/todoWriteManager.js +44 -0
  206. package/out/todoWriteManager.js.map +1 -0
  207. package/out/vnc/auth.d.ts +52 -0
  208. package/out/vnc/auth.js +181 -0
  209. package/out/vnc/auth.js.map +1 -0
  210. package/out/vnc/bridge.d.ts +40 -0
  211. package/out/vnc/bridge.js +540 -0
  212. package/out/vnc/bridge.js.map +1 -0
  213. package/out/vnc/constants.d.ts +8 -0
  214. package/out/vnc/constants.js +34 -0
  215. package/out/vnc/constants.js.map +1 -0
  216. package/out/vnc/des.d.ts +6 -0
  217. package/out/vnc/des.js +93 -0
  218. package/out/vnc/des.js.map +1 -0
  219. package/out/vnc/index.d.ts +7 -0
  220. package/out/vnc/index.js +13 -0
  221. package/out/vnc/index.js.map +1 -0
  222. package/out/vnc/session.d.ts +18 -0
  223. package/out/vnc/session.js +193 -0
  224. package/out/vnc/session.js.map +1 -0
  225. package/out/vnc/types.d.ts +16 -0
  226. package/out/vnc/types.js +6 -0
  227. package/out/vnc/types.js.map +1 -0
  228. package/out/webSocketPoller.d.ts +95 -0
  229. package/out/webSocketPoller.js +986 -0
  230. package/out/webSocketPoller.js.map +1 -0
  231. package/out/webhook.d.ts +37 -0
  232. package/out/webhook.js +265 -0
  233. package/out/webhook.js.map +1 -0
  234. package/out/webhookPoller.d.ts +40 -0
  235. package/out/webhookPoller.js +378 -0
  236. package/out/webhookPoller.js.map +1 -0
  237. package/package.json +54 -41
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // DiscordGateway — minimal Discord Gateway WebSocket client
4
+ //
5
+ // Purpose: keep the bot status as "online" in Discord.
6
+ // The DiscordPoller only uses REST (HTTP polling), which never tells Discord
7
+ // the bot is connected. A Gateway WebSocket connection is the only way to
8
+ // set the bot's presence to "online".
9
+ //
10
+ // This class handles:
11
+ // • Connecting to wss://gateway.discord.gg
12
+ // • HELLO (op 10) → start heartbeat loop
13
+ // • IDENTIFY (op 2) with presence {status: 'online'}
14
+ // • Heartbeat / ACK cycle (zombie-detection)
15
+ // • RECONNECT (op 7) and INVALID_SESSION (op 9)
16
+ // • Automatic reconnect with jitter on unexpected close
17
+ // ---------------------------------------------------------------------------
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.DiscordGateway = void 0;
20
+ const GATEWAY_URL = 'wss://gateway.discord.gg/?v=10&encoding=json';
21
+ // Discord Gateway opcodes
22
+ const OP_DISPATCH = 0;
23
+ const OP_HEARTBEAT = 1;
24
+ const OP_IDENTIFY = 2;
25
+ const OP_RESUME = 6;
26
+ const OP_RECONNECT = 7;
27
+ const OP_INVALID_SESSION = 9;
28
+ const OP_HELLO = 10;
29
+ const OP_HEARTBEAT_ACK = 11;
30
+ // Non-resumable close codes per Discord docs
31
+ const NON_RESUMABLE_CODES = new Set([4004, 4010, 4011, 4012, 4013, 4014]);
32
+ // Backoff: 1 s, 2 s, 4 s, 8 s, 16 s, 32 s, 60 s (cap)
33
+ const RECONNECT_BASE_MS = 1_000;
34
+ const RECONNECT_MAX_MS = 60_000;
35
+ class DiscordGateway {
36
+ botToken;
37
+ ws = null;
38
+ heartbeatTimer = null;
39
+ jitterTimer = null;
40
+ reconnectTimer = null;
41
+ ackReceived = true;
42
+ sequence = null;
43
+ sessionId = null;
44
+ resumeGatewayUrl = null;
45
+ destroyed = false;
46
+ reconnectAttempts = 0;
47
+ constructor(botToken) {
48
+ this.botToken = botToken;
49
+ }
50
+ /** Open the gateway connection. Safe to call multiple times. */
51
+ connect() {
52
+ this.destroyed = false;
53
+ this.reconnectAttempts = 0;
54
+ this._connect(this.resumeGatewayUrl ?? GATEWAY_URL);
55
+ }
56
+ /** Close the connection permanently (e.g. loop stopped). */
57
+ destroy() {
58
+ this.destroyed = true;
59
+ this._cleanup();
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ _connect(gatewayUrl) {
63
+ this._cleanup();
64
+ const ws = new WebSocket(gatewayUrl);
65
+ this.ws = ws;
66
+ ws.onmessage = (ev) => {
67
+ try {
68
+ this._handle(JSON.parse(ev.data));
69
+ }
70
+ catch { /* ignore */ }
71
+ };
72
+ ws.onclose = (ev) => {
73
+ if (this.ws !== ws) {
74
+ return;
75
+ } // stale close — a newer connection is already active
76
+ if (NON_RESUMABLE_CODES.has(ev.code)) {
77
+ this.sessionId = null;
78
+ this.resumeGatewayUrl = null;
79
+ this.sequence = null;
80
+ }
81
+ if (!this.destroyed) {
82
+ this._scheduleReconnect();
83
+ }
84
+ };
85
+ ws.onerror = () => { };
86
+ ws.onopen = () => { };
87
+ }
88
+ _handle(p) {
89
+ if (p.s != null) {
90
+ this.sequence = p.s;
91
+ }
92
+ switch (p.op) {
93
+ case OP_HELLO: {
94
+ const interval = p.d.heartbeat_interval;
95
+ this._startHeartbeat(interval);
96
+ if (this.sessionId && this.sequence != null) {
97
+ this._send({ op: OP_RESUME, d: { token: this.botToken, session_id: this.sessionId, seq: this.sequence } });
98
+ }
99
+ else {
100
+ this._identify();
101
+ }
102
+ break;
103
+ }
104
+ case OP_DISPATCH: {
105
+ if (p.t === 'READY') {
106
+ const d = p.d;
107
+ this.sessionId = d.session_id;
108
+ this.resumeGatewayUrl = d.resume_gateway_url;
109
+ this.reconnectAttempts = 0; // successful connection — reset backoff
110
+ }
111
+ break;
112
+ }
113
+ case OP_HEARTBEAT: {
114
+ this._sendHeartbeat();
115
+ break;
116
+ }
117
+ case OP_HEARTBEAT_ACK: {
118
+ this.ackReceived = true;
119
+ break;
120
+ }
121
+ case OP_RECONNECT: {
122
+ this._scheduleReconnect(true);
123
+ break;
124
+ }
125
+ case OP_INVALID_SESSION: {
126
+ if (!p.d) {
127
+ this.sessionId = null;
128
+ this.resumeGatewayUrl = null;
129
+ this.sequence = null;
130
+ }
131
+ // Wait 1-5 s before reconnecting as required by Discord docs
132
+ setTimeout(() => { if (!this.destroyed) {
133
+ this._connect(GATEWAY_URL);
134
+ } }, 1000 + Math.random() * 4000);
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ _identify() {
140
+ this._send({
141
+ op: OP_IDENTIFY,
142
+ d: {
143
+ token: this.botToken,
144
+ intents: 512, // GUILD_MESSAGES (non-privileged; only needed for identification)
145
+ properties: { os: 'linux', browser: 'autodev', device: 'autodev' },
146
+ presence: { status: 'online', afk: false, since: null, activities: [] },
147
+ },
148
+ });
149
+ }
150
+ _startHeartbeat(interval) {
151
+ if (this.heartbeatTimer) {
152
+ clearInterval(this.heartbeatTimer);
153
+ this.heartbeatTimer = null;
154
+ }
155
+ if (this.jitterTimer) {
156
+ clearTimeout(this.jitterTimer);
157
+ this.jitterTimer = null;
158
+ }
159
+ this.ackReceived = true;
160
+ // Initial jitter per Discord docs
161
+ const jitter = Math.floor(Math.random() * interval);
162
+ this.jitterTimer = setTimeout(() => {
163
+ this.jitterTimer = null;
164
+ if (this.destroyed) {
165
+ return;
166
+ }
167
+ this._sendHeartbeat();
168
+ this.heartbeatTimer = setInterval(() => {
169
+ if (!this.ackReceived) {
170
+ // Zombie connection — force reconnect
171
+ this._scheduleReconnect(true);
172
+ return;
173
+ }
174
+ this.ackReceived = false;
175
+ this._sendHeartbeat();
176
+ }, interval);
177
+ }, jitter);
178
+ }
179
+ _sendHeartbeat() {
180
+ this._send({ op: OP_HEARTBEAT, d: this.sequence });
181
+ }
182
+ _send(data) {
183
+ if (this.ws && this.ws.readyState === 1 /* OPEN */) {
184
+ this.ws.send(JSON.stringify(data));
185
+ }
186
+ }
187
+ _scheduleReconnect(immediate = false) {
188
+ this._cleanup();
189
+ if (this.destroyed) {
190
+ return;
191
+ }
192
+ let delay;
193
+ if (immediate) {
194
+ delay = 0;
195
+ }
196
+ else {
197
+ // Exponential backoff with jitter: 1s, 2s, 4s … capped at 60s
198
+ const base = Math.min(RECONNECT_BASE_MS * Math.pow(2, this.reconnectAttempts), RECONNECT_MAX_MS);
199
+ delay = base * (0.5 + Math.random() * 0.5); // 50–100 % of base
200
+ }
201
+ this.reconnectAttempts++;
202
+ this.reconnectTimer = setTimeout(() => {
203
+ this._connect(this.resumeGatewayUrl ?? GATEWAY_URL);
204
+ }, delay);
205
+ }
206
+ _cleanup() {
207
+ if (this.heartbeatTimer) {
208
+ clearInterval(this.heartbeatTimer);
209
+ this.heartbeatTimer = null;
210
+ }
211
+ if (this.jitterTimer) {
212
+ clearTimeout(this.jitterTimer);
213
+ this.jitterTimer = null;
214
+ }
215
+ if (this.reconnectTimer) {
216
+ clearTimeout(this.reconnectTimer);
217
+ this.reconnectTimer = null;
218
+ }
219
+ if (this.ws) {
220
+ const ws = this.ws;
221
+ this.ws = null;
222
+ try {
223
+ ws.close();
224
+ }
225
+ catch { /* ignore */ }
226
+ }
227
+ }
228
+ }
229
+ exports.DiscordGateway = DiscordGateway;
230
+ //# sourceMappingURL=discordGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discordGateway.js","sourceRoot":"","sources":["../src/discordGateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare class DiscordPoller {
2
+ private readonly botToken;
3
+ private readonly channelId;
4
+ private lastMessageId;
5
+ private queue;
6
+ private readonly owners;
7
+ private _onCommand;
8
+ setOnCommand(cb: (cmd: string) => void): void;
9
+ /**
10
+ * @param botToken Discord bot token
11
+ * @param channelId Discord channel snowflake ID
12
+ * @param ownersStr Comma-separated list of usernames or user IDs allowed to send tasks
13
+ */
14
+ constructor(botToken: string, channelId: string, ownersStr: string);
15
+ /**
16
+ * Seed lastMessageId with the current latest message in the channel so that
17
+ * only messages arriving AFTER this point are treated as new tasks.
18
+ * Call this once before starting the polling loop.
19
+ */
20
+ initialize(): Promise<void>;
21
+ /**
22
+ * Poll the channel for new messages and append the first queued task to TODO.md.
23
+ * Returns true if a task was appended (caller should break out of its wait sleep).
24
+ */
25
+ pollAndAppend(todoPath: string, workspaceRoot?: string): Promise<boolean>;
26
+ private _fetchNewMessages;
27
+ private _drainQueue;
28
+ }
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DiscordPoller = void 0;
37
+ const https = __importStar(require("https"));
38
+ const http = __importStar(require("http"));
39
+ const url = __importStar(require("url"));
40
+ const messageBuilder_1 = require("./messageBuilder");
41
+ const todo_1 = require("./todo");
42
+ const todoWriteManager_1 = require("./todoWriteManager");
43
+ const DISCORD_API = 'https://discord.com/api/v10';
44
+ const POLL_LIMIT = 10;
45
+ class DiscordPoller {
46
+ botToken;
47
+ channelId;
48
+ lastMessageId = null;
49
+ queue = [];
50
+ owners;
51
+ _onCommand = null;
52
+ setOnCommand(cb) { this._onCommand = cb; }
53
+ /**
54
+ * @param botToken Discord bot token
55
+ * @param channelId Discord channel snowflake ID
56
+ * @param ownersStr Comma-separated list of usernames or user IDs allowed to send tasks
57
+ */
58
+ constructor(botToken, channelId, ownersStr) {
59
+ this.botToken = botToken;
60
+ this.channelId = channelId;
61
+ this.owners = ownersStr.split(',').map(o => o.trim()).filter(Boolean);
62
+ }
63
+ /**
64
+ * Seed lastMessageId with the current latest message in the channel so that
65
+ * only messages arriving AFTER this point are treated as new tasks.
66
+ * Call this once before starting the polling loop.
67
+ */
68
+ async initialize() {
69
+ try {
70
+ const apiUrl = `${DISCORD_API}/channels/${this.channelId}/messages?limit=1`;
71
+ const body = await apiGet(apiUrl, this.botToken);
72
+ if (Array.isArray(body) && body.length > 0) {
73
+ this.lastMessageId = body[0].id;
74
+ }
75
+ }
76
+ catch { /* non-fatal — will just process existing messages on first poll */ }
77
+ }
78
+ /**
79
+ * Poll the channel for new messages and append the first queued task to TODO.md.
80
+ * Returns true if a task was appended (caller should break out of its wait sleep).
81
+ */
82
+ async pollAndAppend(todoPath, workspaceRoot) {
83
+ await this._fetchNewMessages(workspaceRoot);
84
+ return this._drainQueue(todoPath);
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ async _fetchNewMessages(workspaceRoot) {
88
+ try {
89
+ const qs = this.lastMessageId
90
+ ? `?after=${this.lastMessageId}&limit=${POLL_LIMIT}`
91
+ : `?limit=${POLL_LIMIT}`;
92
+ const apiUrl = `${DISCORD_API}/channels/${this.channelId}/messages${qs}`;
93
+ const body = await apiGet(apiUrl, this.botToken);
94
+ if (!Array.isArray(body)) {
95
+ return;
96
+ }
97
+ // Discord returns newest-first; reverse to process oldest first
98
+ const messages = body.reverse();
99
+ for (const msg of messages) {
100
+ // Advance cursor unconditionally so we never re-process messages
101
+ if (!this.lastMessageId || msg.id > this.lastMessageId) {
102
+ this.lastMessageId = msg.id;
103
+ }
104
+ if (msg.author?.bot) {
105
+ continue;
106
+ }
107
+ const username = msg.author?.username ?? '';
108
+ const userId = msg.author?.id ?? '';
109
+ const isOwner = this.owners.some(o => o.toLowerCase() === username.toLowerCase() || o === userId);
110
+ if (!isOwner) {
111
+ continue;
112
+ }
113
+ const parts = [];
114
+ const text = (msg.content ?? '').trim();
115
+ if (text) {
116
+ parts.push(text);
117
+ }
118
+ // Pre-generate task ID so attachments share the same prefix
119
+ const taskId = (0, todo_1.shortId)();
120
+ // Save any attached files to disk; reference by path in the task text
121
+ for (const att of (msg.attachments ?? [])) {
122
+ const data = await fetchAttachmentBuffer(att.url, this.botToken);
123
+ if (data !== null) {
124
+ if (workspaceRoot) {
125
+ const relPath = (0, messageBuilder_1.saveAttachment)(workspaceRoot, att.filename, data, taskId);
126
+ parts.push(`[attachment: ${relPath}]`);
127
+ }
128
+ else {
129
+ // fallback: inline as text when no workspace root
130
+ parts.push(`--- attachment: ${att.filename} ---\n${data.toString('utf8')}`);
131
+ }
132
+ }
133
+ }
134
+ if (parts.length === 0) {
135
+ continue;
136
+ }
137
+ const taskText = parts.join('\n');
138
+ // Handle slash commands — don't queue as tasks
139
+ if (taskText.trim().startsWith('/')) {
140
+ reactToMessage(this.botToken, this.channelId, msg.id, '✅').catch(() => { });
141
+ this._onCommand?.(taskText.trim());
142
+ continue;
143
+ }
144
+ this.queue.push({ taskText, messageId: msg.id, taskId });
145
+ // React ✅ to the message so the sender knows it was accepted
146
+ reactToMessage(this.botToken, this.channelId, msg.id, '✅').catch(() => { });
147
+ }
148
+ }
149
+ catch {
150
+ // Polling failures are non-fatal — the loop will try again next tick
151
+ }
152
+ }
153
+ async _drainQueue(todoPath) {
154
+ if (this.queue.length === 0) {
155
+ return false;
156
+ }
157
+ const { taskText, taskId } = this.queue.shift();
158
+ try {
159
+ await todoWriteManager_1.todoWriter.append(todoPath, taskText, taskId);
160
+ }
161
+ catch { /* non-fatal */ }
162
+ return true;
163
+ }
164
+ }
165
+ exports.DiscordPoller = DiscordPoller;
166
+ // ---------------------------------------------------------------------------
167
+ // Helpers
168
+ // ---------------------------------------------------------------------------
169
+ function apiGet(rawUrl, botToken) {
170
+ return new Promise((resolve, reject) => {
171
+ const parsed = url.parse(rawUrl);
172
+ const options = {
173
+ hostname: parsed.hostname ?? '',
174
+ port: parsed.port,
175
+ path: parsed.path ?? '/',
176
+ method: 'GET',
177
+ headers: {
178
+ 'Authorization': `Bot ${botToken}`,
179
+ 'User-Agent': 'AutoDev-VSCode/1.0',
180
+ 'Content-Type': 'application/json',
181
+ },
182
+ };
183
+ const transport = rawUrl.startsWith('https') ? https : http;
184
+ const req = transport.request(options, res => {
185
+ let data = '';
186
+ res.on('data', (chunk) => { data += chunk; });
187
+ res.on('end', () => {
188
+ try {
189
+ resolve(JSON.parse(data));
190
+ }
191
+ catch {
192
+ reject(new Error('Invalid JSON response'));
193
+ }
194
+ });
195
+ });
196
+ req.on('error', reject);
197
+ req.setTimeout(10_000, () => { req.destroy(new Error('Request timed out')); });
198
+ req.end();
199
+ });
200
+ }
201
+ async function fetchAttachmentBuffer(attUrl, botToken) {
202
+ return new Promise(resolve => {
203
+ const parsed = url.parse(attUrl);
204
+ const options = {
205
+ hostname: parsed.hostname ?? '',
206
+ port: parsed.port,
207
+ path: parsed.path ?? '/',
208
+ method: 'GET',
209
+ headers: {
210
+ 'Authorization': `Bot ${botToken}`,
211
+ 'User-Agent': 'AutoDev-VSCode/1.0',
212
+ },
213
+ };
214
+ const transport = attUrl.startsWith('https') ? https : http;
215
+ const req = transport.request(options, res => {
216
+ const chunks = [];
217
+ res.on('data', (chunk) => { chunks.push(chunk); });
218
+ res.on('end', () => resolve(Buffer.concat(chunks)));
219
+ });
220
+ req.on('error', () => resolve(null));
221
+ req.setTimeout(30_000, () => { req.destroy(); resolve(null); });
222
+ req.end();
223
+ });
224
+ }
225
+ function reactToMessage(botToken, channelId, messageId, emoji) {
226
+ return new Promise((resolve) => {
227
+ const encoded = encodeURIComponent(emoji);
228
+ const rawUrl = `${DISCORD_API}/channels/${channelId}/messages/${messageId}/reactions/${encoded}/@me`;
229
+ const parsed = url.parse(rawUrl);
230
+ const options = {
231
+ hostname: parsed.hostname ?? '',
232
+ port: parsed.port,
233
+ path: parsed.path ?? '/',
234
+ method: 'PUT',
235
+ headers: {
236
+ 'Authorization': `Bot ${botToken}`,
237
+ 'User-Agent': 'AutoDev-VSCode/1.0',
238
+ 'Content-Length': '0',
239
+ },
240
+ };
241
+ const req = https.request(options, res => { res.resume(); resolve(); });
242
+ req.on('error', () => resolve()); // non-fatal
243
+ req.setTimeout(5_000, () => { req.destroy(); resolve(); });
244
+ req.end();
245
+ });
246
+ }
247
+ //# sourceMappingURL=discordPoller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discordPoller.js","sourceRoot":"","sources":["../src/discordPoller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ProviderId } from './providers';
2
+ import { IProcessLauncher } from './core/adapters';
3
+ export { findLatestClaudeSession, setClaudeSessionName, getClaudeSessionCursor, parseClaudeStateSince, hasClaudeEndTurnSince, readClaudeOutputSince, ClaudeSessionState, } from './providers/claudeCliProvider';
4
+ /**
5
+ * Build the CLI command and dispatch it via the injected `launcher`.
6
+ * `workspaceRoot` and `launcher` are provided by the caller (VS Code extension
7
+ * passes VsProcessLauncher + workspace root; the SDK passes NodeProcessLauncher
8
+ * + cwd).
9
+ */
10
+ export declare function sendPromptToAi(providerId: ProviderId, _prompt: string, log: (msg: string) => void, launcher: IProcessLauncher, workspaceRoot: string, includeProfile?: boolean, messageFilePath?: string,
11
+ /** Called once when a claude-tui task starts — use to reveal the output channel. */
12
+ showOutput?: () => void): Promise<void>;