joonecli 0.1.0 → 0.2.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 +12 -12
- package/dist/__tests__/optimizations.test.js.map +1 -1
- package/dist/__tests__/promptBuilder.test.js +14 -20
- package/dist/__tests__/promptBuilder.test.js.map +1 -1
- package/dist/agents/agentRegistry.d.ts +37 -0
- package/dist/agents/agentRegistry.js +58 -0
- package/dist/agents/agentRegistry.js.map +1 -0
- package/dist/agents/agentSpec.d.ts +54 -0
- package/dist/agents/agentSpec.js +9 -0
- package/dist/agents/agentSpec.js.map +1 -0
- package/dist/agents/builtinAgents.d.ts +20 -0
- package/{src/agents/builtinAgents.ts → dist/agents/builtinAgents.js} +84 -101
- package/dist/agents/builtinAgents.js.map +1 -0
- package/dist/cli/config.d.ts +4 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +29 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall.d.ts +2 -0
- package/dist/cli/postinstall.js +25 -0
- package/dist/cli/postinstall.js.map +1 -0
- package/dist/commands/builtinCommands.d.ts +21 -0
- package/dist/commands/builtinCommands.js +241 -0
- package/dist/commands/builtinCommands.js.map +1 -0
- package/dist/commands/commandRegistry.d.ts +92 -0
- package/dist/commands/commandRegistry.js +128 -0
- package/dist/commands/commandRegistry.js.map +1 -0
- package/dist/core/agentLoop.d.ts +7 -2
- package/dist/core/agentLoop.js +35 -13
- package/dist/core/agentLoop.js.map +1 -1
- package/dist/core/autoSave.d.ts +41 -0
- package/dist/core/autoSave.js +69 -0
- package/dist/core/autoSave.js.map +1 -0
- package/dist/core/compactor.d.ts +66 -0
- package/dist/core/compactor.js +170 -0
- package/dist/core/compactor.js.map +1 -0
- package/dist/core/contextGuard.d.ts +38 -0
- package/dist/core/contextGuard.js +122 -0
- package/dist/core/contextGuard.js.map +1 -0
- package/dist/core/events.d.ts +45 -0
- package/dist/core/events.js +8 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/promptBuilder.d.ts +16 -1
- package/dist/core/promptBuilder.js +27 -14
- package/dist/core/promptBuilder.js.map +1 -1
- package/dist/core/sessionResumer.js +3 -3
- package/dist/core/sessionResumer.js.map +1 -1
- package/dist/core/sessionStore.js +3 -2
- package/dist/core/sessionStore.js.map +1 -1
- package/dist/core/subAgent.d.ts +56 -0
- package/dist/core/subAgent.js +240 -0
- package/dist/core/subAgent.js.map +1 -0
- package/dist/core/tokenCounter.d.ts +8 -1
- package/dist/core/tokenCounter.js +28 -0
- package/dist/core/tokenCounter.js.map +1 -1
- package/dist/debug_google.d.ts +1 -0
- package/dist/debug_google.js +23 -0
- package/dist/debug_google.js.map +1 -0
- package/dist/middleware/permission.js +1 -0
- package/dist/middleware/permission.js.map +1 -1
- package/dist/test_google.d.ts +1 -0
- package/dist/test_google.js +32 -89
- package/dist/test_google.js.map +1 -0
- package/dist/tools/browser.js +4 -1
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +11 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/installHostDeps.d.ts +2 -0
- package/dist/tools/installHostDeps.js +37 -0
- package/dist/tools/installHostDeps.js.map +1 -0
- package/dist/tools/router.js +3 -0
- package/dist/tools/router.js.map +1 -1
- package/dist/tools/spawnAgent.d.ts +19 -0
- package/dist/tools/spawnAgent.js +132 -0
- package/dist/tools/spawnAgent.js.map +1 -0
- package/dist/tracing/sessionTracer.d.ts +1 -0
- package/dist/tracing/sessionTracer.js +4 -1
- package/dist/tracing/sessionTracer.js.map +1 -1
- package/dist/ui/App.js +94 -6
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActionLog.d.ts +7 -0
- package/dist/ui/components/ActionLog.js +63 -0
- package/dist/ui/components/ActionLog.js.map +1 -0
- package/dist/ui/components/FileBrowser.d.ts +2 -0
- package/dist/ui/components/FileBrowser.js +41 -0
- package/dist/ui/components/FileBrowser.js.map +1 -0
- package/package.json +5 -6
- package/AGENTS.md +0 -56
- package/Handover.md +0 -115
- package/PROGRESS.md +0 -160
- package/docs/01_insights_and_patterns.md +0 -27
- package/docs/02_edge_cases_and_mitigations.md +0 -143
- package/docs/03_initial_implementation_plan.md +0 -66
- package/docs/04_tech_stack_proposal.md +0 -20
- package/docs/05_prd.md +0 -87
- package/docs/06_user_stories.md +0 -72
- package/docs/07_system_architecture.md +0 -138
- package/docs/08_roadmap.md +0 -200
- package/e2b/Dockerfile +0 -26
- package/src/__tests__/bootstrap.test.ts +0 -111
- package/src/__tests__/config.test.ts +0 -97
- package/src/__tests__/m55.test.ts +0 -238
- package/src/__tests__/middleware.test.ts +0 -219
- package/src/__tests__/modelFactory.test.ts +0 -63
- package/src/__tests__/optimizations.test.ts +0 -201
- package/src/__tests__/promptBuilder.test.ts +0 -141
- package/src/__tests__/sandbox.test.ts +0 -102
- package/src/__tests__/security.test.ts +0 -122
- package/src/__tests__/streaming.test.ts +0 -82
- package/src/__tests__/toolRouter.test.ts +0 -52
- package/src/__tests__/tools.test.ts +0 -146
- package/src/__tests__/tracing.test.ts +0 -196
- package/src/agents/agentRegistry.ts +0 -69
- package/src/agents/agentSpec.ts +0 -67
- package/src/cli/config.ts +0 -124
- package/src/cli/index.ts +0 -730
- package/src/cli/modelFactory.ts +0 -174
- package/src/cli/providers.ts +0 -107
- package/src/commands/builtinCommands.ts +0 -293
- package/src/commands/commandRegistry.ts +0 -194
- package/src/core/agentLoop.d.ts.map +0 -1
- package/src/core/agentLoop.ts +0 -312
- package/src/core/autoSave.ts +0 -95
- package/src/core/compactor.ts +0 -252
- package/src/core/contextGuard.ts +0 -129
- package/src/core/errors.ts +0 -202
- package/src/core/promptBuilder.d.ts.map +0 -1
- package/src/core/promptBuilder.ts +0 -139
- package/src/core/reasoningRouter.ts +0 -121
- package/src/core/retry.ts +0 -75
- package/src/core/sessionResumer.ts +0 -90
- package/src/core/sessionStore.ts +0 -215
- package/src/core/subAgent.ts +0 -339
- package/src/core/tokenCounter.ts +0 -64
- package/src/evals/dataset.ts +0 -67
- package/src/evals/evaluator.ts +0 -81
- package/src/hitl/bridge.ts +0 -160
- package/src/middleware/commandSanitizer.ts +0 -60
- package/src/middleware/loopDetection.ts +0 -63
- package/src/middleware/permission.ts +0 -72
- package/src/middleware/pipeline.ts +0 -75
- package/src/middleware/preCompletion.ts +0 -94
- package/src/middleware/types.ts +0 -45
- package/src/sandbox/bootstrap.ts +0 -121
- package/src/sandbox/manager.ts +0 -239
- package/src/sandbox/sync.ts +0 -157
- package/src/skills/loader.ts +0 -143
- package/src/skills/tools.ts +0 -99
- package/src/skills/types.ts +0 -13
- package/src/test_cache.ts +0 -72
- package/src/test_google.js +0 -40
- package/src/test_google.ts +0 -40
- package/src/tools/askUser.ts +0 -47
- package/src/tools/browser.ts +0 -137
- package/src/tools/index.d.ts.map +0 -1
- package/src/tools/index.ts +0 -237
- package/src/tools/registry.ts +0 -198
- package/src/tools/router.ts +0 -78
- package/src/tools/security.ts +0 -220
- package/src/tools/spawnAgent.ts +0 -158
- package/src/tools/webSearch.ts +0 -142
- package/src/tracing/analyzer.ts +0 -265
- package/src/tracing/langsmith.ts +0 -63
- package/src/tracing/sessionTracer.ts +0 -202
- package/src/tracing/types.ts +0 -49
- package/src/types/valyu.d.ts +0 -37
- package/src/ui/App.tsx +0 -404
- package/src/ui/components/HITLPrompt.tsx +0 -119
- package/src/ui/components/Header.tsx +0 -51
- package/src/ui/components/MessageBubble.tsx +0 -46
- package/src/ui/components/StatusBar.tsx +0 -138
- package/src/ui/components/StreamingText.tsx +0 -48
- package/src/ui/components/ToolCallPanel.tsx +0 -80
- package/tests/commands/commands.test.ts +0 -356
- package/tests/core/compactor.test.ts +0 -217
- package/tests/core/retryAndErrors.test.ts +0 -164
- package/tests/core/sessionResumer.test.ts +0 -95
- package/tests/core/sessionStore.test.ts +0 -84
- package/tests/core/stability.test.ts +0 -165
- package/tests/core/subAgent.test.ts +0 -238
- package/tests/hitl/hitlBridge.test.ts +0 -115
- package/tsconfig.json +0 -16
- package/vitest.config.ts +0 -10
- package/vitest.out +0 -48
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slash Command Registry
|
|
3
|
+
*
|
|
4
|
+
* Intercepts user input starting with "/" in the TUI and routes it to
|
|
5
|
+
* registered command handlers. This bypasses the agent loop entirely,
|
|
6
|
+
* making slash commands zero-cost (no LLM tokens consumed).
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - Commands are self-contained objects implementing SlashCommand
|
|
10
|
+
* - The registry supports aliases (e.g., /m → /model)
|
|
11
|
+
* - Unknown commands suggest similar names via Levenshtein distance
|
|
12
|
+
*/
|
|
13
|
+
// ─── Levenshtein Distance ───────────────────────────────────────────────────────
|
|
14
|
+
/**
|
|
15
|
+
* Computes the Levenshtein edit distance between two strings.
|
|
16
|
+
* Used for "did you mean?" suggestions on unknown commands.
|
|
17
|
+
*/
|
|
18
|
+
export function levenshteinDistance(a, b) {
|
|
19
|
+
const matrix = [];
|
|
20
|
+
for (let i = 0; i <= b.length; i++) {
|
|
21
|
+
matrix[i] = [i];
|
|
22
|
+
}
|
|
23
|
+
for (let j = 0; j <= a.length; j++) {
|
|
24
|
+
matrix[0][j] = j;
|
|
25
|
+
}
|
|
26
|
+
for (let i = 1; i <= b.length; i++) {
|
|
27
|
+
for (let j = 1; j <= a.length; j++) {
|
|
28
|
+
const cost = b.charAt(i - 1) === a.charAt(j - 1) ? 0 : 1;
|
|
29
|
+
matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion
|
|
30
|
+
matrix[i][j - 1] + 1, // insertion
|
|
31
|
+
matrix[i - 1][j - 1] + cost // substitution
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return matrix[b.length][a.length];
|
|
36
|
+
}
|
|
37
|
+
// ─── Registry ───────────────────────────────────────────────────────────────────
|
|
38
|
+
export class CommandRegistry {
|
|
39
|
+
commands = new Map();
|
|
40
|
+
aliasMap = new Map();
|
|
41
|
+
/**
|
|
42
|
+
* Register a slash command. Overwrites if name already exists.
|
|
43
|
+
*/
|
|
44
|
+
register(command) {
|
|
45
|
+
this.commands.set(command.name, command);
|
|
46
|
+
if (command.aliases) {
|
|
47
|
+
for (const alias of command.aliases) {
|
|
48
|
+
this.aliasMap.set(alias, command.name);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns true if the input looks like a slash command.
|
|
54
|
+
*/
|
|
55
|
+
isCommand(input) {
|
|
56
|
+
return input.trimStart().startsWith("/");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse user input into command name and arguments.
|
|
60
|
+
*/
|
|
61
|
+
parse(input) {
|
|
62
|
+
const trimmed = input.trimStart().slice(1); // Remove leading "/"
|
|
63
|
+
const spaceIdx = trimmed.indexOf(" ");
|
|
64
|
+
if (spaceIdx === -1) {
|
|
65
|
+
return { name: trimmed.toLowerCase(), args: "" };
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
name: trimmed.slice(0, spaceIdx).toLowerCase(),
|
|
69
|
+
args: trimmed.slice(spaceIdx + 1).trim(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute a slash command from raw user input.
|
|
74
|
+
* Returns the command output string, or an error/suggestion message.
|
|
75
|
+
*/
|
|
76
|
+
async execute(input, context) {
|
|
77
|
+
const { name, args } = this.parse(input);
|
|
78
|
+
// Resolve alias → primary name
|
|
79
|
+
const resolvedName = this.aliasMap.get(name) ?? name;
|
|
80
|
+
const command = this.commands.get(resolvedName);
|
|
81
|
+
if (command) {
|
|
82
|
+
const result = await command.execute(args, context);
|
|
83
|
+
return result ?? "";
|
|
84
|
+
}
|
|
85
|
+
// Unknown command — find suggestions
|
|
86
|
+
const allNames = this.getAllNames();
|
|
87
|
+
const suggestions = allNames
|
|
88
|
+
.map((n) => ({ name: n, dist: levenshteinDistance(name, n) }))
|
|
89
|
+
.filter((s) => s.dist <= 2) // Max 2 edits
|
|
90
|
+
.sort((a, b) => a.dist - b.dist)
|
|
91
|
+
.slice(0, 3)
|
|
92
|
+
.map((s) => `/${s.name}`);
|
|
93
|
+
let msg = `Unknown command: /${name}.`;
|
|
94
|
+
if (suggestions.length > 0) {
|
|
95
|
+
msg += ` Did you mean: ${suggestions.join(", ")}?`;
|
|
96
|
+
}
|
|
97
|
+
msg += ` Type /help for all commands.`;
|
|
98
|
+
return msg;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns all registered commands.
|
|
102
|
+
*/
|
|
103
|
+
getAll() {
|
|
104
|
+
return Array.from(this.commands.values());
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns all command names AND aliases (for suggestion matching).
|
|
108
|
+
*/
|
|
109
|
+
getAllNames() {
|
|
110
|
+
const names = Array.from(this.commands.keys());
|
|
111
|
+
const aliases = Array.from(this.aliasMap.keys());
|
|
112
|
+
return [...names, ...aliases];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generates formatted help text for all registered commands.
|
|
116
|
+
*/
|
|
117
|
+
getHelp() {
|
|
118
|
+
const lines = ["Available commands:\n"];
|
|
119
|
+
for (const cmd of this.commands.values()) {
|
|
120
|
+
const aliases = cmd.aliases?.length
|
|
121
|
+
? ` (${cmd.aliases.map((a) => `/${a}`).join(", ")})`
|
|
122
|
+
: "";
|
|
123
|
+
lines.push(` /${cmd.name}${aliases} — ${cmd.description}`);
|
|
124
|
+
}
|
|
125
|
+
return lines.join("\n");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=commandRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRegistry.js","sourceRoot":"","sources":["../../src/commands/commandRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/core/agentLoop.d.ts
CHANGED
|
@@ -5,11 +5,14 @@ import { ContextState } from "./promptBuilder.js";
|
|
|
5
5
|
import { DynamicToolInterface } from "../tools/index.js";
|
|
6
6
|
import { MiddlewarePipeline } from "../middleware/pipeline.js";
|
|
7
7
|
import { SessionTracer } from "../tracing/sessionTracer.js";
|
|
8
|
+
import { AutoSave } from "./autoSave.js";
|
|
9
|
+
import { EventEmitter } from "node:events";
|
|
10
|
+
import { AgentEventEmitter } from "./events.js";
|
|
8
11
|
export interface StreamStepOptions {
|
|
9
12
|
/** Called for each text token received from the stream. */
|
|
10
13
|
onToken?: (token: string) => void;
|
|
11
14
|
}
|
|
12
|
-
export declare class ExecutionHarness {
|
|
15
|
+
export declare class ExecutionHarness extends EventEmitter implements AgentEventEmitter {
|
|
13
16
|
private llm;
|
|
14
17
|
private promptBuilder;
|
|
15
18
|
private availableTools;
|
|
@@ -19,11 +22,13 @@ export declare class ExecutionHarness {
|
|
|
19
22
|
sessionId: string;
|
|
20
23
|
private provider;
|
|
21
24
|
private model;
|
|
25
|
+
private contextGuard;
|
|
26
|
+
autoSave: AutoSave;
|
|
22
27
|
/**
|
|
23
28
|
* Initializes the harness with a pre-configured, tool-bound LLM instance.
|
|
24
29
|
* This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
|
|
25
30
|
*/
|
|
26
|
-
constructor(boundLlm: Runnable<any, AIMessageChunk> | BaseChatModel, tools?: DynamicToolInterface[], pipeline?: MiddlewarePipeline, tracer?: SessionTracer, provider?: string, model?: string, sessionId?: string);
|
|
31
|
+
constructor(boundLlm: Runnable<any, AIMessageChunk> | BaseChatModel, tools?: DynamicToolInterface[], pipeline?: MiddlewarePipeline, tracer?: SessionTracer, provider?: string, model?: string, sessionId?: string, maxTokens?: number);
|
|
27
32
|
/**
|
|
28
33
|
* The main execution engine (non-streaming).
|
|
29
34
|
* Takes the context state, builds the cache-optimized prompt, and queries the LLM.
|
package/dist/core/agentLoop.js
CHANGED
|
@@ -2,12 +2,14 @@ import { AIMessage, ToolMessage, HumanMessage } from "@langchain/core/messages";
|
|
|
2
2
|
import { CacheOptimizedPromptBuilder } from "./promptBuilder.js";
|
|
3
3
|
import { MiddlewarePipeline } from "../middleware/pipeline.js";
|
|
4
4
|
import { SessionTracer } from "../tracing/sessionTracer.js";
|
|
5
|
-
import { countMessageTokens } from "./tokenCounter.js";
|
|
5
|
+
import { countMessageTokens, extractCacheMetrics } from "./tokenCounter.js";
|
|
6
6
|
import { SessionStore } from "./sessionStore.js";
|
|
7
7
|
import { retryWithBackoff } from "./retry.js";
|
|
8
8
|
import { wrapLLMError, JooneError, ToolExecutionError } from "./errors.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
9
|
+
import { ContextGuard, getProviderContextLimit } from "./contextGuard.js";
|
|
10
|
+
import { AutoSave } from "./autoSave.js";
|
|
11
|
+
import { EventEmitter } from "node:events";
|
|
12
|
+
export class ExecutionHarness extends EventEmitter {
|
|
11
13
|
llm;
|
|
12
14
|
promptBuilder;
|
|
13
15
|
availableTools;
|
|
@@ -17,11 +19,14 @@ export class ExecutionHarness {
|
|
|
17
19
|
sessionId;
|
|
18
20
|
provider;
|
|
19
21
|
model;
|
|
22
|
+
contextGuard;
|
|
23
|
+
autoSave;
|
|
20
24
|
/**
|
|
21
25
|
* Initializes the harness with a pre-configured, tool-bound LLM instance.
|
|
22
26
|
* This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
|
|
23
27
|
*/
|
|
24
|
-
constructor(boundLlm, tools = [], pipeline, tracer, provider = "unknown", model = "unknown", sessionId) {
|
|
28
|
+
constructor(boundLlm, tools = [], pipeline, tracer, provider = "unknown", model = "unknown", sessionId, maxTokens = 4096) {
|
|
29
|
+
super();
|
|
25
30
|
this.llm = boundLlm;
|
|
26
31
|
this.promptBuilder = new CacheOptimizedPromptBuilder();
|
|
27
32
|
this.availableTools = tools;
|
|
@@ -31,6 +36,9 @@ export class ExecutionHarness {
|
|
|
31
36
|
this.sessionId = sessionId ?? this.tracer.getSessionId();
|
|
32
37
|
this.provider = provider;
|
|
33
38
|
this.model = model;
|
|
39
|
+
const contextLimit = getProviderContextLimit(this.provider, this.model);
|
|
40
|
+
this.contextGuard = new ContextGuard(this.llm, contextLimit, this.promptBuilder);
|
|
41
|
+
this.autoSave = new AutoSave(this.sessionId, this.sessionStore);
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
44
|
* The main execution engine (non-streaming).
|
|
@@ -38,6 +46,9 @@ export class ExecutionHarness {
|
|
|
38
46
|
*/
|
|
39
47
|
async step(state) {
|
|
40
48
|
const start = Date.now();
|
|
49
|
+
// ContextGuard: Check capacity before building prompt
|
|
50
|
+
const { state: updatedState, metrics } = await this.contextGuard.ensureCapacity(state);
|
|
51
|
+
state = updatedState; // Reassign state if compacted
|
|
41
52
|
const messages = this.promptBuilder.buildPrompt(state);
|
|
42
53
|
try {
|
|
43
54
|
const response = await retryWithBackoff(() => this.llm.invoke(messages).catch((e) => { throw wrapLLMError(e, this.provider); }), {
|
|
@@ -47,21 +58,23 @@ export class ExecutionHarness {
|
|
|
47
58
|
});
|
|
48
59
|
const promptTokens = countMessageTokens(messages);
|
|
49
60
|
const completionTokens = countMessageTokens([response]);
|
|
61
|
+
const cacheMetrics = extractCacheMetrics(response, this.provider);
|
|
50
62
|
this.tracer.recordLLMCall({
|
|
51
63
|
promptTokens,
|
|
52
64
|
completionTokens,
|
|
53
|
-
cached:
|
|
65
|
+
cached: cacheMetrics.cachedTokens > 0,
|
|
66
|
+
cachedTokens: cacheMetrics.cachedTokens,
|
|
54
67
|
duration: Date.now() - start
|
|
55
68
|
});
|
|
56
|
-
await this.
|
|
69
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
57
70
|
return response;
|
|
58
71
|
}
|
|
59
72
|
catch (error) {
|
|
60
73
|
// Self-recovery: inject the error hint and let the agent adapt
|
|
61
74
|
if (error instanceof JooneError && error.retryable) {
|
|
62
75
|
this.tracer.recordError({ message: `LLM retries exhausted: ${error.message}` });
|
|
63
|
-
state.conversationHistory.push(new
|
|
64
|
-
await this.
|
|
76
|
+
state.conversationHistory.push(new HumanMessage(`<system-alert>\nSystem recovery hint:\n${error.toRecoveryHint()}\n</system-alert>`));
|
|
77
|
+
await this.autoSave.forceSave({ config: { provider: this.provider, model: this.model }, state });
|
|
65
78
|
// Return a synthetic AI message so the turn doesn't crash
|
|
66
79
|
return new AIMessage(error.toRecoveryHint());
|
|
67
80
|
}
|
|
@@ -75,6 +88,9 @@ export class ExecutionHarness {
|
|
|
75
88
|
*/
|
|
76
89
|
async streamStep(state, options) {
|
|
77
90
|
const start = Date.now();
|
|
91
|
+
// ContextGuard: Check capacity before building prompt
|
|
92
|
+
const { state: updatedState, metrics } = await this.contextGuard.ensureCapacity(state);
|
|
93
|
+
state = updatedState;
|
|
78
94
|
const messages = this.promptBuilder.buildPrompt(state);
|
|
79
95
|
try {
|
|
80
96
|
const result = await retryWithBackoff(async () => {
|
|
@@ -93,6 +109,7 @@ export class ExecutionHarness {
|
|
|
93
109
|
if (options.onToken) {
|
|
94
110
|
options.onToken(chunk.content);
|
|
95
111
|
}
|
|
112
|
+
this.emit("agent:event", { type: "agent:stream", token: chunk.content });
|
|
96
113
|
}
|
|
97
114
|
if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {
|
|
98
115
|
for (const tc of chunk.tool_call_chunks) {
|
|
@@ -138,21 +155,23 @@ export class ExecutionHarness {
|
|
|
138
155
|
});
|
|
139
156
|
const promptTokens = countMessageTokens(messages);
|
|
140
157
|
const completionTokens = countMessageTokens([result]);
|
|
158
|
+
const cacheMetrics = extractCacheMetrics(result, this.provider);
|
|
141
159
|
this.tracer.recordLLMCall({
|
|
142
160
|
promptTokens,
|
|
143
161
|
completionTokens,
|
|
144
|
-
cached:
|
|
162
|
+
cached: cacheMetrics.cachedTokens > 0,
|
|
163
|
+
cachedTokens: cacheMetrics.cachedTokens,
|
|
145
164
|
duration: Date.now() - start
|
|
146
165
|
});
|
|
147
|
-
await this.
|
|
166
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
148
167
|
return result;
|
|
149
168
|
}
|
|
150
169
|
catch (error) {
|
|
151
170
|
// Self-recovery for streaming
|
|
152
171
|
if (error instanceof JooneError && error.retryable) {
|
|
153
172
|
this.tracer.recordError({ message: `LLM stream retries exhausted: ${error.message}` });
|
|
154
|
-
state.conversationHistory.push(new
|
|
155
|
-
await this.
|
|
173
|
+
state.conversationHistory.push(new HumanMessage(`<system-alert>\nSystem recovery hint:\n${error.toRecoveryHint()}\n</system-alert>`));
|
|
174
|
+
await this.autoSave.forceSave({ config: { provider: this.provider, model: this.model }, state });
|
|
156
175
|
return new AIMessage(error.toRecoveryHint());
|
|
157
176
|
}
|
|
158
177
|
throw error;
|
|
@@ -201,6 +220,7 @@ export class ExecutionHarness {
|
|
|
201
220
|
callId: safeCallId,
|
|
202
221
|
};
|
|
203
222
|
const start = Date.now();
|
|
223
|
+
this.emit("agent:event", { type: "tool:start", toolName: call.name, args: JSON.stringify(call.args) });
|
|
204
224
|
try {
|
|
205
225
|
const output = await this.pipeline.run(ctx, async (c) => tool.execute(c.args));
|
|
206
226
|
this.tracer.recordToolCall({
|
|
@@ -211,6 +231,7 @@ export class ExecutionHarness {
|
|
|
211
231
|
success: true
|
|
212
232
|
});
|
|
213
233
|
const stringifiedOutput = typeof output === "string" ? output : JSON.stringify(output);
|
|
234
|
+
this.emit("agent:event", { type: "tool:end", toolName: call.name, result: stringifiedOutput, durationMs: Date.now() - start });
|
|
214
235
|
results.push(new ToolMessage({
|
|
215
236
|
content: stringifiedOutput,
|
|
216
237
|
tool_call_id: safeCallId
|
|
@@ -230,6 +251,7 @@ export class ExecutionHarness {
|
|
|
230
251
|
success: false
|
|
231
252
|
});
|
|
232
253
|
this.tracer.recordError({ message: toolError.message, tool: call.name });
|
|
254
|
+
this.emit("agent:event", { type: "tool:end", toolName: call.name, result: `Error: ${toolError.message}`, durationMs: Date.now() - start });
|
|
233
255
|
results.push(new ToolMessage({
|
|
234
256
|
content: toolError.toRecoveryHint(),
|
|
235
257
|
tool_call_id: safeCallId
|
|
@@ -238,7 +260,7 @@ export class ExecutionHarness {
|
|
|
238
260
|
}
|
|
239
261
|
// Add the tool results to the state immediately before saving
|
|
240
262
|
state.conversationHistory.push(...results);
|
|
241
|
-
await this.
|
|
263
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
242
264
|
return results;
|
|
243
265
|
}
|
|
244
266
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentLoop.js","sourceRoot":"","sources":["../../src/core/agentLoop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agentLoop.js","sourceRoot":"","sources":["../../src/core/agentLoop.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAE,WAAW,EAAkB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7G,OAAO,EAAE,2BAA2B,EAAgB,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACtC,GAAG,CAAgD;IACnD,aAAa,CAA8B;IAC3C,cAAc,CAAyB;IACvC,QAAQ,CAAqB;IAC9B,MAAM,CAAgB;IACrB,YAAY,CAAe;IAC5B,SAAS,CAAS;IACjB,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,YAAY,CAAe;IAC5B,QAAQ,CAAW;IAE1B;;;OAGG;IACH,YACI,QAAuD,EACvD,QAAgC,EAAE,EAClC,QAA6B,EAC7B,MAAsB,EACtB,WAAmB,SAAS,EAC5B,QAAgB,SAAS,EACzB,SAAkB,EAClB,YAAoB,IAAI;QAExB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,aAAa,GAAG,IAAI,2BAA2B,EAAE,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,IAAI,CAAC,KAAmB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,sDAAsD;QACtD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvF,KAAK,GAAG,YAAY,CAAC,CAAC,8BAA8B;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACnC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACvF;gBACI,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBAC/B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,cAAc,OAAO,KAAK,KAAK,CAAC,OAAO,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzG,CAAC;aACJ,CACJ,CAAC;YAEF,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,CAAC,QAAqB,CAAC,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/E,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBACtB,YAAY;gBACZ,gBAAgB;gBAChB,MAAM,EAAE,YAAY,CAAC,YAAY,GAAG,CAAC;gBACrC,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5F,OAAO,QAAqB,CAAC;QACjC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,+DAA+D;YAC/D,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAChF,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,0CAA0C,KAAK,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACtI,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjG,0DAA0D;gBAC1D,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,KAAK,CAAC,CAAC,0CAA0C;QAC3D,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,UAAU,CACnB,KAAmB,EACnB,OAA0B;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,sDAAsD;QACtD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvF,KAAK,GAAG,YAAY,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACjC,KAAK,IAAI,EAAE;gBACP,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,MAAM,eAAe,GAAgE,IAAI,GAAG,EAAE,CAAC;gBAE/F,IAAI,MAA0B,CAAC;gBAC/B,IAAI,CAAC;oBACD,MAAM,GAAG,MAAO,IAAI,CAAC,GAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzC,CAAC;gBAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC/B,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;wBACrD,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC;wBAC7B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;4BAClB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACnC,CAAC;wBACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7E,CAAC;oBAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC9D,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;4BACtC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;4BAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC5B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;oCACrB,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;oCACf,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;oCACnB,QAAQ,EAAE,EAAE;iCACf,CAAC,CAAC;4BACP,CAAC;4BACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;4BACtC,IAAI,EAAE,CAAC,EAAE;gCAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;4BAC1B,IAAI,EAAE,CAAC,IAAI;gCAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;4BAChC,IAAI,EAAE,CAAC,IAAI;gCAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC;wBACzC,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACjE,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,CAAC,GAAG,EAAE;wBACR,IAAI,CAAC;4BACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;wBAC5C,CAAC;wBAAC,MAAM,CAAC;4BACL,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;wBACxD,CAAC;oBACL,CAAC,CAAC,EAAE;oBACJ,IAAI,EAAE,WAAoB;iBAC7B,CAAC,CAAC,CAAC;gBAEJ,OAAO,IAAI,SAAS,CAAC;oBACjB,OAAO,EAAE,WAAW;oBACpB,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;iBAC3D,CAAC,CAAC;YACP,CAAC,EACD;gBACI,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBAC/B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,qBAAqB,OAAO,KAAK,KAAK,CAAC,OAAO,aAAa,KAAK,KAAK,EAAE,CAAC,CAAC;gBAChH,CAAC;aACJ,CACJ,CAAC;YAEF,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEhE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBACtB,YAAY;gBACZ,gBAAgB;gBAChB,MAAM,EAAE,YAAY,CAAC,YAAY,GAAG,CAAC;gBACrC,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5F,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,8BAA8B;YAC9B,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,iCAAkC,KAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACvG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,0CAA2C,KAAoB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACtJ,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjG,OAAO,IAAI,SAAS,CAAE,KAAoB,CAAC,cAAc,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,SAAoB,EAAE,KAAmB;QACnE,MAAM,OAAO,GAAmC,EAAE,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,OAAO,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACtC,mFAAmF;YACnF,iFAAiF;YACjF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,uCAAuC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1G,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,CACzB,mCAAmC,IAAI,CAAC,IAAI,6CAA6C;oBACzF,kFAAkF,CACrF,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;YAE3B,oDAAoD;YACpD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxF,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;oBACzB,OAAO,EAAE,4EAA4E,IAAI,CAAC,IAAI,CAAC,OAAO,iDAAiD;oBACvJ,YAAY,EAAE,UAAU;iBAC3B,CAAC,CAAC,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,IAAI,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;oBACzB,OAAO,EAAE,eAAe,IAAI,CAAC,IAAI,aAAa;oBAC9C,YAAY,EAAE,UAAU;iBAC3B,CAAC,CAAC,CAAC;gBACJ,SAAS;YACb,CAAC;YAED,MAAM,GAAG,GAAoB;gBACzB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,UAAU;aACrB,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvG,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAClC,GAAG,EACH,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CACpC,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;oBACtF,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC5B,OAAO,EAAE,IAAI;iBAChB,CAAC,CAAC;gBAEH,MAAM,iBAAiB,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACvF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC/H,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;oBACzB,OAAO,EAAE,iBAAiB;oBAC1B,YAAY,EAAE,UAAU;iBAC3B,CAAC,CAAC,CAAC;YACR,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACpD,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,SAAS,EAAE,KAAK;oBAChB,KAAK,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC5B,OAAO,EAAE,KAAK;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC3I,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC;oBACzB,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE;oBACnC,YAAY,EAAE,UAAU;iBAC3B,CAAC,CAAC,CAAC;YACR,CAAC;QACL,CAAC;QAED,8DAA8D;QAC9D,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5F,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Save
|
|
3
|
+
*
|
|
4
|
+
* Periodically saves the session state to disk using atomic writes.
|
|
5
|
+
* This prevents data loss if the terminal crashes or the LLM loop hangs.
|
|
6
|
+
* Atomic writes ensure the JSONL session file is never corrupted during save.
|
|
7
|
+
*/
|
|
8
|
+
import { SessionStore } from "./sessionStore.js";
|
|
9
|
+
import { ContextState } from "./promptBuilder.js";
|
|
10
|
+
import { ActiveToolCall } from "../ui/App.js";
|
|
11
|
+
export interface AutoSaveData {
|
|
12
|
+
config: {
|
|
13
|
+
provider: string;
|
|
14
|
+
model: string;
|
|
15
|
+
};
|
|
16
|
+
state: ContextState;
|
|
17
|
+
activeTool?: ActiveToolCall;
|
|
18
|
+
}
|
|
19
|
+
export declare class AutoSave {
|
|
20
|
+
private store;
|
|
21
|
+
private sessionId;
|
|
22
|
+
private saveFrequencyTurns;
|
|
23
|
+
private turnsSinceLastSave;
|
|
24
|
+
private lastSaveTime;
|
|
25
|
+
private debounceMs;
|
|
26
|
+
private isSaving;
|
|
27
|
+
constructor(sessionId: string, store?: SessionStore, saveFrequencyTurns?: number, debounceMs?: number);
|
|
28
|
+
/**
|
|
29
|
+
* Called at the end of every agent loop turn.
|
|
30
|
+
* Periodically triggers an atomic save.
|
|
31
|
+
*/
|
|
32
|
+
tick(data: AutoSaveData): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Forces an immediate atomic save, e.g., during SIGINT/SIGTERM shutdown.
|
|
35
|
+
*/
|
|
36
|
+
forceSave(data: AutoSaveData): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Resets the counter.
|
|
39
|
+
*/
|
|
40
|
+
resetTimer(): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Save
|
|
3
|
+
*
|
|
4
|
+
* Periodically saves the session state to disk using atomic writes.
|
|
5
|
+
* This prevents data loss if the terminal crashes or the LLM loop hangs.
|
|
6
|
+
* Atomic writes ensure the JSONL session file is never corrupted during save.
|
|
7
|
+
*/
|
|
8
|
+
import { SessionStore } from "./sessionStore.js";
|
|
9
|
+
export class AutoSave {
|
|
10
|
+
store;
|
|
11
|
+
sessionId;
|
|
12
|
+
saveFrequencyTurns;
|
|
13
|
+
turnsSinceLastSave = 0;
|
|
14
|
+
lastSaveTime = 0;
|
|
15
|
+
debounceMs;
|
|
16
|
+
isSaving = false;
|
|
17
|
+
constructor(sessionId, store = new SessionStore(), saveFrequencyTurns = 5, debounceMs = 10000 // 10 seconds minimum between saves
|
|
18
|
+
) {
|
|
19
|
+
this.sessionId = sessionId;
|
|
20
|
+
this.store = store;
|
|
21
|
+
this.saveFrequencyTurns = saveFrequencyTurns;
|
|
22
|
+
this.debounceMs = debounceMs;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Called at the end of every agent loop turn.
|
|
26
|
+
* Periodically triggers an atomic save.
|
|
27
|
+
*/
|
|
28
|
+
async tick(data) {
|
|
29
|
+
this.turnsSinceLastSave++;
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
const shouldSave = this.turnsSinceLastSave >= this.saveFrequencyTurns &&
|
|
32
|
+
now - this.lastSaveTime >= this.debounceMs;
|
|
33
|
+
if (shouldSave && !this.isSaving) {
|
|
34
|
+
await this.forceSave(data);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Forces an immediate atomic save, e.g., during SIGINT/SIGTERM shutdown.
|
|
41
|
+
*/
|
|
42
|
+
async forceSave(data) {
|
|
43
|
+
if (this.isSaving)
|
|
44
|
+
return; // Prevent concurrent overlapping saves
|
|
45
|
+
this.isSaving = true;
|
|
46
|
+
try {
|
|
47
|
+
// SessionStore.saveSession creates a write stream directly to a new cleanly formatted JSONL payload.
|
|
48
|
+
await this.store.saveSession(this.sessionId, data.state, data.config.provider, data.config.model);
|
|
49
|
+
this.turnsSinceLastSave = 0;
|
|
50
|
+
this.lastSaveTime = Date.now();
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
// We explicitly swallow auto-save errors so they don't crash the agent loop.
|
|
54
|
+
// E2B Sandboxes and other critical operations take precedence.
|
|
55
|
+
console.error(`\n[AutoSave Failed] ${err.message}`);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
this.isSaving = false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resets the counter.
|
|
63
|
+
*/
|
|
64
|
+
resetTimer() {
|
|
65
|
+
this.turnsSinceLastSave = 0;
|
|
66
|
+
this.lastSaveTime = Date.now();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=autoSave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoSave.js","sourceRoot":"","sources":["../../src/core/autoSave.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjD,MAAM,OAAO,QAAQ;IACX,KAAK,CAAe;IACpB,SAAS,CAAS;IAClB,kBAAkB,CAAS;IAC3B,kBAAkB,GAAG,CAAC,CAAC;IACvB,YAAY,GAAG,CAAC,CAAC;IACjB,UAAU,CAAS;IACnB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACE,SAAiB,EACjB,QAAsB,IAAI,YAAY,EAAE,EACxC,kBAAkB,GAAG,CAAC,EACtB,UAAU,GAAG,KAAK,CAAC,mCAAmC;;QAEtD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GACd,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB;YAClD,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC;QAE7C,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,IAAkB;QAChC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,uCAAuC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,qGAAqG;YACrG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAC1B,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAClB,CAAC;YAEF,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,6EAA6E;YAC7E,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation Compactor
|
|
3
|
+
*
|
|
4
|
+
* Replaces the simple string-based compaction with an LLM-powered summary.
|
|
5
|
+
* Uses a dedicated compact prompt to produce a high-quality structured summary,
|
|
6
|
+
* then injects a handoff prompt to orient the agent after compaction.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* 1. Evicted messages (all except keepLastN) are sent to a dedicated LLM call
|
|
10
|
+
* 2. The LLM produces a structured markdown summary preserving critical context
|
|
11
|
+
* 3. A handoff prompt is injected after the summary to guide the agent
|
|
12
|
+
* 4. Falls back to string-based compaction if the LLM call fails
|
|
13
|
+
*/
|
|
14
|
+
import { BaseMessage } from "@langchain/core/messages";
|
|
15
|
+
import { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
16
|
+
import { Runnable } from "@langchain/core/runnables";
|
|
17
|
+
export declare const COMPACT_SYSTEM_PROMPT = "You are a conversation summarizer. Your task is to produce a structured reference document from the conversation below.\n\nPRESERVE ALL of the following (do NOT omit):\n- File paths created, edited, or deleted\n- Tool calls made and their outcomes (success or failure)\n- Key decisions made and the rationale behind them\n- Current task state \u2014 what has been completed and what remains\n- Errors encountered and how they were resolved\n- Code snippets or configurations that are critical to the ongoing task\n\nFORMAT as structured markdown with clear sections:\n## Files Modified\n## Decisions Made\n## Current State\n## Errors & Resolutions\n\nBe thorough but concise. Do NOT include conversational filler or pleasantries.";
|
|
18
|
+
export declare function createHandoffPrompt(compactionTimestamp: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Maps each provider to its cheapest/fastest model for use in compaction
|
|
21
|
+
* and sub-agent tasks. Users can override via config.compactModel.
|
|
22
|
+
*/
|
|
23
|
+
export declare const FAST_MODEL_DEFAULTS: Record<string, string>;
|
|
24
|
+
/**
|
|
25
|
+
* Resolves the model to use for compaction/sub-agents.
|
|
26
|
+
* Priority: explicit override > FAST_MODEL_DEFAULTS > main model (fallback)
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveFastModel(provider: string, mainModel: string, override?: string): string;
|
|
29
|
+
export interface CompactorOptions {
|
|
30
|
+
/** Number of recent messages to preserve (default: 8) */
|
|
31
|
+
keepLastN?: number;
|
|
32
|
+
/** Max tokens for the summary output (default: 2000) */
|
|
33
|
+
maxSummaryTokens?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface CompactionResult {
|
|
36
|
+
/** The new compacted conversation history */
|
|
37
|
+
compactedHistory: BaseMessage[];
|
|
38
|
+
/** Number of messages evicted */
|
|
39
|
+
evictedCount: number;
|
|
40
|
+
/** Token count before compaction */
|
|
41
|
+
tokensBefore: number;
|
|
42
|
+
/** Token count after compaction */
|
|
43
|
+
tokensAfter: number;
|
|
44
|
+
/** Whether the LLM was used (true) or fallback was used (false) */
|
|
45
|
+
llmUsed: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare class ConversationCompactor {
|
|
48
|
+
/**
|
|
49
|
+
* Compact a conversation history using an LLM to generate a structured summary.
|
|
50
|
+
*
|
|
51
|
+
* @param history — The full conversation history
|
|
52
|
+
* @param llm — The LLM to use for summarization (should be a fast/cheap model)
|
|
53
|
+
* @param options — Compaction options
|
|
54
|
+
* @returns CompactionResult with the new compacted history
|
|
55
|
+
*/
|
|
56
|
+
compact(history: BaseMessage[], llm: Runnable | BaseChatModel, options?: CompactorOptions): Promise<CompactionResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Generates a structured summary using the LLM.
|
|
59
|
+
*/
|
|
60
|
+
private generateLLMSummary;
|
|
61
|
+
/**
|
|
62
|
+
* Fallback compaction using a simple heuristic summary (no LLM call).
|
|
63
|
+
* Used when the LLM call fails.
|
|
64
|
+
*/
|
|
65
|
+
private fallbackCompact;
|
|
66
|
+
}
|