cmdr-agent 1.2.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +19 -0
  2. package/dist/bin/cmdr.js +3 -1
  3. package/dist/bin/cmdr.js.map +1 -1
  4. package/dist/src/agents/executor.d.ts +32 -0
  5. package/dist/src/agents/executor.d.ts.map +1 -0
  6. package/dist/src/agents/executor.js +50 -0
  7. package/dist/src/agents/executor.js.map +1 -0
  8. package/dist/src/agents/index.d.ts +7 -0
  9. package/dist/src/agents/index.d.ts.map +1 -0
  10. package/dist/src/agents/index.js +7 -0
  11. package/dist/src/agents/index.js.map +1 -0
  12. package/dist/src/agents/registry.d.ts +36 -0
  13. package/dist/src/agents/registry.d.ts.map +1 -0
  14. package/dist/src/agents/registry.js +168 -0
  15. package/dist/src/agents/registry.js.map +1 -0
  16. package/dist/src/agents/subagent-tool.d.ts +27 -0
  17. package/dist/src/agents/subagent-tool.d.ts.map +1 -0
  18. package/dist/src/agents/subagent-tool.js +36 -0
  19. package/dist/src/agents/subagent-tool.js.map +1 -0
  20. package/dist/src/cli/args.d.ts +2 -0
  21. package/dist/src/cli/args.d.ts.map +1 -1
  22. package/dist/src/cli/args.js +8 -0
  23. package/dist/src/cli/args.js.map +1 -1
  24. package/dist/src/cli/commands.d.ts.map +1 -1
  25. package/dist/src/cli/commands.js +92 -4
  26. package/dist/src/cli/commands.js.map +1 -1
  27. package/dist/src/cli/ink/App.d.ts +4 -0
  28. package/dist/src/cli/ink/App.d.ts.map +1 -1
  29. package/dist/src/cli/ink/App.js +164 -20
  30. package/dist/src/cli/ink/App.js.map +1 -1
  31. package/dist/src/cli/ink/StatusBar.d.ts +17 -0
  32. package/dist/src/cli/ink/StatusBar.d.ts.map +1 -0
  33. package/dist/src/cli/ink/StatusBar.js +32 -0
  34. package/dist/src/cli/ink/StatusBar.js.map +1 -0
  35. package/dist/src/cli/repl.d.ts +2 -0
  36. package/dist/src/cli/repl.d.ts.map +1 -1
  37. package/dist/src/cli/repl.js +117 -4
  38. package/dist/src/cli/repl.js.map +1 -1
  39. package/dist/src/cli/theme.d.ts +42 -22
  40. package/dist/src/cli/theme.d.ts.map +1 -1
  41. package/dist/src/cli/theme.js +25 -1
  42. package/dist/src/cli/theme.js.map +1 -1
  43. package/dist/src/cli/themes.d.ts +57 -0
  44. package/dist/src/cli/themes.d.ts.map +1 -0
  45. package/dist/src/cli/themes.js +98 -0
  46. package/dist/src/cli/themes.js.map +1 -0
  47. package/dist/src/commands/index.d.ts +3 -0
  48. package/dist/src/commands/index.d.ts.map +1 -0
  49. package/dist/src/commands/index.js +2 -0
  50. package/dist/src/commands/index.js.map +1 -0
  51. package/dist/src/commands/loader.d.ts +35 -0
  52. package/dist/src/commands/loader.d.ts.map +1 -0
  53. package/dist/src/commands/loader.js +134 -0
  54. package/dist/src/commands/loader.js.map +1 -0
  55. package/dist/src/config/config-loader.d.ts.map +1 -1
  56. package/dist/src/config/config-loader.js +2 -0
  57. package/dist/src/config/config-loader.js.map +1 -1
  58. package/dist/src/config/defaults.d.ts.map +1 -1
  59. package/dist/src/config/defaults.js +1 -0
  60. package/dist/src/config/defaults.js.map +1 -1
  61. package/dist/src/config/schema.d.ts +3 -0
  62. package/dist/src/config/schema.d.ts.map +1 -1
  63. package/dist/src/config/schema.js +1 -0
  64. package/dist/src/config/schema.js.map +1 -1
  65. package/dist/src/core/agent-runner.d.ts.map +1 -1
  66. package/dist/src/core/agent-runner.js +39 -5
  67. package/dist/src/core/agent-runner.js.map +1 -1
  68. package/dist/src/core/agent.d.ts +1 -1
  69. package/dist/src/core/agent.d.ts.map +1 -1
  70. package/dist/src/core/agent.js +4 -3
  71. package/dist/src/core/agent.js.map +1 -1
  72. package/dist/src/core/intent.d.ts +2 -0
  73. package/dist/src/core/intent.d.ts.map +1 -1
  74. package/dist/src/core/intent.js +12 -0
  75. package/dist/src/core/intent.js.map +1 -1
  76. package/dist/src/core/presets.d.ts.map +1 -1
  77. package/dist/src/core/presets.js +49 -15
  78. package/dist/src/core/presets.js.map +1 -1
  79. package/dist/src/core/types.d.ts +5 -0
  80. package/dist/src/core/types.d.ts.map +1 -1
  81. package/dist/src/index.d.ts +3 -2
  82. package/dist/src/index.d.ts.map +1 -1
  83. package/dist/src/index.js +2 -2
  84. package/dist/src/index.js.map +1 -1
  85. package/dist/src/llm/model-registry.d.ts +25 -0
  86. package/dist/src/llm/model-registry.d.ts.map +1 -1
  87. package/dist/src/llm/model-registry.js +223 -22
  88. package/dist/src/llm/model-registry.js.map +1 -1
  89. package/dist/src/llm/model-watcher.d.ts +26 -0
  90. package/dist/src/llm/model-watcher.d.ts.map +1 -0
  91. package/dist/src/llm/model-watcher.js +130 -0
  92. package/dist/src/llm/model-watcher.js.map +1 -0
  93. package/dist/src/llm/ollama.d.ts +13 -1
  94. package/dist/src/llm/ollama.d.ts.map +1 -1
  95. package/dist/src/llm/ollama.js +309 -93
  96. package/dist/src/llm/ollama.js.map +1 -1
  97. package/dist/src/session/compaction.js +4 -0
  98. package/dist/src/session/compaction.js.map +1 -1
  99. package/dist/src/session/project-context.d.ts.map +1 -1
  100. package/dist/src/session/project-context.js +54 -4
  101. package/dist/src/session/project-context.js.map +1 -1
  102. package/dist/src/session/prompt-builder.d.ts +28 -1
  103. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  104. package/dist/src/session/prompt-builder.js +97 -23
  105. package/dist/src/session/prompt-builder.js.map +1 -1
  106. package/dist/src/session/session-manager.d.ts +10 -3
  107. package/dist/src/session/session-manager.d.ts.map +1 -1
  108. package/dist/src/session/session-manager.js +53 -16
  109. package/dist/src/session/session-manager.js.map +1 -1
  110. package/dist/src/session/session-persistence.d.ts +12 -0
  111. package/dist/src/session/session-persistence.d.ts.map +1 -1
  112. package/dist/src/session/session-persistence.js +94 -4
  113. package/dist/src/session/session-persistence.js.map +1 -1
  114. package/dist/src/tools/built-in/bash-security.d.ts +13 -0
  115. package/dist/src/tools/built-in/bash-security.d.ts.map +1 -0
  116. package/dist/src/tools/built-in/bash-security.js +53 -0
  117. package/dist/src/tools/built-in/bash-security.js.map +1 -0
  118. package/dist/src/tools/built-in/bash.d.ts.map +1 -1
  119. package/dist/src/tools/built-in/bash.js +7 -1
  120. package/dist/src/tools/built-in/bash.js.map +1 -1
  121. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../../src/session/compaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../../src/session/compaction.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../../src/session/project-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8F9E"}
1
+ {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../../src/session/project-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAsH9E"}
@@ -4,6 +4,7 @@
4
4
  import { readFile, stat, readdir } from 'fs/promises';
5
5
  import { join } from 'path';
6
6
  import { spawn } from 'child_process';
7
+ import { homedir } from 'os';
7
8
  export async function discoverProject(rootDir) {
8
9
  const context = {
9
10
  rootDir,
@@ -90,12 +91,21 @@ export async function discoverProject(rootDir) {
90
91
  // not a git repo or git not available
91
92
  }
92
93
  }
93
- // CMDR.md workspace instructions (check both CMDR.md and .cmdr/instructions.md)
94
+ // CMDR.md hierarchical context files
95
+ // Priority: global (~/.cmdr/CMDR.md) < project root < subdirectories (deeper = higher)
94
96
  const instructionParts = [];
97
+ // 1. Global user-level CMDR.md
98
+ try {
99
+ const globalMd = await readFile(join(homedir(), '.cmdr', 'CMDR.md'), 'utf-8');
100
+ if (globalMd.trim())
101
+ instructionParts.push(`<!-- ~/.cmdr/CMDR.md -->\n${globalMd.trim()}`);
102
+ }
103
+ catch { /* no global CMDR.md */ }
104
+ // 2. Project root CMDR.md and .cmdr/instructions.md
95
105
  try {
96
106
  const cmdrMd = await readFile(join(rootDir, 'CMDR.md'), 'utf-8');
97
107
  if (cmdrMd.trim())
98
- instructionParts.push(cmdrMd.trim());
108
+ instructionParts.push(`<!-- CMDR.md -->\n${cmdrMd.trim()}`);
99
109
  }
100
110
  catch { /* no CMDR.md */ }
101
111
  try {
@@ -104,8 +114,25 @@ export async function discoverProject(rootDir) {
104
114
  instructionParts.push(dotCmdrMd.trim());
105
115
  }
106
116
  catch { /* no .cmdr/instructions.md */ }
107
- if (instructionParts.length > 0) {
108
- context.cmdrInstructions = instructionParts.join('\n\n');
117
+ // 3. Scan top-level subdirectories for scoped CMDR.md files
118
+ try {
119
+ const entries = await readdir(rootDir, { withFileTypes: true });
120
+ for (const entry of entries) {
121
+ if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules')
122
+ continue;
123
+ try {
124
+ const subMd = await readFile(join(rootDir, entry.name, 'CMDR.md'), 'utf-8');
125
+ if (subMd.trim())
126
+ instructionParts.push(`<!-- ${entry.name}/CMDR.md -->\n${subMd.trim()}`);
127
+ }
128
+ catch { /* no sub CMDR.md */ }
129
+ }
130
+ }
131
+ catch { /* ignore readdir errors */ }
132
+ // Process @import syntax: lines like "@shared/standards.md"
133
+ const processed = await resolveImports(instructionParts.join('\n\n'), rootDir);
134
+ if (processed.trim()) {
135
+ context.cmdrInstructions = processed;
109
136
  }
110
137
  // Key files
111
138
  try {
@@ -119,6 +146,29 @@ export async function discoverProject(rootDir) {
119
146
  }
120
147
  return context;
121
148
  }
149
+ /** Resolve @path import directives in CMDR.md content. */
150
+ async function resolveImports(content, rootDir) {
151
+ const lines = content.split('\n');
152
+ const result = [];
153
+ for (const line of lines) {
154
+ const importMatch = line.match(/^@(\S+\.md)\s*$/);
155
+ if (importMatch) {
156
+ const importPath = join(rootDir, importMatch[1]);
157
+ try {
158
+ const imported = await readFile(importPath, 'utf-8');
159
+ result.push(`<!-- @${importMatch[1]} -->`);
160
+ result.push(imported.trim());
161
+ }
162
+ catch {
163
+ result.push(`<!-- @${importMatch[1]} (not found) -->`);
164
+ }
165
+ }
166
+ else {
167
+ result.push(line);
168
+ }
169
+ }
170
+ return result.join('\n');
171
+ }
122
172
  async function fileExists(path) {
123
173
  try {
124
174
  await stat(path);
@@ -1 +1 @@
1
- {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../../src/session/project-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../../src/session/project-context.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,34 @@
1
1
  /**
2
- * PromptBuilder — composable prompt construction pipeline.
2
+ * PromptBuilder — modular prompt construction pipeline.
3
+ *
4
+ * Each module has a priority (lower = earlier) and a static flag.
5
+ * Static modules are identical across turns, enabling Ollama KV cache reuse.
3
6
  */
4
7
  import type { ProjectContext } from '../core/types.js';
8
+ export interface PromptModule {
9
+ id: string;
10
+ content: string;
11
+ priority: number;
12
+ isStatic: boolean;
13
+ }
14
+ export declare const PROMPT_PRIORITIES: {
15
+ readonly ROLE: 10;
16
+ readonly TOOL_POLICY: 20;
17
+ readonly PROJECT_INSTRUCTIONS: 30;
18
+ readonly SKILLS: 40;
19
+ readonly PROJECT_CONTEXT: 50;
20
+ readonly RUNTIME_CONTEXT: 60;
21
+ readonly CONVERSATION_STATE: 70;
22
+ };
23
+ export declare class PromptBuilder {
24
+ private modules;
25
+ addModule(mod: PromptModule): void;
26
+ updateModule(id: string, content: string): void;
27
+ removeModule(id: string): void;
28
+ build(): string;
29
+ /** Returns only static modules — for KV cache prefix estimation. */
30
+ getStaticPrefix(): string;
31
+ }
5
32
  export interface PromptBuildOptions {
6
33
  basePrompt: string;
7
34
  projectContext: ProjectContext;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAwCrE"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAID,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAA;AAIV,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IAEjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAIlC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,MAAM;IAQf,oEAAoE;IACpE,eAAe,IAAI,MAAM;CAQ1B;AAID,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAmErE"}
@@ -1,39 +1,113 @@
1
1
  /**
2
- * PromptBuilder — composable prompt construction pipeline.
2
+ * PromptBuilder — modular prompt construction pipeline.
3
+ *
4
+ * Each module has a priority (lower = earlier) and a static flag.
5
+ * Static modules are identical across turns, enabling Ollama KV cache reuse.
3
6
  */
4
- export function buildSystemPrompt(options) {
5
- const parts = [options.basePrompt];
6
- // Inject project context
7
- const ctx = options.projectContext;
8
- const contextParts = [];
9
- if (ctx.language !== 'unknown') {
10
- contextParts.push(`Language: ${ctx.language}`);
7
+ /* ── Priority constants ────────────────────────────────────────────── */
8
+ export const PROMPT_PRIORITIES = {
9
+ ROLE: 10,
10
+ TOOL_POLICY: 20,
11
+ PROJECT_INSTRUCTIONS: 30,
12
+ SKILLS: 40,
13
+ PROJECT_CONTEXT: 50,
14
+ RUNTIME_CONTEXT: 60,
15
+ CONVERSATION_STATE: 70,
16
+ };
17
+ /* ── PromptBuilder class ───────────────────────────────────────────── */
18
+ export class PromptBuilder {
19
+ modules = new Map();
20
+ addModule(mod) {
21
+ this.modules.set(mod.id, mod);
11
22
  }
12
- if (ctx.framework) {
13
- contextParts.push(`Framework: ${ctx.framework}`);
23
+ updateModule(id, content) {
24
+ const existing = this.modules.get(id);
25
+ if (existing) {
26
+ existing.content = content;
27
+ }
14
28
  }
15
- if (ctx.packageManager) {
16
- contextParts.push(`Package manager: ${ctx.packageManager}`);
29
+ removeModule(id) {
30
+ this.modules.delete(id);
17
31
  }
18
- if (ctx.gitBranch) {
19
- contextParts.push(`Git branch: ${ctx.gitBranch}`);
32
+ build() {
33
+ return [...this.modules.values()]
34
+ .sort((a, b) => a.priority - b.priority)
35
+ .map(m => m.content)
36
+ .filter(c => c.length > 0)
37
+ .join('\n\n');
20
38
  }
21
- if (contextParts.length > 0) {
22
- parts.push(`\n\nProject context:\n${contextParts.join('\n')}\nRoot: ${ctx.rootDir}`);
39
+ /** Returns only static modules — for KV cache prefix estimation. */
40
+ getStaticPrefix() {
41
+ return [...this.modules.values()]
42
+ .filter(m => m.isStatic)
43
+ .sort((a, b) => a.priority - b.priority)
44
+ .map(m => m.content)
45
+ .filter(c => c.length > 0)
46
+ .join('\n\n');
23
47
  }
24
- // Inject CMDR.md workspace instructions
48
+ }
49
+ export function buildSystemPrompt(options) {
50
+ const builder = new PromptBuilder();
51
+ const ctx = options.projectContext;
52
+ // 10: Role — base system prompt (STATIC)
53
+ builder.addModule({
54
+ id: 'role',
55
+ content: options.basePrompt,
56
+ priority: PROMPT_PRIORITIES.ROLE,
57
+ isStatic: true,
58
+ });
59
+ // 30: Project instructions — CMDR.md (STATIC per session)
25
60
  if (ctx.cmdrInstructions) {
26
- parts.push(`\n\n<project_instructions>\nThe user has provided the following instructions for this project. Follow them unless they conflict with safety:\n\n${ctx.cmdrInstructions}\n</project_instructions>`);
61
+ builder.addModule({
62
+ id: 'project_instructions',
63
+ content: `<project_instructions>\nThe user has provided the following instructions for this project. Follow them unless they conflict with safety:\n\n${ctx.cmdrInstructions}\n</project_instructions>`,
64
+ priority: PROMPT_PRIORITIES.PROJECT_INSTRUCTIONS,
65
+ isStatic: true,
66
+ });
27
67
  }
28
- // Inject active skills
68
+ // 40: Skills (STATIC per turn)
29
69
  if (ctx.activeSkills && ctx.activeSkills.length > 0) {
30
- for (const skill of ctx.activeSkills) {
70
+ const skillBlocks = ctx.activeSkills.map(skill => {
31
71
  const scriptNote = skill.scripts.length > 0
32
72
  ? `\n\nHelper scripts available at:\n${skill.scripts.map(s => ` - ${s}`).join('\n')}`
33
73
  : '';
34
- parts.push(`\n\n<skill name="${skill.name}">\n${skill.instructions}${scriptNote}\n</skill>`);
35
- }
74
+ return `<skill name="${skill.name}">\n${skill.instructions}${scriptNote}\n</skill>`;
75
+ });
76
+ builder.addModule({
77
+ id: 'skills',
78
+ content: skillBlocks.join('\n\n'),
79
+ priority: PROMPT_PRIORITIES.SKILLS,
80
+ isStatic: true,
81
+ });
82
+ }
83
+ // 50: Project context (STATIC per session)
84
+ const contextParts = [];
85
+ if (ctx.language !== 'unknown')
86
+ contextParts.push(`Language: ${ctx.language}`);
87
+ if (ctx.framework)
88
+ contextParts.push(`Framework: ${ctx.framework}`);
89
+ if (ctx.packageManager)
90
+ contextParts.push(`Package manager: ${ctx.packageManager}`);
91
+ if (contextParts.length > 0) {
92
+ builder.addModule({
93
+ id: 'project_context',
94
+ content: `Project context:\n${contextParts.join('\n')}\nRoot: ${ctx.rootDir}`,
95
+ priority: PROMPT_PRIORITIES.PROJECT_CONTEXT,
96
+ isStatic: true,
97
+ });
98
+ }
99
+ // 60: Runtime context — dynamic per turn (git branch, etc.)
100
+ const runtimeParts = [];
101
+ if (ctx.gitBranch)
102
+ runtimeParts.push(`Git branch: ${ctx.gitBranch}`);
103
+ if (runtimeParts.length > 0) {
104
+ builder.addModule({
105
+ id: 'runtime_context',
106
+ content: `Runtime:\n${runtimeParts.join('\n')}`,
107
+ priority: PROMPT_PRIORITIES.RUNTIME_CONTEXT,
108
+ isStatic: false,
109
+ });
36
110
  }
37
- return parts.join('');
111
+ return builder.build();
38
112
  }
39
113
  //# sourceMappingURL=prompt-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAE5C,yBAAyB;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAA;IAClC,MAAM,YAAY,GAAa,EAAE,CAAA;IAEjC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,wCAAwC;IACxC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mJAAmJ,GAAG,CAAC,gBAAgB,2BAA2B,CAAC,CAAA;IAChN,CAAC;IAED,uBAAuB;IACvB,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACzC,CAAC,CAAC,qCAAqC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtF,CAAC,CAAC,EAAE,CAAA;YACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,YAAY,GAAG,UAAU,YAAY,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/session/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,28 @@
1
1
  /**
2
- * SessionManager — conversation history with token counting and compaction.
2
+ * SessionManager — append-only conversation history with token counting and compaction.
3
+ *
4
+ * Messages are never deleted. On compaction, old messages are flagged as
5
+ * transcript-only and a compact summary is inserted as a boundary.
3
6
  */
4
7
  import type { LLMMessage, LLMAdapter, SessionState, ProjectContext, TokenUsage } from '../core/types.js';
5
8
  export declare class SessionManager {
6
9
  private session;
7
10
  private compactionConfig;
11
+ private consecutiveCompactFailures;
8
12
  constructor(projectContext: ProjectContext, maxContextTokens?: number);
9
13
  get id(): string;
10
- get messages(): LLMMessage[];
11
14
  get tokenCount(): number;
12
15
  get projectContext(): ProjectContext;
16
+ /** All messages including transcript-only (full history). */
17
+ get messages(): LLMMessage[];
18
+ /** Messages that should be sent to the LLM API (excludes transcript-only and meta). */
19
+ getApiMessages(): LLMMessage[];
13
20
  addMessage(message: LLMMessage): void;
14
21
  addMessages(messages: LLMMessage[]): void;
15
22
  shouldCompact(): boolean;
16
23
  /**
17
24
  * Multi-stage compaction: truncate tool results → LLM summary → hard truncation.
18
- * Returns the number of tokens saved.
25
+ * Uses append-only pattern: old messages are flagged, not removed.
19
26
  */
20
27
  compact(adapter: LLMAdapter, model: string): Promise<{
21
28
  before: number;
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AASxG,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,gBAAgB,CAAkB;gBAE9B,cAAc,EAAE,cAAc,EAAE,gBAAgB,SAAQ;IAgBpE,IAAI,EAAE,IAAI,MAAM,CAA2B;IAC3C,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAiC;IAC7D,IAAI,UAAU,IAAI,MAAM,CAAmC;IAC3D,IAAI,cAAc,IAAI,cAAc,CAAuC;IAE3E,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAMrC,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;IAQzC,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBlH,KAAK,IAAI,IAAI;IAKb,mEAAmE;IACnE,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAQnD,aAAa,IAAI,UAAU;IAO3B,QAAQ,IAAI,YAAY;IAIxB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMnC,iEAAiE;IACjE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;CAK5C"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWxG,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,0BAA0B,CAAI;gBAE1B,cAAc,EAAE,cAAc,EAAE,gBAAgB,SAAQ;IAgBpE,IAAI,EAAE,IAAI,MAAM,CAA2B;IAC3C,IAAI,UAAU,IAAI,MAAM,CAAmC;IAC3D,IAAI,cAAc,IAAI,cAAc,CAAuC;IAE3E,6DAA6D;IAC7D,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAiC;IAE7D,uFAAuF;IACvF,cAAc,IAAI,UAAU,EAAE;IAM9B,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAMrC,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;IAQzC,aAAa,IAAI,OAAO;IAOxB;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA6ClH,KAAK,IAAI,IAAI;IAMb,mEAAmE;IACnE,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAQnD,aAAa,IAAI,UAAU;IAO3B,QAAQ,IAAI,YAAY;IAIxB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMnC,iEAAiE;IACjE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;CAK5C"}
@@ -1,11 +1,16 @@
1
1
  /**
2
- * SessionManager — conversation history with token counting and compaction.
2
+ * SessionManager — append-only conversation history with token counting and compaction.
3
+ *
4
+ * Messages are never deleted. On compaction, old messages are flagged as
5
+ * transcript-only and a compact summary is inserted as a boundary.
3
6
  */
4
7
  import { countMessageTokens } from '../llm/token-counter.js';
5
8
  import { shouldCompact as checkCompact, compactHistory, DEFAULT_COMPACTION_CONFIG, } from './compaction.js';
9
+ const MAX_COMPACT_FAILURES = 3;
6
10
  export class SessionManager {
7
11
  session;
8
12
  compactionConfig;
13
+ consecutiveCompactFailures = 0;
9
14
  constructor(projectContext, maxContextTokens = 32768) {
10
15
  this.session = {
11
16
  id: `session_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
@@ -22,43 +27,75 @@ export class SessionManager {
22
27
  };
23
28
  }
24
29
  get id() { return this.session.id; }
25
- get messages() { return this.session.messages; }
26
30
  get tokenCount() { return this.session.tokenCount; }
27
31
  get projectContext() { return this.session.projectContext; }
32
+ /** All messages including transcript-only (full history). */
33
+ get messages() { return this.session.messages; }
34
+ /** Messages that should be sent to the LLM API (excludes transcript-only and meta). */
35
+ getApiMessages() {
36
+ return this.session.messages.filter(m => !m.isVisibleInTranscriptOnly && !m.isMeta);
37
+ }
28
38
  addMessage(message) {
29
39
  this.session.messages.push(message);
30
- this.session.tokenCount = countMessageTokens(this.session.messages);
40
+ this.session.tokenCount = countMessageTokens(this.getApiMessages());
31
41
  this.session.lastActivity = new Date();
32
42
  }
33
43
  addMessages(messages) {
34
44
  for (const msg of messages) {
35
45
  this.session.messages.push(msg);
36
46
  }
37
- this.session.tokenCount = countMessageTokens(this.session.messages);
47
+ this.session.tokenCount = countMessageTokens(this.getApiMessages());
38
48
  this.session.lastActivity = new Date();
39
49
  }
40
50
  shouldCompact() {
41
- return checkCompact(this.session.messages, this.session.tokenCount, this.compactionConfig);
51
+ if (this.consecutiveCompactFailures >= MAX_COMPACT_FAILURES) {
52
+ return false; // Circuit breaker: stop trying after repeated failures
53
+ }
54
+ return checkCompact(this.getApiMessages(), this.session.tokenCount, this.compactionConfig);
42
55
  }
43
56
  /**
44
57
  * Multi-stage compaction: truncate tool results → LLM summary → hard truncation.
45
- * Returns the number of tokens saved.
58
+ * Uses append-only pattern: old messages are flagged, not removed.
46
59
  */
47
60
  async compact(adapter, model) {
48
- const before = this.session.tokenCount;
49
- const beforeCount = this.session.messages.length;
50
- const result = await compactHistory(this.session.messages, this.compactionConfig, adapter, model);
51
- this.session.messages = result.messages;
52
- this.session.tokenCount = countMessageTokens(this.session.messages);
53
- return {
54
- before: beforeCount,
55
- after: this.session.messages.length,
56
- tokensSaved: result.tokensSaved,
57
- };
61
+ const apiMessages = this.getApiMessages();
62
+ const before = apiMessages.length;
63
+ const beforeTokens = this.session.tokenCount;
64
+ try {
65
+ const result = await compactHistory(apiMessages, this.compactionConfig, adapter, model);
66
+ // Flag old API messages as transcript-only
67
+ for (const msg of this.session.messages) {
68
+ if (!msg.isVisibleInTranscriptOnly && !msg.isMeta) {
69
+ // If this message isn't in the compacted result, flag it
70
+ if (!result.messages.includes(msg)) {
71
+ msg.isVisibleInTranscriptOnly = true;
72
+ }
73
+ }
74
+ }
75
+ // Insert new messages from compaction (summary boundary etc.)
76
+ for (const msg of result.messages) {
77
+ if (msg.isCompactSummary || msg.isCompactBoundary) {
78
+ // Find insertion point: after all existing messages
79
+ this.session.messages.push(msg);
80
+ }
81
+ }
82
+ this.session.tokenCount = countMessageTokens(this.getApiMessages());
83
+ this.consecutiveCompactFailures = 0;
84
+ return {
85
+ before,
86
+ after: this.getApiMessages().length,
87
+ tokensSaved: beforeTokens - this.session.tokenCount,
88
+ };
89
+ }
90
+ catch (err) {
91
+ this.consecutiveCompactFailures++;
92
+ throw err;
93
+ }
58
94
  }
59
95
  clear() {
60
96
  this.session.messages = [];
61
97
  this.session.tokenCount = 0;
98
+ this.consecutiveCompactFailures = 0;
62
99
  }
63
100
  /** Update the max context tokens (e.g. after switching models). */
64
101
  updateContextLength(maxContextTokens) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  /**
2
2
  * Session persistence — save/load conversation sessions to ~/.cmdr/sessions/.
3
+ *
4
+ * Uses append-only JSONL (one JSON object per line) for crash-safe writes.
5
+ * Each line is one of:
6
+ * {"type":"meta","sessionId":"...","model":"...","projectRoot":"...","createdAt":"..."}
7
+ * {"type":"message","role":"user","content":[...],"timestamp":"..."}
8
+ * {"type":"compact","boundaryIndex":42,"summary":"...","timestamp":"..."}
3
9
  */
4
10
  import type { LLMMessage, SessionState } from '../core/types.js';
5
11
  export interface SavedSession {
@@ -12,6 +18,12 @@ export interface SavedSession {
12
18
  toolsUsed?: string[];
13
19
  summary?: string;
14
20
  }
21
+ /** Append a single message to the JSONL session file. */
22
+ export declare function appendSessionMessage(sessionId: string, msg: LLMMessage): Promise<void>;
23
+ /** Write session meta header (called once at session start). */
24
+ export declare function writeSessionMeta(sessionId: string, model: string, projectRoot: string): Promise<void>;
25
+ /** Append a compaction marker to the journal. */
26
+ export declare function appendCompactMarker(sessionId: string, boundaryIndex: number, summary: string): Promise<void>;
15
27
  export declare function saveSession(sessionState: SessionState, model: string): Promise<string>;
16
28
  export declare function loadSession(sessionId: string): Promise<SavedSession | null>;
17
29
  /** Find the most recent session for a given project directory. */
@@ -1 +1 @@
1
- {"version":3,"file":"session-persistence.d.ts","sourceRoot":"","sources":["../../../src/session/session-persistence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,kBAAkB,CAAA;AAKhF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAoCD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQjF;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAKzF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAC,CAAC,CAuCF;AAED,sCAAsC;AACtC,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,UAAU,SAAO;IAI7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAYvC,+BAA+B;IAC/B,MAAM,IAAI,IAAI;IAOd,yCAAyC;IACnC,KAAK,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpD"}
1
+ {"version":3,"file":"session-persistence.d.ts","sourceRoot":"","sources":["../../../src/session/session-persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,kBAAkB,CAAA;AAKhF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAwED,yDAAyD;AACzD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,gEAAgE;AAChE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,iDAAiD;AACjD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAQf;AAMD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAkBjB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkDjF;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAKzF;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAC,CAAC,CAuCF;AAED,sCAAsC;AACtC,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,UAAU,SAAO;IAI7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAYvC,+BAA+B;IAC/B,MAAM,IAAI,IAAI;IAOd,yCAAyC;IACnC,KAAK,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAIpD"}