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.
Files changed (219) hide show
  1. package/CHANGELOG.md +191 -1
  2. package/README.md +7 -0
  3. package/dist/src/adapters.d.ts +6 -1
  4. package/dist/src/adapters.d.ts.map +1 -1
  5. package/dist/src/adapters.js +8 -1
  6. package/dist/src/adapters.js.map +1 -1
  7. package/dist/src/agent.d.ts +41 -4
  8. package/dist/src/agent.d.ts.map +1 -1
  9. package/dist/src/agent.js +846 -75
  10. package/dist/src/agent.js.map +1 -1
  11. package/dist/src/cli.d.ts.map +1 -1
  12. package/dist/src/cli.js +23 -2
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/core/protocol/types.d.ts +8 -8
  15. package/dist/src/defaults.d.ts +7 -2
  16. package/dist/src/defaults.d.ts.map +1 -1
  17. package/dist/src/defaults.js +38 -2
  18. package/dist/src/defaults.js.map +1 -1
  19. package/dist/src/integrations/agent-registry.d.ts +13 -0
  20. package/dist/src/integrations/agent-registry.d.ts.map +1 -1
  21. package/dist/src/integrations/agent-registry.js.map +1 -1
  22. package/dist/src/integrations/async-subagent.d.ts +135 -0
  23. package/dist/src/integrations/async-subagent.d.ts.map +1 -0
  24. package/dist/src/integrations/async-subagent.js +213 -0
  25. package/dist/src/integrations/async-subagent.js.map +1 -0
  26. package/dist/src/integrations/auto-checkpoint.d.ts +98 -0
  27. package/dist/src/integrations/auto-checkpoint.d.ts.map +1 -0
  28. package/dist/src/integrations/auto-checkpoint.js +252 -0
  29. package/dist/src/integrations/auto-checkpoint.js.map +1 -0
  30. package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
  31. package/dist/src/integrations/auto-compaction.js +5 -1
  32. package/dist/src/integrations/auto-compaction.js.map +1 -1
  33. package/dist/src/integrations/bash-policy.d.ts +33 -0
  34. package/dist/src/integrations/bash-policy.d.ts.map +1 -0
  35. package/dist/src/integrations/bash-policy.js +142 -0
  36. package/dist/src/integrations/bash-policy.js.map +1 -0
  37. package/dist/src/integrations/codebase-context.d.ts +5 -0
  38. package/dist/src/integrations/codebase-context.d.ts.map +1 -1
  39. package/dist/src/integrations/codebase-context.js +33 -0
  40. package/dist/src/integrations/codebase-context.js.map +1 -1
  41. package/dist/src/integrations/complexity-classifier.d.ts +86 -0
  42. package/dist/src/integrations/complexity-classifier.d.ts.map +1 -0
  43. package/dist/src/integrations/complexity-classifier.js +233 -0
  44. package/dist/src/integrations/complexity-classifier.js.map +1 -0
  45. package/dist/src/integrations/delegation-protocol.d.ts +86 -0
  46. package/dist/src/integrations/delegation-protocol.d.ts.map +1 -0
  47. package/dist/src/integrations/delegation-protocol.js +127 -0
  48. package/dist/src/integrations/delegation-protocol.js.map +1 -0
  49. package/dist/src/integrations/dynamic-budget.d.ts +81 -0
  50. package/dist/src/integrations/dynamic-budget.d.ts.map +1 -0
  51. package/dist/src/integrations/dynamic-budget.js +151 -0
  52. package/dist/src/integrations/dynamic-budget.js.map +1 -0
  53. package/dist/src/integrations/economics.d.ts +86 -1
  54. package/dist/src/integrations/economics.d.ts.map +1 -1
  55. package/dist/src/integrations/economics.js +306 -11
  56. package/dist/src/integrations/economics.js.map +1 -1
  57. package/dist/src/integrations/environment-facts.d.ts +52 -0
  58. package/dist/src/integrations/environment-facts.d.ts.map +1 -0
  59. package/dist/src/integrations/environment-facts.js +84 -0
  60. package/dist/src/integrations/environment-facts.js.map +1 -0
  61. package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
  62. package/dist/src/integrations/hierarchical-config.js +17 -0
  63. package/dist/src/integrations/hierarchical-config.js.map +1 -1
  64. package/dist/src/integrations/index.d.ts +19 -2
  65. package/dist/src/integrations/index.d.ts.map +1 -1
  66. package/dist/src/integrations/index.js +34 -2
  67. package/dist/src/integrations/index.js.map +1 -1
  68. package/dist/src/integrations/injection-budget.d.ts +71 -0
  69. package/dist/src/integrations/injection-budget.d.ts.map +1 -0
  70. package/dist/src/integrations/injection-budget.js +136 -0
  71. package/dist/src/integrations/injection-budget.js.map +1 -0
  72. package/dist/src/integrations/mcp-client.d.ts.map +1 -1
  73. package/dist/src/integrations/mcp-client.js +14 -0
  74. package/dist/src/integrations/mcp-client.js.map +1 -1
  75. package/dist/src/integrations/mcp-custom-tools.d.ts +102 -0
  76. package/dist/src/integrations/mcp-custom-tools.d.ts.map +1 -0
  77. package/dist/src/integrations/mcp-custom-tools.js +232 -0
  78. package/dist/src/integrations/mcp-custom-tools.js.map +1 -0
  79. package/dist/src/integrations/mcp-tool-validator.d.ts +60 -0
  80. package/dist/src/integrations/mcp-tool-validator.d.ts.map +1 -0
  81. package/dist/src/integrations/mcp-tool-validator.js +141 -0
  82. package/dist/src/integrations/mcp-tool-validator.js.map +1 -0
  83. package/dist/src/integrations/policy-engine.d.ts +55 -0
  84. package/dist/src/integrations/policy-engine.d.ts.map +1 -0
  85. package/dist/src/integrations/policy-engine.js +247 -0
  86. package/dist/src/integrations/policy-engine.js.map +1 -0
  87. package/dist/src/integrations/safety.d.ts +5 -4
  88. package/dist/src/integrations/safety.d.ts.map +1 -1
  89. package/dist/src/integrations/safety.js +32 -7
  90. package/dist/src/integrations/safety.js.map +1 -1
  91. package/dist/src/integrations/sandbox/basic.d.ts +7 -0
  92. package/dist/src/integrations/sandbox/basic.d.ts.map +1 -1
  93. package/dist/src/integrations/sandbox/basic.js +27 -2
  94. package/dist/src/integrations/sandbox/basic.js.map +1 -1
  95. package/dist/src/integrations/sandbox/index.d.ts +6 -0
  96. package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
  97. package/dist/src/integrations/sandbox/index.js +3 -0
  98. package/dist/src/integrations/sandbox/index.js.map +1 -1
  99. package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -1
  100. package/dist/src/integrations/sandbox/landlock.js +3 -0
  101. package/dist/src/integrations/sandbox/landlock.js.map +1 -1
  102. package/dist/src/integrations/self-improvement.d.ts +90 -0
  103. package/dist/src/integrations/self-improvement.d.ts.map +1 -0
  104. package/dist/src/integrations/self-improvement.js +229 -0
  105. package/dist/src/integrations/self-improvement.js.map +1 -0
  106. package/dist/src/integrations/smart-decomposer.d.ts +22 -1
  107. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
  108. package/dist/src/integrations/smart-decomposer.js +127 -28
  109. package/dist/src/integrations/smart-decomposer.js.map +1 -1
  110. package/dist/src/integrations/subagent-output-store.d.ts +91 -0
  111. package/dist/src/integrations/subagent-output-store.d.ts.map +1 -0
  112. package/dist/src/integrations/subagent-output-store.js +257 -0
  113. package/dist/src/integrations/subagent-output-store.js.map +1 -0
  114. package/dist/src/integrations/swarm/index.d.ts +2 -2
  115. package/dist/src/integrations/swarm/index.d.ts.map +1 -1
  116. package/dist/src/integrations/swarm/index.js +1 -1
  117. package/dist/src/integrations/swarm/index.js.map +1 -1
  118. package/dist/src/integrations/swarm/model-selector.d.ts +16 -0
  119. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
  120. package/dist/src/integrations/swarm/model-selector.js +123 -10
  121. package/dist/src/integrations/swarm/model-selector.js.map +1 -1
  122. package/dist/src/integrations/swarm/swarm-budget.d.ts +4 -0
  123. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
  124. package/dist/src/integrations/swarm/swarm-budget.js +6 -0
  125. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
  126. package/dist/src/integrations/swarm/swarm-config-loader.d.ts +10 -1
  127. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
  128. package/dist/src/integrations/swarm/swarm-config-loader.js +226 -13
  129. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
  130. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +12 -1
  131. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
  132. package/dist/src/integrations/swarm/swarm-event-bridge.js +178 -9
  133. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
  134. package/dist/src/integrations/swarm/swarm-events.d.ts +66 -1
  135. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
  136. package/dist/src/integrations/swarm/swarm-events.js +26 -5
  137. package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
  138. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +127 -0
  139. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
  140. package/dist/src/integrations/swarm/swarm-orchestrator.js +1842 -47
  141. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
  142. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts +91 -3
  143. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
  144. package/dist/src/integrations/swarm/swarm-quality-gate.js +395 -19
  145. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
  146. package/dist/src/integrations/swarm/task-queue.d.ts +55 -1
  147. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
  148. package/dist/src/integrations/swarm/task-queue.js +389 -16
  149. package/dist/src/integrations/swarm/task-queue.js.map +1 -1
  150. package/dist/src/integrations/swarm/types.d.ts +247 -11
  151. package/dist/src/integrations/swarm/types.d.ts.map +1 -1
  152. package/dist/src/integrations/swarm/types.js +67 -9
  153. package/dist/src/integrations/swarm/types.js.map +1 -1
  154. package/dist/src/integrations/swarm/worker-pool.d.ts +18 -5
  155. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
  156. package/dist/src/integrations/swarm/worker-pool.js +236 -34
  157. package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
  158. package/dist/src/integrations/thinking-strategy.d.ts +52 -0
  159. package/dist/src/integrations/thinking-strategy.d.ts.map +1 -0
  160. package/dist/src/integrations/thinking-strategy.js +129 -0
  161. package/dist/src/integrations/thinking-strategy.js.map +1 -0
  162. package/dist/src/integrations/tool-recommendation.d.ts +61 -0
  163. package/dist/src/integrations/tool-recommendation.d.ts.map +1 -0
  164. package/dist/src/integrations/tool-recommendation.js +268 -0
  165. package/dist/src/integrations/tool-recommendation.js.map +1 -0
  166. package/dist/src/integrations/verification-gate.d.ts +80 -0
  167. package/dist/src/integrations/verification-gate.d.ts.map +1 -0
  168. package/dist/src/integrations/verification-gate.js +146 -0
  169. package/dist/src/integrations/verification-gate.js.map +1 -0
  170. package/dist/src/integrations/work-log.d.ts +87 -0
  171. package/dist/src/integrations/work-log.d.ts.map +1 -0
  172. package/dist/src/integrations/work-log.js +275 -0
  173. package/dist/src/integrations/work-log.js.map +1 -0
  174. package/dist/src/main.js +31 -5
  175. package/dist/src/main.js.map +1 -1
  176. package/dist/src/modes/repl.d.ts.map +1 -1
  177. package/dist/src/modes/repl.js +10 -4
  178. package/dist/src/modes/repl.js.map +1 -1
  179. package/dist/src/modes/tui.d.ts.map +1 -1
  180. package/dist/src/modes/tui.js +5 -0
  181. package/dist/src/modes/tui.js.map +1 -1
  182. package/dist/src/modes.d.ts +6 -0
  183. package/dist/src/modes.d.ts.map +1 -1
  184. package/dist/src/modes.js +69 -21
  185. package/dist/src/modes.js.map +1 -1
  186. package/dist/src/tools/agent.d.ts.map +1 -1
  187. package/dist/src/tools/agent.js +11 -2
  188. package/dist/src/tools/agent.js.map +1 -1
  189. package/dist/src/tools/bash.d.ts +9 -3
  190. package/dist/src/tools/bash.d.ts.map +1 -1
  191. package/dist/src/tools/bash.js +12 -0
  192. package/dist/src/tools/bash.js.map +1 -1
  193. package/dist/src/tools/coercion.d.ts +6 -0
  194. package/dist/src/tools/coercion.d.ts.map +1 -1
  195. package/dist/src/tools/coercion.js +13 -0
  196. package/dist/src/tools/coercion.js.map +1 -1
  197. package/dist/src/tools/file.d.ts +2 -2
  198. package/dist/src/tools/file.js +2 -2
  199. package/dist/src/tools/file.js.map +1 -1
  200. package/dist/src/tools/permission.d.ts.map +1 -1
  201. package/dist/src/tools/permission.js +4 -111
  202. package/dist/src/tools/permission.js.map +1 -1
  203. package/dist/src/tools/standard.d.ts +17 -1
  204. package/dist/src/tools/standard.d.ts.map +1 -1
  205. package/dist/src/tools/standard.js +64 -11
  206. package/dist/src/tools/standard.js.map +1 -1
  207. package/dist/src/tracing/trace-collector.d.ts +167 -0
  208. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  209. package/dist/src/tracing/trace-collector.js +137 -0
  210. package/dist/src/tracing/trace-collector.js.map +1 -1
  211. package/dist/src/tracing/types.d.ts +105 -1
  212. package/dist/src/tracing/types.d.ts.map +1 -1
  213. package/dist/src/tracing/types.js.map +1 -1
  214. package/dist/src/tui/app.d.ts.map +1 -1
  215. package/dist/src/tui/app.js +34 -5
  216. package/dist/src/tui/app.js.map +1 -1
  217. package/dist/src/types.d.ts +89 -0
  218. package/dist/src/types.d.ts.map +1 -1
  219. 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 TRUNCATED: ${messagesBefore - preservedMessages.length - (systemMessage ? 1 : 0)} messages were removed due to compaction failure. The conversation continues from the most recent ${preservedMessages.length} messages.]`,
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;