attocode 0.2.1 → 0.2.3
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/CHANGELOG.md +191 -1
- package/README.md +7 -0
- package/dist/src/adapters.d.ts +6 -1
- package/dist/src/adapters.d.ts.map +1 -1
- package/dist/src/adapters.js +8 -1
- package/dist/src/adapters.js.map +1 -1
- package/dist/src/agent.d.ts +41 -4
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +846 -75
- package/dist/src/agent.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +23 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/protocol/types.d.ts +8 -8
- package/dist/src/defaults.d.ts +7 -2
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +38 -2
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/integrations/agent-registry.d.ts +13 -0
- package/dist/src/integrations/agent-registry.d.ts.map +1 -1
- package/dist/src/integrations/agent-registry.js.map +1 -1
- package/dist/src/integrations/async-subagent.d.ts +135 -0
- package/dist/src/integrations/async-subagent.d.ts.map +1 -0
- package/dist/src/integrations/async-subagent.js +213 -0
- package/dist/src/integrations/async-subagent.js.map +1 -0
- package/dist/src/integrations/auto-checkpoint.d.ts +98 -0
- package/dist/src/integrations/auto-checkpoint.d.ts.map +1 -0
- package/dist/src/integrations/auto-checkpoint.js +252 -0
- package/dist/src/integrations/auto-checkpoint.js.map +1 -0
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
- package/dist/src/integrations/auto-compaction.js +5 -1
- package/dist/src/integrations/auto-compaction.js.map +1 -1
- package/dist/src/integrations/bash-policy.d.ts +33 -0
- package/dist/src/integrations/bash-policy.d.ts.map +1 -0
- package/dist/src/integrations/bash-policy.js +142 -0
- package/dist/src/integrations/bash-policy.js.map +1 -0
- package/dist/src/integrations/codebase-context.d.ts +5 -0
- package/dist/src/integrations/codebase-context.d.ts.map +1 -1
- package/dist/src/integrations/codebase-context.js +33 -0
- package/dist/src/integrations/codebase-context.js.map +1 -1
- package/dist/src/integrations/complexity-classifier.d.ts +86 -0
- package/dist/src/integrations/complexity-classifier.d.ts.map +1 -0
- package/dist/src/integrations/complexity-classifier.js +233 -0
- package/dist/src/integrations/complexity-classifier.js.map +1 -0
- package/dist/src/integrations/delegation-protocol.d.ts +86 -0
- package/dist/src/integrations/delegation-protocol.d.ts.map +1 -0
- package/dist/src/integrations/delegation-protocol.js +127 -0
- package/dist/src/integrations/delegation-protocol.js.map +1 -0
- package/dist/src/integrations/dynamic-budget.d.ts +81 -0
- package/dist/src/integrations/dynamic-budget.d.ts.map +1 -0
- package/dist/src/integrations/dynamic-budget.js +151 -0
- package/dist/src/integrations/dynamic-budget.js.map +1 -0
- package/dist/src/integrations/economics.d.ts +86 -1
- package/dist/src/integrations/economics.d.ts.map +1 -1
- package/dist/src/integrations/economics.js +306 -11
- package/dist/src/integrations/economics.js.map +1 -1
- package/dist/src/integrations/environment-facts.d.ts +52 -0
- package/dist/src/integrations/environment-facts.d.ts.map +1 -0
- package/dist/src/integrations/environment-facts.js +84 -0
- package/dist/src/integrations/environment-facts.js.map +1 -0
- package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
- package/dist/src/integrations/hierarchical-config.js +17 -0
- package/dist/src/integrations/hierarchical-config.js.map +1 -1
- package/dist/src/integrations/index.d.ts +19 -2
- package/dist/src/integrations/index.d.ts.map +1 -1
- package/dist/src/integrations/index.js +34 -2
- package/dist/src/integrations/index.js.map +1 -1
- package/dist/src/integrations/injection-budget.d.ts +71 -0
- package/dist/src/integrations/injection-budget.d.ts.map +1 -0
- package/dist/src/integrations/injection-budget.js +136 -0
- package/dist/src/integrations/injection-budget.js.map +1 -0
- package/dist/src/integrations/mcp-client.d.ts.map +1 -1
- package/dist/src/integrations/mcp-client.js +14 -0
- package/dist/src/integrations/mcp-client.js.map +1 -1
- package/dist/src/integrations/mcp-custom-tools.d.ts +102 -0
- package/dist/src/integrations/mcp-custom-tools.d.ts.map +1 -0
- package/dist/src/integrations/mcp-custom-tools.js +232 -0
- package/dist/src/integrations/mcp-custom-tools.js.map +1 -0
- package/dist/src/integrations/mcp-tool-validator.d.ts +60 -0
- package/dist/src/integrations/mcp-tool-validator.d.ts.map +1 -0
- package/dist/src/integrations/mcp-tool-validator.js +141 -0
- package/dist/src/integrations/mcp-tool-validator.js.map +1 -0
- package/dist/src/integrations/policy-engine.d.ts +55 -0
- package/dist/src/integrations/policy-engine.d.ts.map +1 -0
- package/dist/src/integrations/policy-engine.js +247 -0
- package/dist/src/integrations/policy-engine.js.map +1 -0
- package/dist/src/integrations/safety.d.ts +5 -4
- package/dist/src/integrations/safety.d.ts.map +1 -1
- package/dist/src/integrations/safety.js +32 -7
- package/dist/src/integrations/safety.js.map +1 -1
- package/dist/src/integrations/sandbox/basic.d.ts +7 -0
- package/dist/src/integrations/sandbox/basic.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/basic.js +27 -2
- package/dist/src/integrations/sandbox/basic.js.map +1 -1
- package/dist/src/integrations/sandbox/index.d.ts +6 -0
- package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/index.js +3 -0
- package/dist/src/integrations/sandbox/index.js.map +1 -1
- package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -1
- package/dist/src/integrations/sandbox/landlock.js +3 -0
- package/dist/src/integrations/sandbox/landlock.js.map +1 -1
- package/dist/src/integrations/self-improvement.d.ts +90 -0
- package/dist/src/integrations/self-improvement.d.ts.map +1 -0
- package/dist/src/integrations/self-improvement.js +229 -0
- package/dist/src/integrations/self-improvement.js.map +1 -0
- package/dist/src/integrations/smart-decomposer.d.ts +22 -1
- package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
- package/dist/src/integrations/smart-decomposer.js +127 -28
- package/dist/src/integrations/smart-decomposer.js.map +1 -1
- package/dist/src/integrations/subagent-output-store.d.ts +91 -0
- package/dist/src/integrations/subagent-output-store.d.ts.map +1 -0
- package/dist/src/integrations/subagent-output-store.js +257 -0
- package/dist/src/integrations/subagent-output-store.js.map +1 -0
- package/dist/src/integrations/swarm/index.d.ts +2 -2
- package/dist/src/integrations/swarm/index.d.ts.map +1 -1
- package/dist/src/integrations/swarm/index.js +1 -1
- package/dist/src/integrations/swarm/index.js.map +1 -1
- package/dist/src/integrations/swarm/model-selector.d.ts +16 -0
- package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
- package/dist/src/integrations/swarm/model-selector.js +123 -10
- package/dist/src/integrations/swarm/model-selector.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.d.ts +4 -0
- package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-budget.js +6 -0
- package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts +10 -1
- package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-config-loader.js +226 -13
- package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +12 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-event-bridge.js +178 -9
- package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts +66 -1
- package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-events.js +26 -5
- package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +127 -0
- package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-orchestrator.js +1842 -47
- package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +91 -3
- package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
- package/dist/src/integrations/swarm/swarm-quality-gate.js +395 -19
- package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
- package/dist/src/integrations/swarm/task-queue.d.ts +55 -1
- package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
- package/dist/src/integrations/swarm/task-queue.js +389 -16
- package/dist/src/integrations/swarm/task-queue.js.map +1 -1
- package/dist/src/integrations/swarm/types.d.ts +247 -11
- package/dist/src/integrations/swarm/types.d.ts.map +1 -1
- package/dist/src/integrations/swarm/types.js +67 -9
- package/dist/src/integrations/swarm/types.js.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.d.ts +18 -5
- package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
- package/dist/src/integrations/swarm/worker-pool.js +236 -34
- package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
- package/dist/src/integrations/thinking-strategy.d.ts +52 -0
- package/dist/src/integrations/thinking-strategy.d.ts.map +1 -0
- package/dist/src/integrations/thinking-strategy.js +129 -0
- package/dist/src/integrations/thinking-strategy.js.map +1 -0
- package/dist/src/integrations/tool-recommendation.d.ts +61 -0
- package/dist/src/integrations/tool-recommendation.d.ts.map +1 -0
- package/dist/src/integrations/tool-recommendation.js +268 -0
- package/dist/src/integrations/tool-recommendation.js.map +1 -0
- package/dist/src/integrations/verification-gate.d.ts +80 -0
- package/dist/src/integrations/verification-gate.d.ts.map +1 -0
- package/dist/src/integrations/verification-gate.js +146 -0
- package/dist/src/integrations/verification-gate.js.map +1 -0
- package/dist/src/integrations/work-log.d.ts +87 -0
- package/dist/src/integrations/work-log.d.ts.map +1 -0
- package/dist/src/integrations/work-log.js +275 -0
- package/dist/src/integrations/work-log.js.map +1 -0
- package/dist/src/main.js +31 -5
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +10 -4
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +5 -0
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/modes.d.ts +6 -0
- package/dist/src/modes.d.ts.map +1 -1
- package/dist/src/modes.js +69 -21
- package/dist/src/modes.js.map +1 -1
- package/dist/src/tools/agent.d.ts.map +1 -1
- package/dist/src/tools/agent.js +11 -2
- package/dist/src/tools/agent.js.map +1 -1
- package/dist/src/tools/bash.d.ts +9 -3
- package/dist/src/tools/bash.d.ts.map +1 -1
- package/dist/src/tools/bash.js +12 -0
- package/dist/src/tools/bash.js.map +1 -1
- package/dist/src/tools/coercion.d.ts +6 -0
- package/dist/src/tools/coercion.d.ts.map +1 -1
- package/dist/src/tools/coercion.js +13 -0
- package/dist/src/tools/coercion.js.map +1 -1
- package/dist/src/tools/file.d.ts +2 -2
- package/dist/src/tools/file.js +2 -2
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tools/permission.d.ts.map +1 -1
- package/dist/src/tools/permission.js +4 -111
- package/dist/src/tools/permission.js.map +1 -1
- package/dist/src/tools/standard.d.ts +17 -1
- package/dist/src/tools/standard.d.ts.map +1 -1
- package/dist/src/tools/standard.js +64 -11
- package/dist/src/tools/standard.js.map +1 -1
- package/dist/src/tracing/trace-collector.d.ts +167 -0
- package/dist/src/tracing/trace-collector.d.ts.map +1 -1
- package/dist/src/tracing/trace-collector.js +137 -0
- package/dist/src/tracing/trace-collector.js.map +1 -1
- package/dist/src/tracing/types.d.ts +105 -1
- package/dist/src/tracing/types.d.ts.map +1 -1
- package/dist/src/tracing/types.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +34 -5
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/types.d.ts +89 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async Subagent Execution
|
|
3
|
+
*
|
|
4
|
+
* Provides non-blocking subagent spawning, returning a SubagentHandle
|
|
5
|
+
* that the parent can monitor, steer, or cancel without blocking.
|
|
6
|
+
*
|
|
7
|
+
* This enables the parent coordinator to:
|
|
8
|
+
* - Spawn multiple subagents and monitor them in a supervision loop
|
|
9
|
+
* - Redirect stuck agents before they exhaust their timeout
|
|
10
|
+
* - Cancel agents that are no longer needed (e.g., another found the answer)
|
|
11
|
+
* - Collect partial results from agents that timed out
|
|
12
|
+
*
|
|
13
|
+
* Design: wraps existing spawn infrastructure with Promise-based handles.
|
|
14
|
+
*/
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// HANDLE FACTORY
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Create an async subagent handle that wraps a spawn operation.
|
|
20
|
+
*
|
|
21
|
+
* This is a handle-only pattern: the actual spawning is still done by
|
|
22
|
+
* the parent's spawnAgent() method. This function wraps the promise
|
|
23
|
+
* and provides the control interface.
|
|
24
|
+
*/
|
|
25
|
+
export function createSubagentHandle(id, agentName, task, spawnPromise, controls) {
|
|
26
|
+
let running = true;
|
|
27
|
+
let result;
|
|
28
|
+
const progressCallbacks = [];
|
|
29
|
+
// Track completion
|
|
30
|
+
const completion = spawnPromise.then((res) => {
|
|
31
|
+
running = false;
|
|
32
|
+
result = res;
|
|
33
|
+
return res;
|
|
34
|
+
}, (err) => {
|
|
35
|
+
running = false;
|
|
36
|
+
const failResult = {
|
|
37
|
+
success: false,
|
|
38
|
+
output: err instanceof Error ? err.message : String(err),
|
|
39
|
+
metrics: { tokens: 0, duration: Date.now() - startedAt, toolCalls: 0 },
|
|
40
|
+
};
|
|
41
|
+
result = failResult;
|
|
42
|
+
return failResult;
|
|
43
|
+
});
|
|
44
|
+
const startedAt = Date.now();
|
|
45
|
+
const defaultProgress = {
|
|
46
|
+
iterations: 0,
|
|
47
|
+
toolCalls: 0,
|
|
48
|
+
tokensUsed: 0,
|
|
49
|
+
wrapupRequested: false,
|
|
50
|
+
elapsedMs: 0,
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
id,
|
|
54
|
+
agentName,
|
|
55
|
+
task,
|
|
56
|
+
completion,
|
|
57
|
+
startedAt,
|
|
58
|
+
isRunning: () => running,
|
|
59
|
+
requestWrapup: (reason) => {
|
|
60
|
+
controls.requestWrapup?.(reason);
|
|
61
|
+
},
|
|
62
|
+
cancel: () => {
|
|
63
|
+
controls.cancel?.();
|
|
64
|
+
},
|
|
65
|
+
getProgress: () => {
|
|
66
|
+
if (!running && result) {
|
|
67
|
+
return {
|
|
68
|
+
iterations: 0,
|
|
69
|
+
toolCalls: result.metrics.toolCalls,
|
|
70
|
+
tokensUsed: result.metrics.tokens,
|
|
71
|
+
wrapupRequested: false,
|
|
72
|
+
elapsedMs: result.metrics.duration,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const progress = controls.getProgress?.() ?? {
|
|
76
|
+
...defaultProgress,
|
|
77
|
+
elapsedMs: Date.now() - startedAt,
|
|
78
|
+
};
|
|
79
|
+
return progress;
|
|
80
|
+
},
|
|
81
|
+
onProgress: (callback) => {
|
|
82
|
+
progressCallbacks.push(callback);
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// =============================================================================
|
|
87
|
+
// SUPERVISOR
|
|
88
|
+
// =============================================================================
|
|
89
|
+
/**
|
|
90
|
+
* Supervise multiple async subagents.
|
|
91
|
+
* Monitors progress and applies policies (idle timeout, token budget).
|
|
92
|
+
*/
|
|
93
|
+
export class SubagentSupervisor {
|
|
94
|
+
handles = new Map();
|
|
95
|
+
config;
|
|
96
|
+
checkTimer = null;
|
|
97
|
+
constructor(config) {
|
|
98
|
+
this.config = {
|
|
99
|
+
checkIntervalMs: config?.checkIntervalMs ?? 10000,
|
|
100
|
+
maxDurationMs: config?.maxDurationMs ?? 0,
|
|
101
|
+
tokenBudgetWrapup: config?.tokenBudgetWrapup ?? 0,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Add a handle to supervise.
|
|
106
|
+
*/
|
|
107
|
+
add(handle) {
|
|
108
|
+
this.handles.set(handle.id, handle);
|
|
109
|
+
this.ensureChecking();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Remove a handle from supervision.
|
|
113
|
+
*/
|
|
114
|
+
remove(handleId) {
|
|
115
|
+
this.handles.delete(handleId);
|
|
116
|
+
if (this.handles.size === 0) {
|
|
117
|
+
this.stopChecking();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get all active handles.
|
|
122
|
+
*/
|
|
123
|
+
getActive() {
|
|
124
|
+
return [...this.handles.values()].filter(h => h.isRunning());
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get all completed handles.
|
|
128
|
+
*/
|
|
129
|
+
getCompleted() {
|
|
130
|
+
return [...this.handles.values()].filter(h => !h.isRunning());
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Wait for all handles to complete (or timeout).
|
|
134
|
+
*/
|
|
135
|
+
async waitAll(timeoutMs) {
|
|
136
|
+
const promises = [...this.handles.values()].map(h => h.completion);
|
|
137
|
+
if (timeoutMs) {
|
|
138
|
+
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('Supervisor timeout')), timeoutMs));
|
|
139
|
+
return Promise.race([
|
|
140
|
+
Promise.all(promises),
|
|
141
|
+
timeout.then(() => []),
|
|
142
|
+
]);
|
|
143
|
+
}
|
|
144
|
+
return Promise.all(promises);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Wait for any handle to complete. Returns the first completed result.
|
|
148
|
+
*/
|
|
149
|
+
async waitAny() {
|
|
150
|
+
const entries = [...this.handles.entries()];
|
|
151
|
+
const racePromises = entries.map(([id, handle]) => handle.completion.then(result => ({ id, handle, result })));
|
|
152
|
+
return Promise.race(racePromises);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Cancel all running agents.
|
|
156
|
+
*/
|
|
157
|
+
cancelAll() {
|
|
158
|
+
for (const handle of this.handles.values()) {
|
|
159
|
+
if (handle.isRunning()) {
|
|
160
|
+
handle.cancel();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Stop the supervisor check loop.
|
|
166
|
+
*/
|
|
167
|
+
stop() {
|
|
168
|
+
this.stopChecking();
|
|
169
|
+
this.handles.clear();
|
|
170
|
+
}
|
|
171
|
+
// ===========================================================================
|
|
172
|
+
// INTERNAL
|
|
173
|
+
// ===========================================================================
|
|
174
|
+
ensureChecking() {
|
|
175
|
+
if (this.checkTimer)
|
|
176
|
+
return;
|
|
177
|
+
this.checkTimer = setInterval(() => this.checkAgents(), this.config.checkIntervalMs);
|
|
178
|
+
}
|
|
179
|
+
stopChecking() {
|
|
180
|
+
if (this.checkTimer) {
|
|
181
|
+
clearInterval(this.checkTimer);
|
|
182
|
+
this.checkTimer = null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
checkAgents() {
|
|
186
|
+
for (const [id, handle] of this.handles) {
|
|
187
|
+
if (!handle.isRunning()) {
|
|
188
|
+
// Auto-remove completed handles
|
|
189
|
+
this.handles.delete(id);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const progress = handle.getProgress();
|
|
193
|
+
// Check max duration
|
|
194
|
+
if (this.config.maxDurationMs > 0 && progress.elapsedMs > this.config.maxDurationMs) {
|
|
195
|
+
handle.requestWrapup(`Duration exceeded ${this.config.maxDurationMs}ms`);
|
|
196
|
+
}
|
|
197
|
+
// Check token budget
|
|
198
|
+
if (this.config.tokenBudgetWrapup > 0 && progress.tokensUsed > this.config.tokenBudgetWrapup) {
|
|
199
|
+
handle.requestWrapup(`Token usage exceeded ${this.config.tokenBudgetWrapup}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (this.handles.size === 0) {
|
|
203
|
+
this.stopChecking();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Create a subagent supervisor.
|
|
209
|
+
*/
|
|
210
|
+
export function createSubagentSupervisor(config) {
|
|
211
|
+
return new SubagentSupervisor(config);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=async-subagent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-subagent.js","sourceRoot":"","sources":["../../../src/integrations/async-subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Checkpoint Resumption
|
|
3
|
+
*
|
|
4
|
+
* Saves lightweight checkpoints at key execution points so that
|
|
5
|
+
* work can be recovered if the agent crashes or times out.
|
|
6
|
+
*
|
|
7
|
+
* Key points where checkpoints are saved:
|
|
8
|
+
* - After each tool batch execution
|
|
9
|
+
* - Before LLM calls (so the prompt is recoverable)
|
|
10
|
+
* - After significant state changes (plan approval, mode switch)
|
|
11
|
+
*
|
|
12
|
+
* On startup, detects recent sessions (<5 min) and offers auto-resume.
|
|
13
|
+
*/
|
|
14
|
+
export interface Checkpoint {
|
|
15
|
+
/** Unique checkpoint ID */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Label describing the checkpoint point */
|
|
18
|
+
label: string;
|
|
19
|
+
/** Session ID this checkpoint belongs to */
|
|
20
|
+
sessionId: string;
|
|
21
|
+
/** Timestamp of the checkpoint */
|
|
22
|
+
timestamp: number;
|
|
23
|
+
/** Agent iteration count at this point */
|
|
24
|
+
iteration: number;
|
|
25
|
+
/** Messages up to this point (serialized) */
|
|
26
|
+
messages?: unknown[];
|
|
27
|
+
/** Current objective/task */
|
|
28
|
+
objective?: string;
|
|
29
|
+
/** Current mode */
|
|
30
|
+
mode?: string;
|
|
31
|
+
/** Files modified since last checkpoint */
|
|
32
|
+
filesModified?: string[];
|
|
33
|
+
/** Token usage at this point */
|
|
34
|
+
tokensUsed?: number;
|
|
35
|
+
/** Tool call history summary */
|
|
36
|
+
toolCallSummary?: string;
|
|
37
|
+
/** Custom metadata */
|
|
38
|
+
metadata?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export interface AutoCheckpointConfig {
|
|
41
|
+
/** Directory for checkpoint storage (default: '.agent/checkpoints') */
|
|
42
|
+
checkpointDir: string;
|
|
43
|
+
/** Maximum checkpoints to keep per session (default: 10) */
|
|
44
|
+
maxCheckpointsPerSession: number;
|
|
45
|
+
/** Auto-cleanup checkpoints older than this (ms, default: 3600000 = 1hr) */
|
|
46
|
+
maxAge: number;
|
|
47
|
+
/** Whether checkpointing is enabled (default: true) */
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
/** Minimum interval between checkpoints (ms, default: 30000) */
|
|
50
|
+
minInterval: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ResumeCandidate {
|
|
53
|
+
/** Session ID */
|
|
54
|
+
sessionId: string;
|
|
55
|
+
/** Most recent checkpoint */
|
|
56
|
+
checkpoint: Checkpoint;
|
|
57
|
+
/** Age of the checkpoint in ms */
|
|
58
|
+
ageMs: number;
|
|
59
|
+
/** Number of checkpoints available */
|
|
60
|
+
checkpointCount: number;
|
|
61
|
+
}
|
|
62
|
+
export declare class AutoCheckpointManager {
|
|
63
|
+
private config;
|
|
64
|
+
private lastCheckpointTime;
|
|
65
|
+
private checkpointCount;
|
|
66
|
+
constructor(config?: Partial<AutoCheckpointConfig>);
|
|
67
|
+
/**
|
|
68
|
+
* Save a checkpoint at a key execution point.
|
|
69
|
+
* Respects minInterval to avoid excessive I/O.
|
|
70
|
+
*/
|
|
71
|
+
save(checkpoint: Omit<Checkpoint, 'id' | 'timestamp'>): string | null;
|
|
72
|
+
/**
|
|
73
|
+
* Load a specific checkpoint.
|
|
74
|
+
*/
|
|
75
|
+
load(sessionId: string, checkpointId: string): Checkpoint | null;
|
|
76
|
+
/**
|
|
77
|
+
* Find sessions with recent checkpoints that could be resumed.
|
|
78
|
+
*/
|
|
79
|
+
findResumeCandidates(maxAgeMs?: number): ResumeCandidate[];
|
|
80
|
+
/**
|
|
81
|
+
* Load all checkpoints for a session, sorted by timestamp.
|
|
82
|
+
*/
|
|
83
|
+
loadSessionCheckpoints(sessionId: string): Checkpoint[];
|
|
84
|
+
/**
|
|
85
|
+
* Get a summary of a checkpoint for display.
|
|
86
|
+
*/
|
|
87
|
+
formatCheckpointSummary(checkpoint: Checkpoint): string;
|
|
88
|
+
/**
|
|
89
|
+
* Clean up old checkpoints globally.
|
|
90
|
+
*/
|
|
91
|
+
cleanupAll(): number;
|
|
92
|
+
private cleanupSession;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create an auto-checkpoint manager.
|
|
96
|
+
*/
|
|
97
|
+
export declare function createAutoCheckpointManager(config?: Partial<AutoCheckpointConfig>): AutoCheckpointManager;
|
|
98
|
+
//# sourceMappingURL=auto-checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-checkpoint.d.ts","sourceRoot":"","sources":["../../../src/integrations/auto-checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,wBAAwB,EAAE,MAAM,CAAC;IACjC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;CACzB;AAkBD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAYlD;;;OAGG;IACH,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI;IA0CrE;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAUhE;;OAEG;IACH,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IA2C1D;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE;IAwBvD;;OAEG;IACH,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IA2BvD;;OAEG;IACH,UAAU,IAAI,MAAM;IAyCpB,OAAO,CAAC,cAAc;CAiBvB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,qBAAqB,CAEvB"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Checkpoint Resumption
|
|
3
|
+
*
|
|
4
|
+
* Saves lightweight checkpoints at key execution points so that
|
|
5
|
+
* work can be recovered if the agent crashes or times out.
|
|
6
|
+
*
|
|
7
|
+
* Key points where checkpoints are saved:
|
|
8
|
+
* - After each tool batch execution
|
|
9
|
+
* - Before LLM calls (so the prompt is recoverable)
|
|
10
|
+
* - After significant state changes (plan approval, mode switch)
|
|
11
|
+
*
|
|
12
|
+
* On startup, detects recent sessions (<5 min) and offers auto-resume.
|
|
13
|
+
*/
|
|
14
|
+
import { writeFileSync, readFileSync, mkdirSync, existsSync, readdirSync, statSync, unlinkSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// CONSTANTS
|
|
18
|
+
// =============================================================================
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
checkpointDir: '.agent/checkpoints',
|
|
21
|
+
maxCheckpointsPerSession: 10,
|
|
22
|
+
maxAge: 3600000, // 1 hour
|
|
23
|
+
enabled: true,
|
|
24
|
+
minInterval: 30000, // 30 seconds
|
|
25
|
+
};
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// AUTO-CHECKPOINT MANAGER
|
|
28
|
+
// =============================================================================
|
|
29
|
+
export class AutoCheckpointManager {
|
|
30
|
+
config;
|
|
31
|
+
lastCheckpointTime = 0;
|
|
32
|
+
checkpointCount = 0;
|
|
33
|
+
constructor(config) {
|
|
34
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
35
|
+
if (this.config.enabled) {
|
|
36
|
+
try {
|
|
37
|
+
mkdirSync(this.config.checkpointDir, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Directory creation may fail
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Save a checkpoint at a key execution point.
|
|
46
|
+
* Respects minInterval to avoid excessive I/O.
|
|
47
|
+
*/
|
|
48
|
+
save(checkpoint) {
|
|
49
|
+
if (!this.config.enabled)
|
|
50
|
+
return null;
|
|
51
|
+
const now = Date.now();
|
|
52
|
+
if (now - this.lastCheckpointTime < this.config.minInterval) {
|
|
53
|
+
return null; // Too soon since last checkpoint
|
|
54
|
+
}
|
|
55
|
+
const id = `ckpt-${now}-${Math.random().toString(36).slice(2, 6)}`;
|
|
56
|
+
const fullCheckpoint = {
|
|
57
|
+
...checkpoint,
|
|
58
|
+
id,
|
|
59
|
+
timestamp: now,
|
|
60
|
+
};
|
|
61
|
+
try {
|
|
62
|
+
const sessionDir = join(this.config.checkpointDir, checkpoint.sessionId);
|
|
63
|
+
mkdirSync(sessionDir, { recursive: true });
|
|
64
|
+
const filePath = join(sessionDir, `${id}.json`);
|
|
65
|
+
// Don't persist full messages array to save space - just metadata
|
|
66
|
+
const persistable = {
|
|
67
|
+
...fullCheckpoint,
|
|
68
|
+
messages: undefined, // Strip messages to keep checkpoints small
|
|
69
|
+
_messageCount: fullCheckpoint.messages?.length ?? 0,
|
|
70
|
+
};
|
|
71
|
+
writeFileSync(filePath, JSON.stringify(persistable, null, 2), 'utf-8');
|
|
72
|
+
this.lastCheckpointTime = now;
|
|
73
|
+
this.checkpointCount++;
|
|
74
|
+
// Cleanup old checkpoints for this session
|
|
75
|
+
this.cleanupSession(checkpoint.sessionId);
|
|
76
|
+
return id;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Load a specific checkpoint.
|
|
84
|
+
*/
|
|
85
|
+
load(sessionId, checkpointId) {
|
|
86
|
+
try {
|
|
87
|
+
const filePath = join(this.config.checkpointDir, sessionId, `${checkpointId}.json`);
|
|
88
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
89
|
+
return JSON.parse(content);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Find sessions with recent checkpoints that could be resumed.
|
|
97
|
+
*/
|
|
98
|
+
findResumeCandidates(maxAgeMs) {
|
|
99
|
+
const maxAge = maxAgeMs ?? 300000; // Default: 5 minutes
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
const candidates = [];
|
|
102
|
+
try {
|
|
103
|
+
if (!existsSync(this.config.checkpointDir))
|
|
104
|
+
return [];
|
|
105
|
+
const sessions = readdirSync(this.config.checkpointDir);
|
|
106
|
+
for (const sessionId of sessions) {
|
|
107
|
+
const sessionDir = join(this.config.checkpointDir, sessionId);
|
|
108
|
+
try {
|
|
109
|
+
const stat = statSync(sessionDir);
|
|
110
|
+
if (!stat.isDirectory())
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const checkpoints = this.loadSessionCheckpoints(sessionId);
|
|
117
|
+
if (checkpoints.length === 0)
|
|
118
|
+
continue;
|
|
119
|
+
// Most recent checkpoint
|
|
120
|
+
const latest = checkpoints[checkpoints.length - 1];
|
|
121
|
+
const age = now - latest.timestamp;
|
|
122
|
+
if (age <= maxAge) {
|
|
123
|
+
candidates.push({
|
|
124
|
+
sessionId,
|
|
125
|
+
checkpoint: latest,
|
|
126
|
+
ageMs: age,
|
|
127
|
+
checkpointCount: checkpoints.length,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Directory reading may fail
|
|
134
|
+
}
|
|
135
|
+
// Sort by recency (most recent first)
|
|
136
|
+
return candidates.sort((a, b) => a.ageMs - b.ageMs);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Load all checkpoints for a session, sorted by timestamp.
|
|
140
|
+
*/
|
|
141
|
+
loadSessionCheckpoints(sessionId) {
|
|
142
|
+
const sessionDir = join(this.config.checkpointDir, sessionId);
|
|
143
|
+
const checkpoints = [];
|
|
144
|
+
try {
|
|
145
|
+
if (!existsSync(sessionDir))
|
|
146
|
+
return [];
|
|
147
|
+
const files = readdirSync(sessionDir).filter(f => f.endsWith('.json'));
|
|
148
|
+
for (const file of files) {
|
|
149
|
+
try {
|
|
150
|
+
const content = readFileSync(join(sessionDir, file), 'utf-8');
|
|
151
|
+
checkpoints.push(JSON.parse(content));
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Skip malformed checkpoints
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
return checkpoints.sort((a, b) => a.timestamp - b.timestamp);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get a summary of a checkpoint for display.
|
|
165
|
+
*/
|
|
166
|
+
formatCheckpointSummary(checkpoint) {
|
|
167
|
+
const age = Date.now() - checkpoint.timestamp;
|
|
168
|
+
const ageStr = age < 60000
|
|
169
|
+
? `${Math.round(age / 1000)}s ago`
|
|
170
|
+
: `${Math.round(age / 60000)}m ago`;
|
|
171
|
+
const lines = [
|
|
172
|
+
`Session: ${checkpoint.sessionId}`,
|
|
173
|
+
`Checkpoint: ${checkpoint.label} (${ageStr})`,
|
|
174
|
+
`Iteration: ${checkpoint.iteration}`,
|
|
175
|
+
];
|
|
176
|
+
if (checkpoint.objective) {
|
|
177
|
+
lines.push(`Objective: ${checkpoint.objective.slice(0, 100)}`);
|
|
178
|
+
}
|
|
179
|
+
if (checkpoint.tokensUsed) {
|
|
180
|
+
lines.push(`Tokens used: ${checkpoint.tokensUsed}`);
|
|
181
|
+
}
|
|
182
|
+
if (checkpoint.filesModified && checkpoint.filesModified.length > 0) {
|
|
183
|
+
lines.push(`Files modified: ${checkpoint.filesModified.join(', ')}`);
|
|
184
|
+
}
|
|
185
|
+
return lines.join('\n');
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Clean up old checkpoints globally.
|
|
189
|
+
*/
|
|
190
|
+
cleanupAll() {
|
|
191
|
+
let cleaned = 0;
|
|
192
|
+
const now = Date.now();
|
|
193
|
+
try {
|
|
194
|
+
if (!existsSync(this.config.checkpointDir))
|
|
195
|
+
return 0;
|
|
196
|
+
const sessions = readdirSync(this.config.checkpointDir);
|
|
197
|
+
for (const sessionId of sessions) {
|
|
198
|
+
const sessionDir = join(this.config.checkpointDir, sessionId);
|
|
199
|
+
try {
|
|
200
|
+
const stat = statSync(sessionDir);
|
|
201
|
+
if (!stat.isDirectory())
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const checkpoints = this.loadSessionCheckpoints(sessionId);
|
|
208
|
+
for (const ckpt of checkpoints) {
|
|
209
|
+
if (now - ckpt.timestamp > this.config.maxAge) {
|
|
210
|
+
try {
|
|
211
|
+
unlinkSync(join(sessionDir, `${ckpt.id}.json`));
|
|
212
|
+
cleaned++;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Deletion may fail
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Directory operations may fail
|
|
223
|
+
}
|
|
224
|
+
return cleaned;
|
|
225
|
+
}
|
|
226
|
+
// ===========================================================================
|
|
227
|
+
// INTERNAL
|
|
228
|
+
// ===========================================================================
|
|
229
|
+
cleanupSession(sessionId) {
|
|
230
|
+
const checkpoints = this.loadSessionCheckpoints(sessionId);
|
|
231
|
+
if (checkpoints.length > this.config.maxCheckpointsPerSession) {
|
|
232
|
+
// Remove oldest checkpoints
|
|
233
|
+
const toRemove = checkpoints.slice(0, checkpoints.length - this.config.maxCheckpointsPerSession);
|
|
234
|
+
const sessionDir = join(this.config.checkpointDir, sessionId);
|
|
235
|
+
for (const ckpt of toRemove) {
|
|
236
|
+
try {
|
|
237
|
+
unlinkSync(join(sessionDir, `${ckpt.id}.json`));
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Deletion may fail
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create an auto-checkpoint manager.
|
|
248
|
+
*/
|
|
249
|
+
export function createAutoCheckpointManager(config) {
|
|
250
|
+
return new AutoCheckpointManager(config);
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=auto-checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-checkpoint.js","sourceRoot":"","sources":["../../../src/integrations/auto-checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compaction.d.ts","sourceRoot":"","sources":["../../../src/integrations/auto-compaction.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auto-compaction.d.ts","sourceRoot":"","sources":["../../../src/integrations/auto-compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -365,9 +365,13 @@ export class AutoCompactionManager {
|
|
|
365
365
|
truncatedMessages.push(systemMessage);
|
|
366
366
|
}
|
|
367
367
|
// Add a marker message about the truncation
|
|
368
|
+
const removedCount = messagesBefore - preservedMessages.length - (systemMessage ? 1 : 0);
|
|
368
369
|
truncatedMessages.push({
|
|
369
370
|
role: 'system',
|
|
370
|
-
content: `[CONTEXT
|
|
371
|
+
content: `[CONTEXT REDUCED - Emergency truncation]\n\nPrevious context was truncated to stay within token limits.\n` +
|
|
372
|
+
`${removedCount} messages were removed. ` +
|
|
373
|
+
`Continue working from the preserved messages below. ` +
|
|
374
|
+
`If you need context from earlier in the conversation, check your goals and work log.`,
|
|
371
375
|
});
|
|
372
376
|
truncatedMessages.push(...preservedMessages);
|
|
373
377
|
const messagesAfter = truncatedMessages.length;
|