goto-assistant 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -57
- package/bin/goto-assistant-messaging.js +2 -0
- package/dist/agents/claude.js +11 -9
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/openai.js +29 -9
- package/dist/agents/openai.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -1
- package/dist/cron.d.ts +2 -0
- package/dist/cron.js +15 -0
- package/dist/cron.js.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-messaging.d.ts +5 -0
- package/dist/mcp-messaging.js +164 -0
- package/dist/mcp-messaging.js.map +1 -0
- package/dist/messaging.d.ts +18 -0
- package/dist/messaging.js +35 -0
- package/dist/messaging.js.map +1 -0
- package/dist/server.js +65 -2
- package/dist/server.js.map +1 -1
- package/dist/uploads.d.ts +9 -0
- package/dist/uploads.js +41 -13
- package/dist/uploads.js.map +1 -1
- package/dist/whatsapp.d.ts +14 -0
- package/dist/whatsapp.js +202 -23
- package/dist/whatsapp.js.map +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ Schedule tasks to run periodically using natural language.
|
|
|
132
132
|
|
|
133
133
|
**Chat & manage tasks on WhatsApp**
|
|
134
134
|
|
|
135
|
-
<video src="https://github.com/user-attachments/assets/
|
|
135
|
+
<video src="https://github.com/user-attachments/assets/33a6bf28-2a57-426a-8002-b022178aa0d8" width="100%"></video>
|
|
136
136
|
|
|
137
137
|
Chat with the AI assistant and manage tasks from WhatsApp — the same assistant, on the go.
|
|
138
138
|
|
|
@@ -173,51 +173,9 @@ Messages go through the same AI pipeline as the web chat. The agent only respond
|
|
|
173
173
|
|
|
174
174
|
## Architecture
|
|
175
175
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
│ ┌───────────────────────┐ ┌────────────┐ │ │ │
|
|
180
|
-
│ │ index.html │ │ setup.html │ │ │ Self-chat sends │
|
|
181
|
-
│ │ ┌───────┐ ┌─────────┐ │ │ (Config + │ │ │ messages to agent │
|
|
182
|
-
│ │ │ Chat │ │ Tasks │ │ │ Wizard) │ │ │ │
|
|
183
|
-
│ │ │ │ │Dashboard│ │ │ │ │ └──────────┬──────────┘
|
|
184
|
-
│ │ └───────┘ └─────────┘ │ └─────┬──────┘ │ │
|
|
185
|
-
│ └───────────┬────────────┘ │ │ WhatsApp servers
|
|
186
|
-
│ │ WebSocket │ HTTP │ │ WebSocket
|
|
187
|
-
└──────────────┼─────────────────────┼────────┘ │
|
|
188
|
-
│ │ │
|
|
189
|
-
┌──────────────┼─────────────────────┼──────────────────────┼───────┐
|
|
190
|
-
│ server.ts │ │ │ │
|
|
191
|
-
│ ┌───────────┴───┐ ┌─────────────┴─┐ ┌─────────────────┴──┐ │
|
|
192
|
-
│ │ WebSocket │ │ REST API │ │ whatsapp.ts │ │
|
|
193
|
-
│ │ Handler │ │ /api/* │ │ │ │
|
|
194
|
-
│ └───────┬───────┘ └───────────────┘ └──────────┬─────────┘ │
|
|
195
|
-
│ │ │ │
|
|
196
|
-
│ ┌───────┴─────────────────────────────────────────┴──┐ │
|
|
197
|
-
│ │ router.ts ──── routes by provider │ │
|
|
198
|
-
│ └──┬─────────┬───────────────────────────────────────┘ │
|
|
199
|
-
│ │ │ │
|
|
200
|
-
│ ┌──┴───┐ ┌──┴───┐ ┌────────────────────────────────── ┐ │
|
|
201
|
-
│ │Claude│ │OpenAI│───▶│ MCP Servers │ │
|
|
202
|
-
│ │Agent │ │Agent │ │ │ │
|
|
203
|
-
│ │ SDK │ │ SDK │ │ ┌────────┐ ┌────────────┐ ··· │ │
|
|
204
|
-
│ └──┬───┘ └──┬───┘ │ │ memory │ │ filesystem │ │ │
|
|
205
|
-
│ │ │ │ └────────┘ └────────────┘ │ │
|
|
206
|
-
│ │ │ │ ▲ ▲ │ │
|
|
207
|
-
│ │ │ │ │ │ │ │
|
|
208
|
-
│ │ │ │ ┌────┴────────────┴───────────┐ │ │
|
|
209
|
-
│ │ │ │ │ mcp-cron │ │ │
|
|
210
|
-
│ │ │ │ │ AI tasks (w/ MCP access) │ │ │
|
|
211
|
-
│ │ │ │ │ + shell commands │ │ │
|
|
212
|
-
│ │ │ │ └─────────────────────────────┘ │ │
|
|
213
|
-
│ │ │ └────────────────────────────────────┘ │
|
|
214
|
-
│ │ │ │
|
|
215
|
-
│ ┌──┴─────────┴──┐ ┌────────────┐ │
|
|
216
|
-
│ │ sessions.ts │───▶│ SQLite DB │ │
|
|
217
|
-
│ │ (persistence) │ │ data/ │ │
|
|
218
|
-
│ └───────────────┘ └────────────┘ │
|
|
219
|
-
└───────────────────────────────────────────────────────────────────┘
|
|
220
|
-
```
|
|
176
|
+
Browser and WhatsApp clients connect to `server.ts` (WebSocket + REST), which routes messages through `router.ts` to the Claude or OpenAI agent SDK. Agents access MCP servers (memory, filesystem, cron, messaging, etc.) for extended capabilities. Messaging flows through a channel registry — the `mcp-messaging` MCP server proxies tool calls to `POST /api/messaging/send`, which routes to the appropriate channel (WhatsApp, etc.).
|
|
177
|
+
|
|
178
|
+
See [docs/architecture.md](docs/architecture.md) for the full architecture diagram.
|
|
221
179
|
|
|
222
180
|
## Development Setup
|
|
223
181
|
|
|
@@ -256,15 +214,6 @@ The assistant comes pre-configured with these MCP servers:
|
|
|
256
214
|
| **filesystem** | [`@modelcontextprotocol/server-filesystem`](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) | Read, write, and manage local files |
|
|
257
215
|
| **time** | [`mcp-server-time`](https://github.com/modelcontextprotocol/servers/tree/main/src/time) | Current time and timezone conversions |
|
|
258
216
|
| **cron** | [`mcp-cron`](https://github.com/jolks/mcp-cron) | Schedule or run on-demand shell commands and AI prompts with access to MCP servers |
|
|
217
|
+
| **messaging** | built-in | Send messages via connected platforms (WhatsApp, more coming) |
|
|
259
218
|
|
|
260
|
-
Add your own through the setup page — either via the form or by asking the setup wizard AI chat — or by editing `data/mcp.json` directly. Any MCP server that supports stdio transport will work — browse the [MCP server directory](https://github.com/modelcontextprotocol/servers) for more.
|
|
261
|
-
|
|
262
|
-
### Claude Code MCP servers
|
|
263
|
-
|
|
264
|
-
If you use [Claude Code](https://claude.ai/code), copy the example config to get MCP servers for development:
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
cp .mcp.json.example .mcp.json
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
Edit `.mcp.json` to set your preferred AI provider/model for the cron server. This file is gitignored since it contains personal preferences.
|
|
219
|
+
Add your own through the setup page — either via the form or by asking the setup wizard AI chat — or by editing `data/mcp.json` directly. Any MCP server that supports stdio transport will work — browse the [MCP server directory](https://github.com/modelcontextprotocol/servers) for more.
|
package/dist/agents/claude.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
import { MAX_AGENT_TURNS, MEMORY_FILE_PATH, MEMORY_SERVER_NAME } from "../config.js";
|
|
3
|
+
import { extractFileId, formatUploadRef } from "../uploads.js";
|
|
3
4
|
export async function runClaude(prompt, config, mcpServersConfig, onChunk, options) {
|
|
4
5
|
const { resumeSessionId, attachments, systemPromptOverride } = options ?? {};
|
|
5
6
|
const env = {
|
|
@@ -28,23 +29,24 @@ export async function runClaude(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
28
29
|
permissionMode: "bypassPermissions",
|
|
29
30
|
allowDangerouslySkipPermissions: true,
|
|
30
31
|
allowedTools: Object.keys(mcpServersConfig).map((name) => `mcp__${name}__*`),
|
|
31
|
-
systemPrompt: systemPromptOverride || "You are a helpful personal AI assistant. You have access to MCP tools for memory, filesystem, browser automation, and scheduled tasks. Use them when appropriate. IMPORTANT: At the start of each conversation, you MUST call the memory read_graph tool to retrieve all known context about the user before responding to their first message.",
|
|
32
|
+
systemPrompt: systemPromptOverride || "You are a helpful personal AI assistant. You have access to MCP tools for memory, filesystem, browser automation, and scheduled tasks. Use them when appropriate. You can also send messages to the user via connected messaging channels (e.g. WhatsApp) using the messaging tools — send to self or to any phone number. IMPORTANT: At the start of each conversation, you MUST call the memory read_graph tool to retrieve all known context about the user before responding to their first message.",
|
|
32
33
|
env,
|
|
33
34
|
maxTurns: MAX_AGENT_TURNS,
|
|
34
35
|
};
|
|
35
36
|
if (resumeSessionId) {
|
|
36
37
|
queryOptions.resume = resumeSessionId;
|
|
37
38
|
}
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
39
|
+
// Pass image file paths in the prompt so Claude reads them with its built-in
|
|
40
|
+
// Read tool (which returns proper ImageFileOutput for image files).
|
|
41
|
+
// Note: the Agent SDK's query() AsyncIterable<SDKUserMessage> path does NOT
|
|
42
|
+
// support image content blocks — it serializes them as text over IPC.
|
|
41
43
|
let queryPrompt = prompt;
|
|
42
44
|
if (attachments && attachments.length > 0) {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
.map((att) => att.filePath);
|
|
46
|
-
|
|
47
|
-
queryPrompt = `${prompt}\n\n[The user attached ${paths.length} image(s).
|
|
45
|
+
const withPaths = attachments.filter((att) => att.filePath);
|
|
46
|
+
if (withPaths.length > 0) {
|
|
47
|
+
const paths = withPaths.map((att) => att.filePath);
|
|
48
|
+
const refs = withPaths.map(a => formatUploadRef(extractFileId(a.filePath), a.filename, a.mimeType));
|
|
49
|
+
queryPrompt = `${refs.join("\n")}\n${prompt}\n\n[The user attached ${paths.length} image(s). You MUST use the Read tool to view each image before responding. Do NOT describe images without reading them first. Image paths:\n${paths.join("\n")}]`;
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
52
|
let sessionId = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/openai.js
CHANGED
|
@@ -3,7 +3,7 @@ import { exec } from "node:child_process";
|
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
4
|
import { MAX_AGENT_TURNS, MEMORY_FILE_PATH, MEMORY_SERVER_NAME } from "../config.js";
|
|
5
5
|
import { parseMessageContent } from "../sessions.js";
|
|
6
|
-
import { getUpload } from "../uploads.js";
|
|
6
|
+
import { getUpload, ALLOWED_IMAGE_TYPES, extractFileId, formatUploadRef } from "../uploads.js";
|
|
7
7
|
const execAsync = promisify(exec);
|
|
8
8
|
class LocalShell {
|
|
9
9
|
async run(action) {
|
|
@@ -64,7 +64,7 @@ export async function runOpenAI(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
64
64
|
}
|
|
65
65
|
const agent = new Agent({
|
|
66
66
|
name: "goto-assistant",
|
|
67
|
-
instructions: systemPromptOverride || "You are a helpful personal AI assistant. You have access to MCP tools for memory, filesystem, browser automation, and scheduled tasks. You also have a shell tool to execute commands on the host machine. Use them when appropriate. IMPORTANT: At the start of each conversation, you MUST call the memory read_graph tool to retrieve all known context about the user before responding to their first message.",
|
|
67
|
+
instructions: systemPromptOverride || "You are a helpful personal AI assistant. You have access to MCP tools for memory, filesystem, browser automation, and scheduled tasks. You also have a shell tool to execute commands on the host machine. You can also send messages to the user via connected messaging channels (e.g. WhatsApp) using the messaging tools — send to self or to any phone number. Use them when appropriate. IMPORTANT: At the start of each conversation, you MUST call the memory read_graph tool to retrieve all known context about the user before responding to their first message.",
|
|
68
68
|
model: config.openai.model,
|
|
69
69
|
mcpServers,
|
|
70
70
|
tools: [
|
|
@@ -87,16 +87,27 @@ export async function runOpenAI(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
87
87
|
else if (parsed.attachments && parsed.attachments.length > 0) {
|
|
88
88
|
// Re-read image data for user messages that had attachments
|
|
89
89
|
const content = [];
|
|
90
|
+
const refs = [];
|
|
90
91
|
for (const att of parsed.attachments) {
|
|
92
|
+
// Use stored mimeType (accurate at save time); skip non-image attachments
|
|
93
|
+
const mimeType = att.mimeType;
|
|
94
|
+
const ref = formatUploadRef(att.fileId, att.filename, mimeType);
|
|
95
|
+
if (!ALLOWED_IMAGE_TYPES.includes(mimeType)) {
|
|
96
|
+
refs.push(ref);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
91
99
|
const upload = getUpload(att.fileId);
|
|
92
100
|
if (upload) {
|
|
93
101
|
content.push({
|
|
94
102
|
type: "input_image",
|
|
95
|
-
image: `data:${
|
|
103
|
+
image: `data:${mimeType};base64,${upload.data.toString("base64")}`,
|
|
96
104
|
});
|
|
105
|
+
refs.push(ref);
|
|
97
106
|
}
|
|
98
107
|
}
|
|
99
|
-
|
|
108
|
+
// Include upload references so the model can use send_message media with upload:{fileId}
|
|
109
|
+
const text = refs.length > 0 ? `${refs.join("\n")}\n${parsed.text}` : parsed.text;
|
|
110
|
+
content.push({ type: "input_text", text });
|
|
100
111
|
inputMessages.push({ role: "user", content });
|
|
101
112
|
}
|
|
102
113
|
else {
|
|
@@ -107,13 +118,22 @@ export async function runOpenAI(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
107
118
|
// Add current message
|
|
108
119
|
if (attachments && attachments.length > 0) {
|
|
109
120
|
const content = [];
|
|
121
|
+
const refs = [];
|
|
110
122
|
for (const att of attachments) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
123
|
+
// Build upload reference for the model to use with send_message media
|
|
124
|
+
if (att.filePath) {
|
|
125
|
+
refs.push(formatUploadRef(extractFileId(att.filePath), att.filename, att.mimeType));
|
|
126
|
+
}
|
|
127
|
+
// Only include image types as input_image blocks; skip non-image attachments
|
|
128
|
+
if (ALLOWED_IMAGE_TYPES.includes(att.mimeType)) {
|
|
129
|
+
content.push({
|
|
130
|
+
type: "input_image",
|
|
131
|
+
image: `data:${att.mimeType};base64,${att.data.toString("base64")}`,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
115
134
|
}
|
|
116
|
-
|
|
135
|
+
const text = refs.length > 0 ? `${refs.join("\n")}\n${prompt}` : prompt;
|
|
136
|
+
content.push({ type: "input_text", text });
|
|
117
137
|
inputMessages.push({ role: "user", content });
|
|
118
138
|
}
|
|
119
139
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/agents/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/agents/openai.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export declare const MCP_CONFIG_PATH: string;
|
|
|
30
30
|
export declare const MEMORY_FILE_PATH: string;
|
|
31
31
|
export declare const MEMORY_SERVER_NAME = "memory";
|
|
32
32
|
export declare const MAX_AGENT_TURNS = 30;
|
|
33
|
+
export declare const MCP_PROTOCOL_VERSION = "2024-11-05";
|
|
33
34
|
export declare function isConfigured(): boolean;
|
|
34
35
|
export declare function loadConfig(): Config;
|
|
35
36
|
export declare function saveConfig(config: Config): void;
|
|
@@ -47,4 +48,11 @@ export declare function isMaskedValue(value: string): boolean;
|
|
|
47
48
|
export declare function unmaskMcpServers(incoming: Record<string, McpServerConfig>, existing: Record<string, McpServerConfig>, config?: Config): Record<string, McpServerConfig>;
|
|
48
49
|
export declare function maskApiKey(key: string): string;
|
|
49
50
|
export declare function getMaskedConfig(config: Config): Config;
|
|
51
|
+
export declare const MESSAGING_SERVER_NAME = "messaging";
|
|
52
|
+
/**
|
|
53
|
+
* Auto-manage the messaging MCP server entry in mcp.json.
|
|
54
|
+
* Adds when any messaging channel is enabled; removes when none are.
|
|
55
|
+
* Updates GOTO_ASSISTANT_URL when the port changes.
|
|
56
|
+
*/
|
|
57
|
+
export declare function syncMessagingMcpServer(config?: Config): void;
|
|
50
58
|
export declare function getMaskedMcpServers(servers: Record<string, McpServerConfig>): Record<string, McpServerConfig>;
|
package/dist/config.js
CHANGED
|
@@ -6,6 +6,7 @@ export const MCP_CONFIG_PATH = path.join(DATA_DIR, "mcp.json");
|
|
|
6
6
|
export const MEMORY_FILE_PATH = path.join(DATA_DIR, "memory.json");
|
|
7
7
|
export const MEMORY_SERVER_NAME = "memory";
|
|
8
8
|
export const MAX_AGENT_TURNS = 30;
|
|
9
|
+
export const MCP_PROTOCOL_VERSION = "2024-11-05";
|
|
9
10
|
export function isConfigured() {
|
|
10
11
|
return fs.existsSync(CONFIG_PATH);
|
|
11
12
|
}
|
|
@@ -103,6 +104,37 @@ export function getMaskedConfig(config) {
|
|
|
103
104
|
openai: { ...config.openai, apiKey: maskApiKey(config.openai.apiKey) },
|
|
104
105
|
};
|
|
105
106
|
}
|
|
107
|
+
export const MESSAGING_SERVER_NAME = "messaging";
|
|
108
|
+
/**
|
|
109
|
+
* Auto-manage the messaging MCP server entry in mcp.json.
|
|
110
|
+
* Adds when any messaging channel is enabled; removes when none are.
|
|
111
|
+
* Updates GOTO_ASSISTANT_URL when the port changes.
|
|
112
|
+
*/
|
|
113
|
+
export function syncMessagingMcpServer(config) {
|
|
114
|
+
const cfg = config ?? (isConfigured() ? loadConfig() : undefined);
|
|
115
|
+
if (!cfg)
|
|
116
|
+
return;
|
|
117
|
+
const servers = loadMcpServers();
|
|
118
|
+
const hasMessagingChannel = cfg.whatsapp?.enabled === true;
|
|
119
|
+
const port = cfg.server.port;
|
|
120
|
+
const url = `http://localhost:${port}`;
|
|
121
|
+
if (hasMessagingChannel) {
|
|
122
|
+
// Always resolve to dist/ — works in both dev (src/../dist/) and prod (dist/../dist/)
|
|
123
|
+
const entryPoint = path.resolve(import.meta.dirname, "..", "dist", "mcp-messaging.js");
|
|
124
|
+
const desired = { command: "node", args: [entryPoint], env: { GOTO_ASSISTANT_URL: url } };
|
|
125
|
+
// Key order is deterministic (both objects built programmatically).
|
|
126
|
+
// Hand-edited mcp.json with different key order causes a harmless re-write.
|
|
127
|
+
if (JSON.stringify(servers[MESSAGING_SERVER_NAME]) === JSON.stringify(desired))
|
|
128
|
+
return;
|
|
129
|
+
servers[MESSAGING_SERVER_NAME] = desired;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
if (!(MESSAGING_SERVER_NAME in servers))
|
|
133
|
+
return;
|
|
134
|
+
delete servers[MESSAGING_SERVER_NAME];
|
|
135
|
+
}
|
|
136
|
+
saveMcpServers(servers);
|
|
137
|
+
}
|
|
106
138
|
export function getMaskedMcpServers(servers) {
|
|
107
139
|
return Object.fromEntries(Object.entries(servers).map(([name, server]) => [
|
|
108
140
|
name,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAqB7B,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/cron.d.ts
CHANGED
|
@@ -12,3 +12,5 @@ export declare function callCronTool(toolName: string, args?: Record<string, unk
|
|
|
12
12
|
export declare function startCronServer(): Promise<void>;
|
|
13
13
|
export declare function restartCronServer(): Promise<void>;
|
|
14
14
|
export declare function stopCronServer(): Promise<void>;
|
|
15
|
+
/** Synchronous stop for use in process.on("exit") handler. */
|
|
16
|
+
export declare function stopCronSync(): void;
|
package/dist/cron.js
CHANGED
|
@@ -154,6 +154,21 @@ export async function stopCronServer() {
|
|
|
154
154
|
const proc = cronProc;
|
|
155
155
|
cronProc = null;
|
|
156
156
|
lastCronFingerprint = null;
|
|
157
|
+
// Wait for process to actually exit after sending SIGTERM.
|
|
158
|
+
// The broken stdin pipe causes mcp-cron to exit on EOF.
|
|
159
|
+
const exited = new Promise((resolve) => {
|
|
160
|
+
proc.on("exit", () => resolve());
|
|
161
|
+
setTimeout(resolve, 5000); // fallback: don't block shutdown forever
|
|
162
|
+
});
|
|
163
|
+
killProc(proc);
|
|
164
|
+
await exited;
|
|
165
|
+
}
|
|
166
|
+
/** Synchronous stop for use in process.on("exit") handler. */
|
|
167
|
+
export function stopCronSync() {
|
|
168
|
+
if (!cronProc)
|
|
169
|
+
return;
|
|
170
|
+
const proc = cronProc;
|
|
171
|
+
cronProc = null;
|
|
157
172
|
killProc(proc);
|
|
158
173
|
}
|
|
159
174
|
//# sourceMappingURL=cron.js.map
|
package/dist/cron.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../src/cron.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createApp, createServer } from "./server.js";
|
|
2
|
-
import { isConfigured, loadConfig } from "./config.js";
|
|
2
|
+
import { isConfigured, loadConfig, syncMessagingMcpServer } from "./config.js";
|
|
3
3
|
import { runMigrations } from "./migrations.js";
|
|
4
|
-
import { startCronServer, stopCronServer } from "./cron.js";
|
|
4
|
+
import { startCronServer, stopCronServer, stopCronSync } from "./cron.js";
|
|
5
5
|
import { startWhatsApp, stopWhatsApp } from "./whatsapp.js";
|
|
6
6
|
runMigrations();
|
|
7
7
|
const app = createApp();
|
|
@@ -13,8 +13,10 @@ server.listen(port, () => {
|
|
|
13
13
|
console.log("First run detected — visit the URL above to configure.");
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
startCronServer().catch((err) => console.error("Failed to start mcp-cron:", err));
|
|
17
16
|
const config = loadConfig();
|
|
17
|
+
// Channel registration happens inside whatsapp.ts on connection open
|
|
18
|
+
syncMessagingMcpServer(config);
|
|
19
|
+
startCronServer().catch((err) => console.error("Failed to start mcp-cron:", err));
|
|
18
20
|
if (config.whatsapp?.enabled) {
|
|
19
21
|
startWhatsApp().catch((err) => console.error("Failed to start WhatsApp:", err));
|
|
20
22
|
}
|
|
@@ -28,4 +30,5 @@ function shutdown() {
|
|
|
28
30
|
}
|
|
29
31
|
process.on("SIGTERM", shutdown);
|
|
30
32
|
process.on("SIGINT", shutdown);
|
|
33
|
+
process.on("exit", () => { stopCronSync(); });
|
|
31
34
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE5D,aAAa,EAAE,CAAC;AAEhB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;AACxB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AAEjC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAE9D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,qEAAqE;QACrE,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAChD,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC7B,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAChD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACxD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP stdio server for messaging.
|
|
3
|
+
* Proxies send_message / list_channels tool calls to the main Express server's HTTP API.
|
|
4
|
+
*/
|
|
5
|
+
import readline from "node:readline";
|
|
6
|
+
import { MCP_PROTOCOL_VERSION } from "./config.js";
|
|
7
|
+
const BASE_URL = process.env.GOTO_ASSISTANT_URL || "http://localhost:3000";
|
|
8
|
+
function respond(msg) {
|
|
9
|
+
process.stdout.write(JSON.stringify(msg) + "\n");
|
|
10
|
+
}
|
|
11
|
+
function makeResult(id, content, isError = false) {
|
|
12
|
+
return { jsonrpc: "2.0", id, result: { content, ...(isError && { isError: true }) } };
|
|
13
|
+
}
|
|
14
|
+
function makeError(id, code, message) {
|
|
15
|
+
return { jsonrpc: "2.0", id, error: { code, message } };
|
|
16
|
+
}
|
|
17
|
+
const TOOLS = [
|
|
18
|
+
{
|
|
19
|
+
name: "send_message",
|
|
20
|
+
description: "Send a message via a connected messaging channel (e.g. WhatsApp). Supports text, media (image/video/audio/document), or both. Use list_channels to see available channels.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
channel: { type: "string", description: 'Messaging channel (e.g. "whatsapp")' },
|
|
25
|
+
message: { type: "string", description: "Text message to send (becomes caption when media is provided)" },
|
|
26
|
+
to: { type: "string", description: 'Recipient — phone number (e.g. "+60123456789") or "self" (default: self)' },
|
|
27
|
+
media: { type: "string", description: "Local file path, URL, or upload reference (upload:{fileId}) to a media file to send (image, video, audio, document). When provided, 'message' becomes the caption. Use upload:{fileId} to reference files previously shared in the conversation." },
|
|
28
|
+
},
|
|
29
|
+
required: ["channel"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "list_channels",
|
|
34
|
+
description: "List available messaging channels.",
|
|
35
|
+
inputSchema: { type: "object", properties: {} },
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
async function handleToolCall(id, name, args) {
|
|
39
|
+
if (name === "list_channels") {
|
|
40
|
+
try {
|
|
41
|
+
const res = await fetch(`${BASE_URL}/api/messaging/channels`);
|
|
42
|
+
if (!res.ok) {
|
|
43
|
+
respond(makeResult(id, [{ type: "text", text: `Error: HTTP ${res.status} from server` }], true));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const data = await res.json();
|
|
47
|
+
respond(makeResult(id, [{ type: "text", text: JSON.stringify(data) }]));
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
respond(makeResult(id, [{ type: "text", text: `Error connecting to server: ${err.message}` }], true));
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (name === "send_message") {
|
|
55
|
+
const { channel, message, to, media } = args;
|
|
56
|
+
if (!channel || typeof channel !== "string") {
|
|
57
|
+
respond(makeResult(id, [{ type: "text", text: "Error: channel is required and must be a string" }], true));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!message && !media) {
|
|
61
|
+
respond(makeResult(id, [{ type: "text", text: "Error: message or media is required" }], true));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (message !== undefined && typeof message !== "string") {
|
|
65
|
+
respond(makeResult(id, [{ type: "text", text: "Error: message must be a string" }], true));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (media !== undefined && typeof media !== "string") {
|
|
69
|
+
respond(makeResult(id, [{ type: "text", text: "Error: media must be a string" }], true));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (to !== undefined && typeof to !== "string") {
|
|
73
|
+
respond(makeResult(id, [{ type: "text", text: "Error: to must be a string if provided" }], true));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic payload
|
|
78
|
+
const payload = { channel };
|
|
79
|
+
if (message)
|
|
80
|
+
payload.message = message;
|
|
81
|
+
if (media)
|
|
82
|
+
payload.media = media;
|
|
83
|
+
if (to)
|
|
84
|
+
payload.to = to;
|
|
85
|
+
const res = await fetch(`${BASE_URL}/api/messaging/send`, {
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: { "Content-Type": "application/json" },
|
|
88
|
+
body: JSON.stringify(payload),
|
|
89
|
+
});
|
|
90
|
+
const data = await res.json();
|
|
91
|
+
if (!res.ok) {
|
|
92
|
+
respond(makeResult(id, [{ type: "text", text: `Error: ${data.error || `HTTP ${res.status}`}` }], true));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
respond(makeResult(id, [{ type: "text", text: JSON.stringify(data) }]));
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
respond(makeResult(id, [{ type: "text", text: `Error connecting to server: ${err.message}` }], true));
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
respond(makeError(id, -32601, `Unknown tool: ${name}`));
|
|
103
|
+
}
|
|
104
|
+
function handleMessage(line) {
|
|
105
|
+
let msg;
|
|
106
|
+
try {
|
|
107
|
+
msg = JSON.parse(line);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
console.error(`[mcp-messaging] Malformed JSON-RPC input: ${line.slice(0, 200)}`);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const id = msg.id;
|
|
114
|
+
const method = msg.method;
|
|
115
|
+
const params = msg.params;
|
|
116
|
+
if (typeof method !== "string") {
|
|
117
|
+
if (id !== undefined) {
|
|
118
|
+
respond(makeError(id, -32600, "Invalid request: missing method"));
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (method === "initialize") {
|
|
123
|
+
respond({
|
|
124
|
+
jsonrpc: "2.0",
|
|
125
|
+
id,
|
|
126
|
+
result: {
|
|
127
|
+
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
128
|
+
capabilities: { tools: {} },
|
|
129
|
+
serverInfo: { name: "goto-assistant-messaging", version: "1.0.0" },
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (method === "notifications/initialized") {
|
|
135
|
+
return; // no response needed
|
|
136
|
+
}
|
|
137
|
+
if (method === "tools/list") {
|
|
138
|
+
respond({ jsonrpc: "2.0", id, result: { tools: TOOLS } });
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (method === "tools/call") {
|
|
142
|
+
if (id === undefined)
|
|
143
|
+
return; // notifications don't get responses
|
|
144
|
+
const toolName = params?.name;
|
|
145
|
+
if (!toolName) {
|
|
146
|
+
respond(makeError(id, -32602, "Invalid params: missing tool name"));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const toolArgs = (params?.arguments ?? {});
|
|
150
|
+
// .catch: tool errors are returned as content text per MCP spec, not as JSON-RPC errors
|
|
151
|
+
handleToolCall(id, toolName, toolArgs).catch((err) => {
|
|
152
|
+
respond(makeResult(id, [{ type: "text", text: `Internal error: ${err.message}` }], true));
|
|
153
|
+
});
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Unknown method
|
|
157
|
+
if (id !== undefined) {
|
|
158
|
+
respond(makeError(id, -32601, `Method not found: ${method}`));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const rl = readline.createInterface({ input: process.stdin, terminal: false });
|
|
162
|
+
rl.on("line", handleMessage);
|
|
163
|
+
rl.on("close", () => process.exit(0));
|
|
164
|
+
//# sourceMappingURL=mcp-messaging.js.map
|