attocode 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +21 -0
  3. package/README.md +164 -0
  4. package/dist/src/adapters.d.ts +83 -0
  5. package/dist/src/adapters.d.ts.map +1 -0
  6. package/dist/src/adapters.js +221 -0
  7. package/dist/src/adapters.js.map +1 -0
  8. package/dist/src/agent-tools/index.d.ts +7 -0
  9. package/dist/src/agent-tools/index.d.ts.map +1 -0
  10. package/dist/src/agent-tools/index.js +8 -0
  11. package/dist/src/agent-tools/index.js.map +1 -0
  12. package/dist/src/agent-tools/lsp-file-tools.d.ts +33 -0
  13. package/dist/src/agent-tools/lsp-file-tools.d.ts.map +1 -0
  14. package/dist/src/agent-tools/lsp-file-tools.js +200 -0
  15. package/dist/src/agent-tools/lsp-file-tools.js.map +1 -0
  16. package/dist/src/agent.d.ts +667 -0
  17. package/dist/src/agent.d.ts.map +1 -0
  18. package/dist/src/agent.js +2824 -0
  19. package/dist/src/agent.js.map +1 -0
  20. package/dist/src/cli.d.ts +36 -0
  21. package/dist/src/cli.d.ts.map +1 -0
  22. package/dist/src/cli.js +176 -0
  23. package/dist/src/cli.js.map +1 -0
  24. package/dist/src/commands/handler.d.ts +22 -0
  25. package/dist/src/commands/handler.d.ts.map +1 -0
  26. package/dist/src/commands/handler.js +1320 -0
  27. package/dist/src/commands/handler.js.map +1 -0
  28. package/dist/src/commands/init.d.ts +7 -0
  29. package/dist/src/commands/init.d.ts.map +1 -0
  30. package/dist/src/commands/init.js +153 -0
  31. package/dist/src/commands/init.js.map +1 -0
  32. package/dist/src/commands/types.d.ts +70 -0
  33. package/dist/src/commands/types.d.ts.map +1 -0
  34. package/dist/src/commands/types.js +8 -0
  35. package/dist/src/commands/types.js.map +1 -0
  36. package/dist/src/config.d.ts +22 -0
  37. package/dist/src/config.d.ts.map +1 -0
  38. package/dist/src/config.js +25 -0
  39. package/dist/src/config.js.map +1 -0
  40. package/dist/src/core/index.d.ts +32 -0
  41. package/dist/src/core/index.d.ts.map +1 -0
  42. package/dist/src/core/index.js +35 -0
  43. package/dist/src/core/index.js.map +1 -0
  44. package/dist/src/core/process-handlers.d.ts +43 -0
  45. package/dist/src/core/process-handlers.d.ts.map +1 -0
  46. package/dist/src/core/process-handlers.js +117 -0
  47. package/dist/src/core/process-handlers.js.map +1 -0
  48. package/dist/src/core/protocol/bridge.d.ts +117 -0
  49. package/dist/src/core/protocol/bridge.d.ts.map +1 -0
  50. package/dist/src/core/protocol/bridge.js +149 -0
  51. package/dist/src/core/protocol/bridge.js.map +1 -0
  52. package/dist/src/core/protocol/index.d.ts +8 -0
  53. package/dist/src/core/protocol/index.d.ts.map +1 -0
  54. package/dist/src/core/protocol/index.js +8 -0
  55. package/dist/src/core/protocol/index.js.map +1 -0
  56. package/dist/src/core/protocol/types.d.ts +539 -0
  57. package/dist/src/core/protocol/types.d.ts.map +1 -0
  58. package/dist/src/core/protocol/types.js +149 -0
  59. package/dist/src/core/protocol/types.js.map +1 -0
  60. package/dist/src/core/queues/atomic-counter.d.ts +36 -0
  61. package/dist/src/core/queues/atomic-counter.d.ts.map +1 -0
  62. package/dist/src/core/queues/atomic-counter.js +46 -0
  63. package/dist/src/core/queues/atomic-counter.js.map +1 -0
  64. package/dist/src/core/queues/event-queue.d.ts +126 -0
  65. package/dist/src/core/queues/event-queue.d.ts.map +1 -0
  66. package/dist/src/core/queues/event-queue.js +208 -0
  67. package/dist/src/core/queues/event-queue.js.map +1 -0
  68. package/dist/src/core/queues/index.d.ts +12 -0
  69. package/dist/src/core/queues/index.d.ts.map +1 -0
  70. package/dist/src/core/queues/index.js +15 -0
  71. package/dist/src/core/queues/index.js.map +1 -0
  72. package/dist/src/core/queues/submission-queue.d.ts +116 -0
  73. package/dist/src/core/queues/submission-queue.d.ts.map +1 -0
  74. package/dist/src/core/queues/submission-queue.js +236 -0
  75. package/dist/src/core/queues/submission-queue.js.map +1 -0
  76. package/dist/src/costs/index.d.ts +22 -0
  77. package/dist/src/costs/index.d.ts.map +1 -0
  78. package/dist/src/costs/index.js +22 -0
  79. package/dist/src/costs/index.js.map +1 -0
  80. package/dist/src/costs/model-registry.d.ts +80 -0
  81. package/dist/src/costs/model-registry.d.ts.map +1 -0
  82. package/dist/src/costs/model-registry.js +237 -0
  83. package/dist/src/costs/model-registry.js.map +1 -0
  84. package/dist/src/costs/types.d.ts +50 -0
  85. package/dist/src/costs/types.d.ts.map +1 -0
  86. package/dist/src/costs/types.js +2 -0
  87. package/dist/src/costs/types.js.map +1 -0
  88. package/dist/src/defaults.d.ts +114 -0
  89. package/dist/src/defaults.d.ts.map +1 -0
  90. package/dist/src/defaults.js +457 -0
  91. package/dist/src/defaults.js.map +1 -0
  92. package/dist/src/first-run.d.ts +35 -0
  93. package/dist/src/first-run.d.ts.map +1 -0
  94. package/dist/src/first-run.js +94 -0
  95. package/dist/src/first-run.js.map +1 -0
  96. package/dist/src/hello.d.ts +2 -0
  97. package/dist/src/hello.d.ts.map +1 -0
  98. package/dist/src/hello.js +4 -0
  99. package/dist/src/hello.js.map +1 -0
  100. package/dist/src/integrations/agent-registry.d.ts +160 -0
  101. package/dist/src/integrations/agent-registry.d.ts.map +1 -0
  102. package/dist/src/integrations/agent-registry.js +446 -0
  103. package/dist/src/integrations/agent-registry.js.map +1 -0
  104. package/dist/src/integrations/auto-compaction.d.ts +177 -0
  105. package/dist/src/integrations/auto-compaction.d.ts.map +1 -0
  106. package/dist/src/integrations/auto-compaction.js +428 -0
  107. package/dist/src/integrations/auto-compaction.js.map +1 -0
  108. package/dist/src/integrations/cancellation.d.ts +162 -0
  109. package/dist/src/integrations/cancellation.d.ts.map +1 -0
  110. package/dist/src/integrations/cancellation.js +339 -0
  111. package/dist/src/integrations/cancellation.js.map +1 -0
  112. package/dist/src/integrations/codebase-context.d.ts +319 -0
  113. package/dist/src/integrations/codebase-context.d.ts.map +1 -0
  114. package/dist/src/integrations/codebase-context.js +816 -0
  115. package/dist/src/integrations/codebase-context.js.map +1 -0
  116. package/dist/src/integrations/compaction.d.ts +192 -0
  117. package/dist/src/integrations/compaction.d.ts.map +1 -0
  118. package/dist/src/integrations/compaction.js +376 -0
  119. package/dist/src/integrations/compaction.js.map +1 -0
  120. package/dist/src/integrations/context-engineering.d.ts +246 -0
  121. package/dist/src/integrations/context-engineering.d.ts.map +1 -0
  122. package/dist/src/integrations/context-engineering.js +394 -0
  123. package/dist/src/integrations/context-engineering.js.map +1 -0
  124. package/dist/src/integrations/diff-utils.d.ts +105 -0
  125. package/dist/src/integrations/diff-utils.d.ts.map +1 -0
  126. package/dist/src/integrations/diff-utils.js +497 -0
  127. package/dist/src/integrations/diff-utils.js.map +1 -0
  128. package/dist/src/integrations/economics.d.ts +192 -0
  129. package/dist/src/integrations/economics.d.ts.map +1 -0
  130. package/dist/src/integrations/economics.js +431 -0
  131. package/dist/src/integrations/economics.js.map +1 -0
  132. package/dist/src/integrations/execution-policy.d.ts +189 -0
  133. package/dist/src/integrations/execution-policy.d.ts.map +1 -0
  134. package/dist/src/integrations/execution-policy.js +352 -0
  135. package/dist/src/integrations/execution-policy.js.map +1 -0
  136. package/dist/src/integrations/file-change-tracker.d.ts +161 -0
  137. package/dist/src/integrations/file-change-tracker.d.ts.map +1 -0
  138. package/dist/src/integrations/file-change-tracker.js +520 -0
  139. package/dist/src/integrations/file-change-tracker.js.map +1 -0
  140. package/dist/src/integrations/hierarchical-config.d.ts +212 -0
  141. package/dist/src/integrations/hierarchical-config.d.ts.map +1 -0
  142. package/dist/src/integrations/hierarchical-config.js +484 -0
  143. package/dist/src/integrations/hierarchical-config.js.map +1 -0
  144. package/dist/src/integrations/hooks.d.ts +114 -0
  145. package/dist/src/integrations/hooks.d.ts.map +1 -0
  146. package/dist/src/integrations/hooks.js +326 -0
  147. package/dist/src/integrations/hooks.js.map +1 -0
  148. package/dist/src/integrations/ignore.d.ts +143 -0
  149. package/dist/src/integrations/ignore.d.ts.map +1 -0
  150. package/dist/src/integrations/ignore.js +417 -0
  151. package/dist/src/integrations/ignore.js.map +1 -0
  152. package/dist/src/integrations/image-renderer.d.ts +119 -0
  153. package/dist/src/integrations/image-renderer.d.ts.map +1 -0
  154. package/dist/src/integrations/image-renderer.js +306 -0
  155. package/dist/src/integrations/image-renderer.js.map +1 -0
  156. package/dist/src/integrations/index.d.ts +42 -0
  157. package/dist/src/integrations/index.d.ts.map +1 -0
  158. package/dist/src/integrations/index.js +73 -0
  159. package/dist/src/integrations/index.js.map +1 -0
  160. package/dist/src/integrations/lsp.d.ts +196 -0
  161. package/dist/src/integrations/lsp.d.ts.map +1 -0
  162. package/dist/src/integrations/lsp.js +582 -0
  163. package/dist/src/integrations/lsp.js.map +1 -0
  164. package/dist/src/integrations/mcp-client.d.ts +270 -0
  165. package/dist/src/integrations/mcp-client.d.ts.map +1 -0
  166. package/dist/src/integrations/mcp-client.js +698 -0
  167. package/dist/src/integrations/mcp-client.js.map +1 -0
  168. package/dist/src/integrations/mcp-tool-search.d.ts +77 -0
  169. package/dist/src/integrations/mcp-tool-search.d.ts.map +1 -0
  170. package/dist/src/integrations/mcp-tool-search.js +220 -0
  171. package/dist/src/integrations/mcp-tool-search.js.map +1 -0
  172. package/dist/src/integrations/memory.d.ts +108 -0
  173. package/dist/src/integrations/memory.d.ts.map +1 -0
  174. package/dist/src/integrations/memory.js +288 -0
  175. package/dist/src/integrations/memory.js.map +1 -0
  176. package/dist/src/integrations/multi-agent.d.ts +150 -0
  177. package/dist/src/integrations/multi-agent.d.ts.map +1 -0
  178. package/dist/src/integrations/multi-agent.js +306 -0
  179. package/dist/src/integrations/multi-agent.js.map +1 -0
  180. package/dist/src/integrations/observability.d.ts +162 -0
  181. package/dist/src/integrations/observability.d.ts.map +1 -0
  182. package/dist/src/integrations/observability.js +406 -0
  183. package/dist/src/integrations/observability.js.map +1 -0
  184. package/dist/src/integrations/openrouter-pricing.d.ts +42 -0
  185. package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -0
  186. package/dist/src/integrations/openrouter-pricing.js +124 -0
  187. package/dist/src/integrations/openrouter-pricing.js.map +1 -0
  188. package/dist/src/integrations/pending-plan.d.ts +171 -0
  189. package/dist/src/integrations/pending-plan.d.ts.map +1 -0
  190. package/dist/src/integrations/pending-plan.js +244 -0
  191. package/dist/src/integrations/pending-plan.js.map +1 -0
  192. package/dist/src/integrations/persistence.d.ts +48 -0
  193. package/dist/src/integrations/persistence.d.ts.map +1 -0
  194. package/dist/src/integrations/persistence.js +196 -0
  195. package/dist/src/integrations/persistence.js.map +1 -0
  196. package/dist/src/integrations/planning.d.ts +96 -0
  197. package/dist/src/integrations/planning.d.ts.map +1 -0
  198. package/dist/src/integrations/planning.js +338 -0
  199. package/dist/src/integrations/planning.js.map +1 -0
  200. package/dist/src/integrations/pty-shell.d.ts +169 -0
  201. package/dist/src/integrations/pty-shell.d.ts.map +1 -0
  202. package/dist/src/integrations/pty-shell.js +367 -0
  203. package/dist/src/integrations/pty-shell.js.map +1 -0
  204. package/dist/src/integrations/react.d.ts +139 -0
  205. package/dist/src/integrations/react.d.ts.map +1 -0
  206. package/dist/src/integrations/react.js +273 -0
  207. package/dist/src/integrations/react.js.map +1 -0
  208. package/dist/src/integrations/resources.d.ts +177 -0
  209. package/dist/src/integrations/resources.d.ts.map +1 -0
  210. package/dist/src/integrations/resources.js +311 -0
  211. package/dist/src/integrations/resources.js.map +1 -0
  212. package/dist/src/integrations/result-synthesizer.d.ts +389 -0
  213. package/dist/src/integrations/result-synthesizer.d.ts.map +1 -0
  214. package/dist/src/integrations/result-synthesizer.js +951 -0
  215. package/dist/src/integrations/result-synthesizer.js.map +1 -0
  216. package/dist/src/integrations/routing.d.ts +117 -0
  217. package/dist/src/integrations/routing.d.ts.map +1 -0
  218. package/dist/src/integrations/routing.js +347 -0
  219. package/dist/src/integrations/routing.js.map +1 -0
  220. package/dist/src/integrations/rules.d.ts +131 -0
  221. package/dist/src/integrations/rules.d.ts.map +1 -0
  222. package/dist/src/integrations/rules.js +284 -0
  223. package/dist/src/integrations/rules.js.map +1 -0
  224. package/dist/src/integrations/safety.d.ts +142 -0
  225. package/dist/src/integrations/safety.d.ts.map +1 -0
  226. package/dist/src/integrations/safety.js +342 -0
  227. package/dist/src/integrations/safety.js.map +1 -0
  228. package/dist/src/integrations/sandbox/basic.d.ts +74 -0
  229. package/dist/src/integrations/sandbox/basic.d.ts.map +1 -0
  230. package/dist/src/integrations/sandbox/basic.js +310 -0
  231. package/dist/src/integrations/sandbox/basic.js.map +1 -0
  232. package/dist/src/integrations/sandbox/docker.d.ts +94 -0
  233. package/dist/src/integrations/sandbox/docker.d.ts.map +1 -0
  234. package/dist/src/integrations/sandbox/docker.js +293 -0
  235. package/dist/src/integrations/sandbox/docker.js.map +1 -0
  236. package/dist/src/integrations/sandbox/index.d.ts +182 -0
  237. package/dist/src/integrations/sandbox/index.d.ts.map +1 -0
  238. package/dist/src/integrations/sandbox/index.js +382 -0
  239. package/dist/src/integrations/sandbox/index.js.map +1 -0
  240. package/dist/src/integrations/sandbox/landlock.d.ts +59 -0
  241. package/dist/src/integrations/sandbox/landlock.d.ts.map +1 -0
  242. package/dist/src/integrations/sandbox/landlock.js +326 -0
  243. package/dist/src/integrations/sandbox/landlock.js.map +1 -0
  244. package/dist/src/integrations/sandbox/seatbelt.d.ts +68 -0
  245. package/dist/src/integrations/sandbox/seatbelt.d.ts.map +1 -0
  246. package/dist/src/integrations/sandbox/seatbelt.js +298 -0
  247. package/dist/src/integrations/sandbox/seatbelt.js.map +1 -0
  248. package/dist/src/integrations/semantic-cache.d.ts +178 -0
  249. package/dist/src/integrations/semantic-cache.d.ts.map +1 -0
  250. package/dist/src/integrations/semantic-cache.js +372 -0
  251. package/dist/src/integrations/semantic-cache.js.map +1 -0
  252. package/dist/src/integrations/session-store.d.ts +183 -0
  253. package/dist/src/integrations/session-store.d.ts.map +1 -0
  254. package/dist/src/integrations/session-store.js +345 -0
  255. package/dist/src/integrations/session-store.js.map +1 -0
  256. package/dist/src/integrations/shared-blackboard.d.ts +403 -0
  257. package/dist/src/integrations/shared-blackboard.d.ts.map +1 -0
  258. package/dist/src/integrations/shared-blackboard.js +710 -0
  259. package/dist/src/integrations/shared-blackboard.js.map +1 -0
  260. package/dist/src/integrations/skills.d.ts +171 -0
  261. package/dist/src/integrations/skills.d.ts.map +1 -0
  262. package/dist/src/integrations/skills.js +403 -0
  263. package/dist/src/integrations/skills.js.map +1 -0
  264. package/dist/src/integrations/smart-decomposer.d.ts +322 -0
  265. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -0
  266. package/dist/src/integrations/smart-decomposer.js +856 -0
  267. package/dist/src/integrations/smart-decomposer.js.map +1 -0
  268. package/dist/src/integrations/sourcegraph.d.ts +169 -0
  269. package/dist/src/integrations/sourcegraph.d.ts.map +1 -0
  270. package/dist/src/integrations/sourcegraph.js +379 -0
  271. package/dist/src/integrations/sourcegraph.js.map +1 -0
  272. package/dist/src/integrations/sqlite-store.d.ts +518 -0
  273. package/dist/src/integrations/sqlite-store.d.ts.map +1 -0
  274. package/dist/src/integrations/sqlite-store.js +1423 -0
  275. package/dist/src/integrations/sqlite-store.js.map +1 -0
  276. package/dist/src/integrations/streaming.d.ts +102 -0
  277. package/dist/src/integrations/streaming.d.ts.map +1 -0
  278. package/dist/src/integrations/streaming.js +362 -0
  279. package/dist/src/integrations/streaming.js.map +1 -0
  280. package/dist/src/integrations/thread-manager.d.ts +199 -0
  281. package/dist/src/integrations/thread-manager.d.ts.map +1 -0
  282. package/dist/src/integrations/thread-manager.js +357 -0
  283. package/dist/src/integrations/thread-manager.js.map +1 -0
  284. package/dist/src/main.d.ts +26 -0
  285. package/dist/src/main.d.ts.map +1 -0
  286. package/dist/src/main.js +170 -0
  287. package/dist/src/main.js.map +1 -0
  288. package/dist/src/modes/index.d.ts +10 -0
  289. package/dist/src/modes/index.d.ts.map +1 -0
  290. package/dist/src/modes/index.js +10 -0
  291. package/dist/src/modes/index.js.map +1 -0
  292. package/dist/src/modes/repl.d.ts +19 -0
  293. package/dist/src/modes/repl.d.ts.map +1 -0
  294. package/dist/src/modes/repl.js +393 -0
  295. package/dist/src/modes/repl.js.map +1 -0
  296. package/dist/src/modes/tui.d.ts +29 -0
  297. package/dist/src/modes/tui.d.ts.map +1 -0
  298. package/dist/src/modes/tui.js +272 -0
  299. package/dist/src/modes/tui.js.map +1 -0
  300. package/dist/src/modes.d.ts +179 -0
  301. package/dist/src/modes.d.ts.map +1 -0
  302. package/dist/src/modes.js +385 -0
  303. package/dist/src/modes.js.map +1 -0
  304. package/dist/src/observability/tracer.d.ts +111 -0
  305. package/dist/src/observability/tracer.d.ts.map +1 -0
  306. package/dist/src/observability/tracer.js +300 -0
  307. package/dist/src/observability/tracer.js.map +1 -0
  308. package/dist/src/observability/types.d.ts +271 -0
  309. package/dist/src/observability/types.d.ts.map +1 -0
  310. package/dist/src/observability/types.js +24 -0
  311. package/dist/src/observability/types.js.map +1 -0
  312. package/dist/src/paths.d.ts +101 -0
  313. package/dist/src/paths.d.ts.map +1 -0
  314. package/dist/src/paths.js +148 -0
  315. package/dist/src/paths.js.map +1 -0
  316. package/dist/src/persistence/index.d.ts +38 -0
  317. package/dist/src/persistence/index.d.ts.map +1 -0
  318. package/dist/src/persistence/index.js +48 -0
  319. package/dist/src/persistence/index.js.map +1 -0
  320. package/dist/src/persistence/migrator.d.ts +135 -0
  321. package/dist/src/persistence/migrator.d.ts.map +1 -0
  322. package/dist/src/persistence/migrator.js +303 -0
  323. package/dist/src/persistence/migrator.js.map +1 -0
  324. package/dist/src/persistence/schema.d.ts +101 -0
  325. package/dist/src/persistence/schema.d.ts.map +1 -0
  326. package/dist/src/persistence/schema.js +395 -0
  327. package/dist/src/persistence/schema.js.map +1 -0
  328. package/dist/src/providers/adapters/anthropic.d.ts +20 -0
  329. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -0
  330. package/dist/src/providers/adapters/anthropic.js +124 -0
  331. package/dist/src/providers/adapters/anthropic.js.map +1 -0
  332. package/dist/src/providers/adapters/mock.d.ts +25 -0
  333. package/dist/src/providers/adapters/mock.d.ts.map +1 -0
  334. package/dist/src/providers/adapters/mock.js +133 -0
  335. package/dist/src/providers/adapters/mock.js.map +1 -0
  336. package/dist/src/providers/adapters/openai.d.ts +21 -0
  337. package/dist/src/providers/adapters/openai.d.ts.map +1 -0
  338. package/dist/src/providers/adapters/openai.js +126 -0
  339. package/dist/src/providers/adapters/openai.js.map +1 -0
  340. package/dist/src/providers/adapters/openrouter.d.ts +49 -0
  341. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -0
  342. package/dist/src/providers/adapters/openrouter.js +363 -0
  343. package/dist/src/providers/adapters/openrouter.js.map +1 -0
  344. package/dist/src/providers/provider.d.ts +54 -0
  345. package/dist/src/providers/provider.d.ts.map +1 -0
  346. package/dist/src/providers/provider.js +111 -0
  347. package/dist/src/providers/provider.js.map +1 -0
  348. package/dist/src/providers/resilient-fetch.d.ts +99 -0
  349. package/dist/src/providers/resilient-fetch.d.ts.map +1 -0
  350. package/dist/src/providers/resilient-fetch.js +208 -0
  351. package/dist/src/providers/resilient-fetch.js.map +1 -0
  352. package/dist/src/providers/types.d.ts +227 -0
  353. package/dist/src/providers/types.d.ts.map +1 -0
  354. package/dist/src/providers/types.js +24 -0
  355. package/dist/src/providers/types.js.map +1 -0
  356. package/dist/src/session-picker.d.ts +28 -0
  357. package/dist/src/session-picker.d.ts.map +1 -0
  358. package/dist/src/session-picker.js +256 -0
  359. package/dist/src/session-picker.js.map +1 -0
  360. package/dist/src/test-sqlite.d.ts +2 -0
  361. package/dist/src/test-sqlite.d.ts.map +1 -0
  362. package/dist/src/test-sqlite.js +114 -0
  363. package/dist/src/test-sqlite.js.map +1 -0
  364. package/dist/src/tools/agent.d.ts +44 -0
  365. package/dist/src/tools/agent.d.ts.map +1 -0
  366. package/dist/src/tools/agent.js +110 -0
  367. package/dist/src/tools/agent.js.map +1 -0
  368. package/dist/src/tools/bash.d.ts +52 -0
  369. package/dist/src/tools/bash.d.ts.map +1 -0
  370. package/dist/src/tools/bash.js +141 -0
  371. package/dist/src/tools/bash.js.map +1 -0
  372. package/dist/src/tools/file.d.ts +47 -0
  373. package/dist/src/tools/file.d.ts.map +1 -0
  374. package/dist/src/tools/file.js +263 -0
  375. package/dist/src/tools/file.js.map +1 -0
  376. package/dist/src/tools/permission.d.ts +43 -0
  377. package/dist/src/tools/permission.d.ts.map +1 -0
  378. package/dist/src/tools/permission.js +216 -0
  379. package/dist/src/tools/permission.js.map +1 -0
  380. package/dist/src/tools/registry.d.ts +63 -0
  381. package/dist/src/tools/registry.d.ts.map +1 -0
  382. package/dist/src/tools/registry.js +250 -0
  383. package/dist/src/tools/registry.js.map +1 -0
  384. package/dist/src/tools/standard.d.ts +57 -0
  385. package/dist/src/tools/standard.d.ts.map +1 -0
  386. package/dist/src/tools/standard.js +113 -0
  387. package/dist/src/tools/standard.js.map +1 -0
  388. package/dist/src/tools/types.d.ts +146 -0
  389. package/dist/src/tools/types.d.ts.map +1 -0
  390. package/dist/src/tools/types.js +28 -0
  391. package/dist/src/tools/types.js.map +1 -0
  392. package/dist/src/tools/undo.d.ts +71 -0
  393. package/dist/src/tools/undo.d.ts.map +1 -0
  394. package/dist/src/tools/undo.js +123 -0
  395. package/dist/src/tools/undo.js.map +1 -0
  396. package/dist/src/tracing/cache-boundary-tracker.d.ts +189 -0
  397. package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -0
  398. package/dist/src/tracing/cache-boundary-tracker.js +411 -0
  399. package/dist/src/tracing/cache-boundary-tracker.js.map +1 -0
  400. package/dist/src/tracing/trace-collector.d.ts +274 -0
  401. package/dist/src/tracing/trace-collector.d.ts.map +1 -0
  402. package/dist/src/tracing/trace-collector.js +727 -0
  403. package/dist/src/tracing/trace-collector.js.map +1 -0
  404. package/dist/src/tracing/types.d.ts +657 -0
  405. package/dist/src/tracing/types.d.ts.map +1 -0
  406. package/dist/src/tracing/types.js +39 -0
  407. package/dist/src/tracing/types.js.map +1 -0
  408. package/dist/src/tricks/failure-evidence.d.ts +268 -0
  409. package/dist/src/tricks/failure-evidence.d.ts.map +1 -0
  410. package/dist/src/tricks/failure-evidence.js +544 -0
  411. package/dist/src/tricks/failure-evidence.js.map +1 -0
  412. package/dist/src/tricks/json-utils.d.ts +77 -0
  413. package/dist/src/tricks/json-utils.d.ts.map +1 -0
  414. package/dist/src/tricks/json-utils.js +247 -0
  415. package/dist/src/tricks/json-utils.js.map +1 -0
  416. package/dist/src/tricks/kv-cache-context.d.ts +227 -0
  417. package/dist/src/tricks/kv-cache-context.d.ts.map +1 -0
  418. package/dist/src/tricks/kv-cache-context.js +377 -0
  419. package/dist/src/tricks/kv-cache-context.js.map +1 -0
  420. package/dist/src/tricks/recitation.d.ts +208 -0
  421. package/dist/src/tricks/recitation.d.ts.map +1 -0
  422. package/dist/src/tricks/recitation.js +374 -0
  423. package/dist/src/tricks/recitation.js.map +1 -0
  424. package/dist/src/tricks/reversible-compaction.d.ts +251 -0
  425. package/dist/src/tricks/reversible-compaction.d.ts.map +1 -0
  426. package/dist/src/tricks/reversible-compaction.js +555 -0
  427. package/dist/src/tricks/reversible-compaction.js.map +1 -0
  428. package/dist/src/tricks/serialization-diversity.d.ts +197 -0
  429. package/dist/src/tricks/serialization-diversity.d.ts.map +1 -0
  430. package/dist/src/tricks/serialization-diversity.js +460 -0
  431. package/dist/src/tricks/serialization-diversity.js.map +1 -0
  432. package/dist/src/tui/app.d.ts +42 -0
  433. package/dist/src/tui/app.d.ts.map +1 -0
  434. package/dist/src/tui/app.js +1076 -0
  435. package/dist/src/tui/app.js.map +1 -0
  436. package/dist/src/tui/components/ApprovalDialog.d.ts +28 -0
  437. package/dist/src/tui/components/ApprovalDialog.d.ts.map +1 -0
  438. package/dist/src/tui/components/ApprovalDialog.js +59 -0
  439. package/dist/src/tui/components/ApprovalDialog.js.map +1 -0
  440. package/dist/src/tui/components/InputArea.d.ts +35 -0
  441. package/dist/src/tui/components/InputArea.d.ts.map +1 -0
  442. package/dist/src/tui/components/InputArea.js +144 -0
  443. package/dist/src/tui/components/InputArea.js.map +1 -0
  444. package/dist/src/tui/components/MessageItem.d.ts +28 -0
  445. package/dist/src/tui/components/MessageItem.d.ts.map +1 -0
  446. package/dist/src/tui/components/MessageItem.js +27 -0
  447. package/dist/src/tui/components/MessageItem.js.map +1 -0
  448. package/dist/src/tui/components/ScrollableBox.d.ts +41 -0
  449. package/dist/src/tui/components/ScrollableBox.d.ts.map +1 -0
  450. package/dist/src/tui/components/ScrollableBox.js +101 -0
  451. package/dist/src/tui/components/ScrollableBox.js.map +1 -0
  452. package/dist/src/tui/components/ToolCallItem.d.ts +33 -0
  453. package/dist/src/tui/components/ToolCallItem.d.ts.map +1 -0
  454. package/dist/src/tui/components/ToolCallItem.js +91 -0
  455. package/dist/src/tui/components/ToolCallItem.js.map +1 -0
  456. package/dist/src/tui/components/index.d.ts +13 -0
  457. package/dist/src/tui/components/index.d.ts.map +1 -0
  458. package/dist/src/tui/components/index.js +15 -0
  459. package/dist/src/tui/components/index.js.map +1 -0
  460. package/dist/src/tui/event-display.d.ts +19 -0
  461. package/dist/src/tui/event-display.d.ts.map +1 -0
  462. package/dist/src/tui/event-display.js +178 -0
  463. package/dist/src/tui/event-display.js.map +1 -0
  464. package/dist/src/tui/index.d.ts +105 -0
  465. package/dist/src/tui/index.d.ts.map +1 -0
  466. package/dist/src/tui/index.js +214 -0
  467. package/dist/src/tui/index.js.map +1 -0
  468. package/dist/src/tui/input/CommandPalette.d.ts +55 -0
  469. package/dist/src/tui/input/CommandPalette.d.ts.map +1 -0
  470. package/dist/src/tui/input/CommandPalette.js +135 -0
  471. package/dist/src/tui/input/CommandPalette.js.map +1 -0
  472. package/dist/src/tui/input/index.d.ts +7 -0
  473. package/dist/src/tui/input/index.d.ts.map +1 -0
  474. package/dist/src/tui/input/index.js +7 -0
  475. package/dist/src/tui/input/index.js.map +1 -0
  476. package/dist/src/tui/theme/index.d.ts +45 -0
  477. package/dist/src/tui/theme/index.d.ts.map +1 -0
  478. package/dist/src/tui/theme/index.js +215 -0
  479. package/dist/src/tui/theme/index.js.map +1 -0
  480. package/dist/src/tui/types.d.ts +214 -0
  481. package/dist/src/tui/types.d.ts.map +1 -0
  482. package/dist/src/tui/types.js +27 -0
  483. package/dist/src/tui/types.js.map +1 -0
  484. package/dist/src/types.d.ts +905 -0
  485. package/dist/src/types.d.ts.map +1 -0
  486. package/dist/src/types.js +9 -0
  487. package/dist/src/types.js.map +1 -0
  488. package/package.json +89 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Pending Plan Manager
3
+ *
4
+ * Manages plans that are awaiting user approval before execution.
5
+ * Used in "plan mode" where write operations are intercepted and queued
6
+ * as proposed changes rather than being executed immediately.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const planManager = createPendingPlanManager();
11
+ *
12
+ * // In plan mode, intercept a write operation
13
+ * planManager.addProposedChange({
14
+ * tool: 'write_file',
15
+ * args: { path: 'src/main.ts', content: '...' },
16
+ * reason: 'Create entry point for the application',
17
+ * });
18
+ *
19
+ * // User approves the plan
20
+ * const changes = planManager.approve();
21
+ * for (const change of changes) {
22
+ * await executeTool(change.tool, change.args);
23
+ * }
24
+ * ```
25
+ */
26
+ /**
27
+ * Status of a pending plan.
28
+ */
29
+ export type PlanStatus = 'pending' | 'approved' | 'rejected' | 'partially_approved';
30
+ /**
31
+ * A proposed change that will be executed if the plan is approved.
32
+ */
33
+ export interface ProposedChange {
34
+ /** Unique ID for this change */
35
+ id: string;
36
+ /** The tool that would be called */
37
+ tool: string;
38
+ /** Arguments for the tool call */
39
+ args: Record<string, unknown>;
40
+ /** LLM's explanation of why this change is needed */
41
+ reason: string;
42
+ /** Order in which this change should be executed */
43
+ order: number;
44
+ /** Timestamp when this change was proposed */
45
+ proposedAt: string;
46
+ /** Optional: The tool call ID from the LLM response */
47
+ toolCallId?: string;
48
+ }
49
+ /**
50
+ * A pending plan awaiting user approval.
51
+ */
52
+ export interface PendingPlan {
53
+ /** Unique plan ID */
54
+ id: string;
55
+ /** The original task/prompt that led to this plan */
56
+ task: string;
57
+ /** When the plan was created */
58
+ createdAt: string;
59
+ /** When the plan was last updated */
60
+ updatedAt: string;
61
+ /** The proposed changes in execution order */
62
+ proposedChanges: ProposedChange[];
63
+ /** Summary of exploration done before proposing changes */
64
+ explorationSummary: string;
65
+ /** Current status of the plan */
66
+ status: PlanStatus;
67
+ /** Session ID this plan belongs to */
68
+ sessionId?: string;
69
+ }
70
+ /**
71
+ * Result of approving a plan.
72
+ */
73
+ export interface PlanApprovalResult {
74
+ /** Changes to execute */
75
+ changes: ProposedChange[];
76
+ /** Number of changes skipped (if partial approval) */
77
+ skippedCount: number;
78
+ }
79
+ /**
80
+ * Event types emitted by the plan manager.
81
+ */
82
+ export type PendingPlanEvent = {
83
+ type: 'plan.created';
84
+ plan: PendingPlan;
85
+ } | {
86
+ type: 'plan.change.added';
87
+ change: ProposedChange;
88
+ planId: string;
89
+ } | {
90
+ type: 'plan.approved';
91
+ planId: string;
92
+ changeCount: number;
93
+ } | {
94
+ type: 'plan.rejected';
95
+ planId: string;
96
+ } | {
97
+ type: 'plan.cleared';
98
+ planId: string;
99
+ };
100
+ export type PendingPlanEventListener = (event: PendingPlanEvent) => void;
101
+ /**
102
+ * Manages pending plans that await user approval.
103
+ */
104
+ export declare class PendingPlanManager {
105
+ private currentPlan;
106
+ private changeCounter;
107
+ private eventListeners;
108
+ /**
109
+ * Start a new pending plan.
110
+ * Clears any existing plan.
111
+ */
112
+ startPlan(task: string, sessionId?: string): PendingPlan;
113
+ /**
114
+ * Add a proposed change to the current plan.
115
+ * Returns the created change, or null if no plan is active.
116
+ */
117
+ addProposedChange(tool: string, args: Record<string, unknown>, reason: string, toolCallId?: string): ProposedChange | null;
118
+ /**
119
+ * Set the exploration summary for the current plan.
120
+ */
121
+ setExplorationSummary(summary: string): void;
122
+ /**
123
+ * Get the current pending plan.
124
+ */
125
+ getPendingPlan(): PendingPlan | null;
126
+ /**
127
+ * Check if there's an active pending plan.
128
+ */
129
+ hasPendingPlan(): boolean;
130
+ /**
131
+ * Get the number of proposed changes.
132
+ */
133
+ getChangeCount(): number;
134
+ /**
135
+ * Approve the pending plan.
136
+ * @param count - If provided, only approve the first N changes
137
+ * @returns The changes to execute
138
+ */
139
+ approve(count?: number): PlanApprovalResult;
140
+ /**
141
+ * Reject the pending plan.
142
+ * Clears all proposed changes.
143
+ */
144
+ reject(): void;
145
+ /**
146
+ * Clear the current plan without changing status.
147
+ */
148
+ clear(): void;
149
+ /**
150
+ * Restore a plan from storage.
151
+ */
152
+ restorePlan(plan: PendingPlan): void;
153
+ /**
154
+ * Format the pending plan for display.
155
+ */
156
+ formatPlan(): string;
157
+ /**
158
+ * Subscribe to plan events.
159
+ */
160
+ subscribe(listener: PendingPlanEventListener): () => void;
161
+ private emit;
162
+ }
163
+ /**
164
+ * Create a new pending plan manager.
165
+ */
166
+ export declare function createPendingPlanManager(): PendingPlanManager;
167
+ /**
168
+ * Format a plan for compact display (e.g., in status bar).
169
+ */
170
+ export declare function formatPlanStatus(plan: PendingPlan | null): string;
171
+ //# sourceMappingURL=pending-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-plan.d.ts","sourceRoot":"","sources":["../../../src/integrations/pending-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Pending Plan Manager
3
+ *
4
+ * Manages plans that are awaiting user approval before execution.
5
+ * Used in "plan mode" where write operations are intercepted and queued
6
+ * as proposed changes rather than being executed immediately.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const planManager = createPendingPlanManager();
11
+ *
12
+ * // In plan mode, intercept a write operation
13
+ * planManager.addProposedChange({
14
+ * tool: 'write_file',
15
+ * args: { path: 'src/main.ts', content: '...' },
16
+ * reason: 'Create entry point for the application',
17
+ * });
18
+ *
19
+ * // User approves the plan
20
+ * const changes = planManager.approve();
21
+ * for (const change of changes) {
22
+ * await executeTool(change.tool, change.args);
23
+ * }
24
+ * ```
25
+ */
26
+ // =============================================================================
27
+ // PENDING PLAN MANAGER
28
+ // =============================================================================
29
+ /**
30
+ * Manages pending plans that await user approval.
31
+ */
32
+ export class PendingPlanManager {
33
+ currentPlan = null;
34
+ changeCounter = 0;
35
+ eventListeners = new Set();
36
+ /**
37
+ * Start a new pending plan.
38
+ * Clears any existing plan.
39
+ */
40
+ startPlan(task, sessionId) {
41
+ const now = new Date().toISOString();
42
+ const plan = {
43
+ id: `plan-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
44
+ task,
45
+ createdAt: now,
46
+ updatedAt: now,
47
+ proposedChanges: [],
48
+ explorationSummary: '',
49
+ status: 'pending',
50
+ sessionId,
51
+ };
52
+ this.currentPlan = plan;
53
+ this.changeCounter = 0;
54
+ this.emit({ type: 'plan.created', plan });
55
+ return plan;
56
+ }
57
+ /**
58
+ * Add a proposed change to the current plan.
59
+ * Returns the created change, or null if no plan is active.
60
+ */
61
+ addProposedChange(tool, args, reason, toolCallId) {
62
+ if (!this.currentPlan) {
63
+ return null;
64
+ }
65
+ const change = {
66
+ id: `change-${++this.changeCounter}`,
67
+ tool,
68
+ args,
69
+ reason,
70
+ order: this.currentPlan.proposedChanges.length + 1,
71
+ proposedAt: new Date().toISOString(),
72
+ toolCallId,
73
+ };
74
+ this.currentPlan.proposedChanges.push(change);
75
+ this.currentPlan.updatedAt = new Date().toISOString();
76
+ this.emit({ type: 'plan.change.added', change, planId: this.currentPlan.id });
77
+ return change;
78
+ }
79
+ /**
80
+ * Set the exploration summary for the current plan.
81
+ */
82
+ setExplorationSummary(summary) {
83
+ if (this.currentPlan) {
84
+ this.currentPlan.explorationSummary = summary;
85
+ this.currentPlan.updatedAt = new Date().toISOString();
86
+ }
87
+ }
88
+ /**
89
+ * Get the current pending plan.
90
+ */
91
+ getPendingPlan() {
92
+ return this.currentPlan;
93
+ }
94
+ /**
95
+ * Check if there's an active pending plan.
96
+ */
97
+ hasPendingPlan() {
98
+ return this.currentPlan !== null && this.currentPlan.status === 'pending';
99
+ }
100
+ /**
101
+ * Get the number of proposed changes.
102
+ */
103
+ getChangeCount() {
104
+ return this.currentPlan?.proposedChanges.length ?? 0;
105
+ }
106
+ /**
107
+ * Approve the pending plan.
108
+ * @param count - If provided, only approve the first N changes
109
+ * @returns The changes to execute
110
+ */
111
+ approve(count) {
112
+ if (!this.currentPlan) {
113
+ return { changes: [], skippedCount: 0 };
114
+ }
115
+ const allChanges = this.currentPlan.proposedChanges;
116
+ const approvedChanges = count !== undefined
117
+ ? allChanges.slice(0, count)
118
+ : allChanges;
119
+ const skippedCount = allChanges.length - approvedChanges.length;
120
+ this.currentPlan.status = skippedCount > 0 ? 'partially_approved' : 'approved';
121
+ this.currentPlan.updatedAt = new Date().toISOString();
122
+ this.emit({
123
+ type: 'plan.approved',
124
+ planId: this.currentPlan.id,
125
+ changeCount: approvedChanges.length,
126
+ });
127
+ // Clear the plan after approval
128
+ const result = { changes: approvedChanges, skippedCount };
129
+ this.currentPlan = null;
130
+ return result;
131
+ }
132
+ /**
133
+ * Reject the pending plan.
134
+ * Clears all proposed changes.
135
+ */
136
+ reject() {
137
+ if (!this.currentPlan) {
138
+ return;
139
+ }
140
+ this.currentPlan.status = 'rejected';
141
+ this.currentPlan.updatedAt = new Date().toISOString();
142
+ this.emit({ type: 'plan.rejected', planId: this.currentPlan.id });
143
+ this.currentPlan = null;
144
+ }
145
+ /**
146
+ * Clear the current plan without changing status.
147
+ */
148
+ clear() {
149
+ if (this.currentPlan) {
150
+ this.emit({ type: 'plan.cleared', planId: this.currentPlan.id });
151
+ this.currentPlan = null;
152
+ }
153
+ }
154
+ /**
155
+ * Restore a plan from storage.
156
+ */
157
+ restorePlan(plan) {
158
+ this.currentPlan = plan;
159
+ this.changeCounter = plan.proposedChanges.length;
160
+ }
161
+ /**
162
+ * Format the pending plan for display.
163
+ */
164
+ formatPlan() {
165
+ if (!this.currentPlan) {
166
+ return 'No pending plan.';
167
+ }
168
+ const lines = [
169
+ `Plan: "${this.currentPlan.task}"`,
170
+ `Status: ${this.currentPlan.status}`,
171
+ `Created: ${this.currentPlan.createdAt}`,
172
+ '',
173
+ ];
174
+ if (this.currentPlan.explorationSummary) {
175
+ lines.push('Exploration Summary:');
176
+ lines.push(this.currentPlan.explorationSummary);
177
+ lines.push('');
178
+ }
179
+ if (this.currentPlan.proposedChanges.length === 0) {
180
+ lines.push('No proposed changes yet.');
181
+ }
182
+ else {
183
+ lines.push(`Proposed Changes (${this.currentPlan.proposedChanges.length}):`);
184
+ lines.push('');
185
+ for (const change of this.currentPlan.proposedChanges) {
186
+ lines.push(`${change.order}. [${change.tool}]`);
187
+ // Format args nicely
188
+ if (change.tool === 'write_file' || change.tool === 'edit_file') {
189
+ const path = change.args.path || change.args.file_path;
190
+ lines.push(` File: ${path}`);
191
+ }
192
+ else if (change.tool === 'bash') {
193
+ const cmd = String(change.args.command || '').slice(0, 60);
194
+ lines.push(` Command: ${cmd}${cmd.length >= 60 ? '...' : ''}`);
195
+ }
196
+ else {
197
+ lines.push(` Args: ${JSON.stringify(change.args).slice(0, 80)}...`);
198
+ }
199
+ lines.push(` Reason: ${change.reason}`);
200
+ lines.push('');
201
+ }
202
+ }
203
+ lines.push('Commands: /approve, /reject, /show-plan');
204
+ return lines.join('\n');
205
+ }
206
+ /**
207
+ * Subscribe to plan events.
208
+ */
209
+ subscribe(listener) {
210
+ this.eventListeners.add(listener);
211
+ return () => this.eventListeners.delete(listener);
212
+ }
213
+ // Internal
214
+ emit(event) {
215
+ for (const listener of this.eventListeners) {
216
+ try {
217
+ listener(event);
218
+ }
219
+ catch {
220
+ // Ignore listener errors
221
+ }
222
+ }
223
+ }
224
+ }
225
+ // =============================================================================
226
+ // FACTORY
227
+ // =============================================================================
228
+ /**
229
+ * Create a new pending plan manager.
230
+ */
231
+ export function createPendingPlanManager() {
232
+ return new PendingPlanManager();
233
+ }
234
+ /**
235
+ * Format a plan for compact display (e.g., in status bar).
236
+ */
237
+ export function formatPlanStatus(plan) {
238
+ if (!plan) {
239
+ return '';
240
+ }
241
+ const count = plan.proposedChanges.length;
242
+ return `${count} change${count === 1 ? '' : 's'} pending`;
243
+ }
244
+ //# sourceMappingURL=pending-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-plan.js","sourceRoot":"","sources":["../../../src/integrations/pending-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAyFH,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAuB,IAAI,CAAC;IACvC,aAAa,GAAG,CAAC,CAAC;IAClB,cAAc,GAAkC,IAAI,GAAG,EAAE,CAAC;IAElE;;;OAGG;IACH,SAAS,CAAC,IAAY,EAAE,SAAkB;QACxC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAgB;YACxB,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAClE,IAAI;YACJ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,eAAe,EAAE,EAAE;YACnB,kBAAkB,EAAE,EAAE;YACtB,MAAM,EAAE,SAAS;YACjB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,iBAAiB,CACf,IAAY,EACZ,IAA6B,EAC7B,MAAc,EACd,UAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YACpC,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAClD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,OAAe;QACnC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,MAAM,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAc;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC1C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;QACpD,MAAM,eAAe,GAAG,KAAK,KAAK,SAAS;YACzC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YAC5B,CAAC,CAAC,UAAU,CAAC;QACf,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QAEhE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC3B,WAAW,EAAE,eAAe,CAAC,MAAM;SACpC,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAiB;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAED,MAAM,KAAK,GAAa;YACtB,UAAU,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG;YAClC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACpC,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YACxC,EAAE;SACH,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;gBACtD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;gBAEhD,qBAAqB;gBACrB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;oBACvD,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3D,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxE,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAEtD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAkC;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,WAAW;IAEH,IAAI,CAAC,KAAuB;QAClC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IAC1C,OAAO,GAAG,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Persistence Utilities
3
+ *
4
+ * Debug logging and checkpoint management for session persistence.
5
+ */
6
+ import type { SQLiteStore, SessionStore } from './index.js';
7
+ export type AnySessionStore = SQLiteStore | SessionStore;
8
+ /**
9
+ * Debug logger for persistence operations.
10
+ * Enabled via --debug flag. Shows data flow at each layer boundary.
11
+ * In TUI mode, logs are buffered instead of printed to avoid interfering with Ink.
12
+ */
13
+ export declare class PersistenceDebugger {
14
+ private enabled;
15
+ private tuiMode;
16
+ private buffer;
17
+ enable(): void;
18
+ enableTUIMode(): void;
19
+ isEnabled(): boolean;
20
+ getBuffer(): string[];
21
+ log(message: string, data?: unknown): void;
22
+ error(message: string, err: unknown): void;
23
+ storeType(store: AnySessionStore): string;
24
+ }
25
+ export declare const persistenceDebug: PersistenceDebugger;
26
+ /**
27
+ * Checkpoint data structure for full state restoration.
28
+ */
29
+ export interface CheckpointData {
30
+ id: string;
31
+ label?: string;
32
+ messages: unknown[];
33
+ iteration: number;
34
+ metrics?: unknown;
35
+ plan?: unknown;
36
+ memoryContext?: string[];
37
+ }
38
+ /**
39
+ * Save checkpoint to session store (works with both SQLite and JSONL).
40
+ * Now includes plan and memoryContext for full state restoration.
41
+ */
42
+ export declare function saveCheckpointToStore(store: AnySessionStore, checkpoint: CheckpointData): void;
43
+ /**
44
+ * Load session state (checkpoint or messages) for resuming.
45
+ * Returns checkpoint data if found, or null.
46
+ */
47
+ export declare function loadSessionState(sessionStore: AnySessionStore, sessionId: string): Promise<CheckpointData | null>;
48
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/integrations/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;AAMzD;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAE9B,MAAM,IAAI,IAAI;IAKd,aAAa,IAAI,IAAI;IAIrB,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI,MAAM,EAAE;IAMrB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAgB1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAuB1C,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;CAM1C;AAGD,eAAO,MAAM,gBAAgB,qBAA4B,CAAC;AAM1D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,cAAc,GACzB,IAAI,CAgEN;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,eAAe,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA8ChC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Persistence Utilities
3
+ *
4
+ * Debug logging and checkpoint management for session persistence.
5
+ */
6
+ // =============================================================================
7
+ // DEBUG LOGGER FOR PERSISTENCE OPERATIONS
8
+ // =============================================================================
9
+ /**
10
+ * Debug logger for persistence operations.
11
+ * Enabled via --debug flag. Shows data flow at each layer boundary.
12
+ * In TUI mode, logs are buffered instead of printed to avoid interfering with Ink.
13
+ */
14
+ export class PersistenceDebugger {
15
+ enabled = false;
16
+ tuiMode = false;
17
+ buffer = [];
18
+ enable() {
19
+ this.enabled = true;
20
+ this.log('Persistence debug mode ENABLED');
21
+ }
22
+ enableTUIMode() {
23
+ this.tuiMode = true;
24
+ }
25
+ isEnabled() {
26
+ return this.enabled;
27
+ }
28
+ getBuffer() {
29
+ const logs = [...this.buffer];
30
+ this.buffer = [];
31
+ return logs;
32
+ }
33
+ log(message, data) {
34
+ if (!this.enabled)
35
+ return;
36
+ const timestamp = new Date().toISOString().split('T')[1].slice(0, 12);
37
+ const logLine = `[${timestamp}] ${message}`;
38
+ const dataLine = data !== undefined ? ` -> ${JSON.stringify(data, null, 2).split('\n').join('\n ')}` : '';
39
+ if (this.tuiMode) {
40
+ // Buffer logs in TUI mode to avoid console interference
41
+ this.buffer.push(logLine);
42
+ if (dataLine)
43
+ this.buffer.push(dataLine);
44
+ }
45
+ else {
46
+ console.log(logLine);
47
+ if (dataLine)
48
+ console.log(dataLine);
49
+ }
50
+ }
51
+ error(message, err) {
52
+ if (!this.enabled)
53
+ return;
54
+ const timestamp = new Date().toISOString().split('T')[1].slice(0, 12);
55
+ const errLine = `[${timestamp}] ERROR: ${message}`;
56
+ let details = '';
57
+ if (err instanceof Error) {
58
+ details = ` -> ${err.message}`;
59
+ if (err.stack) {
60
+ details += `\n -> Stack: ${err.stack.split('\n').slice(1, 3).join(' -> ')}`;
61
+ }
62
+ }
63
+ else {
64
+ details = ` -> ${String(err)}`;
65
+ }
66
+ if (this.tuiMode) {
67
+ this.buffer.push(errLine);
68
+ this.buffer.push(details);
69
+ }
70
+ else {
71
+ console.error(errLine);
72
+ console.error(details);
73
+ }
74
+ }
75
+ storeType(store) {
76
+ if ('saveCheckpoint' in store && typeof store.saveCheckpoint === 'function') {
77
+ return 'SQLiteStore';
78
+ }
79
+ return 'JSONLStore';
80
+ }
81
+ }
82
+ // Global debug instance - enabled via --debug flag
83
+ export const persistenceDebug = new PersistenceDebugger();
84
+ /**
85
+ * Save checkpoint to session store (works with both SQLite and JSONL).
86
+ * Now includes plan and memoryContext for full state restoration.
87
+ */
88
+ export function saveCheckpointToStore(store, checkpoint) {
89
+ const storeType = persistenceDebug.storeType(store);
90
+ persistenceDebug.log(`saveCheckpointToStore called`, {
91
+ storeType,
92
+ checkpointId: checkpoint.id,
93
+ messageCount: checkpoint.messages?.length ?? 0,
94
+ hasLabel: !!checkpoint.label,
95
+ hasPlan: !!checkpoint.plan,
96
+ });
97
+ try {
98
+ if ('saveCheckpoint' in store && typeof store.saveCheckpoint === 'function') {
99
+ // SQLite store - check currentSessionId
100
+ const sqliteStore = store;
101
+ const currentSessionId = sqliteStore.getCurrentSessionId();
102
+ persistenceDebug.log(`SQLite saveCheckpoint`, {
103
+ currentSessionId,
104
+ hasCurrentSession: !!currentSessionId,
105
+ });
106
+ if (!currentSessionId) {
107
+ persistenceDebug.error('SQLite store has no currentSessionId!', new Error('No active session'));
108
+ }
109
+ const ckptId = store.saveCheckpoint({
110
+ id: checkpoint.id,
111
+ label: checkpoint.label,
112
+ messages: checkpoint.messages,
113
+ iteration: checkpoint.iteration,
114
+ metrics: checkpoint.metrics,
115
+ plan: checkpoint.plan,
116
+ memoryContext: checkpoint.memoryContext,
117
+ }, checkpoint.label || `auto-checkpoint-${checkpoint.id}`);
118
+ persistenceDebug.log(`SQLite checkpoint saved successfully`, { returnedId: ckptId });
119
+ }
120
+ else if ('appendEntry' in store && typeof store.appendEntry === 'function') {
121
+ // JSONL store - use appendEntry with checkpoint type
122
+ persistenceDebug.log(`JSONL appendEntry (checkpoint type)`);
123
+ store.appendEntry({
124
+ type: 'checkpoint',
125
+ data: {
126
+ id: checkpoint.id,
127
+ label: checkpoint.label,
128
+ messages: checkpoint.messages,
129
+ iteration: checkpoint.iteration,
130
+ metrics: checkpoint.metrics,
131
+ plan: checkpoint.plan,
132
+ memoryContext: checkpoint.memoryContext,
133
+ createdAt: new Date().toISOString(),
134
+ },
135
+ });
136
+ persistenceDebug.log(`JSONL checkpoint appended successfully`);
137
+ }
138
+ else {
139
+ persistenceDebug.error('No compatible save method found on store', { storeType });
140
+ }
141
+ }
142
+ catch (err) {
143
+ persistenceDebug.error(`Failed to save checkpoint`, err);
144
+ // Re-throw in debug mode so the error is visible
145
+ if (persistenceDebug.isEnabled()) {
146
+ throw err;
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Load session state (checkpoint or messages) for resuming.
152
+ * Returns checkpoint data if found, or null.
153
+ */
154
+ export async function loadSessionState(sessionStore, sessionId) {
155
+ persistenceDebug.log('Loading session state', { sessionId });
156
+ // Try SQLite's loadLatestCheckpoint first
157
+ if ('loadLatestCheckpoint' in sessionStore && typeof sessionStore.loadLatestCheckpoint === 'function') {
158
+ const sqliteCheckpoint = sessionStore.loadLatestCheckpoint(sessionId);
159
+ if (sqliteCheckpoint?.state) {
160
+ persistenceDebug.log('Loaded from SQLite checkpoint', {
161
+ messageCount: sqliteCheckpoint.state.messages?.length,
162
+ });
163
+ return sqliteCheckpoint.state;
164
+ }
165
+ }
166
+ // Fall back to entries-based lookup (for JSONL or if SQLite checkpoint not found)
167
+ try {
168
+ const entriesResult = sessionStore.loadSession(sessionId);
169
+ const entries = Array.isArray(entriesResult) ? entriesResult : await entriesResult;
170
+ // Try to find a checkpoint entry
171
+ const checkpoint = [...entries].reverse().find(e => e.type === 'checkpoint');
172
+ if (checkpoint?.data) {
173
+ persistenceDebug.log('Loaded from entries checkpoint', {
174
+ messageCount: checkpoint.data.messages?.length,
175
+ });
176
+ return checkpoint.data;
177
+ }
178
+ // No checkpoint, try to load messages directly from entries
179
+ const messages = entries
180
+ .filter((e) => e.type === 'message')
181
+ .map((e) => e.data);
182
+ if (messages.length > 0) {
183
+ persistenceDebug.log('Loaded messages from entries', { count: messages.length });
184
+ return {
185
+ id: `loaded-${sessionId}`,
186
+ messages,
187
+ iteration: 0,
188
+ };
189
+ }
190
+ }
191
+ catch (error) {
192
+ persistenceDebug.error('Failed to load session entries', error);
193
+ }
194
+ return null;
195
+ }
196
+ //# sourceMappingURL=persistence.js.map