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,236 @@
1
+ /**
2
+ * Bounded async queue for operations from UI to Agent.
3
+ * Implements backpressure - when full, producers wait until space is available.
4
+ */
5
+ import { AtomicCounter } from './atomic-counter.js';
6
+ /**
7
+ * Error thrown when a queue operation times out.
8
+ */
9
+ export class QueueTimeoutError extends Error {
10
+ constructor(message = 'Queue operation timed out') {
11
+ super(message);
12
+ this.name = 'QueueTimeoutError';
13
+ }
14
+ }
15
+ /**
16
+ * Error thrown when attempting to operate on a closed queue.
17
+ */
18
+ export class QueueClosedError extends Error {
19
+ constructor(message = 'Queue is closed') {
20
+ super(message);
21
+ this.name = 'QueueClosedError';
22
+ }
23
+ }
24
+ /**
25
+ * A bounded async queue for operations from UI to Agent.
26
+ *
27
+ * Features:
28
+ * - Bounded capacity with backpressure (producers wait when full)
29
+ * - Async iterator support for consumption
30
+ * - Graceful shutdown via close()
31
+ * - Timeout handling for blocked producers
32
+ */
33
+ export class SubmissionQueue {
34
+ maxSize;
35
+ timeout;
36
+ counter;
37
+ queue = [];
38
+ producerWaiters = [];
39
+ consumerWaiters = [];
40
+ closed = false;
41
+ /**
42
+ * Creates a new SubmissionQueue.
43
+ * @param config - Optional configuration
44
+ */
45
+ constructor(config) {
46
+ this.maxSize = config?.maxSize ?? 64;
47
+ this.timeout = config?.timeout ?? 30000;
48
+ this.counter = new AtomicCounter();
49
+ }
50
+ /**
51
+ * Submits an operation to the queue.
52
+ * Blocks if the queue is full (backpressure).
53
+ *
54
+ * @param op - The operation to submit
55
+ * @param correlationId - Optional correlation ID for request/response tracking
56
+ * @returns The submission ID
57
+ * @throws QueueClosedError if the queue is closed
58
+ * @throws QueueTimeoutError if waiting for space times out
59
+ */
60
+ async submit(op, correlationId) {
61
+ if (this.closed) {
62
+ throw new QueueClosedError('Cannot submit to a closed queue');
63
+ }
64
+ // Wait for space if queue is full
65
+ if (this.queue.length >= this.maxSize) {
66
+ await this.waitForSpace();
67
+ }
68
+ // Re-check closed status after waiting
69
+ if (this.closed) {
70
+ throw new QueueClosedError('Queue closed while waiting for space');
71
+ }
72
+ const id = this.counter.next();
73
+ const submission = {
74
+ id,
75
+ op,
76
+ timestamp: Date.now(),
77
+ ...(correlationId !== undefined && { correlationId }),
78
+ };
79
+ this.queue.push(submission);
80
+ // Wake up a waiting consumer if any
81
+ this.wakeConsumer(submission);
82
+ return id;
83
+ }
84
+ /**
85
+ * Takes the next submission from the queue.
86
+ * Blocks if the queue is empty.
87
+ *
88
+ * @returns The next submission, or null if the queue is closed and empty
89
+ */
90
+ async take() {
91
+ // Return immediately if there's an item
92
+ if (this.queue.length > 0) {
93
+ const submission = this.queue.shift();
94
+ this.wakeProducer();
95
+ return submission;
96
+ }
97
+ // If closed and empty, return null
98
+ if (this.closed) {
99
+ return null;
100
+ }
101
+ // Wait for an item
102
+ return new Promise((resolve, reject) => {
103
+ this.consumerWaiters.push({ resolve, reject });
104
+ });
105
+ }
106
+ /**
107
+ * Non-blocking version of take().
108
+ * @returns The next submission, or null if the queue is empty
109
+ */
110
+ tryTake() {
111
+ if (this.queue.length === 0) {
112
+ return null;
113
+ }
114
+ const submission = this.queue.shift();
115
+ this.wakeProducer();
116
+ return submission;
117
+ }
118
+ /**
119
+ * Returns the current queue size.
120
+ */
121
+ size() {
122
+ return this.queue.length;
123
+ }
124
+ /**
125
+ * Returns true if the queue is empty.
126
+ */
127
+ isEmpty() {
128
+ return this.queue.length === 0;
129
+ }
130
+ /**
131
+ * Returns true if the queue is full.
132
+ */
133
+ isFull() {
134
+ return this.queue.length >= this.maxSize;
135
+ }
136
+ /**
137
+ * Returns true if the queue is closed.
138
+ */
139
+ isClosed() {
140
+ return this.closed;
141
+ }
142
+ /**
143
+ * Closes the queue.
144
+ * - Rejects all pending producer waiters
145
+ * - Resolves all pending consumer waiters with null
146
+ * - No more submissions are accepted
147
+ */
148
+ close() {
149
+ if (this.closed) {
150
+ return;
151
+ }
152
+ this.closed = true;
153
+ // Reject all waiting producers
154
+ const closedError = new QueueClosedError('Queue was closed');
155
+ for (const waiter of this.producerWaiters) {
156
+ waiter.reject(closedError);
157
+ }
158
+ this.producerWaiters.length = 0;
159
+ // Resolve all waiting consumers with null
160
+ for (const waiter of this.consumerWaiters) {
161
+ waiter.resolve(null);
162
+ }
163
+ this.consumerWaiters.length = 0;
164
+ }
165
+ /**
166
+ * Async iterator for consuming submissions.
167
+ * Yields submissions until the queue is closed and empty.
168
+ */
169
+ async *[Symbol.asyncIterator]() {
170
+ while (true) {
171
+ const submission = await this.take();
172
+ if (submission === null) {
173
+ return;
174
+ }
175
+ yield submission;
176
+ }
177
+ }
178
+ /**
179
+ * Waits for space to become available in the queue.
180
+ * @throws QueueTimeoutError if waiting times out
181
+ * @throws QueueClosedError if queue is closed while waiting
182
+ */
183
+ waitForSpace() {
184
+ return new Promise((resolve, reject) => {
185
+ const waiter = { resolve, reject };
186
+ // Set up timeout
187
+ const timeoutId = setTimeout(() => {
188
+ const index = this.producerWaiters.indexOf(waiter);
189
+ if (index !== -1) {
190
+ this.producerWaiters.splice(index, 1);
191
+ reject(new QueueTimeoutError(`Timed out waiting for space after ${this.timeout}ms`));
192
+ }
193
+ }, this.timeout);
194
+ // Wrap resolve to clear timeout
195
+ const originalResolve = waiter.resolve;
196
+ waiter.resolve = (value) => {
197
+ clearTimeout(timeoutId);
198
+ originalResolve(value);
199
+ };
200
+ // Wrap reject to clear timeout
201
+ const originalReject = waiter.reject;
202
+ waiter.reject = (error) => {
203
+ clearTimeout(timeoutId);
204
+ originalReject(error);
205
+ };
206
+ this.producerWaiters.push(waiter);
207
+ });
208
+ }
209
+ /**
210
+ * Wakes a waiting producer (called when space becomes available).
211
+ */
212
+ wakeProducer() {
213
+ const waiter = this.producerWaiters.shift();
214
+ if (waiter) {
215
+ waiter.resolve();
216
+ }
217
+ }
218
+ /**
219
+ * Wakes a waiting consumer with a submission.
220
+ * If no consumers are waiting, the submission is already in the queue.
221
+ */
222
+ wakeConsumer(submission) {
223
+ const waiter = this.consumerWaiters.shift();
224
+ if (waiter) {
225
+ // Remove from queue since we're giving it directly to consumer
226
+ const index = this.queue.indexOf(submission);
227
+ if (index !== -1) {
228
+ this.queue.splice(index, 1);
229
+ }
230
+ waiter.resolve(submission);
231
+ // Wake a producer since we freed a slot
232
+ this.wakeProducer();
233
+ }
234
+ }
235
+ }
236
+ //# sourceMappingURL=submission-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submission-queue.js","sourceRoot":"","sources":["../../../../src/core/queues/submission-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAoBpD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,UAAkB,2BAA2B;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,UAAkB,iBAAiB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IACT,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,OAAO,CAAgB;IACvB,KAAK,GAAiB,EAAE,CAAC;IACzB,eAAe,GAAmB,EAAE,CAAC;IACrC,eAAe,GAAgC,EAAE,CAAC;IAC3D,MAAM,GAAG,KAAK,CAAC;IAEvB;;;OAGG;IACH,YAAY,MAA8B;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,EAAa,EAAE,aAAsB;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;QAChE,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAe;YAC7B,EAAE;YACF,EAAE;YACF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;SACtD,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5B,oCAAoC;QACpC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAE9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI;QACR,wCAAwC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;QACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAC7D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhC,0CAA0C;QAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,MAAM,UAAU,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,YAAY;QAClB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAEjD,iBAAiB;YACjB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACtC,MAAM,CAAC,IAAI,iBAAiB,CAAC,qCAAqC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjB,gCAAgC;YAChC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;YACvC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAW,EAAE,EAAE;gBAC/B,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC;YAEF,+BAA+B;YAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC/B,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,UAAsB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,+DAA+D;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3B,wCAAwC;YACxC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cost tracking and model registry module.
3
+ * Provides model configuration, pricing, and cost calculation utilities.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { modelRegistry, type UsageRecord } from './costs/index.js';
8
+ *
9
+ * const usage: UsageRecord = {
10
+ * modelId: 'claude-3-5-sonnet-20241022',
11
+ * promptTokens: 1000,
12
+ * completionTokens: 500,
13
+ * cacheReadTokens: 200,
14
+ * };
15
+ *
16
+ * const cost = modelRegistry.calculateCost(usage);
17
+ * console.log(cost.formatted); // '$0.0195'
18
+ * ```
19
+ */
20
+ export * from './types.js';
21
+ export * from './model-registry.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/costs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cost tracking and model registry module.
3
+ * Provides model configuration, pricing, and cost calculation utilities.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * import { modelRegistry, type UsageRecord } from './costs/index.js';
8
+ *
9
+ * const usage: UsageRecord = {
10
+ * modelId: 'claude-3-5-sonnet-20241022',
11
+ * promptTokens: 1000,
12
+ * completionTokens: 500,
13
+ * cacheReadTokens: 200,
14
+ * };
15
+ *
16
+ * const cost = modelRegistry.calculateCost(usage);
17
+ * console.log(cost.formatted); // '$0.0195'
18
+ * ```
19
+ */
20
+ export * from './types.js';
21
+ export * from './model-registry.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/costs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { ModelConfig, UsageRecord, CostBreakdown } from './types.js';
2
+ /**
3
+ * Registry for model configurations with caching and cost calculation.
4
+ * Provides a centralized way to manage model metadata and pricing.
5
+ */
6
+ export declare class ModelRegistry {
7
+ private models;
8
+ private cacheTimestamp;
9
+ private readonly cacheDurationMs;
10
+ /**
11
+ * Creates a new ModelRegistry instance.
12
+ * @param cacheDurationMs - How long to cache model configs (default: 24 hours)
13
+ */
14
+ constructor(cacheDurationMs?: number);
15
+ /**
16
+ * Loads default model configurations into the registry.
17
+ */
18
+ private loadDefaults;
19
+ /**
20
+ * Gets a model configuration by ID.
21
+ * @param modelId - The unique model identifier
22
+ * @returns The model config or undefined if not found
23
+ */
24
+ getModel(modelId: string): ModelConfig | undefined;
25
+ /**
26
+ * Gets all registered models.
27
+ * @returns Array of all model configurations
28
+ */
29
+ getAllModels(): ModelConfig[];
30
+ /**
31
+ * Gets models filtered by provider.
32
+ * @param provider - The provider name to filter by
33
+ * @returns Array of models from the specified provider
34
+ */
35
+ getModelsByProvider(provider: string): ModelConfig[];
36
+ /**
37
+ * Adds or updates a model configuration.
38
+ * @param config - The model configuration to set
39
+ */
40
+ setModel(config: ModelConfig): void;
41
+ /**
42
+ * Calculates cost breakdown for a usage record.
43
+ * Uses default pricing if model is not found in registry.
44
+ * @param usage - The usage record with token counts
45
+ * @returns Cost breakdown with prompt, completion, cache, and total costs
46
+ */
47
+ calculateCost(usage: UsageRecord): CostBreakdown;
48
+ /**
49
+ * Checks if the cache needs to be refreshed based on cache duration.
50
+ * @returns True if cache is stale and needs refresh
51
+ */
52
+ needsRefresh(): boolean;
53
+ /**
54
+ * Refreshes the cache timestamp.
55
+ * In future, this could fetch updated pricing from an API.
56
+ */
57
+ refreshCache(): void;
58
+ /**
59
+ * Exports the current cache state for persistence.
60
+ * @returns Object containing models array and timestamp
61
+ */
62
+ exportCache(): {
63
+ models: ModelConfig[];
64
+ timestamp: number;
65
+ };
66
+ /**
67
+ * Imports a previously exported cache.
68
+ * @param cache - The cache object to import
69
+ */
70
+ importCache(cache: {
71
+ models: ModelConfig[];
72
+ timestamp: number;
73
+ }): void;
74
+ }
75
+ /**
76
+ * Singleton instance of ModelRegistry for global access.
77
+ * Use this for shared model configuration across the application.
78
+ */
79
+ export declare const modelRegistry: ModelRegistry;
80
+ //# sourceMappingURL=model-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../../src/costs/model-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8G1E;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC;;;OAGG;gBACS,eAAe,GAAE,MAA4B;IAKzD;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIlD;;;OAGG;IACH,YAAY,IAAI,WAAW,EAAE;IAI7B;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAIpD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAInC;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa;IA+BhD;;;OAGG;IACH,YAAY,IAAI,OAAO;IAIvB;;;OAGG;IACH,YAAY,IAAI,IAAI;IAMpB;;;OAGG;IACH,WAAW,IAAI;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAO3D;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAOvE;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Default model configurations with current pricing (2024/2025).
3
+ * Pricing sourced from official provider documentation.
4
+ */
5
+ const DEFAULT_MODELS = [
6
+ // Claude models (Anthropic)
7
+ {
8
+ modelId: 'claude-3-5-sonnet-20241022',
9
+ provider: 'anthropic',
10
+ displayName: 'Claude 3.5 Sonnet',
11
+ pricing: {
12
+ promptPerMillion: 3.0,
13
+ completionPerMillion: 15.0,
14
+ cacheReadPerMillion: 0.30,
15
+ cacheWritePerMillion: 3.75,
16
+ },
17
+ capabilities: {
18
+ maxContextTokens: 200000,
19
+ maxOutputTokens: 8192,
20
+ supportsVision: true,
21
+ supportsTools: true,
22
+ supportsCaching: true,
23
+ },
24
+ },
25
+ {
26
+ modelId: 'claude-3-5-haiku-20241022',
27
+ provider: 'anthropic',
28
+ displayName: 'Claude 3.5 Haiku',
29
+ pricing: {
30
+ promptPerMillion: 0.80,
31
+ completionPerMillion: 4.0,
32
+ cacheReadPerMillion: 0.08,
33
+ cacheWritePerMillion: 1.0,
34
+ },
35
+ capabilities: {
36
+ maxContextTokens: 200000,
37
+ maxOutputTokens: 8192,
38
+ supportsVision: true,
39
+ supportsTools: true,
40
+ supportsCaching: true,
41
+ },
42
+ },
43
+ {
44
+ modelId: 'claude-3-opus-20240229',
45
+ provider: 'anthropic',
46
+ displayName: 'Claude 3 Opus',
47
+ pricing: {
48
+ promptPerMillion: 15.0,
49
+ completionPerMillion: 75.0,
50
+ cacheReadPerMillion: 1.50,
51
+ cacheWritePerMillion: 18.75,
52
+ },
53
+ capabilities: {
54
+ maxContextTokens: 200000,
55
+ maxOutputTokens: 4096,
56
+ supportsVision: true,
57
+ supportsTools: true,
58
+ supportsCaching: true,
59
+ },
60
+ },
61
+ // GPT-4o models (OpenAI)
62
+ {
63
+ modelId: 'gpt-4o',
64
+ provider: 'openai',
65
+ displayName: 'GPT-4o',
66
+ pricing: {
67
+ promptPerMillion: 2.50,
68
+ completionPerMillion: 10.0,
69
+ },
70
+ capabilities: {
71
+ maxContextTokens: 128000,
72
+ maxOutputTokens: 16384,
73
+ supportsVision: true,
74
+ supportsTools: true,
75
+ },
76
+ },
77
+ {
78
+ modelId: 'gpt-4o-mini',
79
+ provider: 'openai',
80
+ displayName: 'GPT-4o Mini',
81
+ pricing: {
82
+ promptPerMillion: 0.15,
83
+ completionPerMillion: 0.60,
84
+ },
85
+ capabilities: {
86
+ maxContextTokens: 128000,
87
+ maxOutputTokens: 16384,
88
+ supportsVision: true,
89
+ supportsTools: true,
90
+ },
91
+ },
92
+ {
93
+ modelId: 'gpt-4-turbo',
94
+ provider: 'openai',
95
+ displayName: 'GPT-4 Turbo',
96
+ pricing: {
97
+ promptPerMillion: 10.0,
98
+ completionPerMillion: 30.0,
99
+ },
100
+ capabilities: {
101
+ maxContextTokens: 128000,
102
+ maxOutputTokens: 4096,
103
+ supportsVision: true,
104
+ supportsTools: true,
105
+ },
106
+ },
107
+ ];
108
+ /**
109
+ * Registry for model configurations with caching and cost calculation.
110
+ * Provides a centralized way to manage model metadata and pricing.
111
+ */
112
+ export class ModelRegistry {
113
+ models = new Map();
114
+ cacheTimestamp = 0;
115
+ cacheDurationMs;
116
+ /**
117
+ * Creates a new ModelRegistry instance.
118
+ * @param cacheDurationMs - How long to cache model configs (default: 24 hours)
119
+ */
120
+ constructor(cacheDurationMs = 24 * 60 * 60 * 1000) {
121
+ this.cacheDurationMs = cacheDurationMs;
122
+ this.loadDefaults();
123
+ }
124
+ /**
125
+ * Loads default model configurations into the registry.
126
+ */
127
+ loadDefaults() {
128
+ for (const model of DEFAULT_MODELS) {
129
+ this.models.set(model.modelId, model);
130
+ }
131
+ this.cacheTimestamp = Date.now();
132
+ }
133
+ /**
134
+ * Gets a model configuration by ID.
135
+ * @param modelId - The unique model identifier
136
+ * @returns The model config or undefined if not found
137
+ */
138
+ getModel(modelId) {
139
+ return this.models.get(modelId);
140
+ }
141
+ /**
142
+ * Gets all registered models.
143
+ * @returns Array of all model configurations
144
+ */
145
+ getAllModels() {
146
+ return Array.from(this.models.values());
147
+ }
148
+ /**
149
+ * Gets models filtered by provider.
150
+ * @param provider - The provider name to filter by
151
+ * @returns Array of models from the specified provider
152
+ */
153
+ getModelsByProvider(provider) {
154
+ return this.getAllModels().filter(m => m.provider === provider);
155
+ }
156
+ /**
157
+ * Adds or updates a model configuration.
158
+ * @param config - The model configuration to set
159
+ */
160
+ setModel(config) {
161
+ this.models.set(config.modelId, config);
162
+ }
163
+ /**
164
+ * Calculates cost breakdown for a usage record.
165
+ * Uses default pricing if model is not found in registry.
166
+ * @param usage - The usage record with token counts
167
+ * @returns Cost breakdown with prompt, completion, cache, and total costs
168
+ */
169
+ calculateCost(usage) {
170
+ const model = this.getModel(usage.modelId);
171
+ // Default pricing if model not found (Claude 3.5 Sonnet pricing as fallback)
172
+ const pricing = model?.pricing ?? {
173
+ promptPerMillion: 3.0,
174
+ completionPerMillion: 15.0,
175
+ };
176
+ const promptCost = (usage.promptTokens / 1_000_000) * pricing.promptPerMillion;
177
+ const completionCost = (usage.completionTokens / 1_000_000) * pricing.completionPerMillion;
178
+ let cacheCost = 0;
179
+ if (usage.cacheReadTokens && pricing.cacheReadPerMillion) {
180
+ cacheCost += (usage.cacheReadTokens / 1_000_000) * pricing.cacheReadPerMillion;
181
+ }
182
+ if (usage.cacheWriteTokens && pricing.cacheWritePerMillion) {
183
+ cacheCost += (usage.cacheWriteTokens / 1_000_000) * pricing.cacheWritePerMillion;
184
+ }
185
+ const totalCost = promptCost + completionCost + cacheCost;
186
+ return {
187
+ promptCost,
188
+ completionCost,
189
+ cacheCost,
190
+ totalCost,
191
+ formatted: `$${totalCost.toFixed(4)}`,
192
+ };
193
+ }
194
+ /**
195
+ * Checks if the cache needs to be refreshed based on cache duration.
196
+ * @returns True if cache is stale and needs refresh
197
+ */
198
+ needsRefresh() {
199
+ return Date.now() - this.cacheTimestamp > this.cacheDurationMs;
200
+ }
201
+ /**
202
+ * Refreshes the cache timestamp.
203
+ * In future, this could fetch updated pricing from an API.
204
+ */
205
+ refreshCache() {
206
+ // In future, this could fetch from an API
207
+ // For now, just reset the timestamp
208
+ this.cacheTimestamp = Date.now();
209
+ }
210
+ /**
211
+ * Exports the current cache state for persistence.
212
+ * @returns Object containing models array and timestamp
213
+ */
214
+ exportCache() {
215
+ return {
216
+ models: this.getAllModels(),
217
+ timestamp: this.cacheTimestamp,
218
+ };
219
+ }
220
+ /**
221
+ * Imports a previously exported cache.
222
+ * @param cache - The cache object to import
223
+ */
224
+ importCache(cache) {
225
+ this.models.clear();
226
+ for (const model of cache.models) {
227
+ this.models.set(model.modelId, model);
228
+ }
229
+ this.cacheTimestamp = cache.timestamp;
230
+ }
231
+ }
232
+ /**
233
+ * Singleton instance of ModelRegistry for global access.
234
+ * Use this for shared model configuration across the application.
235
+ */
236
+ export const modelRegistry = new ModelRegistry();
237
+ //# sourceMappingURL=model-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../../src/costs/model-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Model configuration with pricing information.
3
+ */
4
+ export interface ModelConfig {
5
+ /** Unique model identifier (e.g., 'claude-3-5-sonnet-20241022') */
6
+ modelId: string;
7
+ /** Provider name (e.g., 'anthropic', 'openai', 'openrouter') */
8
+ provider: 'anthropic' | 'openai' | 'openrouter' | string;
9
+ /** Human-readable display name */
10
+ displayName: string;
11
+ /** Pricing per million tokens */
12
+ pricing: {
13
+ promptPerMillion: number;
14
+ completionPerMillion: number;
15
+ /** Cache read pricing (if supported) */
16
+ cacheReadPerMillion?: number;
17
+ /** Cache write pricing (if supported) */
18
+ cacheWritePerMillion?: number;
19
+ };
20
+ /** Model capabilities */
21
+ capabilities: {
22
+ maxContextTokens: number;
23
+ maxOutputTokens: number;
24
+ supportsVision?: boolean;
25
+ supportsTools?: boolean;
26
+ supportsCaching?: boolean;
27
+ };
28
+ }
29
+ /**
30
+ * Usage record for cost calculation.
31
+ */
32
+ export interface UsageRecord {
33
+ modelId: string;
34
+ promptTokens: number;
35
+ completionTokens: number;
36
+ cacheReadTokens?: number;
37
+ cacheWriteTokens?: number;
38
+ }
39
+ /**
40
+ * Calculated cost breakdown.
41
+ */
42
+ export interface CostBreakdown {
43
+ promptCost: number;
44
+ completionCost: number;
45
+ cacheCost: number;
46
+ totalCost: number;
47
+ /** Cost formatted as string (e.g., '$0.0123') */
48
+ formatted: string;
49
+ }
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/costs/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;IACzD,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,wCAAwC;QACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,yCAAyC;QACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,yBAAyB;IACzB,YAAY,EAAE;QACZ,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB"}