aibroker 0.2.6 → 0.6.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 (170) hide show
  1. package/README.md +164 -4
  2. package/dist/adapters/iterm/core.d.ts +2 -0
  3. package/dist/adapters/iterm/core.d.ts.map +1 -1
  4. package/dist/adapters/iterm/core.js +13 -5
  5. package/dist/adapters/iterm/core.js.map +1 -1
  6. package/dist/adapters/iterm/iterm2-api.d.ts +20 -0
  7. package/dist/adapters/iterm/iterm2-api.d.ts.map +1 -0
  8. package/dist/adapters/iterm/iterm2-api.js +244 -0
  9. package/dist/adapters/iterm/iterm2-api.js.map +1 -0
  10. package/dist/adapters/iterm/sessions.d.ts.map +1 -1
  11. package/dist/adapters/iterm/sessions.js +3 -2
  12. package/dist/adapters/iterm/sessions.js.map +1 -1
  13. package/dist/adapters/kokoro/media.d.ts +2 -1
  14. package/dist/adapters/kokoro/media.d.ts.map +1 -1
  15. package/dist/adapters/kokoro/media.js +53 -5
  16. package/dist/adapters/kokoro/media.js.map +1 -1
  17. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).d.ts +49 -0
  18. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +1 -0
  19. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).js +632 -0
  20. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).js.map +1 -0
  21. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-59).js +632 -0
  22. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).d.ts +49 -0
  23. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +1 -0
  24. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).js +614 -0
  25. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).js.map +1 -0
  26. package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-46).js +614 -0
  27. package/dist/adapters/pailot/gateway.d.ts +48 -0
  28. package/dist/adapters/pailot/gateway.d.ts (SFConflict mnott 2026-03-06-21-13-59).map +1 -0
  29. package/dist/adapters/pailot/gateway.d.ts (SFConflict mnott 2026-03-06-21-15-46).map +1 -0
  30. package/dist/adapters/pailot/gateway.d.ts.map +1 -0
  31. package/dist/adapters/pailot/gateway.js +828 -0
  32. package/dist/adapters/pailot/gateway.js (SFConflict mnott 2026-03-06-21-13-59).map +1 -0
  33. package/dist/adapters/pailot/gateway.js (SFConflict mnott 2026-03-06-21-15-46).map +1 -0
  34. package/dist/adapters/pailot/gateway.js.map +1 -0
  35. package/dist/backend/api.d.ts +5 -1
  36. package/dist/backend/api.d.ts.map +1 -1
  37. package/dist/backend/api.js +74 -3
  38. package/dist/backend/api.js.map +1 -1
  39. package/dist/core/hybrid.d.ts +7 -0
  40. package/dist/core/hybrid.d.ts.map +1 -1
  41. package/dist/core/hybrid.js +33 -0
  42. package/dist/core/hybrid.js.map +1 -1
  43. package/dist/core/state.d.ts +3 -0
  44. package/dist/core/state.d.ts.map +1 -1
  45. package/dist/core/state.js +4 -0
  46. package/dist/core/state.js.map +1 -1
  47. package/dist/core/status-cache.d.ts +51 -0
  48. package/dist/core/status-cache.d.ts.map +1 -0
  49. package/dist/core/status-cache.js +62 -0
  50. package/dist/core/status-cache.js.map +1 -0
  51. package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).d.ts +63 -0
  52. package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +1 -0
  53. package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).js +229 -0
  54. package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).js.map +1 -0
  55. package/dist/daemon/adapter-registry.d.ts +63 -0
  56. package/dist/daemon/adapter-registry.d.ts.map +1 -0
  57. package/dist/daemon/adapter-registry.js +240 -0
  58. package/dist/daemon/adapter-registry.js.map +1 -0
  59. package/dist/daemon/cli.d.ts +14 -0
  60. package/dist/daemon/cli.d.ts.map +1 -0
  61. package/dist/daemon/cli.js +150 -0
  62. package/dist/daemon/cli.js.map +1 -0
  63. package/dist/daemon/command-context.d.ts +24 -0
  64. package/dist/daemon/command-context.d.ts.map +1 -0
  65. package/dist/daemon/command-context.js +13 -0
  66. package/dist/daemon/command-context.js.map +1 -0
  67. package/dist/daemon/commands.d.ts +22 -0
  68. package/dist/daemon/commands.d.ts.map +1 -0
  69. package/dist/daemon/commands.js +632 -0
  70. package/dist/daemon/commands.js.map +1 -0
  71. package/dist/daemon/core-handlers.d.ts +24 -0
  72. package/dist/daemon/core-handlers.d.ts.map +1 -0
  73. package/dist/daemon/core-handlers.js +640 -0
  74. package/dist/daemon/core-handlers.js.map +1 -0
  75. package/dist/daemon/create-adapter.d.ts +22 -0
  76. package/dist/daemon/create-adapter.d.ts.map +1 -0
  77. package/dist/daemon/create-adapter.js +153 -0
  78. package/dist/daemon/create-adapter.js.map +1 -0
  79. package/dist/daemon/image-gen.d.ts +28 -0
  80. package/dist/daemon/image-gen.d.ts.map +1 -0
  81. package/dist/daemon/image-gen.js +97 -0
  82. package/dist/daemon/image-gen.js.map +1 -0
  83. package/dist/daemon/index.d.ts +12 -0
  84. package/dist/daemon/index.d.ts.map +1 -0
  85. package/dist/daemon/index.js +184 -0
  86. package/dist/daemon/index.js.map +1 -0
  87. package/dist/daemon/pai-projects.d.ts +68 -0
  88. package/dist/daemon/pai-projects.d.ts.map +1 -0
  89. package/dist/daemon/pai-projects.js +174 -0
  90. package/dist/daemon/pai-projects.js.map +1 -0
  91. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).d.ts +12 -0
  92. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +1 -0
  93. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).js +252 -0
  94. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).js.map +1 -0
  95. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-59).js +252 -0
  96. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).d.ts +12 -0
  97. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +1 -0
  98. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).js +240 -0
  99. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).js.map +1 -0
  100. package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-46).js +240 -0
  101. package/dist/daemon/screenshot.d.ts +12 -0
  102. package/dist/daemon/screenshot.d.ts (SFConflict mnott 2026-03-06-21-13-59).map +1 -0
  103. package/dist/daemon/screenshot.d.ts (SFConflict mnott 2026-03-06-21-15-46).map +1 -0
  104. package/dist/daemon/screenshot.d.ts.map +1 -0
  105. package/dist/daemon/screenshot.js +252 -0
  106. package/dist/daemon/screenshot.js (SFConflict mnott 2026-03-06-21-13-59).map +1 -0
  107. package/dist/daemon/screenshot.js (SFConflict mnott 2026-03-06-21-15-46).map +1 -0
  108. package/dist/daemon/screenshot.js.map +1 -0
  109. package/dist/daemon/session-content.d.ts +27 -0
  110. package/dist/daemon/session-content.d.ts.map +1 -0
  111. package/dist/daemon/session-content.js +76 -0
  112. package/dist/daemon/session-content.js.map +1 -0
  113. package/dist/daemon/vision.d.ts +46 -0
  114. package/dist/daemon/vision.d.ts.map +1 -0
  115. package/dist/daemon/vision.js +176 -0
  116. package/dist/daemon/vision.js.map +1 -0
  117. package/dist/index.d.ts +16 -2
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +12 -1
  120. package/dist/index.js.map +1 -1
  121. package/dist/ipc/client.d.ts +4 -1
  122. package/dist/ipc/client.d.ts.map +1 -1
  123. package/dist/ipc/client.js +10 -1
  124. package/dist/ipc/client.js.map +1 -1
  125. package/dist/ipc/validate.d.ts +52 -0
  126. package/dist/ipc/validate.d.ts.map +1 -0
  127. package/dist/ipc/validate.js +129 -0
  128. package/dist/ipc/validate.js.map +1 -0
  129. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).d.ts +23 -0
  130. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +1 -0
  131. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).js +595 -0
  132. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).js.map +1 -0
  133. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-59).js +595 -0
  134. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).d.ts +23 -0
  135. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +1 -0
  136. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).js +592 -0
  137. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).js.map +1 -0
  138. package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-46).js +592 -0
  139. package/dist/mcp/index.d.ts +23 -0
  140. package/dist/mcp/index.d.ts.map +1 -0
  141. package/dist/mcp/index.js +660 -0
  142. package/dist/mcp/index.js (SFConflict mnott 2026-03-06-21-13-59).map +1 -0
  143. package/dist/mcp/index.js (SFConflict mnott 2026-03-06-21-15-46).map +1 -0
  144. package/dist/mcp/index.js.map +1 -0
  145. package/dist/types/adapter.d.ts +41 -0
  146. package/dist/types/adapter.d.ts.map +1 -0
  147. package/dist/types/adapter.js +2 -0
  148. package/dist/types/adapter.js.map +1 -0
  149. package/dist/types/backend.d.ts +29 -1
  150. package/dist/types/backend.d.ts.map +1 -1
  151. package/dist/types/broker.d.ts +47 -0
  152. package/dist/types/broker.d.ts.map +1 -0
  153. package/dist/types/broker.js +21 -0
  154. package/dist/types/broker.js.map +1 -0
  155. package/dist/types/index.d.ts +2 -0
  156. package/dist/types/index.d.ts.map +1 -1
  157. package/dist/types/index.js +2 -0
  158. package/dist/types/index.js.map +1 -1
  159. package/package.json +12 -2
  160. package/templates/adapter/ONBOARDING_PROMPT.md +309 -0
  161. package/templates/adapter/README.md.tmpl +81 -0
  162. package/templates/adapter/package.json.tmpl +23 -0
  163. package/templates/adapter/src/watcher/cli.ts.tmpl +12 -0
  164. package/templates/adapter/src/watcher/commands.ts.tmpl +44 -0
  165. package/templates/adapter/src/watcher/connection.ts.tmpl +59 -0
  166. package/templates/adapter/src/watcher/index.ts.tmpl +201 -0
  167. package/templates/adapter/src/watcher/ipc-server.ts.tmpl +250 -0
  168. package/templates/adapter/src/watcher/send.ts.tmpl +62 -0
  169. package/templates/adapter/src/watcher/state.ts.tmpl +39 -0
  170. package/templates/adapter/tsconfig.json.tmpl +14 -0
@@ -0,0 +1,592 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mcp/index.ts — AIBroker unified MCP server.
4
+ *
5
+ * Single MCP entry point replacing individual Whazaa and Telex MCP servers.
6
+ * Connects to the AIBroker hub daemon at /tmp/aibroker.sock and forwards
7
+ * all tool calls through the hub to the appropriate adapter.
8
+ *
9
+ * Tool groups:
10
+ * - aibroker_* (14) — hub-level: status, sessions, TTS, dictation, image gen
11
+ * - whatsapp_* (11) — proxied to whazaa adapter via adapter_call
12
+ * - telegram_* (11) — proxied to telex adapter via adapter_call
13
+ * - pailot_* (3) — direct hub calls for PAILot mobile app
14
+ *
15
+ * Usage in ~/.claude.json:
16
+ * "aibroker": {
17
+ * "type": "stdio",
18
+ * "command": "node",
19
+ * "args": ["/Users/i052341/dev/ai/AIBroker/dist/mcp/index.js"]
20
+ * }
21
+ */
22
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
23
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
24
+ import { z } from "zod";
25
+ import { WatcherClient } from "../ipc/client.js";
26
+ const DAEMON_SOCKET = "/tmp/aibroker.sock";
27
+ const hub = new WatcherClient(DAEMON_SOCKET);
28
+ function err(e) {
29
+ const msg = e instanceof Error ? e.message : String(e);
30
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
31
+ }
32
+ function ok(text) {
33
+ return { content: [{ type: "text", text }] };
34
+ }
35
+ async function adapterCall(adapter, method, params = {}) {
36
+ return hub.call_raw("adapter_call", { adapter, method, params });
37
+ }
38
+ // ── Server ──
39
+ const server = new McpServer({ name: "aibroker", version: "0.7.0" }, {
40
+ instructions: [
41
+ "## AIBroker — Unified Message Bridge for Claude Code",
42
+ "",
43
+ "AIBroker connects Claude Code to WhatsApp, Telegram, and PAILot (mobile app)",
44
+ "through a single hub daemon. Messages from any channel are automatically prefixed",
45
+ "so you can distinguish their source and route replies correctly.",
46
+ "",
47
+ "### Message Source Detection",
48
+ "",
49
+ "| Prefix | Source | Reply with |",
50
+ "|--------|--------|------------|",
51
+ "| `[Whazaa]` | Text from WhatsApp | `whatsapp_send` (text reply) |",
52
+ "| `[Whazaa:voice]` | Voice from WhatsApp | `whatsapp_tts` (voice reply) |",
53
+ "| `[Telex]` | Text from Telegram | `telegram_send` (text reply) |",
54
+ "| `[Telex:voice]` | Voice from Telegram | `telegram_tts` (voice reply) |",
55
+ "| `[PAILot]` | Text from PAILot app | `pailot_send` (text reply) |",
56
+ "| `[PAILot:voice]` | Voice from PAILot app | `pailot_tts` (voice reply) |",
57
+ "| _no prefix_ | User typing at the terminal | Terminal only — do NOT send to any channel |",
58
+ "",
59
+ "### Rules",
60
+ "",
61
+ "- **Strip the prefix** before processing the message content.",
62
+ "- **Match the medium**: text in -> text out, voice in -> voice out.",
63
+ "- **Same content**: send the same response as the terminal — do not shorten or paraphrase.",
64
+ "- **Text formatting**: use **bold** and *italic* only for whatsapp_send/telegram_send. No markdown headers or code blocks.",
65
+ "- **Voice formatting**: NEVER use asterisks or any markdown in _tts messages. TTS reads them literally as 'asterisk'. Write plain conversational text only.",
66
+ "- **Acknowledge long tasks**: if a prefixed task will take more than a few seconds, immediately send a brief ack via the matching channel BEFORE starting work. Never leave the client silent.",
67
+ "- **Per-message toggle**: this switches automatically with every message. No manual on/off needed.",
68
+ "",
69
+ "### Companion App Message Detection",
70
+ "",
71
+ "All outgoing messages are tagged so companion apps can distinguish PAI from user:",
72
+ "- **Text messages**: prefixed with U+FEFF (zero-width no-break space, invisible in WhatsApp).",
73
+ "- **All messages (text + voice)**: Baileys message IDs start with `3EB0`. User phone IDs do not.",
74
+ ].join("\n"),
75
+ });
76
+ // ═══════════════════════════════════════════════════════════════════════════
77
+ // Hub-Level Tools (aibroker_*)
78
+ // ═══════════════════════════════════════════════════════════════════════════
79
+ server.tool("aibroker_status", "Hub health: version, adapters, sessions, adapter health", {}, async () => {
80
+ try {
81
+ const r = await hub.call_raw("status", {});
82
+ return ok(JSON.stringify(r, null, 2));
83
+ }
84
+ catch (e) {
85
+ return err(e);
86
+ }
87
+ });
88
+ server.tool("aibroker_adapters", "List registered adapters", {}, async () => {
89
+ try {
90
+ const r = await hub.call_raw("adapter_list", {});
91
+ return ok(JSON.stringify(r, null, 2));
92
+ }
93
+ catch (e) {
94
+ return err(e);
95
+ }
96
+ });
97
+ server.tool("aibroker_sessions", "List Claude sessions managed by the hub", {}, async () => {
98
+ try {
99
+ const r = await hub.call_raw("sessions", {});
100
+ return ok(JSON.stringify(r, null, 2));
101
+ }
102
+ catch (e) {
103
+ return err(e);
104
+ }
105
+ });
106
+ server.tool("aibroker_switch", "Switch the active Claude session", { target: z.string().describe("Session number (1-based) or name substring") }, async ({ target }) => {
107
+ try {
108
+ const r = await hub.call_raw("switch", { target });
109
+ return ok(`Switched to ${r.name ?? target}`);
110
+ }
111
+ catch (e) {
112
+ return err(e);
113
+ }
114
+ });
115
+ server.tool("aibroker_end_session", "End a Claude session (closes tab, removes from registry)", { target: z.string().describe("Session number or name substring") }, async ({ target }) => {
116
+ try {
117
+ const r = await hub.call_raw("end_session", { target });
118
+ return ok(`Ended session ${r.name ?? target}`);
119
+ }
120
+ catch (e) {
121
+ return err(e);
122
+ }
123
+ });
124
+ server.tool("aibroker_rename", "Rename the current Claude session (tab title + registry)", { name: z.string().min(1).describe("New session name") }, async ({ name }) => {
125
+ try {
126
+ const r = await hub.call_raw("rename", { name });
127
+ return ok(`Session renamed to "${r.name ?? name}"`);
128
+ }
129
+ catch (e) {
130
+ return err(e);
131
+ }
132
+ });
133
+ server.tool("aibroker_discover", "Re-scan iTerm2 sessions and refresh registry", {}, async () => {
134
+ try {
135
+ const r = await hub.call_raw("discover", {});
136
+ return ok(JSON.stringify(r, null, 2));
137
+ }
138
+ catch (e) {
139
+ return err(e);
140
+ }
141
+ });
142
+ server.tool("aibroker_voice_config", "Get or set TTS voice configuration", {
143
+ action: z.enum(["get", "set"]).describe("Action: get or set"),
144
+ defaultVoice: z.string().optional().describe("Default TTS voice (e.g. 'bm_fable')"),
145
+ voiceMode: z.boolean().optional().describe("Enable/disable voice mode"),
146
+ localMode: z.boolean().optional().describe("Enable/disable local speaker mode"),
147
+ personas: z.record(z.string(), z.string()).optional().describe("Persona name -> voice mapping"),
148
+ }, async ({ action, defaultVoice, voiceMode, localMode, personas }) => {
149
+ try {
150
+ const updates = {};
151
+ if (defaultVoice !== undefined)
152
+ updates.defaultVoice = defaultVoice;
153
+ if (voiceMode !== undefined)
154
+ updates.voiceMode = voiceMode;
155
+ if (localMode !== undefined)
156
+ updates.localMode = localMode;
157
+ if (personas !== undefined)
158
+ updates.personas = personas;
159
+ const r = await hub.call_raw("voice_config", { action, ...updates });
160
+ return ok(JSON.stringify(r, null, 2));
161
+ }
162
+ catch (e) {
163
+ return err(e);
164
+ }
165
+ });
166
+ server.tool("aibroker_speak", "Speak text aloud through Mac speakers using Kokoro TTS (local, no network send)", {
167
+ text: z.string().min(1).describe("Text to speak"),
168
+ voice: z.string().optional().describe("Voice name (e.g. 'bm_fable', 'af_bella')"),
169
+ }, async ({ text, voice }) => {
170
+ try {
171
+ await hub.call_raw("speak", { text, voice });
172
+ return ok("Speaking.");
173
+ }
174
+ catch (e) {
175
+ return err(e);
176
+ }
177
+ });
178
+ server.tool("aibroker_dictate", "Record from Mac mic, transcribe with Whisper, return text. Stops on ~2s silence.", {
179
+ maxDuration: z.number().min(5).max(300).optional().describe("Max recording seconds (default 60)"),
180
+ }, async ({ maxDuration }) => {
181
+ try {
182
+ const r = await hub.call_raw("dictate", { maxDuration });
183
+ if (!r.text)
184
+ return ok("No speech detected.");
185
+ return ok(`Transcribed: ${r.text}`);
186
+ }
187
+ catch (e) {
188
+ return err(e);
189
+ }
190
+ });
191
+ server.tool("aibroker_generate_image", "Generate an image from a text prompt", {
192
+ prompt: z.string().min(1).describe("Image description"),
193
+ source: z.string().optional().describe("Adapter to deliver result to (e.g. 'whazaa')"),
194
+ recipient: z.string().optional().describe("Recipient within that adapter"),
195
+ width: z.number().optional().describe("Image width"),
196
+ height: z.number().optional().describe("Image height"),
197
+ }, async ({ prompt, source, recipient, width, height }) => {
198
+ try {
199
+ const r = await hub.call_raw("generate_image", { prompt, source, recipient, width, height });
200
+ return ok(JSON.stringify(r, null, 2));
201
+ }
202
+ catch (e) {
203
+ return err(e);
204
+ }
205
+ });
206
+ server.tool("aibroker_command", "Execute a slash command directly through the hub command handler", { text: z.string().min(1).describe("The slash command (e.g. '/s', '/ss', '/restart')") }, async ({ text }) => {
207
+ try {
208
+ const r = await hub.call_raw("command", { text });
209
+ return ok(`Executed: ${text}`);
210
+ }
211
+ catch (e) {
212
+ return err(e);
213
+ }
214
+ });
215
+ server.tool("aibroker_pai_projects", "List PAI named projects", {}, async () => {
216
+ try {
217
+ const r = await hub.call_raw("pai_projects", {});
218
+ return ok(JSON.stringify(r, null, 2));
219
+ }
220
+ catch (e) {
221
+ return err(e);
222
+ }
223
+ });
224
+ server.tool("aibroker_pai_launch", "Launch a PAI named project in a new iTerm2 tab", { name: z.string().min(1).describe("Project name") }, async ({ name }) => {
225
+ try {
226
+ const r = await hub.call_raw("pai_launch", { name });
227
+ return ok(JSON.stringify(r, null, 2));
228
+ }
229
+ catch (e) {
230
+ return err(e);
231
+ }
232
+ });
233
+ // ═══════════════════════════════════════════════════════════════════════════
234
+ // WhatsApp Tools (whatsapp_*) — proxied to whazaa adapter
235
+ // ═══════════════════════════════════════════════════════════════════════════
236
+ server.tool("whatsapp_status", "Check WhatsApp connection state", {}, async () => {
237
+ try {
238
+ const r = await adapterCall("whazaa", "status");
239
+ const s = r;
240
+ if (s.awaitingQR)
241
+ return ok("Awaiting QR scan. Check the watcher terminal.");
242
+ if (s.connected && s.phoneNumber)
243
+ return ok(`Connected. Phone: +${s.phoneNumber}`);
244
+ return ok("Disconnected. Reconnecting in background.");
245
+ }
246
+ catch (e) {
247
+ return err(e);
248
+ }
249
+ });
250
+ server.tool("whatsapp_send", "Send a WhatsApp message. Without recipient: self-chat. Set channel='pailot' to send only to PAILot app.", {
251
+ message: z.string().min(1).describe("Message text"),
252
+ recipient: z.string().optional().describe("Phone number, JID, or contact name. Omit for self-chat."),
253
+ voice: z.string().optional().describe("If set, send as TTS voice note. 'true'/'default' for default voice, or voice name."),
254
+ channel: z.enum(["whatsapp", "pailot"]).optional().describe("'pailot' sends only to PAILot. Default: whatsapp."),
255
+ }, async ({ message, recipient, voice, channel }) => {
256
+ try {
257
+ if (voice !== undefined && voice !== "") {
258
+ const explicitVoice = (voice === "true" || voice === "default") ? undefined : voice;
259
+ await adapterCall("whazaa", "tts", { text: message, voice: explicitVoice, jid: recipient, channel });
260
+ return ok("Sent.");
261
+ }
262
+ await adapterCall("whazaa", "send", { message, recipient, channel });
263
+ return ok("Sent.");
264
+ }
265
+ catch (e) {
266
+ return err(e);
267
+ }
268
+ });
269
+ server.tool("whatsapp_tts", "Convert text to speech and send as WhatsApp voice note using Kokoro TTS (local).", {
270
+ message: z.string().min(1).describe("Text to speak"),
271
+ voice: z.string().optional().describe("Voice name (e.g. 'af_bella', 'bm_george')"),
272
+ recipient: z.string().optional().describe("Phone number, JID, or contact name. Omit for self-chat."),
273
+ channel: z.enum(["whatsapp", "pailot"]).optional().describe("'pailot' sends only to PAILot."),
274
+ }, async ({ message, voice, recipient, channel }) => {
275
+ try {
276
+ const r = await adapterCall("whazaa", "tts", { text: message, voice, jid: recipient, channel });
277
+ const chunks = r?.chunks ?? 1;
278
+ return ok(chunks > 1 ? `Sent ${chunks} voice notes.` : "Sent.");
279
+ }
280
+ catch (e) {
281
+ return err(e);
282
+ }
283
+ });
284
+ server.tool("whatsapp_send_file", "Send a file via WhatsApp. Set prettify=true to convert text/md to formatted messages.", {
285
+ filePath: z.string().min(1).describe("Absolute path to the file"),
286
+ recipient: z.string().optional().describe("Phone number, JID, or name. Omit for self-chat."),
287
+ caption: z.string().optional().describe("Caption for the file"),
288
+ prettify: z.boolean().optional().describe("Convert text/md files to WhatsApp-formatted messages"),
289
+ }, async ({ filePath, recipient, caption, prettify }) => {
290
+ try {
291
+ await adapterCall("whazaa", "send_file", { filePath, recipient, caption, prettify });
292
+ return ok("Sent.");
293
+ }
294
+ catch (e) {
295
+ return err(e);
296
+ }
297
+ });
298
+ server.tool("whatsapp_receive", "Drain queued incoming WhatsApp messages. Use from='all' for all chats.", {
299
+ from: z.string().optional().describe("Sender filter: phone, JID, name, or 'all'. Omit for self-chat."),
300
+ }, async ({ from }) => {
301
+ try {
302
+ const r = await adapterCall("whazaa", "receive", { from });
303
+ const msgs = r?.messages ?? [];
304
+ if (msgs.length === 0)
305
+ return ok("No new messages.");
306
+ const lines = msgs.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.body}`);
307
+ return ok(lines.join("\n"));
308
+ }
309
+ catch (e) {
310
+ return err(e);
311
+ }
312
+ });
313
+ server.tool("whatsapp_contacts", "List recently seen WhatsApp contacts", {
314
+ search: z.string().optional().describe("Filter by name or phone"),
315
+ limit: z.number().min(1).max(200).optional().describe("Max results (default 50)"),
316
+ }, async ({ search, limit }) => {
317
+ try {
318
+ const r = await adapterCall("whazaa", "contacts", { search, limit });
319
+ const contacts = r?.contacts ?? [];
320
+ if (contacts.length === 0)
321
+ return ok(search ? `No contacts matching '${search}'.` : "No contacts seen yet.");
322
+ const lines = contacts.map((c) => `${c.name ?? ""} +${c.phoneNumber} (${c.jid})`);
323
+ return ok(`${contacts.length} contact(s):\n${lines.join("\n")}`);
324
+ }
325
+ catch (e) {
326
+ return err(e);
327
+ }
328
+ });
329
+ server.tool("whatsapp_chats", "List WhatsApp chat conversations", {
330
+ search: z.string().optional().describe("Filter by name or phone"),
331
+ limit: z.number().min(1).max(200).optional().describe("Max results (default 50)"),
332
+ }, async ({ search, limit }) => {
333
+ try {
334
+ const r = await adapterCall("whazaa", "chats", { search, limit });
335
+ const chats = r?.chats ?? [];
336
+ if (chats.length === 0)
337
+ return ok(search ? `No chats matching '${search}'.` : "No chats found.");
338
+ const lines = chats.map((c) => {
339
+ const unread = c.unreadCount > 0 ? ` [${c.unreadCount} unread]` : "";
340
+ return `${c.name} (${c.jid})${unread}`;
341
+ });
342
+ return ok(`${chats.length} chat(s):\n${lines.join("\n")}`);
343
+ }
344
+ catch (e) {
345
+ return err(e);
346
+ }
347
+ });
348
+ server.tool("whatsapp_wait", "Long-poll for next incoming WhatsApp message (blocks until arrival or timeout)", {
349
+ timeout: z.number().min(1).max(300).optional().describe("Max seconds to wait (default 120)"),
350
+ }, async ({ timeout }) => {
351
+ try {
352
+ const r = await adapterCall("whazaa", "wait", { timeoutMs: (timeout ?? 120) * 1000 });
353
+ const msgs = r?.messages ?? [];
354
+ if (msgs.length === 0)
355
+ return ok("No messages received (timed out).");
356
+ const lines = msgs.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.body}`);
357
+ return ok(lines.join("\n"));
358
+ }
359
+ catch (e) {
360
+ return err(e);
361
+ }
362
+ });
363
+ server.tool("whatsapp_login", "Trigger new WhatsApp QR pairing flow", {}, async () => {
364
+ try {
365
+ const r = await adapterCall("whazaa", "login");
366
+ return ok(r?.message ?? "Login flow triggered. Check watcher terminal for QR.");
367
+ }
368
+ catch (e) {
369
+ return err(e);
370
+ }
371
+ });
372
+ server.tool("whatsapp_history", "Fetch message history for a WhatsApp chat", {
373
+ jid: z.string().min(1).describe("Chat JID or phone number"),
374
+ count: z.number().min(1).max(500).optional().describe("Number of messages (default 50)"),
375
+ }, async ({ jid, count }) => {
376
+ try {
377
+ const r = await adapterCall("whazaa", "history", { jid, count });
378
+ const msgs = r?.messages ?? [];
379
+ if (msgs.length === 0)
380
+ return ok("No messages found.");
381
+ const lines = msgs.map((m) => `[${m.date}] ${m.fromMe ? "Me" : (m.pushName ?? "Them")}: ${m.text}`);
382
+ return ok(`${msgs.length} message(s):\n${lines.join("\n")}`);
383
+ }
384
+ catch (e) {
385
+ return err(e);
386
+ }
387
+ });
388
+ server.tool("whatsapp_restart", "Restart the WhatsApp watcher service (launchd)", {}, async () => {
389
+ try {
390
+ const r = await adapterCall("whazaa", "restart");
391
+ return ok(JSON.stringify(r, null, 2));
392
+ }
393
+ catch (e) {
394
+ return err(e);
395
+ }
396
+ });
397
+ // ═══════════════════════════════════════════════════════════════════════════
398
+ // Telegram Tools (telegram_*) — proxied to telex adapter
399
+ // ═══════════════════════════════════════════════════════════════════════════
400
+ server.tool("telegram_status", "Check Telegram connection status", {}, async () => {
401
+ try {
402
+ const r = await adapterCall("telex", "status");
403
+ return ok(JSON.stringify(r, null, 2));
404
+ }
405
+ catch (e) {
406
+ return err(e);
407
+ }
408
+ });
409
+ server.tool("telegram_send", "Send a text message via Telegram", {
410
+ message: z.string().min(1).describe("Message text"),
411
+ recipient: z.string().optional().describe("Username, phone, chat ID, or name. Default: Saved Messages."),
412
+ voice: z.boolean().optional().describe("If true, send as voice note via TTS"),
413
+ }, async ({ message, recipient, voice }) => {
414
+ try {
415
+ if (voice) {
416
+ await adapterCall("telex", "tts", { text: message, recipient });
417
+ return ok("Sent.");
418
+ }
419
+ await adapterCall("telex", "send", { message, recipient });
420
+ return ok("Sent.");
421
+ }
422
+ catch (e) {
423
+ return err(e);
424
+ }
425
+ });
426
+ server.tool("telegram_tts", "Send a voice note via Telegram (Kokoro TTS)", {
427
+ text: z.string().min(1).describe("Text to speak"),
428
+ recipient: z.string().optional().describe("Recipient. Default: Saved Messages."),
429
+ voice: z.string().optional().describe("Voice name"),
430
+ }, async ({ text, recipient, voice }) => {
431
+ try {
432
+ const r = await adapterCall("telex", "tts", { text, recipient, voice });
433
+ const chunks = r?.chunks ?? 1;
434
+ return ok(chunks > 1 ? `Sent ${chunks} voice notes.` : "Sent.");
435
+ }
436
+ catch (e) {
437
+ return err(e);
438
+ }
439
+ });
440
+ server.tool("telegram_send_file", "Send a file via Telegram", {
441
+ filePath: z.string().min(1).describe("Absolute path to the file"),
442
+ recipient: z.string().optional().describe("Recipient. Default: Saved Messages."),
443
+ caption: z.string().optional().describe("Caption"),
444
+ prettify: z.boolean().optional().describe("Convert text/md to formatted Telegram messages"),
445
+ }, async ({ filePath, recipient, caption, prettify }) => {
446
+ try {
447
+ await adapterCall("telex", "send_file", { filePath, recipient, caption, prettify });
448
+ return ok("Sent.");
449
+ }
450
+ catch (e) {
451
+ return err(e);
452
+ }
453
+ });
454
+ server.tool("telegram_receive", "Drain queued incoming Telegram messages", {
455
+ from: z.string().optional().describe("Source: omit for self, 'all' for all, or chat ID/name"),
456
+ }, async ({ from }) => {
457
+ try {
458
+ const r = await adapterCall("telex", "receive", { from });
459
+ const msgs = r?.messages ?? [];
460
+ if (msgs.length === 0)
461
+ return ok("No new messages.");
462
+ const lines = msgs.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.body}`);
463
+ return ok(lines.join("\n"));
464
+ }
465
+ catch (e) {
466
+ return err(e);
467
+ }
468
+ });
469
+ server.tool("telegram_contacts", "List Telegram contacts", {
470
+ search: z.string().optional().describe("Filter by name/username"),
471
+ limit: z.number().optional().describe("Max results"),
472
+ }, async ({ search, limit }) => {
473
+ try {
474
+ const r = await adapterCall("telex", "contacts", { search, limit });
475
+ return ok(JSON.stringify(r, null, 2));
476
+ }
477
+ catch (e) {
478
+ return err(e);
479
+ }
480
+ });
481
+ server.tool("telegram_chats", "List Telegram chats", {
482
+ search: z.string().optional().describe("Filter"),
483
+ limit: z.number().optional().describe("Max results (default 50)"),
484
+ }, async ({ search, limit }) => {
485
+ try {
486
+ const r = await adapterCall("telex", "chats", { search, limit });
487
+ return ok(JSON.stringify(r, null, 2));
488
+ }
489
+ catch (e) {
490
+ return err(e);
491
+ }
492
+ });
493
+ server.tool("telegram_wait", "Long-poll for incoming Telegram messages", {
494
+ timeoutMs: z.number().optional().describe("Max wait in ms (default 120000)"),
495
+ }, async ({ timeoutMs }) => {
496
+ try {
497
+ const r = await adapterCall("telex", "wait", { timeoutMs });
498
+ const msgs = r?.messages ?? [];
499
+ if (msgs.length === 0)
500
+ return ok("No messages received (timed out).");
501
+ const lines = msgs.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.body}`);
502
+ return ok(lines.join("\n"));
503
+ }
504
+ catch (e) {
505
+ return err(e);
506
+ }
507
+ });
508
+ server.tool("telegram_login", "Trigger fresh Telegram authentication", {}, async () => {
509
+ try {
510
+ const r = await adapterCall("telex", "login");
511
+ return ok(JSON.stringify(r, null, 2));
512
+ }
513
+ catch (e) {
514
+ return err(e);
515
+ }
516
+ });
517
+ server.tool("telegram_history", "Get message history for a Telegram chat", {
518
+ chatId: z.string().min(1).describe("Chat ID, username, or 'me' for Saved Messages"),
519
+ count: z.number().optional().describe("Number of messages (default 20)"),
520
+ }, async ({ chatId, count }) => {
521
+ try {
522
+ const r = await adapterCall("telex", "history", { chatId, count });
523
+ const msgs = r?.messages ?? [];
524
+ if (msgs.length === 0)
525
+ return ok("No messages found.");
526
+ const lines = msgs.map((m) => `[${m.date}] ${m.fromMe ? "Me" : "Them"}: ${m.text}`);
527
+ return ok(`${msgs.length} message(s):\n${lines.join("\n")}`);
528
+ }
529
+ catch (e) {
530
+ return err(e);
531
+ }
532
+ });
533
+ server.tool("telegram_restart", "Restart the Telegram watcher service", {}, async () => {
534
+ try {
535
+ const r = await adapterCall("telex", "restart");
536
+ return ok(JSON.stringify(r, null, 2));
537
+ }
538
+ catch (e) {
539
+ return err(e);
540
+ }
541
+ });
542
+ // ═══════════════════════════════════════════════════════════════════════════
543
+ // PAILot Tools (pailot_*) — direct hub calls
544
+ // ═══════════════════════════════════════════════════════════════════════════
545
+ server.tool("pailot_send", "Send a text message to the PAILot mobile app", { message: z.string().min(1).describe("Message text") }, async ({ message }) => {
546
+ try {
547
+ await hub.call_raw("pailot_send", { text: message });
548
+ return ok("Sent.");
549
+ }
550
+ catch (e) {
551
+ return err(e);
552
+ }
553
+ });
554
+ server.tool("pailot_tts", "Send a voice note to the PAILot mobile app (Kokoro TTS)", {
555
+ message: z.string().min(1).describe("Text to speak"),
556
+ voice: z.string().optional().describe("Voice name"),
557
+ }, async ({ message, voice }) => {
558
+ try {
559
+ await hub.call_raw("pailot_send", { text: message, voice: true, voiceName: voice });
560
+ return ok("Sent.");
561
+ }
562
+ catch (e) {
563
+ return err(e);
564
+ }
565
+ });
566
+ server.tool("pailot_receive", "Drain queued incoming PAILot messages", {}, async () => {
567
+ try {
568
+ const r = await hub.call_raw("pailot_receive", {});
569
+ const msgs = r?.messages ?? [];
570
+ if (msgs.length === 0)
571
+ return ok("No new messages.");
572
+ const lines = msgs.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.body}`);
573
+ return ok(lines.join("\n"));
574
+ }
575
+ catch (e) {
576
+ return err(e);
577
+ }
578
+ });
579
+ // ── Startup ──
580
+ async function main() {
581
+ // Register with hub daemon (non-fatal if hub isn't running yet)
582
+ hub.register().catch((e) => {
583
+ process.stderr.write(`[aibroker-mcp] Hub not running: ${e}\n`);
584
+ });
585
+ const transport = new StdioServerTransport();
586
+ await server.connect(transport);
587
+ }
588
+ main().catch((e) => {
589
+ process.stderr.write(`[aibroker-mcp] Fatal: ${e}\n`);
590
+ process.exit(1);
591
+ });
592
+ //# sourceMappingURL=index%20(SFConflict%20mnott%202026-03-06-21-15-36).js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index (SFConflict mnott 2026-03-06-21-15-36).js","sourceRoot":"","sources":["../../src/mcp/index (SFConflict mnott 2026-03-06-21-15-36).ts"],"names":[],"mappings":"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"}