homaruscc 0.2.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.
Files changed (171) hide show
  1. package/.env.example +8 -0
  2. package/LICENSE +21 -0
  3. package/README.md +307 -0
  4. package/bin/event-loop +60 -0
  5. package/config.example.json +55 -0
  6. package/dist/agent-registry.d.ts +38 -0
  7. package/dist/agent-registry.d.ts.map +1 -0
  8. package/dist/agent-registry.js +207 -0
  9. package/dist/agent-registry.js.map +1 -0
  10. package/dist/backend.d.ts +3 -0
  11. package/dist/backend.d.ts.map +1 -0
  12. package/dist/backend.js +59 -0
  13. package/dist/backend.js.map +1 -0
  14. package/dist/browser-service.d.ts +19 -0
  15. package/dist/browser-service.d.ts.map +1 -0
  16. package/dist/browser-service.js +101 -0
  17. package/dist/browser-service.js.map +1 -0
  18. package/dist/channel-adapter.d.ts +22 -0
  19. package/dist/channel-adapter.d.ts.map +1 -0
  20. package/dist/channel-adapter.js +62 -0
  21. package/dist/channel-adapter.js.map +1 -0
  22. package/dist/channel-manager.d.ts +18 -0
  23. package/dist/channel-manager.d.ts.map +1 -0
  24. package/dist/channel-manager.js +73 -0
  25. package/dist/channel-manager.js.map +1 -0
  26. package/dist/compaction-manager.d.ts +23 -0
  27. package/dist/compaction-manager.d.ts.map +1 -0
  28. package/dist/compaction-manager.js +135 -0
  29. package/dist/compaction-manager.js.map +1 -0
  30. package/dist/config.d.ts +21 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +169 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/dashboard-adapter.d.ts +17 -0
  35. package/dist/dashboard-adapter.d.ts.map +1 -0
  36. package/dist/dashboard-adapter.js +41 -0
  37. package/dist/dashboard-adapter.js.map +1 -0
  38. package/dist/dashboard-server.d.ts +29 -0
  39. package/dist/dashboard-server.d.ts.map +1 -0
  40. package/dist/dashboard-server.js +381 -0
  41. package/dist/dashboard-server.js.map +1 -0
  42. package/dist/embedding-provider.d.ts +28 -0
  43. package/dist/embedding-provider.d.ts.map +1 -0
  44. package/dist/embedding-provider.js +91 -0
  45. package/dist/embedding-provider.js.map +1 -0
  46. package/dist/event-bus.d.ts +18 -0
  47. package/dist/event-bus.d.ts.map +1 -0
  48. package/dist/event-bus.js +41 -0
  49. package/dist/event-bus.js.map +1 -0
  50. package/dist/event-queue.d.ts +18 -0
  51. package/dist/event-queue.d.ts.map +1 -0
  52. package/dist/event-queue.js +68 -0
  53. package/dist/event-queue.js.map +1 -0
  54. package/dist/homaruscc.d.ts +69 -0
  55. package/dist/homaruscc.d.ts.map +1 -0
  56. package/dist/homaruscc.js +337 -0
  57. package/dist/homaruscc.js.map +1 -0
  58. package/dist/identity-manager.d.ts +36 -0
  59. package/dist/identity-manager.d.ts.map +1 -0
  60. package/dist/identity-manager.js +142 -0
  61. package/dist/identity-manager.js.map +1 -0
  62. package/dist/mcp-proxy.d.ts +3 -0
  63. package/dist/mcp-proxy.d.ts.map +1 -0
  64. package/dist/mcp-proxy.js +259 -0
  65. package/dist/mcp-proxy.js.map +1 -0
  66. package/dist/mcp-resources.d.ts +10 -0
  67. package/dist/mcp-resources.d.ts.map +1 -0
  68. package/dist/mcp-resources.js +67 -0
  69. package/dist/mcp-resources.js.map +1 -0
  70. package/dist/mcp-server.d.ts +3 -0
  71. package/dist/mcp-server.d.ts.map +1 -0
  72. package/dist/mcp-server.js +169 -0
  73. package/dist/mcp-server.js.map +1 -0
  74. package/dist/mcp-tools.d.ts +14 -0
  75. package/dist/mcp-tools.d.ts.map +1 -0
  76. package/dist/mcp-tools.js +408 -0
  77. package/dist/mcp-tools.js.map +1 -0
  78. package/dist/memory-index.d.ts +79 -0
  79. package/dist/memory-index.d.ts.map +1 -0
  80. package/dist/memory-index.js +437 -0
  81. package/dist/memory-index.js.map +1 -0
  82. package/dist/session-checkpoint.d.ts +22 -0
  83. package/dist/session-checkpoint.d.ts.map +1 -0
  84. package/dist/session-checkpoint.js +100 -0
  85. package/dist/session-checkpoint.js.map +1 -0
  86. package/dist/skill-manager.d.ts +26 -0
  87. package/dist/skill-manager.d.ts.map +1 -0
  88. package/dist/skill-manager.js +156 -0
  89. package/dist/skill-manager.js.map +1 -0
  90. package/dist/skill-transport.d.ts +45 -0
  91. package/dist/skill-transport.d.ts.map +1 -0
  92. package/dist/skill-transport.js +111 -0
  93. package/dist/skill-transport.js.map +1 -0
  94. package/dist/skill.d.ts +22 -0
  95. package/dist/skill.d.ts.map +1 -0
  96. package/dist/skill.js +106 -0
  97. package/dist/skill.js.map +1 -0
  98. package/dist/telegram-adapter.d.ts +43 -0
  99. package/dist/telegram-adapter.d.ts.map +1 -0
  100. package/dist/telegram-adapter.js +188 -0
  101. package/dist/telegram-adapter.js.map +1 -0
  102. package/dist/timer-service.d.ts +30 -0
  103. package/dist/timer-service.d.ts.map +1 -0
  104. package/dist/timer-service.js +176 -0
  105. package/dist/timer-service.js.map +1 -0
  106. package/dist/tool-registry.d.ts +30 -0
  107. package/dist/tool-registry.d.ts.map +1 -0
  108. package/dist/tool-registry.js +108 -0
  109. package/dist/tool-registry.js.map +1 -0
  110. package/dist/tools/bash.d.ts +3 -0
  111. package/dist/tools/bash.d.ts.map +1 -0
  112. package/dist/tools/bash.js +67 -0
  113. package/dist/tools/bash.js.map +1 -0
  114. package/dist/tools/browser.d.ts +4 -0
  115. package/dist/tools/browser.d.ts.map +1 -0
  116. package/dist/tools/browser.js +138 -0
  117. package/dist/tools/browser.js.map +1 -0
  118. package/dist/tools/edit.d.ts +3 -0
  119. package/dist/tools/edit.d.ts.map +1 -0
  120. package/dist/tools/edit.js +47 -0
  121. package/dist/tools/edit.js.map +1 -0
  122. package/dist/tools/git.d.ts +3 -0
  123. package/dist/tools/git.d.ts.map +1 -0
  124. package/dist/tools/git.js +105 -0
  125. package/dist/tools/git.js.map +1 -0
  126. package/dist/tools/glob.d.ts +3 -0
  127. package/dist/tools/glob.d.ts.map +1 -0
  128. package/dist/tools/glob.js +84 -0
  129. package/dist/tools/glob.js.map +1 -0
  130. package/dist/tools/grep.d.ts +3 -0
  131. package/dist/tools/grep.d.ts.map +1 -0
  132. package/dist/tools/grep.js +168 -0
  133. package/dist/tools/grep.js.map +1 -0
  134. package/dist/tools/index.d.ts +6 -0
  135. package/dist/tools/index.d.ts.map +1 -0
  136. package/dist/tools/index.js +46 -0
  137. package/dist/tools/index.js.map +1 -0
  138. package/dist/tools/memory.d.ts +4 -0
  139. package/dist/tools/memory.d.ts.map +1 -0
  140. package/dist/tools/memory.js +64 -0
  141. package/dist/tools/memory.js.map +1 -0
  142. package/dist/tools/read.d.ts +3 -0
  143. package/dist/tools/read.d.ts.map +1 -0
  144. package/dist/tools/read.js +50 -0
  145. package/dist/tools/read.js.map +1 -0
  146. package/dist/tools/web-fetch.d.ts +3 -0
  147. package/dist/tools/web-fetch.d.ts.map +1 -0
  148. package/dist/tools/web-fetch.js +51 -0
  149. package/dist/tools/web-fetch.js.map +1 -0
  150. package/dist/tools/web-search.d.ts +3 -0
  151. package/dist/tools/web-search.d.ts.map +1 -0
  152. package/dist/tools/web-search.js +65 -0
  153. package/dist/tools/web-search.js.map +1 -0
  154. package/dist/tools/write.d.ts +3 -0
  155. package/dist/tools/write.d.ts.map +1 -0
  156. package/dist/tools/write.js +32 -0
  157. package/dist/tools/write.js.map +1 -0
  158. package/dist/transcript-logger.d.ts +23 -0
  159. package/dist/transcript-logger.d.ts.map +1 -0
  160. package/dist/transcript-logger.js +101 -0
  161. package/dist/transcript-logger.js.map +1 -0
  162. package/dist/types.d.ts +190 -0
  163. package/dist/types.d.ts.map +1 -0
  164. package/dist/types.js +14 -0
  165. package/dist/types.js.map +1 -0
  166. package/identity.example/disagreements.md +9 -0
  167. package/identity.example/preferences.md +11 -0
  168. package/identity.example/soul.md +12 -0
  169. package/identity.example/state.md +21 -0
  170. package/identity.example/user.md +14 -0
  171. package/package.json +60 -0
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ // CRC: crc-McpServer.md | Seq: seq-startup.md, seq-event-flow.md
3
+ // HomarUScc MCP Server — stdio transport
4
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
5
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
7
+ import { HomarUScc } from "./homaruscc.js";
8
+ import { createMcpTools } from "./mcp-tools.js";
9
+ import { createMcpResources } from "./mcp-resources.js";
10
+ import { DashboardServer } from "./dashboard-server.js";
11
+ import { DashboardAdapter } from "./dashboard-adapter.js";
12
+ // --- Logger that writes to stderr (stdout is reserved for MCP protocol) ---
13
+ const logger = {
14
+ debug(msg, meta) {
15
+ if (process.env.HOMARUSCC_DEBUG) {
16
+ process.stderr.write(`[DEBUG] ${msg} ${meta ? JSON.stringify(meta) : ""}\n`);
17
+ }
18
+ },
19
+ info(msg, meta) {
20
+ process.stderr.write(`[INFO] ${msg} ${meta ? JSON.stringify(meta) : ""}\n`);
21
+ },
22
+ warn(msg, meta) {
23
+ process.stderr.write(`[WARN] ${msg} ${meta ? JSON.stringify(meta) : ""}\n`);
24
+ },
25
+ error(msg, meta) {
26
+ process.stderr.write(`[ERROR] ${msg} ${meta ? JSON.stringify(meta) : ""}\n`);
27
+ },
28
+ };
29
+ async function main() {
30
+ const configPath = process.env.HOMARUSCC_CONFIG ?? undefined;
31
+ // --- Initialize event loop ---
32
+ const loop = new HomarUScc(logger, configPath);
33
+ // --- Create MCP server ---
34
+ const server = new Server({ name: "homaruscc", version: "0.1.0" }, { capabilities: { tools: {}, resources: {} } });
35
+ // --- Wire event loop notifications to MCP ---
36
+ loop.setNotifyFn((event) => {
37
+ // Send notification to Claude Code
38
+ const notificationType = getNotificationType(event);
39
+ const notificationData = formatNotification(event);
40
+ // Use MCP notification mechanism
41
+ server.notification({
42
+ method: `notifications/${notificationType}`,
43
+ params: notificationData,
44
+ }).catch((err) => {
45
+ logger.warn("Failed to send MCP notification", { error: String(err) });
46
+ });
47
+ // Also forward to dashboard if connected
48
+ dashboardServer?.broadcastEvent(event);
49
+ });
50
+ // --- Dashboard setup ---
51
+ const configData = loop.getConfig().getAll();
52
+ let dashboardServer = null;
53
+ // --- Start event loop ---
54
+ await loop.start();
55
+ // --- Dashboard adapter (channel) ---
56
+ const dashboardConfig = loop.getConfig().getAll().dashboard;
57
+ if (dashboardConfig?.enabled !== false) {
58
+ const dashboardAdapter = new DashboardAdapter(logger);
59
+ loop.getChannelManager().registerAdapter(dashboardAdapter);
60
+ await dashboardAdapter.connect();
61
+ dashboardAdapter.onMessage((event) => loop.emit(event));
62
+ dashboardServer = new DashboardServer(logger, dashboardConfig?.port ?? 3120, loop, dashboardAdapter);
63
+ await dashboardServer.start();
64
+ }
65
+ // --- Create tool/resource definitions ---
66
+ const mcpTools = createMcpTools(loop);
67
+ const mcpResources = createMcpResources(loop);
68
+ // --- Register MCP handlers ---
69
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
70
+ return {
71
+ tools: mcpTools.map((t) => ({
72
+ name: t.name,
73
+ description: t.description,
74
+ inputSchema: t.inputSchema,
75
+ })),
76
+ };
77
+ });
78
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
79
+ const { name, arguments: args } = request.params;
80
+ const tool = mcpTools.find((t) => t.name === name);
81
+ if (!tool) {
82
+ return {
83
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
84
+ isError: true,
85
+ };
86
+ }
87
+ try {
88
+ return await tool.handler((args ?? {}));
89
+ }
90
+ catch (err) {
91
+ return {
92
+ content: [{ type: "text", text: `Tool error: ${String(err)}` }],
93
+ isError: true,
94
+ };
95
+ }
96
+ });
97
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
98
+ return {
99
+ resources: mcpResources.map((r) => ({
100
+ uri: r.uri,
101
+ name: r.name,
102
+ description: r.description,
103
+ mimeType: r.mimeType,
104
+ })),
105
+ };
106
+ });
107
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
108
+ const { uri } = request.params;
109
+ const resource = mcpResources.find((r) => r.uri === uri);
110
+ if (!resource) {
111
+ throw new Error(`Unknown resource: ${uri}`);
112
+ }
113
+ const text = await resource.handler();
114
+ return {
115
+ contents: [{
116
+ uri: resource.uri,
117
+ mimeType: resource.mimeType,
118
+ text,
119
+ }],
120
+ };
121
+ });
122
+ // --- Connect MCP transport ---
123
+ const transport = new StdioServerTransport();
124
+ await server.connect(transport);
125
+ logger.info("HomarUScc MCP server connected via stdio");
126
+ // --- Graceful shutdown ---
127
+ const shutdown = async () => {
128
+ logger.info("Shutting down...");
129
+ if (dashboardServer)
130
+ await dashboardServer.stop();
131
+ await loop.stop();
132
+ await server.close();
133
+ process.exit(0);
134
+ };
135
+ process.on("SIGINT", shutdown);
136
+ process.on("SIGTERM", shutdown);
137
+ }
138
+ function getNotificationType(event) {
139
+ switch (event.type) {
140
+ case "message": return "homaruscc/incoming_message";
141
+ case "timer_fired": return "homaruscc/timer_fired";
142
+ default: return `homaruscc/${event.type}`;
143
+ }
144
+ }
145
+ function formatNotification(event) {
146
+ if (event.type === "message") {
147
+ const payload = event.payload;
148
+ return {
149
+ source: payload.channel,
150
+ from: payload.from,
151
+ text: payload.text,
152
+ chatId: event.source.split(":").pop() ?? "",
153
+ timestamp: event.timestamp,
154
+ eventId: event.id,
155
+ };
156
+ }
157
+ return {
158
+ type: event.type,
159
+ source: event.source,
160
+ payload: event.payload,
161
+ timestamp: event.timestamp,
162
+ eventId: event.id,
163
+ };
164
+ }
165
+ main().catch((err) => {
166
+ process.stderr.write(`[FATAL] ${String(err)}\n`);
167
+ process.exit(1);
168
+ });
169
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { HomarUScc } from "./homaruscc.js";
2
+ export interface McpToolDef {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: Record<string, unknown>;
6
+ handler: (params: Record<string, unknown>) => Promise<{
7
+ content: Array<{
8
+ type: string;
9
+ text: string;
10
+ }>;
11
+ }>;
12
+ }
13
+ export declare function createMcpTools(loop: HomarUScc): McpToolDef[];
14
+ //# sourceMappingURL=mcp-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC3G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,EAAE,CAma5D"}
@@ -0,0 +1,408 @@
1
+ export function createMcpTools(loop) {
2
+ const tools = [];
3
+ // --- telegram_send ---
4
+ tools.push({
5
+ name: "telegram_send",
6
+ description: "Send a message to a Telegram chat",
7
+ inputSchema: {
8
+ type: "object",
9
+ properties: {
10
+ chatId: { type: "string", description: "Telegram chat ID to send to" },
11
+ text: { type: "string", description: "Message text to send" },
12
+ },
13
+ required: ["chatId", "text"],
14
+ },
15
+ async handler(params) {
16
+ const { chatId, text } = params;
17
+ try {
18
+ await loop.getChannelManager().send("telegram", chatId, { text });
19
+ loop.getTranscriptLogger()?.logOutbound("telegram", text);
20
+ return { content: [{ type: "text", text: `Sent to Telegram chat ${chatId}` }] };
21
+ }
22
+ catch (err) {
23
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
24
+ }
25
+ },
26
+ });
27
+ // --- telegram_read ---
28
+ tools.push({
29
+ name: "telegram_read",
30
+ description: "Read recent incoming Telegram messages",
31
+ inputSchema: {
32
+ type: "object",
33
+ properties: {
34
+ limit: { type: "number", description: "Number of recent messages to return (default 20)" },
35
+ },
36
+ },
37
+ async handler(params) {
38
+ const { limit = 20 } = params;
39
+ const adapter = loop.getChannelManager().getAdapter("telegram");
40
+ if (!adapter) {
41
+ return { content: [{ type: "text", text: "Telegram not configured" }] };
42
+ }
43
+ const messages = adapter.getRecentMessages(limit);
44
+ if (messages.length === 0) {
45
+ return { content: [{ type: "text", text: "No recent messages" }] };
46
+ }
47
+ const formatted = messages.map((m) => `[${new Date(m.timestamp).toISOString()}] ${m.from} (chat ${m.chatId}): ${m.text}`).join("\n");
48
+ return { content: [{ type: "text", text: formatted }] };
49
+ },
50
+ });
51
+ // --- telegram_typing ---
52
+ tools.push({
53
+ name: "telegram_typing",
54
+ description: "Send a typing indicator to a Telegram chat. Shows for up to 5 seconds or until a message is sent. Call repeatedly for long-running tasks.",
55
+ inputSchema: {
56
+ type: "object",
57
+ properties: {
58
+ chatId: { type: "string", description: "Telegram chat ID" },
59
+ },
60
+ required: ["chatId"],
61
+ },
62
+ async handler(params) {
63
+ const { chatId } = params;
64
+ const adapter = loop.getChannelManager().getAdapter("telegram");
65
+ if (!adapter) {
66
+ return { content: [{ type: "text", text: "Telegram not configured" }] };
67
+ }
68
+ try {
69
+ await adapter.sendTyping(chatId);
70
+ return { content: [{ type: "text", text: "Typing indicator sent" }] };
71
+ }
72
+ catch (err) {
73
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
74
+ }
75
+ },
76
+ });
77
+ // --- memory_search ---
78
+ tools.push({
79
+ name: "memory_search",
80
+ description: "Search the memory index using hybrid vector + FTS search",
81
+ inputSchema: {
82
+ type: "object",
83
+ properties: {
84
+ query: { type: "string", description: "Search query" },
85
+ limit: { type: "number", description: "Max results (default 10)" },
86
+ },
87
+ required: ["query"],
88
+ },
89
+ async handler(params) {
90
+ const { query, limit = 10 } = params;
91
+ const results = await loop.getMemoryIndex().search(query, { limit });
92
+ if (results.length === 0) {
93
+ return { content: [{ type: "text", text: "No results found" }] };
94
+ }
95
+ const formatted = results.map((r, i) => `[${i + 1}] ${r.path} (score: ${r.score.toFixed(3)})\n${r.content.slice(0, 500)}`).join("\n\n---\n\n");
96
+ return { content: [{ type: "text", text: formatted }] };
97
+ },
98
+ });
99
+ // --- memory_store ---
100
+ tools.push({
101
+ name: "memory_store",
102
+ description: "Store content to memory and index it",
103
+ inputSchema: {
104
+ type: "object",
105
+ properties: {
106
+ key: { type: "string", description: "File path to store at" },
107
+ content: { type: "string", description: "Content to store" },
108
+ },
109
+ required: ["key", "content"],
110
+ },
111
+ async handler(params) {
112
+ const { key, content } = params;
113
+ await loop.getMemoryIndex().store(content, key);
114
+ return { content: [{ type: "text", text: `Stored and indexed: ${key}` }] };
115
+ },
116
+ });
117
+ // --- timer_schedule ---
118
+ tools.push({
119
+ name: "timer_schedule",
120
+ description: "Schedule a timer (cron, interval, or one-shot)",
121
+ inputSchema: {
122
+ type: "object",
123
+ properties: {
124
+ name: { type: "string", description: "Timer name" },
125
+ type: { type: "string", description: "Timer type: cron, interval, or once", enum: ["cron", "interval", "once"] },
126
+ schedule: { type: "string", description: "Cron expression, interval in ms, or ISO timestamp" },
127
+ prompt: { type: "string", description: "Event prompt/description when timer fires" },
128
+ timezone: { type: "string", description: "Timezone for cron timers (optional)" },
129
+ },
130
+ required: ["name", "type", "schedule", "prompt"],
131
+ },
132
+ async handler(params) {
133
+ const { name, type, schedule, prompt, timezone } = params;
134
+ const id = loop.getTimerService().add({ name, type, schedule, prompt, timezone });
135
+ return { content: [{ type: "text", text: `Timer scheduled: ${name} (${id})` }] };
136
+ },
137
+ });
138
+ // --- timer_cancel ---
139
+ tools.push({
140
+ name: "timer_cancel",
141
+ description: "Cancel a scheduled timer",
142
+ inputSchema: {
143
+ type: "object",
144
+ properties: {
145
+ name: { type: "string", description: "Timer ID or name to cancel" },
146
+ },
147
+ required: ["name"],
148
+ },
149
+ async handler(params) {
150
+ const { name } = params;
151
+ loop.getTimerService().remove(name);
152
+ return { content: [{ type: "text", text: `Timer cancelled: ${name}` }] };
153
+ },
154
+ });
155
+ // --- dashboard_send ---
156
+ tools.push({
157
+ name: "dashboard_send",
158
+ description: "Send a message to the web dashboard chat",
159
+ inputSchema: {
160
+ type: "object",
161
+ properties: {
162
+ text: { type: "string", description: "Message text to send" },
163
+ },
164
+ required: ["text"],
165
+ },
166
+ async handler(params) {
167
+ const { text } = params;
168
+ try {
169
+ await loop.getChannelManager().send("dashboard", "chat", { text });
170
+ loop.getTranscriptLogger()?.logOutbound("dashboard", text);
171
+ return { content: [{ type: "text", text: "Sent to dashboard" }] };
172
+ }
173
+ catch (err) {
174
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
175
+ }
176
+ },
177
+ });
178
+ // --- get_status ---
179
+ tools.push({
180
+ name: "get_status",
181
+ description: "Get system status (channels, memory, timers, queue)",
182
+ inputSchema: { type: "object", properties: {} },
183
+ async handler() {
184
+ const status = loop.getStatus();
185
+ return { content: [{ type: "text", text: JSON.stringify(status, null, 2) }] };
186
+ },
187
+ });
188
+ // --- get_events ---
189
+ tools.push({
190
+ name: "get_events",
191
+ description: "Get recent event history",
192
+ inputSchema: {
193
+ type: "object",
194
+ properties: {
195
+ limit: { type: "number", description: "Number of recent events (default 20)" },
196
+ },
197
+ },
198
+ async handler(params) {
199
+ const { limit = 20 } = params;
200
+ const events = loop.getEventHistory().slice(-limit);
201
+ if (events.length === 0) {
202
+ return { content: [{ type: "text", text: "No events" }] };
203
+ }
204
+ const formatted = events.map((e) => `[${new Date(e.timestamp).toISOString()}] ${e.type} from ${e.source}: ${JSON.stringify(e.payload).slice(0, 200)}`).join("\n");
205
+ return { content: [{ type: "text", text: formatted }] };
206
+ },
207
+ });
208
+ // --- wait_for_event ---
209
+ tools.push({
210
+ name: "wait_for_event",
211
+ description: "Long-poll for events. Blocks until a new event arrives (message, timer, agent completion, etc.) or timeout. Use in a loop for continuous event handling.",
212
+ inputSchema: {
213
+ type: "object",
214
+ properties: {
215
+ timeout: { type: "number", description: "Max wait ms (default 30000, max 120000)" },
216
+ },
217
+ },
218
+ async handler(params) {
219
+ const { timeout = 30000 } = params;
220
+ const events = await loop.waitForEvent(Math.min(timeout, 120000));
221
+ if (events.length === 0) {
222
+ return { content: [{ type: "text", text: "No events (timeout)" }] };
223
+ }
224
+ const formatted = events.map((e) => `[${new Date(e.timestamp).toISOString()}] ${e.type} from ${e.source}: ${JSON.stringify(e.payload).slice(0, 500)}`).join("\n");
225
+ return { content: [{ type: "text", text: formatted }] };
226
+ },
227
+ });
228
+ // --- browser_navigate ---
229
+ tools.push({
230
+ name: "browser_navigate",
231
+ description: "Navigate the browser to a URL. Returns page title and URL.",
232
+ inputSchema: {
233
+ type: "object",
234
+ properties: {
235
+ url: { type: "string", description: "URL to navigate to" },
236
+ },
237
+ required: ["url"],
238
+ },
239
+ async handler(params) {
240
+ const svc = loop.getBrowserService();
241
+ if (!svc)
242
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
243
+ try {
244
+ const result = await svc.navigate(params.url);
245
+ return { content: [{ type: "text", text: result }] };
246
+ }
247
+ catch (err) {
248
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
249
+ }
250
+ },
251
+ });
252
+ // --- browser_snapshot ---
253
+ tools.push({
254
+ name: "browser_snapshot",
255
+ description: "Get the accessibility tree of the current page.",
256
+ inputSchema: { type: "object", properties: {} },
257
+ async handler() {
258
+ const svc = loop.getBrowserService();
259
+ if (!svc)
260
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
261
+ try {
262
+ const result = await svc.snapshot();
263
+ return { content: [{ type: "text", text: result }] };
264
+ }
265
+ catch (err) {
266
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
267
+ }
268
+ },
269
+ });
270
+ // --- browser_screenshot ---
271
+ tools.push({
272
+ name: "browser_screenshot",
273
+ description: "Take a screenshot of the current page. Returns base64-encoded PNG.",
274
+ inputSchema: { type: "object", properties: {} },
275
+ async handler() {
276
+ const svc = loop.getBrowserService();
277
+ if (!svc)
278
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
279
+ try {
280
+ const result = await svc.screenshot();
281
+ return { content: [{ type: "text", text: result }] };
282
+ }
283
+ catch (err) {
284
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
285
+ }
286
+ },
287
+ });
288
+ // --- browser_click ---
289
+ tools.push({
290
+ name: "browser_click",
291
+ description: "Click an element on the page by CSS selector.",
292
+ inputSchema: {
293
+ type: "object",
294
+ properties: {
295
+ selector: { type: "string", description: "CSS selector of element to click" },
296
+ },
297
+ required: ["selector"],
298
+ },
299
+ async handler(params) {
300
+ const svc = loop.getBrowserService();
301
+ if (!svc)
302
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
303
+ try {
304
+ const result = await svc.click(params.selector);
305
+ return { content: [{ type: "text", text: result }] };
306
+ }
307
+ catch (err) {
308
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
309
+ }
310
+ },
311
+ });
312
+ // --- browser_type ---
313
+ tools.push({
314
+ name: "browser_type",
315
+ description: "Type text into an input element by CSS selector.",
316
+ inputSchema: {
317
+ type: "object",
318
+ properties: {
319
+ selector: { type: "string", description: "CSS selector of input element" },
320
+ text: { type: "string", description: "Text to type" },
321
+ },
322
+ required: ["selector", "text"],
323
+ },
324
+ async handler(params) {
325
+ const svc = loop.getBrowserService();
326
+ if (!svc)
327
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
328
+ try {
329
+ const { selector, text } = params;
330
+ const result = await svc.type(selector, text);
331
+ return { content: [{ type: "text", text: result }] };
332
+ }
333
+ catch (err) {
334
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
335
+ }
336
+ },
337
+ });
338
+ // --- browser_evaluate ---
339
+ tools.push({
340
+ name: "browser_evaluate",
341
+ description: "Execute JavaScript in the browser page and return the result.",
342
+ inputSchema: {
343
+ type: "object",
344
+ properties: {
345
+ script: { type: "string", description: "JavaScript code to execute" },
346
+ },
347
+ required: ["script"],
348
+ },
349
+ async handler(params) {
350
+ const svc = loop.getBrowserService();
351
+ if (!svc)
352
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
353
+ try {
354
+ const result = await svc.evaluate(params.script);
355
+ return { content: [{ type: "text", text: result }] };
356
+ }
357
+ catch (err) {
358
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
359
+ }
360
+ },
361
+ });
362
+ // --- browser_content ---
363
+ tools.push({
364
+ name: "browser_content",
365
+ description: "Get the text content of the current page.",
366
+ inputSchema: { type: "object", properties: {} },
367
+ async handler() {
368
+ const svc = loop.getBrowserService();
369
+ if (!svc)
370
+ return { content: [{ type: "text", text: "Browser not enabled in config" }] };
371
+ try {
372
+ const result = await svc.getContent();
373
+ return { content: [{ type: "text", text: result }] };
374
+ }
375
+ catch (err) {
376
+ return { content: [{ type: "text", text: `Error: ${String(err)}` }] };
377
+ }
378
+ },
379
+ });
380
+ // --- run_tool ---
381
+ tools.push({
382
+ name: "run_tool",
383
+ description: "Execute any registered tool (bash, read, write, edit, glob, grep, git, web_fetch, web_search, memory_*)",
384
+ inputSchema: {
385
+ type: "object",
386
+ properties: {
387
+ name: { type: "string", description: "Tool name to execute" },
388
+ params: { type: "object", description: "Tool parameters" },
389
+ },
390
+ required: ["name", "params"],
391
+ },
392
+ async handler(params) {
393
+ const { name, params: toolParams } = params;
394
+ const context = {
395
+ agentId: "claude-code",
396
+ sandbox: false,
397
+ workingDir: process.cwd(),
398
+ };
399
+ const result = await loop.getToolRegistry().execute(name, toolParams, context);
400
+ if (result.error) {
401
+ return { content: [{ type: "text", text: `Error: ${result.error}\n${result.output}` }] };
402
+ }
403
+ return { content: [{ type: "text", text: result.output }] };
404
+ },
405
+ });
406
+ return tools;
407
+ }
408
+ //# sourceMappingURL=mcp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"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"}