@satori-sh/cli 0.1.1 → 0.1.3

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 (46) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +4 -4
  3. package/dist/chunk-5x6wts8n.js +0 -27331
  4. package/dist/chunk-kc0c4n2e.js +0 -23
  5. package/dist/chunk-pgay1aps.js +0 -27331
  6. package/dist/chunk-zhxnt6w7.js +0 -32
  7. package/dist/highlights-eq9cgrbb.scm +0 -604
  8. package/dist/highlights-ghv9g403.scm +0 -205
  9. package/dist/highlights-hk7bwhj4.scm +0 -284
  10. package/dist/highlights-r812a2qc.scm +0 -150
  11. package/dist/highlights-x6tmsnaa.scm +0 -115
  12. package/dist/injections-73j83es3.scm +0 -27
  13. package/dist/src/add.d.ts +0 -23
  14. package/dist/src/add.d.ts.map +0 -1
  15. package/dist/src/add.js +0 -50
  16. package/dist/src/add.js.map +0 -1
  17. package/dist/src/config.d.ts +0 -51
  18. package/dist/src/config.d.ts.map +0 -1
  19. package/dist/src/config.js +0 -195
  20. package/dist/src/config.js.map +0 -1
  21. package/dist/src/index.d.ts +0 -14
  22. package/dist/src/index.d.ts.map +0 -1
  23. package/dist/src/index.js +0 -446
  24. package/dist/src/index.js.map +0 -1
  25. package/dist/src/memory.d.ts +0 -41
  26. package/dist/src/memory.d.ts.map +0 -1
  27. package/dist/src/memory.js +0 -93
  28. package/dist/src/memory.js.map +0 -1
  29. package/dist/src/search.d.ts +0 -14
  30. package/dist/src/search.d.ts.map +0 -1
  31. package/dist/src/search.js +0 -43
  32. package/dist/src/search.js.map +0 -1
  33. package/dist/src/types.d.ts +0 -74
  34. package/dist/src/types.d.ts.map +0 -1
  35. package/dist/src/types.js +0 -2
  36. package/dist/src/types.js.map +0 -1
  37. package/dist/tests/index.test.d.ts +0 -2
  38. package/dist/tests/index.test.d.ts.map +0 -1
  39. package/dist/tests/index.test.js +0 -252
  40. package/dist/tests/index.test.js.map +0 -1
  41. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  42. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  43. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  44. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  45. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  46. package/dist/ui-4LVANHF6.js +0 -2678
package/dist/src/index.js DELETED
@@ -1,446 +0,0 @@
1
- #! /usr/bin/env node
2
- import { execFile, spawn } from 'node:child_process';
3
- import { createWriteStream, mkdirSync, readFileSync, realpathSync } from 'node:fs';
4
- import { homedir } from 'node:os';
5
- import { dirname, join } from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
- import chalk from 'chalk';
8
- import { Command } from 'commander';
9
- import { PostHog } from 'posthog-node';
10
- import { addMemories } from './add.js';
11
- import { getConfig, getStoredApiKey, setConfigOverrides } from './config.js';
12
- import { listMemoryIds, resolveMemoryId, setMemoryId } from './memory.js';
13
- import { searchMemories } from './search.js';
14
- // Re-export for external use
15
- export { searchMemories } from './search.js';
16
- export { addMemories } from './add.js';
17
- const CLI_NAME = 'satori';
18
- const CLI_VERSION = '0.0.1';
19
- const DEFAULT_LLM_MODEL = 'gpt-4o';
20
- const POSTHOG_KEY = 'phc_W3oAFaNlYh9rnrCoDY0qC1XnSgl4A2gjBK8bEBwJo0u';
21
- const POSTHOG_HOST = 'https://us.i.posthog.com';
22
- const LOG_DIR = join(homedir(), '.config', 'satori');
23
- const LOG_PATH = join(LOG_DIR, 'logs.txt');
24
- const getCliVersion = () => {
25
- const __dirname = dirname(fileURLToPath(import.meta.url));
26
- const packagePath = join(__dirname, '..', 'package.json');
27
- const raw = readFileSync(packagePath, 'utf8');
28
- const data = JSON.parse(raw);
29
- return data.version ?? 'unknown';
30
- };
31
- const fatal = (message) => {
32
- console.error(message);
33
- process.exit(1);
34
- throw new Error(message);
35
- };
36
- const setupLogCapture = () => {
37
- try {
38
- mkdirSync(LOG_DIR, { recursive: true });
39
- const logStream = createWriteStream(LOG_PATH, { flags: 'a' });
40
- const stdoutWrite = process.stdout.write.bind(process.stdout);
41
- const stderrWrite = process.stderr.write.bind(process.stderr);
42
- process.stdout.write = ((chunk, encoding, callback) => {
43
- logStream.write(chunk);
44
- return stdoutWrite(chunk, encoding, callback);
45
- });
46
- process.stderr.write = ((chunk, encoding, callback) => {
47
- logStream.write(chunk);
48
- return stderrWrite(chunk, encoding, callback);
49
- });
50
- }
51
- catch {
52
- }
53
- };
54
- const isGetApiKeyCommand = (argv) => (argv[0] === 'get' && argv[1] === 'api-key');
55
- const normalizeOverrideValue = (value) => {
56
- if (!value) {
57
- return undefined;
58
- }
59
- const trimmed = value.trim();
60
- return trimmed.length > 0 ? trimmed : undefined;
61
- };
62
- const readFlagValue = (argv, flag) => {
63
- for (let index = 0; index < argv.length; index += 1) {
64
- const arg = argv[index];
65
- if (arg === flag) {
66
- const next = argv[index + 1];
67
- if (!next || next.startsWith('--')) {
68
- return undefined;
69
- }
70
- return normalizeOverrideValue(next);
71
- }
72
- if (arg.startsWith(`${flag}=`)) {
73
- return normalizeOverrideValue(arg.slice(flag.length + 1));
74
- }
75
- }
76
- return undefined;
77
- };
78
- const parseCliOverrides = (argv) => ({
79
- apiKey: readFlagValue(argv, '--api-key'),
80
- memoryId: readFlagValue(argv, '--memory-id')
81
- });
82
- const validateConfig = async (argv, overrides) => {
83
- const hasOverrides = Boolean(overrides.apiKey || overrides.memoryId);
84
- if (isGetApiKeyCommand(argv) || hasOverrides) {
85
- return;
86
- }
87
- try {
88
- await getConfig();
89
- }
90
- catch (error) {
91
- fatal(error instanceof Error ? error.message : 'Configuration error');
92
- }
93
- };
94
- const buildProgram = () => new Command()
95
- .name(CLI_NAME)
96
- .description('CLI tool for Satori memory server')
97
- .version(CLI_VERSION)
98
- .option('--api-key <key>', 'API key for this run')
99
- .option('--memory-id <id>', 'Memory ID for scoping');
100
- const createOrgContext = (loadConfig, loadStoredApiKey) => {
101
- let cachedContext = null;
102
- const fetchOrgUsage = async () => {
103
- try {
104
- const config = await loadConfig();
105
- if (!config.apiKey) {
106
- return null;
107
- }
108
- const response = await fetch(`${config.baseUrl}/org/usage`, {
109
- method: 'GET',
110
- headers: {
111
- 'Authorization': `Bearer ${config.apiKey}`
112
- }
113
- });
114
- if (!response.ok) {
115
- return null;
116
- }
117
- return await response.json();
118
- }
119
- catch {
120
- return null;
121
- }
122
- };
123
- const getOrgContext = async () => {
124
- if (cachedContext) {
125
- return cachedContext;
126
- }
127
- const usage = await fetchOrgUsage();
128
- const orgId = usage?.org_id ? String(usage.org_id) : null;
129
- cachedContext = { orgId, usage };
130
- return cachedContext;
131
- };
132
- return { getOrgContext };
133
- };
134
- const createTelemetry = (getOrgContext) => {
135
- const client = new PostHog(POSTHOG_KEY, { host: POSTHOG_HOST });
136
- const captureEvent = async (event, properties) => {
137
- try {
138
- const { orgId } = await getOrgContext();
139
- if (!orgId) {
140
- return;
141
- }
142
- client.capture({
143
- distinctId: orgId,
144
- event,
145
- properties
146
- });
147
- await client.flush();
148
- }
149
- catch {
150
- }
151
- };
152
- return { captureEvent };
153
- };
154
- const buildInfoDisplay = async (getOrgContext) => {
155
- const { usage } = await getOrgContext();
156
- const config = await getConfig();
157
- const tokens = usage ? usage.total_tokens.toLocaleString() : 'unknown';
158
- const memoryId = usage?.memory_id ?? config.memoryId ?? 'unknown';
159
- const version = getCliVersion();
160
- return {
161
- usageLine: `Tokens Used ${tokens} | Memory Layer: ${memoryId}`,
162
- versionLine: `${version}`,
163
- modelLine: `Model: ${DEFAULT_LLM_MODEL}`,
164
- fullLine: `Model: ${DEFAULT_LLM_MODEL} | Tokens: ${tokens} | Memory ID: ${memoryId} | CLI: ${version}`
165
- };
166
- };
167
- const callAskAPI = async (prompt, memoryId, saveMemory) => {
168
- const config = await getConfig();
169
- const headers = {
170
- 'Content-Type': 'application/json',
171
- 'Authorization': `Bearer ${config.apiKey}`
172
- };
173
- if (config.openaiApiKey) {
174
- headers['X-OpenAI-Key'] = config.openaiApiKey;
175
- }
176
- const response = await fetch(`${config.baseUrl}/ask`, {
177
- method: 'POST',
178
- headers,
179
- body: JSON.stringify({
180
- prompt,
181
- memory_id: memoryId,
182
- llm_model: DEFAULT_LLM_MODEL,
183
- ...(saveMemory ? { save_memory: true } : {})
184
- })
185
- });
186
- if (response.status === 402) {
187
- fatal('Free tier exceeded. Run `npx @satori-sh sub` to subscribe');
188
- }
189
- if (!response.ok) {
190
- throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
191
- }
192
- const data = await response.json();
193
- return data.response;
194
- };
195
- const createProcessUserInput = (captureEvent) => async (input, options, outputMode) => {
196
- const { memoryId, instruction } = await resolveMemoryId({ memoryId: options.memoryId });
197
- const response = await callAskAPI(input, memoryId, options.saveMemory);
198
- await captureEvent('cli_chat', { output_mode: outputMode });
199
- if (outputMode === 'cli') {
200
- console.log(response);
201
- if (instruction) {
202
- console.log(`\n${instruction}`);
203
- }
204
- }
205
- return { response, instruction, memoryId };
206
- };
207
- const createCommandTracker = (captureEvent) => async (event) => {
208
- await captureEvent(event);
209
- };
210
- const runChat = async (initialPrompt, options, getInfoDisplay, processUserInput) => {
211
- if (!initialPrompt) {
212
- return;
213
- }
214
- const info = await getInfoDisplay();
215
- console.log(info.fullLine);
216
- await processUserInput(initialPrompt, options, 'cli');
217
- };
218
- const registerChatCommand = (program, getInfoDisplay, processUserInput) => {
219
- program
220
- .argument('[prompt]', 'initial prompt for chat session (optional)')
221
- .action(async (initialPrompt, options) => {
222
- try {
223
- await runChat(initialPrompt, options, getInfoDisplay, processUserInput);
224
- }
225
- catch (error) {
226
- fatal(`Chat error: ${error instanceof Error ? error.message : error}`);
227
- }
228
- });
229
- };
230
- const loadClaudePrompt = () => {
231
- const __dirname = dirname(fileURLToPath(import.meta.url));
232
- const promptPath = join(__dirname, '..', 'claude-prompt.txt');
233
- const prompt = readFileSync(promptPath, 'utf8').trim();
234
- if (!prompt) {
235
- fatal('claude-prompt.txt is empty');
236
- }
237
- return prompt;
238
- };
239
- const runClaude = async (prompt) => new Promise((resolve, reject) => {
240
- const child = spawn('claude', [prompt], { stdio: 'inherit' });
241
- child.on('error', (error) => {
242
- reject(error);
243
- });
244
- child.on('exit', (code) => {
245
- if (code && code !== 0) {
246
- reject(new Error(`claude exited with code ${code}`));
247
- return;
248
- }
249
- resolve();
250
- });
251
- });
252
- const registerAddCommand = (program, trackCommand) => {
253
- const add = program
254
- .command('add')
255
- .description('add a new memory')
256
- .argument('<text>', 'text to add as memory')
257
- .action(async (text) => {
258
- await trackCommand('cli_add');
259
- await addMemories(text);
260
- });
261
- add
262
- .command('memory')
263
- .description('run Claude to install memory sdk')
264
- .action(async () => {
265
- await trackCommand('cli_add_memory');
266
- const prompt = loadClaudePrompt();
267
- try {
268
- await runClaude(prompt);
269
- }
270
- catch (error) {
271
- fatal(`Claude error: ${error instanceof Error ? error.message : error}`);
272
- }
273
- });
274
- };
275
- const registerSearchCommand = (program, trackCommand) => {
276
- program
277
- .command('search')
278
- .description('search memories')
279
- .argument('<query>', 'search query for memories')
280
- .action(async (query) => {
281
- await trackCommand('cli_search');
282
- await searchMemories(query);
283
- });
284
- };
285
- const registerMemoryCommand = (program, trackCommand) => {
286
- const memory = program
287
- .command('memory')
288
- .description('manage memory ids');
289
- memory
290
- .command('list')
291
- .description('list memory ids')
292
- .action(async () => {
293
- await trackCommand('cli_memory_list');
294
- const memoryIds = await listMemoryIds();
295
- if (memoryIds.length === 0) {
296
- console.log('No memory ids found.');
297
- return;
298
- }
299
- console.log(memoryIds.join('\n'));
300
- });
301
- memory
302
- .command('new')
303
- .description('create a new memory id and set it')
304
- .argument('<memory-id-name>', 'memory id to set')
305
- .action(async (memoryId) => {
306
- await trackCommand('cli_memory_new');
307
- await setMemoryId(memoryId);
308
- console.log(`Memory id set to ${memoryId}`);
309
- });
310
- memory
311
- .command('use')
312
- .description('switch to a memory id')
313
- .argument('<memory-id>', 'memory id to set')
314
- .action(async (memoryId) => {
315
- await trackCommand('cli_memory_use');
316
- await setMemoryId(memoryId);
317
- console.log(`Memory id set to ${memoryId}`);
318
- });
319
- };
320
- const registerSubCommand = (program, trackCommand) => {
321
- program
322
- .command('sub')
323
- .description('open the subscription checkout')
324
- .action(async () => {
325
- await trackCommand('cli_sub');
326
- const config = await getConfig();
327
- const checkoutUrl = parseCheckoutUrl(config.checkoutUrl);
328
- if (process.platform !== 'darwin') {
329
- console.log(checkoutUrl);
330
- return;
331
- }
332
- await new Promise((resolve) => {
333
- execFile('open', [checkoutUrl], (error) => {
334
- if (error) {
335
- console.log(checkoutUrl);
336
- }
337
- resolve();
338
- });
339
- });
340
- });
341
- };
342
- const parseCheckoutUrl = (checkoutUrlRaw) => {
343
- if (typeof checkoutUrlRaw !== 'string' || checkoutUrlRaw.length === 0) {
344
- fatal('SATORI_CHECKOUT_URL is not set');
345
- }
346
- const checkoutUrl = checkoutUrlRaw;
347
- try {
348
- return new URL(checkoutUrl).toString();
349
- }
350
- catch {
351
- fatal('SATORI_CHECKOUT_URL is not a valid URL');
352
- }
353
- throw new Error('Unreachable');
354
- };
355
- const registerGetCommand = (program, trackCommand) => {
356
- program
357
- .command('get')
358
- .description('get config value (e.g. `get api-key`)')
359
- .argument('<key>', 'key to get')
360
- .action(async (key) => {
361
- await trackCommand('cli_get');
362
- if (key !== 'api-key') {
363
- fatal('Unknown key');
364
- }
365
- const apiKey = await getStoredApiKey();
366
- if (!apiKey) {
367
- fatal('API key not found in config');
368
- }
369
- console.log(chalk.magenta(`\n ${apiKey} \n`));
370
- });
371
- };
372
- const registerCopyLogsCommand = (program, trackCommand) => {
373
- program
374
- .command('copy')
375
- .description('copy logs.txt contents')
376
- .argument('[target]', 'copy target')
377
- .action(async (target) => {
378
- if (target && target !== 'logs') {
379
- fatal('Unknown copy target. Use `copy logs`.');
380
- }
381
- await trackCommand('cli_copy_logs');
382
- let contents = '';
383
- try {
384
- contents = readFileSync(LOG_PATH, 'utf8');
385
- }
386
- catch {
387
- console.log(`No logs yet. Expected at ${LOG_PATH}`);
388
- return;
389
- }
390
- if (process.platform !== 'darwin') {
391
- console.log(contents);
392
- return;
393
- }
394
- await new Promise((resolve, reject) => {
395
- const pbcopy = execFile('pbcopy', (error) => {
396
- if (error) {
397
- reject(error);
398
- return;
399
- }
400
- resolve();
401
- });
402
- pbcopy.stdin?.end(contents);
403
- });
404
- });
405
- };
406
- /**
407
- * Main entry point for the Satori CLI application.
408
- *
409
- * Parses command-line arguments and executes the appropriate command.
410
- * Sets up the CLI with available commands: search, add, and chat.
411
- *
412
- * @returns {Promise<void>}
413
- * @throws {Error} If configuration validation fails
414
- */
415
- export async function main() {
416
- const argv = process.argv.slice(2);
417
- const cliOverrides = parseCliOverrides(argv);
418
- setConfigOverrides(cliOverrides);
419
- setupLogCapture();
420
- await validateConfig(argv, cliOverrides);
421
- const program = buildProgram();
422
- const { getOrgContext } = createOrgContext(getConfig, getStoredApiKey);
423
- const { captureEvent } = createTelemetry(getOrgContext);
424
- const processUserInput = createProcessUserInput(captureEvent);
425
- const trackCommand = createCommandTracker(captureEvent);
426
- const getInfoDisplay = () => buildInfoDisplay(getOrgContext);
427
- await captureEvent('cli_launched', { command: argv[0] ?? 'chat' });
428
- registerChatCommand(program, getInfoDisplay, processUserInput);
429
- registerAddCommand(program, trackCommand);
430
- registerSearchCommand(program, trackCommand);
431
- registerMemoryCommand(program, trackCommand);
432
- registerSubCommand(program, trackCommand);
433
- registerGetCommand(program, trackCommand);
434
- registerCopyLogsCommand(program, trackCommand);
435
- if (argv.length === 0) {
436
- program.outputHelp();
437
- return;
438
- }
439
- program.parse();
440
- }
441
- const entryPath = process.argv[1] ? realpathSync(process.argv[1]) : '';
442
- const modulePath = realpathSync(fileURLToPath(import.meta.url));
443
- if (entryPath === modulePath) {
444
- main();
445
- }
446
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { SearchResponse } from './types.js';
2
- /**
3
- * Options for memory context building.
4
- */
5
- interface MemoryOptions {
6
- /** Existing memory ID to use for the search */
7
- memoryId?: string;
8
- /** Number of top memories to retrieve */
9
- topK?: number;
10
- }
11
- type MemoryIdResult = {
12
- memoryId: string;
13
- instruction?: string;
14
- };
15
- export declare function resolveMemoryId(options?: {
16
- memoryId?: string;
17
- }): Promise<MemoryIdResult>;
18
- /**
19
- * Builds memory context by searching for relevant memories and generating a memory ID if needed.
20
- *
21
- * @param {string} prompt - The user's prompt to search memories for
22
- * @param {MemoryOptions} [options] - Search options
23
- * @returns {Promise<{results: SearchResponse['results'], memoryId: string, instruction?: string}>}
24
- * Object containing search results, the memory ID used/generated, and setup instructions if generated
25
- *
26
- * @example
27
- * ```typescript
28
- * const context = await buildMemoryContext("What's my favorite food?", { topK: 3 });
29
- * console.log(`Found ${context.results.length} relevant memories`);
30
- * if (context.instruction) console.log(context.instruction);
31
- * ```
32
- */
33
- export declare function buildMemoryContext(prompt: string, options?: MemoryOptions): Promise<{
34
- results: SearchResponse['results'];
35
- memoryId: string;
36
- instruction?: string;
37
- }>;
38
- export declare function listMemoryIds(): Promise<string[]>;
39
- export declare function setMemoryId(memoryId: string): Promise<void>;
40
- export {};
41
- //# sourceMappingURL=memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,cAAc,EAAW,MAAM,YAAY,CAAC;AAG3E;;GAEG;AACH,UAAU,aAAa;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAsB,eAAe,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CA0BlG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC7K;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAavD;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE"}
@@ -1,93 +0,0 @@
1
- import { getConfig, saveMemoryId } from './config.js';
2
- import { generate } from 'random-words';
3
- export async function resolveMemoryId(options = {}) {
4
- const config = await getConfig();
5
- let memoryId;
6
- let generated = false;
7
- if (options.memoryId) {
8
- memoryId = options.memoryId;
9
- }
10
- else if (process.env.SATORI_MEMORY_ID) {
11
- memoryId = process.env.SATORI_MEMORY_ID;
12
- }
13
- else if (config.memoryId) {
14
- memoryId = config.memoryId;
15
- }
16
- else {
17
- const words = generate({ exactly: 3 });
18
- memoryId = words.join('-');
19
- generated = true;
20
- }
21
- const instruction = generated ? `Memory session id: ${memoryId}.` : undefined;
22
- if (generated) {
23
- saveMemoryId(memoryId).catch(err => {
24
- console.error('Failed to save memory ID:', err);
25
- });
26
- }
27
- return { memoryId, instruction };
28
- }
29
- /**
30
- * Builds memory context by searching for relevant memories and generating a memory ID if needed.
31
- *
32
- * @param {string} prompt - The user's prompt to search memories for
33
- * @param {MemoryOptions} [options] - Search options
34
- * @returns {Promise<{results: SearchResponse['results'], memoryId: string, instruction?: string}>}
35
- * Object containing search results, the memory ID used/generated, and setup instructions if generated
36
- *
37
- * @example
38
- * ```typescript
39
- * const context = await buildMemoryContext("What's my favorite food?", { topK: 3 });
40
- * console.log(`Found ${context.results.length} relevant memories`);
41
- * if (context.instruction) console.log(context.instruction);
42
- * ```
43
- */
44
- export async function buildMemoryContext(prompt, options = {}) {
45
- const config = await getConfig();
46
- const { memoryId, instruction } = await resolveMemoryId({ memoryId: options.memoryId });
47
- const topK = options.topK || 5;
48
- const url = `${config.baseUrl}/search`;
49
- const headers = {
50
- 'Content-Type': 'application/json',
51
- 'Authorization': `Bearer ${config.apiKey}`
52
- };
53
- const body = JSON.stringify({
54
- query: prompt,
55
- memory_id: memoryId,
56
- top_k: topK
57
- });
58
- const response = await fetch(url, {
59
- method: 'POST',
60
- headers,
61
- body
62
- });
63
- if (response.status === 402) {
64
- throw new Error('Free tier exceeded. Run `npx @satori-sh sub` to subscribe');
65
- }
66
- if (!response.ok) {
67
- throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
68
- }
69
- const data = await response.json();
70
- return {
71
- results: data.results,
72
- memoryId,
73
- instruction
74
- };
75
- }
76
- export async function listMemoryIds() {
77
- const config = await getConfig();
78
- const response = await fetch(`${config.baseUrl}/org/memory-ids`, {
79
- method: 'GET',
80
- headers: {
81
- 'Authorization': `Bearer ${config.apiKey}`
82
- }
83
- });
84
- if (!response.ok) {
85
- throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
86
- }
87
- const data = await response.json();
88
- return Array.isArray(data.memory_ids) ? data.memory_ids : [];
89
- }
90
- export async function setMemoryId(memoryId) {
91
- await saveMemoryId(memoryId);
92
- }
93
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Searches for memories matching the given query.
3
- *
4
- * @param {string} query - The search query for memories
5
- * @returns {Promise<void>} Logs the search results to console
6
- * @throws {Error} If the query is empty or API call fails
7
- *
8
- * @example
9
- * ```bash
10
- * satori "what is my favorite food?"
11
- * ```
12
- */
13
- export declare function searchMemories(query: string): Promise<void>;
14
- //# sourceMappingURL=search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjE"}