@kodus/cli 0.4.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
@@ -0,0 +1,41 @@
1
+ import type { LifecycleEvent, AgentType, TokenUsage, TranscriptParseResult } from '../types/session.js';
2
+ /**
3
+ * Base interface for agent adapters.
4
+ * Each supported agent (Claude Code, Cursor, Codex) implements this
5
+ * to normalize hook payloads into LifecycleEvents.
6
+ */
7
+ export interface AgentAdapter {
8
+ readonly agentType: AgentType;
9
+ /**
10
+ * Parse a raw hook payload into a normalized LifecycleEvent.
11
+ */
12
+ parseHookEvent(hookName: string, payload: unknown): LifecycleEvent | null;
13
+ /**
14
+ * Read and parse the agent's transcript file.
15
+ * @param transcriptPath Path to the transcript file.
16
+ * @param fromOffset Start parsing from this byte offset (for incremental).
17
+ */
18
+ readTranscript(transcriptPath: string, fromOffset?: number): Promise<TranscriptParseResult>;
19
+ /**
20
+ * Extract prompts from a parsed transcript.
21
+ */
22
+ extractPrompts(transcriptPath: string): Promise<string[]>;
23
+ /**
24
+ * Extract the last assistant message as a summary.
25
+ */
26
+ extractSummary(transcriptPath: string): Promise<string>;
27
+ /**
28
+ * Extract modified files from tool_use blocks in the transcript.
29
+ */
30
+ extractModifiedFiles(transcriptPath: string): Promise<string[]>;
31
+ /**
32
+ * Calculate token usage from assistant messages in the transcript.
33
+ */
34
+ calculateTokenUsage(transcriptPath: string): Promise<TokenUsage>;
35
+ /**
36
+ * Wait for the transcript to be flushed to disk after the agent finishes.
37
+ * Uses a sentinel detection approach (polling for no new writes).
38
+ */
39
+ waitForTranscriptFlush(transcriptPath: string, timeoutMs?: number): Promise<boolean>;
40
+ }
41
+ //# sourceMappingURL=agent.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.interface.d.ts","sourceRoot":"","sources":["../../src/agents/agent.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC;IAE1E;;;;OAIG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE5F;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEjE;;;OAGG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.interface.js","sourceRoot":"","sources":["../../src/agents/agent.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { AgentAdapter } from './agent.interface.js';
2
+ import type { AgentType, LifecycleEvent, TokenUsage, TranscriptParseResult } from '../types/session.js';
3
+ export declare class ClaudeCodeAgent implements AgentAdapter {
4
+ readonly agentType: AgentType;
5
+ parseHookEvent(hookName: string, payload: unknown): LifecycleEvent | null;
6
+ readTranscript(transcriptPath: string, fromOffset?: number): Promise<TranscriptParseResult>;
7
+ extractPrompts(transcriptPath: string): Promise<string[]>;
8
+ extractSummary(transcriptPath: string): Promise<string>;
9
+ extractModifiedFiles(transcriptPath: string): Promise<string[]>;
10
+ calculateTokenUsage(transcriptPath: string): Promise<TokenUsage>;
11
+ waitForTranscriptFlush(transcriptPath: string, timeoutMs?: number): Promise<boolean>;
12
+ }
13
+ export declare const claudeCodeAgent: ClaudeCodeAgent;
14
+ //# sourceMappingURL=claude-code.agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.agent.d.ts","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EAEd,UAAU,EACV,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAY7B,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAiB;IAE9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI;IAqCnE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAItF,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzD,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/D,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIhE,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAGzF;AAgBD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { transcriptService } from '../services/transcript.service.js';
2
+ const HOOK_TO_EVENT_TYPE = {
3
+ 'session-start': 'SessionStart',
4
+ 'session-end': 'SessionEnd',
5
+ 'stop': 'SessionEnd',
6
+ 'user-prompt-submit': 'TurnStart',
7
+ 'pre-task': 'SubagentStart',
8
+ 'post-task': 'SubagentEnd',
9
+ 'post-todo': 'TurnEnd',
10
+ };
11
+ export class ClaudeCodeAgent {
12
+ agentType = 'claude-code';
13
+ parseHookEvent(hookName, payload) {
14
+ const eventType = HOOK_TO_EVENT_TYPE[hookName];
15
+ if (!eventType)
16
+ return null;
17
+ const obj = (payload && typeof payload === 'object' && !Array.isArray(payload))
18
+ ? payload
19
+ : {};
20
+ const sessionId = pickString(obj, ['session_id', 'sessionId']) ?? '';
21
+ const sessionRef = pickString(obj, ['transcript_path', 'transcriptPath', 'session_ref']) ?? '';
22
+ const prompt = pickString(obj, ['prompt', 'user_message']);
23
+ const toolUseId = pickString(obj, ['tool_use_id', 'toolUseId']);
24
+ const subagentId = pickString(obj, ['subagent_id', 'subagentId']);
25
+ const subagentType = pickString(obj, ['subagent_type', 'subagentType']);
26
+ const taskDescription = pickString(obj, ['task_description', 'taskDescription']);
27
+ let toolInput;
28
+ if (obj['tool_input'] !== undefined) {
29
+ toolInput = obj['tool_input'];
30
+ }
31
+ else if (obj['input'] !== undefined) {
32
+ toolInput = obj['input'];
33
+ }
34
+ return {
35
+ type: eventType,
36
+ sessionId,
37
+ sessionRef,
38
+ prompt,
39
+ timestamp: new Date().toISOString(),
40
+ toolUseId,
41
+ subagentId,
42
+ subagentType,
43
+ taskDescription,
44
+ toolInput,
45
+ };
46
+ }
47
+ async readTranscript(transcriptPath, fromOffset = 0) {
48
+ return transcriptService.parse(transcriptPath, fromOffset);
49
+ }
50
+ async extractPrompts(transcriptPath) {
51
+ return transcriptService.extractPrompts(transcriptPath);
52
+ }
53
+ async extractSummary(transcriptPath) {
54
+ return transcriptService.extractSummary(transcriptPath);
55
+ }
56
+ async extractModifiedFiles(transcriptPath) {
57
+ return transcriptService.extractModifiedFiles(transcriptPath);
58
+ }
59
+ async calculateTokenUsage(transcriptPath) {
60
+ return transcriptService.calculateTokenUsage(transcriptPath);
61
+ }
62
+ async waitForTranscriptFlush(transcriptPath, timeoutMs = 3000) {
63
+ return transcriptService.waitForFlush(transcriptPath, timeoutMs);
64
+ }
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Helpers
68
+ // ---------------------------------------------------------------------------
69
+ function pickString(obj, keys) {
70
+ for (const key of keys) {
71
+ const value = obj[key];
72
+ if (typeof value === 'string' && value.trim()) {
73
+ return value.trim();
74
+ }
75
+ }
76
+ return undefined;
77
+ }
78
+ export const claudeCodeAgent = new ClaudeCodeAgent();
79
+ //# sourceMappingURL=claude-code.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.agent.js","sourceRoot":"","sources":["../../src/agents/claude-code.agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/capture.ts"],"names":[],"mappings":"AAYA,UAAU,cAAc;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAmFf"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/capture.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAmDf"}
@@ -2,7 +2,6 @@ import chalk from 'chalk';
2
2
  import { gitService } from '../../services/git.service.js';
3
3
  import { authService } from '../../services/auth.service.js';
4
4
  import { api } from '../../services/api/index.js';
5
- import { memoryService } from '../../services/memory.service.js';
6
5
  import { transcriptParserService } from '../../services/transcript-parser.service.js';
7
6
  import { cliError, cliInfo, isCliVerboseMode } from '../../utils/logger.js';
8
7
  export async function captureAction(payloadArg, options) {
@@ -12,7 +11,10 @@ export async function captureAction(payloadArg, options) {
12
11
  // Hook command must fail-open outside git repos.
13
12
  return;
14
13
  }
15
- const repoRoot = (await gitService.getGitRoot()).trim();
14
+ if (options.event !== 'stop') {
15
+ // Only submit on stop event
16
+ return;
17
+ }
16
18
  const headSha = await gitService.getHeadSha();
17
19
  const payloadFromStdin = payloadArg
18
20
  ? undefined
@@ -20,54 +22,25 @@ export async function captureAction(payloadArg, options) {
20
22
  const rawPayload = selectRawPayload(payloadFromStdin, payloadArg);
21
23
  const parsedPayload = parsePayload(rawPayload);
22
24
  const resolvedAgent = resolveAgent(options.agent);
23
- // Resolve branch for new structured storage
24
25
  let branch;
25
26
  try {
26
27
  branch = (await gitService.getCurrentBranch()).trim();
27
28
  }
28
29
  catch {
29
- // Detached HEAD or no branch - fall back to legacy
30
+ // Detached HEAD or no branch
30
31
  }
31
- if (branch) {
32
- const signals = transcriptParserService.parse(parsedPayload);
33
- const filePath = await memoryService.saveBranchCapture({
34
- repoRoot,
35
- headSha,
36
- agent: resolvedAgent,
37
- event: options.event,
38
- branch,
39
- payload: parsedPayload,
40
- summary: options.summary,
41
- }, signals);
42
- if (isCliVerboseMode()) {
43
- cliInfo(chalk.dim(`[memory] saved branch capture to ${filePath}`));
44
- }
45
- if (options.event === 'stop') {
46
- submitCaptureToApi({
47
- repoRoot,
48
- headSha,
49
- branch,
50
- agent: resolvedAgent,
51
- event: options.event,
52
- signals,
53
- summary: options.summary,
54
- }).catch(() => { }); // Intentionally swallowed — must not block hook
55
- }
56
- }
57
- else {
58
- // Legacy per-SHA fallback
59
- const filePath = await memoryService.saveCapture({
60
- repoRoot,
61
- headSha,
62
- agent: resolvedAgent,
63
- event: options.event,
64
- payload: parsedPayload,
65
- summary: options.summary,
66
- });
67
- if (isCliVerboseMode()) {
68
- cliInfo(chalk.dim(`[memory] saved capture to ${filePath}`));
69
- }
32
+ if (!branch) {
33
+ return;
70
34
  }
35
+ const signals = transcriptParserService.parse(parsedPayload);
36
+ await submitCaptureToApi({
37
+ headSha,
38
+ branch,
39
+ agent: resolvedAgent,
40
+ event: options.event,
41
+ signals,
42
+ summary: options.summary,
43
+ }).catch(() => { }); // Intentionally swallowed — must not block hook
71
44
  }
72
45
  catch (error) {
73
46
  // Hooks should not block development flow.
@@ -94,12 +67,9 @@ async function readStdinIfAvailable() {
94
67
  let data = '';
95
68
  let settled = false;
96
69
  const noDataTimer = setTimeout(() => {
97
- // Some hook runners keep stdin open forever without sending payload.
98
- // In that case, fail open and continue without stdin payload.
99
70
  finish(undefined);
100
71
  }, 750);
101
72
  const brokenStreamTimer = setTimeout(() => {
102
- // Safety net for broken streams that emit data but never close.
103
73
  finish(data.length > 0 ? data : undefined);
104
74
  }, 5000);
105
75
  const finish = (value) => {
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/commands/memory/capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAKtF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQ5E,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,UAA8B,EAC9B,OAAuB;IAEvB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,iDAAiD;YACjD,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;QAE9C,MAAM,gBAAgB,GAAG,UAAU;YAC/B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,oBAAoB,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAElE,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElD,4CAA4C;QAC5C,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACL,mDAAmD;QACvD,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAClD;gBACI,QAAQ;gBACR,OAAO;gBACP,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM;gBACN,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;aAC3B,EACD,OAAO,CACV,CAAC;YAEF,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBACrB,OAAO,CACH,KAAK,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAC5D,CAAC;YACN,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC3B,kBAAkB,CAAC;oBACf,QAAQ;oBACR,OAAO;oBACP,MAAM;oBACN,KAAK,EAAE,aAAa;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO;oBACP,OAAO,EAAE,OAAO,CAAC,OAAO;iBAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,gDAAgD;YACxE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC;gBAC7C,QAAQ;gBACR,OAAO;gBACP,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;aAC3B,CAAC,CAAC;YAEH,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,2CAA2C;QAC3C,IAAI,gBAAgB,EAAE,EAAE,CAAC;YACrB,MAAM,OAAO,GACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IAClC,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,oBAAoB;IAC/B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,qEAAqE;YACrE,8DAA8D;YAC9D,MAAM,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;YACtC,gEAAgE;YAChE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAQ,EAAE;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO;YACX,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,YAAY,CAAC,iBAAiB,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACvC,IAAI,IAAI,KAAK,CAAC;YACd,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,YAAY,CAAC,iBAAiB,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACrB,gBAAoC,EACpC,UAA8B;IAE9B,MAAM,UAAU,GAAG,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAY3C,KAAK,UAAU,kBAAkB,CAAC,MAA2B;IACzD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,eAAe,EAAE,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,aAAa,EAAE,CAAC;IAEhD,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG,aAAa;QACzB,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE;QAC9C,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB;QAC7D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC;QACvE,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,OAAO,GAA4B;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,OAAO;QACnB,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE;YACL,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;YACnC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC7B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC7B,gBAAgB,EAAE,yBAAyB;YAC3C,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa;YAC3C,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;SACpC;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACvC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACrB,OAAO,CACH,KAAK,CAAC,GAAG,CACL,yCAAyC,MAAM,CAAC,EAAE,cAAc,MAAM,CAAC,QAAQ,GAAG,CACrF,CACJ,CAAC;IACN,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/commands/memory/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/disable.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBnD"}
1
+ {"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/disable.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBnD"}
@@ -1,6 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { gitService } from '../../services/git.service.js';
3
- import { removeClaudeCompatibleHooks, removeCodexNotify, removeMergeHook, resolveCodexConfigPath, } from './hooks.js';
3
+ import { removeClaudeCompatibleHooks, removeCodexNotify, resolveCodexConfigPath, } from './hooks.js';
4
+ import { removeSessionHooks } from './session-hooks-install.js';
4
5
  import { exitWithCode } from '../../utils/cli-exit.js';
5
6
  import { cliError, cliInfo } from '../../utils/logger.js';
6
7
  export async function disableAction() {
@@ -11,12 +12,13 @@ export async function disableAction() {
11
12
  }
12
13
  const gitRoot = (await gitService.getGitRoot()).trim();
13
14
  const claudeResult = await removeClaudeCompatibleHooks(gitRoot);
15
+ const sessionResult = await removeSessionHooks(gitRoot);
14
16
  const codexResult = await removeCodexNotify(resolveCodexConfigPath());
15
- const mergeResult = await removeMergeHook(gitRoot);
17
+ const captureRemoved = claudeResult.removed;
18
+ const sessionRemoved = sessionResult.removed;
16
19
  cliInfo(chalk.green('\u2713 Decision hooks removed.'));
17
- cliInfo(` Claude Code / Cursor hooks: ${claudeResult.removed ? 'removed' : 'not found'}`);
20
+ cliInfo(` Decision capture hooks: ${captureRemoved ? 'removed' : 'not found'}`);
21
+ cliInfo(` Session tracking hooks: ${sessionRemoved ? 'removed' : 'not found'}`);
18
22
  cliInfo(` Codex notify: ${codexResult.removed ? 'removed' : 'not found'}`);
19
- cliInfo(` Post-merge hook: ${mergeResult.removed ? 'removed' : 'not found'}`);
20
- cliInfo(chalk.dim(' Memory data in .kody/ preserved.'));
21
23
  }
22
24
  //# sourceMappingURL=disable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/commands/memory/disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EACH,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACpD,YAAY,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvD,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAEnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACvD,OAAO,CACH,iCAAiC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CACpF,CAAC;IACF,OAAO,CAAC,mBAAmB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,OAAO,CACH,sBAAsB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CACxE,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/commands/memory/disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EACH,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACpD,YAAY,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvD,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;IAC5C,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;IAE7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,6BAA6B,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,6BAA6B,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjF,OAAO,CAAC,mBAAmB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAChF,CAAC"}
@@ -1,7 +1,6 @@
1
1
  interface EnableOptions {
2
2
  agents?: string;
3
3
  codexConfig?: string;
4
- force?: boolean;
5
4
  }
6
5
  export declare function enableAction(options: EnableOptions): Promise<void>;
7
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/enable.ts"],"names":[],"mappings":"AAiBA,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFxE"}
1
+ {"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/enable.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDxE"}
@@ -1,9 +1,7 @@
1
1
  import chalk from 'chalk';
2
- import fs from 'fs/promises';
3
- import path from 'path';
4
2
  import { gitService } from '../../services/git.service.js';
5
- import { stringifyYaml } from '../../utils/module-matcher.js';
6
- import { parseAgents, installClaudeCompatibleHooks, installCodexNotify, installMergeHook, resolveCodexConfigPath, detectModules, } from './hooks.js';
3
+ import { parseAgents, installClaudeCompatibleHooks, installCodexNotify, resolveCodexConfigPath, } from './hooks.js';
4
+ import { installSessionHooks } from './session-hooks-install.js';
7
5
  import { exitWithCode } from '../../utils/cli-exit.js';
8
6
  import { cliError, cliInfo } from '../../utils/logger.js';
9
7
  export async function enableAction(options) {
@@ -23,13 +21,19 @@ export async function enableAction(options) {
23
21
  }
24
22
  const installClaudeCompat = agents.has('claude') || agents.has('cursor');
25
23
  const installCodex = agents.has('codex');
26
- // 1. Claude Code / Cursor hooks
27
- let claudeStatus = 'skipped';
24
+ // 1. Decision capture hooks (Claude Code / Cursor)
25
+ let captureStatus = 'skipped';
28
26
  if (installClaudeCompat) {
29
27
  const result = await installClaudeCompatibleHooks(gitRoot);
30
- claudeStatus = result.changed ? 'installed' : 'already configured';
28
+ captureStatus = result.changed ? 'installed' : 'already configured';
31
29
  }
32
- // 2. Codex notify
30
+ // 2. Session tracking hooks (Claude Code / Cursor)
31
+ let sessionStatus = 'skipped';
32
+ if (installClaudeCompat) {
33
+ const result = await installSessionHooks(gitRoot, 'claude-code');
34
+ sessionStatus = result.changed ? 'installed' : 'already configured';
35
+ }
36
+ // 3. Codex notify
33
37
  let codexStatus = 'skipped';
34
38
  if (installCodex) {
35
39
  const codexConfigPath = resolveCodexConfigPath(options.codexConfig);
@@ -44,42 +48,10 @@ export async function enableAction(options) {
44
48
  codexStatus = 'already configured';
45
49
  }
46
50
  }
47
- // 3. Post-merge hook (always)
48
- const mergeResult = await installMergeHook(gitRoot);
49
- const mergeStatus = mergeResult.alreadyInstalled
50
- ? 'already configured'
51
- : 'installed';
52
- // 4. Init modules.yml
53
- const configPath = path.join(gitRoot, '.kody', 'modules.yml');
54
- let modulesStatus;
55
- let modulesExist = false;
56
- try {
57
- await fs.access(configPath);
58
- modulesExist = true;
59
- }
60
- catch {
61
- // doesn't exist
62
- }
63
- if (modulesExist && !options.force) {
64
- modulesStatus = 'already exists';
65
- }
66
- else {
67
- const srcPath = path.join(gitRoot, 'src');
68
- const modules = await detectModules(srcPath);
69
- const config = { version: 1, modules };
70
- const yamlContent = stringifyYaml(config);
71
- await fs.mkdir(path.dirname(configPath), { recursive: true });
72
- await fs.writeFile(configPath, yamlContent, 'utf-8');
73
- modulesStatus =
74
- modules.length > 0
75
- ? `created (${modules.length} module${modules.length === 1 ? '' : 's'} detected)`
76
- : 'created (no modules detected)';
77
- }
78
51
  // Summary
79
52
  cliInfo(chalk.green('\u2713 Decisions enabled for this repository.'));
80
- cliInfo(` Claude Code / Cursor hooks: ${claudeStatus}`);
53
+ cliInfo(` Decision capture hooks: ${captureStatus}`);
54
+ cliInfo(` Session tracking hooks: ${sessionStatus}`);
81
55
  cliInfo(` Codex notify: ${codexStatus}`);
82
- cliInfo(` Post-merge hook: ${mergeStatus}`);
83
- cliInfo(` Module config: ${modulesStatus}`);
84
56
  }
85
57
  //# sourceMappingURL=enable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../../src/commands/memory/enable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../../src/commands/memory/enable.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,6 @@ export declare const CLAUDE_CAPTURE_COMMANDS: {
7
7
  };
8
8
  export declare const CODEX_NOTIFY_LINE = "notify = [\"kodus\", \"decisions\", \"capture\", \"--agent\", \"codex\", \"--event\", \"stop\"]";
9
9
  export declare const CODEX_NOTIFY_LINE_LEGACY = "notify = [\"kodus\", \"decisions\", \"capture\", \"--agent\", \"codex\", \"--event\", \"agent-turn-complete\"]";
10
- export declare const MERGE_HOOK_MARKER = "# kodus-memory-post-merge";
11
10
  export declare function parseAgents(rawAgents: string): Set<string>;
12
11
  export declare function resolveCodexConfigPath(rawPath?: string): string;
13
12
  export declare function installClaudeCompatibleHooks(repoRoot: string): Promise<{
@@ -20,16 +19,6 @@ export declare function installCodexNotify(configPath: string): Promise<{
20
19
  skipped: boolean;
21
20
  reason: string;
22
21
  }>;
23
- export declare function installMergeHook(gitRoot: string): Promise<{
24
- hookPath: string;
25
- alreadyInstalled: boolean;
26
- }>;
27
- export declare function detectModules(srcPath: string): Promise<Array<{
28
- id: string;
29
- name: string;
30
- paths: string[];
31
- memoryFile: string;
32
- }>>;
33
22
  export declare function removeClaudeCompatibleHooks(repoRoot: string): Promise<{
34
23
  settingsPath: string;
35
24
  removed: boolean;
@@ -38,8 +27,4 @@ export declare function removeCodexNotify(configPath: string): Promise<{
38
27
  configPath: string;
39
28
  removed: boolean;
40
29
  }>;
41
- export declare function removeMergeHook(gitRoot: string): Promise<{
42
- hookPath: string;
43
- removed: boolean;
44
- }>;
45
30
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/hooks.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,aAAyC,CAAC;AAIvE,eAAO,MAAM,uBAAuB;;;;;CAQnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,oGACyD,CAAC;AACxF,eAAO,MAAM,wBAAwB,mHACiE,CAAC;AAEvG,eAAO,MAAM,iBAAiB,8BAA8B,CAAC;AAuB7D,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CA2B1D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAU/D;AAoHD,wBAAsB,4BAA4B,CAC9C,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAyCrD;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CA4CD;AAED,wBAAsB,gBAAgB,CAClC,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CAAC,CA2B1D;AAED,wBAAsB,aAAa,CAC/B,OAAO,EAAE,MAAM,GAChB,OAAO,CACN,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAC3E,CAcA;AAMD,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA6ErD;AAED,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkCnD;AAED,wBAAsB,eAAe,CACjC,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA+CjD"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/memory/hooks.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,aAAyC,CAAC;AAIvE,eAAO,MAAM,uBAAuB;;;;;CAQnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,oGACyD,CAAC;AACxF,eAAO,MAAM,wBAAwB,mHACiE,CAAC;AAQvG,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CA2B1D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAU/D;AAoHD,wBAAsB,4BAA4B,CAC9C,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAyCrD;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CA4CD;AAMD,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA6ErD;AAED,wBAAsB,iBAAiB,CACnC,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkCnD"}
@@ -14,21 +14,6 @@ export const CLAUDE_CAPTURE_COMMANDS = {
14
14
  };
15
15
  export const CODEX_NOTIFY_LINE = 'notify = ["kodus", "decisions", "capture", "--agent", "codex", "--event", "stop"]';
16
16
  export const CODEX_NOTIFY_LINE_LEGACY = 'notify = ["kodus", "decisions", "capture", "--agent", "codex", "--event", "agent-turn-complete"]';
17
- export const MERGE_HOOK_MARKER = '# kodus-memory-post-merge';
18
- const MERGE_HOOK_END_MARKER = '# /kodus-memory-post-merge';
19
- const MERGE_PROMOTE_COMMAND = 'kodus decisions promote';
20
- const MERGE_HOOK_SCRIPT = `
21
- ${MERGE_HOOK_MARKER}
22
- # Detect merged branch from the merge commit message
23
- MERGED_BRANCH=$(git log -1 --merges --format=%s HEAD 2>/dev/null | sed -n "s/.*Merge branch '\\([^']*\\)'.*/\\1/p")
24
- if [ -z "$MERGED_BRANCH" ]; then
25
- MERGED_BRANCH=$(git log -1 --merges --format=%s HEAD 2>/dev/null | sed -n "s/.*Merge pull request .* from [^/]*\\/\\(.*\\)/\\1/p")
26
- fi
27
- if [ -n "$MERGED_BRANCH" ]; then
28
- ${MERGE_PROMOTE_COMMAND} --branch "$MERGED_BRANCH" &
29
- fi
30
- ${MERGE_HOOK_END_MARKER}
31
- `.trimStart();
32
17
  export function parseAgents(rawAgents) {
33
18
  const aliases = {
34
19
  'claude': 'claude',
@@ -199,46 +184,6 @@ export async function installCodexNotify(configPath) {
199
184
  await fs.writeFile(configPath, nextContent, 'utf-8');
200
185
  return { configPath, changed: true, skipped: false, reason: '' };
201
186
  }
202
- export async function installMergeHook(gitRoot) {
203
- const hookPath = path.join(gitRoot, '.git', 'hooks', 'post-merge');
204
- let existing = '';
205
- try {
206
- existing = await fs.readFile(hookPath, 'utf-8');
207
- }
208
- catch (error) {
209
- if (error.code !== 'ENOENT') {
210
- throw error;
211
- }
212
- }
213
- if (existing.includes(MERGE_HOOK_MARKER)) {
214
- return { hookPath, alreadyInstalled: true };
215
- }
216
- let content;
217
- if (existing.trim().length === 0) {
218
- content = `#!/bin/sh\n${MERGE_HOOK_SCRIPT}`;
219
- }
220
- else {
221
- content = `${existing.replace(/\s*$/, '')}\n\n${MERGE_HOOK_SCRIPT}`;
222
- }
223
- await fs.mkdir(path.dirname(hookPath), { recursive: true });
224
- await fs.writeFile(hookPath, content, { mode: 0o755 });
225
- return { hookPath, alreadyInstalled: false };
226
- }
227
- export async function detectModules(srcPath) {
228
- try {
229
- const entries = await fs.readdir(srcPath, { withFileTypes: true });
230
- const dirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
231
- return dirs.map((dir) => ({
232
- id: dir,
233
- name: dir.charAt(0).toUpperCase() + dir.slice(1),
234
- paths: [`src/${dir}/**`],
235
- memoryFile: `.kody/memory/${dir}.md`,
236
- }));
237
- }
238
- catch {
239
- return [];
240
- }
241
- }
242
187
  // ---------------------------------------------------------------------------
243
188
  // Remove functions (for disable)
244
189
  // ---------------------------------------------------------------------------
@@ -327,41 +272,4 @@ export async function removeCodexNotify(configPath) {
327
272
  await fs.writeFile(configPath, nextContent === '\n' ? '' : nextContent, 'utf-8');
328
273
  return { configPath, removed: true };
329
274
  }
330
- export async function removeMergeHook(gitRoot) {
331
- const hookPath = path.join(gitRoot, '.git', 'hooks', 'post-merge');
332
- let content;
333
- try {
334
- content = await fs.readFile(hookPath, 'utf-8');
335
- }
336
- catch {
337
- return { hookPath, removed: false };
338
- }
339
- if (!content.includes(MERGE_HOOK_MARKER)) {
340
- return { hookPath, removed: false };
341
- }
342
- // Remove kodus block:
343
- // - Preferred: marker -> end marker (current format)
344
- // - Legacy fallback: marker -> end-of-file (older format without end marker)
345
- const lines = content.split('\n');
346
- const startIdx = lines.findIndex((line) => line.trim() === MERGE_HOOK_MARKER);
347
- if (startIdx === -1) {
348
- return { hookPath, removed: false };
349
- }
350
- const endIdx = lines.findIndex((line, idx) => idx > startIdx && line.trim() === MERGE_HOOK_END_MARKER);
351
- const filtered = endIdx === -1
352
- ? lines.slice(0, startIdx)
353
- : [...lines.slice(0, startIdx), ...lines.slice(endIdx + 1)];
354
- const remaining = filtered
355
- .join('\n')
356
- .replace(/\n{3,}/g, '\n\n')
357
- .replace(/\n*$/, '\n');
358
- // If only shebang (or empty) remains, delete the file
359
- if (remaining.trim() === '#!/bin/sh' || remaining.trim() === '') {
360
- await fs.unlink(hookPath);
361
- }
362
- else {
363
- await fs.writeFile(hookPath, remaining, { mode: 0o755 });
364
- }
365
- return { hookPath, removed: true };
366
- }
367
275
  //# sourceMappingURL=hooks.js.map