@calliopelabs/cli 0.4.6 → 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 +258 -105
- package/dist/branching.d.ts +56 -0
- package/dist/branching.d.ts.map +1 -0
- package/dist/branching.js +211 -0
- package/dist/branching.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +235 -2
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +75 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +234 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +73 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +317 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-watcher.d.ts +91 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +269 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/files.d.ts +49 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +191 -0
- package/dist/files.js.map +1 -0
- package/dist/fuzzy-search.d.ts +75 -0
- package/dist/fuzzy-search.d.ts.map +1 -0
- package/dist/fuzzy-search.js +240 -0
- package/dist/fuzzy-search.js.map +1 -0
- package/dist/hooks.d.ts +79 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +271 -0
- package/dist/hooks.js.map +1 -0
- package/dist/keyboard.d.ts +57 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +265 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +248 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.d.ts +90 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +290 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +104 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +394 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +67 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +289 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-tools.d.ts +51 -0
- package/dist/parallel-tools.d.ts.map +1 -0
- package/dist/parallel-tools.js +278 -0
- package/dist/parallel-tools.js.map +1 -0
- package/dist/project-config.d.ts +84 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +250 -0
- package/dist/project-config.js.map +1 -0
- package/dist/providers.d.ts +10 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +240 -38
- package/dist/providers.js.map +1 -1
- package/dist/risk.d.ts +31 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +367 -0
- package/dist/risk.js.map +1 -0
- package/dist/sandbox.d.ts +49 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +347 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills.d.ts +71 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +383 -0
- package/dist/skills.js.map +1 -0
- package/dist/storage.d.ts +139 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +508 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming.d.ts +94 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +305 -0
- package/dist/streaming.js.map +1 -0
- package/dist/summarization.d.ts +76 -0
- package/dist/summarization.d.ts.map +1 -0
- package/dist/summarization.js +242 -0
- package/dist/summarization.js.map +1 -0
- package/dist/themes.d.ts +110 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +329 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +335 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +105 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-cli.d.ts +9 -2
- package/dist/ui-cli.d.ts.map +1 -1
- package/dist/ui-cli.js +1315 -220
- package/dist/ui-cli.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - MCP (Model Context Protocol) Support
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP client for connecting to external tool servers.
|
|
5
|
+
* Supports self-registering MCP servers from URLs.
|
|
6
|
+
*/
|
|
7
|
+
import * as https from 'https';
|
|
8
|
+
import * as http from 'http';
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
// MCP storage directory
|
|
13
|
+
const MCP_DIR = path.join(os.homedir(), '.calliope-cli', 'mcp');
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Storage
|
|
16
|
+
// ============================================================================
|
|
17
|
+
function ensureMCPDir() {
|
|
18
|
+
if (!fs.existsSync(MCP_DIR)) {
|
|
19
|
+
fs.mkdirSync(MCP_DIR, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function getServersFile() {
|
|
23
|
+
return path.join(MCP_DIR, 'servers.json');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load registered MCP servers
|
|
27
|
+
*/
|
|
28
|
+
export function loadServers() {
|
|
29
|
+
ensureMCPDir();
|
|
30
|
+
const file = getServersFile();
|
|
31
|
+
if (!fs.existsSync(file)) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save MCP servers
|
|
43
|
+
*/
|
|
44
|
+
export function saveServers(servers) {
|
|
45
|
+
ensureMCPDir();
|
|
46
|
+
fs.writeFileSync(getServersFile(), JSON.stringify(servers, null, 2));
|
|
47
|
+
}
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// MCP Client
|
|
50
|
+
// ============================================================================
|
|
51
|
+
/**
|
|
52
|
+
* Fetch MCP manifest from a URL
|
|
53
|
+
*/
|
|
54
|
+
export async function fetchManifest(url) {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const protocol = url.startsWith('https') ? https : http;
|
|
57
|
+
// Try well-known MCP endpoint first
|
|
58
|
+
const manifestUrl = url.endsWith('/') ? `${url}.well-known/mcp` : `${url}/.well-known/mcp`;
|
|
59
|
+
const req = protocol.get(manifestUrl, {
|
|
60
|
+
headers: {
|
|
61
|
+
'Accept': 'application/json',
|
|
62
|
+
'User-Agent': 'Calliope-CLI/1.0',
|
|
63
|
+
},
|
|
64
|
+
timeout: 10000,
|
|
65
|
+
}, (res) => {
|
|
66
|
+
if (res.statusCode === 404) {
|
|
67
|
+
// Try root URL
|
|
68
|
+
const rootReq = protocol.get(url, {
|
|
69
|
+
headers: {
|
|
70
|
+
'Accept': 'application/json',
|
|
71
|
+
'User-Agent': 'Calliope-CLI/1.0',
|
|
72
|
+
},
|
|
73
|
+
timeout: 10000,
|
|
74
|
+
}, (rootRes) => {
|
|
75
|
+
let data = '';
|
|
76
|
+
rootRes.on('data', chunk => data += chunk);
|
|
77
|
+
rootRes.on('end', () => {
|
|
78
|
+
try {
|
|
79
|
+
resolve(JSON.parse(data));
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
reject(new Error('Invalid MCP manifest'));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
rootReq.on('error', reject);
|
|
87
|
+
rootReq.on('timeout', () => {
|
|
88
|
+
rootReq.destroy();
|
|
89
|
+
reject(new Error('Request timed out'));
|
|
90
|
+
});
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (res.statusCode !== 200) {
|
|
94
|
+
reject(new Error(`HTTP ${res.statusCode}`));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
let data = '';
|
|
98
|
+
res.on('data', chunk => data += chunk);
|
|
99
|
+
res.on('end', () => {
|
|
100
|
+
try {
|
|
101
|
+
resolve(JSON.parse(data));
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
reject(new Error('Invalid MCP manifest'));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
req.on('error', reject);
|
|
109
|
+
req.on('timeout', () => {
|
|
110
|
+
req.destroy();
|
|
111
|
+
reject(new Error('Request timed out'));
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Register an MCP server from URL
|
|
117
|
+
*/
|
|
118
|
+
export async function registerServer(url, autoConnect = true) {
|
|
119
|
+
const manifest = await fetchManifest(url);
|
|
120
|
+
const server = {
|
|
121
|
+
id: `mcp_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
122
|
+
name: manifest.name,
|
|
123
|
+
url: url,
|
|
124
|
+
description: manifest.description,
|
|
125
|
+
tools: manifest.tools || [],
|
|
126
|
+
status: 'connected',
|
|
127
|
+
lastConnected: new Date().toISOString(),
|
|
128
|
+
autoConnect,
|
|
129
|
+
};
|
|
130
|
+
const servers = loadServers();
|
|
131
|
+
// Remove existing server with same URL
|
|
132
|
+
const existing = servers.findIndex(s => s.url === url);
|
|
133
|
+
if (existing >= 0) {
|
|
134
|
+
servers[existing] = server;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
servers.push(server);
|
|
138
|
+
}
|
|
139
|
+
saveServers(servers);
|
|
140
|
+
return server;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Unregister an MCP server
|
|
144
|
+
*/
|
|
145
|
+
export function unregisterServer(idOrUrl) {
|
|
146
|
+
const servers = loadServers();
|
|
147
|
+
const index = servers.findIndex(s => s.id === idOrUrl || s.url === idOrUrl);
|
|
148
|
+
if (index >= 0) {
|
|
149
|
+
servers.splice(index, 1);
|
|
150
|
+
saveServers(servers);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get all registered MCP tools as Calliope tools
|
|
157
|
+
*/
|
|
158
|
+
export function getMCPTools() {
|
|
159
|
+
const servers = loadServers();
|
|
160
|
+
const tools = [];
|
|
161
|
+
for (const server of servers) {
|
|
162
|
+
if (server.status !== 'connected')
|
|
163
|
+
continue;
|
|
164
|
+
for (const mcpTool of server.tools) {
|
|
165
|
+
tools.push({
|
|
166
|
+
name: `mcp_${server.id.slice(-6)}_${mcpTool.name}`,
|
|
167
|
+
description: `[MCP: ${server.name}] ${mcpTool.description}`,
|
|
168
|
+
parameters: {
|
|
169
|
+
type: 'object',
|
|
170
|
+
properties: Object.fromEntries(Object.entries(mcpTool.inputSchema.properties || {}).map(([key, value]) => [
|
|
171
|
+
key,
|
|
172
|
+
{
|
|
173
|
+
type: value.type,
|
|
174
|
+
description: value.description || key,
|
|
175
|
+
enum: value.enum,
|
|
176
|
+
},
|
|
177
|
+
])),
|
|
178
|
+
required: mcpTool.inputSchema.required,
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return tools;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Execute an MCP tool call
|
|
187
|
+
*/
|
|
188
|
+
export async function executeMCPTool(toolName, args) {
|
|
189
|
+
// Parse tool name to find server and tool
|
|
190
|
+
const match = toolName.match(/^mcp_(\w+)_(.+)$/);
|
|
191
|
+
if (!match) {
|
|
192
|
+
return `Error: Invalid MCP tool name: ${toolName}`;
|
|
193
|
+
}
|
|
194
|
+
const [, serverId, mcpToolName] = match;
|
|
195
|
+
const servers = loadServers();
|
|
196
|
+
const server = servers.find(s => s.id.endsWith(serverId));
|
|
197
|
+
if (!server) {
|
|
198
|
+
return `Error: MCP server not found for tool: ${toolName}`;
|
|
199
|
+
}
|
|
200
|
+
// Make RPC call to server
|
|
201
|
+
try {
|
|
202
|
+
const result = await mcpCall(server.url, 'tools/call', {
|
|
203
|
+
name: mcpToolName,
|
|
204
|
+
arguments: args,
|
|
205
|
+
});
|
|
206
|
+
return typeof result === 'string' ? result : JSON.stringify(result, null, 2);
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
return `Error: MCP call failed: ${e instanceof Error ? e.message : String(e)}`;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Make an MCP RPC call
|
|
214
|
+
*/
|
|
215
|
+
async function mcpCall(serverUrl, method, params) {
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
const url = new URL(serverUrl);
|
|
218
|
+
const protocol = url.protocol === 'https:' ? https : http;
|
|
219
|
+
const body = JSON.stringify({
|
|
220
|
+
jsonrpc: '2.0',
|
|
221
|
+
id: Date.now(),
|
|
222
|
+
method,
|
|
223
|
+
params,
|
|
224
|
+
});
|
|
225
|
+
const req = protocol.request({
|
|
226
|
+
hostname: url.hostname,
|
|
227
|
+
port: url.port || (url.protocol === 'https:' ? 443 : 80),
|
|
228
|
+
path: url.pathname,
|
|
229
|
+
method: 'POST',
|
|
230
|
+
headers: {
|
|
231
|
+
'Content-Type': 'application/json',
|
|
232
|
+
'Content-Length': Buffer.byteLength(body),
|
|
233
|
+
'User-Agent': 'Calliope-CLI/1.0',
|
|
234
|
+
},
|
|
235
|
+
timeout: 30000,
|
|
236
|
+
}, (res) => {
|
|
237
|
+
let data = '';
|
|
238
|
+
res.on('data', chunk => data += chunk);
|
|
239
|
+
res.on('end', () => {
|
|
240
|
+
try {
|
|
241
|
+
const response = JSON.parse(data);
|
|
242
|
+
if (response.error) {
|
|
243
|
+
reject(new Error(response.error.message || 'MCP error'));
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
resolve(response.result);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
reject(new Error('Invalid MCP response'));
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
req.on('error', reject);
|
|
255
|
+
req.on('timeout', () => {
|
|
256
|
+
req.destroy();
|
|
257
|
+
reject(new Error('Request timed out'));
|
|
258
|
+
});
|
|
259
|
+
req.write(body);
|
|
260
|
+
req.end();
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* List all registered servers
|
|
265
|
+
*/
|
|
266
|
+
export function listServers() {
|
|
267
|
+
return loadServers();
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Refresh server connection status
|
|
271
|
+
*/
|
|
272
|
+
export async function refreshServer(idOrUrl) {
|
|
273
|
+
const servers = loadServers();
|
|
274
|
+
const index = servers.findIndex(s => s.id === idOrUrl || s.url === idOrUrl);
|
|
275
|
+
if (index < 0)
|
|
276
|
+
return null;
|
|
277
|
+
const server = servers[index];
|
|
278
|
+
try {
|
|
279
|
+
const manifest = await fetchManifest(server.url);
|
|
280
|
+
server.tools = manifest.tools || [];
|
|
281
|
+
server.status = 'connected';
|
|
282
|
+
server.lastConnected = new Date().toISOString();
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
server.status = 'error';
|
|
286
|
+
}
|
|
287
|
+
saveServers(servers);
|
|
288
|
+
return server;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.d.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Memory System
|
|
3
|
+
*
|
|
4
|
+
* Persistent memory across sessions using CALLIOPE.md files.
|
|
5
|
+
* Supports project-level and global memories.
|
|
6
|
+
*
|
|
7
|
+
* Format (human-readable markdown):
|
|
8
|
+
* ```
|
|
9
|
+
* # Project Memory
|
|
10
|
+
*
|
|
11
|
+
* ## Context
|
|
12
|
+
* - Key fact about the project
|
|
13
|
+
* - Another important detail
|
|
14
|
+
*
|
|
15
|
+
* ## Preferences
|
|
16
|
+
* - User prefers functional components
|
|
17
|
+
* - Always use TypeScript
|
|
18
|
+
*
|
|
19
|
+
* ## History
|
|
20
|
+
* - 2025-01-09: Implemented auth system
|
|
21
|
+
* - 2025-01-08: Set up project structure
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export interface Memory {
|
|
25
|
+
context: string[];
|
|
26
|
+
preferences: string[];
|
|
27
|
+
history: string[];
|
|
28
|
+
notes: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface MemoryEntry {
|
|
31
|
+
type: 'context' | 'preference' | 'history' | 'note';
|
|
32
|
+
content: string;
|
|
33
|
+
timestamp?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find project memory file (searches up directory tree)
|
|
37
|
+
*/
|
|
38
|
+
export declare function findProjectMemory(startDir: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Get global memory file path
|
|
41
|
+
*/
|
|
42
|
+
export declare function getGlobalMemoryPath(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Parse CALLIOPE.md file into Memory object
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseMemoryFile(content: string): Memory;
|
|
47
|
+
/**
|
|
48
|
+
* Format Memory object as markdown
|
|
49
|
+
*/
|
|
50
|
+
export declare function formatMemoryFile(memory: Memory, title?: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Load memory from file
|
|
53
|
+
*/
|
|
54
|
+
export declare function loadMemory(filePath: string): Memory;
|
|
55
|
+
/**
|
|
56
|
+
* Save memory to file
|
|
57
|
+
*/
|
|
58
|
+
export declare function saveMemory(filePath: string, memory: Memory, title?: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Get project memory for current directory
|
|
61
|
+
*/
|
|
62
|
+
export declare function getProjectMemory(dir: string): Memory;
|
|
63
|
+
/**
|
|
64
|
+
* Get global memory
|
|
65
|
+
*/
|
|
66
|
+
export declare function getGlobalMemory(): Memory;
|
|
67
|
+
/**
|
|
68
|
+
* Add entry to memory
|
|
69
|
+
*/
|
|
70
|
+
export declare function addMemoryEntry(filePath: string, entry: MemoryEntry, title?: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Remove entry from memory
|
|
73
|
+
*/
|
|
74
|
+
export declare function removeMemoryEntry(filePath: string, type: MemoryEntry['type'], content: string, title?: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Initialize project memory file
|
|
77
|
+
*/
|
|
78
|
+
export declare function initProjectMemory(dir: string, projectName?: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Find and load context from standard files
|
|
81
|
+
*/
|
|
82
|
+
export declare function loadContextFiles(dir: string): Array<{
|
|
83
|
+
name: string;
|
|
84
|
+
label: string;
|
|
85
|
+
content: string;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Get list of context files that exist in directory
|
|
89
|
+
*/
|
|
90
|
+
export declare function listContextFiles(dir: string): string[];
|
|
91
|
+
/**
|
|
92
|
+
* Build memory context string for system prompt
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildMemoryContext(dir: string): string;
|
|
95
|
+
/**
|
|
96
|
+
* Build compact context summary (for token-limited situations)
|
|
97
|
+
*/
|
|
98
|
+
export declare function buildCompactContext(dir: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* Auto-extract potential memories from conversation
|
|
101
|
+
* Returns suggestions for memories to add
|
|
102
|
+
*/
|
|
103
|
+
export declare function suggestMemories(content: string): MemoryEntry[];
|
|
104
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoCvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAmB,GAAG,MAAM,CAoCjF;AAMD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAMjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI,CA4BN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAyBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBrG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAItD;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqDtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAwC9D"}
|