azerclaw 2.1.9 → 2.2.1

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 (258) hide show
  1. package/bin/azerclaw.ts +45 -6
  2. package/bin/opencode.ts +1 -1
  3. package/dist/bin/azerclaw.d.ts +1 -47
  4. package/dist/bin/azerclaw.d.ts.map +1 -1
  5. package/dist/bin/azerclaw.js +94 -55
  6. package/dist/bin/azerclaw.js.map +1 -1
  7. package/dist/bin/opencode.js +1 -1
  8. package/dist/src/agents/builtin.js +12 -12
  9. package/dist/src/brain/adapters/base.d.ts +33 -0
  10. package/dist/src/brain/adapters/base.d.ts.map +1 -0
  11. package/dist/src/brain/adapters/base.js +11 -0
  12. package/dist/src/brain/adapters/base.js.map +1 -0
  13. package/dist/src/brain/adapters/index.d.ts +11 -0
  14. package/dist/src/brain/adapters/index.d.ts.map +1 -0
  15. package/dist/src/brain/adapters/index.js +37 -0
  16. package/dist/src/brain/adapters/index.js.map +1 -0
  17. package/dist/src/brain/adapters/native.d.ts +15 -0
  18. package/dist/src/brain/adapters/native.d.ts.map +1 -0
  19. package/dist/src/brain/adapters/native.js +25 -0
  20. package/dist/src/brain/adapters/native.js.map +1 -0
  21. package/dist/src/brain/adapters/prompt.d.ts +16 -0
  22. package/dist/src/brain/adapters/prompt.d.ts.map +1 -0
  23. package/dist/src/brain/adapters/prompt.js +91 -0
  24. package/dist/src/brain/adapters/prompt.js.map +1 -0
  25. package/dist/src/brain/hybrid.d.ts +53 -0
  26. package/dist/src/brain/hybrid.d.ts.map +1 -0
  27. package/dist/src/brain/hybrid.js +263 -0
  28. package/dist/src/brain/hybrid.js.map +1 -0
  29. package/dist/src/brain/index.d.ts +8 -0
  30. package/dist/src/brain/index.d.ts.map +1 -0
  31. package/dist/src/brain/index.js +19 -0
  32. package/dist/src/brain/index.js.map +1 -0
  33. package/dist/src/brain/router.d.ts +55 -0
  34. package/dist/src/brain/router.d.ts.map +1 -0
  35. package/dist/src/brain/router.js +174 -0
  36. package/dist/src/brain/router.js.map +1 -0
  37. package/dist/src/channels/adapter.d.ts +6 -0
  38. package/dist/src/channels/adapter.d.ts.map +1 -1
  39. package/dist/src/channels/adapter.js +44 -1
  40. package/dist/src/channels/adapter.js.map +1 -1
  41. package/dist/src/channels/discord.d.ts.map +1 -1
  42. package/dist/src/channels/discord.js +60 -14
  43. package/dist/src/channels/discord.js.map +1 -1
  44. package/dist/src/channels/slack.d.ts +5 -0
  45. package/dist/src/channels/slack.d.ts.map +1 -1
  46. package/dist/src/channels/slack.js +77 -9
  47. package/dist/src/channels/slack.js.map +1 -1
  48. package/dist/src/channels/telegram.d.ts +1 -0
  49. package/dist/src/channels/telegram.d.ts.map +1 -1
  50. package/dist/src/channels/telegram.js +42 -4
  51. package/dist/src/channels/telegram.js.map +1 -1
  52. package/dist/src/channels/webhook.d.ts.map +1 -1
  53. package/dist/src/channels/webhook.js +37 -6
  54. package/dist/src/channels/webhook.js.map +1 -1
  55. package/dist/src/cli/animations/fish.d.ts +9 -0
  56. package/dist/src/cli/animations/fish.d.ts.map +1 -1
  57. package/dist/src/cli/animations/fish.js +64 -80
  58. package/dist/src/cli/animations/fish.js.map +1 -1
  59. package/dist/src/cli/animations/markdown.d.ts.map +1 -1
  60. package/dist/src/cli/animations/markdown.js +0 -1
  61. package/dist/src/cli/animations/markdown.js.map +1 -1
  62. package/dist/src/cli/commands/agents.js +31 -30
  63. package/dist/src/cli/commands/agents.js.map +1 -1
  64. package/dist/src/cli/commands/channels.js +41 -48
  65. package/dist/src/cli/commands/channels.js.map +1 -1
  66. package/dist/src/cli/commands/chat.d.ts +1 -0
  67. package/dist/src/cli/commands/chat.d.ts.map +1 -1
  68. package/dist/src/cli/commands/chat.js +81 -8
  69. package/dist/src/cli/commands/chat.js.map +1 -1
  70. package/dist/src/cli/commands/config.js +0 -1
  71. package/dist/src/cli/commands/config.js.map +1 -1
  72. package/dist/src/cli/commands/doctor.js +42 -40
  73. package/dist/src/cli/commands/doctor.js.map +1 -1
  74. package/dist/src/cli/commands/export.js +6 -6
  75. package/dist/src/cli/commands/export.js.map +1 -1
  76. package/dist/src/cli/commands/mcp.js +7 -7
  77. package/dist/src/cli/commands/mcp.js.map +1 -1
  78. package/dist/src/cli/commands/models.js +0 -1
  79. package/dist/src/cli/commands/models.js.map +1 -1
  80. package/dist/src/cli/commands/onboard.js +0 -55
  81. package/dist/src/cli/commands/onboard.js.map +1 -1
  82. package/dist/src/cli/commands/pairing.js +22 -24
  83. package/dist/src/cli/commands/pairing.js.map +1 -1
  84. package/dist/src/cli/commands/plugins.js +8 -8
  85. package/dist/src/cli/commands/plugins.js.map +1 -1
  86. package/dist/src/cli/commands/run.d.ts +1 -0
  87. package/dist/src/cli/commands/run.d.ts.map +1 -1
  88. package/dist/src/cli/commands/run.js +101 -50
  89. package/dist/src/cli/commands/run.js.map +1 -1
  90. package/dist/src/cli/commands/sandbox.js +27 -32
  91. package/dist/src/cli/commands/sandbox.js.map +1 -1
  92. package/dist/src/cli/commands/settings.js +1 -16
  93. package/dist/src/cli/commands/settings.js.map +1 -1
  94. package/dist/src/cli/commands/share.js +6 -6
  95. package/dist/src/cli/commands/share.js.map +1 -1
  96. package/dist/src/cli/commands/tui.js +0 -1
  97. package/dist/src/cli/commands/tui.js.map +1 -1
  98. package/dist/src/config/hotreload.d.ts +87 -0
  99. package/dist/src/config/hotreload.d.ts.map +1 -0
  100. package/dist/src/config/hotreload.js +497 -0
  101. package/dist/src/config/hotreload.js.map +1 -0
  102. package/dist/src/config/manager.d.ts +4 -2
  103. package/dist/src/config/manager.d.ts.map +1 -1
  104. package/dist/src/config/manager.js +23 -5
  105. package/dist/src/config/manager.js.map +1 -1
  106. package/dist/src/config/schema.d.ts +286 -9
  107. package/dist/src/config/schema.d.ts.map +1 -1
  108. package/dist/src/config/schema.js +71 -7
  109. package/dist/src/config/schema.js.map +1 -1
  110. package/dist/src/core/runtime.d.ts +18 -0
  111. package/dist/src/core/runtime.d.ts.map +1 -1
  112. package/dist/src/core/runtime.js +82 -12
  113. package/dist/src/core/runtime.js.map +1 -1
  114. package/dist/src/core/server.d.ts.map +1 -1
  115. package/dist/src/core/server.js +18 -2
  116. package/dist/src/core/server.js.map +1 -1
  117. package/dist/src/index.d.ts +2 -0
  118. package/dist/src/index.d.ts.map +1 -1
  119. package/dist/src/index.js +6 -0
  120. package/dist/src/index.js.map +1 -1
  121. package/dist/src/interfaces/terminal/dashboard.d.ts +80 -0
  122. package/dist/src/interfaces/terminal/dashboard.d.ts.map +1 -0
  123. package/dist/src/interfaces/terminal/dashboard.js +618 -0
  124. package/dist/src/interfaces/terminal/dashboard.js.map +1 -0
  125. package/dist/src/interfaces/terminal/index.d.ts +46 -0
  126. package/dist/src/interfaces/terminal/index.d.ts.map +1 -0
  127. package/dist/src/interfaces/terminal/index.js +171 -0
  128. package/dist/src/interfaces/terminal/index.js.map +1 -0
  129. package/dist/src/interfaces/terminal/visualizations.d.ts +78 -0
  130. package/dist/src/interfaces/terminal/visualizations.d.ts.map +1 -0
  131. package/dist/src/interfaces/terminal/visualizations.js +540 -0
  132. package/dist/src/interfaces/terminal/visualizations.js.map +1 -0
  133. package/dist/src/interfaces/web/server.d.ts +73 -0
  134. package/dist/src/interfaces/web/server.d.ts.map +1 -0
  135. package/dist/src/interfaces/web/server.js +505 -0
  136. package/dist/src/interfaces/web/server.js.map +1 -0
  137. package/dist/src/mcp-servers/antigravity/index.js +2 -2
  138. package/dist/src/mcp-servers/antigravity/index.js.map +1 -1
  139. package/dist/src/memory/dreaming.d.ts +91 -0
  140. package/dist/src/memory/dreaming.d.ts.map +1 -0
  141. package/dist/src/memory/dreaming.js +582 -0
  142. package/dist/src/memory/dreaming.js.map +1 -0
  143. package/dist/src/memory/index.d.ts +8 -0
  144. package/dist/src/memory/index.d.ts.map +1 -0
  145. package/dist/src/memory/index.js +29 -0
  146. package/dist/src/memory/index.js.map +1 -0
  147. package/dist/src/memory/store.d.ts +13 -0
  148. package/dist/src/memory/store.d.ts.map +1 -1
  149. package/dist/src/memory/store.js +28 -0
  150. package/dist/src/memory/store.js.map +1 -1
  151. package/dist/src/memory/vector.d.ts +94 -0
  152. package/dist/src/memory/vector.d.ts.map +1 -0
  153. package/dist/src/memory/vector.js +457 -0
  154. package/dist/src/memory/vector.js.map +1 -0
  155. package/dist/src/networking/analyzer.d.ts +189 -0
  156. package/dist/src/networking/analyzer.d.ts.map +1 -0
  157. package/dist/src/networking/analyzer.js +604 -0
  158. package/dist/src/networking/analyzer.js.map +1 -0
  159. package/dist/src/plugins/bundled/context-engine/index.d.ts +8 -0
  160. package/dist/src/plugins/bundled/context-engine/index.d.ts.map +1 -0
  161. package/dist/src/plugins/bundled/context-engine/index.js +353 -0
  162. package/dist/src/plugins/bundled/context-engine/index.js.map +1 -0
  163. package/dist/src/plugins/bundled/observability/index.d.ts +64 -0
  164. package/dist/src/plugins/bundled/observability/index.d.ts.map +1 -0
  165. package/dist/src/plugins/bundled/observability/index.js +441 -0
  166. package/dist/src/plugins/bundled/observability/index.js.map +1 -0
  167. package/dist/src/plugins/index.d.ts +15 -0
  168. package/dist/src/plugins/index.d.ts.map +1 -0
  169. package/dist/src/plugins/index.js +117 -0
  170. package/dist/src/plugins/index.js.map +1 -0
  171. package/dist/src/plugins/loader.d.ts +19 -0
  172. package/dist/src/plugins/loader.d.ts.map +1 -0
  173. package/dist/src/plugins/loader.js +333 -0
  174. package/dist/src/plugins/loader.js.map +1 -0
  175. package/dist/src/plugins/manager.d.ts +32 -0
  176. package/dist/src/plugins/manager.d.ts.map +1 -0
  177. package/dist/src/plugins/manager.js +410 -0
  178. package/dist/src/plugins/manager.js.map +1 -0
  179. package/dist/src/plugins/registry.d.ts +50 -0
  180. package/dist/src/plugins/registry.d.ts.map +1 -0
  181. package/dist/src/plugins/registry.js +285 -0
  182. package/dist/src/plugins/registry.js.map +1 -0
  183. package/dist/src/plugins/types.d.ts +165 -0
  184. package/dist/src/plugins/types.d.ts.map +1 -0
  185. package/dist/src/plugins/types.js +7 -0
  186. package/dist/src/plugins/types.js.map +1 -0
  187. package/dist/src/providers/base.d.ts +5 -0
  188. package/dist/src/providers/base.d.ts.map +1 -1
  189. package/dist/src/providers/base.js.map +1 -1
  190. package/dist/src/providers/huggingface.d.ts +27 -0
  191. package/dist/src/providers/huggingface.d.ts.map +1 -0
  192. package/dist/src/providers/huggingface.js +140 -0
  193. package/dist/src/providers/huggingface.js.map +1 -0
  194. package/dist/src/providers/kiloauto.d.ts +29 -0
  195. package/dist/src/providers/kiloauto.d.ts.map +1 -0
  196. package/dist/src/providers/kiloauto.js +242 -0
  197. package/dist/src/providers/kiloauto.js.map +1 -0
  198. package/dist/src/providers/localllama.d.ts +26 -0
  199. package/dist/src/providers/localllama.d.ts.map +1 -0
  200. package/dist/src/providers/localllama.js +192 -0
  201. package/dist/src/providers/localllama.js.map +1 -0
  202. package/dist/src/providers/openai.d.ts.map +1 -1
  203. package/dist/src/providers/openai.js +8 -1
  204. package/dist/src/providers/openai.js.map +1 -1
  205. package/dist/src/providers/router.d.ts.map +1 -1
  206. package/dist/src/providers/router.js +36 -4
  207. package/dist/src/providers/router.js.map +1 -1
  208. package/dist/src/scheduler/heartbeat.d.ts.map +1 -1
  209. package/dist/src/scheduler/heartbeat.js +23 -1
  210. package/dist/src/scheduler/heartbeat.js.map +1 -1
  211. package/dist/src/security/privacy.d.ts +199 -0
  212. package/dist/src/security/privacy.d.ts.map +1 -0
  213. package/dist/src/security/privacy.js +600 -0
  214. package/dist/src/security/privacy.js.map +1 -0
  215. package/dist/src/server/hq.d.ts.map +1 -1
  216. package/dist/src/server/hq.js +56 -4
  217. package/dist/src/server/hq.js.map +1 -1
  218. package/dist/src/skills/loader.d.ts.map +1 -1
  219. package/dist/src/skills/loader.js +13 -3
  220. package/dist/src/skills/loader.js.map +1 -1
  221. package/dist/src/tools/advanced.d.ts.map +1 -1
  222. package/dist/src/tools/advanced.js +73 -18
  223. package/dist/src/tools/advanced.js.map +1 -1
  224. package/dist/src/tools/filesystem.d.ts.map +1 -1
  225. package/dist/src/tools/filesystem.js +110 -7
  226. package/dist/src/tools/filesystem.js.map +1 -1
  227. package/dist/src/tools/index_memory.d.ts.map +1 -1
  228. package/dist/src/tools/index_memory.js +13 -6
  229. package/dist/src/tools/index_memory.js.map +1 -1
  230. package/dist/src/tools/loader.d.ts.map +1 -1
  231. package/dist/src/tools/loader.js +4 -2
  232. package/dist/src/tools/loader.js.map +1 -1
  233. package/dist/src/tools/registry.d.ts +6 -0
  234. package/dist/src/tools/registry.d.ts.map +1 -1
  235. package/dist/src/tools/registry.js +51 -12
  236. package/dist/src/tools/registry.js.map +1 -1
  237. package/dist/src/tools/shell.d.ts.map +1 -1
  238. package/dist/src/tools/shell.js +2 -0
  239. package/dist/src/tools/shell.js.map +1 -1
  240. package/dist/src/tools/specialized.d.ts.map +1 -1
  241. package/dist/src/tools/specialized.js +52 -12
  242. package/dist/src/tools/specialized.js.map +1 -1
  243. package/dist/src/workflow/engine.d.ts.map +1 -1
  244. package/dist/src/workflow/engine.js +43 -13
  245. package/dist/src/workflow/engine.js.map +1 -1
  246. package/dist/src/workflow/lobster.d.ts +138 -0
  247. package/dist/src/workflow/lobster.d.ts.map +1 -0
  248. package/dist/src/workflow/lobster.js +620 -0
  249. package/dist/src/workflow/lobster.js.map +1 -0
  250. package/dist/src/workspace/heartbeat.d.ts +122 -0
  251. package/dist/src/workspace/heartbeat.d.ts.map +1 -0
  252. package/dist/src/workspace/heartbeat.js +624 -0
  253. package/dist/src/workspace/heartbeat.js.map +1 -0
  254. package/dist/src/workspace/index.d.ts +29 -0
  255. package/dist/src/workspace/index.d.ts.map +1 -0
  256. package/dist/src/workspace/index.js +97 -0
  257. package/dist/src/workspace/index.js.map +1 -0
  258. package/package.json +2 -2
@@ -12,8 +12,50 @@ const manager_1 = require("../config/manager");
12
12
  const pairing_1 = require("./pairing");
13
13
  const routing_1 = require("./routing");
14
14
  // ─── Base Adapter ───────────────────────────────────────────────
15
+ // Channel-agent registry caps. JS Maps preserve insertion order, which we use
16
+ // as a simple LRU: re-inserting moves an entry to the end (most-recently used).
17
+ const MAX_CHANNEL_AGENTS = 1000;
18
+ const CHANNEL_AGENT_IDLE_MS = 60 * 60 * 1000; // 1 hour
15
19
  class ChannelAdapter {
16
20
  agents = new Map();
21
+ agentLastSeen = new Map();
22
+ /**
23
+ * Evict idle agents and trim the map to MAX_CHANNEL_AGENTS using LRU order.
24
+ */
25
+ evictStaleAgents() {
26
+ const now = Date.now();
27
+ for (const [sid, ts] of this.agentLastSeen) {
28
+ if (now - ts > CHANNEL_AGENT_IDLE_MS) {
29
+ const a = this.agents.get(sid);
30
+ try {
31
+ a?.abort?.();
32
+ }
33
+ catch { /* ignore */ }
34
+ this.agents.delete(sid);
35
+ this.agentLastSeen.delete(sid);
36
+ }
37
+ }
38
+ // Hard cap — evict oldest until under MAX.
39
+ while (this.agents.size > MAX_CHANNEL_AGENTS) {
40
+ const oldest = this.agents.keys().next().value;
41
+ if (!oldest)
42
+ break;
43
+ const a = this.agents.get(oldest);
44
+ try {
45
+ a?.abort?.();
46
+ }
47
+ catch { /* ignore */ }
48
+ this.agents.delete(oldest);
49
+ this.agentLastSeen.delete(oldest);
50
+ }
51
+ }
52
+ touchAgent(sessionId, agent) {
53
+ // Move to end of insertion order to mark as MRU.
54
+ if (this.agents.has(sessionId))
55
+ this.agents.delete(sessionId);
56
+ this.agents.set(sessionId, agent);
57
+ this.agentLastSeen.set(sessionId, Date.now());
58
+ }
17
59
  /**
18
60
  * Handle an incoming message — routes to agent.
19
61
  */
@@ -22,6 +64,7 @@ class ChannelAdapter {
22
64
  const allowed = await this.enforceDmPolicy(message);
23
65
  if (!allowed)
24
66
  return;
67
+ this.evictStaleAgents();
25
68
  const sessionId = this.resolveSessionId(message);
26
69
  let agent = this.agents.get(sessionId);
27
70
  if (!agent) {
@@ -42,9 +85,9 @@ class ChannelAdapter {
42
85
  }
43
86
  },
44
87
  });
45
- this.agents.set(sessionId, agent);
46
88
  (0, security_1.auditLog)('CHANNEL_SESSION_ROUTE', `${this.platform}:${message.channelId} -> ${sessionId} (as ${character})`);
47
89
  }
90
+ this.touchAgent(sessionId, agent);
48
91
  try {
49
92
  await agent.chat(message.content);
50
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IAEjC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,QAAQ;CAcjB"}
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IAEjC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,kBAAkB;IAkE1B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,QAAQ;CAcjB"}
@@ -21,21 +21,38 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
21
21
  if (!this.token)
22
22
  throw new Error('Discord bot token required');
23
23
  const WebSocket = require('ws');
24
- this.ws = new WebSocket('wss://gateway.discord.gg/?v=10&encoding=json');
25
- this.ws.on('open', () => {
24
+ const socket = new WebSocket('wss://gateway.discord.gg/?v=10&encoding=json');
25
+ this.ws = socket;
26
+ socket.on('open', () => {
26
27
  (0, security_1.auditLog)('DISCORD_CONNECTED', 'WebSocket opened');
27
28
  });
28
- this.ws.on('message', (data) => {
29
- const payload = JSON.parse(data);
30
- this.handleGatewayEvent(payload);
29
+ socket.on('message', (data) => {
30
+ let payload;
31
+ try {
32
+ payload = JSON.parse(data.toString());
33
+ }
34
+ catch (err) {
35
+ (0, security_1.auditLog)('DISCORD_PARSE_ERROR', err?.message || String(err));
36
+ return;
37
+ }
38
+ try {
39
+ this.handleGatewayEvent(payload);
40
+ }
41
+ catch (err) {
42
+ (0, security_1.auditLog)('DISCORD_HANDLER_ERROR', err?.message || String(err));
43
+ }
31
44
  });
32
- this.ws.on('close', () => {
33
- this.connected = false;
34
- if (this.heartbeatInterval)
35
- clearInterval(this.heartbeatInterval);
45
+ socket.on('close', () => {
46
+ if (this.ws === socket) {
47
+ this.connected = false;
48
+ if (this.heartbeatInterval) {
49
+ clearInterval(this.heartbeatInterval);
50
+ this.heartbeatInterval = null;
51
+ }
52
+ }
36
53
  (0, security_1.auditLog)('DISCORD_DISCONNECTED', 'WebSocket closed');
37
54
  });
38
- this.ws.on('error', (err) => {
55
+ socket.on('error', (err) => {
39
56
  (0, security_1.auditLog)('DISCORD_ERROR', err.message);
40
57
  });
41
58
  }
@@ -75,10 +92,35 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
75
92
  break;
76
93
  case 11: // Heartbeat ACK
77
94
  break;
95
+ case 1: // Heartbeat request — respond immediately
96
+ this.ws?.send(JSON.stringify({ op: 1, d: this.sequence }));
97
+ break;
98
+ case 7: // Reconnect — gateway is asking us to close + reconnect
99
+ (0, security_1.auditLog)('DISCORD_RECONNECT_REQUEST', 'Gateway requested reconnect');
100
+ try {
101
+ this.ws?.close(4000, 'reconnect');
102
+ }
103
+ catch { /* ignore */ }
104
+ // Reconnect after brief jitter; reuse stored token.
105
+ setTimeout(() => {
106
+ this.connect({ token: this.token }).catch((err) => {
107
+ (0, security_1.auditLog)('DISCORD_RECONNECT_FAILED', err?.message || String(err));
108
+ });
109
+ }, 1000 + Math.floor(Math.random() * 2000));
110
+ break;
111
+ case 9: { // Invalid session — re-identify after delay (resumable flag in d)
112
+ const resumable = !!d;
113
+ (0, security_1.auditLog)('DISCORD_INVALID_SESSION', `resumable=${resumable}`);
114
+ setTimeout(() => {
115
+ if (this.ws && this.ws.readyState === 1 /* OPEN */)
116
+ this.identify();
117
+ }, 1000 + Math.floor(Math.random() * 4000));
118
+ break;
119
+ }
78
120
  case 0: // Dispatch
79
- if (t === 'READY') {
121
+ if (t === 'READY' || t === 'RESUMED') {
80
122
  this.connected = true;
81
- (0, security_1.auditLog)('DISCORD_READY', `Logged in as ${d.user?.username}`);
123
+ (0, security_1.auditLog)('DISCORD_READY', t === 'READY' ? `Logged in as ${d.user?.username}` : 'Session resumed');
82
124
  }
83
125
  if (t === 'MESSAGE_CREATE') {
84
126
  // Don't respond to own messages
@@ -100,12 +142,16 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
100
142
  timestamp: new Date(d.timestamp),
101
143
  metadata: { guildId: d.guild_id },
102
144
  };
103
- this.handleIncoming(message);
145
+ this.handleIncoming(message).catch((err) => {
146
+ (0, security_1.auditLog)('DISCORD_HANDLE_ERROR', err?.message || String(err));
147
+ });
104
148
  }
105
149
  break;
106
150
  }
107
151
  }
108
152
  startHeartbeat(interval) {
153
+ if (this.heartbeatInterval)
154
+ clearInterval(this.heartbeatInterval);
109
155
  this.heartbeatInterval = setInterval(() => {
110
156
  this.ws?.send(JSON.stringify({ op: 1, d: this.sequence }));
111
157
  }, interval);
@@ -115,7 +161,7 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
115
161
  op: 2,
116
162
  d: {
117
163
  token: this.token,
118
- intents: 513, // GUILDS + GUILD_MESSAGES
164
+ intents: 33281, // GUILDS (1) + GUILD_MESSAGES (512) + MESSAGE_CONTENT (32768)
119
165
  properties: {
120
166
  os: process.platform,
121
167
  browser: 'azerclaw',
@@ -1 +1 @@
1
- {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,12 @@ export declare class SlackAdapter extends ChannelAdapter {
10
10
  private appToken;
11
11
  private ws;
12
12
  private connected;
13
+ private pingInterval;
14
+ private lastPongAt;
15
+ private savedConfig;
13
16
  connect(config: Record<string, string>): Promise<void>;
17
+ private startKeepalive;
18
+ private stopKeepalive;
14
19
  disconnect(): Promise<void>;
15
20
  send(options: SendOptions): Promise<void>;
16
21
  isConnected(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,WAAW,WAAW;IAC/B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,gBAAgB;CA6BzB"}
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,WAAW,WAAW;IAC/B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAuC;IAEpD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgE5D,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,gBAAgB;CA+BzB"}
@@ -14,7 +14,11 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
14
14
  appToken = '';
15
15
  ws = null;
16
16
  connected = false;
17
+ pingInterval = null;
18
+ lastPongAt = 0;
19
+ savedConfig = null;
17
20
  async connect(config) {
21
+ this.savedConfig = config;
18
22
  this.botToken = config.botToken;
19
23
  this.appToken = config.appToken;
20
24
  if (!this.botToken || !this.appToken) {
@@ -29,21 +33,83 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
29
33
  if (!data.ok)
30
34
  throw new Error(`Slack auth failed: ${data.error}`);
31
35
  const WebSocket = require('ws');
32
- this.ws = new WebSocket(data.url);
33
- this.ws.on('open', () => {
34
- this.connected = true;
36
+ const socket = new WebSocket(data.url);
37
+ this.ws = socket;
38
+ socket.on('open', () => {
39
+ if (this.ws === socket) {
40
+ this.connected = true;
41
+ this.lastPongAt = Date.now();
42
+ this.startKeepalive();
43
+ }
35
44
  (0, security_1.auditLog)('SLACK_CONNECTED', 'Socket Mode active');
36
45
  });
37
- this.ws.on('message', (raw) => {
38
- const payload = JSON.parse(raw);
39
- this.handleSlackEvent(payload);
46
+ socket.on('pong', () => {
47
+ if (this.ws === socket) {
48
+ this.lastPongAt = Date.now();
49
+ }
40
50
  });
41
- this.ws.on('close', () => {
42
- this.connected = false;
51
+ socket.on('message', (raw) => {
52
+ if (this.ws !== socket)
53
+ return;
54
+ let payload;
55
+ try {
56
+ payload = JSON.parse(raw.toString());
57
+ }
58
+ catch (err) {
59
+ (0, security_1.auditLog)('SLACK_PARSE_ERROR', err?.message || String(err));
60
+ return;
61
+ }
62
+ try {
63
+ this.handleSlackEvent(payload);
64
+ }
65
+ catch (err) {
66
+ (0, security_1.auditLog)('SLACK_HANDLER_ERROR', err?.message || String(err));
67
+ }
68
+ });
69
+ socket.on('close', () => {
70
+ if (this.ws === socket) {
71
+ this.connected = false;
72
+ this.stopKeepalive();
73
+ }
43
74
  (0, security_1.auditLog)('SLACK_DISCONNECTED', '');
44
75
  });
76
+ socket.on('error', (err) => {
77
+ (0, security_1.auditLog)('SLACK_ERROR', err.message);
78
+ });
79
+ }
80
+ startKeepalive() {
81
+ this.stopKeepalive();
82
+ this.pingInterval = setInterval(() => {
83
+ // If we haven’t seen a pong in 90s, treat the socket as dead and reconnect.
84
+ if (Date.now() - this.lastPongAt > 90_000) {
85
+ (0, security_1.auditLog)('SLACK_KEEPALIVE_TIMEOUT', 'No pong in 90s; reconnecting');
86
+ try {
87
+ this.ws?.terminate?.();
88
+ }
89
+ catch { /* ignore */ }
90
+ this.connected = false;
91
+ this.stopKeepalive();
92
+ if (this.savedConfig) {
93
+ this.connect(this.savedConfig).catch((err) => {
94
+ (0, security_1.auditLog)('SLACK_RECONNECT_FAILED', err?.message || String(err));
95
+ });
96
+ }
97
+ return;
98
+ }
99
+ try {
100
+ this.ws?.ping?.();
101
+ }
102
+ catch { /* ignore */ }
103
+ }, 30_000);
104
+ }
105
+ stopKeepalive() {
106
+ if (this.pingInterval) {
107
+ clearInterval(this.pingInterval);
108
+ this.pingInterval = null;
109
+ }
45
110
  }
46
111
  async disconnect() {
112
+ this.stopKeepalive();
47
113
  if (this.ws)
48
114
  this.ws.close();
49
115
  this.connected = false;
@@ -90,7 +156,9 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
90
156
  timestamp: new Date(parseFloat(event.ts) * 1000),
91
157
  metadata: { threadTs: event.thread_ts, channelType: event.channel_type },
92
158
  };
93
- this.handleIncoming(normalized);
159
+ this.handleIncoming(normalized).catch((err) => {
160
+ (0, security_1.auditLog)('SLACK_HANDLE_ERROR', err?.message || String(err));
161
+ });
94
162
  }
95
163
  }
96
164
  exports.SlackAdapter = SlackAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class TelegramAdapter extends ChannelAdapter {
15
15
  disconnect(): Promise<void>;
16
16
  send(options: SendOptions): Promise<void>;
17
17
  isConnected(): boolean;
18
+ private consecutiveErrors;
18
19
  private pollUpdates;
19
20
  }
20
21
  //# sourceMappingURL=telegram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,eAAgB,SAAQ,cAAc;IACjD,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,WAAW,cAAc;IAClC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,KAAK,OAAO,GAElB;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IActD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,WAAW,IAAI,OAAO;YAIR,WAAW;CAmC1B"}
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,eAAgB,SAAQ,cAAc;IACjD,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,WAAW,cAAc;IAClC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,KAAK,OAAO,GAElB;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IActD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,iBAAiB,CAAK;YAEhB,WAAW;CAgD1B"}
@@ -36,7 +36,7 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
36
36
  clearTimeout(this.pollTimer);
37
37
  }
38
38
  async send(options) {
39
- await fetch(`${this.baseUrl}/sendMessage`, {
39
+ const res = await fetch(`${this.baseUrl}/sendMessage`, {
40
40
  method: 'POST',
41
41
  headers: { 'Content-Type': 'application/json' },
42
42
  body: JSON.stringify({
@@ -46,16 +46,49 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
46
46
  parse_mode: 'Markdown',
47
47
  }),
48
48
  });
49
+ if (!res.ok) {
50
+ let errDescription = '';
51
+ try {
52
+ const data = await res.json();
53
+ errDescription = data.description || '';
54
+ }
55
+ catch { /* ignore */ }
56
+ if (errDescription.includes("can't parse entities") || errDescription.includes("can't find end of")) {
57
+ // Fall back to sending as plain text if Markdown formatting fails
58
+ const retryRes = await fetch(`${this.baseUrl}/sendMessage`, {
59
+ method: 'POST',
60
+ headers: { 'Content-Type': 'application/json' },
61
+ body: JSON.stringify({
62
+ chat_id: options.channelId,
63
+ text: options.content,
64
+ reply_to_message_id: options.replyTo ? parseInt(options.replyTo) : undefined,
65
+ }),
66
+ });
67
+ if (!retryRes.ok) {
68
+ throw new Error(`Telegram send fallback failed: ${retryRes.statusText}`);
69
+ }
70
+ }
71
+ else {
72
+ throw new Error(`Telegram send failed: ${errDescription || res.statusText}`);
73
+ }
74
+ }
49
75
  }
50
76
  isConnected() {
51
77
  return this.polling;
52
78
  }
79
+ consecutiveErrors = 0;
53
80
  async pollUpdates() {
54
81
  if (!this.polling)
55
82
  return;
83
+ let delay = 1000;
56
84
  try {
57
85
  const res = await fetch(`${this.baseUrl}/getUpdates?offset=${this.offset}&timeout=30`);
58
86
  const data = await res.json();
87
+ if (!data.ok) {
88
+ throw new Error(`Telegram API Error: ${data.description || 'Unknown error'} (${data.error_code || 'no code'})`);
89
+ }
90
+ // Successful poll — reset backoff.
91
+ this.consecutiveErrors = 0;
59
92
  if (data.ok && data.result) {
60
93
  for (const update of data.result) {
61
94
  this.offset = update.update_id + 1;
@@ -74,15 +107,20 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
74
107
  timestamp: new Date(msg.date * 1000),
75
108
  metadata: { chatType: chat.type },
76
109
  };
77
- this.handleIncoming(normalized);
110
+ this.handleIncoming(normalized).catch((err) => {
111
+ (0, security_1.auditLog)('TELEGRAM_HANDLE_ERROR', err?.message || String(err));
112
+ });
78
113
  }
79
114
  }
80
115
  }
81
116
  }
82
117
  catch (e) {
83
- (0, security_1.auditLog)('TELEGRAM_ERROR', e.message);
118
+ this.consecutiveErrors++;
119
+ // 1s, 2s, 4s, 8s, ... capped at 60s
120
+ delay = Math.min(60_000, 1000 * Math.pow(2, this.consecutiveErrors - 1));
121
+ (0, security_1.auditLog)('TELEGRAM_ERROR', `${e.message} (retry in ${delay}ms, error #${this.consecutiveErrors})`);
84
122
  }
85
- this.pollTimer = setTimeout(() => this.pollUpdates(), 1000);
123
+ this.pollTimer = setTimeout(() => this.pollUpdates(), delay);
86
124
  }
87
125
  }
88
126
  exports.TelegramAdapter = TelegramAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,WAAW,IAAI,OAAO;CAGvB"}
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0EtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,WAAW,IAAI,OAAO;CAGvB"}
@@ -58,10 +58,29 @@ class WebhookAdapter extends adapter_1.ChannelAdapter {
58
58
  res.end('Method not allowed');
59
59
  return;
60
60
  }
61
- let body = '';
62
- req.on('data', chunk => { body += chunk; });
61
+ const MAX_BODY = 1024 * 1024; // 1 MB
62
+ const chunks = [];
63
+ let total = 0;
64
+ let aborted = false;
65
+ req.on('data', (chunk) => {
66
+ if (aborted)
67
+ return;
68
+ const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
69
+ total += buf.length;
70
+ if (total > MAX_BODY) {
71
+ aborted = true;
72
+ res.writeHead(413);
73
+ res.end('Payload too large');
74
+ req.destroy();
75
+ return;
76
+ }
77
+ chunks.push(buf);
78
+ });
63
79
  req.on('end', async () => {
80
+ if (aborted)
81
+ return;
64
82
  try {
83
+ const body = Buffer.concat(chunks).toString('utf8');
65
84
  const data = JSON.parse(body);
66
85
  const message = {
67
86
  id: data.id || `wh_${Date.now()}`,
@@ -84,10 +103,22 @@ class WebhookAdapter extends adapter_1.ChannelAdapter {
84
103
  }
85
104
  });
86
105
  });
87
- // Bind to localhost only for security
88
- this.server.listen(this.port, '127.0.0.1', () => {
89
- this.connected = true;
90
- (0, security_1.auditLog)('WEBHOOK_STARTED', `Listening on 127.0.0.1:${this.port}`);
106
+ // Bind to localhost only for security. Await `listening` so connect()
107
+ // resolves only when isConnected() will return true.
108
+ await new Promise((resolve, reject) => {
109
+ const onError = (err) => {
110
+ this.server?.removeListener('listening', onListening);
111
+ reject(err);
112
+ };
113
+ const onListening = () => {
114
+ this.server?.removeListener('error', onError);
115
+ this.connected = true;
116
+ (0, security_1.auditLog)('WEBHOOK_STARTED', `Listening on 127.0.0.1:${this.port}`);
117
+ resolve();
118
+ };
119
+ this.server.once('error', onError);
120
+ this.server.once('listening', onListening);
121
+ this.server.listen(this.port, '127.0.0.1');
91
122
  });
92
123
  }
93
124
  async disconnect() {
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,20 @@
2
2
  * 🐟 AZERCLAW Fish Animations — THE BOYS EDITION
3
3
  * Diabolical, gritty, and uncensored.
4
4
  */
5
+ export declare const OCEAN_GRADIENT: (str: string) => string;
6
+ export declare const GOLD_GRADIENT: (str: string) => string;
7
+ export declare const NEON_GRADIENT: (str: string) => string;
8
+ export declare const LUXE_GRADIENT: (str: string) => string;
9
+ export declare const EMBER_GRADIENT: (str: string) => string;
5
10
  export declare const FISH_FRAMES: string[];
6
11
  export declare const FISH_SWIM_FRAMES: string[];
7
12
  export declare const FISH_DEAD = " ><(((x> \uD83D\uDC80";
8
13
  export declare const FISH_HAPPY = " ><(((\u00B0> \uD83E\uDE78";
9
14
  export declare const BIG_FISH: string[];
15
+ /**
16
+ * Character-specific TTS voices for macOS
17
+ */
18
+ export declare const CHARACTER_VOICES: Record<string, string>;
10
19
  export declare function speak(text: string, character?: string): void;
11
20
  export declare function playSplashScreen(version: string): Promise<void>;
12
21
  export declare function printQuickSplash(version: string): void;