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,189 @@
1
+ /**
2
+ * Lesson 26: Cache Boundary Tracker
3
+ *
4
+ * Analyzes KV cache efficiency during agent execution.
5
+ * Tracks content hashes to detect cache invalidation,
6
+ * compares predicted vs actual cache hit rates from API responses.
7
+ *
8
+ * Key insight: Anthropic returns `cache_creation_input_tokens` and
9
+ * `cache_read_input_tokens` in the usage response, allowing us to
10
+ * measure actual cache performance.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const tracker = new CacheBoundaryTracker();
15
+ *
16
+ * // Record request
17
+ * tracker.recordRequest({
18
+ * messages: [...],
19
+ * systemPrompt: '...',
20
+ * });
21
+ *
22
+ * // After getting API response, record actual cache stats
23
+ * tracker.recordResponse({
24
+ * cacheReadTokens: response.usage.cache_read_input_tokens,
25
+ * cacheWriteTokens: response.usage.cache_creation_input_tokens,
26
+ * totalInputTokens: response.usage.input_tokens,
27
+ * });
28
+ *
29
+ * // Analyze
30
+ * const analysis = tracker.analyze();
31
+ * console.log(`Cache hit rate: ${analysis.hitRate * 100}%`);
32
+ * ```
33
+ */
34
+ import { type CacheBreakdown, type CacheBreakpointInfo } from './types.js';
35
+ /**
36
+ * Request data for cache tracking.
37
+ */
38
+ export interface CacheTrackingRequest {
39
+ /** System prompt content */
40
+ systemPrompt: string;
41
+ /** Messages array */
42
+ messages: Array<{
43
+ role: 'system' | 'user' | 'assistant' | 'tool';
44
+ content: string;
45
+ toolCallId?: string;
46
+ }>;
47
+ /** Tool definitions (affects cache) */
48
+ toolDefinitions?: unknown[];
49
+ }
50
+ /**
51
+ * Response data from API with cache info.
52
+ */
53
+ export interface CacheTrackingResponse {
54
+ /** Tokens read from cache (cache hit) */
55
+ cacheReadTokens: number;
56
+ /** Tokens written to cache (new cache entries) */
57
+ cacheWriteTokens: number;
58
+ /** Total input tokens */
59
+ totalInputTokens: number;
60
+ /** Output tokens */
61
+ outputTokens: number;
62
+ }
63
+ /**
64
+ * Historical cache data point.
65
+ */
66
+ interface CacheHistoryEntry {
67
+ /** Request number */
68
+ requestNumber: number;
69
+ /** Timestamp */
70
+ timestamp: number;
71
+ /** Content hash of the prefix */
72
+ prefixHash: string;
73
+ /** Hash of each message */
74
+ messageHashes: string[];
75
+ /** Predicted cacheable tokens */
76
+ predictedCacheableTokens: number;
77
+ /** Actual cache read from API */
78
+ actualCacheReadTokens?: number;
79
+ /** Actual cache write from API */
80
+ actualCacheWriteTokens?: number;
81
+ /** Total input tokens */
82
+ totalInputTokens?: number;
83
+ /** Detected breakpoints */
84
+ breakpoints: CacheBreakpointInfo[];
85
+ }
86
+ /**
87
+ * Cache analysis result.
88
+ */
89
+ export interface CacheAnalysis {
90
+ /** Overall cache hit rate (0-1) */
91
+ hitRate: number;
92
+ /** Average hit rate across all requests */
93
+ avgHitRate: number;
94
+ /** Tokens saved by caching */
95
+ tokensSaved: number;
96
+ /** Cost savings estimate (USD) */
97
+ estimatedSavings: number;
98
+ /** Cache efficiency trend */
99
+ trend: 'improving' | 'declining' | 'stable';
100
+ /** Most common breakpoint types */
101
+ commonBreakpoints: Array<{
102
+ type: CacheBreakpointInfo['type'];
103
+ count: number;
104
+ avgTokensAffected: number;
105
+ }>;
106
+ /** Recommendations for improving cache efficiency */
107
+ recommendations: string[];
108
+ }
109
+ /**
110
+ * Tracks KV cache boundaries and efficiency during agent execution.
111
+ */
112
+ export declare class CacheBoundaryTracker {
113
+ private history;
114
+ private requestCount;
115
+ private previousPrefixHash;
116
+ private previousMessageHashes;
117
+ private readonly cachedTokenCost;
118
+ private readonly uncachedTokenCost;
119
+ /**
120
+ * Record a new request for cache tracking.
121
+ */
122
+ recordRequest(request: CacheTrackingRequest): CacheBreakdown;
123
+ /**
124
+ * Update the last request with actual API response data.
125
+ */
126
+ recordResponse(response: CacheTrackingResponse): CacheBreakdown;
127
+ /**
128
+ * Get comprehensive cache analysis.
129
+ */
130
+ analyze(): CacheAnalysis;
131
+ /**
132
+ * Get cache breakdown for the current state.
133
+ */
134
+ getCurrentBreakdown(): CacheBreakdown | null;
135
+ /**
136
+ * Get history of all cache tracking entries.
137
+ */
138
+ getHistory(): CacheHistoryEntry[];
139
+ /**
140
+ * Reset tracker state.
141
+ */
142
+ reset(): void;
143
+ /**
144
+ * Detect cache breakpoints by comparing with previous request.
145
+ */
146
+ private detectBreakpoints;
147
+ /**
148
+ * Classify what type of breakpoint this is.
149
+ */
150
+ private classifyBreakpoint;
151
+ /**
152
+ * Predict how many tokens will be cached based on history.
153
+ */
154
+ private predictCacheableTokens;
155
+ /**
156
+ * Estimate tokens for a request.
157
+ */
158
+ private estimateTokens;
159
+ /**
160
+ * Estimate tokens from content (rough approximation).
161
+ */
162
+ private estimateTokensFromContent;
163
+ /**
164
+ * Estimate tokens remaining after a position.
165
+ */
166
+ private estimateRemainingTokens;
167
+ /**
168
+ * Calculate cost savings from caching.
169
+ */
170
+ private calculateSavings;
171
+ /**
172
+ * Calculate trend from hit rate history.
173
+ */
174
+ private calculateTrend;
175
+ /**
176
+ * Generate recommendations based on analysis.
177
+ */
178
+ private generateRecommendations;
179
+ /**
180
+ * Simple hash function for content comparison.
181
+ */
182
+ private hashContent;
183
+ }
184
+ /**
185
+ * Create a new cache boundary tracker.
186
+ */
187
+ export declare function createCacheBoundaryTracker(): CacheBoundaryTracker;
188
+ export {};
189
+ //# sourceMappingURL=cache-boundary-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-boundary-tracker.d.ts","sourceRoot":"","sources":["../../../src/tracing/cache-boundary-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Lesson 26: Cache Boundary Tracker
3
+ *
4
+ * Analyzes KV cache efficiency during agent execution.
5
+ * Tracks content hashes to detect cache invalidation,
6
+ * compares predicted vs actual cache hit rates from API responses.
7
+ *
8
+ * Key insight: Anthropic returns `cache_creation_input_tokens` and
9
+ * `cache_read_input_tokens` in the usage response, allowing us to
10
+ * measure actual cache performance.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const tracker = new CacheBoundaryTracker();
15
+ *
16
+ * // Record request
17
+ * tracker.recordRequest({
18
+ * messages: [...],
19
+ * systemPrompt: '...',
20
+ * });
21
+ *
22
+ * // After getting API response, record actual cache stats
23
+ * tracker.recordResponse({
24
+ * cacheReadTokens: response.usage.cache_read_input_tokens,
25
+ * cacheWriteTokens: response.usage.cache_creation_input_tokens,
26
+ * totalInputTokens: response.usage.input_tokens,
27
+ * });
28
+ *
29
+ * // Analyze
30
+ * const analysis = tracker.analyze();
31
+ * console.log(`Cache hit rate: ${analysis.hitRate * 100}%`);
32
+ * ```
33
+ */
34
+ import { stableStringify } from '../tricks/kv-cache-context.js';
35
+ // =============================================================================
36
+ // CACHE BOUNDARY TRACKER
37
+ // =============================================================================
38
+ /**
39
+ * Tracks KV cache boundaries and efficiency during agent execution.
40
+ */
41
+ export class CacheBoundaryTracker {
42
+ history = [];
43
+ requestCount = 0;
44
+ previousPrefixHash = null;
45
+ previousMessageHashes = [];
46
+ // Cost assumptions for savings calculation
47
+ cachedTokenCost = 0.00025 / 1000; // $0.25 per 1M cached
48
+ uncachedTokenCost = 0.003 / 1000; // $3 per 1M uncached
49
+ /**
50
+ * Record a new request for cache tracking.
51
+ */
52
+ recordRequest(request) {
53
+ this.requestCount++;
54
+ // Compute prefix hash (system prompt + tools)
55
+ const prefixContent = request.systemPrompt +
56
+ (request.toolDefinitions ? stableStringify(request.toolDefinitions) : '');
57
+ const prefixHash = this.hashContent(prefixContent);
58
+ // Compute message hashes
59
+ const messageHashes = request.messages.map(msg => this.hashContent(`${msg.role}:${msg.content}:${msg.toolCallId ?? ''}`));
60
+ // Detect breakpoints
61
+ const breakpoints = this.detectBreakpoints(prefixHash, messageHashes, request.messages);
62
+ // Estimate cacheable tokens
63
+ const estimatedTokens = this.estimateTokens(request);
64
+ const predictedCacheableTokens = this.predictCacheableTokens(prefixHash, messageHashes, estimatedTokens);
65
+ // Store history entry
66
+ const entry = {
67
+ requestNumber: this.requestCount,
68
+ timestamp: Date.now(),
69
+ prefixHash,
70
+ messageHashes,
71
+ predictedCacheableTokens,
72
+ breakpoints,
73
+ };
74
+ this.history.push(entry);
75
+ // Update previous state
76
+ this.previousPrefixHash = prefixHash;
77
+ this.previousMessageHashes = [...messageHashes];
78
+ // Return breakdown (will be updated when response comes)
79
+ return {
80
+ cacheReadTokens: predictedCacheableTokens,
81
+ cacheWriteTokens: estimatedTokens.total - predictedCacheableTokens,
82
+ freshTokens: estimatedTokens.total - predictedCacheableTokens,
83
+ hitRate: predictedCacheableTokens / estimatedTokens.total,
84
+ estimatedSavings: this.calculateSavings(predictedCacheableTokens, estimatedTokens.total - predictedCacheableTokens),
85
+ breakpoints,
86
+ };
87
+ }
88
+ /**
89
+ * Update the last request with actual API response data.
90
+ */
91
+ recordResponse(response) {
92
+ if (this.history.length === 0) {
93
+ throw new Error('No request recorded to update');
94
+ }
95
+ const lastEntry = this.history[this.history.length - 1];
96
+ lastEntry.actualCacheReadTokens = response.cacheReadTokens;
97
+ lastEntry.actualCacheWriteTokens = response.cacheWriteTokens;
98
+ lastEntry.totalInputTokens = response.totalInputTokens;
99
+ const freshTokens = response.totalInputTokens - response.cacheReadTokens;
100
+ const hitRate = response.totalInputTokens > 0
101
+ ? response.cacheReadTokens / response.totalInputTokens
102
+ : 0;
103
+ return {
104
+ cacheReadTokens: response.cacheReadTokens,
105
+ cacheWriteTokens: response.cacheWriteTokens,
106
+ freshTokens,
107
+ hitRate,
108
+ estimatedSavings: this.calculateSavings(response.cacheReadTokens, freshTokens),
109
+ breakpoints: lastEntry.breakpoints,
110
+ };
111
+ }
112
+ /**
113
+ * Get comprehensive cache analysis.
114
+ */
115
+ analyze() {
116
+ if (this.history.length === 0) {
117
+ return {
118
+ hitRate: 0,
119
+ avgHitRate: 0,
120
+ tokensSaved: 0,
121
+ estimatedSavings: 0,
122
+ trend: 'stable',
123
+ commonBreakpoints: [],
124
+ recommendations: ['No requests recorded yet'],
125
+ };
126
+ }
127
+ // Calculate overall stats
128
+ let totalCacheRead = 0;
129
+ let totalTokens = 0;
130
+ const hitRates = [];
131
+ for (const entry of this.history) {
132
+ if (entry.actualCacheReadTokens !== undefined && entry.totalInputTokens !== undefined) {
133
+ totalCacheRead += entry.actualCacheReadTokens;
134
+ totalTokens += entry.totalInputTokens;
135
+ hitRates.push(entry.actualCacheReadTokens / entry.totalInputTokens);
136
+ }
137
+ }
138
+ const hitRate = totalTokens > 0 ? totalCacheRead / totalTokens : 0;
139
+ const avgHitRate = hitRates.length > 0
140
+ ? hitRates.reduce((a, b) => a + b, 0) / hitRates.length
141
+ : 0;
142
+ // Calculate tokens saved and cost savings
143
+ const tokensSaved = totalCacheRead;
144
+ const estimatedSavings = this.calculateSavings(totalCacheRead, totalTokens - totalCacheRead);
145
+ // Determine trend
146
+ const trend = this.calculateTrend(hitRates);
147
+ // Aggregate breakpoints
148
+ const breakpointCounts = new Map();
149
+ for (const entry of this.history) {
150
+ for (const bp of entry.breakpoints) {
151
+ const existing = breakpointCounts.get(bp.type) ?? { count: 0, tokens: 0 };
152
+ existing.count++;
153
+ existing.tokens += bp.tokensAffected;
154
+ breakpointCounts.set(bp.type, existing);
155
+ }
156
+ }
157
+ const commonBreakpoints = Array.from(breakpointCounts.entries())
158
+ .map(([type, data]) => ({
159
+ type,
160
+ count: data.count,
161
+ avgTokensAffected: data.tokens / data.count,
162
+ }))
163
+ .sort((a, b) => b.count - a.count);
164
+ // Generate recommendations
165
+ const recommendations = this.generateRecommendations(hitRate, commonBreakpoints, trend);
166
+ return {
167
+ hitRate,
168
+ avgHitRate,
169
+ tokensSaved,
170
+ estimatedSavings,
171
+ trend,
172
+ commonBreakpoints,
173
+ recommendations,
174
+ };
175
+ }
176
+ /**
177
+ * Get cache breakdown for the current state.
178
+ */
179
+ getCurrentBreakdown() {
180
+ if (this.history.length === 0)
181
+ return null;
182
+ const lastEntry = this.history[this.history.length - 1];
183
+ if (lastEntry.actualCacheReadTokens === undefined) {
184
+ return {
185
+ cacheReadTokens: lastEntry.predictedCacheableTokens,
186
+ cacheWriteTokens: 0,
187
+ freshTokens: 0,
188
+ hitRate: 0,
189
+ estimatedSavings: 0,
190
+ breakpoints: lastEntry.breakpoints,
191
+ };
192
+ }
193
+ const freshTokens = (lastEntry.totalInputTokens ?? 0) - lastEntry.actualCacheReadTokens;
194
+ return {
195
+ cacheReadTokens: lastEntry.actualCacheReadTokens,
196
+ cacheWriteTokens: lastEntry.actualCacheWriteTokens ?? 0,
197
+ freshTokens,
198
+ hitRate: lastEntry.totalInputTokens
199
+ ? lastEntry.actualCacheReadTokens / lastEntry.totalInputTokens
200
+ : 0,
201
+ estimatedSavings: this.calculateSavings(lastEntry.actualCacheReadTokens, freshTokens),
202
+ breakpoints: lastEntry.breakpoints,
203
+ };
204
+ }
205
+ /**
206
+ * Get history of all cache tracking entries.
207
+ */
208
+ getHistory() {
209
+ return [...this.history];
210
+ }
211
+ /**
212
+ * Reset tracker state.
213
+ */
214
+ reset() {
215
+ this.history = [];
216
+ this.requestCount = 0;
217
+ this.previousPrefixHash = null;
218
+ this.previousMessageHashes = [];
219
+ }
220
+ // ==========================================================================
221
+ // PRIVATE METHODS
222
+ // ==========================================================================
223
+ /**
224
+ * Detect cache breakpoints by comparing with previous request.
225
+ */
226
+ detectBreakpoints(currentPrefixHash, currentMessageHashes, messages) {
227
+ const breakpoints = [];
228
+ // First request - no breakpoints
229
+ if (this.previousPrefixHash === null) {
230
+ return breakpoints;
231
+ }
232
+ // Check prefix change (system prompt or tools changed)
233
+ if (currentPrefixHash !== this.previousPrefixHash) {
234
+ breakpoints.push({
235
+ position: 0,
236
+ type: 'dynamic_content',
237
+ description: 'System prompt or tool definitions changed',
238
+ tokensAffected: this.estimateTokensFromContent(messages[0]?.content ?? ''),
239
+ });
240
+ }
241
+ // Check each message for changes
242
+ let lastUnchangedIndex = -1;
243
+ for (let i = 0; i < currentMessageHashes.length; i++) {
244
+ if (i >= this.previousMessageHashes.length) {
245
+ // New message (expected, not a breakpoint)
246
+ continue;
247
+ }
248
+ if (currentMessageHashes[i] !== this.previousMessageHashes[i]) {
249
+ // Message changed!
250
+ const msg = messages[i];
251
+ const breakpointType = this.classifyBreakpoint(msg, i, lastUnchangedIndex);
252
+ breakpoints.push({
253
+ position: i,
254
+ type: breakpointType,
255
+ description: `Message at position ${i} (${msg.role}) changed`,
256
+ tokensAffected: this.estimateRemainingTokens(messages, i),
257
+ });
258
+ break; // Only report first change
259
+ }
260
+ lastUnchangedIndex = i;
261
+ }
262
+ return breakpoints;
263
+ }
264
+ /**
265
+ * Classify what type of breakpoint this is.
266
+ */
267
+ classifyBreakpoint(message, position, lastUnchangedIndex) {
268
+ // If role changed from previous position
269
+ if (position > 0) {
270
+ return 'role_change';
271
+ }
272
+ // Tool result messages
273
+ if (message.role === 'tool') {
274
+ return 'tool_result';
275
+ }
276
+ // Content change
277
+ return 'content_change';
278
+ }
279
+ /**
280
+ * Predict how many tokens will be cached based on history.
281
+ */
282
+ predictCacheableTokens(currentPrefixHash, currentMessageHashes, estimatedTokens) {
283
+ // First request - nothing cached
284
+ if (this.previousPrefixHash === null) {
285
+ return 0;
286
+ }
287
+ // Prefix changed - no cache
288
+ if (currentPrefixHash !== this.previousPrefixHash) {
289
+ return 0;
290
+ }
291
+ // Count matching message hashes from the start
292
+ let cachedTokens = estimatedTokens.total - estimatedTokens.messages.reduce((a, b) => a + b, 0);
293
+ for (let i = 0; i < currentMessageHashes.length && i < this.previousMessageHashes.length; i++) {
294
+ if (currentMessageHashes[i] === this.previousMessageHashes[i]) {
295
+ cachedTokens += estimatedTokens.messages[i] ?? 0;
296
+ }
297
+ else {
298
+ break;
299
+ }
300
+ }
301
+ return cachedTokens;
302
+ }
303
+ /**
304
+ * Estimate tokens for a request.
305
+ */
306
+ estimateTokens(request) {
307
+ const systemTokens = this.estimateTokensFromContent(request.systemPrompt);
308
+ const toolTokens = request.toolDefinitions
309
+ ? this.estimateTokensFromContent(stableStringify(request.toolDefinitions))
310
+ : 0;
311
+ const messageTokens = request.messages.map(msg => this.estimateTokensFromContent(msg.content));
312
+ const total = systemTokens + toolTokens + messageTokens.reduce((a, b) => a + b, 0);
313
+ return { total, messages: messageTokens };
314
+ }
315
+ /**
316
+ * Estimate tokens from content (rough approximation).
317
+ */
318
+ estimateTokensFromContent(content) {
319
+ // Rough estimate: 1 token per 4 characters
320
+ return Math.ceil(content.length / 4);
321
+ }
322
+ /**
323
+ * Estimate tokens remaining after a position.
324
+ */
325
+ estimateRemainingTokens(messages, fromIndex) {
326
+ let tokens = 0;
327
+ for (let i = fromIndex; i < messages.length; i++) {
328
+ tokens += this.estimateTokensFromContent(messages[i].content);
329
+ }
330
+ return tokens;
331
+ }
332
+ /**
333
+ * Calculate cost savings from caching.
334
+ */
335
+ calculateSavings(cachedTokens, uncachedTokens) {
336
+ // What it would have cost without caching
337
+ const withoutCacheCost = (cachedTokens + uncachedTokens) * this.uncachedTokenCost;
338
+ // What it actually costs with caching
339
+ const withCacheCost = cachedTokens * this.cachedTokenCost + uncachedTokens * this.uncachedTokenCost;
340
+ return withoutCacheCost - withCacheCost;
341
+ }
342
+ /**
343
+ * Calculate trend from hit rate history.
344
+ */
345
+ calculateTrend(hitRates) {
346
+ if (hitRates.length < 3)
347
+ return 'stable';
348
+ // Compare first half to second half
349
+ const midpoint = Math.floor(hitRates.length / 2);
350
+ const firstHalf = hitRates.slice(0, midpoint);
351
+ const secondHalf = hitRates.slice(midpoint);
352
+ const firstAvg = firstHalf.reduce((a, b) => a + b, 0) / firstHalf.length;
353
+ const secondAvg = secondHalf.reduce((a, b) => a + b, 0) / secondHalf.length;
354
+ const diff = secondAvg - firstAvg;
355
+ if (diff > 0.05)
356
+ return 'improving';
357
+ if (diff < -0.05)
358
+ return 'declining';
359
+ return 'stable';
360
+ }
361
+ /**
362
+ * Generate recommendations based on analysis.
363
+ */
364
+ generateRecommendations(hitRate, breakpoints, trend) {
365
+ const recommendations = [];
366
+ if (hitRate < 0.5) {
367
+ recommendations.push('Cache hit rate is low (<50%). Consider stabilizing system prompts.');
368
+ }
369
+ if (hitRate < 0.3) {
370
+ recommendations.push('Very low cache efficiency. Check for timestamps or dynamic content at the start of prompts.');
371
+ }
372
+ // Check for common breakpoint types
373
+ const dynamicBreaks = breakpoints.find(b => b.type === 'dynamic_content');
374
+ if (dynamicBreaks && dynamicBreaks.count > 2) {
375
+ recommendations.push('Frequent dynamic content changes detected. Move variable content to the end of prompts.');
376
+ }
377
+ const contentChanges = breakpoints.find(b => b.type === 'content_change');
378
+ if (contentChanges && contentChanges.count > 3) {
379
+ recommendations.push('Message content is being modified. Ensure append-only message history.');
380
+ }
381
+ if (trend === 'declining') {
382
+ recommendations.push('Cache efficiency is declining over time. Review recent prompt structure changes.');
383
+ }
384
+ if (recommendations.length === 0 && hitRate > 0.7) {
385
+ recommendations.push('Good cache efficiency! Current patterns are working well.');
386
+ }
387
+ return recommendations;
388
+ }
389
+ /**
390
+ * Simple hash function for content comparison.
391
+ */
392
+ hashContent(content) {
393
+ let hash = 0;
394
+ for (let i = 0; i < content.length; i++) {
395
+ const char = content.charCodeAt(i);
396
+ hash = ((hash << 5) - hash) + char;
397
+ hash = hash & hash;
398
+ }
399
+ return hash.toString(16);
400
+ }
401
+ }
402
+ // =============================================================================
403
+ // FACTORY FUNCTION
404
+ // =============================================================================
405
+ /**
406
+ * Create a new cache boundary tracker.
407
+ */
408
+ export function createCacheBoundaryTracker() {
409
+ return new CacheBoundaryTracker();
410
+ }
411
+ //# sourceMappingURL=cache-boundary-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-boundary-tracker.js","sourceRoot":"","sources":["../../../src/tracing/cache-boundary-tracker.ts"],"names":[],"mappings":"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"}