@luckydraw/cumulus 0.5.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 (142) hide show
  1. package/README.md +148 -0
  2. package/dist/cli/cumulus.d.ts +3 -0
  3. package/dist/cli/cumulus.d.ts.map +1 -0
  4. package/dist/cli/cumulus.js +233 -0
  5. package/dist/cli/cumulus.js.map +1 -0
  6. package/dist/index.d.ts +33 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +43 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/config.d.ts +86 -0
  11. package/dist/lib/config.d.ts.map +1 -0
  12. package/dist/lib/config.js +241 -0
  13. package/dist/lib/config.js.map +1 -0
  14. package/dist/lib/content-detector.d.ts +46 -0
  15. package/dist/lib/content-detector.d.ts.map +1 -0
  16. package/dist/lib/content-detector.js +359 -0
  17. package/dist/lib/content-detector.js.map +1 -0
  18. package/dist/lib/content-store.d.ts +255 -0
  19. package/dist/lib/content-store.d.ts.map +1 -0
  20. package/dist/lib/content-store.js +955 -0
  21. package/dist/lib/content-store.js.map +1 -0
  22. package/dist/lib/context-budget.d.ts +83 -0
  23. package/dist/lib/context-budget.d.ts.map +1 -0
  24. package/dist/lib/context-budget.js +101 -0
  25. package/dist/lib/context-budget.js.map +1 -0
  26. package/dist/lib/embeddings.d.ts +64 -0
  27. package/dist/lib/embeddings.d.ts.map +1 -0
  28. package/dist/lib/embeddings.js +176 -0
  29. package/dist/lib/embeddings.js.map +1 -0
  30. package/dist/lib/history.d.ts +120 -0
  31. package/dist/lib/history.d.ts.map +1 -0
  32. package/dist/lib/history.js +205 -0
  33. package/dist/lib/history.js.map +1 -0
  34. package/dist/lib/image-utils.d.ts +41 -0
  35. package/dist/lib/image-utils.d.ts.map +1 -0
  36. package/dist/lib/image-utils.js +288 -0
  37. package/dist/lib/image-utils.js.map +1 -0
  38. package/dist/lib/migrate.d.ts +35 -0
  39. package/dist/lib/migrate.d.ts.map +1 -0
  40. package/dist/lib/migrate.js +196 -0
  41. package/dist/lib/migrate.js.map +1 -0
  42. package/dist/lib/retriever.d.ts +56 -0
  43. package/dist/lib/retriever.d.ts.map +1 -0
  44. package/dist/lib/retriever.js +644 -0
  45. package/dist/lib/retriever.js.map +1 -0
  46. package/dist/lib/revert.d.ts +23 -0
  47. package/dist/lib/revert.d.ts.map +1 -0
  48. package/dist/lib/revert.js +75 -0
  49. package/dist/lib/revert.js.map +1 -0
  50. package/dist/lib/session.d.ts +65 -0
  51. package/dist/lib/session.d.ts.map +1 -0
  52. package/dist/lib/session.js +289 -0
  53. package/dist/lib/session.js.map +1 -0
  54. package/dist/lib/snapshots.d.ts +39 -0
  55. package/dist/lib/snapshots.d.ts.map +1 -0
  56. package/dist/lib/snapshots.js +99 -0
  57. package/dist/lib/snapshots.js.map +1 -0
  58. package/dist/lib/stream-processor.d.ts +149 -0
  59. package/dist/lib/stream-processor.d.ts.map +1 -0
  60. package/dist/lib/stream-processor.js +389 -0
  61. package/dist/lib/stream-processor.js.map +1 -0
  62. package/dist/lib/summarizer.d.ts +67 -0
  63. package/dist/lib/summarizer.d.ts.map +1 -0
  64. package/dist/lib/summarizer.js +213 -0
  65. package/dist/lib/summarizer.js.map +1 -0
  66. package/dist/mcp/index.d.ts +3 -0
  67. package/dist/mcp/index.d.ts.map +1 -0
  68. package/dist/mcp/index.js +16 -0
  69. package/dist/mcp/index.js.map +1 -0
  70. package/dist/mcp/proxy.d.ts +19 -0
  71. package/dist/mcp/proxy.d.ts.map +1 -0
  72. package/dist/mcp/proxy.js +120 -0
  73. package/dist/mcp/proxy.js.map +1 -0
  74. package/dist/mcp/server.d.ts +6 -0
  75. package/dist/mcp/server.d.ts.map +1 -0
  76. package/dist/mcp/server.js +29 -0
  77. package/dist/mcp/server.js.map +1 -0
  78. package/dist/mcp/shared-server.d.ts +21 -0
  79. package/dist/mcp/shared-server.d.ts.map +1 -0
  80. package/dist/mcp/shared-server.js +210 -0
  81. package/dist/mcp/shared-server.js.map +1 -0
  82. package/dist/mcp/tool-handler.d.ts +20 -0
  83. package/dist/mcp/tool-handler.d.ts.map +1 -0
  84. package/dist/mcp/tool-handler.js +1405 -0
  85. package/dist/mcp/tool-handler.js.map +1 -0
  86. package/dist/tui/components/App.d.ts +11 -0
  87. package/dist/tui/components/App.d.ts.map +1 -0
  88. package/dist/tui/components/App.js +607 -0
  89. package/dist/tui/components/App.js.map +1 -0
  90. package/dist/tui/components/DebugContextView.d.ts +13 -0
  91. package/dist/tui/components/DebugContextView.d.ts.map +1 -0
  92. package/dist/tui/components/DebugContextView.js +78 -0
  93. package/dist/tui/components/DebugContextView.js.map +1 -0
  94. package/dist/tui/components/IncludeMenu.d.ts +12 -0
  95. package/dist/tui/components/IncludeMenu.d.ts.map +1 -0
  96. package/dist/tui/components/IncludeMenu.js +127 -0
  97. package/dist/tui/components/IncludeMenu.js.map +1 -0
  98. package/dist/tui/components/InputArea.d.ts +27 -0
  99. package/dist/tui/components/InputArea.d.ts.map +1 -0
  100. package/dist/tui/components/InputArea.js +366 -0
  101. package/dist/tui/components/InputArea.js.map +1 -0
  102. package/dist/tui/components/MarkdownText.d.ts +38 -0
  103. package/dist/tui/components/MarkdownText.d.ts.map +1 -0
  104. package/dist/tui/components/MarkdownText.js +234 -0
  105. package/dist/tui/components/MarkdownText.js.map +1 -0
  106. package/dist/tui/components/MessageBubble.d.ts +11 -0
  107. package/dist/tui/components/MessageBubble.d.ts.map +1 -0
  108. package/dist/tui/components/MessageBubble.js +16 -0
  109. package/dist/tui/components/MessageBubble.js.map +1 -0
  110. package/dist/tui/components/MessageHistory.d.ts +11 -0
  111. package/dist/tui/components/MessageHistory.d.ts.map +1 -0
  112. package/dist/tui/components/MessageHistory.js +12 -0
  113. package/dist/tui/components/MessageHistory.js.map +1 -0
  114. package/dist/tui/components/RevertMenu.d.ts +17 -0
  115. package/dist/tui/components/RevertMenu.d.ts.map +1 -0
  116. package/dist/tui/components/RevertMenu.js +144 -0
  117. package/dist/tui/components/RevertMenu.js.map +1 -0
  118. package/dist/tui/components/StatusBar.d.ts +14 -0
  119. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  120. package/dist/tui/components/StatusBar.js +13 -0
  121. package/dist/tui/components/StatusBar.js.map +1 -0
  122. package/dist/tui/components/StreamingResponse.d.ts +15 -0
  123. package/dist/tui/components/StreamingResponse.d.ts.map +1 -0
  124. package/dist/tui/components/StreamingResponse.js +52 -0
  125. package/dist/tui/components/StreamingResponse.js.map +1 -0
  126. package/dist/tui/hooks/useAppState.d.ts +147 -0
  127. package/dist/tui/hooks/useAppState.d.ts.map +1 -0
  128. package/dist/tui/hooks/useAppState.js +110 -0
  129. package/dist/tui/hooks/useAppState.js.map +1 -0
  130. package/dist/tui/hooks/useClaudeProcess.d.ts +19 -0
  131. package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -0
  132. package/dist/tui/hooks/useClaudeProcess.js +185 -0
  133. package/dist/tui/hooks/useClaudeProcess.js.map +1 -0
  134. package/dist/tui/index.d.ts +10 -0
  135. package/dist/tui/index.d.ts.map +1 -0
  136. package/dist/tui/index.js +11 -0
  137. package/dist/tui/index.js.map +1 -0
  138. package/dist/tui/utils/streamParser.d.ts +31 -0
  139. package/dist/tui/utils/streamParser.d.ts.map +1 -0
  140. package/dist/tui/utils/streamParser.js +63 -0
  141. package/dist/tui/utils/streamParser.js.map +1 -0
  142. package/package.json +94 -0
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Shared MCP server — one HTTP process serving multiple threads.
3
+ *
4
+ * Exposes POST /rpc/:threadName which accepts JSON-RPC messages
5
+ * (the same protocol Claude CLI speaks over stdio).
6
+ * Caches HistoryStore/ContentStore per thread so the embeddings
7
+ * model loads once, not once per agent.
8
+ */
9
+ import * as fs from 'fs/promises';
10
+ import * as http from 'http';
11
+ import * as path from 'path';
12
+ import { ContentStore } from '../lib/content-store.js';
13
+ import { HistoryStore } from '../lib/history.js';
14
+ import { getToolDefinitions, handleToolCall } from './tool-handler.js';
15
+ // ── MCP Protocol Constants ─────────────────────────────
16
+ const SERVER_INFO = {
17
+ name: 'cumulus-history',
18
+ version: '1.0.0',
19
+ };
20
+ const SERVER_CAPABILITIES = {
21
+ tools: {},
22
+ };
23
+ // ── Store Pool ─────────────────────────────────────────
24
+ class StorePool {
25
+ stores = new Map();
26
+ basePath;
27
+ constructor(basePath) {
28
+ this.basePath = basePath;
29
+ }
30
+ async getContext(threadName) {
31
+ const existing = this.stores.get(threadName);
32
+ if (existing) {
33
+ existing.lastAccess = Date.now();
34
+ return existing.ctx;
35
+ }
36
+ // Resolve paths for this thread
37
+ const threadsDir = path.join(this.basePath, 'threads');
38
+ const contentDir = path.join(this.basePath, 'content');
39
+ const sessionsDir = path.join(this.basePath, 'sessions');
40
+ // Thread file: threads/{threadName}.jsonl
41
+ const threadPath = path.join(threadsDir, `${threadName}.jsonl`);
42
+ // Content dir: content/{threadName}/
43
+ const threadContentDir = path.join(contentDir, threadName);
44
+ // Sessions dir: sessions/{threadName}/
45
+ const threadSessionsDir = path.join(sessionsDir, threadName);
46
+ // Ensure directories exist
47
+ await fs.mkdir(threadsDir, { recursive: true });
48
+ await fs.mkdir(threadContentDir, { recursive: true });
49
+ await fs.mkdir(threadSessionsDir, { recursive: true });
50
+ const historyStore = new HistoryStore(threadPath);
51
+ const contentStore = new ContentStore(threadContentDir);
52
+ // Find current session ID (latest .jsonl in sessions dir)
53
+ let currentSessionId;
54
+ try {
55
+ const sessionFiles = await fs.readdir(threadSessionsDir);
56
+ const jsonlFiles = sessionFiles
57
+ .filter(f => f.endsWith('.jsonl'))
58
+ .sort()
59
+ .reverse();
60
+ if (jsonlFiles[0]) {
61
+ currentSessionId = path.basename(jsonlFiles[0], '.jsonl');
62
+ }
63
+ }
64
+ catch {
65
+ // No sessions yet
66
+ }
67
+ const ctx = {
68
+ historyStore,
69
+ contentStore,
70
+ sessionsPath: threadSessionsDir,
71
+ currentSessionId,
72
+ };
73
+ this.stores.set(threadName, { ctx, lastAccess: Date.now() });
74
+ return ctx;
75
+ }
76
+ async closeAll() {
77
+ this.stores.clear();
78
+ }
79
+ }
80
+ function jsonRpcError(id, code, message, data) {
81
+ return { jsonrpc: '2.0', id, error: { code, message, data } };
82
+ }
83
+ function jsonRpcResult(id, result) {
84
+ return { jsonrpc: '2.0', id, result };
85
+ }
86
+ // ── MCP Protocol Handler ───────────────────────────────
87
+ async function handleMcpMessage(msg, pool, threadName) {
88
+ const { method, id, params } = msg;
89
+ // Notifications (no id) — acknowledge silently
90
+ if (id === undefined || id === null) {
91
+ // notifications/initialized, notifications/cancelled — no response needed
92
+ return null;
93
+ }
94
+ switch (method) {
95
+ case 'initialize': {
96
+ return jsonRpcResult(id, {
97
+ protocolVersion: '2024-11-05',
98
+ capabilities: SERVER_CAPABILITIES,
99
+ serverInfo: SERVER_INFO,
100
+ });
101
+ }
102
+ case 'tools/list': {
103
+ return jsonRpcResult(id, {
104
+ tools: getToolDefinitions(),
105
+ });
106
+ }
107
+ case 'tools/call': {
108
+ const toolName = params?.name;
109
+ const toolArgs = params?.arguments;
110
+ if (!toolName) {
111
+ return jsonRpcError(id, -32602, 'Missing tool name');
112
+ }
113
+ try {
114
+ const ctx = await pool.getContext(threadName);
115
+ const result = await handleToolCall(toolName, toolArgs, ctx);
116
+ return jsonRpcResult(id, result);
117
+ }
118
+ catch (err) {
119
+ const message = err instanceof Error ? err.message : String(err);
120
+ return jsonRpcResult(id, {
121
+ content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
122
+ isError: true,
123
+ });
124
+ }
125
+ }
126
+ case 'ping': {
127
+ return jsonRpcResult(id, {});
128
+ }
129
+ default: {
130
+ return jsonRpcError(id, -32601, `Method not found: ${method}`);
131
+ }
132
+ }
133
+ }
134
+ // ── HTTP Server ────────────────────────────────────────
135
+ function readBody(req) {
136
+ return new Promise((resolve, reject) => {
137
+ const chunks = [];
138
+ req.on('data', (chunk) => chunks.push(chunk));
139
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
140
+ req.on('error', reject);
141
+ });
142
+ }
143
+ export async function startSharedMcpServer(options) {
144
+ const { basePath, port: requestedPort } = options;
145
+ const pool = new StorePool(basePath);
146
+ const server = http.createServer(async (req, res) => {
147
+ // CORS headers for local use
148
+ res.setHeader('Access-Control-Allow-Origin', '*');
149
+ res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
150
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
151
+ if (req.method === 'OPTIONS') {
152
+ res.writeHead(204);
153
+ res.end();
154
+ return;
155
+ }
156
+ // Parse URL: /rpc/:threadName
157
+ const url = new URL(req.url || '/', `http://localhost`);
158
+ const pathParts = url.pathname.split('/').filter(Boolean);
159
+ if (req.method !== 'POST' || pathParts[0] !== 'rpc' || !pathParts[1]) {
160
+ res.writeHead(404, { 'Content-Type': 'application/json' });
161
+ res.end(JSON.stringify({ error: 'Not found. Use POST /rpc/:threadName' }));
162
+ return;
163
+ }
164
+ const threadName = decodeURIComponent(pathParts[1]);
165
+ try {
166
+ const body = await readBody(req);
167
+ const msg = JSON.parse(body);
168
+ const response = await handleMcpMessage(msg, pool, threadName);
169
+ if (response === null) {
170
+ // Notification — no response body, just 204
171
+ res.writeHead(204);
172
+ res.end();
173
+ }
174
+ else {
175
+ res.writeHead(200, { 'Content-Type': 'application/json' });
176
+ res.end(JSON.stringify(response));
177
+ }
178
+ }
179
+ catch (err) {
180
+ const message = err instanceof Error ? err.message : String(err);
181
+ res.writeHead(400, { 'Content-Type': 'application/json' });
182
+ res.end(JSON.stringify(jsonRpcError(undefined, -32700, `Parse error: ${message}`)));
183
+ }
184
+ });
185
+ // Start listening
186
+ const actualPort = await new Promise((resolve, reject) => {
187
+ server.on('error', reject);
188
+ server.listen(requestedPort ?? 0, '127.0.0.1', () => {
189
+ const addr = server.address();
190
+ if (typeof addr === 'object' && addr) {
191
+ resolve(addr.port);
192
+ }
193
+ else {
194
+ reject(new Error('Failed to get server address'));
195
+ }
196
+ });
197
+ });
198
+ const handle = {
199
+ port: actualPort,
200
+ url: `http://127.0.0.1:${actualPort}`,
201
+ close: async () => {
202
+ await pool.closeAll();
203
+ await new Promise((resolve, reject) => {
204
+ server.close(err => (err ? reject(err) : resolve()));
205
+ });
206
+ },
207
+ };
208
+ return handle;
209
+ }
210
+ //# sourceMappingURL=shared-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-server.js","sourceRoot":"","sources":["../../src/mcp/shared-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAC;AAsBpF,0DAA0D;AAE1D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,0DAA0D;AAE1D,MAAM,SAAS;IACL,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IACvC,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;QAED,gCAAgC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEzD,0CAA0C;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC;QAEhE,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE3D,uCAAuC;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE7D,2BAA2B;QAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAExD,0DAA0D;QAC1D,IAAI,gBAAoC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,YAAY;iBAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACjC,IAAI,EAAE;iBACN,OAAO,EAAE,CAAC;YACb,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QAED,MAAM,GAAG,GAAgB;YACvB,YAAY;YACZ,YAAY;YACZ,YAAY,EAAE,iBAAiB;YAC/B,gBAAgB;SACjB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAkBD,SAAS,YAAY,CACnB,EAA+B,EAC/B,IAAY,EACZ,OAAe,EACf,IAAc;IAEd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,EAA+B,EAAE,MAAe;IACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED,0DAA0D;AAE1D,KAAK,UAAU,gBAAgB,CAC7B,GAAmB,EACnB,IAAe,EACf,UAAkB;IAElB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEnC,+CAA+C;IAC/C,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACpC,0EAA0E;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,OAAO,aAAa,CAAC,EAAE,EAAE;gBACvB,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,mBAAmB;gBACjC,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,OAAO,aAAa,CAAC,EAAE,EAAE;gBACvB,KAAK,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAI,MAA4B,EAAE,IAAI,CAAC;YACrD,MAAM,QAAQ,GAAI,MAAkD,EAAE,SAAS,CAAC;YAEhF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;gBAC7D,OAAO,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO,aAAa,CAAC,EAAE,EAAE;oBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;oBACrE,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,OAAO,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,qBAAqB,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC;AAED,0DAA0D;AAE1D,SAAS,QAAQ,CAAC,GAAyB;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA+B;IAE/B,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAClD,6BAA6B;QAC7B,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAC;QAC/D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1D,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,GAAG,GAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAE/D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,4CAA4C;gBAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAA0B;QACpC,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,oBAAoB,UAAU,EAAE;QACrC,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import { ContentStore } from '../lib/content-store.js';
3
+ import { HistoryStore } from '../lib/history.js';
4
+ export interface ToolContext {
5
+ historyStore: HistoryStore;
6
+ contentStore?: ContentStore;
7
+ sessionsPath?: string;
8
+ currentSessionId?: string;
9
+ }
10
+ export interface ToolResult {
11
+ [key: string]: unknown;
12
+ content: Array<{
13
+ type: 'text';
14
+ text: string;
15
+ }>;
16
+ isError?: boolean;
17
+ }
18
+ export declare function getToolDefinitions(): Tool[];
19
+ export declare function handleToolCall(name: string, args: Record<string, unknown> | undefined, ctx: ToolContext): Promise<ToolResult>;
20
+ //# sourceMappingURL=tool-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAqB,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQ1E,OAAO,EAAE,YAAY,EAAW,MAAM,mBAAmB,CAAC;AA0L1D,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,IAAI,IAAI,EAAE,CAmS3C;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0pCrB"}