@memnexus-ai/cli 1.7.61 → 1.7.63

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 (60) hide show
  1. package/dist/commands/commit-context.d.ts +10 -0
  2. package/dist/commands/commit-context.d.ts.map +1 -0
  3. package/dist/commands/commit-context.js +356 -0
  4. package/dist/commands/commit-context.js.map +1 -0
  5. package/dist/commands/hook.d.ts +15 -0
  6. package/dist/commands/hook.d.ts.map +1 -0
  7. package/dist/commands/hook.js +201 -0
  8. package/dist/commands/hook.js.map +1 -0
  9. package/dist/commands/setup.d.ts.map +1 -1
  10. package/dist/commands/setup.js +42 -0
  11. package/dist/commands/setup.js.map +1 -1
  12. package/dist/index.js +4 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/agent-help.d.ts.map +1 -1
  15. package/dist/lib/agent-help.js +37 -0
  16. package/dist/lib/agent-help.js.map +1 -1
  17. package/dist/lib/commit-context/fact-enricher.d.ts +40 -0
  18. package/dist/lib/commit-context/fact-enricher.d.ts.map +1 -0
  19. package/dist/lib/commit-context/fact-enricher.js +46 -0
  20. package/dist/lib/commit-context/fact-enricher.js.map +1 -0
  21. package/dist/lib/commit-context/git-reader.d.ts +23 -0
  22. package/dist/lib/commit-context/git-reader.d.ts.map +1 -0
  23. package/dist/lib/commit-context/git-reader.js +108 -0
  24. package/dist/lib/commit-context/git-reader.js.map +1 -0
  25. package/dist/lib/commit-context/heuristic-summarizer.d.ts +18 -0
  26. package/dist/lib/commit-context/heuristic-summarizer.d.ts.map +1 -0
  27. package/dist/lib/commit-context/heuristic-summarizer.js +124 -0
  28. package/dist/lib/commit-context/heuristic-summarizer.js.map +1 -0
  29. package/dist/lib/commit-context/hook-installer.d.ts +18 -0
  30. package/dist/lib/commit-context/hook-installer.d.ts.map +1 -0
  31. package/dist/lib/commit-context/hook-installer.js +140 -0
  32. package/dist/lib/commit-context/hook-installer.js.map +1 -0
  33. package/dist/lib/commit-context/index.d.ts +15 -0
  34. package/dist/lib/commit-context/index.d.ts.map +1 -0
  35. package/dist/lib/commit-context/index.js +55 -0
  36. package/dist/lib/commit-context/index.js.map +1 -0
  37. package/dist/lib/commit-context/llm-summarizer.d.ts +9 -0
  38. package/dist/lib/commit-context/llm-summarizer.d.ts.map +1 -0
  39. package/dist/lib/commit-context/llm-summarizer.js +145 -0
  40. package/dist/lib/commit-context/llm-summarizer.js.map +1 -0
  41. package/dist/lib/commit-context/local-cache.d.ts +35 -0
  42. package/dist/lib/commit-context/local-cache.d.ts.map +1 -0
  43. package/dist/lib/commit-context/local-cache.js +161 -0
  44. package/dist/lib/commit-context/local-cache.js.map +1 -0
  45. package/dist/lib/commit-context/privacy-filter.d.ts +13 -0
  46. package/dist/lib/commit-context/privacy-filter.d.ts.map +1 -0
  47. package/dist/lib/commit-context/privacy-filter.js +46 -0
  48. package/dist/lib/commit-context/privacy-filter.js.map +1 -0
  49. package/dist/lib/commit-context/session-reader.d.ts +36 -0
  50. package/dist/lib/commit-context/session-reader.d.ts.map +1 -0
  51. package/dist/lib/commit-context/session-reader.js +277 -0
  52. package/dist/lib/commit-context/session-reader.js.map +1 -0
  53. package/dist/lib/commit-context/types.d.ts +62 -0
  54. package/dist/lib/commit-context/types.d.ts.map +1 -0
  55. package/dist/lib/commit-context/types.js +6 -0
  56. package/dist/lib/commit-context/types.js.map +1 -0
  57. package/dist/lib/setup/rules-templates.d.ts.map +1 -1
  58. package/dist/lib/setup/rules-templates.js +2 -0
  59. package/dist/lib/setup/rules-templates.js.map +1 -1
  60. package/package.json +2 -1
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Commit Context Commands — list, show, and sync commit context entries.
3
+ *
4
+ * `mx commit-context list` — list recent commit contexts (API or local cache)
5
+ * `mx commit-context show <sha>` — show full details for a specific commit
6
+ * `mx commit-context sync` — upload unsynced local cache entries to the API
7
+ */
8
+ import { Command } from 'commander';
9
+ export declare function registerCommitContextCommands(program: Command): void;
10
+ //# sourceMappingURL=commit-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-context.d.ts","sourceRoot":"","sources":["../../src/commands/commit-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiDpE"}
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerCommitContextCommands = registerCommitContextCommands;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const config_1 = require("../lib/config");
42
+ const errors_1 = require("../lib/errors");
43
+ const formatters_1 = require("../lib/formatters");
44
+ const spinner_1 = require("../lib/spinner");
45
+ const commit_context_1 = require("../lib/commit-context");
46
+ const fact_enricher_1 = require("../lib/commit-context/fact-enricher");
47
+ function registerCommitContextCommands(program) {
48
+ const commitContext = program
49
+ .command('commit-context')
50
+ .description('View captured commit context entries');
51
+ commitContext
52
+ .command('list')
53
+ .description('List recent commit contexts')
54
+ .option('--local', 'Read from local cache only (no API)')
55
+ .option('--recent <period>', 'Time filter (e.g. 24h, 7d)', '7d')
56
+ .option('--limit <n>', 'Max results', '10')
57
+ .option('--branch <name>', 'Filter by branch name')
58
+ .option('--agent <name>', 'Filter by agent name (e.g. claude-code)')
59
+ .option('--format <format>', 'Output format')
60
+ .action(async (options) => {
61
+ try {
62
+ await handleList(options);
63
+ }
64
+ catch (error) {
65
+ (0, errors_1.handleError)(error);
66
+ }
67
+ });
68
+ commitContext
69
+ .command('show <sha>')
70
+ .description('Show full commit context for a specific commit')
71
+ .option('--local', 'Read from local cache only')
72
+ .option('--format <format>', 'Output format')
73
+ .action(async (sha, options) => {
74
+ try {
75
+ await handleShow(sha, options);
76
+ }
77
+ catch (error) {
78
+ (0, errors_1.handleError)(error);
79
+ }
80
+ });
81
+ commitContext
82
+ .command('sync')
83
+ .description('Upload unsynced local cache entries to the API')
84
+ .option('--limit <n>', 'Max entries to sync', '50')
85
+ .option('--dry-run', 'Show what would be synced without syncing')
86
+ .option('--no-enrich-facts', 'Skip fact enrichment after sync')
87
+ .option('--format <format>', 'Output format')
88
+ .action(async (options) => {
89
+ try {
90
+ await handleSync(options);
91
+ }
92
+ catch (error) {
93
+ (0, errors_1.handleError)(error);
94
+ }
95
+ });
96
+ }
97
+ async function handleList(options) {
98
+ const format = (options.format || config_1.config.getEffectiveFormat());
99
+ const limit = parseInt(options.limit || '10', 10);
100
+ if (options.local) {
101
+ // Local cache mode
102
+ const projectRoot = (0, commit_context_1.findProjectRoot)() || process.cwd();
103
+ let entries = (0, commit_context_1.listCache)(projectRoot, { limit: limit * 2 }); // overfetch for filtering
104
+ // Apply branch filter
105
+ if (options.branch) {
106
+ entries = entries.filter((e) => e.branch === options.branch);
107
+ }
108
+ // Apply agent filter
109
+ if (options.agent) {
110
+ entries = entries.filter((e) => e.agent === options.agent);
111
+ }
112
+ // Apply limit after filtering
113
+ entries = entries.slice(0, limit);
114
+ if (entries.length === 0) {
115
+ console.log(chalk_1.default.yellow('No local commit context entries found.'));
116
+ console.log(chalk_1.default.gray('Commit contexts are cached at .mx/commit-context/'));
117
+ return;
118
+ }
119
+ const formatted = entries.map((e) => ({
120
+ sha: e.shortSha,
121
+ branch: e.branch,
122
+ agent: e.agent,
123
+ timestamp: e.timestamp,
124
+ synced: e.synced ? 'yes' : 'no',
125
+ preview: e.content
126
+ .split('\n')[0]
127
+ ?.replace(/^#+\s*/, '')
128
+ .slice(0, 80) || '',
129
+ }));
130
+ (0, formatters_1.printOutput)(formatted, format, {
131
+ columns: ['sha', 'branch', 'agent', 'timestamp', 'synced', 'preview'],
132
+ });
133
+ return;
134
+ }
135
+ // API mode
136
+ const spinner = (0, spinner_1.createSpinner)('Fetching commit contexts...', format).start();
137
+ try {
138
+ const { getSdk } = await Promise.resolve().then(() => __importStar(require('../lib/api-client')));
139
+ const sdk = getSdk();
140
+ // Build query with optional filters
141
+ const queryParts = [];
142
+ if (options.branch)
143
+ queryParts.push(`branch:${options.branch}`);
144
+ if (options.agent)
145
+ queryParts.push(`agent:${options.agent}`);
146
+ const q = queryParts.length > 0 ? queryParts.join(' ') : 'commit-context';
147
+ const response = await sdk.memories.searchMemoriesGet({
148
+ q,
149
+ topics: 'commit-context',
150
+ limit,
151
+ sortBy: 'createdAt',
152
+ order: 'desc',
153
+ });
154
+ spinner.succeed('Done');
155
+ const memories = response?.data || [];
156
+ if (memories.length === 0) {
157
+ console.log(chalk_1.default.yellow('No commit context entries found.'));
158
+ console.log(chalk_1.default.gray('Run a commit with the post-commit hook installed to capture context.'));
159
+ return;
160
+ }
161
+ const formatted = memories.map((m) => {
162
+ const ctx = parseContextField(m.context);
163
+ return {
164
+ id: m.id?.slice(0, 8) || '',
165
+ sha: ctx.sha || '',
166
+ branch: ctx.branch || '',
167
+ agent: ctx.agent || '',
168
+ timestamp: m.createdAt || '',
169
+ preview: m.content
170
+ ?.split('\n')[0]
171
+ ?.replace(/^#+\s*/, '')
172
+ .slice(0, 80) || '',
173
+ };
174
+ });
175
+ (0, formatters_1.printOutput)(formatted, format, {
176
+ columns: ['id', 'sha', 'branch', 'agent', 'timestamp', 'preview'],
177
+ });
178
+ }
179
+ catch (error) {
180
+ spinner.fail('Failed to fetch commit contexts');
181
+ throw error;
182
+ }
183
+ }
184
+ async function handleShow(sha, options) {
185
+ const format = (options.format || config_1.config.getEffectiveFormat());
186
+ if (options.local) {
187
+ // Local cache mode
188
+ const projectRoot = (0, commit_context_1.findProjectRoot)() || process.cwd();
189
+ const entry = (0, commit_context_1.readCache)(projectRoot, sha);
190
+ if (!entry) {
191
+ console.log(chalk_1.default.yellow(`No local cache entry found for SHA: ${sha}`));
192
+ return;
193
+ }
194
+ if (format === 'json') {
195
+ (0, formatters_1.printOutput)(entry, format);
196
+ }
197
+ else {
198
+ console.log(entry.content);
199
+ }
200
+ return;
201
+ }
202
+ // API mode
203
+ const spinner = (0, spinner_1.createSpinner)('Fetching commit context...', format).start();
204
+ try {
205
+ const { getSdk } = await Promise.resolve().then(() => __importStar(require('../lib/api-client')));
206
+ const sdk = getSdk();
207
+ const response = await sdk.memories.searchMemoriesGet({
208
+ q: `commit:${sha}`,
209
+ topics: 'commit-context',
210
+ limit: 1,
211
+ });
212
+ spinner.succeed('Done');
213
+ const memories = response?.data || [];
214
+ if (memories.length === 0) {
215
+ console.log(chalk_1.default.yellow(`No commit context found for SHA: ${sha}`));
216
+ console.log(chalk_1.default.gray('Try --local to check the local cache, or use a longer SHA prefix.'));
217
+ return;
218
+ }
219
+ const memory = memories[0];
220
+ if (format === 'json') {
221
+ (0, formatters_1.printOutput)(memory, format);
222
+ }
223
+ else {
224
+ console.log(memory.content || '');
225
+ }
226
+ }
227
+ catch (error) {
228
+ spinner.fail('Failed to fetch commit context');
229
+ throw error;
230
+ }
231
+ }
232
+ async function handleSync(options) {
233
+ const format = (options.format || config_1.config.getEffectiveFormat());
234
+ const limit = parseInt(options.limit || '50', 10);
235
+ const dryRun = options.dryRun || false;
236
+ const shouldEnrichFacts = options.enrichFacts !== false;
237
+ const projectRoot = (0, commit_context_1.findProjectRoot)() || process.cwd();
238
+ const unsynced = (0, commit_context_1.listCache)(projectRoot, { unsynced: true, limit });
239
+ if (unsynced.length === 0) {
240
+ console.log(chalk_1.default.green('All entries are synced. Nothing to do.'));
241
+ return;
242
+ }
243
+ if (dryRun) {
244
+ console.log(chalk_1.default.cyan(`Found ${unsynced.length} unsynced entries:`));
245
+ for (const entry of unsynced) {
246
+ console.log(` ${entry.shortSha} (${entry.branch}) — ${entry.timestamp}`);
247
+ }
248
+ console.log(chalk_1.default.gray('\nRun without --dry-run to sync these entries.'));
249
+ return;
250
+ }
251
+ if (!config_1.config.hasApiKey()) {
252
+ console.log(chalk_1.default.red('No API key configured. Run `mx auth login` first.'));
253
+ return;
254
+ }
255
+ const spinner = (0, spinner_1.createSpinner)(`Syncing ${unsynced.length} entries...`, format).start();
256
+ try {
257
+ const { getSdk } = await Promise.resolve().then(() => __importStar(require('../lib/api-client')));
258
+ const sdk = getSdk();
259
+ let synced = 0;
260
+ let failed = 0;
261
+ for (const entry of unsynced) {
262
+ try {
263
+ // Parse context field from content (extract from first lines)
264
+ const contextField = buildContextFieldFromCache(entry);
265
+ const topics = ['commit-context', `branch:${entry.branch}`];
266
+ const response = await sdk.memories.createMemory({
267
+ content: entry.content,
268
+ context: contextField,
269
+ topics,
270
+ conversationId: 'NEW',
271
+ });
272
+ const memoryId = response?.data?.id || response?.id;
273
+ if (memoryId) {
274
+ (0, commit_context_1.markSynced)(projectRoot, entry.shortSha, memoryId);
275
+ // Enrich with facts if enabled
276
+ if (shouldEnrichFacts) {
277
+ try {
278
+ // Reconstruct minimal git context for fact enrichment
279
+ const git = {
280
+ sha: entry.sha,
281
+ shortSha: entry.shortSha,
282
+ branch: entry.branch,
283
+ message: extractMessageFromContent(entry.content),
284
+ author: 'unknown', // Not stored in cache
285
+ timestamp: entry.timestamp,
286
+ filesChanged: extractFilesFromContent(entry.content),
287
+ insertions: 0,
288
+ deletions: 0,
289
+ isMergeCommit: false,
290
+ };
291
+ await (0, fact_enricher_1.enrichCommitFacts)(sdk, memoryId, git);
292
+ }
293
+ catch {
294
+ // Non-critical
295
+ }
296
+ }
297
+ }
298
+ synced++;
299
+ }
300
+ catch (error) {
301
+ (0, commit_context_1.markSyncError)(projectRoot, entry.shortSha, error?.message || 'Unknown error');
302
+ failed++;
303
+ }
304
+ }
305
+ spinner.succeed(`Synced ${synced} entries${failed > 0 ? `, ${failed} failed` : ''}`);
306
+ if (format === 'json') {
307
+ (0, formatters_1.printOutput)({ synced, failed, total: unsynced.length }, format);
308
+ }
309
+ }
310
+ catch (error) {
311
+ spinner.fail('Sync failed');
312
+ throw error;
313
+ }
314
+ }
315
+ /** Parse the context field format: "commit:<sha> branch:<branch> agent:<agent>" */
316
+ function parseContextField(context) {
317
+ if (!context)
318
+ return {};
319
+ const shaMatch = context.match(/commit:(\S+)/);
320
+ const branchMatch = context.match(/branch:(\S+)/);
321
+ const agentMatch = context.match(/agent:(\S+)/);
322
+ return {
323
+ sha: shaMatch?.[1],
324
+ branch: branchMatch?.[1],
325
+ agent: agentMatch?.[1],
326
+ };
327
+ }
328
+ /** Build context field from cache entry */
329
+ function buildContextFieldFromCache(entry) {
330
+ return `commit:${entry.shortSha} branch:${entry.branch} agent:${entry.agent}`.slice(0, 200);
331
+ }
332
+ /** Extract commit message from content header line */
333
+ function extractMessageFromContent(content) {
334
+ const match = content.match(/^## CommitContext:\s*(.+?)\s*\(/m);
335
+ return match?.[1] || '';
336
+ }
337
+ /** Extract file paths from content bullet points */
338
+ function extractFilesFromContent(content) {
339
+ const files = [];
340
+ const lines = content.split('\n');
341
+ let inFileSection = false;
342
+ for (const line of lines) {
343
+ if (line.startsWith('**Files changed**')) {
344
+ inFileSection = true;
345
+ continue;
346
+ }
347
+ if (inFileSection && line.startsWith('- ')) {
348
+ files.push(line.slice(2).trim());
349
+ }
350
+ else if (inFileSection && !line.startsWith('- ')) {
351
+ break;
352
+ }
353
+ }
354
+ return files;
355
+ }
356
+ //# sourceMappingURL=commit-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-context.js","sourceRoot":"","sources":["../../src/commands/commit-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Hook Commands — git hook handlers for CommitContext capture.
3
+ *
4
+ * `mx hook post-commit` is called by the post-commit git hook.
5
+ * It reads git + session context, builds a structured memory, caches locally,
6
+ * and syncs to the MemNexus API.
7
+ *
8
+ * Phase 2 additions: LLM distillation, privacy filtering, diff content,
9
+ * transcript excerpts, session memories, fact enrichment.
10
+ *
11
+ * Always exits 0 — never blocks commits.
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare function registerHookCommands(program: Command): void;
15
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB3D"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerHookCommands = registerHookCommands;
37
+ const config_1 = require("../lib/config");
38
+ const commit_context_1 = require("../lib/commit-context");
39
+ const llm_summarizer_1 = require("../lib/commit-context/llm-summarizer");
40
+ const fact_enricher_1 = require("../lib/commit-context/fact-enricher");
41
+ const privacy_filter_1 = require("../lib/commit-context/privacy-filter");
42
+ const date_utils_1 = require("../lib/date-utils");
43
+ function registerHookCommands(program) {
44
+ const hook = program.command('hook').description('Git hook handlers');
45
+ hook
46
+ .command('post-commit')
47
+ .description('Capture commit context (called by post-commit hook)')
48
+ .option('--cwd <dir>', 'Working directory', process.cwd())
49
+ .option('--dry-run', 'Print output without saving')
50
+ .option('--no-sync', 'Skip API sync (cache only)')
51
+ .option('--summarizer <type>', 'Summarizer: llm (default) or heuristic', 'llm')
52
+ .option('--no-enrich-facts', 'Skip fact enrichment after sync')
53
+ .action(async (options) => {
54
+ try {
55
+ await handlePostCommit(options);
56
+ }
57
+ catch {
58
+ // Always exit 0 — never block commits
59
+ process.exit(0);
60
+ }
61
+ });
62
+ }
63
+ async function handlePostCommit(options) {
64
+ const cwd = options.cwd;
65
+ const dryRun = options.dryRun || false;
66
+ const shouldSync = options.sync !== false; // default true
67
+ const summarizer = options.summarizer || 'llm';
68
+ const shouldEnrichFacts = options.enrichFacts !== false; // default true
69
+ // 1. Read git context
70
+ const git = (0, commit_context_1.readGitContext)(cwd);
71
+ // 2. Check if trivial
72
+ const { trivial, reason } = (0, commit_context_1.isTrivialCommit)(git);
73
+ if (trivial) {
74
+ if (dryRun) {
75
+ console.log(`[CommitContext] Skipped: ${reason} (${git.shortSha})`);
76
+ }
77
+ return;
78
+ }
79
+ // 3. Detect AI agent
80
+ const agentInfo = config_1.config.detectAIAgent();
81
+ // 4. Read session context if Claude Code
82
+ let session;
83
+ if (agentInfo.agent === 'claude-code') {
84
+ session = (0, commit_context_1.readSessionContext)(cwd);
85
+ }
86
+ // 5. Read diff content (new in Phase 2)
87
+ const diffContent = (0, commit_context_1.readDiffContent)(cwd);
88
+ // 6. Read transcript excerpt (new in Phase 2)
89
+ let transcriptExcerpt = '';
90
+ if (agentInfo.agent === 'claude-code') {
91
+ const projectDir = (0, commit_context_1.findClaudeProjectDir)(cwd);
92
+ if (projectDir) {
93
+ const sessionFile = (0, commit_context_1.findLatestSession)(projectDir);
94
+ if (sessionFile) {
95
+ transcriptExcerpt = (0, commit_context_1.getTranscriptExcerpt)(sessionFile);
96
+ }
97
+ }
98
+ }
99
+ // 7. Fetch recent session memories (new in Phase 2)
100
+ let sessionMemories = '';
101
+ if (shouldSync && config_1.config.hasApiKey()) {
102
+ try {
103
+ const { getSdk } = await Promise.resolve().then(() => __importStar(require('../lib/api-client')));
104
+ const sdk = getSdk();
105
+ const eventTimeFrom = (0, date_utils_1.getRecentTimestamp)('1h') || undefined;
106
+ const response = await sdk.memories.searchMemoriesGet({
107
+ limit: 5,
108
+ sortBy: 'createdAt',
109
+ order: 'desc',
110
+ eventTimeFrom,
111
+ });
112
+ const memories = response?.data || [];
113
+ if (memories.length > 0) {
114
+ sessionMemories = memories
115
+ .map((m) => (0, privacy_filter_1.sanitize)(m.content || '').slice(0, 500))
116
+ .join('\n---\n');
117
+ }
118
+ }
119
+ catch {
120
+ // Non-critical — continue without session memories
121
+ }
122
+ }
123
+ // 8. Summarize — LLM (default) or heuristic
124
+ let data;
125
+ if (summarizer === 'llm') {
126
+ // LLM summarizer — fails with clear error if no ANTHROPIC_API_KEY
127
+ data = await (0, llm_summarizer_1.summarizeWithLLM)(git, session, diffContent, transcriptExcerpt, sessionMemories);
128
+ }
129
+ else {
130
+ // Heuristic summarizer — no API key needed
131
+ data = (0, commit_context_1.summarizeCommit)(git, session);
132
+ }
133
+ if (data.skipped) {
134
+ if (dryRun) {
135
+ console.log(`[CommitContext] Skipped: ${data.skipReason} (${git.shortSha})`);
136
+ }
137
+ return;
138
+ }
139
+ // 9. Dry run — just print
140
+ if (dryRun) {
141
+ console.log('[CommitContext] Dry run output:\n');
142
+ console.log(data.content);
143
+ console.log(`\nContext: ${data.contextField}`);
144
+ console.log(`Topics: ${data.topics.join(', ')}`);
145
+ console.log(`Summarizer: ${summarizer}`);
146
+ return;
147
+ }
148
+ // 10. Write to local cache
149
+ const projectRoot = (0, commit_context_1.findProjectRoot)(cwd) || cwd;
150
+ const cacheEntry = {
151
+ sha: git.sha,
152
+ shortSha: git.shortSha,
153
+ branch: git.branch,
154
+ agent: session?.agent || 'unknown',
155
+ timestamp: git.timestamp,
156
+ content: data.content,
157
+ synced: false,
158
+ };
159
+ (0, commit_context_1.writeCache)(projectRoot, cacheEntry);
160
+ // 11. Sync to API
161
+ if (shouldSync && config_1.config.hasApiKey()) {
162
+ try {
163
+ const { getSdk } = await Promise.resolve().then(() => __importStar(require('../lib/api-client')));
164
+ const sdk = getSdk();
165
+ const response = await sdk.memories.createMemory({
166
+ content: data.content,
167
+ context: data.contextField,
168
+ topics: data.topics,
169
+ conversationId: 'NEW',
170
+ });
171
+ // Extract memory ID from response
172
+ const memoryId = response?.data?.id || response?.id;
173
+ if (memoryId) {
174
+ (0, commit_context_1.markSynced)(projectRoot, git.shortSha, memoryId);
175
+ // 12. Enrich with facts (new in Phase 2)
176
+ if (shouldEnrichFacts) {
177
+ try {
178
+ const result = await (0, fact_enricher_1.enrichCommitFacts)(sdk, memoryId, git);
179
+ if (result.failed > 0) {
180
+ console.log(`[CommitContext] ${git.shortSha} facts: ${result.created} created, ${result.failed} failed`);
181
+ }
182
+ }
183
+ catch {
184
+ // Non-critical — facts are supplementary
185
+ }
186
+ }
187
+ }
188
+ console.log(`[CommitContext] ${git.shortSha} captured and synced`);
189
+ }
190
+ catch (error) {
191
+ const errorMsg = error?.message || 'Unknown error';
192
+ (0, commit_context_1.markSyncError)(projectRoot, git.shortSha, errorMsg);
193
+ // Silent — don't block commits
194
+ console.log(`[CommitContext] ${git.shortSha} cached (sync failed: ${errorMsg})`);
195
+ }
196
+ }
197
+ else {
198
+ console.log(`[CommitContext] ${git.shortSha} cached locally`);
199
+ }
200
+ }
201
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,oDAmBC;AAxCD,0CAAuC;AACvC,0DAa+B;AAC/B,yEAAwE;AACxE,uEAAwE;AACxE,yEAAgE;AAChE,kDAAuD;AAGvD,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAEtE,IAAI;SACD,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,WAAW,EAAE,4BAA4B,CAAC;SACjD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,EAAE,KAAK,CAAC;SAC9E,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAM/B;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,eAAe;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAC/C,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,eAAe;IAExE,sBAAsB;IACtB,MAAM,GAAG,GAAG,IAAA,+BAAc,EAAC,GAAG,CAAC,CAAC;IAEhC,sBAAsB;IACtB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAe,EAAC,GAAG,CAAC,CAAC;IACjD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtE,CAAC;QACD,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,eAAM,CAAC,aAAa,EAAE,CAAC;IAEzC,yCAAyC;IACzC,IAAI,OAAO,CAAC;IACZ,IAAI,SAAS,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,GAAG,IAAA,mCAAkB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAA,gCAAe,EAAC,GAAG,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,SAAS,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAA,qCAAoB,EAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,IAAA,kCAAiB,EAAC,UAAU,CAAC,CAAC;YAClD,IAAI,WAAW,EAAE,CAAC;gBAChB,iBAAiB,GAAG,IAAA,qCAAoB,EAAC,WAAW,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,UAAU,IAAI,eAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,IAAA,+BAAkB,EAAC,IAAI,CAAC,IAAI,SAAS,CAAC;YAC5D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACpD,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,MAAM;gBACb,aAAa;aACd,CAAC,CAAC;YACH,MAAM,QAAQ,GAAI,QAAgB,EAAE,IAAI,IAAI,EAAE,CAAC;YAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,eAAe,GAAG,QAAQ;qBACvB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAA,yBAAQ,EAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBACxD,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,IAAuB,CAAC;IAE5B,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,kEAAkE;QAClE,IAAI,GAAG,MAAM,IAAA,iCAAgB,EAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC/F,CAAC;SAAM,CAAC;QACN,2CAA2C;QAC3C,IAAI,GAAG,IAAA,gCAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAA,gCAAe,EAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IAChD,MAAM,UAAU,GAAe;QAC7B,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,KAAK;KACd,CAAC;IACF,IAAA,2BAAU,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEpC,kBAAkB;IAClB,IAAI,UAAU,IAAI,eAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;YACrD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC/C,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,YAAY;gBAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,cAAc,EAAE,KAAK;aACtB,CAAC,CAAC;YAEH,kCAAkC;YAClC,MAAM,QAAQ,GAAI,QAAgB,EAAE,IAAI,EAAE,EAAE,IAAK,QAAgB,EAAE,EAAE,CAAC;YACtE,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAA,2BAAU,EAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAEhD,yCAAyC;gBACzC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAiB,EAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;wBAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,OAAO,CAAC,GAAG,CACT,mBAAmB,GAAG,CAAC,QAAQ,WAAW,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,MAAM,SAAS,CAC5F,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,yCAAyC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,QAAQ,sBAAsB,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACnD,IAAA,8BAAa,EAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACnD,+BAA+B;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,QAAQ,yBAAyB,QAAQ,GAAG,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,QAAQ,iBAAiB,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}