memoire-ai 0.1.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.
Files changed (51) hide show
  1. package/README.md +18 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +359 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands.d.ts +33 -0
  7. package/dist/commands.d.ts.map +1 -0
  8. package/dist/commands.js +497 -0
  9. package/dist/commands.js.map +1 -0
  10. package/dist/configure.d.ts +65 -0
  11. package/dist/configure.d.ts.map +1 -0
  12. package/dist/configure.js +485 -0
  13. package/dist/configure.js.map +1 -0
  14. package/dist/dashboard.d.ts +9 -0
  15. package/dist/dashboard.d.ts.map +1 -0
  16. package/dist/dashboard.js +8 -0
  17. package/dist/dashboard.js.map +1 -0
  18. package/dist/dependencies.d.ts +3 -0
  19. package/dist/dependencies.d.ts.map +1 -0
  20. package/dist/dependencies.js +213 -0
  21. package/dist/dependencies.js.map +1 -0
  22. package/dist/detect.d.ts +3 -0
  23. package/dist/detect.d.ts.map +1 -0
  24. package/dist/detect.js +30 -0
  25. package/dist/detect.js.map +1 -0
  26. package/dist/hooks.d.ts +25 -0
  27. package/dist/hooks.d.ts.map +1 -0
  28. package/dist/hooks.js +479 -0
  29. package/dist/hooks.js.map +1 -0
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/local-config.d.ts +8 -0
  35. package/dist/local-config.d.ts.map +1 -0
  36. package/dist/local-config.js +16 -0
  37. package/dist/local-config.js.map +1 -0
  38. package/dist/login.d.ts +20 -0
  39. package/dist/login.d.ts.map +1 -0
  40. package/dist/login.js +93 -0
  41. package/dist/login.js.map +1 -0
  42. package/dist/manual.d.ts +15 -0
  43. package/dist/manual.d.ts.map +1 -0
  44. package/dist/manual.js +143 -0
  45. package/dist/manual.js.map +1 -0
  46. package/dist/mcp.d.ts +5 -0
  47. package/dist/mcp.d.ts.map +1 -0
  48. package/dist/mcp.js +18 -0
  49. package/dist/mcp.js.map +1 -0
  50. package/package.json +55 -0
  51. package/skills/use-memoire/SKILL.md +79 -0
package/dist/hooks.js ADDED
@@ -0,0 +1,479 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { basename } from 'node:path';
4
+ import { MemoireClient } from '@memoire/sdk';
5
+ import { createHooks, writeCursorRules as writeCursorRulesBase } from '@memoire/collector';
6
+ import { readLocalConfig } from './local-config.js';
7
+ import { runResumeCommand } from './commands.js';
8
+ const writeCursorRules = writeCursorRulesBase;
9
+ const MEMOIRE_TOOL_NAMES = new Set([
10
+ 'search_context',
11
+ 'timeline_context',
12
+ 'assemble_context',
13
+ 'project_profile',
14
+ 'search_docs',
15
+ 'write_event',
16
+ 'write_memory_event',
17
+ ]);
18
+ export async function runHookCommand(options, deps = {}) {
19
+ const config = deps.readConfig?.(options.configPath) ?? readLocalConfig({ configPath: options.configPath });
20
+ const clientName = options.client ?? config.client;
21
+ const clientId = options.clientId;
22
+ const client = deps.createClient?.(config, clientId) ?? new MemoireClient({
23
+ apiUrl: config.api_url,
24
+ apiKey: config.api_key,
25
+ ...(clientId ? { clientId } : config.client_id ? { clientId: config.client_id } : {}),
26
+ });
27
+ const payload = parseJson(await (deps.readStdin?.() ?? readStdin())) ?? {};
28
+ const cwd = inferWorkspaceRoot(payload, config);
29
+ const sessionId = inferSessionId(payload);
30
+ const branchName = inferBranchName(payload) ?? deps.detectBranch?.(cwd) ?? detectGitBranch(cwd);
31
+ const emitter = createEventEmitter({
32
+ config,
33
+ client,
34
+ clientName,
35
+ sessionId,
36
+ });
37
+ const hooks = createHooks(emitter);
38
+ try {
39
+ switch (options.hookName) {
40
+ case 'cursor-before-submit': {
41
+ const prompt = inferPrompt(payload);
42
+ await refreshCursorRules({
43
+ cwd,
44
+ prompt,
45
+ config,
46
+ clientId,
47
+ runResume: deps.runResume,
48
+ });
49
+ if (prompt) {
50
+ await hooks.onPrompt(prompt);
51
+ }
52
+ return writeCursorOutput(deps);
53
+ }
54
+ case 'cursor-after-mcp': {
55
+ const toolName = asString(payload.tool_name) ?? asString(payload.toolName);
56
+ if (!toolName || MEMOIRE_TOOL_NAMES.has(toolName)) {
57
+ return writeCursorOutput(deps);
58
+ }
59
+ await hooks.onToolUse(buildMcpObservation(toolName, payload), buildToolContext(toolName, payload, branchName));
60
+ return writeCursorOutput(deps);
61
+ }
62
+ case 'cursor-after-shell': {
63
+ const command = asString(payload.command);
64
+ if (!command || isMemoireCommand(command)) {
65
+ return writeCursorOutput(deps);
66
+ }
67
+ await hooks.onToolUse(buildShellObservation(payload), buildToolContext('shell', payload, branchName));
68
+ return writeCursorOutput(deps);
69
+ }
70
+ case 'cursor-after-file-edit': {
71
+ await hooks.onToolUse(buildFileEditObservation(payload), buildToolContext('file_edit', payload, branchName));
72
+ return writeCursorOutput(deps);
73
+ }
74
+ case 'cursor-stop': {
75
+ await refreshCursorRules({
76
+ cwd,
77
+ prompt: undefined,
78
+ config,
79
+ clientId,
80
+ runResume: deps.runResume,
81
+ });
82
+ await hooks.onSessionEnd(inferStopSummary(payload, clientName));
83
+ return writeCursorOutput(deps);
84
+ }
85
+ case 'claude-session-start': {
86
+ await hooks.onSessionStart();
87
+ const resume = await resolveResume(undefined, {
88
+ config,
89
+ clientId,
90
+ runResume: deps.runResume,
91
+ });
92
+ return writeClaudeContextOutput(resume, deps);
93
+ }
94
+ case 'claude-user-prompt': {
95
+ const prompt = inferPrompt(payload);
96
+ if (prompt) {
97
+ await hooks.onPrompt(prompt);
98
+ }
99
+ return writeClaudeStandardOutput(deps);
100
+ }
101
+ case 'claude-post-tool-use': {
102
+ const toolName = asString(payload.tool_name) ?? asString(payload.toolName);
103
+ if (!toolName || MEMOIRE_TOOL_NAMES.has(toolName)) {
104
+ return writeClaudeStandardOutput(deps);
105
+ }
106
+ await hooks.onToolUse(buildClaudeObservation(toolName, payload), buildToolContext(toolName, payload, branchName));
107
+ return writeClaudeStandardOutput(deps);
108
+ }
109
+ case 'claude-stop': {
110
+ await hooks.onSessionEnd(inferStopSummary(payload, clientName));
111
+ return writeClaudeStandardOutput(deps);
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ if (options.hookName.startsWith('cursor-')) {
117
+ return writeCursorOutput(deps);
118
+ }
119
+ return writeClaudeStandardOutput(deps);
120
+ }
121
+ }
122
+ function createEventEmitter(args) {
123
+ const baseEvent = {
124
+ org_id: args.config.org_id,
125
+ project_id: args.config.project_id,
126
+ repo_id: args.config.repo_id,
127
+ user_id: args.config.user_id,
128
+ session_id: args.sessionId,
129
+ client: args.clientName,
130
+ private: false,
131
+ };
132
+ async function emit(partial) {
133
+ await args.client.ingestEvent({
134
+ ...baseEvent,
135
+ created_at: new Date().toISOString(),
136
+ idempotency_key: randomUUID(),
137
+ ...partial,
138
+ });
139
+ }
140
+ return {
141
+ async sessionStart() {
142
+ await emit({
143
+ event_type: 'observation',
144
+ content: `Session started on ${args.clientName}`,
145
+ });
146
+ },
147
+ async prompt(content, opts) {
148
+ await emit({
149
+ event_type: 'prompt',
150
+ content,
151
+ files_read: opts?.filesRead,
152
+ files_modified: opts?.filesModified,
153
+ concepts: opts?.concepts,
154
+ branch_name: opts?.branchName,
155
+ });
156
+ },
157
+ async observation(content, opts) {
158
+ await emit({
159
+ event_type: 'observation',
160
+ content,
161
+ files_read: opts?.filesRead,
162
+ files_modified: opts?.filesModified,
163
+ concepts: opts?.concepts,
164
+ branch_name: opts?.branchName,
165
+ });
166
+ },
167
+ async decision(content, opts) {
168
+ await emit({
169
+ event_type: 'decision',
170
+ content,
171
+ files_modified: opts?.filesModified,
172
+ concepts: opts?.concepts,
173
+ branch_name: opts?.branchName,
174
+ });
175
+ },
176
+ async attempt(content, opts) {
177
+ await emit({
178
+ event_type: 'attempt',
179
+ content,
180
+ files_modified: opts?.filesModified,
181
+ concepts: opts?.concepts,
182
+ branch_name: opts?.branchName,
183
+ });
184
+ },
185
+ async convention(content, opts) {
186
+ await emit({
187
+ event_type: 'convention',
188
+ content,
189
+ files_modified: opts?.filesModified,
190
+ concepts: opts?.concepts,
191
+ branch_name: opts?.branchName,
192
+ });
193
+ },
194
+ async branchEvent(content, opts) {
195
+ await emit({
196
+ event_type: 'branch_event',
197
+ content,
198
+ files_modified: opts?.filesModified,
199
+ concepts: opts?.concepts,
200
+ branch_name: opts?.branchName,
201
+ });
202
+ },
203
+ async sessionEnd(summary) {
204
+ await emit({
205
+ event_type: 'session_summary',
206
+ content: summary,
207
+ });
208
+ },
209
+ };
210
+ }
211
+ async function refreshCursorRules(args) {
212
+ const resume = await resolveResume(args.prompt, args);
213
+ writeCursorRules(args.cwd, {
214
+ projectName: basename(args.cwd) || 'Project',
215
+ resumeText: resume,
216
+ focusQuery: args.prompt,
217
+ apiUrl: args.config.api_url,
218
+ });
219
+ }
220
+ async function resolveResume(query, args) {
221
+ if (args.runResume) {
222
+ return args.runResume(query, {
223
+ config: args.config,
224
+ clientId: args.clientId,
225
+ });
226
+ }
227
+ return runResumeCommand(query, {
228
+ readConfig: () => args.config,
229
+ createClient: (config) => new MemoireClient({
230
+ apiUrl: config.api_url,
231
+ apiKey: config.api_key,
232
+ ...(args.clientId ? { clientId: args.clientId } : config.client_id ? { clientId: config.client_id } : {}),
233
+ }),
234
+ });
235
+ }
236
+ function writeCursorOutput(deps) {
237
+ (deps.writeStdout ?? process.stdout.write.bind(process.stdout))(JSON.stringify({ continue: true }));
238
+ }
239
+ function writeClaudeStandardOutput(deps) {
240
+ (deps.writeStdout ?? process.stdout.write.bind(process.stdout))(JSON.stringify({
241
+ continue: true,
242
+ suppressOutput: true,
243
+ }));
244
+ }
245
+ function writeClaudeContextOutput(resume, deps) {
246
+ (deps.writeStdout ?? process.stdout.write.bind(process.stdout))(JSON.stringify({
247
+ hookSpecificOutput: {
248
+ hookEventName: 'SessionStart',
249
+ additionalContext: resume,
250
+ },
251
+ }));
252
+ }
253
+ async function readStdin() {
254
+ const chunks = [];
255
+ for await (const chunk of process.stdin) {
256
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
257
+ }
258
+ return Buffer.concat(chunks).toString('utf8');
259
+ }
260
+ function parseJson(input) {
261
+ const trimmed = input.trim();
262
+ if (!trimmed) {
263
+ return {};
264
+ }
265
+ try {
266
+ const parsed = JSON.parse(trimmed);
267
+ return isRecord(parsed) ? parsed : {};
268
+ }
269
+ catch {
270
+ return {};
271
+ }
272
+ }
273
+ function inferWorkspaceRoot(payload, config) {
274
+ const workspaceRoots = Array.isArray(payload.workspace_roots) ? payload.workspace_roots : undefined;
275
+ const firstWorkspaceRoot = workspaceRoots?.find((value) => typeof value === 'string' && value.length > 0);
276
+ return asString(payload.cwd) ?? firstWorkspaceRoot ?? config.repo_root ?? process.cwd();
277
+ }
278
+ function inferSessionId(payload) {
279
+ return (asString(payload.session_id)
280
+ ?? asString(payload.sessionId)
281
+ ?? asString(payload.conversation_id)
282
+ ?? asString(payload.generation_id)
283
+ ?? asString(payload.id)
284
+ ?? `hook-${Date.now()}`);
285
+ }
286
+ function inferPrompt(payload) {
287
+ return [
288
+ asString(payload.prompt),
289
+ asString(payload.query),
290
+ asString(payload.input),
291
+ asString(payload.message),
292
+ asString(payload.user_prompt),
293
+ ].find((value) => value && value.trim().length > 0);
294
+ }
295
+ function inferStopSummary(payload, clientName) {
296
+ return (asString(payload.summary)
297
+ ?? asString(payload.text)
298
+ ?? asString(payload.assistant_message)
299
+ ?? asString(payload.last_assistant_message)
300
+ ?? (asString(payload.status) ? `Session ended on ${clientName} with status ${asString(payload.status)}` : undefined)
301
+ ?? `Session ended on ${clientName}`);
302
+ }
303
+ function buildToolContext(toolName, payload, branchName) {
304
+ const toolInput = parseUnknownJson(payload.tool_input) ?? {};
305
+ const toolResult = parseUnknownJson(payload.result_json) ?? parseUnknownJson(payload.tool_output) ?? {};
306
+ const error = asString(payload.error) ?? asString((isRecord(toolResult) ? toolResult.error : undefined));
307
+ const status = asString(payload.status) === 'error' || error ? 'error' : 'success';
308
+ return {
309
+ toolName,
310
+ branchName,
311
+ read: inferReadFiles(toolName, payload, toolInput),
312
+ modified: inferModifiedFiles(toolName, payload, toolInput),
313
+ status,
314
+ error: error ?? undefined,
315
+ concepts: inferConcepts(toolName, toolInput),
316
+ };
317
+ }
318
+ function buildMcpObservation(toolName, payload) {
319
+ const toolInput = stringifyValue(parseUnknownJson(payload.tool_input) ?? payload.tool_input);
320
+ const toolResult = stringifyValue(parseUnknownJson(payload.result_json) ?? payload.result_json);
321
+ return summarizeText(`MCP ${toolName} input: ${toolInput}. Result: ${toolResult}`, 800);
322
+ }
323
+ function buildClaudeObservation(toolName, payload) {
324
+ const toolInput = stringifyValue(parseUnknownJson(payload.tool_input) ?? payload.tool_input);
325
+ const toolOutput = stringifyValue(parseUnknownJson(payload.tool_output)
326
+ ?? parseUnknownJson(payload.tool_response)
327
+ ?? parseUnknownJson(payload.result_json)
328
+ ?? payload.tool_output
329
+ ?? payload.tool_response);
330
+ return summarizeText(`${toolName} input: ${toolInput}. Output: ${toolOutput}`, 800);
331
+ }
332
+ function buildShellObservation(payload) {
333
+ const command = asString(payload.command) ?? 'shell command';
334
+ const output = summarizeText(asString(payload.output) ?? '', 500);
335
+ return output ? `Shell command ${command}. Output: ${output}` : `Shell command ${command}.`;
336
+ }
337
+ function buildFileEditObservation(payload) {
338
+ const filePath = asString(payload.file_path) ?? 'unknown file';
339
+ const edits = Array.isArray(payload.edits) ? payload.edits.length : 0;
340
+ return edits > 0
341
+ ? `Edited ${filePath} with ${edits} change${edits === 1 ? '' : 's'}.`
342
+ : `Edited ${filePath}.`;
343
+ }
344
+ function inferReadFiles(toolName, payload, toolInput) {
345
+ const files = collectFiles(payload, toolInput);
346
+ if (files.length === 0) {
347
+ return undefined;
348
+ }
349
+ const normalized = toolName.toLowerCase();
350
+ if (/\b(read|grep|glob|search|list|cat|open)\b/.test(normalized)) {
351
+ return files;
352
+ }
353
+ return undefined;
354
+ }
355
+ function inferModifiedFiles(toolName, payload, toolInput) {
356
+ const files = collectFiles(payload, toolInput);
357
+ if (files.length === 0) {
358
+ return undefined;
359
+ }
360
+ const normalized = toolName.toLowerCase();
361
+ if (normalized === 'file_edit') {
362
+ return files;
363
+ }
364
+ if (/\b(edit|write|create|delete|rename|patch|apply)\b/.test(normalized)) {
365
+ return files;
366
+ }
367
+ return undefined;
368
+ }
369
+ function collectFiles(payload, toolInput) {
370
+ const candidates = new Set();
371
+ addMaybeFile(candidates, payload.file_path);
372
+ addMaybeFile(candidates, payload.filePath);
373
+ if (isRecord(toolInput)) {
374
+ addMaybeFile(candidates, toolInput.file_path);
375
+ addMaybeFile(candidates, toolInput.filePath);
376
+ addMaybeFile(candidates, toolInput.path);
377
+ addMaybeFile(candidates, toolInput.target_file);
378
+ addMaybeFile(candidates, toolInput.targetPath);
379
+ addMaybeFile(candidates, toolInput.output_path);
380
+ addMaybeFiles(candidates, toolInput.files);
381
+ addMaybeFiles(candidates, toolInput.paths);
382
+ }
383
+ return Array.from(candidates);
384
+ }
385
+ function inferConcepts(toolName, toolInput) {
386
+ const concepts = new Set();
387
+ concepts.add(toolName.toLowerCase());
388
+ if (isRecord(toolInput)) {
389
+ for (const [key, value] of Object.entries(toolInput)) {
390
+ if (typeof value === 'string' && value.length > 3) {
391
+ concepts.add(key.toLowerCase());
392
+ for (const token of value.toLowerCase().split(/[^a-z0-9_.-]+/)) {
393
+ if (token.length >= 4) {
394
+ concepts.add(token);
395
+ }
396
+ if (concepts.size >= 8) {
397
+ break;
398
+ }
399
+ }
400
+ }
401
+ if (concepts.size >= 8) {
402
+ break;
403
+ }
404
+ }
405
+ }
406
+ return concepts.size > 0 ? Array.from(concepts).slice(0, 8) : undefined;
407
+ }
408
+ function detectGitBranch(cwd) {
409
+ try {
410
+ const branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
411
+ cwd,
412
+ stdio: ['ignore', 'pipe', 'ignore'],
413
+ encoding: 'utf-8',
414
+ }).trim();
415
+ return branch && branch !== 'HEAD' ? branch : undefined;
416
+ }
417
+ catch {
418
+ return undefined;
419
+ }
420
+ }
421
+ function inferBranchName(payload) {
422
+ return asString(payload.branch_name) ?? asString(payload.branchName);
423
+ }
424
+ function parseUnknownJson(value) {
425
+ if (typeof value !== 'string') {
426
+ return value;
427
+ }
428
+ try {
429
+ return JSON.parse(value);
430
+ }
431
+ catch {
432
+ return value;
433
+ }
434
+ }
435
+ function isMemoireCommand(command) {
436
+ return /\bmemoire\b/.test(command);
437
+ }
438
+ function addMaybeFile(target, value) {
439
+ if (typeof value !== 'string') {
440
+ return;
441
+ }
442
+ const trimmed = value.trim();
443
+ if (trimmed) {
444
+ target.add(trimmed);
445
+ }
446
+ }
447
+ function addMaybeFiles(target, value) {
448
+ if (!Array.isArray(value)) {
449
+ return;
450
+ }
451
+ for (const entry of value) {
452
+ addMaybeFile(target, entry);
453
+ }
454
+ }
455
+ function summarizeText(value, maxLength) {
456
+ const normalized = value.replace(/\s+/g, ' ').trim();
457
+ if (normalized.length <= maxLength) {
458
+ return normalized;
459
+ }
460
+ return `${normalized.slice(0, maxLength - 1)}…`;
461
+ }
462
+ function stringifyValue(value) {
463
+ if (typeof value === 'string') {
464
+ return value;
465
+ }
466
+ try {
467
+ return JSON.stringify(value);
468
+ }
469
+ catch {
470
+ return String(value);
471
+ }
472
+ }
473
+ function asString(value) {
474
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
475
+ }
476
+ function isRecord(value) {
477
+ return typeof value === 'object' && value !== null;
478
+ }
479
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { install } from './configure.js';
2
+ export { detectClient } from './detect.js';
3
+ export { runSearchCommand, runStatusCommand, runUsageCommand, runDoctorCommand, runProfileCommand, runResumeCommand, runFactsCommand, runContextsListCommand, runContextsGetCommand, } from './commands.js';
4
+ export { runDashboardCommand } from './dashboard.js';
5
+ export { runMcpCommand } from './mcp.js';
6
+ export { runManualSetupCommand } from './manual.js';
7
+ export { runHookCommand, type HookCommandName } from './hooks.js';
8
+ export { runLoginCommand } from './login.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { install } from './configure.js';
2
+ export { detectClient } from './detect.js';
3
+ export { runSearchCommand, runStatusCommand, runUsageCommand, runDoctorCommand, runProfileCommand, runResumeCommand, runFactsCommand, runContextsListCommand, runContextsGetCommand, } from './commands.js';
4
+ export { runDashboardCommand } from './dashboard.js';
5
+ export { runMcpCommand } from './mcp.js';
6
+ export { runManualSetupCommand } from './manual.js';
7
+ export { runHookCommand } from './hooks.js';
8
+ export { runLoginCommand } from './login.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { MemoireConfig } from '@memoire/shared';
2
+ export interface LocalConfigOptions {
3
+ homeDir?: string;
4
+ configPath?: string;
5
+ }
6
+ export declare function getLocalConfigPath(opts?: LocalConfigOptions): string;
7
+ export declare function readLocalConfig(opts?: LocalConfigOptions): MemoireConfig;
8
+ //# sourceMappingURL=local-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-config.d.ts","sourceRoot":"","sources":["../src/local-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,kBAAuB,GAAG,MAAM,CAGxE;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,kBAAuB,GAAG,aAAa,CAO5E"}
@@ -0,0 +1,16 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ export function getLocalConfigPath(opts = {}) {
5
+ if (opts.configPath)
6
+ return opts.configPath;
7
+ return join(opts.homeDir ?? homedir(), '.memoire', 'config.json');
8
+ }
9
+ export function readLocalConfig(opts = {}) {
10
+ const configPath = getLocalConfigPath(opts);
11
+ if (!existsSync(configPath)) {
12
+ throw new Error(`Memoire config not found at ${configPath}. Run "memoire install" first.`);
13
+ }
14
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
15
+ }
16
+ //# sourceMappingURL=local-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-config.js","sourceRoot":"","sources":["../src/local-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,UAAU,kBAAkB,CAAC,OAA2B,EAAE;IAC9D,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA2B,EAAE;IAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,gCAAgC,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAkB,CAAC;AACxE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { install, type InstallOptions } from './configure.js';
2
+ import { detectClient } from './detect.js';
3
+ type SupportedClient = InstallOptions['client'];
4
+ export interface LoginOptions {
5
+ apiUrl: string;
6
+ client?: SupportedClient;
7
+ userName?: string;
8
+ userEmail?: string;
9
+ }
10
+ interface LoginDeps {
11
+ detectClient?: typeof detectClient;
12
+ fetchImpl?: typeof fetch;
13
+ openExternal?: (url: string) => boolean | Promise<boolean>;
14
+ sleep?: (ms: number) => Promise<void>;
15
+ installImpl?: typeof install;
16
+ logger?: Pick<typeof console, 'log' | 'error'>;
17
+ }
18
+ export declare function runLoginCommand(opts: LoginOptions, deps?: LoginDeps): Promise<void>;
19
+ export {};
20
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAmBhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;CAChD;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF7F"}