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,544 @@
1
+ /**
2
+ * Trick S: Failure Evidence Preservation
3
+ *
4
+ * Preserves failed actions, error traces, and unsuccessful attempts in context
5
+ * so the model can learn from mistakes and avoid repeating them.
6
+ *
7
+ * Problem: When errors are silently discarded or minimally logged, the model
8
+ * may repeat the same mistakes. Without evidence of what failed and why,
9
+ * the agent loops endlessly.
10
+ *
11
+ * Solution: Explicitly preserve failure evidence with structured metadata.
12
+ * This includes error messages, stack traces, what was attempted, and why
13
+ * it failed - enabling the model to learn and adapt.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { createFailureTracker, formatFailureContext } from './failure-evidence';
18
+ *
19
+ * const tracker = createFailureTracker({
20
+ * maxFailures: 20,
21
+ * preserveStackTraces: true,
22
+ * categorizeErrors: true,
23
+ * });
24
+ *
25
+ * // Record a failure
26
+ * tracker.recordFailure({
27
+ * action: 'read_file',
28
+ * args: { path: '/etc/passwd' },
29
+ * error: 'Permission denied',
30
+ * category: 'permission',
31
+ * });
32
+ *
33
+ * // Get context for LLM
34
+ * const failureContext = tracker.getFailureContext();
35
+ * ```
36
+ */
37
+ // =============================================================================
38
+ // ERROR CATEGORIZATION
39
+ // =============================================================================
40
+ /**
41
+ * Auto-categorize an error based on its message.
42
+ */
43
+ export function categorizeError(error) {
44
+ const lowerError = error.toLowerCase();
45
+ // Permission errors
46
+ if (lowerError.includes('permission denied') ||
47
+ lowerError.includes('access denied') ||
48
+ lowerError.includes('not permitted') ||
49
+ lowerError.includes('eacces') ||
50
+ lowerError.includes('unauthorized')) {
51
+ return 'permission';
52
+ }
53
+ // Not found errors
54
+ if (lowerError.includes('not found') ||
55
+ lowerError.includes('no such file') ||
56
+ lowerError.includes('enoent') ||
57
+ lowerError.includes('does not exist') ||
58
+ lowerError.includes('404')) {
59
+ return 'not_found';
60
+ }
61
+ // Syntax errors
62
+ if (lowerError.includes('syntax error') ||
63
+ lowerError.includes('unexpected token') ||
64
+ lowerError.includes('parse error') ||
65
+ lowerError.includes('invalid json')) {
66
+ return 'syntax';
67
+ }
68
+ // Type errors
69
+ if (lowerError.includes('type error') ||
70
+ lowerError.includes('typeerror') ||
71
+ lowerError.includes('is not a function') ||
72
+ lowerError.includes('undefined is not') ||
73
+ lowerError.includes('cannot read propert')) {
74
+ return 'type';
75
+ }
76
+ // Network errors
77
+ if (lowerError.includes('network') ||
78
+ lowerError.includes('connection') ||
79
+ lowerError.includes('econnrefused') ||
80
+ lowerError.includes('socket') ||
81
+ lowerError.includes('dns') ||
82
+ lowerError.includes('fetch failed')) {
83
+ return 'network';
84
+ }
85
+ // Timeout errors
86
+ if (lowerError.includes('timeout') ||
87
+ lowerError.includes('timed out') ||
88
+ lowerError.includes('etimedout')) {
89
+ return 'timeout';
90
+ }
91
+ // Validation errors
92
+ if (lowerError.includes('validation') ||
93
+ lowerError.includes('invalid') ||
94
+ lowerError.includes('required') ||
95
+ lowerError.includes('must be')) {
96
+ return 'validation';
97
+ }
98
+ // Resource errors
99
+ if (lowerError.includes('out of memory') ||
100
+ lowerError.includes('disk full') ||
101
+ lowerError.includes('enomem') ||
102
+ lowerError.includes('enospc') ||
103
+ lowerError.includes('quota')) {
104
+ return 'resource';
105
+ }
106
+ // Logic errors
107
+ if (lowerError.includes('assertion') ||
108
+ lowerError.includes('invariant') ||
109
+ lowerError.includes('expect')) {
110
+ return 'logic';
111
+ }
112
+ return 'unknown';
113
+ }
114
+ /**
115
+ * Generate a suggestion based on failure category.
116
+ */
117
+ export function generateSuggestion(failure) {
118
+ switch (failure.category) {
119
+ case 'permission':
120
+ return `Check file/directory permissions. The action "${failure.action}" may need elevated privileges or the path may be restricted.`;
121
+ case 'not_found':
122
+ return `Verify the resource exists before accessing. Use list_directory or check for typos in the path.`;
123
+ case 'syntax':
124
+ return `Review the syntax. Check for missing brackets, quotes, or invalid characters. Validate JSON/code before submission.`;
125
+ case 'type':
126
+ return `Check variable types and ensure proper null/undefined handling. The value may be a different type than expected.`;
127
+ case 'network':
128
+ return `Check network connectivity. The service may be down, or there may be firewall/DNS issues.`;
129
+ case 'timeout':
130
+ return `The operation took too long. Consider breaking it into smaller operations or increasing timeout.`;
131
+ case 'validation':
132
+ return `Verify input matches expected format/constraints. Check required fields and value ranges.`;
133
+ case 'resource':
134
+ return `System resources are constrained. Consider cleanup, smaller batch sizes, or freeing memory/disk.`;
135
+ case 'logic':
136
+ return `An assumption was violated. Review the logic and check preconditions.`;
137
+ default:
138
+ return `Analyze the error message for specific guidance.`;
139
+ }
140
+ }
141
+ // =============================================================================
142
+ // FAILURE TRACKER
143
+ // =============================================================================
144
+ /**
145
+ * Tracks failures with pattern detection.
146
+ */
147
+ export class FailureTracker {
148
+ config;
149
+ failures = [];
150
+ actionHistory = new Map(); // action -> failure IDs
151
+ listeners = [];
152
+ constructor(config = {}) {
153
+ this.config = {
154
+ maxFailures: config.maxFailures ?? 50,
155
+ preserveStackTraces: config.preserveStackTraces ?? true,
156
+ categorizeErrors: config.categorizeErrors ?? true,
157
+ detectRepeats: config.detectRepeats ?? true,
158
+ repeatWarningThreshold: config.repeatWarningThreshold ?? 3,
159
+ };
160
+ }
161
+ /**
162
+ * Record a failure.
163
+ */
164
+ recordFailure(input) {
165
+ const errorString = input.error instanceof Error
166
+ ? input.error.message
167
+ : input.error;
168
+ const stackTrace = input.error instanceof Error
169
+ ? input.error.stack
170
+ : undefined;
171
+ // Auto-categorize if needed
172
+ const category = input.category ??
173
+ (this.config.categorizeErrors ? categorizeError(errorString) : 'unknown');
174
+ // Check for repeats
175
+ let repeatCount = 1;
176
+ if (this.config.detectRepeats) {
177
+ repeatCount = this.countSimilarFailures(input.action, errorString);
178
+ }
179
+ const failure = {
180
+ id: `fail-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
181
+ timestamp: new Date().toISOString(),
182
+ action: input.action,
183
+ args: input.args,
184
+ error: errorString,
185
+ stackTrace: this.config.preserveStackTraces ? stackTrace : undefined,
186
+ category,
187
+ iteration: input.iteration,
188
+ intent: input.intent,
189
+ suggestion: '',
190
+ resolved: false,
191
+ repeatCount,
192
+ };
193
+ // Generate suggestion
194
+ failure.suggestion = generateSuggestion(failure);
195
+ // Store
196
+ this.failures.push(failure);
197
+ // Track by action
198
+ const actionFailures = this.actionHistory.get(input.action) || [];
199
+ actionFailures.push(failure.id);
200
+ this.actionHistory.set(input.action, actionFailures);
201
+ // Enforce max failures with eviction warning
202
+ if (this.failures.length > this.config.maxFailures) {
203
+ const evicted = this.failures.shift();
204
+ // Log warning about eviction
205
+ console.warn(`[FailureTracker] Evicted failure due to limit (${this.config.maxFailures}): ${evicted.action} - ${evicted.error.slice(0, 50)}`);
206
+ // Emit eviction event for observability
207
+ this.emit({
208
+ type: 'failure.evicted',
209
+ failure: evicted,
210
+ reason: `Max failures limit (${this.config.maxFailures}) exceeded`,
211
+ });
212
+ // Clean up action history
213
+ for (const [_action, ids] of this.actionHistory) {
214
+ const idx = ids.indexOf(evicted.id);
215
+ if (idx >= 0)
216
+ ids.splice(idx, 1);
217
+ }
218
+ }
219
+ // Emit events
220
+ this.emit({ type: 'failure.recorded', failure });
221
+ if (repeatCount >= this.config.repeatWarningThreshold) {
222
+ this.emit({ type: 'failure.repeated', failure, count: repeatCount });
223
+ }
224
+ // Check for patterns
225
+ this.detectPatterns();
226
+ return failure;
227
+ }
228
+ /**
229
+ * Mark a failure as resolved.
230
+ */
231
+ resolveFailure(failureId) {
232
+ const failure = this.failures.find(f => f.id === failureId);
233
+ if (failure) {
234
+ failure.resolved = true;
235
+ this.emit({ type: 'failure.resolved', failureId });
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+ /**
241
+ * Get all unresolved failures.
242
+ */
243
+ getUnresolvedFailures() {
244
+ return this.failures.filter(f => !f.resolved);
245
+ }
246
+ /**
247
+ * Get failures by category.
248
+ */
249
+ getFailuresByCategory(category) {
250
+ return this.failures.filter(f => f.category === category);
251
+ }
252
+ /**
253
+ * Get failures by action.
254
+ */
255
+ getFailuresByAction(action) {
256
+ const ids = this.actionHistory.get(action) || [];
257
+ return this.failures.filter(f => ids.includes(f.id));
258
+ }
259
+ /**
260
+ * Get recent failures (last N).
261
+ */
262
+ getRecentFailures(count = 10) {
263
+ return this.failures.slice(-count);
264
+ }
265
+ /**
266
+ * Get failure context formatted for LLM inclusion.
267
+ */
268
+ getFailureContext(options = {}) {
269
+ const { maxFailures = 10, includeResolved = false, includeStackTraces = false, } = options;
270
+ let failures = includeResolved
271
+ ? this.failures
272
+ : this.failures.filter(f => !f.resolved);
273
+ failures = failures.slice(-maxFailures);
274
+ if (failures.length === 0) {
275
+ return '';
276
+ }
277
+ return formatFailureContext(failures, { includeStackTraces });
278
+ }
279
+ /**
280
+ * Check if an action has failed recently.
281
+ */
282
+ hasRecentFailure(action, withinMs = 60000) {
283
+ const cutoff = Date.now() - withinMs;
284
+ return this.failures.some(f => f.action === action && new Date(f.timestamp).getTime() > cutoff);
285
+ }
286
+ /**
287
+ * Get failure statistics.
288
+ */
289
+ getStats() {
290
+ const byCategory = {
291
+ permission: 0,
292
+ not_found: 0,
293
+ syntax: 0,
294
+ type: 0,
295
+ runtime: 0,
296
+ network: 0,
297
+ timeout: 0,
298
+ validation: 0,
299
+ logic: 0,
300
+ resource: 0,
301
+ unknown: 0,
302
+ };
303
+ for (const f of this.failures) {
304
+ byCategory[f.category]++;
305
+ }
306
+ const actionCounts = new Map();
307
+ for (const f of this.failures) {
308
+ actionCounts.set(f.action, (actionCounts.get(f.action) || 0) + 1);
309
+ }
310
+ const mostFailedActions = Array.from(actionCounts.entries())
311
+ .map(([action, count]) => ({ action, count }))
312
+ .sort((a, b) => b.count - a.count)
313
+ .slice(0, 5);
314
+ return {
315
+ total: this.failures.length,
316
+ unresolved: this.failures.filter(f => !f.resolved).length,
317
+ byCategory,
318
+ mostFailedActions,
319
+ };
320
+ }
321
+ /**
322
+ * Clear all failures.
323
+ */
324
+ clear() {
325
+ this.failures = [];
326
+ this.actionHistory.clear();
327
+ }
328
+ /**
329
+ * Subscribe to events.
330
+ */
331
+ on(listener) {
332
+ this.listeners.push(listener);
333
+ return () => {
334
+ const idx = this.listeners.indexOf(listener);
335
+ if (idx >= 0)
336
+ this.listeners.splice(idx, 1);
337
+ };
338
+ }
339
+ // Internal methods
340
+ countSimilarFailures(action, error) {
341
+ const normalizedError = error.toLowerCase().slice(0, 50);
342
+ return this.failures.filter(f => f.action === action && f.error.toLowerCase().startsWith(normalizedError)).length + 1;
343
+ }
344
+ detectPatterns() {
345
+ // Detect repeated action failures
346
+ for (const [action, ids] of this.actionHistory) {
347
+ if (ids.length >= 3) {
348
+ const recent = ids.slice(-3);
349
+ const recentFailures = this.failures.filter(f => recent.includes(f.id));
350
+ if (recentFailures.every(f => !f.resolved)) {
351
+ this.emit({
352
+ type: 'pattern.detected',
353
+ pattern: {
354
+ type: 'repeated_action',
355
+ description: `Action "${action}" has failed ${ids.length} times`,
356
+ failureIds: recent,
357
+ confidence: Math.min(0.9, 0.3 + ids.length * 0.1),
358
+ suggestion: `Consider an alternative approach. "${action}" is consistently failing.`,
359
+ },
360
+ });
361
+ }
362
+ }
363
+ }
364
+ // Detect category clusters
365
+ const recentFailures = this.failures.slice(-10);
366
+ const categoryCounts = new Map();
367
+ for (const f of recentFailures) {
368
+ categoryCounts.set(f.category, (categoryCounts.get(f.category) || 0) + 1);
369
+ }
370
+ for (const [category, count] of categoryCounts) {
371
+ if (count >= 5) {
372
+ this.emit({
373
+ type: 'pattern.detected',
374
+ pattern: {
375
+ type: 'category_cluster',
376
+ description: `Multiple ${category} errors (${count} of last 10)`,
377
+ failureIds: recentFailures.filter(f => f.category === category).map(f => f.id),
378
+ confidence: count / 10,
379
+ suggestion: `Address the underlying ${category} issue before continuing.`,
380
+ },
381
+ });
382
+ }
383
+ }
384
+ }
385
+ emit(event) {
386
+ for (const listener of this.listeners) {
387
+ try {
388
+ listener(event);
389
+ }
390
+ catch {
391
+ // Ignore listener errors
392
+ }
393
+ }
394
+ }
395
+ }
396
+ // =============================================================================
397
+ // FACTORY FUNCTIONS
398
+ // =============================================================================
399
+ /**
400
+ * Create a failure tracker.
401
+ *
402
+ * @example
403
+ * ```typescript
404
+ * const tracker = createFailureTracker({
405
+ * maxFailures: 30,
406
+ * preserveStackTraces: true,
407
+ * detectRepeats: true,
408
+ * });
409
+ *
410
+ * // Record failures during agent loop
411
+ * try {
412
+ * await tool.execute(args);
413
+ * } catch (error) {
414
+ * tracker.recordFailure({
415
+ * action: tool.name,
416
+ * args,
417
+ * error,
418
+ * iteration: currentIteration,
419
+ * });
420
+ * }
421
+ *
422
+ * // Include failure context in prompts
423
+ * const failureContext = tracker.getFailureContext();
424
+ * if (failureContext) {
425
+ * messages.push({
426
+ * role: 'system',
427
+ * content: failureContext,
428
+ * });
429
+ * }
430
+ * ```
431
+ */
432
+ export function createFailureTracker(config = {}) {
433
+ return new FailureTracker(config);
434
+ }
435
+ // =============================================================================
436
+ // UTILITIES
437
+ // =============================================================================
438
+ /**
439
+ * Format failures as context for LLM.
440
+ */
441
+ export function formatFailureContext(failures, options = {}) {
442
+ if (failures.length === 0)
443
+ return '';
444
+ const lines = [
445
+ '[Previous Failures - Learn from these to avoid repeating mistakes]',
446
+ '',
447
+ ];
448
+ for (const f of failures) {
449
+ lines.push(`**${f.action}** (${f.category}): ${f.error}`);
450
+ if (f.args && Object.keys(f.args).length > 0) {
451
+ lines.push(` Args: ${JSON.stringify(f.args)}`);
452
+ }
453
+ if (f.suggestion) {
454
+ lines.push(` → ${f.suggestion}`);
455
+ }
456
+ if (options.includeStackTraces && f.stackTrace) {
457
+ const shortStack = f.stackTrace.split('\n').slice(0, 3).join('\n');
458
+ lines.push(` Stack: ${shortStack}`);
459
+ }
460
+ lines.push('');
461
+ }
462
+ return lines.join('\n');
463
+ }
464
+ /**
465
+ * Create a warning message for repeated failures.
466
+ */
467
+ export function createRepeatWarning(action, count, suggestion) {
468
+ let warning = `⚠️ Action "${action}" has failed ${count} times.`;
469
+ if (count >= 5) {
470
+ warning += ' Consider a completely different approach.';
471
+ }
472
+ else if (count >= 3) {
473
+ warning += ' Review previous errors before retrying.';
474
+ }
475
+ if (suggestion) {
476
+ warning += `\n💡 Suggestion: ${suggestion}`;
477
+ }
478
+ return warning;
479
+ }
480
+ /**
481
+ * Extract actionable insights from failures.
482
+ */
483
+ export function extractInsights(failures) {
484
+ const insights = [];
485
+ // Group by category
486
+ const byCategory = new Map();
487
+ for (const f of failures) {
488
+ const group = byCategory.get(f.category) || [];
489
+ group.push(f);
490
+ byCategory.set(f.category, group);
491
+ }
492
+ // Generate insights
493
+ if (byCategory.has('permission') && byCategory.get('permission').length >= 2) {
494
+ insights.push('Multiple permission errors - check if running with sufficient privileges');
495
+ }
496
+ if (byCategory.has('not_found') && byCategory.get('not_found').length >= 2) {
497
+ insights.push('Multiple not-found errors - verify paths and use list_directory first');
498
+ }
499
+ if (byCategory.has('syntax') && byCategory.get('syntax').length >= 2) {
500
+ insights.push('Multiple syntax errors - validate code/JSON before execution');
501
+ }
502
+ if (byCategory.has('network') && byCategory.get('network').length >= 1) {
503
+ insights.push('Network issues detected - check connectivity and service availability');
504
+ }
505
+ if (byCategory.has('timeout') && byCategory.get('timeout').length >= 1) {
506
+ insights.push('Timeout detected - consider breaking operations into smaller chunks');
507
+ }
508
+ // Action-specific insights
509
+ const actionCounts = new Map();
510
+ for (const f of failures) {
511
+ actionCounts.set(f.action, (actionCounts.get(f.action) || 0) + 1);
512
+ }
513
+ for (const [action, count] of actionCounts) {
514
+ if (count >= 3) {
515
+ insights.push(`"${action}" failed ${count} times - try an alternative tool/approach`);
516
+ }
517
+ }
518
+ return insights;
519
+ }
520
+ /**
521
+ * Format failure stats for display.
522
+ */
523
+ export function formatFailureStats(stats) {
524
+ const lines = [
525
+ `Failure Statistics:`,
526
+ ` Total: ${stats.total} (${stats.unresolved} unresolved)`,
527
+ '',
528
+ ' By Category:',
529
+ ];
530
+ for (const [category, count] of Object.entries(stats.byCategory)) {
531
+ if (count > 0) {
532
+ lines.push(` ${category}: ${count}`);
533
+ }
534
+ }
535
+ if (stats.mostFailedActions.length > 0) {
536
+ lines.push('');
537
+ lines.push(' Most Failed Actions:');
538
+ for (const { action, count } of stats.mostFailedActions) {
539
+ lines.push(` ${action}: ${count}`);
540
+ }
541
+ }
542
+ return lines.join('\n');
543
+ }
544
+ //# sourceMappingURL=failure-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-evidence.js","sourceRoot":"","sources":["../../../src/tricks/failure-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Trick: JSON Utilities
3
+ *
4
+ * Robust JSON parsing utilities that handle:
5
+ * - Nested objects (the regex `\{[^}]*\}` problem)
6
+ * - Strings containing braces
7
+ * - Escaped quotes
8
+ * - Malformed JSON with recovery
9
+ * - LLM response extraction (code blocks, tool calls)
10
+ */
11
+ export interface SafeParseOptions {
12
+ /** Context for error messages (e.g., "tool read_file") */
13
+ context?: string;
14
+ /** Whether to attempt recovery from malformed JSON */
15
+ attemptRecovery?: boolean;
16
+ }
17
+ export interface SafeParseResult<T = unknown> {
18
+ success: boolean;
19
+ value?: T;
20
+ error?: string;
21
+ /** Whether recovery was applied */
22
+ recovered?: boolean;
23
+ }
24
+ export interface ToolCall {
25
+ tool: string;
26
+ input: Record<string, unknown>;
27
+ }
28
+ /**
29
+ * Extract a complete JSON object from text using brace-depth tracking.
30
+ *
31
+ * Unlike regex `\{[^}]*\}`, this properly handles:
32
+ * - Nested objects: `{"a": {"b": 1}}`
33
+ * - Nested arrays: `{"a": [1, [2, 3]]}`
34
+ * - Strings containing braces: `{"text": "hello { } world"}`
35
+ * - Escaped quotes: `{"text": "he said \"hi\""}`
36
+ *
37
+ * @param text - The text to search for JSON
38
+ * @param startFrom - Optional index to start searching from
39
+ * @returns The extracted JSON string and its end index, or null if not found
40
+ */
41
+ export declare function extractJsonObject(text: string, startFrom?: number): {
42
+ json: string;
43
+ endIndex: number;
44
+ } | null;
45
+ /**
46
+ * Extract all JSON objects from text.
47
+ */
48
+ export declare function extractAllJsonObjects(text: string): string[];
49
+ /**
50
+ * Safely parse JSON with multi-level fallback and recovery.
51
+ *
52
+ * Fallback levels:
53
+ * 1. Direct JSON.parse
54
+ * 2. Extract JSON object from surrounding text
55
+ * 3. Attempt malformed JSON recovery (if enabled)
56
+ *
57
+ * @param input - Raw input (may be JSON or text containing JSON)
58
+ * @param options - Parsing options
59
+ */
60
+ export declare function safeParseJson<T = unknown>(input: string, options?: SafeParseOptions): SafeParseResult<T>;
61
+ /**
62
+ * Extract a tool call from an LLM response.
63
+ *
64
+ * Handles multiple formats:
65
+ * - Code block: ```json\n{"tool": "x", "input": {...}}\n```
66
+ * - Inline JSON: {"tool": "x", "input": {...}}
67
+ * - Nested inputs: {"tool": "x", "input": {"a": {"b": 1}}}
68
+ *
69
+ * @param response - The LLM response text
70
+ * @returns The extracted tool call, or null if not found
71
+ */
72
+ export declare function extractToolCallJson(response: string): ToolCall | null;
73
+ /**
74
+ * Extract multiple tool calls from a response.
75
+ */
76
+ export declare function extractAllToolCalls(response: string): ToolCall[];
77
+ //# sourceMappingURL=json-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-utils.d.ts","sourceRoot":"","sources":["../../../src/tricks/json-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,SAAI,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8C3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EACvC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CAAC,CAAC,CAAC,CAgDpB;AAmCD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAuBrE;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBhE"}