@phuetz/code-buddy 0.1.18 → 0.1.19

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 (273) hide show
  1. package/dist/agent/background-tasks.d.ts +49 -0
  2. package/dist/agent/background-tasks.js +153 -0
  3. package/dist/agent/background-tasks.js.map +1 -0
  4. package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
  5. package/dist/agent/definitions/agent-definition-loader.js +161 -0
  6. package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
  7. package/dist/agent/definitions/index.d.ts +1 -0
  8. package/dist/agent/definitions/index.js +2 -0
  9. package/dist/agent/definitions/index.js.map +1 -0
  10. package/dist/agent/extended-thinking.d.ts +64 -0
  11. package/dist/agent/extended-thinking.js +103 -0
  12. package/dist/agent/extended-thinking.js.map +1 -0
  13. package/dist/agent/prompt-suggestions.d.ts +55 -0
  14. package/dist/agent/prompt-suggestions.js +125 -0
  15. package/dist/agent/prompt-suggestions.js.map +1 -0
  16. package/dist/agent/rewind-manager.d.ts +59 -0
  17. package/dist/agent/rewind-manager.js +124 -0
  18. package/dist/agent/rewind-manager.js.map +1 -0
  19. package/dist/agent/teams/agent-team.d.ts +54 -0
  20. package/dist/agent/teams/agent-team.js +114 -0
  21. package/dist/agent/teams/agent-team.js.map +1 -0
  22. package/dist/agent/teams/index.d.ts +1 -0
  23. package/dist/agent/teams/index.js +2 -0
  24. package/dist/agent/teams/index.js.map +1 -0
  25. package/dist/agent/teams/team-v2.d.ts +166 -0
  26. package/dist/agent/teams/team-v2.js +376 -0
  27. package/dist/agent/teams/team-v2.js.map +1 -0
  28. package/dist/channels/imessage/index.d.ts +40 -0
  29. package/dist/channels/imessage/index.js +69 -0
  30. package/dist/channels/imessage/index.js.map +1 -0
  31. package/dist/channels/line/index.d.ts +36 -0
  32. package/dist/channels/line/index.js +71 -0
  33. package/dist/channels/line/index.js.map +1 -0
  34. package/dist/channels/mattermost/index.d.ts +34 -0
  35. package/dist/channels/mattermost/index.js +56 -0
  36. package/dist/channels/mattermost/index.js.map +1 -0
  37. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  38. package/dist/channels/nextcloud-talk/index.js +67 -0
  39. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  40. package/dist/channels/niche-channels.d.ts +61 -0
  41. package/dist/channels/niche-channels.js +131 -0
  42. package/dist/channels/niche-channels.js.map +1 -0
  43. package/dist/channels/nostr/index.d.ts +30 -0
  44. package/dist/channels/nostr/index.js +68 -0
  45. package/dist/channels/nostr/index.js.map +1 -0
  46. package/dist/channels/twilio-voice/index.d.ts +37 -0
  47. package/dist/channels/twilio-voice/index.js +76 -0
  48. package/dist/channels/twilio-voice/index.js.map +1 -0
  49. package/dist/channels/whatsapp/index.js +0 -1
  50. package/dist/channels/whatsapp/index.js.map +1 -1
  51. package/dist/channels/zalo/index.d.ts +28 -0
  52. package/dist/channels/zalo/index.js +53 -0
  53. package/dist/channels/zalo/index.js.map +1 -0
  54. package/dist/cloud/cloud-sessions.d.ts +56 -0
  55. package/dist/cloud/cloud-sessions.js +187 -0
  56. package/dist/cloud/cloud-sessions.js.map +1 -0
  57. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  58. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  60. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  61. package/dist/codebuddy/tool-definitions/index.js +1 -1
  62. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  63. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  64. package/dist/commands/handlers/auth-handler.js +137 -0
  65. package/dist/commands/handlers/auth-handler.js.map +1 -0
  66. package/dist/commands/handlers/context-handler.d.ts +46 -0
  67. package/dist/commands/handlers/context-handler.js +102 -0
  68. package/dist/commands/handlers/context-handler.js.map +1 -0
  69. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  70. package/dist/commands/handlers/keybindings-handler.js +124 -0
  71. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  72. package/dist/commands/handlers/session-commands.d.ts +17 -0
  73. package/dist/commands/handlers/session-commands.js +119 -0
  74. package/dist/commands/handlers/session-commands.js.map +1 -0
  75. package/dist/commands/slash/builtin-commands.js +1 -1
  76. package/dist/commands/slash/builtin-commands.js.map +1 -1
  77. package/dist/config/admin-config.d.ts +54 -0
  78. package/dist/config/admin-config.js +144 -0
  79. package/dist/config/admin-config.js.map +1 -0
  80. package/dist/config/advanced-config.d.ts +118 -0
  81. package/dist/config/advanced-config.js +364 -0
  82. package/dist/config/advanced-config.js.map +1 -0
  83. package/dist/config/managed-policies.d.ts +50 -0
  84. package/dist/config/managed-policies.js +120 -0
  85. package/dist/config/managed-policies.js.map +1 -0
  86. package/dist/config/settings-hierarchy.d.ts +59 -0
  87. package/dist/config/settings-hierarchy.js +188 -0
  88. package/dist/config/settings-hierarchy.js.map +1 -0
  89. package/dist/config/tool-profiles.d.ts +37 -0
  90. package/dist/config/tool-profiles.js +150 -0
  91. package/dist/config/tool-profiles.js.map +1 -0
  92. package/dist/config/user-settings.d.ts +31 -0
  93. package/dist/config/user-settings.js +66 -0
  94. package/dist/config/user-settings.js.map +1 -0
  95. package/dist/context/context-files.d.ts +1 -1
  96. package/dist/context/context-files.js +2 -2
  97. package/dist/context/context-files.js.map +1 -1
  98. package/dist/context/partial-summarizer.d.ts +32 -0
  99. package/dist/context/partial-summarizer.js +144 -0
  100. package/dist/context/partial-summarizer.js.map +1 -0
  101. package/dist/desktop/desktop-app.d.ts +44 -0
  102. package/dist/desktop/desktop-app.js +136 -0
  103. package/dist/desktop/desktop-app.js.map +1 -0
  104. package/dist/git/worktree-sessions.d.ts +24 -0
  105. package/dist/git/worktree-sessions.js +93 -0
  106. package/dist/git/worktree-sessions.js.map +1 -0
  107. package/dist/hooks/advanced-hooks.d.ts +110 -0
  108. package/dist/hooks/advanced-hooks.js +256 -0
  109. package/dist/hooks/advanced-hooks.js.map +1 -0
  110. package/dist/hooks/async-hooks.d.ts +73 -0
  111. package/dist/hooks/async-hooks.js +213 -0
  112. package/dist/hooks/async-hooks.js.map +1 -0
  113. package/dist/hooks/env-persistence.d.ts +58 -0
  114. package/dist/hooks/env-persistence.js +195 -0
  115. package/dist/hooks/env-persistence.js.map +1 -0
  116. package/dist/hooks/hook-events.d.ts +36 -0
  117. package/dist/hooks/hook-events.js +55 -0
  118. package/dist/hooks/hook-events.js.map +1 -0
  119. package/dist/hooks/smart-hooks.d.ts +85 -0
  120. package/dist/hooks/smart-hooks.js +199 -0
  121. package/dist/hooks/smart-hooks.js.map +1 -0
  122. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  123. package/dist/ide/jetbrains-plugin.js +156 -0
  124. package/dist/ide/jetbrains-plugin.js.map +1 -0
  125. package/dist/ide/vscode-extension.d.ts +94 -0
  126. package/dist/ide/vscode-extension.js +229 -0
  127. package/dist/ide/vscode-extension.js.map +1 -0
  128. package/dist/index.js +77 -3
  129. package/dist/index.js.map +1 -1
  130. package/dist/input/file-autocomplete.d.ts +42 -0
  131. package/dist/input/file-autocomplete.js +154 -0
  132. package/dist/input/file-autocomplete.js.map +1 -0
  133. package/dist/integrations/chrome-bridge.d.ts +90 -0
  134. package/dist/integrations/chrome-bridge.js +151 -0
  135. package/dist/integrations/chrome-bridge.js.map +1 -0
  136. package/dist/integrations/github-action-runner.d.ts +40 -0
  137. package/dist/integrations/github-action-runner.js +163 -0
  138. package/dist/integrations/github-action-runner.js.map +1 -0
  139. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  140. package/dist/integrations/gitlab-ci-runner.js +104 -0
  141. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  142. package/dist/integrations/pr-session-linker.d.ts +44 -0
  143. package/dist/integrations/pr-session-linker.js +103 -0
  144. package/dist/integrations/pr-session-linker.js.map +1 -0
  145. package/dist/integrations/tailscale.d.ts +36 -0
  146. package/dist/integrations/tailscale.js +101 -0
  147. package/dist/integrations/tailscale.js.map +1 -0
  148. package/dist/lsp/lsp-client.d.ts +68 -0
  149. package/dist/lsp/lsp-client.js +182 -0
  150. package/dist/lsp/lsp-client.js.map +1 -0
  151. package/dist/mcp/connectors.d.ts +28 -0
  152. package/dist/mcp/connectors.js +148 -0
  153. package/dist/mcp/connectors.js.map +1 -0
  154. package/dist/mcp/index.d.ts +7 -4
  155. package/dist/mcp/index.js +7 -4
  156. package/dist/mcp/index.js.map +1 -1
  157. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  158. package/dist/mcp/mcp-auto-discovery.js +104 -0
  159. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  160. package/dist/mcp/mcp-server.d.ts +70 -0
  161. package/dist/mcp/mcp-server.js +374 -0
  162. package/dist/mcp/mcp-server.js.map +1 -0
  163. package/dist/memory/auto-memory.d.ts +53 -0
  164. package/dist/memory/auto-memory.js +250 -0
  165. package/dist/memory/auto-memory.js.map +1 -0
  166. package/dist/memory/hybrid-search.d.ts +51 -0
  167. package/dist/memory/hybrid-search.js +199 -0
  168. package/dist/memory/hybrid-search.js.map +1 -0
  169. package/dist/memory/memory-flush.d.ts +51 -0
  170. package/dist/memory/memory-flush.js +102 -0
  171. package/dist/memory/memory-flush.js.map +1 -0
  172. package/dist/memory/subagent-memory.d.ts +73 -0
  173. package/dist/memory/subagent-memory.js +172 -0
  174. package/dist/memory/subagent-memory.js.map +1 -0
  175. package/dist/nodes/device-node.d.ts +40 -0
  176. package/dist/nodes/device-node.js +117 -0
  177. package/dist/nodes/device-node.js.map +1 -0
  178. package/dist/output/json-schema-output.d.ts +67 -0
  179. package/dist/output/json-schema-output.js +273 -0
  180. package/dist/output/json-schema-output.js.map +1 -0
  181. package/dist/persistence/session-picker.d.ts +22 -0
  182. package/dist/persistence/session-picker.js +47 -0
  183. package/dist/persistence/session-picker.js.map +1 -0
  184. package/dist/persistence/session-store.d.ts +11 -0
  185. package/dist/persistence/session-store.js +17 -0
  186. package/dist/persistence/session-store.js.map +1 -1
  187. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  188. package/dist/plugins/git-pinned-marketplace.js +152 -0
  189. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  190. package/dist/plugins/plugin-manifest.d.ts +116 -0
  191. package/dist/plugins/plugin-manifest.js +283 -0
  192. package/dist/plugins/plugin-manifest.js.map +1 -0
  193. package/dist/sandbox/os-sandbox.d.ts +49 -1
  194. package/dist/sandbox/os-sandbox.js +347 -6
  195. package/dist/sandbox/os-sandbox.js.map +1 -1
  196. package/dist/sdk/agent-sdk.d.ts +61 -0
  197. package/dist/sdk/agent-sdk.js +90 -0
  198. package/dist/sdk/agent-sdk.js.map +1 -0
  199. package/dist/security/permission-modes.d.ts +76 -0
  200. package/dist/security/permission-modes.js +195 -0
  201. package/dist/security/permission-modes.js.map +1 -0
  202. package/dist/security/permission-patterns.d.ts +61 -0
  203. package/dist/security/permission-patterns.js +171 -0
  204. package/dist/security/permission-patterns.js.map +1 -0
  205. package/dist/security/safe-binaries.d.ts +23 -0
  206. package/dist/security/safe-binaries.js +96 -0
  207. package/dist/security/safe-binaries.js.map +1 -0
  208. package/dist/security/sender-policies.d.ts +46 -0
  209. package/dist/security/sender-policies.js +90 -0
  210. package/dist/security/sender-policies.js.map +1 -0
  211. package/dist/server/dashboard.d.ts +53 -0
  212. package/dist/server/dashboard.js +93 -0
  213. package/dist/server/dashboard.js.map +1 -0
  214. package/dist/services/system-prompt-override.d.ts +34 -0
  215. package/dist/services/system-prompt-override.js +64 -0
  216. package/dist/services/system-prompt-override.js.map +1 -0
  217. package/dist/skills/skill-enhancements.d.ts +37 -0
  218. package/dist/skills/skill-enhancements.js +69 -0
  219. package/dist/skills/skill-enhancements.js.map +1 -0
  220. package/dist/telemetry/otel-tracer.d.ts +98 -0
  221. package/dist/telemetry/otel-tracer.js +245 -0
  222. package/dist/telemetry/otel-tracer.js.map +1 -0
  223. package/dist/tools/browser-stub.d.ts +61 -0
  224. package/dist/tools/browser-stub.js +184 -0
  225. package/dist/tools/browser-stub.js.map +1 -0
  226. package/dist/tools/gateway-tool.d.ts +43 -0
  227. package/dist/tools/gateway-tool.js +92 -0
  228. package/dist/tools/gateway-tool.js.map +1 -0
  229. package/dist/tools/image-stub.d.ts +32 -0
  230. package/dist/tools/image-stub.js +97 -0
  231. package/dist/tools/image-stub.js.map +1 -0
  232. package/dist/tools/js-repl.d.ts +78 -0
  233. package/dist/tools/js-repl.js +280 -0
  234. package/dist/tools/js-repl.js.map +1 -0
  235. package/dist/tools/message-tool.d.ts +42 -0
  236. package/dist/tools/message-tool.js +113 -0
  237. package/dist/tools/message-tool.js.map +1 -0
  238. package/dist/ui/cli-enhancements.d.ts +178 -0
  239. package/dist/ui/cli-enhancements.js +430 -0
  240. package/dist/ui/cli-enhancements.js.map +1 -0
  241. package/dist/ui/status-line.d.ts +90 -0
  242. package/dist/ui/status-line.js +160 -0
  243. package/dist/ui/status-line.js.map +1 -0
  244. package/dist/ui/terminal-enhancements.d.ts +34 -0
  245. package/dist/ui/terminal-enhancements.js +97 -0
  246. package/dist/ui/terminal-enhancements.js.map +1 -0
  247. package/dist/ui/ui-enhancements.d.ts +38 -0
  248. package/dist/ui/ui-enhancements.js +116 -0
  249. package/dist/ui/ui-enhancements.js.map +1 -0
  250. package/dist/utils/custom-instructions.js +4 -1
  251. package/dist/utils/custom-instructions.js.map +1 -1
  252. package/dist/utils/init-project.d.ts +1 -1
  253. package/dist/utils/init-project.js +20 -20
  254. package/dist/utils/init-project.js.map +1 -1
  255. package/dist/utils/output-schema-validator.d.ts +40 -0
  256. package/dist/utils/output-schema-validator.js +137 -0
  257. package/dist/utils/output-schema-validator.js.map +1 -0
  258. package/dist/utils/safety-misc.d.ts +24 -0
  259. package/dist/utils/safety-misc.js +91 -0
  260. package/dist/utils/safety-misc.js.map +1 -0
  261. package/dist/utils/session-enhancements.d.ts +40 -0
  262. package/dist/utils/session-enhancements.js +118 -0
  263. package/dist/utils/session-enhancements.js.map +1 -0
  264. package/dist/utils/shell-snapshot.d.ts +38 -0
  265. package/dist/utils/shell-snapshot.js +323 -0
  266. package/dist/utils/shell-snapshot.js.map +1 -0
  267. package/dist/utils/stream-json-formatter.d.ts +77 -0
  268. package/dist/utils/stream-json-formatter.js +61 -0
  269. package/dist/utils/stream-json-formatter.js.map +1 -0
  270. package/dist/workflows/lobster-engine.d.ts +43 -0
  271. package/dist/workflows/lobster-engine.js +167 -0
  272. package/dist/workflows/lobster-engine.js.map +1 -0
  273. package/package.json +3 -6
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Mattermost Channel Adapter
3
+ *
4
+ * Connects to Mattermost via WebSocket for real-time messaging.
5
+ * This is a stub implementation.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ export class MattermostAdapter {
9
+ config;
10
+ running = false;
11
+ constructor(config) {
12
+ this.config = { ...config };
13
+ }
14
+ async start() {
15
+ if (this.running) {
16
+ throw new Error('MattermostAdapter is already running');
17
+ }
18
+ logger.debug('MattermostAdapter: connecting via WebSocket', { url: this.config.url });
19
+ this.running = true;
20
+ }
21
+ async stop() {
22
+ if (!this.running) {
23
+ throw new Error('MattermostAdapter is not running');
24
+ }
25
+ logger.debug('MattermostAdapter: disconnecting');
26
+ this.running = false;
27
+ }
28
+ isRunning() {
29
+ return this.running;
30
+ }
31
+ async sendMessage(channelId, text) {
32
+ if (!this.running) {
33
+ throw new Error('MattermostAdapter is not running');
34
+ }
35
+ logger.debug('MattermostAdapter: sending message', { channelId, textLength: text.length });
36
+ return { success: true, postId: `mm_${Date.now()}` };
37
+ }
38
+ async sendReply(channelId, rootId, text) {
39
+ if (!this.running) {
40
+ throw new Error('MattermostAdapter is not running');
41
+ }
42
+ logger.debug('MattermostAdapter: sending reply', { channelId, rootId, textLength: text.length });
43
+ return { success: true, postId: `mm_reply_${Date.now()}` };
44
+ }
45
+ async getChannels() {
46
+ if (!this.running) {
47
+ throw new Error('MattermostAdapter is not running');
48
+ }
49
+ return [];
50
+ }
51
+ getConfig() {
52
+ return { ...this.config };
53
+ }
54
+ }
55
+ export default MattermostAdapter;
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/mattermost/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAmB;IACzB,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,IAAY;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAY;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Nextcloud Talk Channel Adapter
3
+ *
4
+ * Connects to Nextcloud Talk for messaging and room management.
5
+ * This is a stub implementation.
6
+ */
7
+ export interface NextcloudTalkConfig {
8
+ url: string;
9
+ username: string;
10
+ password: string;
11
+ }
12
+ export declare class NextcloudTalkAdapter {
13
+ private config;
14
+ private running;
15
+ private joinedRooms;
16
+ constructor(config: NextcloudTalkConfig);
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ isRunning(): boolean;
20
+ sendMessage(roomToken: string, text: string): Promise<{
21
+ success: boolean;
22
+ messageId: string;
23
+ }>;
24
+ getRooms(): Promise<Array<{
25
+ token: string;
26
+ name: string;
27
+ type: number;
28
+ }>>;
29
+ joinRoom(roomToken: string): Promise<{
30
+ success: boolean;
31
+ }>;
32
+ leaveRoom(roomToken: string): Promise<{
33
+ success: boolean;
34
+ }>;
35
+ getConfig(): NextcloudTalkConfig;
36
+ }
37
+ export default NextcloudTalkAdapter;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Nextcloud Talk Channel Adapter
3
+ *
4
+ * Connects to Nextcloud Talk for messaging and room management.
5
+ * This is a stub implementation.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ export class NextcloudTalkAdapter {
9
+ config;
10
+ running = false;
11
+ joinedRooms = new Set();
12
+ constructor(config) {
13
+ this.config = { ...config };
14
+ }
15
+ async start() {
16
+ if (this.running) {
17
+ throw new Error('NextcloudTalkAdapter is already running');
18
+ }
19
+ logger.debug('NextcloudTalkAdapter: connecting', { url: this.config.url, username: this.config.username });
20
+ this.running = true;
21
+ }
22
+ async stop() {
23
+ if (!this.running) {
24
+ throw new Error('NextcloudTalkAdapter is not running');
25
+ }
26
+ logger.debug('NextcloudTalkAdapter: disconnecting');
27
+ this.joinedRooms.clear();
28
+ this.running = false;
29
+ }
30
+ isRunning() {
31
+ return this.running;
32
+ }
33
+ async sendMessage(roomToken, text) {
34
+ if (!this.running) {
35
+ throw new Error('NextcloudTalkAdapter is not running');
36
+ }
37
+ logger.debug('NextcloudTalkAdapter: sending message', { roomToken, textLength: text.length });
38
+ return { success: true, messageId: `nc_${Date.now()}` };
39
+ }
40
+ async getRooms() {
41
+ if (!this.running) {
42
+ throw new Error('NextcloudTalkAdapter is not running');
43
+ }
44
+ return [];
45
+ }
46
+ async joinRoom(roomToken) {
47
+ if (!this.running) {
48
+ throw new Error('NextcloudTalkAdapter is not running');
49
+ }
50
+ this.joinedRooms.add(roomToken);
51
+ logger.debug('NextcloudTalkAdapter: joined room', { roomToken });
52
+ return { success: true };
53
+ }
54
+ async leaveRoom(roomToken) {
55
+ if (!this.running) {
56
+ throw new Error('NextcloudTalkAdapter is not running');
57
+ }
58
+ const existed = this.joinedRooms.delete(roomToken);
59
+ logger.debug('NextcloudTalkAdapter: left room', { roomToken, existed });
60
+ return { success: existed };
61
+ }
62
+ getConfig() {
63
+ return { ...this.config };
64
+ }
65
+ }
66
+ export default NextcloudTalkAdapter;
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/nextcloud-talk/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAQ/C,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAsB;IAC5B,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE7C,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,IAAY;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Niche Channels & Misc
3
+ * Lightweight stubs for Twitch, Tlon, Gmail, and docs search.
4
+ */
5
+ export declare class TwitchAdapter {
6
+ private running;
7
+ private channels;
8
+ private config;
9
+ constructor(config?: Record<string, unknown>);
10
+ start(): void;
11
+ stop(): void;
12
+ isRunning(): boolean;
13
+ sendMessage(channel: string, text: string): {
14
+ sent: boolean;
15
+ channel: string;
16
+ };
17
+ joinChannel(channel: string): void;
18
+ leaveChannel(channel: string): void;
19
+ getConfig(): Record<string, unknown>;
20
+ }
21
+ export declare class TlonAdapter {
22
+ private running;
23
+ private config;
24
+ constructor(config?: Record<string, unknown>);
25
+ start(): void;
26
+ stop(): void;
27
+ isRunning(): boolean;
28
+ sendMessage(shipName: string, text: string): {
29
+ sent: boolean;
30
+ ship: string;
31
+ };
32
+ getConfig(): Record<string, unknown>;
33
+ }
34
+ export declare class GmailWebhookAdapter {
35
+ private running;
36
+ private messages;
37
+ private config;
38
+ constructor(config?: Record<string, unknown>);
39
+ start(): void;
40
+ stop(): void;
41
+ isRunning(): boolean;
42
+ getMessages(limit?: number): Array<{
43
+ id: string;
44
+ subject: string;
45
+ read: boolean;
46
+ }>;
47
+ markRead(messageId: string): boolean;
48
+ getConfig(): Record<string, unknown>;
49
+ _addMessage(id: string, subject: string): void;
50
+ }
51
+ export declare class DocsSearchTool {
52
+ private docs;
53
+ constructor();
54
+ search(query: string): Array<{
55
+ topic: string;
56
+ snippet: string;
57
+ url: string;
58
+ }>;
59
+ getTopics(): string[];
60
+ getDocUrl(topic: string): string | undefined;
61
+ }
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Niche Channels & Misc
3
+ * Lightweight stubs for Twitch, Tlon, Gmail, and docs search.
4
+ */
5
+ import { logger } from '../utils/logger.js';
6
+ export class TwitchAdapter {
7
+ running = false;
8
+ channels = new Set();
9
+ config;
10
+ constructor(config = {}) {
11
+ this.config = config;
12
+ }
13
+ start() {
14
+ this.running = true;
15
+ logger.debug('TwitchAdapter started');
16
+ }
17
+ stop() {
18
+ this.running = false;
19
+ this.channels.clear();
20
+ logger.debug('TwitchAdapter stopped');
21
+ }
22
+ isRunning() {
23
+ return this.running;
24
+ }
25
+ sendMessage(channel, text) {
26
+ if (!this.running)
27
+ throw new Error('Adapter not running');
28
+ logger.debug(`Twitch [${channel}]: ${text}`);
29
+ return { sent: true, channel };
30
+ }
31
+ joinChannel(channel) {
32
+ this.channels.add(channel);
33
+ }
34
+ leaveChannel(channel) {
35
+ this.channels.delete(channel);
36
+ }
37
+ getConfig() {
38
+ return { ...this.config };
39
+ }
40
+ }
41
+ export class TlonAdapter {
42
+ running = false;
43
+ config;
44
+ constructor(config = {}) {
45
+ this.config = config;
46
+ }
47
+ start() {
48
+ this.running = true;
49
+ logger.debug('TlonAdapter started');
50
+ }
51
+ stop() {
52
+ this.running = false;
53
+ logger.debug('TlonAdapter stopped');
54
+ }
55
+ isRunning() {
56
+ return this.running;
57
+ }
58
+ sendMessage(shipName, text) {
59
+ if (!this.running)
60
+ throw new Error('Adapter not running');
61
+ logger.debug(`Tlon [${shipName}]: ${text}`);
62
+ return { sent: true, ship: shipName };
63
+ }
64
+ getConfig() {
65
+ return { ...this.config };
66
+ }
67
+ }
68
+ export class GmailWebhookAdapter {
69
+ running = false;
70
+ messages = [];
71
+ config;
72
+ constructor(config = {}) {
73
+ this.config = config;
74
+ }
75
+ start() {
76
+ this.running = true;
77
+ logger.debug('GmailWebhookAdapter started');
78
+ }
79
+ stop() {
80
+ this.running = false;
81
+ logger.debug('GmailWebhookAdapter stopped');
82
+ }
83
+ isRunning() {
84
+ return this.running;
85
+ }
86
+ getMessages(limit) {
87
+ const msgs = [...this.messages];
88
+ return limit ? msgs.slice(0, limit) : msgs;
89
+ }
90
+ markRead(messageId) {
91
+ const msg = this.messages.find(m => m.id === messageId);
92
+ if (msg) {
93
+ msg.read = true;
94
+ return true;
95
+ }
96
+ return false;
97
+ }
98
+ getConfig() {
99
+ return { ...this.config };
100
+ }
101
+ // Test helper to add messages
102
+ _addMessage(id, subject) {
103
+ this.messages.push({ id, subject, read: false });
104
+ }
105
+ }
106
+ export class DocsSearchTool {
107
+ docs = new Map();
108
+ constructor() {
109
+ // Pre-populate with some default topics
110
+ this.docs.set('getting-started', { content: 'Install and configure Code Buddy', url: '/docs/getting-started' });
111
+ this.docs.set('tools', { content: 'Available tools and their usage', url: '/docs/tools' });
112
+ this.docs.set('configuration', { content: 'Configuration options and environment variables', url: '/docs/configuration' });
113
+ }
114
+ search(query) {
115
+ const results = [];
116
+ const queryLower = query.toLowerCase();
117
+ for (const [topic, doc] of this.docs) {
118
+ if (topic.includes(queryLower) || doc.content.toLowerCase().includes(queryLower)) {
119
+ results.push({ topic, snippet: doc.content, url: doc.url });
120
+ }
121
+ }
122
+ return results;
123
+ }
124
+ getTopics() {
125
+ return Array.from(this.docs.keys());
126
+ }
127
+ getDocUrl(topic) {
128
+ return this.docs.get(topic)?.url;
129
+ }
130
+ }
131
+ //# sourceMappingURL=niche-channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"niche-channels.js","sourceRoot":"","sources":["../../src/channels/niche-channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Nostr Channel Adapter
3
+ *
4
+ * Connects to Nostr relays for decentralized messaging.
5
+ * Supports NIP-04 encrypted direct messages.
6
+ * This is a stub implementation.
7
+ */
8
+ export interface NostrConfig {
9
+ privateKey?: string;
10
+ relays: string[];
11
+ }
12
+ export declare class NostrAdapter {
13
+ private config;
14
+ private running;
15
+ private connectedRelays;
16
+ constructor(config: NostrConfig);
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ isRunning(): boolean;
20
+ sendDirectMessage(pubkey: string, content: string): Promise<{
21
+ success: boolean;
22
+ eventId: string;
23
+ }>;
24
+ getPublicKey(): string;
25
+ getRelays(): string[];
26
+ addRelay(url: string): void;
27
+ removeRelay(url: string): void;
28
+ getConfig(): NostrConfig;
29
+ }
30
+ export default NostrAdapter;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Nostr Channel Adapter
3
+ *
4
+ * Connects to Nostr relays for decentralized messaging.
5
+ * Supports NIP-04 encrypted direct messages.
6
+ * This is a stub implementation.
7
+ */
8
+ import { logger } from '../../utils/logger.js';
9
+ export class NostrAdapter {
10
+ config;
11
+ running = false;
12
+ connectedRelays = [];
13
+ constructor(config) {
14
+ this.config = { ...config, relays: [...config.relays] };
15
+ }
16
+ async start() {
17
+ if (this.running) {
18
+ throw new Error('NostrAdapter is already running');
19
+ }
20
+ logger.debug('NostrAdapter: connecting to relays', { relays: this.config.relays });
21
+ this.connectedRelays = [...this.config.relays];
22
+ this.running = true;
23
+ }
24
+ async stop() {
25
+ if (!this.running) {
26
+ throw new Error('NostrAdapter is not running');
27
+ }
28
+ logger.debug('NostrAdapter: disconnecting from relays');
29
+ this.connectedRelays = [];
30
+ this.running = false;
31
+ }
32
+ isRunning() {
33
+ return this.running;
34
+ }
35
+ async sendDirectMessage(pubkey, content) {
36
+ if (!this.running) {
37
+ throw new Error('NostrAdapter is not running');
38
+ }
39
+ logger.debug('NostrAdapter: sending NIP-04 DM', { pubkey, contentLength: content.length });
40
+ return { success: true, eventId: `nostr_${Date.now()}` };
41
+ }
42
+ getPublicKey() {
43
+ return 'npub1placeholder000000000000000000000000000000000000000000000';
44
+ }
45
+ getRelays() {
46
+ return [...this.connectedRelays];
47
+ }
48
+ addRelay(url) {
49
+ if (!this.connectedRelays.includes(url)) {
50
+ this.connectedRelays.push(url);
51
+ this.config.relays = [...this.connectedRelays];
52
+ logger.debug('NostrAdapter: added relay', { url });
53
+ }
54
+ }
55
+ removeRelay(url) {
56
+ const index = this.connectedRelays.indexOf(url);
57
+ if (index !== -1) {
58
+ this.connectedRelays.splice(index, 1);
59
+ this.config.relays = [...this.connectedRelays];
60
+ logger.debug('NostrAdapter: removed relay', { url });
61
+ }
62
+ }
63
+ getConfig() {
64
+ return { ...this.config, relays: [...this.config.relays] };
65
+ }
66
+ }
67
+ export default NostrAdapter;
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/nostr/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Twilio Voice Channel Adapter
3
+ *
4
+ * Manages voice calls via Twilio API.
5
+ * This is a stub implementation.
6
+ */
7
+ export interface TwilioVoiceConfig {
8
+ accountSid: string;
9
+ authToken: string;
10
+ phoneNumber: string;
11
+ webhookUrl?: string;
12
+ }
13
+ export declare class TwilioVoiceAdapter {
14
+ private config;
15
+ private running;
16
+ private activeCalls;
17
+ constructor(config: TwilioVoiceConfig);
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ isRunning(): boolean;
21
+ makeCall(to: string, message: string): Promise<{
22
+ success: boolean;
23
+ callSid: string;
24
+ }>;
25
+ endCall(callSid: string): Promise<{
26
+ success: boolean;
27
+ }>;
28
+ getActiveCalls(): Array<{
29
+ callSid: string;
30
+ to: string;
31
+ startedAt: Date;
32
+ }>;
33
+ generateTwiML(message: string): string;
34
+ getConfig(): TwilioVoiceConfig;
35
+ private escapeXml;
36
+ }
37
+ export default TwilioVoiceAdapter;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Twilio Voice Channel Adapter
3
+ *
4
+ * Manages voice calls via Twilio API.
5
+ * This is a stub implementation.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ let callCounter = 0;
9
+ export class TwilioVoiceAdapter {
10
+ config;
11
+ running = false;
12
+ activeCalls = new Map();
13
+ constructor(config) {
14
+ this.config = { ...config };
15
+ }
16
+ async start() {
17
+ if (this.running) {
18
+ throw new Error('TwilioVoiceAdapter is already running');
19
+ }
20
+ logger.debug('TwilioVoiceAdapter: initializing', {
21
+ accountSid: this.config.accountSid,
22
+ phoneNumber: this.config.phoneNumber,
23
+ });
24
+ this.running = true;
25
+ }
26
+ async stop() {
27
+ if (!this.running) {
28
+ throw new Error('TwilioVoiceAdapter is not running');
29
+ }
30
+ logger.debug('TwilioVoiceAdapter: stopping');
31
+ this.activeCalls.clear();
32
+ this.running = false;
33
+ }
34
+ isRunning() {
35
+ return this.running;
36
+ }
37
+ async makeCall(to, message) {
38
+ if (!this.running) {
39
+ throw new Error('TwilioVoiceAdapter is not running');
40
+ }
41
+ const callSid = `CA${Date.now()}_${++callCounter}`;
42
+ this.activeCalls.set(callSid, { to, startedAt: new Date() });
43
+ logger.debug('TwilioVoiceAdapter: making call', { to, callSid });
44
+ return { success: true, callSid };
45
+ }
46
+ async endCall(callSid) {
47
+ if (!this.running) {
48
+ throw new Error('TwilioVoiceAdapter is not running');
49
+ }
50
+ const existed = this.activeCalls.delete(callSid);
51
+ logger.debug('TwilioVoiceAdapter: ending call', { callSid, existed });
52
+ return { success: existed };
53
+ }
54
+ getActiveCalls() {
55
+ return Array.from(this.activeCalls.entries()).map(([callSid, info]) => ({
56
+ callSid,
57
+ ...info,
58
+ }));
59
+ }
60
+ generateTwiML(message) {
61
+ return `<?xml version="1.0" encoding="UTF-8"?><Response><Say>${this.escapeXml(message)}</Say></Response>`;
62
+ }
63
+ getConfig() {
64
+ return { ...this.config };
65
+ }
66
+ escapeXml(str) {
67
+ return str
68
+ .replace(/&/g, '&amp;')
69
+ .replace(/</g, '&lt;')
70
+ .replace(/>/g, '&gt;')
71
+ .replace(/"/g, '&quot;')
72
+ .replace(/'/g, '&apos;');
73
+ }
74
+ }
75
+ export default TwilioVoiceAdapter;
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/twilio-voice/index.ts"],"names":[],"mappings":"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"}
@@ -53,7 +53,6 @@ export class WhatsAppChannel extends BaseChannel {
53
53
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
54
  let baileys;
55
55
  try {
56
- // @ts-expect-error -- optional dependency, loaded dynamically
57
56
  baileys = await import('@whiskeysockets/baileys');
58
57
  }
59
58
  catch {