@satori-sh/cli 0.0.34 → 0.1.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.
- package/README.md +16 -3
- package/bin/satori.js +1 -7
- package/dist/add.d.ts +23 -0
- package/dist/add.d.ts.map +1 -0
- package/dist/add.js +55 -0
- package/dist/add.js.map +1 -0
- package/dist/chunk-pgay1aps.js +27331 -0
- package/dist/chunk-zhxnt6w7.js +32 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +12 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/chat.d.ts +5 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +22 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/copy-logs.d.ts +3 -0
- package/dist/commands/copy-logs.d.ts.map +1 -0
- package/dist/commands/copy-logs.js +39 -0
- package/dist/commands/copy-logs.js.map +1 -0
- package/dist/commands/get.d.ts +3 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +29 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +37 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +12 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/sub.d.ts +3 -0
- package/dist/commands/sub.d.ts.map +1 -0
- package/dist/commands/sub.js +39 -0
- package/dist/commands/sub.js.map +1 -0
- package/dist/config.d.ts +57 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +207 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +4 -82
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -5443
- package/dist/index.js.map +1 -0
- package/dist/lib/ask.d.ts +4 -0
- package/dist/lib/ask.d.ts.map +1 -0
- package/dist/lib/ask.js +44 -0
- package/dist/lib/ask.js.map +1 -0
- package/dist/lib/cli-overrides.d.ts +6 -0
- package/dist/lib/cli-overrides.d.ts.map +1 -0
- package/dist/lib/cli-overrides.js +28 -0
- package/dist/lib/cli-overrides.js.map +1 -0
- package/dist/lib/config-validation.d.ts +3 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +16 -0
- package/dist/lib/config-validation.js.map +1 -0
- package/dist/lib/constants.d.ts +9 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +14 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/fatal.d.ts +2 -0
- package/dist/lib/fatal.d.ts.map +1 -0
- package/dist/lib/fatal.js +6 -0
- package/dist/lib/fatal.js.map +1 -0
- package/dist/lib/info-display.d.ts +14 -0
- package/dist/lib/info-display.d.ts.map +1 -0
- package/dist/lib/info-display.js +26 -0
- package/dist/lib/info-display.js.map +1 -0
- package/dist/lib/logging.d.ts +4 -0
- package/dist/lib/logging.d.ts.map +1 -0
- package/dist/lib/logging.js +24 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/telemetry.d.ts +17 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +60 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/memory.d.ts +41 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +93 -0
- package/dist/memory.js.map +1 -0
- package/dist/search.d.ts +14 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +53 -0
- package/dist/search.js.map +1 -0
- package/dist/src/add.d.ts +23 -0
- package/dist/src/add.d.ts.map +1 -0
- package/dist/src/add.js +50 -0
- package/dist/src/add.js.map +1 -0
- package/dist/src/config.d.ts +51 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +195 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +446 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/memory.d.ts +41 -0
- package/dist/src/memory.d.ts.map +1 -0
- package/dist/src/memory.js +93 -0
- package/dist/src/memory.js.map +1 -0
- package/dist/src/search.d.ts +14 -0
- package/dist/src/search.d.ts.map +1 -0
- package/dist/src/search.js +43 -0
- package/dist/src/search.js.map +1 -0
- package/dist/src/types.d.ts +74 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tests/index.test.d.ts +2 -0
- package/dist/tests/index.test.d.ts.map +1 -0
- package/dist/tests/index.test.js +252 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/logos/chars.png +0 -0
- package/logos/s.png +0 -0
- package/logos/satori.png +0 -0
- package/package.json +8 -12
|
@@ -0,0 +1,446 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|