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.
- package/README.md +19 -0
- package/dist/bin/cmdr.js +3 -1
- package/dist/bin/cmdr.js.map +1 -1
- package/dist/src/agents/executor.d.ts +32 -0
- package/dist/src/agents/executor.d.ts.map +1 -0
- package/dist/src/agents/executor.js +50 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/index.d.ts +7 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +7 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/registry.d.ts +36 -0
- package/dist/src/agents/registry.d.ts.map +1 -0
- package/dist/src/agents/registry.js +168 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/subagent-tool.d.ts +27 -0
- package/dist/src/agents/subagent-tool.d.ts.map +1 -0
- package/dist/src/agents/subagent-tool.js +36 -0
- package/dist/src/agents/subagent-tool.js.map +1 -0
- package/dist/src/cli/args.d.ts +2 -0
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +8 -0
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/cli/commands.d.ts.map +1 -1
- package/dist/src/cli/commands.js +92 -4
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/ink/App.d.ts +4 -0
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +164 -20
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/ink/StatusBar.d.ts +17 -0
- package/dist/src/cli/ink/StatusBar.d.ts.map +1 -0
- package/dist/src/cli/ink/StatusBar.js +32 -0
- package/dist/src/cli/ink/StatusBar.js.map +1 -0
- package/dist/src/cli/repl.d.ts +2 -0
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +117 -4
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/cli/theme.d.ts +42 -22
- package/dist/src/cli/theme.d.ts.map +1 -1
- package/dist/src/cli/theme.js +25 -1
- package/dist/src/cli/theme.js.map +1 -1
- package/dist/src/cli/themes.d.ts +57 -0
- package/dist/src/cli/themes.d.ts.map +1 -0
- package/dist/src/cli/themes.js +98 -0
- package/dist/src/cli/themes.js.map +1 -0
- package/dist/src/commands/index.d.ts +3 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +2 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/loader.d.ts +35 -0
- package/dist/src/commands/loader.d.ts.map +1 -0
- package/dist/src/commands/loader.js +134 -0
- package/dist/src/commands/loader.js.map +1 -0
- package/dist/src/config/config-loader.d.ts.map +1 -1
- package/dist/src/config/config-loader.js +2 -0
- package/dist/src/config/config-loader.js.map +1 -1
- package/dist/src/config/defaults.d.ts.map +1 -1
- package/dist/src/config/defaults.js +1 -0
- package/dist/src/config/defaults.js.map +1 -1
- package/dist/src/config/schema.d.ts +3 -0
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +1 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +39 -5
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +1 -1
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +4 -3
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/intent.d.ts +2 -0
- package/dist/src/core/intent.d.ts.map +1 -1
- package/dist/src/core/intent.js +12 -0
- package/dist/src/core/intent.js.map +1 -1
- package/dist/src/core/presets.d.ts.map +1 -1
- package/dist/src/core/presets.js +49 -15
- package/dist/src/core/presets.js.map +1 -1
- package/dist/src/core/types.d.ts +5 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/model-registry.d.ts +25 -0
- package/dist/src/llm/model-registry.d.ts.map +1 -1
- package/dist/src/llm/model-registry.js +223 -22
- package/dist/src/llm/model-registry.js.map +1 -1
- package/dist/src/llm/model-watcher.d.ts +26 -0
- package/dist/src/llm/model-watcher.d.ts.map +1 -0
- package/dist/src/llm/model-watcher.js +130 -0
- package/dist/src/llm/model-watcher.js.map +1 -0
- package/dist/src/llm/ollama.d.ts +13 -1
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +309 -93
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/session/compaction.js +4 -0
- package/dist/src/session/compaction.js.map +1 -1
- package/dist/src/session/project-context.d.ts.map +1 -1
- package/dist/src/session/project-context.js +54 -4
- package/dist/src/session/project-context.js.map +1 -1
- package/dist/src/session/prompt-builder.d.ts +28 -1
- package/dist/src/session/prompt-builder.d.ts.map +1 -1
- package/dist/src/session/prompt-builder.js +97 -23
- package/dist/src/session/prompt-builder.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +10 -3
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +53 -16
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session/session-persistence.d.ts +12 -0
- package/dist/src/session/session-persistence.d.ts.map +1 -1
- package/dist/src/session/session-persistence.js +94 -4
- package/dist/src/session/session-persistence.js.map +1 -1
- package/dist/src/tools/built-in/bash-security.d.ts +13 -0
- package/dist/src/tools/built-in/bash-security.d.ts.map +1 -0
- package/dist/src/tools/built-in/bash-security.js +53 -0
- package/dist/src/tools/built-in/bash-security.js.map +1 -0
- package/dist/src/tools/built-in/bash.d.ts.map +1 -1
- package/dist/src/tools/built-in/bash.js +7 -1
- package/dist/src/tools/built-in/bash.js.map +1 -1
- 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;
|
|
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
|
|
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
|
-
|
|
108
|
-
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;
|
|
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 —
|
|
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
|
|
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 —
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
13
|
-
|
|
23
|
+
updateModule(id, content) {
|
|
24
|
+
const existing = this.modules.get(id);
|
|
25
|
+
if (existing) {
|
|
26
|
+
existing.content = content;
|
|
27
|
+
}
|
|
14
28
|
}
|
|
15
|
-
|
|
16
|
-
|
|
29
|
+
removeModule(id) {
|
|
30
|
+
this.modules.delete(id);
|
|
17
31
|
}
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
68
|
+
// 40: Skills (STATIC per turn)
|
|
29
69
|
if (ctx.activeSkills && ctx.activeSkills.length > 0) {
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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.
|
|
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.
|
|
47
|
+
this.session.tokenCount = countMessageTokens(this.getApiMessages());
|
|
38
48
|
this.session.lastActivity = new Date();
|
|
39
49
|
}
|
|
40
50
|
shouldCompact() {
|
|
41
|
-
|
|
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
|
-
*
|
|
58
|
+
* Uses append-only pattern: old messages are flagged, not removed.
|
|
46
59
|
*/
|
|
47
60
|
async compact(adapter, model) {
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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":"AAAA
|
|
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
|
|
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"}
|