@kodus/cli 0.3.0 → 0.4.2

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 (111) hide show
  1. package/dist/agents/agent.interface.d.ts +41 -0
  2. package/dist/agents/agent.interface.d.ts.map +1 -0
  3. package/dist/agents/agent.interface.js +2 -0
  4. package/dist/agents/agent.interface.js.map +1 -0
  5. package/dist/agents/claude-code.agent.d.ts +14 -0
  6. package/dist/agents/claude-code.agent.d.ts.map +1 -0
  7. package/dist/agents/claude-code.agent.js +79 -0
  8. package/dist/agents/claude-code.agent.js.map +1 -0
  9. package/dist/commands/memory/capture.d.ts.map +1 -1
  10. package/dist/commands/memory/capture.js +16 -46
  11. package/dist/commands/memory/capture.js.map +1 -1
  12. package/dist/commands/memory/disable.d.ts.map +1 -1
  13. package/dist/commands/memory/disable.js +7 -5
  14. package/dist/commands/memory/disable.js.map +1 -1
  15. package/dist/commands/memory/enable.d.ts +0 -1
  16. package/dist/commands/memory/enable.d.ts.map +1 -1
  17. package/dist/commands/memory/enable.js +14 -42
  18. package/dist/commands/memory/enable.js.map +1 -1
  19. package/dist/commands/memory/hooks.d.ts +0 -15
  20. package/dist/commands/memory/hooks.d.ts.map +1 -1
  21. package/dist/commands/memory/hooks.js +0 -92
  22. package/dist/commands/memory/hooks.js.map +1 -1
  23. package/dist/commands/memory/index.d.ts.map +1 -1
  24. package/dist/commands/memory/index.js +6 -23
  25. package/dist/commands/memory/index.js.map +1 -1
  26. package/dist/commands/memory/session-hooks/claude-code.d.ts +2 -0
  27. package/dist/commands/memory/session-hooks/claude-code.d.ts.map +1 -0
  28. package/dist/commands/memory/session-hooks/claude-code.js +21 -0
  29. package/dist/commands/memory/session-hooks/claude-code.js.map +1 -0
  30. package/dist/commands/memory/session-hooks/cursor.d.ts +2 -0
  31. package/dist/commands/memory/session-hooks/cursor.d.ts.map +1 -0
  32. package/dist/commands/memory/session-hooks/cursor.js +25 -0
  33. package/dist/commands/memory/session-hooks/cursor.js.map +1 -0
  34. package/dist/commands/memory/session-hooks/index.d.ts +3 -0
  35. package/dist/commands/memory/session-hooks/index.d.ts.map +1 -0
  36. package/dist/commands/memory/session-hooks/index.js +16 -0
  37. package/dist/commands/memory/session-hooks/index.js.map +1 -0
  38. package/dist/commands/memory/session-hooks/shared.d.ts +7 -0
  39. package/dist/commands/memory/session-hooks/shared.d.ts.map +1 -0
  40. package/dist/commands/memory/session-hooks/shared.js +76 -0
  41. package/dist/commands/memory/session-hooks/shared.js.map +1 -0
  42. package/dist/commands/memory/session-hooks-install.d.ts +9 -0
  43. package/dist/commands/memory/session-hooks-install.d.ts.map +1 -0
  44. package/dist/commands/memory/session-hooks-install.js +139 -0
  45. package/dist/commands/memory/session-hooks-install.js.map +1 -0
  46. package/dist/commands/status.d.ts.map +1 -1
  47. package/dist/commands/status.js +0 -10
  48. package/dist/commands/status.js.map +1 -1
  49. package/dist/services/api/api.interface.d.ts +5 -0
  50. package/dist/services/api/api.interface.d.ts.map +1 -1
  51. package/dist/services/api/api.real.d.ts +3 -1
  52. package/dist/services/api/api.real.d.ts.map +1 -1
  53. package/dist/services/api/api.real.js +3 -1
  54. package/dist/services/api/api.real.js.map +1 -1
  55. package/dist/services/api/index.d.ts +1 -1
  56. package/dist/services/api/index.d.ts.map +1 -1
  57. package/dist/services/api/sessions.api.d.ts +6 -0
  58. package/dist/services/api/sessions.api.d.ts.map +1 -0
  59. package/dist/services/api/sessions.api.js +119 -0
  60. package/dist/services/api/sessions.api.js.map +1 -0
  61. package/dist/services/git-hooks.service.d.ts +20 -0
  62. package/dist/services/git-hooks.service.d.ts.map +1 -0
  63. package/dist/services/git-hooks.service.js +118 -0
  64. package/dist/services/git-hooks.service.js.map +1 -0
  65. package/dist/services/hook-logger.service.d.ts +18 -0
  66. package/dist/services/hook-logger.service.d.ts.map +1 -0
  67. package/dist/services/hook-logger.service.js +47 -0
  68. package/dist/services/hook-logger.service.js.map +1 -0
  69. package/dist/services/lifecycle.service.d.ts +13 -0
  70. package/dist/services/lifecycle.service.d.ts.map +1 -0
  71. package/dist/services/lifecycle.service.js +257 -0
  72. package/dist/services/lifecycle.service.js.map +1 -0
  73. package/dist/services/session-local.service.d.ts +9 -0
  74. package/dist/services/session-local.service.d.ts.map +1 -0
  75. package/dist/services/session-local.service.js +33 -0
  76. package/dist/services/session-local.service.js.map +1 -0
  77. package/dist/services/transcript.service.d.ts +33 -0
  78. package/dist/services/transcript.service.d.ts.map +1 -0
  79. package/dist/services/transcript.service.js +233 -0
  80. package/dist/services/transcript.service.js.map +1 -0
  81. package/dist/types/memory.d.ts +0 -46
  82. package/dist/types/memory.d.ts.map +1 -1
  83. package/dist/types/session-events.d.ts +47 -0
  84. package/dist/types/session-events.d.ts.map +1 -0
  85. package/dist/types/session-events.js +2 -0
  86. package/dist/types/session-events.js.map +1 -0
  87. package/dist/types/session.d.ts +148 -0
  88. package/dist/types/session.d.ts.map +1 -0
  89. package/dist/types/session.js +5 -0
  90. package/dist/types/session.js.map +1 -0
  91. package/package.json +1 -1
  92. package/dist/commands/memory/promote.d.ts +0 -7
  93. package/dist/commands/memory/promote.d.ts.map +0 -1
  94. package/dist/commands/memory/promote.js +0 -42
  95. package/dist/commands/memory/promote.js.map +0 -1
  96. package/dist/commands/memory/show.d.ts +0 -2
  97. package/dist/commands/memory/show.d.ts.map +0 -1
  98. package/dist/commands/memory/show.js +0 -45
  99. package/dist/commands/memory/show.js.map +0 -1
  100. package/dist/commands/memory/status.d.ts +0 -2
  101. package/dist/commands/memory/status.d.ts.map +0 -1
  102. package/dist/commands/memory/status.js +0 -56
  103. package/dist/commands/memory/status.js.map +0 -1
  104. package/dist/services/memory.service.d.ts +0 -49
  105. package/dist/services/memory.service.d.ts.map +0 -1
  106. package/dist/services/memory.service.js +0 -508
  107. package/dist/services/memory.service.js.map +0 -1
  108. package/dist/utils/module-matcher.d.ts +0 -6
  109. package/dist/utils/module-matcher.d.ts.map +0 -1
  110. package/dist/utils/module-matcher.js +0 -99
  111. package/dist/utils/module-matcher.js.map +0 -1
@@ -1,508 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { loadConfig, matchFiles } from '../utils/module-matcher.js';
4
- const MAX_JSON_CHARS = 4000;
5
- const DECISION_KEYWORDS = [
6
- {
7
- pattern: /\b(?:decided to|decision to|chose to|choosing)\b/i,
8
- type: 'architectural_decision',
9
- },
10
- {
11
- pattern: /\b(?:business rule|business requirement|stakeholder)\b/i,
12
- type: 'business_rule',
13
- },
14
- {
15
- pattern: /\b(?:tradeoff|trade-off|trade off|compromise|at the cost of)\b/i,
16
- type: 'tradeoff',
17
- },
18
- {
19
- pattern: /\b(?:defer|deferred|postpone|later|TODO|tech debt|revisit)\b/i,
20
- type: 'deferral',
21
- },
22
- {
23
- pattern: /\b(?:task|todo|need to|should also|follow[- ]up)\b/i,
24
- type: 'task',
25
- },
26
- {
27
- pattern: /\b(?:convention|standard|always use|never use|prefer|pattern)\b/i,
28
- type: 'convention',
29
- },
30
- ];
31
- class MemoryService {
32
- // ─── Legacy per-SHA support ───────────────────────────────────────
33
- /** @deprecated Use saveBranchCapture instead */
34
- async saveCapture(input) {
35
- const filePath = this.getLegacyMemoryFilePath(input.repoRoot, input.headSha);
36
- const dirPath = path.dirname(filePath);
37
- await fs.mkdir(dirPath, { recursive: true });
38
- const fileExists = await this.exists(filePath);
39
- if (!fileExists) {
40
- const header = [
41
- '# Kody Decision Memory',
42
- '',
43
- 'Staging memory captured from agent hooks for this HEAD sha.',
44
- '',
45
- ].join('\n');
46
- await fs.writeFile(filePath, header, 'utf-8');
47
- }
48
- const payloadObject = this.normalizePayload(input.payload);
49
- const signals = this.extractLegacySignals(payloadObject);
50
- const entry = this.formatLegacyEntry(input, payloadObject, signals);
51
- await fs.appendFile(filePath, entry, 'utf-8');
52
- return filePath;
53
- }
54
- getLegacyMemoryFilePath(repoRoot, headSha) {
55
- const safeSha = this.getSafeSha(headSha);
56
- return path.join(repoRoot, '.kody', 'pr', 'by-sha', `${safeSha}.md`);
57
- }
58
- // ─── Branch-based storage ─────────────────────────────────────────
59
- getBranchMemoryPath(repoRoot, branch) {
60
- const safeBranch = this.sanitizeBranchName(branch);
61
- return path.join(repoRoot, '.kody', 'pr', `${safeBranch}.md`);
62
- }
63
- async saveBranchCapture(input, signals) {
64
- const filePath = this.getBranchMemoryPath(input.repoRoot, input.branch);
65
- const dirPath = path.dirname(filePath);
66
- await fs.mkdir(dirPath, { recursive: true });
67
- const now = new Date().toISOString();
68
- const fileExists = await this.exists(filePath);
69
- if (!fileExists) {
70
- const meta = {
71
- branch: input.branch,
72
- createdAt: now,
73
- updatedAt: now,
74
- lastSha: input.headSha ?? 'unknown',
75
- agent: input.agent,
76
- sessionCount: 1,
77
- };
78
- const content = this.buildNewBranchFile(meta);
79
- await fs.writeFile(filePath, content, 'utf-8');
80
- }
81
- else {
82
- await this.updateFrontmatter(filePath, {
83
- updatedAt: now,
84
- lastSha: input.headSha ?? 'unknown',
85
- });
86
- }
87
- const decisions = this.classifyDecisions(signals, input);
88
- const captureBlock = this.formatCaptureBlock(input, signals, now);
89
- const decisionBlocks = decisions.map((d) => this.formatDecisionBlock(d));
90
- let appendContent = '';
91
- if (decisionBlocks.length > 0) {
92
- appendContent += this.insertDecisions(decisionBlocks);
93
- }
94
- appendContent += captureBlock;
95
- await fs.appendFile(filePath, appendContent, 'utf-8');
96
- return filePath;
97
- }
98
- async readPrMemory(repoRoot, branch) {
99
- const filePath = this.getBranchMemoryPath(repoRoot, branch);
100
- try {
101
- const raw = await fs.readFile(filePath, 'utf-8');
102
- const meta = this.parseFrontmatter(raw);
103
- return { meta, content: raw };
104
- }
105
- catch {
106
- return null;
107
- }
108
- }
109
- classifyDecisions(signals, input) {
110
- const decisions = [];
111
- const text = [
112
- signals.prompt ?? '',
113
- signals.assistantMessage ?? '',
114
- ].join(' ');
115
- if (!text.trim()) {
116
- return decisions;
117
- }
118
- // Extract sentences that contain decision signals
119
- const sentences = text
120
- .split(/[.!?\n]+/)
121
- .filter((s) => s.trim().length > 10);
122
- for (const sentence of sentences) {
123
- for (const { pattern, type } of DECISION_KEYWORDS) {
124
- if (pattern.test(sentence)) {
125
- const title = sentence.trim().slice(0, 120);
126
- const id = this.generateDecisionId(type, title);
127
- // Avoid duplicates within same batch
128
- if (decisions.some((d) => d.id === id)) {
129
- continue;
130
- }
131
- const config = { loadConfig };
132
- void config; // module matching happens at promote time
133
- decisions.push({
134
- id,
135
- type,
136
- title,
137
- rationale: sentence.trim(),
138
- scope: {
139
- files: signals.modifiedFiles,
140
- modules: [], // filled at promote time via matchFiles
141
- },
142
- source: {
143
- agent: input.agent,
144
- event: input.event,
145
- session: signals.sessionId,
146
- sha: input.headSha ?? undefined,
147
- branch: input.branch,
148
- },
149
- createdAt: new Date().toISOString(),
150
- });
151
- break; // one decision type per sentence
152
- }
153
- }
154
- }
155
- return decisions;
156
- }
157
- async promoteToModuleMemory(repoRoot, branch, filterModuleIds) {
158
- const prMemory = await this.readPrMemory(repoRoot, branch);
159
- if (!prMemory) {
160
- return { promoted: 0, modules: [] };
161
- }
162
- const config = await loadConfig(repoRoot);
163
- if (!config || config.modules.length === 0) {
164
- return { promoted: 0, modules: [] };
165
- }
166
- // Extract decisions from the PR memory content
167
- const decisions = this.extractDecisionsFromContent(prMemory.content);
168
- if (decisions.length === 0) {
169
- return { promoted: 0, modules: [] };
170
- }
171
- // Match files to modules
172
- const allFiles = decisions.flatMap((d) => d.files);
173
- const matchedModuleIds = matchFiles(allFiles, config.modules);
174
- const targetModuleIds = filterModuleIds
175
- ? matchedModuleIds.filter((id) => filterModuleIds.includes(id))
176
- : matchedModuleIds;
177
- if (targetModuleIds.length === 0) {
178
- return { promoted: 0, modules: [] };
179
- }
180
- let promoted = 0;
181
- for (const moduleId of targetModuleIds) {
182
- const mod = config.modules.find((m) => m.id === moduleId);
183
- if (!mod) {
184
- continue;
185
- }
186
- const memoryFilePath = path.join(repoRoot, mod.memoryFile);
187
- await fs.mkdir(path.dirname(memoryFilePath), { recursive: true });
188
- const header = await this.ensureModuleMemoryHeader(memoryFilePath, mod.name);
189
- let content = header;
190
- for (const decision of decisions) {
191
- const decisionFiles = decision.files;
192
- const decisionModules = matchFiles(decisionFiles, config.modules);
193
- if (!decisionModules.includes(moduleId)) {
194
- continue;
195
- }
196
- content += `\n### ${decision.title}\n`;
197
- content += `- **Type:** ${decision.type}\n`;
198
- content += `- **Rationale:** ${decision.rationale}\n`;
199
- if (decisionFiles.length > 0) {
200
- content += `- **Files:** ${decisionFiles.join(', ')}\n`;
201
- }
202
- content += `- **Source:** ${branch} / ${decision.source}\n`;
203
- promoted++;
204
- }
205
- await fs.writeFile(memoryFilePath, content, 'utf-8');
206
- }
207
- return { promoted, modules: targetModuleIds };
208
- }
209
- async readModuleMemory(repoRoot, moduleId) {
210
- const config = await loadConfig(repoRoot);
211
- if (!config) {
212
- return null;
213
- }
214
- const mod = config.modules.find((m) => m.id === moduleId);
215
- if (!mod) {
216
- return null;
217
- }
218
- try {
219
- return await fs.readFile(path.join(repoRoot, mod.memoryFile), 'utf-8');
220
- }
221
- catch {
222
- return null;
223
- }
224
- }
225
- // ─── Private helpers ──────────────────────────────────────────────
226
- sanitizeBranchName(branch) {
227
- return (branch
228
- .replace(/[^a-zA-Z0-9_\-./]/g, '-')
229
- .replace(/\/{2,}/g, '/')
230
- .replace(/\.{2,}/g, '.')
231
- .replace(/^[.\-/]+|[.\-/]+$/g, '')
232
- .slice(0, 200) || 'unknown-branch');
233
- }
234
- getSafeSha(headSha) {
235
- if (!headSha) {
236
- return 'no-head';
237
- }
238
- const trimmed = headSha.trim();
239
- if (/^[a-f0-9]{7,40}$/i.test(trimmed)) {
240
- return trimmed;
241
- }
242
- return 'no-head';
243
- }
244
- normalizePayload(payload) {
245
- if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
246
- return null;
247
- }
248
- return payload;
249
- }
250
- extractLegacySignals(payload) {
251
- if (!payload) {
252
- return {};
253
- }
254
- const sessionId = this.pickString(payload, [
255
- 'session_id',
256
- 'sessionId',
257
- 'thread-id',
258
- 'thread_id',
259
- ]);
260
- const turnId = this.pickString(payload, [
261
- 'turn_id',
262
- 'turnId',
263
- 'call_id',
264
- 'callId',
265
- ]);
266
- const prompt = this.pickString(payload, ['prompt', 'user_message']);
267
- const assistantMessage = this.pickString(payload, [
268
- 'last_assistant_message',
269
- 'last-assistant-message',
270
- 'assistant_message',
271
- 'assistant-message',
272
- ]);
273
- let inputMessage;
274
- const inputMessages = this.pickStringArray(payload, [
275
- 'input_messages',
276
- 'input-messages',
277
- ]);
278
- if (inputMessages && inputMessages.length > 0) {
279
- inputMessage = inputMessages[0];
280
- }
281
- return { sessionId, turnId, prompt, inputMessage, assistantMessage };
282
- }
283
- pickString(payload, keys) {
284
- for (const key of keys) {
285
- const value = payload[key];
286
- if (typeof value === 'string') {
287
- const trimmed = value.trim();
288
- if (trimmed) {
289
- return this.sanitizeLine(trimmed);
290
- }
291
- }
292
- }
293
- return undefined;
294
- }
295
- pickStringArray(payload, keys) {
296
- for (const key of keys) {
297
- const value = payload[key];
298
- if (Array.isArray(value)) {
299
- const strings = value
300
- .filter((item) => typeof item === 'string')
301
- .map((item) => this.sanitizeLine(item))
302
- .filter((item) => item.length > 0);
303
- if (strings.length > 0) {
304
- return strings;
305
- }
306
- }
307
- }
308
- return undefined;
309
- }
310
- sanitizeLine(value) {
311
- return value.replace(/\s+/g, ' ').trim();
312
- }
313
- formatLegacyEntry(input, payload, signals) {
314
- const timestamp = new Date().toISOString();
315
- const lines = [];
316
- lines.push(`## ${timestamp} | ${input.agent} | ${input.event}`);
317
- lines.push('');
318
- lines.push(`- agent: \`${input.agent}\``);
319
- lines.push(`- event: \`${input.event}\``);
320
- if (input.headSha) {
321
- lines.push(`- head_sha: \`${input.headSha}\``);
322
- }
323
- if (signals.sessionId) {
324
- lines.push(`- session_id: \`${signals.sessionId}\``);
325
- }
326
- if (signals.turnId) {
327
- lines.push(`- turn_id: \`${signals.turnId}\``);
328
- }
329
- lines.push('');
330
- const signalsLines = [];
331
- if (input.summary) {
332
- signalsLines.push(`- summary: ${this.sanitizeLine(input.summary)}`);
333
- }
334
- if (signals.prompt) {
335
- signalsLines.push(`- prompt: ${signals.prompt}`);
336
- }
337
- if (signals.inputMessage) {
338
- signalsLines.push(`- input_message: ${signals.inputMessage}`);
339
- }
340
- if (signals.assistantMessage) {
341
- signalsLines.push(`- assistant_message: ${signals.assistantMessage}`);
342
- }
343
- if (signalsLines.length > 0) {
344
- lines.push('### Signals');
345
- lines.push('');
346
- lines.push(...signalsLines);
347
- lines.push('');
348
- }
349
- if (payload) {
350
- lines.push('### Payload');
351
- lines.push('');
352
- lines.push('```json');
353
- lines.push(this.formatJson(payload));
354
- lines.push('```');
355
- lines.push('');
356
- }
357
- return `${lines.join('\n')}\n`;
358
- }
359
- formatJson(payload) {
360
- const json = JSON.stringify(payload, null, 2);
361
- if (json.length <= MAX_JSON_CHARS) {
362
- return json;
363
- }
364
- return `${json.slice(0, MAX_JSON_CHARS)}\n... (truncated)`;
365
- }
366
- buildNewBranchFile(meta) {
367
- const frontmatter = [
368
- '---',
369
- `branch: ${meta.branch}`,
370
- `created: ${meta.createdAt}`,
371
- `updated: ${meta.updatedAt}`,
372
- `last_sha: ${meta.lastSha}`,
373
- `agent: ${meta.agent}`,
374
- `sessions: ${meta.sessionCount}`,
375
- '---',
376
- ].join('\n');
377
- return `${frontmatter}\n\n# PR Memory: ${meta.branch}\n\n## Decisions\n\n## Captures\n\n`;
378
- }
379
- async updateFrontmatter(filePath, updates) {
380
- try {
381
- const content = await fs.readFile(filePath, 'utf-8');
382
- let updated = content
383
- .replace(/^updated:.*$/m, `updated: ${updates.updatedAt}`)
384
- .replace(/^last_sha:.*$/m, `last_sha: ${updates.lastSha}`);
385
- // Increment session count
386
- const sessionsMatch = updated.match(/^sessions:\s*(\d+)/m);
387
- if (sessionsMatch) {
388
- const count = parseInt(sessionsMatch[1], 10) + 1;
389
- updated = updated.replace(/^sessions:\s*\d+/m, `sessions: ${count}`);
390
- }
391
- await fs.writeFile(filePath, updated, 'utf-8');
392
- }
393
- catch {
394
- // Fail-open: don't crash if frontmatter update fails
395
- }
396
- }
397
- parseFrontmatter(content) {
398
- const match = content.match(/^---\n([\s\S]*?)\n---/);
399
- if (!match) {
400
- return null;
401
- }
402
- const lines = match[1].split('\n');
403
- const data = {};
404
- for (const line of lines) {
405
- const colonIdx = line.indexOf(':');
406
- if (colonIdx === -1) {
407
- continue;
408
- }
409
- const key = line.slice(0, colonIdx).trim();
410
- const value = line.slice(colonIdx + 1).trim();
411
- data[key] = value;
412
- }
413
- return {
414
- branch: data['branch'] ?? '',
415
- createdAt: data['created'] ?? '',
416
- updatedAt: data['updated'] ?? '',
417
- lastSha: data['last_sha'] ?? '',
418
- agent: data['agent'] ?? '',
419
- sessionCount: parseInt(data['sessions'] ?? '0', 10),
420
- };
421
- }
422
- formatCaptureBlock(input, signals, timestamp) {
423
- const lines = [];
424
- lines.push(`### ${timestamp} | ${input.agent} | ${input.event}`);
425
- if (signals.modifiedFiles.length > 0) {
426
- lines.push(`- files_modified: ${signals.modifiedFiles.join(', ')}`);
427
- }
428
- if (signals.prompt) {
429
- lines.push(`- prompt: ${signals.prompt}`);
430
- }
431
- if (signals.assistantMessage) {
432
- const truncated = signals.assistantMessage.length > 300
433
- ? signals.assistantMessage.slice(0, 300) + '...'
434
- : signals.assistantMessage;
435
- lines.push(`- assistant_message: ${truncated}`);
436
- }
437
- lines.push('');
438
- return `${lines.join('\n')}\n`;
439
- }
440
- formatDecisionBlock(decision) {
441
- const lines = [];
442
- lines.push(`### [${decision.type}] ${decision.title}`);
443
- lines.push(`- **Rationale:** ${decision.rationale}`);
444
- if (decision.scope.files.length > 0) {
445
- lines.push(`- **Files:** ${decision.scope.files.join(', ')}`);
446
- }
447
- if (decision.scope.modules.length > 0) {
448
- lines.push(`- **Modules:** ${decision.scope.modules.join(', ')}`);
449
- }
450
- lines.push(`- **Source:** ${decision.source.agent} / ${decision.source.event} / ${decision.createdAt}`);
451
- lines.push('');
452
- return lines.join('\n');
453
- }
454
- insertDecisions(decisionBlocks) {
455
- return decisionBlocks.join('\n') + '\n';
456
- }
457
- generateDecisionId(type, title) {
458
- const hash = title
459
- .toLowerCase()
460
- .replace(/[^a-z0-9]+/g, '-')
461
- .slice(0, 40);
462
- return `${type}:${hash}`;
463
- }
464
- extractDecisionsFromContent(content) {
465
- const decisions = [];
466
- const decisionPattern = /^### \[(\w+)\] (.+)$/gm;
467
- let match;
468
- while ((match = decisionPattern.exec(content)) !== null) {
469
- const type = match[1];
470
- const title = match[2];
471
- // Extract metadata following this heading
472
- const startIdx = match.index + match[0].length;
473
- const nextHeading = content.indexOf('\n###', startIdx);
474
- const block = content.slice(startIdx, nextHeading === -1 ? undefined : nextHeading);
475
- const rationaleMatch = block.match(/\*\*Rationale:\*\*\s*(.+)/);
476
- const filesMatch = block.match(/\*\*Files:\*\*\s*(.+)/);
477
- const sourceMatch = block.match(/\*\*Source:\*\*\s*(.+)/);
478
- decisions.push({
479
- type,
480
- title,
481
- rationale: rationaleMatch?.[1] ?? '',
482
- files: filesMatch?.[1]?.split(',').map((f) => f.trim()) ?? [],
483
- source: sourceMatch?.[1] ?? '',
484
- });
485
- }
486
- return decisions;
487
- }
488
- async ensureModuleMemoryHeader(filePath, moduleName) {
489
- try {
490
- const existing = await fs.readFile(filePath, 'utf-8');
491
- return existing;
492
- }
493
- catch {
494
- return `# Module Memory: ${moduleName}\n\n## Decisions\n`;
495
- }
496
- }
497
- async exists(filePath) {
498
- try {
499
- await fs.access(filePath);
500
- return true;
501
- }
502
- catch {
503
- return false;
504
- }
505
- }
506
- }
507
- export const memoryService = new MemoryService();
508
- //# sourceMappingURL=memory.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../src/services/memory.service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { stringify as stringifyYaml } from 'yaml';
2
- import type { ModulesYml, ModuleConfig } from '../types/memory.js';
3
- export { stringifyYaml };
4
- export declare function loadConfig(repoRoot: string): Promise<ModulesYml | null>;
5
- export declare function matchFiles(files: string[], modules: ModuleConfig[]): string[];
6
- //# sourceMappingURL=module-matcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-matcher.d.ts","sourceRoot":"","sources":["../../src/utils/module-matcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,CAAC;AAIzB,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA8C7E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAY7E"}
@@ -1,99 +0,0 @@
1
- import fs from 'fs/promises';
2
- import path from 'path';
3
- import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
4
- export { stringifyYaml };
5
- const CONFIG_PATH = '.kody/modules.yml';
6
- export async function loadConfig(repoRoot) {
7
- try {
8
- const filePath = path.join(repoRoot, CONFIG_PATH);
9
- const content = await fs.readFile(filePath, 'utf-8');
10
- const parsed = parseYaml(content);
11
- if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
12
- return null;
13
- }
14
- const obj = parsed;
15
- if (obj['version'] !== 1 || !Array.isArray(obj['modules'])) {
16
- return null;
17
- }
18
- const modules = [];
19
- for (const item of obj['modules']) {
20
- if (!item || typeof item !== 'object' || Array.isArray(item)) {
21
- continue;
22
- }
23
- const entry = item;
24
- const id = typeof entry['id'] === 'string' ? entry['id'] : undefined;
25
- const name = typeof entry['name'] === 'string' ? entry['name'] : id;
26
- const paths = Array.isArray(entry['paths'])
27
- ? entry['paths'].filter((p) => typeof p === 'string')
28
- : [];
29
- const memoryFile = typeof entry['memoryFile'] === 'string'
30
- ? entry['memoryFile']
31
- : `.kody/memory/${id}.md`;
32
- if (!id || paths.length === 0) {
33
- continue;
34
- }
35
- modules.push({ id, name: name ?? id, paths, memoryFile });
36
- }
37
- return { version: 1, modules };
38
- }
39
- catch {
40
- return null;
41
- }
42
- }
43
- export function matchFiles(files, modules) {
44
- const matched = new Set();
45
- for (const file of files) {
46
- for (const mod of modules) {
47
- if (fileMatchesModule(file, mod.paths)) {
48
- matched.add(mod.id);
49
- }
50
- }
51
- }
52
- return [...matched];
53
- }
54
- function fileMatchesModule(filePath, patterns) {
55
- const normalized = filePath.replace(/\\/g, '/');
56
- for (const pattern of patterns) {
57
- const normalizedPattern = pattern.replace(/\\/g, '/');
58
- if (normalizedPattern.endsWith('/**')) {
59
- const prefix = normalizedPattern.slice(0, -3);
60
- if (normalized.startsWith(prefix + '/') || normalized === prefix) {
61
- return true;
62
- }
63
- }
64
- else if (normalizedPattern.endsWith('/*')) {
65
- const prefix = normalizedPattern.slice(0, -2);
66
- if (normalized.startsWith(prefix + '/') &&
67
- !normalized.slice(prefix.length + 1).includes('/')) {
68
- return true;
69
- }
70
- }
71
- else if (normalizedPattern.includes('*')) {
72
- const regex = patternToRegex(normalizedPattern);
73
- if (regex.test(normalized)) {
74
- return true;
75
- }
76
- }
77
- else {
78
- // Exact prefix match (directory or file path)
79
- if (normalized.startsWith(normalizedPattern + '/') ||
80
- normalized === normalizedPattern) {
81
- return true;
82
- }
83
- }
84
- }
85
- return false;
86
- }
87
- function patternToRegex(pattern) {
88
- const escaped = pattern
89
- .replace(/\*\*/g, '§GLOBSTAR§')
90
- .replace(/\*/g, '§GLOB§')
91
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
92
- // Preserve globstar "zero or more directories" semantics when used mid-path.
93
- // Example: a/**/b must match both a/b and a/x/y/b.
94
- .replace(/\/§GLOBSTAR§\//g, '(?:/[^/]+)*/')
95
- .replace(/§GLOBSTAR§/g, '.*')
96
- .replace(/§GLOB§/g, '[^/]*');
97
- return new RegExp(`^${escaped}$`);
98
- }
99
- //# sourceMappingURL=module-matcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module-matcher.js","sourceRoot":"","sources":["../../src/utils/module-matcher.ts"],"names":[],"mappings":"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"}