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,377 @@
1
+ /**
2
+ * Trick P: KV-Cache Aware Context
3
+ *
4
+ * Optimizes context structure for LLM KV-cache efficiency.
5
+ * Cached input tokens cost ~10x less than uncached ones.
6
+ *
7
+ * Key principles:
8
+ * 1. Keep system prompt PREFIX stable (no timestamps, session IDs at start)
9
+ * 2. Use deterministic JSON serialization (sorted keys)
10
+ * 3. Mark explicit cache breakpoints
11
+ * 4. Append-only message history (never modify past messages)
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createCacheAwareContext, stableStringify } from './kv-cache-context';
16
+ *
17
+ * const context = createCacheAwareContext({
18
+ * staticPrefix: 'You are a helpful coding assistant.',
19
+ * cacheBreakpoints: ['system_end', 'tools_end'],
20
+ * });
21
+ *
22
+ * // Build system prompt with stable prefix
23
+ * const systemPrompt = context.buildSystemPrompt({
24
+ * rules: rulesContent,
25
+ * sessionId: 'abc123', // Goes at END, not beginning
26
+ * });
27
+ *
28
+ * // Serialize tool calls deterministically
29
+ * const serialized = stableStringify(toolCall.arguments);
30
+ * ```
31
+ */
32
+ // =============================================================================
33
+ // DETERMINISTIC JSON SERIALIZATION
34
+ // =============================================================================
35
+ /**
36
+ * Stringify JSON with sorted keys for deterministic output.
37
+ * This ensures the same object always produces the same string,
38
+ * which is critical for KV-cache efficiency.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Standard JSON.stringify - key order not guaranteed
43
+ * JSON.stringify({ b: 1, a: 2 }); // Could be '{"b":1,"a":2}' or '{"a":2,"b":1}'
44
+ *
45
+ * // stableStringify - always same order
46
+ * stableStringify({ b: 1, a: 2 }); // Always '{"a":2,"b":1}'
47
+ * ```
48
+ */
49
+ export function stableStringify(obj, indent) {
50
+ return JSON.stringify(obj, sortedReplacer, indent);
51
+ }
52
+ /**
53
+ * JSON replacer that sorts object keys.
54
+ */
55
+ function sortedReplacer(_key, value) {
56
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
57
+ return value;
58
+ }
59
+ // Sort keys and create new object
60
+ const sorted = {};
61
+ const keys = Object.keys(value).sort();
62
+ for (const k of keys) {
63
+ sorted[k] = value[k];
64
+ }
65
+ return sorted;
66
+ }
67
+ /**
68
+ * Parse JSON and re-serialize deterministically.
69
+ * Useful for normalizing JSON strings from external sources.
70
+ */
71
+ export function normalizeJson(jsonString) {
72
+ try {
73
+ const parsed = JSON.parse(jsonString);
74
+ return stableStringify(parsed);
75
+ }
76
+ catch {
77
+ return jsonString; // Return as-is if not valid JSON
78
+ }
79
+ }
80
+ // =============================================================================
81
+ // CACHE-AWARE CONTEXT MANAGER
82
+ // =============================================================================
83
+ /**
84
+ * Manages context in a KV-cache-friendly way.
85
+ */
86
+ export class CacheAwareContext {
87
+ config;
88
+ messageHashes = new Map();
89
+ listeners = [];
90
+ breakpointPositions = new Map();
91
+ constructor(config) {
92
+ this.config = {
93
+ staticPrefix: config.staticPrefix,
94
+ cacheBreakpoints: config.cacheBreakpoints ?? ['system_end'],
95
+ deterministicJson: config.deterministicJson ?? true,
96
+ enforceAppendOnly: config.enforceAppendOnly ?? true,
97
+ };
98
+ }
99
+ /**
100
+ * Build system prompt with stable prefix and dynamic content at END.
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const prompt = context.buildSystemPrompt({
105
+ * rules: 'Follow these rules...',
106
+ * tools: toolDescriptions,
107
+ * dynamic: { sessionId: 'abc', mode: 'build' },
108
+ * });
109
+ * // Result:
110
+ * // "You are a helpful assistant. <- STABLE (cached)
111
+ * //
112
+ * // ## Rules
113
+ * // Follow these rules... <- Semi-stable (cached if unchanged)
114
+ * //
115
+ * // ## Tools
116
+ * // [tool descriptions] <- Semi-stable
117
+ * //
118
+ * // ---
119
+ * // Session: abc | Mode: build" <- DYNAMIC (not cached)
120
+ * ```
121
+ */
122
+ buildSystemPrompt(options) {
123
+ const parts = [];
124
+ let position = 0;
125
+ // 1. Static prefix (ALWAYS first, never changes)
126
+ parts.push(this.config.staticPrefix);
127
+ position += this.config.staticPrefix.length;
128
+ // Mark system_end breakpoint after static prefix
129
+ if (this.config.cacheBreakpoints.includes('system_end')) {
130
+ this.markBreakpoint('system_end', position);
131
+ }
132
+ // 2. Rules content (semi-stable)
133
+ if (options.rules) {
134
+ parts.push('\n\n## Rules\n' + options.rules);
135
+ position += options.rules.length + 12;
136
+ if (this.config.cacheBreakpoints.includes('rules_end')) {
137
+ this.markBreakpoint('rules_end', position);
138
+ }
139
+ }
140
+ // 3. Tool descriptions (semi-stable)
141
+ if (options.tools) {
142
+ parts.push('\n\n## Available Tools\n' + options.tools);
143
+ position += options.tools.length + 22;
144
+ if (this.config.cacheBreakpoints.includes('tools_end')) {
145
+ this.markBreakpoint('tools_end', position);
146
+ }
147
+ }
148
+ // 4. Memory context (changes more frequently)
149
+ if (options.memory) {
150
+ parts.push('\n\n## Relevant Context\n' + options.memory);
151
+ position += options.memory.length + 22;
152
+ if (this.config.cacheBreakpoints.includes('memory_end')) {
153
+ this.markBreakpoint('memory_end', position);
154
+ }
155
+ }
156
+ // 5. Dynamic content at END (changes every request)
157
+ if (options.dynamic && Object.keys(options.dynamic).length > 0) {
158
+ const dynamicParts = [];
159
+ if (options.dynamic.sessionId) {
160
+ dynamicParts.push(`Session: ${options.dynamic.sessionId}`);
161
+ }
162
+ if (options.dynamic.mode) {
163
+ dynamicParts.push(`Mode: ${options.dynamic.mode}`);
164
+ }
165
+ if (options.dynamic.timestamp) {
166
+ dynamicParts.push(`Time: ${options.dynamic.timestamp}`);
167
+ }
168
+ // Add any custom dynamic values
169
+ for (const [key, value] of Object.entries(options.dynamic)) {
170
+ if (!['sessionId', 'mode', 'timestamp'].includes(key) && value) {
171
+ dynamicParts.push(`${key}: ${value}`);
172
+ }
173
+ }
174
+ if (dynamicParts.length > 0) {
175
+ parts.push('\n\n---\n' + dynamicParts.join(' | '));
176
+ }
177
+ }
178
+ return parts.join('');
179
+ }
180
+ /**
181
+ * Validate that messages follow append-only constraint.
182
+ * Returns violations if any past messages were modified.
183
+ */
184
+ validateAppendOnly(messages) {
185
+ if (!this.config.enforceAppendOnly) {
186
+ return [];
187
+ }
188
+ const violations = [];
189
+ for (let i = 0; i < messages.length; i++) {
190
+ const msg = messages[i];
191
+ const currentHash = this.hashMessage(msg);
192
+ const previousHash = this.messageHashes.get(i);
193
+ if (previousHash !== undefined && previousHash !== currentHash) {
194
+ violations.push(`Message at index ${i} was modified (role: ${msg.role})`);
195
+ this.emit({
196
+ type: 'cache.violation',
197
+ reason: 'message_modified',
198
+ details: `Index ${i}, role ${msg.role}`,
199
+ });
200
+ }
201
+ // Update hash for this position
202
+ this.messageHashes.set(i, currentHash);
203
+ }
204
+ return violations;
205
+ }
206
+ /**
207
+ * Serialize a message in a cache-friendly way.
208
+ */
209
+ serializeMessage(message) {
210
+ if (this.config.deterministicJson) {
211
+ return stableStringify(message);
212
+ }
213
+ return JSON.stringify(message);
214
+ }
215
+ /**
216
+ * Serialize tool arguments deterministically.
217
+ */
218
+ serializeToolArgs(args) {
219
+ if (this.config.deterministicJson) {
220
+ return stableStringify(args);
221
+ }
222
+ return JSON.stringify(args);
223
+ }
224
+ /**
225
+ * Calculate cache statistics for a context.
226
+ */
227
+ calculateCacheStats(options) {
228
+ const { systemPrompt, messages, dynamicContentLength = 0 } = options;
229
+ // Estimate tokens (~4 chars per token)
230
+ const totalChars = systemPrompt.length +
231
+ messages.reduce((sum, m) => sum + m.content.length, 0);
232
+ const totalTokens = Math.ceil(totalChars / 4);
233
+ // Cacheable = everything except dynamic content at end
234
+ const cacheableChars = totalChars - dynamicContentLength;
235
+ const cacheableTokens = Math.ceil(cacheableChars / 4);
236
+ const nonCacheableTokens = totalTokens - cacheableTokens;
237
+ const cacheRatio = cacheableTokens / totalTokens;
238
+ // Cost savings: cached tokens are ~10x cheaper
239
+ // If 80% is cached, savings = 0.8 * 0.9 = 0.72 (72% savings)
240
+ const estimatedSavings = cacheRatio * 0.9;
241
+ const stats = {
242
+ cacheableTokens,
243
+ nonCacheableTokens,
244
+ cacheRatio,
245
+ estimatedSavings,
246
+ };
247
+ this.emit({ type: 'cache.stats', stats });
248
+ return stats;
249
+ }
250
+ /**
251
+ * Get breakpoint positions.
252
+ */
253
+ getBreakpointPositions() {
254
+ return new Map(this.breakpointPositions);
255
+ }
256
+ /**
257
+ * Subscribe to cache events.
258
+ */
259
+ on(listener) {
260
+ this.listeners.push(listener);
261
+ return () => {
262
+ const idx = this.listeners.indexOf(listener);
263
+ if (idx >= 0)
264
+ this.listeners.splice(idx, 1);
265
+ };
266
+ }
267
+ /**
268
+ * Reset message hashes (call when starting new session).
269
+ */
270
+ reset() {
271
+ this.messageHashes.clear();
272
+ this.breakpointPositions.clear();
273
+ }
274
+ // Internal methods
275
+ hashMessage(message) {
276
+ // Simple hash for change detection
277
+ const content = `${message.role}:${message.content}`;
278
+ let hash = 0;
279
+ for (let i = 0; i < content.length; i++) {
280
+ const char = content.charCodeAt(i);
281
+ hash = ((hash << 5) - hash) + char;
282
+ hash = hash & hash; // Convert to 32-bit integer
283
+ }
284
+ return hash.toString(16);
285
+ }
286
+ markBreakpoint(breakpoint, position) {
287
+ this.breakpointPositions.set(breakpoint, position);
288
+ this.emit({ type: 'cache.breakpoint', breakpoint, position });
289
+ }
290
+ emit(event) {
291
+ for (const listener of this.listeners) {
292
+ try {
293
+ listener(event);
294
+ }
295
+ catch {
296
+ // Ignore listener errors
297
+ }
298
+ }
299
+ }
300
+ }
301
+ // =============================================================================
302
+ // FACTORY FUNCTIONS
303
+ // =============================================================================
304
+ /**
305
+ * Create a cache-aware context manager.
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * const context = createCacheAwareContext({
310
+ * staticPrefix: `You are a coding assistant.
311
+ *
312
+ * You help users write, debug, and understand code.
313
+ * Always explain your reasoning.`,
314
+ * cacheBreakpoints: ['system_end', 'tools_end'],
315
+ * deterministicJson: true,
316
+ * });
317
+ * ```
318
+ */
319
+ export function createCacheAwareContext(config) {
320
+ return new CacheAwareContext(config);
321
+ }
322
+ // =============================================================================
323
+ // UTILITIES
324
+ // =============================================================================
325
+ /**
326
+ * Check if a system prompt has timestamps/dynamic content at the start.
327
+ * Returns warnings about cache-unfriendly patterns.
328
+ */
329
+ export function analyzeCacheEfficiency(systemPrompt) {
330
+ const warnings = [];
331
+ const suggestions = [];
332
+ // Check for timestamps at start
333
+ const timestampPatterns = [
334
+ /^\[?\d{4}-\d{2}-\d{2}/, // ISO date
335
+ /^\[?\d{1,2}\/\d{1,2}\/\d{4}/, // US date
336
+ /^Current time:/i,
337
+ /^Timestamp:/i,
338
+ /^Date:/i,
339
+ ];
340
+ for (const pattern of timestampPatterns) {
341
+ if (pattern.test(systemPrompt)) {
342
+ warnings.push('Timestamp/date at start of prompt will invalidate cache');
343
+ suggestions.push('Move timestamps to END of system prompt');
344
+ break;
345
+ }
346
+ }
347
+ // Check for session IDs at start
348
+ if (/^Session( ID)?:/i.test(systemPrompt)) {
349
+ warnings.push('Session ID at start will invalidate cache');
350
+ suggestions.push('Move session ID to END of system prompt');
351
+ }
352
+ // Check for random/dynamic content at start
353
+ if (/^(Random|Dynamic|Generated):/i.test(systemPrompt)) {
354
+ warnings.push('Dynamic content at start will invalidate cache');
355
+ suggestions.push('Move dynamic content to END of system prompt');
356
+ }
357
+ return { warnings, suggestions };
358
+ }
359
+ /**
360
+ * Format cache stats for display.
361
+ */
362
+ export function formatCacheStats(stats) {
363
+ const cachePercent = Math.round(stats.cacheRatio * 100);
364
+ const savingsPercent = Math.round(stats.estimatedSavings * 100);
365
+ return `KV-Cache Statistics:
366
+ Cacheable tokens: ${stats.cacheableTokens.toLocaleString()}
367
+ Non-cacheable tokens: ${stats.nonCacheableTokens.toLocaleString()}
368
+ Cache ratio: ${cachePercent}%
369
+ Estimated savings: ${savingsPercent}% cost reduction`;
370
+ }
371
+ /**
372
+ * Create a cache-friendly timestamp that goes at the end.
373
+ */
374
+ export function createEndTimestamp() {
375
+ return `[Context generated at ${new Date().toISOString()}]`;
376
+ }
377
+ //# sourceMappingURL=kv-cache-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-cache-context.js","sourceRoot":"","sources":["../../../src/tricks/kv-cache-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Trick Q: Recitation / Goal Reinforcement
3
+ *
4
+ * Periodically injects task summaries (plans, todos, goals) into the END
5
+ * of the context to combat "lost in the middle" attention issues.
6
+ *
7
+ * Problem: In long conversations (50+ tool calls), the model "forgets"
8
+ * the original goal because it's buried in the middle of the context.
9
+ *
10
+ * Solution: Periodically "recite" the current goal/plan at the context end,
11
+ * pushing it into the model's recent attention span.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createRecitationManager } from './recitation';
16
+ *
17
+ * const recitation = createRecitationManager({
18
+ * frequency: 5, // Every 5 iterations
19
+ * sources: ['plan', 'todo', 'goal'],
20
+ * });
21
+ *
22
+ * // In agent loop
23
+ * const messages = recitation.injectIfNeeded(
24
+ * currentMessages,
25
+ * { plan, todos, goal, iteration: 15 }
26
+ * );
27
+ * ```
28
+ */
29
+ /**
30
+ * Sources of content to recite.
31
+ */
32
+ export type RecitationSource = 'plan' | 'todo' | 'goal' | 'memory' | 'custom';
33
+ /**
34
+ * Configuration for recitation.
35
+ */
36
+ export interface RecitationConfig {
37
+ /** Inject recitation every N iterations (default: 5) */
38
+ frequency: number;
39
+ /** Sources to include in recitation */
40
+ sources: RecitationSource[];
41
+ /** Maximum tokens for recitation block (default: 500) */
42
+ maxTokens?: number;
43
+ /** Custom recitation builder */
44
+ customBuilder?: (state: RecitationState) => string | null;
45
+ /** Whether to track injection history */
46
+ trackHistory?: boolean;
47
+ }
48
+ /**
49
+ * Current state for building recitation.
50
+ */
51
+ export interface RecitationState {
52
+ /** Current iteration number */
53
+ iteration: number;
54
+ /** Original user goal/task */
55
+ goal?: string;
56
+ /** Current plan with tasks */
57
+ plan?: PlanState;
58
+ /** Current todo list */
59
+ todos?: TodoItem[];
60
+ /** Relevant memory items */
61
+ memories?: string[];
62
+ /** Files currently being worked on */
63
+ activeFiles?: string[];
64
+ /** Recent errors encountered */
65
+ recentErrors?: string[];
66
+ /** Custom state values */
67
+ custom?: Record<string, unknown>;
68
+ }
69
+ /**
70
+ * Plan state.
71
+ */
72
+ export interface PlanState {
73
+ description: string;
74
+ tasks: PlanTask[];
75
+ currentTaskIndex: number;
76
+ }
77
+ /**
78
+ * Task in a plan.
79
+ */
80
+ export interface PlanTask {
81
+ id: string;
82
+ description: string;
83
+ status: 'pending' | 'in_progress' | 'completed' | 'failed';
84
+ }
85
+ /**
86
+ * Todo item.
87
+ */
88
+ export interface TodoItem {
89
+ content: string;
90
+ status: 'pending' | 'in_progress' | 'completed';
91
+ }
92
+ /**
93
+ * Message for injection.
94
+ */
95
+ export interface RecitationMessage {
96
+ role: 'system' | 'user' | 'assistant';
97
+ content: string;
98
+ }
99
+ /**
100
+ * Recitation history entry.
101
+ */
102
+ export interface RecitationEntry {
103
+ iteration: number;
104
+ timestamp: string;
105
+ content: string;
106
+ sources: RecitationSource[];
107
+ }
108
+ /**
109
+ * Events emitted by recitation manager.
110
+ */
111
+ export type RecitationEvent = {
112
+ type: 'recitation.injected';
113
+ iteration: number;
114
+ sources: RecitationSource[];
115
+ } | {
116
+ type: 'recitation.skipped';
117
+ iteration: number;
118
+ reason: string;
119
+ } | {
120
+ type: 'recitation.built';
121
+ content: string;
122
+ tokenEstimate: number;
123
+ };
124
+ export type RecitationEventListener = (event: RecitationEvent) => void;
125
+ /**
126
+ * Manages periodic goal/plan recitation.
127
+ */
128
+ export declare class RecitationManager {
129
+ private config;
130
+ private history;
131
+ private lastInjectionIteration;
132
+ private listeners;
133
+ constructor(config: RecitationConfig);
134
+ /**
135
+ * Check if recitation should be injected at this iteration.
136
+ */
137
+ shouldInject(iteration: number): boolean;
138
+ /**
139
+ * Build recitation content from state.
140
+ */
141
+ buildRecitation(state: RecitationState): string | null;
142
+ /**
143
+ * Inject recitation into messages if needed.
144
+ * Returns the modified message array.
145
+ */
146
+ injectIfNeeded<T extends RecitationMessage>(messages: T[], state: RecitationState): T[];
147
+ /**
148
+ * Force recitation injection regardless of frequency.
149
+ */
150
+ forceInject<T extends RecitationMessage>(messages: T[], state: RecitationState): T[];
151
+ /**
152
+ * Get injection history.
153
+ */
154
+ getHistory(): RecitationEntry[];
155
+ /**
156
+ * Clear history.
157
+ */
158
+ clearHistory(): void;
159
+ /**
160
+ * Update configuration.
161
+ */
162
+ updateConfig(updates: Partial<RecitationConfig>): void;
163
+ /**
164
+ * Subscribe to events.
165
+ */
166
+ on(listener: RecitationEventListener): () => void;
167
+ private buildPlanSummary;
168
+ private buildTodoSummary;
169
+ private buildMemorySummary;
170
+ private truncateContent;
171
+ private findLastUserMessageIndex;
172
+ private emit;
173
+ }
174
+ /**
175
+ * Create a recitation manager.
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * const recitation = createRecitationManager({
180
+ * frequency: 5, // Every 5 iterations
181
+ * sources: ['goal', 'plan', 'todo'],
182
+ * maxTokens: 500,
183
+ * });
184
+ *
185
+ * // In agent loop
186
+ * const enrichedMessages = recitation.injectIfNeeded(messages, {
187
+ * iteration: currentIteration,
188
+ * goal: 'Implement user authentication',
189
+ * plan: currentPlan,
190
+ * todos: currentTodos,
191
+ * });
192
+ * ```
193
+ */
194
+ export declare function createRecitationManager(config: RecitationConfig): RecitationManager;
195
+ /**
196
+ * Quick helper to build a recitation block without full manager.
197
+ */
198
+ export declare function buildQuickRecitation(state: RecitationState): string;
199
+ /**
200
+ * Calculate optimal recitation frequency based on context size.
201
+ * Longer contexts need more frequent recitation.
202
+ */
203
+ export declare function calculateOptimalFrequency(contextTokens: number): number;
204
+ /**
205
+ * Format recitation history for debugging.
206
+ */
207
+ export declare function formatRecitationHistory(history: RecitationEntry[]): string;
208
+ //# sourceMappingURL=recitation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recitation.d.ts","sourceRoot":"","sources":["../../../src/tricks/recitation.ts"],"names":[],"mappings":"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"}