@satori-sh/cli 0.1.2 → 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 +3 -3
  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
@@ -1,43 +0,0 @@
1
- import { getConfig } from './config.js';
2
- /**
3
- * Searches for memories matching the given query.
4
- *
5
- * @param {string} query - The search query for memories
6
- * @returns {Promise<void>} Logs the search results to console
7
- * @throws {Error} If the query is empty or API call fails
8
- *
9
- * @example
10
- * ```bash
11
- * satori "what is my favorite food?"
12
- * ```
13
- */
14
- export async function searchMemories(query) {
15
- if (!query || !query.trim()) {
16
- console.error('Query cannot be empty');
17
- return;
18
- }
19
- try {
20
- const config = await getConfig();
21
- const response = await fetch(`${config.baseUrl}/search`, {
22
- method: 'POST',
23
- headers: {
24
- 'Content-Type': 'application/json',
25
- 'Authorization': `Bearer ${config.apiKey}`
26
- },
27
- body: JSON.stringify({ query })
28
- });
29
- if (response.status === 402) {
30
- console.error('Free tier exceeded. Run `npx @satori-sh sub` to subscribe');
31
- return;
32
- }
33
- if (!response.ok) {
34
- console.error(`HTTP error: ${response.status} ${response.statusText}`);
35
- return;
36
- }
37
- await response.json();
38
- }
39
- catch (error) {
40
- console.error(`Error searching memories: ${error instanceof Error ? error.message : error}`);
41
- }
42
- }
43
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,SAAS,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;aAC3C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Configuration object for the Satori CLI.
3
- */
4
- export type Config = {
5
- /** API key for Satori authentication */
6
- apiKey: string | null;
7
- /** User OpenAI API key for passthrough */
8
- openaiApiKey: string | null;
9
- /** Base URL for the Satori memory server */
10
- baseUrl: string;
11
- /** Checkout URL for subscription flow */
12
- checkoutUrl: string | null;
13
- /** Memory ID for scoping conversations */
14
- memoryId?: string;
15
- };
16
- /**
17
- * Response from the memory search API.
18
- */
19
- export interface SearchResponse {
20
- /** Array of search results */
21
- results: Array<{
22
- id: string;
23
- memory: string;
24
- score?: number;
25
- }>;
26
- }
27
- /**
28
- * Response from the memory add API.
29
- */
30
- export interface AddResponse {
31
- /** Array of add operation results */
32
- results: Array<{
33
- id: string;
34
- memory: string;
35
- event: string;
36
- }>;
37
- }
38
- export type AskResponse = {
39
- response: string;
40
- sources: Array<{
41
- type: string;
42
- id?: string;
43
- content?: string;
44
- }>;
45
- latency_ms: number;
46
- };
47
- export type OrgUsageResponse = {
48
- total_tokens: number;
49
- org_id: number;
50
- memory_id?: string;
51
- };
52
- export type OrgMemoryIdsResponse = {
53
- memory_ids: string[];
54
- };
55
- export type InteractiveOptions = {
56
- memoryId?: string;
57
- saveMemory?: boolean;
58
- };
59
- export type ProcessResult = {
60
- response: string;
61
- instruction?: string;
62
- memoryId: string;
63
- };
64
- export type ProcessUserInput = (input: string, options: InteractiveOptions, outputMode: 'cli') => Promise<ProcessResult>;
65
- /**
66
- * Message format for LLM API calls.
67
- */
68
- export type Message = {
69
- /** Role of the message sender */
70
- role: 'user' | 'assistant' | 'system';
71
- /** Content of the message */
72
- content: string;
73
- };
74
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,wCAAwC;IACxC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,KAAK,KACd,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,iCAAiC;IACjC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
package/dist/src/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../tests/index.test.ts"],"names":[],"mappings":""}
@@ -1,252 +0,0 @@
1
- let test;
2
- let expect;
3
- let mock;
4
- let beforeEach;
5
- let afterEach;
6
- if (globalThis.Bun) {
7
- ({ test, expect, mock, beforeEach, afterEach } = await import('bun:test'));
8
- }
9
- else {
10
- throw new Error('These tests require Bun. Run `bun test`.');
11
- }
12
- import { main, searchMemories, addMemories } from '../src/index';
13
- import { getConfig, checkWriteAccess, saveApiKey } from '../src/config.js';
14
- let originalFetch;
15
- let originalEnv;
16
- let originalArgv;
17
- let originalPlatform;
18
- beforeEach(() => {
19
- originalFetch = global.fetch;
20
- originalEnv = { ...process.env };
21
- originalArgv = [...process.argv];
22
- originalPlatform = process.platform;
23
- });
24
- afterEach(() => {
25
- global.fetch = originalFetch;
26
- process.env = originalEnv;
27
- process.argv = originalArgv;
28
- process.platform = originalPlatform;
29
- });
30
- test('error handling for invalid base URL', async () => {
31
- process.env.SATORI_BASE_URL = 'invalid-url';
32
- process.argv = ['node', 'index.js', 'query'];
33
- const errorSpy = mock(() => { });
34
- console.error = errorSpy;
35
- const exitSpy = mock(() => { throw new Error('exit'); });
36
- process.exit = exitSpy;
37
- try {
38
- await main();
39
- expect(true).toBe(false); // should not reach
40
- }
41
- catch (e) {
42
- expect(e.message).toBe('exit');
43
- }
44
- });
45
- test('error handling for invalid base URL', async () => {
46
- process.env.SATORI_API_KEY = 'test-key';
47
- process.env.SATORI_BASE_URL = 'invalid-url';
48
- process.argv = ['node', 'index.js', 'query'];
49
- const errorSpy = mock(() => { });
50
- console.error = errorSpy;
51
- const exitSpy = mock(() => { throw new Error('exit'); });
52
- process.exit = exitSpy;
53
- try {
54
- await main();
55
- expect(true).toBe(false); // should not reach
56
- }
57
- catch (e) {
58
- expect(e.message).toBe('exit');
59
- }
60
- });
61
- test('search with empty query', async () => {
62
- process.env.SATORI_API_KEY = 'satori-erQCxG3GYryoXt4JydgEsbRmg5LuJf6p';
63
- const errorSpy = mock(() => { });
64
- console.error = errorSpy;
65
- await searchMemories('');
66
- expect(errorSpy).toHaveBeenCalledWith('Query cannot be empty');
67
- });
68
- test('add with empty text', async () => {
69
- process.env.SATORI_API_KEY = 'satori-erQCxG3GYryoXt4JydgEsbRmg5LuJf6p';
70
- const errorSpy = mock(() => { });
71
- console.error = errorSpy;
72
- await addMemories('');
73
- expect(errorSpy).toHaveBeenCalledWith('Text cannot be empty');
74
- });
75
- test('HTTP 401 error', async () => {
76
- process.env.SATORI_API_KEY = 'test-key';
77
- const fetchMock = Object.assign(mock(() => Promise.resolve(new Response('Unauthorized', { status: 401, statusText: 'Unauthorized' }))), { preconnect: mock(() => { }) });
78
- globalThis.fetch = fetchMock;
79
- const errorSpy = mock(() => { });
80
- console.error = errorSpy;
81
- await searchMemories('test');
82
- expect(errorSpy).toHaveBeenCalledWith('HTTP error: 401 Unauthorized');
83
- });
84
- test('HTTP 500 error', async () => {
85
- process.env.SATORI_API_KEY = 'test-key';
86
- const fetchMock = Object.assign(mock(() => Promise.resolve(new Response('Internal Server Error', { status: 500, statusText: 'Internal Server Error' }))), { preconnect: mock(() => { }) });
87
- globalThis.fetch = fetchMock;
88
- const errorSpy = mock(() => { });
89
- console.error = errorSpy;
90
- await searchMemories('test');
91
- expect(errorSpy).toHaveBeenCalledWith('HTTP error: 500 Internal Server Error');
92
- });
93
- test('network error', async () => {
94
- process.env.SATORI_API_KEY = 'test-key';
95
- const fetchMock = Object.assign(mock(() => { throw new Error('network error'); }), { preconnect: mock(() => { }) });
96
- globalThis.fetch = fetchMock;
97
- const errorSpy = mock(() => { });
98
- console.error = errorSpy;
99
- await searchMemories('test');
100
- expect(errorSpy).toHaveBeenCalledWith('Error searching memories: network error');
101
- });
102
- test('malformed JSON response', async () => {
103
- process.env.SATORI_API_KEY = 'test-key';
104
- const fetchMock = Object.assign(mock(() => Promise.resolve(new Response('invalid json', { status: 200 }))), { preconnect: mock(() => { }) });
105
- globalThis.fetch = fetchMock;
106
- const errorSpy = mock(() => { });
107
- console.error = errorSpy;
108
- await searchMemories('test');
109
- expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('Error searching memories:'));
110
- });
111
- test('getConfig throws on invalid base URL', async () => {
112
- process.env.SATORI_BASE_URL = 'invalid-url';
113
- try {
114
- await getConfig();
115
- expect(true).toBe(false); // should throw
116
- }
117
- catch (error) {
118
- expect(error.message).toBe('Invalid SATORI_BASE_URL format');
119
- }
120
- finally {
121
- delete process.env.SATORI_BASE_URL;
122
- }
123
- });
124
- test('getConfig throws on non-darwin platform', async () => {
125
- process.platform = 'win32';
126
- try {
127
- await getConfig();
128
- expect(true).toBe(false); // should throw
129
- }
130
- catch (error) {
131
- expect(error.message).toBe('We do not currently support Windows yet, email support@satori.sh to request Windows support');
132
- }
133
- });
134
- test('getConfig generates apiKey on successful fetch', async () => {
135
- delete process.env.SATORI_API_KEY;
136
- const fetchMock = Object.assign(mock(() => Promise.resolve(new Response(JSON.stringify({ api_key: 'generated-key' }), { status: 200 }))), { preconnect: mock(() => { }) });
137
- globalThis.fetch = fetchMock;
138
- const config = await getConfig();
139
- expect(config.apiKey).toBe('generated-key');
140
- globalThis.fetch = originalFetch;
141
- });
142
- test('getConfig throws on network error during generation', async () => {
143
- delete process.env.SATORI_API_KEY;
144
- mock.module('node:fs', () => ({
145
- promises: {
146
- mkdir: mock(() => Promise.resolve()),
147
- writeFile: mock(() => Promise.resolve()),
148
- unlink: mock(() => Promise.resolve())
149
- }
150
- }));
151
- const mockFile = {
152
- exists: mock(() => Promise.resolve(false))
153
- };
154
- const originalBun = globalThis.Bun;
155
- globalThis.Bun = { file: mock(() => mockFile) };
156
- const fetchMock = Object.assign(mock(() => Promise.reject(new Error('network error'))), { preconnect: mock(() => { }) });
157
- globalThis.fetch = fetchMock;
158
- try {
159
- await getConfig();
160
- expect(true).toBe(false); // should throw
161
- }
162
- catch (error) {
163
- expect(error.message).toBe('Failed to generate API key: network error');
164
- }
165
- globalThis.fetch = originalFetch;
166
- globalThis.Bun = originalBun;
167
- });
168
- test('getConfig throws on invalid response during generation', async () => {
169
- delete process.env.SATORI_API_KEY;
170
- mock.module('node:fs', () => ({
171
- promises: {
172
- mkdir: mock(() => Promise.resolve()),
173
- writeFile: mock(() => Promise.resolve()),
174
- unlink: mock(() => Promise.resolve())
175
- }
176
- }));
177
- const mockFile = {
178
- exists: mock(() => Promise.resolve(false))
179
- };
180
- const originalBun = globalThis.Bun;
181
- globalThis.Bun = { file: mock(() => mockFile) };
182
- const fetchMock = Object.assign(mock(() => Promise.resolve(new Response(JSON.stringify({}), { status: 200 }))), { preconnect: mock(() => { }) });
183
- globalThis.fetch = fetchMock;
184
- try {
185
- await getConfig();
186
- expect(true).toBe(false); // should throw
187
- }
188
- catch (error) {
189
- expect(error.message).toBe('Failed to generate API key: Invalid response: missing api_key');
190
- }
191
- globalThis.fetch = originalFetch;
192
- globalThis.Bun = originalBun;
193
- });
194
- test('checkWriteAccess succeeds on successful write', async () => {
195
- mock.module('node:fs', () => ({
196
- promises: {
197
- mkdir: mock(() => Promise.resolve()),
198
- writeFile: mock(() => Promise.resolve()),
199
- unlink: mock(() => Promise.resolve())
200
- }
201
- }));
202
- await checkWriteAccess();
203
- // No throw means success
204
- });
205
- test('checkWriteAccess throws on permission denied', async () => {
206
- mock.module('node:fs', () => ({
207
- promises: {
208
- mkdir: mock(() => Promise.resolve()),
209
- writeFile: mock(() => { throw new Error('EACCES: permission denied'); }),
210
- unlink: mock(() => Promise.resolve())
211
- }
212
- }));
213
- try {
214
- await checkWriteAccess();
215
- expect(true).toBe(false); // should throw
216
- }
217
- catch (error) {
218
- expect(error.message).toBe('Cannot write to config directory: EACCES: permission denied');
219
- }
220
- });
221
- test('saveApiKey saves successfully', async () => {
222
- const mockWriteFile = mock(() => Promise.resolve());
223
- mock.module('node:fs', () => ({
224
- promises: {
225
- mkdir: mock(() => Promise.resolve()),
226
- writeFile: mockWriteFile,
227
- unlink: mock(() => Promise.resolve())
228
- }
229
- }));
230
- await saveApiKey('test-key');
231
- expect(mockWriteFile).toHaveBeenCalledWith(expect.stringContaining('satori.json'), JSON.stringify({ api_key: 'test-key' }, null, 2));
232
- });
233
- test('saveApiKey throws on write error', async () => {
234
- const mockWriteFile = mock(() => { throw new Error('write error'); });
235
- mock.module('node:fs', () => ({
236
- promises: {
237
- mkdir: mock(() => Promise.resolve()),
238
- writeFile: mockWriteFile,
239
- unlink: mock(() => Promise.resolve())
240
- }
241
- }));
242
- try {
243
- await saveApiKey('test-key');
244
- expect(true).toBe(false); // should throw
245
- }
246
- catch (error) {
247
- expect(error.message).toBe('Cannot write to config directory: write error');
248
- }
249
- });
250
- // Note: Additional unit tests for file reading scenarios would require mocking Bun.file,
251
- // which is readonly. The existing test covers the missing file case.
252
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../tests/index.test.ts"],"names":[],"mappings":"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"}
Binary file