joonecli 0.1.0 → 0.1.1
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/dist/agents/builtinAgents.js +125 -0
- 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 +25 -1
- 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 +90 -0
- package/dist/commands/commandRegistry.js +128 -0
- package/dist/commands/commandRegistry.js.map +1 -0
- package/dist/core/agentLoop.d.ts +4 -1
- package/dist/core/agentLoop.js +21 -9
- 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 +33 -0
- package/dist/core/contextGuard.js +95 -0
- package/dist/core/contextGuard.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/subAgent.d.ts +56 -0
- package/dist/core/subAgent.js +240 -0
- package/dist/core/subAgent.js.map +1 -0
- 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/test_google.d.ts +1 -0
- package/dist/test_google.js +32 -89
- package/dist/test_google.js.map +1 -0
- package/dist/tools/router.js +2 -0
- package/dist/tools/router.js.map +1 -1
- package/dist/tools/spawnAgent.d.ts +19 -0
- package/dist/tools/spawnAgent.js +130 -0
- package/dist/tools/spawnAgent.js.map +1 -0
- package/dist/ui/App.js +88 -5
- package/dist/ui/App.js.map +1 -1
- package/package.json +3 -2
- package/src/cli/index.ts +12 -0
- package/src/cli/postinstall.ts +28 -0
- package/src/core/compactor.ts +2 -2
- package/src/core/contextGuard.ts +4 -4
- package/src/core/sessionStore.ts +2 -1
- package/src/core/subAgent.ts +2 -2
- package/tests/core/sessionStore.test.ts +2 -2
- package/src/test_google.js +0 -40
- package/src/test_google.ts +0 -40
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRegistry.js","sourceRoot":"","sources":["../../src/commands/commandRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA+CH,mFAAmF;AAEnF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS;IACtD,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAM,WAAW;YACrC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAM,YAAY;YACtC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,mFAAmF;AAEnF,MAAM,OAAO,eAAe;IAClB,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAChD,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,OAAqB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAa;QACrB,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,KAAa;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;QACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACnD,CAAC;QACD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE;YAC9C,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;SACzC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAuB;QAClD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzC,+BAA+B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;QAED,qCAAqC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;aAC/B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5B,IAAI,GAAG,GAAG,qBAAqB,IAAI,GAAG,CAAC;QACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,GAAG,IAAI,kBAAkB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACrD,CAAC;QACD,GAAG,IAAI,+BAA+B,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,KAAK,GAAa,CAAC,uBAAuB,CAAC,CAAC;QAElD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM;gBACjC,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACpD,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/core/agentLoop.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ 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";
|
|
8
9
|
export interface StreamStepOptions {
|
|
9
10
|
/** Called for each text token received from the stream. */
|
|
10
11
|
onToken?: (token: string) => void;
|
|
@@ -19,11 +20,13 @@ export declare class ExecutionHarness {
|
|
|
19
20
|
sessionId: string;
|
|
20
21
|
private provider;
|
|
21
22
|
private model;
|
|
23
|
+
private contextGuard;
|
|
24
|
+
autoSave: AutoSave;
|
|
22
25
|
/**
|
|
23
26
|
* Initializes the harness with a pre-configured, tool-bound LLM instance.
|
|
24
27
|
* This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
|
|
25
28
|
*/
|
|
26
|
-
constructor(boundLlm: Runnable<any, AIMessageChunk> | BaseChatModel, tools?: DynamicToolInterface[], pipeline?: MiddlewarePipeline, tracer?: SessionTracer, provider?: string, model?: string, sessionId?: string);
|
|
29
|
+
constructor(boundLlm: Runnable<any, AIMessageChunk> | BaseChatModel, tools?: DynamicToolInterface[], pipeline?: MiddlewarePipeline, tracer?: SessionTracer, provider?: string, model?: string, sessionId?: string, maxTokens?: number);
|
|
27
30
|
/**
|
|
28
31
|
* The main execution engine (non-streaming).
|
|
29
32
|
* Takes the context state, builds the cache-optimized prompt, and queries the LLM.
|
package/dist/core/agentLoop.js
CHANGED
|
@@ -6,7 +6,8 @@ import { countMessageTokens } 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 {
|
|
9
|
+
import { ContextGuard } from "./contextGuard.js";
|
|
10
|
+
import { AutoSave } from "./autoSave.js";
|
|
10
11
|
export class ExecutionHarness {
|
|
11
12
|
llm;
|
|
12
13
|
promptBuilder;
|
|
@@ -17,11 +18,13 @@ export class ExecutionHarness {
|
|
|
17
18
|
sessionId;
|
|
18
19
|
provider;
|
|
19
20
|
model;
|
|
21
|
+
contextGuard;
|
|
22
|
+
autoSave;
|
|
20
23
|
/**
|
|
21
24
|
* Initializes the harness with a pre-configured, tool-bound LLM instance.
|
|
22
25
|
* This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
|
|
23
26
|
*/
|
|
24
|
-
constructor(boundLlm, tools = [], pipeline, tracer, provider = "unknown", model = "unknown", sessionId) {
|
|
27
|
+
constructor(boundLlm, tools = [], pipeline, tracer, provider = "unknown", model = "unknown", sessionId, maxTokens = 4096) {
|
|
25
28
|
this.llm = boundLlm;
|
|
26
29
|
this.promptBuilder = new CacheOptimizedPromptBuilder();
|
|
27
30
|
this.availableTools = tools;
|
|
@@ -31,6 +34,8 @@ export class ExecutionHarness {
|
|
|
31
34
|
this.sessionId = sessionId ?? this.tracer.getSessionId();
|
|
32
35
|
this.provider = provider;
|
|
33
36
|
this.model = model;
|
|
37
|
+
this.contextGuard = new ContextGuard(this.llm, maxTokens, this.promptBuilder);
|
|
38
|
+
this.autoSave = new AutoSave(this.sessionId, this.sessionStore);
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
41
|
* The main execution engine (non-streaming).
|
|
@@ -38,7 +43,11 @@ export class ExecutionHarness {
|
|
|
38
43
|
*/
|
|
39
44
|
async step(state) {
|
|
40
45
|
const start = Date.now();
|
|
46
|
+
// ContextGuard: Check capacity before building prompt
|
|
47
|
+
const { state: updatedState, metrics } = await this.contextGuard.ensureCapacity(state);
|
|
48
|
+
state = updatedState; // Reassign state if compacted
|
|
41
49
|
const messages = this.promptBuilder.buildPrompt(state);
|
|
50
|
+
console.error("=== JOONE MESSAGES ===", JSON.stringify(messages.map(m => ({ type: m._getType(), content: m.content })), null, 2));
|
|
42
51
|
try {
|
|
43
52
|
const response = await retryWithBackoff(() => this.llm.invoke(messages).catch((e) => { throw wrapLLMError(e, this.provider); }), {
|
|
44
53
|
onRetry: (attempt, error, delay) => {
|
|
@@ -53,15 +62,15 @@ export class ExecutionHarness {
|
|
|
53
62
|
cached: false,
|
|
54
63
|
duration: Date.now() - start
|
|
55
64
|
});
|
|
56
|
-
await this.
|
|
65
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
57
66
|
return response;
|
|
58
67
|
}
|
|
59
68
|
catch (error) {
|
|
60
69
|
// Self-recovery: inject the error hint and let the agent adapt
|
|
61
70
|
if (error instanceof JooneError && error.retryable) {
|
|
62
71
|
this.tracer.recordError({ message: `LLM retries exhausted: ${error.message}` });
|
|
63
|
-
state.conversationHistory.push(new
|
|
64
|
-
await this.
|
|
72
|
+
state.conversationHistory.push(new HumanMessage(`<system-alert>\nSystem recovery hint:\n${error.toRecoveryHint()}\n</system-alert>`));
|
|
73
|
+
await this.autoSave.forceSave({ config: { provider: this.provider, model: this.model }, state });
|
|
65
74
|
// Return a synthetic AI message so the turn doesn't crash
|
|
66
75
|
return new AIMessage(error.toRecoveryHint());
|
|
67
76
|
}
|
|
@@ -75,6 +84,9 @@ export class ExecutionHarness {
|
|
|
75
84
|
*/
|
|
76
85
|
async streamStep(state, options) {
|
|
77
86
|
const start = Date.now();
|
|
87
|
+
// ContextGuard: Check capacity before building prompt
|
|
88
|
+
const { state: updatedState, metrics } = await this.contextGuard.ensureCapacity(state);
|
|
89
|
+
state = updatedState;
|
|
78
90
|
const messages = this.promptBuilder.buildPrompt(state);
|
|
79
91
|
try {
|
|
80
92
|
const result = await retryWithBackoff(async () => {
|
|
@@ -144,15 +156,15 @@ export class ExecutionHarness {
|
|
|
144
156
|
cached: false,
|
|
145
157
|
duration: Date.now() - start
|
|
146
158
|
});
|
|
147
|
-
await this.
|
|
159
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
148
160
|
return result;
|
|
149
161
|
}
|
|
150
162
|
catch (error) {
|
|
151
163
|
// Self-recovery for streaming
|
|
152
164
|
if (error instanceof JooneError && error.retryable) {
|
|
153
165
|
this.tracer.recordError({ message: `LLM stream retries exhausted: ${error.message}` });
|
|
154
|
-
state.conversationHistory.push(new
|
|
155
|
-
await this.
|
|
166
|
+
state.conversationHistory.push(new HumanMessage(`<system-alert>\nSystem recovery hint:\n${error.toRecoveryHint()}\n</system-alert>`));
|
|
167
|
+
await this.autoSave.forceSave({ config: { provider: this.provider, model: this.model }, state });
|
|
156
168
|
return new AIMessage(error.toRecoveryHint());
|
|
157
169
|
}
|
|
158
170
|
throw error;
|
|
@@ -238,7 +250,7 @@ export class ExecutionHarness {
|
|
|
238
250
|
}
|
|
239
251
|
// Add the tool results to the state immediately before saving
|
|
240
252
|
state.conversationHistory.push(...results);
|
|
241
|
-
await this.
|
|
253
|
+
await this.autoSave.tick({ config: { provider: this.provider, model: this.model }, state });
|
|
242
254
|
return results;
|
|
243
255
|
}
|
|
244
256
|
}
|
|
@@ -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":"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"}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
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 { SystemMessage, HumanMessage } from "@langchain/core/messages";
|
|
15
|
+
import { countMessageTokens } from "./tokenCounter.js";
|
|
16
|
+
// ─── Compact Prompt ─────────────────────────────────────────────────────────────
|
|
17
|
+
export const COMPACT_SYSTEM_PROMPT = `You are a conversation summarizer. Your task is to produce a structured reference document from the conversation below.
|
|
18
|
+
|
|
19
|
+
PRESERVE ALL of the following (do NOT omit):
|
|
20
|
+
- File paths created, edited, or deleted
|
|
21
|
+
- Tool calls made and their outcomes (success or failure)
|
|
22
|
+
- Key decisions made and the rationale behind them
|
|
23
|
+
- Current task state — what has been completed and what remains
|
|
24
|
+
- Errors encountered and how they were resolved
|
|
25
|
+
- Code snippets or configurations that are critical to the ongoing task
|
|
26
|
+
|
|
27
|
+
FORMAT as structured markdown with clear sections:
|
|
28
|
+
## Files Modified
|
|
29
|
+
## Decisions Made
|
|
30
|
+
## Current State
|
|
31
|
+
## Errors & Resolutions
|
|
32
|
+
|
|
33
|
+
Be thorough but concise. Do NOT include conversational filler or pleasantries.`;
|
|
34
|
+
// ─── Handoff Prompt ─────────────────────────────────────────────────────────────
|
|
35
|
+
export function createHandoffPrompt(compactionTimestamp) {
|
|
36
|
+
return `[CONTEXT HANDOFF] Your earlier conversation has been compacted into the summary above.
|
|
37
|
+
You are the same agent continuing the same task. Key points:
|
|
38
|
+
- The summary preserves all file paths, decisions, tool outcomes, and errors
|
|
39
|
+
- If you need details not included in the summary, re-read the relevant files using read_file
|
|
40
|
+
- Continue from where the conversation left off — do NOT redo work described in the summary
|
|
41
|
+
- Compacted at: ${compactionTimestamp}`;
|
|
42
|
+
}
|
|
43
|
+
// ─── Fast Model Defaults ────────────────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Maps each provider to its cheapest/fastest model for use in compaction
|
|
46
|
+
* and sub-agent tasks. Users can override via config.compactModel.
|
|
47
|
+
*/
|
|
48
|
+
export const FAST_MODEL_DEFAULTS = {
|
|
49
|
+
anthropic: "claude-3-haiku-20240307",
|
|
50
|
+
openai: "gpt-4o-mini",
|
|
51
|
+
google: "gemini-2.5-flash",
|
|
52
|
+
mistral: "mistral-small-latest",
|
|
53
|
+
groq: "mixtral-8x7b-32768",
|
|
54
|
+
deepseek: "deepseek-chat",
|
|
55
|
+
fireworks: "accounts/fireworks/models/llama-v3p1-70b-instruct",
|
|
56
|
+
together: "meta-llama/Llama-3.1-70B-Instruct-Turbo",
|
|
57
|
+
ollama: "mistral",
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Resolves the model to use for compaction/sub-agents.
|
|
61
|
+
* Priority: explicit override > FAST_MODEL_DEFAULTS > main model (fallback)
|
|
62
|
+
*/
|
|
63
|
+
export function resolveFastModel(provider, mainModel, override) {
|
|
64
|
+
if (override)
|
|
65
|
+
return override;
|
|
66
|
+
return FAST_MODEL_DEFAULTS[provider] ?? mainModel;
|
|
67
|
+
}
|
|
68
|
+
// ─── ConversationCompactor ──────────────────────────────────────────────────────
|
|
69
|
+
export class ConversationCompactor {
|
|
70
|
+
/**
|
|
71
|
+
* Compact a conversation history using an LLM to generate a structured summary.
|
|
72
|
+
*
|
|
73
|
+
* @param history — The full conversation history
|
|
74
|
+
* @param llm — The LLM to use for summarization (should be a fast/cheap model)
|
|
75
|
+
* @param options — Compaction options
|
|
76
|
+
* @returns CompactionResult with the new compacted history
|
|
77
|
+
*/
|
|
78
|
+
async compact(history, llm, options = {}) {
|
|
79
|
+
const keepLastN = options.keepLastN ?? 8;
|
|
80
|
+
const maxSummaryTokens = options.maxSummaryTokens ?? 2000;
|
|
81
|
+
if (history.length <= keepLastN) {
|
|
82
|
+
return {
|
|
83
|
+
compactedHistory: history,
|
|
84
|
+
evictedCount: 0,
|
|
85
|
+
tokensBefore: countMessageTokens(history),
|
|
86
|
+
tokensAfter: countMessageTokens(history),
|
|
87
|
+
llmUsed: false,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const tokensBefore = countMessageTokens(history);
|
|
91
|
+
const evictedMessages = history.slice(0, history.length - keepLastN);
|
|
92
|
+
const recentMessages = history.slice(-keepLastN);
|
|
93
|
+
const evictedCount = evictedMessages.length;
|
|
94
|
+
// Try LLM-powered compaction
|
|
95
|
+
try {
|
|
96
|
+
const summaryText = await this.generateLLMSummary(evictedMessages, llm, maxSummaryTokens);
|
|
97
|
+
const summaryMessage = new HumanMessage(`<system-summary>\n[COMPACTED CONVERSATION SUMMARY]\n${summaryText}\n</system-summary>`);
|
|
98
|
+
const handoffMessage = new HumanMessage(`<system-handoff>\n${createHandoffPrompt(new Date().toISOString())}\n</system-handoff>`);
|
|
99
|
+
const compactedHistory = [summaryMessage, handoffMessage, ...recentMessages];
|
|
100
|
+
const tokensAfter = countMessageTokens(compactedHistory);
|
|
101
|
+
return {
|
|
102
|
+
compactedHistory,
|
|
103
|
+
evictedCount,
|
|
104
|
+
tokensBefore,
|
|
105
|
+
tokensAfter,
|
|
106
|
+
llmUsed: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
// Fallback to string-based compaction
|
|
111
|
+
return this.fallbackCompact(history, evictedMessages, recentMessages, tokensBefore);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generates a structured summary using the LLM.
|
|
116
|
+
*/
|
|
117
|
+
async generateLLMSummary(evictedMessages, llm, maxSummaryTokens) {
|
|
118
|
+
// Construct the prompt for the compactor LLM
|
|
119
|
+
const compactPrompt = new SystemMessage(`${COMPACT_SYSTEM_PROMPT}\n\nKeep your summary under ${maxSummaryTokens} tokens.`);
|
|
120
|
+
// Convert evicted messages into a readable format for the summarizer
|
|
121
|
+
const conversationText = evictedMessages
|
|
122
|
+
.map((msg) => {
|
|
123
|
+
const role = msg._getType();
|
|
124
|
+
const content = typeof msg.content === "string"
|
|
125
|
+
? msg.content
|
|
126
|
+
: JSON.stringify(msg.content);
|
|
127
|
+
return `[${role}]: ${content}`;
|
|
128
|
+
})
|
|
129
|
+
.join("\n\n");
|
|
130
|
+
const summaryRequest = new HumanMessage(`Summarize this conversation:\n\n${conversationText}`);
|
|
131
|
+
const response = await llm.invoke([compactPrompt, summaryRequest]);
|
|
132
|
+
// Extract text from response
|
|
133
|
+
if (typeof response === "string")
|
|
134
|
+
return response;
|
|
135
|
+
if ("content" in response && typeof response.content === "string") {
|
|
136
|
+
return response.content;
|
|
137
|
+
}
|
|
138
|
+
throw new Error("Unexpected LLM response format during compaction");
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Fallback compaction using a simple heuristic summary (no LLM call).
|
|
142
|
+
* Used when the LLM call fails.
|
|
143
|
+
*/
|
|
144
|
+
fallbackCompact(_fullHistory, evictedMessages, recentMessages, tokensBefore) {
|
|
145
|
+
// Build a basic summary from message roles and lengths
|
|
146
|
+
const humanMsgCount = evictedMessages.filter(m => m._getType() === "human").length;
|
|
147
|
+
const aiMsgCount = evictedMessages.filter(m => m._getType() === "ai").length;
|
|
148
|
+
const toolMsgCount = evictedMessages.filter(m => m._getType() === "tool").length;
|
|
149
|
+
const summaryText = [
|
|
150
|
+
`[Fallback Compaction — LLM summary unavailable]`,
|
|
151
|
+
`Evicted ${evictedMessages.length} messages:`,
|
|
152
|
+
` - ${humanMsgCount} user messages`,
|
|
153
|
+
` - ${aiMsgCount} agent responses`,
|
|
154
|
+
` - ${toolMsgCount} tool results`,
|
|
155
|
+
`The conversation is continuing below.`,
|
|
156
|
+
].join("\n");
|
|
157
|
+
const summaryMessage = new HumanMessage(`<system-summary>\n${summaryText}\n</system-summary>`);
|
|
158
|
+
const handoffMessage = new HumanMessage(`<system-handoff>\n${createHandoffPrompt(new Date().toISOString())}\n</system-handoff>`);
|
|
159
|
+
const compactedHistory = [summaryMessage, handoffMessage, ...recentMessages];
|
|
160
|
+
const tokensAfter = countMessageTokens(compactedHistory);
|
|
161
|
+
return {
|
|
162
|
+
compactedHistory,
|
|
163
|
+
evictedCount: evictedMessages.length,
|
|
164
|
+
tokensBefore,
|
|
165
|
+
tokensAfter,
|
|
166
|
+
llmUsed: false,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=compactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compactor.js","sourceRoot":"","sources":["../../src/core/compactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Guard
|
|
3
|
+
*
|
|
4
|
+
* Proactively monitors token usage during the agent loop and triggers auto-compaction
|
|
5
|
+
* before the model's context window is exceeded.
|
|
6
|
+
*
|
|
7
|
+
* Thresholds:
|
|
8
|
+
* - 80% (WARN): Triggers standard LLM-powered context compaction
|
|
9
|
+
* - 95% (CRITICAL): Forces emergency truncation if compaction fails
|
|
10
|
+
*/
|
|
11
|
+
import { BaseChatModel } from "@langchain/core/language_models/chat_models";
|
|
12
|
+
import { Runnable } from "@langchain/core/runnables";
|
|
13
|
+
import { CacheOptimizedPromptBuilder, ContextState } from "./promptBuilder.js";
|
|
14
|
+
export interface ContextGuardMetrics {
|
|
15
|
+
originalTokens: number;
|
|
16
|
+
newTokens: number;
|
|
17
|
+
messagesEvicted: number;
|
|
18
|
+
actionTaken: "none" | "compacted" | "emergency_truncated";
|
|
19
|
+
}
|
|
20
|
+
export declare class ContextGuard {
|
|
21
|
+
private promptBuilder;
|
|
22
|
+
private llm;
|
|
23
|
+
private maxTokens;
|
|
24
|
+
constructor(llm: Runnable | BaseChatModel, maxTokens: number, promptBuilder?: CacheOptimizedPromptBuilder);
|
|
25
|
+
/**
|
|
26
|
+
* Checks the token usage of the current state and compacts if necessary.
|
|
27
|
+
* Returns updated state and metrics about the action taken.
|
|
28
|
+
*/
|
|
29
|
+
ensureCapacity(state: ContextState, warnThreshold?: number, criticalThreshold?: number): Promise<{
|
|
30
|
+
state: ContextState;
|
|
31
|
+
metrics: ContextGuardMetrics;
|
|
32
|
+
}>;
|
|
33
|
+
}
|