codecane 1.0.394 → 1.0.396

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 (571) hide show
  1. package/package.json +21 -70
  2. package/scripts/codebuff-wrapper.js +39 -0
  3. package/scripts/install.js +104 -0
  4. package/dist/__tests__/display.test.d.ts +0 -1
  5. package/dist/__tests__/display.test.js +0 -174
  6. package/dist/__tests__/display.test.js.map +0 -1
  7. package/dist/background-process-manager.d.ts +0 -50
  8. package/dist/background-process-manager.js +0 -364
  9. package/dist/background-process-manager.js.map +0 -1
  10. package/dist/browser-runner.d.ts +0 -35
  11. package/dist/browser-runner.js +0 -689
  12. package/dist/browser-runner.js.map +0 -1
  13. package/dist/chat-storage.d.ts +0 -2
  14. package/dist/chat-storage.js +0 -98
  15. package/dist/chat-storage.js.map +0 -1
  16. package/dist/checkpoints/checkpoint-manager.d.ts +0 -94
  17. package/dist/checkpoints/checkpoint-manager.js +0 -291
  18. package/dist/checkpoints/checkpoint-manager.js.map +0 -1
  19. package/dist/checkpoints/file-manager.d.ts +0 -72
  20. package/dist/checkpoints/file-manager.js +0 -443
  21. package/dist/checkpoints/file-manager.js.map +0 -1
  22. package/dist/cli-definitions.d.ts +0 -9
  23. package/dist/cli-definitions.js +0 -66
  24. package/dist/cli-definitions.js.map +0 -1
  25. package/dist/cli-handlers/api-key.d.ts +0 -25
  26. package/dist/cli-handlers/api-key.js +0 -66
  27. package/dist/cli-handlers/api-key.js.map +0 -1
  28. package/dist/cli-handlers/checkpoint.d.ts +0 -19
  29. package/dist/cli-handlers/checkpoint.js +0 -221
  30. package/dist/cli-handlers/checkpoint.js.map +0 -1
  31. package/dist/cli-handlers/diff.d.ts +0 -2
  32. package/dist/cli-handlers/diff.js +0 -31
  33. package/dist/cli-handlers/diff.js.map +0 -1
  34. package/dist/cli-handlers/easter-egg.d.ts +0 -1
  35. package/dist/cli-handlers/easter-egg.js +0 -126
  36. package/dist/cli-handlers/easter-egg.js.map +0 -1
  37. package/dist/cli-handlers/inititalization-flow.d.ts +0 -1
  38. package/dist/cli-handlers/inititalization-flow.js +0 -25
  39. package/dist/cli-handlers/inititalization-flow.js.map +0 -1
  40. package/dist/cli.d.ts +0 -68
  41. package/dist/cli.js +0 -777
  42. package/dist/cli.js.map +0 -1
  43. package/dist/client.d.ts +0 -91
  44. package/dist/client.js +0 -1325
  45. package/dist/client.js.map +0 -1
  46. package/dist/code-map/languages.d.ts +0 -12
  47. package/dist/code-map/languages.d.ts.map +0 -1
  48. package/dist/code-map/languages.js +0 -130
  49. package/dist/code-map/languages.js.map +0 -1
  50. package/dist/code-map/parse.d.ts +0 -22
  51. package/dist/code-map/parse.d.ts.map +0 -1
  52. package/dist/code-map/parse.js +0 -180
  53. package/dist/code-map/parse.js.map +0 -1
  54. package/dist/code-map/test-langs/test.d.ts +0 -12
  55. package/dist/code-map/test-langs/test.d.ts.map +0 -1
  56. package/dist/code-map/test-langs/test.js +0 -23
  57. package/dist/code-map/test-langs/test.js.map +0 -1
  58. package/dist/code-map/tree-sitter-queries/readme.md +0 -23
  59. package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +0 -16
  60. package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +0 -23
  61. package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +0 -29
  62. package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +0 -26
  63. package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +0 -19
  64. package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +0 -16
  65. package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +0 -23
  66. package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +0 -12
  67. package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +0 -58
  68. package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +0 -26
  69. package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +0 -22
  70. package/dist/code-map/tsconfig.tsbuildinfo +0 -1
  71. package/dist/common/actions.d.ts +0 -2673
  72. package/dist/common/actions.d.ts.map +0 -1
  73. package/dist/common/actions.js +0 -167
  74. package/dist/common/actions.js.map +0 -1
  75. package/dist/common/analytics.d.ts +0 -6
  76. package/dist/common/analytics.d.ts.map +0 -1
  77. package/dist/common/analytics.js +0 -60
  78. package/dist/common/analytics.js.map +0 -1
  79. package/dist/common/api-keys/constants.d.ts +0 -9
  80. package/dist/common/api-keys/constants.d.ts.map +0 -1
  81. package/dist/common/api-keys/constants.js +0 -26
  82. package/dist/common/api-keys/constants.js.map +0 -1
  83. package/dist/common/api-keys/crypto.d.ts +0 -25
  84. package/dist/common/api-keys/crypto.d.ts.map +0 -1
  85. package/dist/common/api-keys/crypto.js +0 -186
  86. package/dist/common/api-keys/crypto.js.map +0 -1
  87. package/dist/common/browser-actions.d.ts +0 -4416
  88. package/dist/common/browser-actions.d.ts.map +0 -1
  89. package/dist/common/browser-actions.js +0 -343
  90. package/dist/common/browser-actions.js.map +0 -1
  91. package/dist/common/constants/analytics-events.d.ts +0 -29
  92. package/dist/common/constants/analytics-events.d.ts.map +0 -1
  93. package/dist/common/constants/analytics-events.js +0 -37
  94. package/dist/common/constants/analytics-events.js.map +0 -1
  95. package/dist/common/constants/grant-priorities.d.ts +0 -3
  96. package/dist/common/constants/grant-priorities.d.ts.map +0 -1
  97. package/dist/common/constants/grant-priorities.js +0 -11
  98. package/dist/common/constants/grant-priorities.js.map +0 -1
  99. package/dist/common/constants/tools.d.ts +0 -21
  100. package/dist/common/constants/tools.d.ts.map +0 -1
  101. package/dist/common/constants/tools.js +0 -48
  102. package/dist/common/constants/tools.js.map +0 -1
  103. package/dist/common/constants.d.ts +0 -149
  104. package/dist/common/constants.d.ts.map +0 -1
  105. package/dist/common/constants.js +0 -234
  106. package/dist/common/constants.js.map +0 -1
  107. package/dist/common/db/drizzle.config.d.ts +0 -3
  108. package/dist/common/db/drizzle.config.d.ts.map +0 -1
  109. package/dist/common/db/drizzle.config.js +0 -17
  110. package/dist/common/db/drizzle.config.js.map +0 -1
  111. package/dist/common/db/env.d.mts +0 -4
  112. package/dist/common/db/env.mjs +0 -26
  113. package/dist/common/db/env.mjs.map +0 -1
  114. package/dist/common/db/index.d.ts +0 -7
  115. package/dist/common/db/index.d.ts.map +0 -1
  116. package/dist/common/db/index.js +0 -35
  117. package/dist/common/db/index.js.map +0 -1
  118. package/dist/common/db/schema.d.ts +0 -2449
  119. package/dist/common/db/schema.d.ts.map +0 -1
  120. package/dist/common/db/schema.js +0 -310
  121. package/dist/common/db/schema.js.map +0 -1
  122. package/dist/common/db/transaction.d.ts +0 -13
  123. package/dist/common/db/transaction.d.ts.map +0 -1
  124. package/dist/common/db/transaction.js +0 -36
  125. package/dist/common/db/transaction.js.map +0 -1
  126. package/dist/common/env.d.mts +0 -13
  127. package/dist/common/env.mjs +0 -43
  128. package/dist/common/env.mjs.map +0 -1
  129. package/dist/common/json-config/__tests__/constants.test.d.ts +0 -2
  130. package/dist/common/json-config/__tests__/constants.test.d.ts.map +0 -1
  131. package/dist/common/json-config/__tests__/constants.test.js +0 -273
  132. package/dist/common/json-config/__tests__/constants.test.js.map +0 -1
  133. package/dist/common/json-config/__tests__/stringify-schema.test.d.ts +0 -2
  134. package/dist/common/json-config/__tests__/stringify-schema.test.d.ts.map +0 -1
  135. package/dist/common/json-config/__tests__/stringify-schema.test.js +0 -66
  136. package/dist/common/json-config/__tests__/stringify-schema.test.js.map +0 -1
  137. package/dist/common/json-config/constants.d.ts +0 -138
  138. package/dist/common/json-config/constants.d.ts.map +0 -1
  139. package/dist/common/json-config/constants.js +0 -78
  140. package/dist/common/json-config/constants.js.map +0 -1
  141. package/dist/common/json-config/stringify-schema.d.ts +0 -10
  142. package/dist/common/json-config/stringify-schema.d.ts.map +0 -1
  143. package/dist/common/json-config/stringify-schema.js +0 -131
  144. package/dist/common/json-config/stringify-schema.js.map +0 -1
  145. package/dist/common/project-file-tree.d.ts +0 -12
  146. package/dist/common/project-file-tree.d.ts.map +0 -1
  147. package/dist/common/project-file-tree.js +0 -212
  148. package/dist/common/project-file-tree.js.map +0 -1
  149. package/dist/common/src/actions.d.ts +0 -2673
  150. package/dist/common/src/actions.d.ts.map +0 -1
  151. package/dist/common/src/actions.js +0 -167
  152. package/dist/common/src/actions.js.map +0 -1
  153. package/dist/common/src/analytics.d.ts +0 -6
  154. package/dist/common/src/analytics.d.ts.map +0 -1
  155. package/dist/common/src/analytics.js +0 -60
  156. package/dist/common/src/analytics.js.map +0 -1
  157. package/dist/common/src/api-keys/constants.d.ts +0 -9
  158. package/dist/common/src/api-keys/constants.d.ts.map +0 -1
  159. package/dist/common/src/api-keys/constants.js +0 -26
  160. package/dist/common/src/api-keys/constants.js.map +0 -1
  161. package/dist/common/src/api-keys/crypto.d.ts +0 -25
  162. package/dist/common/src/api-keys/crypto.d.ts.map +0 -1
  163. package/dist/common/src/api-keys/crypto.js +0 -186
  164. package/dist/common/src/api-keys/crypto.js.map +0 -1
  165. package/dist/common/src/browser-actions.d.ts +0 -4416
  166. package/dist/common/src/browser-actions.d.ts.map +0 -1
  167. package/dist/common/src/browser-actions.js +0 -343
  168. package/dist/common/src/browser-actions.js.map +0 -1
  169. package/dist/common/src/constants/analytics-events.d.ts +0 -28
  170. package/dist/common/src/constants/analytics-events.d.ts.map +0 -1
  171. package/dist/common/src/constants/analytics-events.js +0 -36
  172. package/dist/common/src/constants/analytics-events.js.map +0 -1
  173. package/dist/common/src/constants/grant-priorities.d.ts +0 -3
  174. package/dist/common/src/constants/grant-priorities.d.ts.map +0 -1
  175. package/dist/common/src/constants/grant-priorities.js +0 -11
  176. package/dist/common/src/constants/grant-priorities.js.map +0 -1
  177. package/dist/common/src/constants/tools.d.ts +0 -20
  178. package/dist/common/src/constants/tools.d.ts.map +0 -1
  179. package/dist/common/src/constants/tools.js +0 -47
  180. package/dist/common/src/constants/tools.js.map +0 -1
  181. package/dist/common/src/constants.d.ts +0 -152
  182. package/dist/common/src/constants.d.ts.map +0 -1
  183. package/dist/common/src/constants.js +0 -222
  184. package/dist/common/src/constants.js.map +0 -1
  185. package/dist/common/src/db/drizzle.config.d.ts +0 -3
  186. package/dist/common/src/db/drizzle.config.d.ts.map +0 -1
  187. package/dist/common/src/db/drizzle.config.js +0 -17
  188. package/dist/common/src/db/drizzle.config.js.map +0 -1
  189. package/dist/common/src/db/index.d.ts +0 -7
  190. package/dist/common/src/db/index.d.ts.map +0 -1
  191. package/dist/common/src/db/index.js +0 -35
  192. package/dist/common/src/db/index.js.map +0 -1
  193. package/dist/common/src/db/schema.d.ts +0 -2289
  194. package/dist/common/src/db/schema.d.ts.map +0 -1
  195. package/dist/common/src/db/schema.js +0 -296
  196. package/dist/common/src/db/schema.js.map +0 -1
  197. package/dist/common/src/db/transaction.d.ts +0 -13
  198. package/dist/common/src/db/transaction.d.ts.map +0 -1
  199. package/dist/common/src/db/transaction.js +0 -36
  200. package/dist/common/src/db/transaction.js.map +0 -1
  201. package/dist/common/src/json-config/__tests__/constants.test.d.ts +0 -2
  202. package/dist/common/src/json-config/__tests__/constants.test.d.ts.map +0 -1
  203. package/dist/common/src/json-config/__tests__/constants.test.js +0 -273
  204. package/dist/common/src/json-config/__tests__/constants.test.js.map +0 -1
  205. package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts +0 -2
  206. package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts.map +0 -1
  207. package/dist/common/src/json-config/__tests__/stringify-schema.test.js +0 -66
  208. package/dist/common/src/json-config/__tests__/stringify-schema.test.js.map +0 -1
  209. package/dist/common/src/json-config/constants.d.ts +0 -138
  210. package/dist/common/src/json-config/constants.d.ts.map +0 -1
  211. package/dist/common/src/json-config/constants.js +0 -78
  212. package/dist/common/src/json-config/constants.js.map +0 -1
  213. package/dist/common/src/json-config/stringify-schema.d.ts +0 -10
  214. package/dist/common/src/json-config/stringify-schema.d.ts.map +0 -1
  215. package/dist/common/src/json-config/stringify-schema.js +0 -131
  216. package/dist/common/src/json-config/stringify-schema.js.map +0 -1
  217. package/dist/common/src/project-file-tree.d.ts +0 -12
  218. package/dist/common/src/project-file-tree.d.ts.map +0 -1
  219. package/dist/common/src/project-file-tree.js +0 -212
  220. package/dist/common/src/project-file-tree.js.map +0 -1
  221. package/dist/common/src/types/agent-state.d.ts +0 -227
  222. package/dist/common/src/types/agent-state.d.ts.map +0 -1
  223. package/dist/common/src/types/agent-state.js +0 -34
  224. package/dist/common/src/types/agent-state.js.map +0 -1
  225. package/dist/common/src/types/grant.d.ts +0 -3
  226. package/dist/common/src/types/grant.d.ts.map +0 -1
  227. package/dist/common/src/types/grant.js +0 -11
  228. package/dist/common/src/types/grant.js.map +0 -1
  229. package/dist/common/src/types/message.d.ts +0 -320
  230. package/dist/common/src/types/message.d.ts.map +0 -1
  231. package/dist/common/src/types/message.js +0 -60
  232. package/dist/common/src/types/message.js.map +0 -1
  233. package/dist/common/src/types/organization.d.ts +0 -106
  234. package/dist/common/src/types/organization.d.ts.map +0 -1
  235. package/dist/common/src/types/organization.js +0 -3
  236. package/dist/common/src/types/organization.js.map +0 -1
  237. package/dist/common/src/types/referral.d.ts +0 -3
  238. package/dist/common/src/types/referral.d.ts.map +0 -1
  239. package/dist/common/src/types/referral.js +0 -5
  240. package/dist/common/src/types/referral.js.map +0 -1
  241. package/dist/common/src/types/tools.d.ts +0 -6
  242. package/dist/common/src/types/tools.d.ts.map +0 -1
  243. package/dist/common/src/types/tools.js +0 -3
  244. package/dist/common/src/types/tools.js.map +0 -1
  245. package/dist/common/src/types/usage.d.ts +0 -41
  246. package/dist/common/src/types/usage.d.ts.map +0 -1
  247. package/dist/common/src/types/usage.js +0 -16
  248. package/dist/common/src/types/usage.js.map +0 -1
  249. package/dist/common/src/util/__tests__/messages.test.d.ts +0 -2
  250. package/dist/common/src/util/__tests__/messages.test.d.ts.map +0 -1
  251. package/dist/common/src/util/__tests__/messages.test.js +0 -70
  252. package/dist/common/src/util/__tests__/messages.test.js.map +0 -1
  253. package/dist/common/src/util/__tests__/saxy.test.d.ts +0 -2
  254. package/dist/common/src/util/__tests__/saxy.test.d.ts.map +0 -1
  255. package/dist/common/src/util/__tests__/saxy.test.js +0 -906
  256. package/dist/common/src/util/__tests__/saxy.test.js.map +0 -1
  257. package/dist/common/src/util/__tests__/string.test.d.ts +0 -2
  258. package/dist/common/src/util/__tests__/string.test.d.ts.map +0 -1
  259. package/dist/common/src/util/__tests__/string.test.js +0 -82
  260. package/dist/common/src/util/__tests__/string.test.js.map +0 -1
  261. package/dist/common/src/util/array.d.ts +0 -7
  262. package/dist/common/src/util/array.d.ts.map +0 -1
  263. package/dist/common/src/util/array.js +0 -32
  264. package/dist/common/src/util/array.js.map +0 -1
  265. package/dist/common/src/util/changes.d.ts +0 -9
  266. package/dist/common/src/util/changes.d.ts.map +0 -1
  267. package/dist/common/src/util/changes.js +0 -87
  268. package/dist/common/src/util/changes.js.map +0 -1
  269. package/dist/common/src/util/credentials.d.ts +0 -26
  270. package/dist/common/src/util/credentials.d.ts.map +0 -1
  271. package/dist/common/src/util/credentials.js +0 -24
  272. package/dist/common/src/util/credentials.js.map +0 -1
  273. package/dist/common/src/util/currency.d.ts +0 -15
  274. package/dist/common/src/util/currency.d.ts.map +0 -1
  275. package/dist/common/src/util/currency.js +0 -23
  276. package/dist/common/src/util/currency.js.map +0 -1
  277. package/dist/common/src/util/dates.d.ts +0 -11
  278. package/dist/common/src/util/dates.d.ts.map +0 -1
  279. package/dist/common/src/util/dates.js +0 -22
  280. package/dist/common/src/util/dates.js.map +0 -1
  281. package/dist/common/src/util/file.d.ts +0 -163
  282. package/dist/common/src/util/file.d.ts.map +0 -1
  283. package/dist/common/src/util/file.js +0 -192
  284. package/dist/common/src/util/file.js.map +0 -1
  285. package/dist/common/src/util/git.d.ts +0 -7
  286. package/dist/common/src/util/git.d.ts.map +0 -1
  287. package/dist/common/src/util/git.js +0 -81
  288. package/dist/common/src/util/git.js.map +0 -1
  289. package/dist/common/src/util/logger.d.ts +0 -9
  290. package/dist/common/src/util/logger.d.ts.map +0 -1
  291. package/dist/common/src/util/logger.js +0 -52
  292. package/dist/common/src/util/logger.js.map +0 -1
  293. package/dist/common/src/util/lru-cache.d.ts +0 -31
  294. package/dist/common/src/util/lru-cache.d.ts.map +0 -1
  295. package/dist/common/src/util/lru-cache.js +0 -68
  296. package/dist/common/src/util/lru-cache.js.map +0 -1
  297. package/dist/common/src/util/messages.d.ts +0 -12
  298. package/dist/common/src/util/messages.d.ts.map +0 -1
  299. package/dist/common/src/util/messages.js +0 -81
  300. package/dist/common/src/util/messages.js.map +0 -1
  301. package/dist/common/src/util/min-heap.d.ts +0 -16
  302. package/dist/common/src/util/min-heap.d.ts.map +0 -1
  303. package/dist/common/src/util/min-heap.js +0 -73
  304. package/dist/common/src/util/min-heap.js.map +0 -1
  305. package/dist/common/src/util/object.d.ts +0 -19
  306. package/dist/common/src/util/object.d.ts.map +0 -1
  307. package/dist/common/src/util/object.js +0 -91
  308. package/dist/common/src/util/object.js.map +0 -1
  309. package/dist/common/src/util/patch.d.ts +0 -2
  310. package/dist/common/src/util/patch.d.ts.map +0 -1
  311. package/dist/common/src/util/patch.js +0 -215
  312. package/dist/common/src/util/patch.js.map +0 -1
  313. package/dist/common/src/util/promise.d.ts +0 -17
  314. package/dist/common/src/util/promise.d.ts.map +0 -1
  315. package/dist/common/src/util/promise.js +0 -51
  316. package/dist/common/src/util/promise.js.map +0 -1
  317. package/dist/common/src/util/random.d.ts +0 -2
  318. package/dist/common/src/util/random.d.ts.map +0 -1
  319. package/dist/common/src/util/random.js +0 -17
  320. package/dist/common/src/util/random.js.map +0 -1
  321. package/dist/common/src/util/referral.d.ts +0 -2
  322. package/dist/common/src/util/referral.d.ts.map +0 -1
  323. package/dist/common/src/util/referral.js +0 -6
  324. package/dist/common/src/util/referral.js.map +0 -1
  325. package/dist/common/src/util/saxy.d.ts +0 -179
  326. package/dist/common/src/util/saxy.d.ts.map +0 -1
  327. package/dist/common/src/util/saxy.js +0 -548
  328. package/dist/common/src/util/saxy.js.map +0 -1
  329. package/dist/common/src/util/string.d.ts +0 -80
  330. package/dist/common/src/util/string.d.ts.map +0 -1
  331. package/dist/common/src/util/string.js +0 -264
  332. package/dist/common/src/util/string.js.map +0 -1
  333. package/dist/common/src/util/stripe.d.ts +0 -4
  334. package/dist/common/src/util/stripe.d.ts.map +0 -1
  335. package/dist/common/src/util/stripe.js +0 -22
  336. package/dist/common/src/util/stripe.js.map +0 -1
  337. package/dist/common/src/util/sync-failure.d.ts +0 -2
  338. package/dist/common/src/util/sync-failure.d.ts.map +0 -1
  339. package/dist/common/src/util/sync-failure.js +0 -57
  340. package/dist/common/src/util/sync-failure.js.map +0 -1
  341. package/dist/common/src/websockets/websocket-client.d.ts +0 -43
  342. package/dist/common/src/websockets/websocket-client.d.ts.map +0 -1
  343. package/dist/common/src/websockets/websocket-client.js +0 -216
  344. package/dist/common/src/websockets/websocket-client.js.map +0 -1
  345. package/dist/common/src/websockets/websocket-schema.d.ts +0 -5159
  346. package/dist/common/src/websockets/websocket-schema.d.ts.map +0 -1
  347. package/dist/common/src/websockets/websocket-schema.js +0 -55
  348. package/dist/common/src/websockets/websocket-schema.js.map +0 -1
  349. package/dist/common/tsconfig.tsbuildinfo +0 -1
  350. package/dist/common/types/agent-state.d.ts +0 -227
  351. package/dist/common/types/agent-state.d.ts.map +0 -1
  352. package/dist/common/types/agent-state.js +0 -34
  353. package/dist/common/types/agent-state.js.map +0 -1
  354. package/dist/common/types/grant.d.ts +0 -3
  355. package/dist/common/types/grant.d.ts.map +0 -1
  356. package/dist/common/types/grant.js +0 -11
  357. package/dist/common/types/grant.js.map +0 -1
  358. package/dist/common/types/message.d.ts +0 -320
  359. package/dist/common/types/message.d.ts.map +0 -1
  360. package/dist/common/types/message.js +0 -60
  361. package/dist/common/types/message.js.map +0 -1
  362. package/dist/common/types/organization.d.ts +0 -106
  363. package/dist/common/types/organization.d.ts.map +0 -1
  364. package/dist/common/types/organization.js +0 -3
  365. package/dist/common/types/organization.js.map +0 -1
  366. package/dist/common/types/referral.d.ts +0 -3
  367. package/dist/common/types/referral.d.ts.map +0 -1
  368. package/dist/common/types/referral.js +0 -5
  369. package/dist/common/types/referral.js.map +0 -1
  370. package/dist/common/types/tools.d.ts +0 -6
  371. package/dist/common/types/tools.d.ts.map +0 -1
  372. package/dist/common/types/tools.js +0 -3
  373. package/dist/common/types/tools.js.map +0 -1
  374. package/dist/common/types/usage.d.ts +0 -41
  375. package/dist/common/types/usage.d.ts.map +0 -1
  376. package/dist/common/types/usage.js +0 -16
  377. package/dist/common/types/usage.js.map +0 -1
  378. package/dist/common/util/__tests__/messages.test.d.ts +0 -2
  379. package/dist/common/util/__tests__/messages.test.d.ts.map +0 -1
  380. package/dist/common/util/__tests__/messages.test.js +0 -70
  381. package/dist/common/util/__tests__/messages.test.js.map +0 -1
  382. package/dist/common/util/__tests__/saxy.test.d.ts +0 -2
  383. package/dist/common/util/__tests__/saxy.test.d.ts.map +0 -1
  384. package/dist/common/util/__tests__/saxy.test.js +0 -906
  385. package/dist/common/util/__tests__/saxy.test.js.map +0 -1
  386. package/dist/common/util/__tests__/string.test.d.ts +0 -2
  387. package/dist/common/util/__tests__/string.test.d.ts.map +0 -1
  388. package/dist/common/util/__tests__/string.test.js +0 -82
  389. package/dist/common/util/__tests__/string.test.js.map +0 -1
  390. package/dist/common/util/array.d.ts +0 -7
  391. package/dist/common/util/array.d.ts.map +0 -1
  392. package/dist/common/util/array.js +0 -32
  393. package/dist/common/util/array.js.map +0 -1
  394. package/dist/common/util/changes.d.ts +0 -9
  395. package/dist/common/util/changes.d.ts.map +0 -1
  396. package/dist/common/util/changes.js +0 -87
  397. package/dist/common/util/changes.js.map +0 -1
  398. package/dist/common/util/credentials.d.ts +0 -26
  399. package/dist/common/util/credentials.d.ts.map +0 -1
  400. package/dist/common/util/credentials.js +0 -24
  401. package/dist/common/util/credentials.js.map +0 -1
  402. package/dist/common/util/currency.d.ts +0 -15
  403. package/dist/common/util/currency.d.ts.map +0 -1
  404. package/dist/common/util/currency.js +0 -23
  405. package/dist/common/util/currency.js.map +0 -1
  406. package/dist/common/util/dates.d.ts +0 -11
  407. package/dist/common/util/dates.d.ts.map +0 -1
  408. package/dist/common/util/dates.js +0 -22
  409. package/dist/common/util/dates.js.map +0 -1
  410. package/dist/common/util/file.d.ts +0 -168
  411. package/dist/common/util/file.d.ts.map +0 -1
  412. package/dist/common/util/file.js +0 -215
  413. package/dist/common/util/file.js.map +0 -1
  414. package/dist/common/util/git.d.ts +0 -7
  415. package/dist/common/util/git.d.ts.map +0 -1
  416. package/dist/common/util/git.js +0 -81
  417. package/dist/common/util/git.js.map +0 -1
  418. package/dist/common/util/logger.d.ts +0 -9
  419. package/dist/common/util/logger.d.ts.map +0 -1
  420. package/dist/common/util/logger.js +0 -52
  421. package/dist/common/util/logger.js.map +0 -1
  422. package/dist/common/util/lru-cache.d.ts +0 -31
  423. package/dist/common/util/lru-cache.d.ts.map +0 -1
  424. package/dist/common/util/lru-cache.js +0 -68
  425. package/dist/common/util/lru-cache.js.map +0 -1
  426. package/dist/common/util/messages.d.ts +0 -12
  427. package/dist/common/util/messages.d.ts.map +0 -1
  428. package/dist/common/util/messages.js +0 -81
  429. package/dist/common/util/messages.js.map +0 -1
  430. package/dist/common/util/min-heap.d.ts +0 -16
  431. package/dist/common/util/min-heap.d.ts.map +0 -1
  432. package/dist/common/util/min-heap.js +0 -73
  433. package/dist/common/util/min-heap.js.map +0 -1
  434. package/dist/common/util/object.d.ts +0 -19
  435. package/dist/common/util/object.d.ts.map +0 -1
  436. package/dist/common/util/object.js +0 -91
  437. package/dist/common/util/object.js.map +0 -1
  438. package/dist/common/util/patch.d.ts +0 -2
  439. package/dist/common/util/patch.d.ts.map +0 -1
  440. package/dist/common/util/patch.js +0 -215
  441. package/dist/common/util/patch.js.map +0 -1
  442. package/dist/common/util/promise.d.ts +0 -17
  443. package/dist/common/util/promise.d.ts.map +0 -1
  444. package/dist/common/util/promise.js +0 -51
  445. package/dist/common/util/promise.js.map +0 -1
  446. package/dist/common/util/random.d.ts +0 -2
  447. package/dist/common/util/random.d.ts.map +0 -1
  448. package/dist/common/util/random.js +0 -17
  449. package/dist/common/util/random.js.map +0 -1
  450. package/dist/common/util/referral.d.ts +0 -2
  451. package/dist/common/util/referral.d.ts.map +0 -1
  452. package/dist/common/util/referral.js +0 -6
  453. package/dist/common/util/referral.js.map +0 -1
  454. package/dist/common/util/saxy.d.ts +0 -179
  455. package/dist/common/util/saxy.d.ts.map +0 -1
  456. package/dist/common/util/saxy.js +0 -548
  457. package/dist/common/util/saxy.js.map +0 -1
  458. package/dist/common/util/string.d.ts +0 -80
  459. package/dist/common/util/string.d.ts.map +0 -1
  460. package/dist/common/util/string.js +0 -264
  461. package/dist/common/util/string.js.map +0 -1
  462. package/dist/common/util/stripe.d.ts +0 -4
  463. package/dist/common/util/stripe.d.ts.map +0 -1
  464. package/dist/common/util/stripe.js +0 -22
  465. package/dist/common/util/stripe.js.map +0 -1
  466. package/dist/common/util/sync-failure.d.ts +0 -2
  467. package/dist/common/util/sync-failure.d.ts.map +0 -1
  468. package/dist/common/util/sync-failure.js +0 -57
  469. package/dist/common/util/sync-failure.js.map +0 -1
  470. package/dist/common/websockets/websocket-client.d.ts +0 -43
  471. package/dist/common/websockets/websocket-client.d.ts.map +0 -1
  472. package/dist/common/websockets/websocket-client.js +0 -216
  473. package/dist/common/websockets/websocket-client.js.map +0 -1
  474. package/dist/common/websockets/websocket-schema.d.ts +0 -5159
  475. package/dist/common/websockets/websocket-schema.d.ts.map +0 -1
  476. package/dist/common/websockets/websocket-schema.js +0 -55
  477. package/dist/common/websockets/websocket-schema.js.map +0 -1
  478. package/dist/config.d.ts +0 -4
  479. package/dist/config.js +0 -12
  480. package/dist/config.js.map +0 -1
  481. package/dist/create-template-project.d.ts +0 -1
  482. package/dist/create-template-project.js +0 -131
  483. package/dist/create-template-project.js.map +0 -1
  484. package/dist/credentials.d.ts +0 -4
  485. package/dist/credentials.js +0 -44
  486. package/dist/credentials.js.map +0 -1
  487. package/dist/dev-process-manager.d.ts +0 -10
  488. package/dist/dev-process-manager.js +0 -56
  489. package/dist/dev-process-manager.js.map +0 -1
  490. package/dist/display.d.ts +0 -9
  491. package/dist/display.js +0 -137
  492. package/dist/display.js.map +0 -1
  493. package/dist/fingerprint.d.ts +0 -1
  494. package/dist/fingerprint.js +0 -48
  495. package/dist/fingerprint.js.map +0 -1
  496. package/dist/index.d.ts +0 -2
  497. package/dist/index.js +0 -130
  498. package/dist/index.js.map +0 -1
  499. package/dist/json-config/hooks.d.ts +0 -9
  500. package/dist/json-config/hooks.js +0 -60
  501. package/dist/json-config/hooks.js.map +0 -1
  502. package/dist/json-config/parser.d.ts +0 -7
  503. package/dist/json-config/parser.js +0 -53
  504. package/dist/json-config/parser.js.map +0 -1
  505. package/dist/menu.d.ts +0 -14
  506. package/dist/menu.js +0 -344
  507. package/dist/menu.js.map +0 -1
  508. package/dist/project-files.d.ts +0 -103
  509. package/dist/project-files.js +0 -620
  510. package/dist/project-files.js.map +0 -1
  511. package/dist/startup-process-handler.d.ts +0 -1
  512. package/dist/startup-process-handler.js +0 -25
  513. package/dist/startup-process-handler.js.map +0 -1
  514. package/dist/terminal/background.d.ts +0 -12
  515. package/dist/terminal/background.js +0 -148
  516. package/dist/terminal/background.js.map +0 -1
  517. package/dist/terminal/base.d.ts +0 -48
  518. package/dist/terminal/base.js +0 -667
  519. package/dist/terminal/base.js.map +0 -1
  520. package/dist/tool-handlers.d.ts +0 -35
  521. package/dist/tool-handlers.js +0 -303
  522. package/dist/tool-handlers.js.map +0 -1
  523. package/dist/types.d.ts +0 -16
  524. package/dist/types.js +0 -3
  525. package/dist/types.js.map +0 -1
  526. package/dist/update-codebuff.d.ts +0 -1
  527. package/dist/update-codebuff.js +0 -169
  528. package/dist/update-codebuff.js.map +0 -1
  529. package/dist/utils/__tests__/background-process-manager.test.d.ts +0 -1
  530. package/dist/utils/__tests__/background-process-manager.test.js +0 -327
  531. package/dist/utils/__tests__/background-process-manager.test.js.map +0 -1
  532. package/dist/utils/__tests__/response-example-4-files.txt +0 -621
  533. package/dist/utils/__tests__/tool-renderers.test.d.ts +0 -1
  534. package/dist/utils/__tests__/tool-renderers.test.js +0 -83
  535. package/dist/utils/__tests__/tool-renderers.test.js.map +0 -1
  536. package/dist/utils/__tests__/xml-stream-parser.test.d.ts +0 -1
  537. package/dist/utils/__tests__/xml-stream-parser.test.js +0 -255
  538. package/dist/utils/__tests__/xml-stream-parser.test.js.map +0 -1
  539. package/dist/utils/analytics.d.ts +0 -7
  540. package/dist/utils/analytics.js +0 -100
  541. package/dist/utils/analytics.js.map +0 -1
  542. package/dist/utils/detect-shell.d.ts +0 -1
  543. package/dist/utils/detect-shell.js +0 -65
  544. package/dist/utils/detect-shell.js.map +0 -1
  545. package/dist/utils/git.d.ts +0 -13
  546. package/dist/utils/git.js +0 -143
  547. package/dist/utils/git.js.map +0 -1
  548. package/dist/utils/logger.d.ts +0 -21
  549. package/dist/utils/logger.js +0 -109
  550. package/dist/utils/logger.js.map +0 -1
  551. package/dist/utils/spinner.d.ts +0 -12
  552. package/dist/utils/spinner.js +0 -85
  553. package/dist/utils/spinner.js.map +0 -1
  554. package/dist/utils/system-info.d.ts +0 -8
  555. package/dist/utils/system-info.js +0 -22
  556. package/dist/utils/system-info.js.map +0 -1
  557. package/dist/utils/tool-renderers.d.ts +0 -16
  558. package/dist/utils/tool-renderers.js +0 -222
  559. package/dist/utils/tool-renderers.js.map +0 -1
  560. package/dist/utils/xml-stream-parser.d.ts +0 -9
  561. package/dist/utils/xml-stream-parser.js +0 -143
  562. package/dist/utils/xml-stream-parser.js.map +0 -1
  563. package/dist/web-scraper.d.ts +0 -3
  564. package/dist/web-scraper.js +0 -59
  565. package/dist/web-scraper.js.map +0 -1
  566. package/dist/workers/checkpoint-worker.d.ts +0 -1
  567. package/dist/workers/checkpoint-worker.js +0 -51
  568. package/dist/workers/checkpoint-worker.js.map +0 -1
  569. package/dist/workers/project-context.d.ts +0 -1
  570. package/dist/workers/project-context.js +0 -27
  571. package/dist/workers/project-context.js.map +0 -1
package/dist/client.js DELETED
@@ -1,1325 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Client = void 0;
7
- const child_process_1 = require("child_process");
8
- const actions_1 = require("./common/actions");
9
- const fs_1 = require("fs");
10
- const os_1 = __importDefault(require("os"));
11
- const constants_1 = require("./common/api-keys/constants");
12
- const constants_2 = require("./common/constants");
13
- const analytics_events_1 = require("./common/constants/analytics-events");
14
- const constants_3 = require("./common/json-config/constants");
15
- const agent_state_1 = require("./common/types/agent-state");
16
- const array_1 = require("./common/util/array");
17
- const string_1 = require("./common/util/string");
18
- const websocket_client_1 = require("./common/websockets/websocket-client");
19
- const path_1 = __importDefault(require("path"));
20
- const picocolors_1 = require("picocolors");
21
- const ts_pattern_1 = require("ts-pattern");
22
- const zod_1 = require("zod");
23
- const package_json_1 = __importDefault(require("../package.json"));
24
- const background_process_manager_1 = require("./background-process-manager");
25
- const browser_runner_1 = require("./browser-runner");
26
- const chat_storage_1 = require("./chat-storage");
27
- const checkpoint_manager_1 = require("./checkpoints/checkpoint-manager");
28
- const cli_1 = require("./cli");
29
- const checkpoint_1 = require("./cli-handlers/checkpoint");
30
- const config_1 = require("./config");
31
- const credentials_1 = require("./credentials");
32
- const fingerprint_1 = require("./fingerprint");
33
- const hooks_1 = require("./json-config/hooks");
34
- const parser_1 = require("./json-config/parser");
35
- const menu_1 = require("./menu");
36
- const project_files_1 = require("./project-files");
37
- const base_1 = require("./terminal/base");
38
- const tool_handlers_1 = require("./tool-handlers");
39
- const analytics_1 = require("./utils/analytics");
40
- const git_1 = require("./utils/git");
41
- const logger_1 = require("./utils/logger");
42
- const spinner_1 = require("./utils/spinner");
43
- const tool_renderers_1 = require("./utils/tool-renderers");
44
- const xml_stream_parser_1 = require("./utils/xml-stream-parser");
45
- const web_scraper_1 = require("./web-scraper");
46
- const LOW_BALANCE_THRESHOLD = 100;
47
- const WARNING_CONFIG = {
48
- [constants_2.UserState.LOGGED_OUT]: {
49
- message: () => `Type "login" to unlock full access and get free credits!`,
50
- threshold: 100,
51
- },
52
- [constants_2.UserState.DEPLETED]: {
53
- message: () => [
54
- (0, picocolors_1.red)(`\n❌ You have used all your credits.`),
55
- `Visit ${(0, picocolors_1.bold)((0, picocolors_1.blue)(config_1.websiteUrl + '/usage'))} to add more credits and continue coding.`,
56
- ].join('\n'),
57
- threshold: 100,
58
- },
59
- [constants_2.UserState.CRITICAL]: {
60
- message: (credits) => [
61
- (0, picocolors_1.yellow)(`\n🪫 Only ${(0, picocolors_1.bold)((0, string_1.pluralize)(credits, 'credit'))} remaining!`),
62
- (0, picocolors_1.yellow)(`Visit ${(0, picocolors_1.bold)(config_1.websiteUrl + '/usage')} to add more credits.`),
63
- ].join('\n'),
64
- threshold: 85,
65
- },
66
- [constants_2.UserState.ATTENTION_NEEDED]: {
67
- message: (credits) => [
68
- (0, picocolors_1.yellow)(`\n⚠️ ${(0, picocolors_1.bold)((0, string_1.pluralize)(credits, 'credit'))} remaining. Consider topping up soon.`),
69
- ].join('\n'),
70
- threshold: 75,
71
- },
72
- [constants_2.UserState.GOOD_STANDING]: {
73
- message: () => '',
74
- threshold: 0,
75
- },
76
- };
77
- class Client {
78
- static instance;
79
- webSocket;
80
- freshPrompt;
81
- reconnectWhenNextIdle;
82
- fingerprintId;
83
- costMode;
84
- hadFileChanges = false;
85
- git;
86
- responseComplete = false;
87
- responseBuffer = '';
88
- oneTimeFlags = Object.fromEntries(constants_2.ONE_TIME_LABELS.map((tag) => [tag, false]));
89
- usageData = {
90
- usage: 0,
91
- remainingBalance: null,
92
- balanceBreakdown: undefined,
93
- next_quota_reset: null,
94
- };
95
- pendingTopUpMessageAmount = 0;
96
- fileContext;
97
- lastChanges = [];
98
- filesChangedForHook = [];
99
- agentState;
100
- originalFileVersions = {};
101
- creditsByPromptId = {};
102
- user;
103
- lastWarnedPct = 0;
104
- storedApiKeyTypes = [];
105
- lastToolResults = [];
106
- model;
107
- constructor({ websocketUrl, onWebSocketError, onWebSocketReconnect, freshPrompt, reconnectWhenNextIdle, costMode, git, model, }) {
108
- this.costMode = costMode;
109
- this.model = model;
110
- this.git = git;
111
- this.webSocket = new websocket_client_1.APIRealtimeClient(websocketUrl, onWebSocketError, onWebSocketReconnect);
112
- logger_1.loggerContext.costMode = this.costMode;
113
- logger_1.loggerContext.model = this.model;
114
- this.user = this.getUser();
115
- this.initFingerprintId();
116
- const repoInfoPromise = this.setRepoContext();
117
- this.freshPrompt = freshPrompt;
118
- this.reconnectWhenNextIdle = reconnectWhenNextIdle;
119
- repoInfoPromise.then(() => logger_1.logger.info({
120
- eventId: analytics_events_1.AnalyticsEvent.APP_LAUNCHED,
121
- platform: os_1.default.platform(),
122
- costMode: this.costMode,
123
- model: this.model,
124
- }, 'App launched'));
125
- }
126
- static createInstance(options) {
127
- if (Client.instance) {
128
- throw new Error('Client instance already created. Use getInstance() to retrieve it.');
129
- }
130
- Client.instance = new Client(options);
131
- return Client.instance;
132
- }
133
- static getInstance() {
134
- if (!Client.instance) {
135
- throw new Error('Client instance has not been created yet. Call createInstance() first.');
136
- }
137
- return Client.instance;
138
- }
139
- async exit() {
140
- if (browser_runner_1.activeBrowserRunner) {
141
- browser_runner_1.activeBrowserRunner.shutdown();
142
- }
143
- process.exit(0);
144
- }
145
- initAgentState(projectFileContext) {
146
- this.agentState = (0, agent_state_1.getInitialAgentState)(projectFileContext);
147
- this.fileContext = projectFileContext;
148
- }
149
- async resetContext() {
150
- if (!this.fileContext)
151
- return;
152
- this.initAgentState(this.fileContext);
153
- this.lastToolResults = [];
154
- this.lastChanges = [];
155
- this.creditsByPromptId = {};
156
- checkpoint_manager_1.checkpointManager.clearCheckpoints(true);
157
- (0, chat_storage_1.setMessages)([]);
158
- (0, project_files_1.startNewChat)();
159
- await this.warmContextCache();
160
- }
161
- initFingerprintId() {
162
- if (!this.fingerprintId) {
163
- this.fingerprintId = this.user?.fingerprintId ?? (0, fingerprint_1.calculateFingerprint)();
164
- }
165
- return this.fingerprintId;
166
- }
167
- async setRepoContext() {
168
- const repoMetrics = await (0, git_1.getRepoMetrics)();
169
- logger_1.loggerContext.repoUrl = repoMetrics.repoUrl;
170
- logger_1.loggerContext.repoName = repoMetrics.repoName;
171
- logger_1.loggerContext.repoAgeDays = repoMetrics.ageDays;
172
- logger_1.loggerContext.repoTrackedFiles = repoMetrics.trackedFiles;
173
- logger_1.loggerContext.repoCommits = repoMetrics.commits;
174
- logger_1.loggerContext.repoCommitsLast30Days = repoMetrics.commitsLast30Days;
175
- logger_1.loggerContext.repoAuthorsLast30Days = repoMetrics.authorsLast30Days;
176
- if (this.user) {
177
- (0, analytics_1.identifyUser)(this.user?.id, {
178
- repoName: logger_1.loggerContext.repoName,
179
- repoAgeDays: logger_1.loggerContext.repoAgeDays,
180
- repoTrackedFiles: logger_1.loggerContext.repoTrackedFiles,
181
- repoCommits: logger_1.loggerContext.repoCommits,
182
- repoCommitsLast30Days: logger_1.loggerContext.repoCommitsLast30Days,
183
- repoAuthorsLast30Days: logger_1.loggerContext.repoAuthorsLast30Days,
184
- });
185
- }
186
- }
187
- getUser() {
188
- if (!(0, fs_1.existsSync)(credentials_1.CREDENTIALS_PATH)) {
189
- return;
190
- }
191
- const credentialsFile = (0, fs_1.readFileSync)(credentials_1.CREDENTIALS_PATH, 'utf8');
192
- const user = (0, credentials_1.userFromJson)(credentialsFile);
193
- if (user) {
194
- (0, analytics_1.identifyUser)(user.id, {
195
- email: user.email,
196
- name: user.name,
197
- fingerprintId: this.fingerprintId,
198
- platform: os_1.default.platform(),
199
- version: package_json_1.default.version,
200
- hasGit: (0, git_1.gitCommandIsAvailable)(),
201
- costMode: this.costMode,
202
- model: this.model,
203
- });
204
- logger_1.loggerContext.userId = user.id;
205
- logger_1.loggerContext.userEmail = user.email;
206
- logger_1.loggerContext.fingerprintId = user.fingerprintId;
207
- }
208
- return user;
209
- }
210
- async connect() {
211
- await this.webSocket.connect();
212
- this.setupSubscriptions();
213
- await this.fetchStoredApiKeyTypes();
214
- }
215
- async fetchStoredApiKeyTypes() {
216
- if (!this.user || !this.user.authToken) {
217
- return;
218
- }
219
- this.storedApiKeyTypes = [];
220
- }
221
- async handleAddApiKey(keyType, apiKey) {
222
- if (!this.user || !this.user.authToken) {
223
- console.log((0, picocolors_1.yellow)("Please log in first using 'login'."));
224
- this.freshPrompt();
225
- return;
226
- }
227
- const readableKeyType = constants_1.READABLE_NAME[keyType];
228
- spinner_1.Spinner.get().start('Storing API Key');
229
- try {
230
- const response = await fetch(`${process.env.NEXT_PUBLIC_APP_URL}/api/api-keys`, {
231
- method: 'POST',
232
- headers: {
233
- 'Content-Type': 'application/json',
234
- Cookie: `next-auth.session-token=${this.user.authToken}`,
235
- },
236
- body: JSON.stringify({
237
- keyType,
238
- apiKey,
239
- authToken: this.user.authToken,
240
- }),
241
- });
242
- spinner_1.Spinner.get().stop();
243
- const respJson = await response.json();
244
- if (response.ok) {
245
- console.log((0, picocolors_1.green)(`Successfully added ${readableKeyType} API key.`));
246
- if (!this.storedApiKeyTypes.includes(keyType)) {
247
- this.storedApiKeyTypes.push(keyType);
248
- }
249
- }
250
- else {
251
- throw new Error(respJson.message);
252
- }
253
- }
254
- catch (e) {
255
- spinner_1.Spinner.get().stop();
256
- const error = e;
257
- logger_1.logger.error({
258
- errorMessage: error.message,
259
- errorStack: error.stack,
260
- keyType,
261
- }, 'Error adding API key');
262
- console.error((0, picocolors_1.red)('Error adding API key: ' + error.message));
263
- }
264
- finally {
265
- this.freshPrompt();
266
- }
267
- }
268
- async handleReferralCode(referralCode) {
269
- if (this.user) {
270
- try {
271
- const redeemReferralResp = await fetch(`${process.env.NEXT_PUBLIC_APP_URL}/api/referrals`, {
272
- method: 'POST',
273
- headers: {
274
- 'Content-Type': 'application/json',
275
- Cookie: `next-auth.session-token=${this.user.authToken};`,
276
- },
277
- body: JSON.stringify({
278
- referralCode,
279
- authToken: this.user.authToken,
280
- }),
281
- });
282
- const respJson = await redeemReferralResp.json();
283
- if (redeemReferralResp.ok) {
284
- console.log([
285
- (0, picocolors_1.green)(`Noice, you've earned an extra ${respJson.credits_redeemed} credits!`),
286
- `(pssst: you can also refer new users and earn ${constants_2.CREDITS_REFERRAL_BONUS} credits for each referral at: ${process.env.NEXT_PUBLIC_APP_URL}/referrals)`,
287
- ].join('\n'));
288
- this.getUsage();
289
- }
290
- else {
291
- throw new Error(respJson.error);
292
- }
293
- }
294
- catch (e) {
295
- const error = e;
296
- logger_1.logger.error({
297
- errorMessage: error.message,
298
- errorStack: error.stack,
299
- referralCode,
300
- }, 'Error redeeming referral code');
301
- console.error((0, picocolors_1.red)('Error: ' + error.message));
302
- this.freshPrompt();
303
- }
304
- }
305
- else {
306
- await this.login(referralCode);
307
- }
308
- }
309
- async logout() {
310
- if (this.user) {
311
- try {
312
- const response = await fetch(`${config_1.websiteUrl}/api/auth/cli/logout`, {
313
- method: 'POST',
314
- headers: { 'Content-Type': 'application/json' },
315
- body: JSON.stringify({
316
- authToken: this.user.authToken,
317
- userId: this.user.id,
318
- fingerprintId: this.user.fingerprintId,
319
- fingerprintHash: this.user.fingerprintHash,
320
- }),
321
- });
322
- if (!response.ok) {
323
- const error = await response.text();
324
- console.error((0, picocolors_1.red)('Failed to log out: ' + error));
325
- logger_1.logger.error({
326
- errorMessage: 'Failed to log out: ' + error,
327
- }, 'Failed to log out');
328
- }
329
- try {
330
- (0, fs_1.unlinkSync)(credentials_1.CREDENTIALS_PATH);
331
- console.log(`You (${this.user.name}) have been logged out.`);
332
- this.user = undefined;
333
- this.pendingTopUpMessageAmount = 0;
334
- this.usageData = {
335
- usage: 0,
336
- remainingBalance: null,
337
- balanceBreakdown: undefined,
338
- next_quota_reset: null,
339
- };
340
- this.oneTimeFlags = Object.fromEntries(constants_2.ONE_TIME_LABELS.map((tag) => [tag, false]));
341
- }
342
- catch (error) {
343
- logger_1.logger.error({
344
- errorMessage: error instanceof Error ? error.message : String(error),
345
- errorStack: error instanceof Error ? error.stack : undefined,
346
- }, 'Error removing credentials file');
347
- console.error('Error removing credentials file:', error);
348
- }
349
- }
350
- catch (error) {
351
- logger_1.logger.error({
352
- errorMessage: error instanceof Error ? error.message : String(error),
353
- errorStack: error instanceof Error ? error.stack : undefined,
354
- msg: 'Error during logout',
355
- }, 'Error during logout');
356
- console.error('Error during logout:', error);
357
- }
358
- }
359
- }
360
- async login(referralCode) {
361
- if (this.user) {
362
- console.log(`You are currently logged in as ${this.user.name}. Please enter "logout" first if you want to login as a different user.`);
363
- this.freshPrompt();
364
- return;
365
- }
366
- try {
367
- const response = await fetch(`${config_1.websiteUrl}/api/auth/cli/code`, {
368
- method: 'POST',
369
- headers: { 'Content-Type': 'application/json' },
370
- body: JSON.stringify({
371
- fingerprintId: await this.fingerprintId,
372
- referralCode,
373
- }),
374
- });
375
- if (!response.ok) {
376
- const error = await response.text();
377
- console.error((0, picocolors_1.red)('Login code request failed: ' + error));
378
- logger_1.logger.error({
379
- errorMessage: 'Login code request failed: ' + error,
380
- }, 'Login code request failed');
381
- this.freshPrompt();
382
- return;
383
- }
384
- const { loginUrl, fingerprintHash, expiresAt } = await response.json();
385
- const responseToUser = [
386
- '\n',
387
- `Press ${(0, picocolors_1.blue)('ENTER')} to open your browser and finish logging in...`,
388
- ];
389
- console.log(responseToUser.join('\n'));
390
- let shouldRequestLogin = true;
391
- cli_1.CLI.getInstance().rl.once('line', () => {
392
- if (shouldRequestLogin) {
393
- (0, child_process_1.spawn)(process.platform === 'win32' ? 'start' : 'open', [loginUrl]);
394
- console.log("Opened a browser window to log you in! If it doesn't open automatically, you can click this link:");
395
- console.log();
396
- console.log((0, picocolors_1.blue)((0, picocolors_1.bold)((0, picocolors_1.underline)(loginUrl))));
397
- }
398
- });
399
- const initialTime = Date.now();
400
- const pollInterval = setInterval(async () => {
401
- if (Date.now() - initialTime > 5 * 60 * 1000 && shouldRequestLogin) {
402
- shouldRequestLogin = false;
403
- console.log('Unable to login. Please try again by typing "login" in the terminal.');
404
- this.freshPrompt();
405
- clearInterval(pollInterval);
406
- return;
407
- }
408
- if (!shouldRequestLogin) {
409
- clearInterval(pollInterval);
410
- return;
411
- }
412
- try {
413
- const fingerprintId = await this.fingerprintId;
414
- const statusResponse = await fetch(`${config_1.websiteUrl}/api/auth/cli/status?fingerprintId=${fingerprintId}&fingerprintHash=${fingerprintHash}&expiresAt=${expiresAt}`);
415
- if (!statusResponse.ok) {
416
- if (statusResponse.status !== 401) {
417
- // Ignore 401s during polling
418
- const text = await statusResponse.text();
419
- console.error('Error checking login status:', text);
420
- logger_1.logger.error({
421
- errorMessage: text,
422
- errorStatus: statusResponse.status,
423
- errorStatusText: statusResponse.statusText,
424
- msg: 'Error checking login status',
425
- }, 'Error checking login status');
426
- }
427
- return;
428
- }
429
- const { user, message } = await statusResponse.json();
430
- if (user) {
431
- shouldRequestLogin = false;
432
- this.user = user;
433
- (0, analytics_1.identifyUser)(user.id, {
434
- email: user.email,
435
- name: user.name,
436
- fingerprintId: fingerprintId,
437
- platform: os_1.default.platform(),
438
- version: package_json_1.default.version,
439
- hasGit: (0, git_1.gitCommandIsAvailable)(),
440
- });
441
- logger_1.loggerContext.userId = user.id;
442
- logger_1.loggerContext.userEmail = user.email;
443
- logger_1.loggerContext.fingerprintId = fingerprintId;
444
- logger_1.logger.info({
445
- eventId: analytics_events_1.AnalyticsEvent.LOGIN,
446
- }, 'login');
447
- const credentialsPathDir = path_1.default.dirname(credentials_1.CREDENTIALS_PATH);
448
- (0, fs_1.mkdirSync)(credentialsPathDir, { recursive: true });
449
- (0, fs_1.writeFileSync)(credentials_1.CREDENTIALS_PATH, JSON.stringify({ default: user }));
450
- const referralLink = `${process.env.NEXT_PUBLIC_APP_URL}/referrals`;
451
- const responseToUser = [
452
- 'Authentication successful! 🎉',
453
- (0, picocolors_1.bold)(`Hey there, ${user.name}.`),
454
- `Refer new users and earn ${constants_2.CREDITS_REFERRAL_BONUS} credits per month: ${(0, picocolors_1.blueBright)(referralLink)}`,
455
- ];
456
- console.log('\n' + responseToUser.join('\n'));
457
- this.lastWarnedPct = 0;
458
- this.oneTimeFlags = Object.fromEntries(constants_2.ONE_TIME_LABELS.map((tag) => [tag, false]));
459
- (0, menu_1.displayGreeting)(this.costMode, null);
460
- clearInterval(pollInterval);
461
- this.freshPrompt();
462
- }
463
- }
464
- catch (error) {
465
- console.error('Error checking login status:', error);
466
- logger_1.logger.error({
467
- errorMessage: error instanceof Error ? error.message : String(error),
468
- errorStack: error instanceof Error ? error.stack : undefined,
469
- msg: 'Error checking login status',
470
- }, 'Error checking login status');
471
- }
472
- }, 5000);
473
- }
474
- catch (error) {
475
- console.error('Error during login:', error);
476
- logger_1.logger.error({
477
- errorMessage: error instanceof Error ? error.message : String(error),
478
- errorStack: error instanceof Error ? error.stack : undefined,
479
- msg: 'Error during login',
480
- }, 'Error during login');
481
- this.freshPrompt();
482
- }
483
- }
484
- setUsage(usageData) {
485
- this.usageData = usageData;
486
- }
487
- reconnect() {
488
- this.webSocket.forceReconnect();
489
- }
490
- setCostMode(costMode) {
491
- this.costMode = costMode;
492
- logger_1.loggerContext.costMode = this.costMode;
493
- }
494
- close() {
495
- this.webSocket.close();
496
- }
497
- setupSubscriptions() {
498
- this.webSocket.subscribe('action-error', (action) => {
499
- if (action.error === 'Insufficient credits') {
500
- console.error(['', (0, picocolors_1.red)(`Error: ${action.message}`)].join('\n'));
501
- logger_1.logger.info({
502
- errorMessage: action.message,
503
- }, 'Action error insufficient credits');
504
- console.error(`Visit ${(0, picocolors_1.blue)((0, picocolors_1.bold)(process.env.NEXT_PUBLIC_APP_URL + '/usage'))} to add credits.`);
505
- }
506
- else if (action.error === 'Auto top-up disabled') {
507
- console.error(['', (0, picocolors_1.red)(`Error: ${action.message}`)].join('\n'));
508
- logger_1.logger.info({
509
- errorMessage: action.message,
510
- }, 'Auto top-up disabled error');
511
- console.error((0, picocolors_1.yellow)(`Visit ${(0, picocolors_1.blue)((0, picocolors_1.bold)(process.env.NEXT_PUBLIC_APP_URL + '/usage'))} to update your payment settings.`));
512
- }
513
- else {
514
- console.error(['', (0, picocolors_1.red)(`Error: ${action.message}`)].join('\n'));
515
- logger_1.logger.error({
516
- errorMessage: action.message,
517
- }, 'Unknown action error');
518
- }
519
- this.freshPrompt();
520
- return;
521
- });
522
- this.webSocket.subscribe('read-files', (a) => {
523
- const { filePaths, requestId } = a;
524
- const files = (0, project_files_1.getFiles)(filePaths);
525
- this.webSocket.sendAction({
526
- type: 'read-files-response',
527
- files,
528
- requestId,
529
- });
530
- });
531
- this.webSocket.subscribe('npm-version-status', (action) => {
532
- const { isUpToDate } = action;
533
- if (!isUpToDate) {
534
- console.warn((0, picocolors_1.yellow)(`\nThere's a new version of Codebuff! Please update to ensure proper functionality.\nUpdate now by running: npm install -g codebuff`));
535
- }
536
- });
537
- this.webSocket.subscribe('message-cost-response', (action) => {
538
- const parsedAction = actions_1.MessageCostResponseSchema.safeParse(action);
539
- if (!parsedAction.success)
540
- return;
541
- const response = parsedAction.data;
542
- // Store credits used for this prompt
543
- if (!this.creditsByPromptId[response.promptId]) {
544
- this.creditsByPromptId[response.promptId] = [];
545
- }
546
- this.creditsByPromptId[response.promptId].push(response.credits);
547
- });
548
- this.webSocket.subscribe('usage-response', (action) => {
549
- const parsedAction = actions_1.UsageReponseSchema.safeParse(action);
550
- if (!parsedAction.success) {
551
- console.error((0, picocolors_1.red)('Received invalid usage data from server:'), parsedAction.error.errors);
552
- logger_1.logger.error({
553
- errorMessage: 'Received invalid usage data from server',
554
- errors: parsedAction.error.errors,
555
- }, 'Invalid usage data from server');
556
- return;
557
- }
558
- this.setUsage(parsedAction.data);
559
- // Store auto-topup amount if present, to be displayed when returning control to user
560
- if (parsedAction.data.autoTopupAdded) {
561
- this.pendingTopUpMessageAmount += parsedAction.data.autoTopupAdded;
562
- }
563
- // Only show warning if the response is complete
564
- if (this.responseComplete) {
565
- this.showUsageWarning();
566
- }
567
- });
568
- // Used to handle server restarts gracefully
569
- this.webSocket.subscribe('request-reconnect', () => {
570
- this.reconnectWhenNextIdle();
571
- });
572
- }
573
- showUsageWarning() {
574
- // Determine user state based on login status and credit balance
575
- const state = (0, ts_pattern_1.match)({
576
- isLoggedIn: !!this.user,
577
- credits: this.usageData.remainingBalance,
578
- })
579
- .with({ isLoggedIn: false }, () => constants_2.UserState.LOGGED_OUT)
580
- .with({ credits: ts_pattern_1.P.number.gte(100) }, () => constants_2.UserState.GOOD_STANDING)
581
- .with({ credits: ts_pattern_1.P.number.gte(20) }, () => constants_2.UserState.ATTENTION_NEEDED)
582
- .with({ credits: ts_pattern_1.P.number.gte(1) }, () => constants_2.UserState.CRITICAL)
583
- .otherwise(() => constants_2.UserState.DEPLETED);
584
- const config = WARNING_CONFIG[state];
585
- // Reset warning percentage if in good standing
586
- if (state === constants_2.UserState.GOOD_STANDING) {
587
- this.lastWarnedPct = 0;
588
- return;
589
- }
590
- // Show warning if we haven't warned at this threshold yet
591
- if (this.lastWarnedPct < config.threshold &&
592
- this.usageData.remainingBalance) {
593
- const message = config.message(this.usageData.remainingBalance);
594
- console.warn(message);
595
- this.lastWarnedPct = config.threshold;
596
- this.freshPrompt();
597
- }
598
- }
599
- async generateCommitMessage(stagedChanges) {
600
- return new Promise(async (resolve, reject) => {
601
- const unsubscribe = this.webSocket.subscribe('commit-message-response', (action) => {
602
- unsubscribe();
603
- resolve(action.commitMessage);
604
- });
605
- this.webSocket.sendAction({
606
- type: 'generate-commit-message',
607
- fingerprintId: await this.fingerprintId,
608
- authToken: this.user?.authToken,
609
- stagedChanges,
610
- });
611
- });
612
- }
613
- async sendUserInput(prompt) {
614
- if (!this.agentState) {
615
- throw new Error('Agent state not initialized');
616
- }
617
- (0, chat_storage_1.setMessages)([
618
- ...this.agentState.messageHistory,
619
- {
620
- role: 'user',
621
- content: prompt,
622
- },
623
- ]);
624
- this.agentState.agentStepsRemaining = (0, parser_1.loadCodebuffConfig)()?.maxAgentSteps;
625
- this.lastChanges = [];
626
- this.filesChangedForHook = [];
627
- const userInputId = `mc-input-` + Math.random().toString(36).substring(2, 15);
628
- logger_1.loggerContext.clientRequestId = userInputId;
629
- const startTime = Date.now(); // Capture start time
630
- // Check if we're in manager mode using CLI's isManagerMode flag
631
- const cli = cli_1.CLI.getInstance();
632
- const f = cli.isManagerMode
633
- ? this.subscribeToManagerResponse.bind(this)
634
- : this.subscribeToResponse.bind(this);
635
- const { responsePromise, stopResponse } = f((chunk) => {
636
- spinner_1.Spinner.get().stop();
637
- process.stdout.write(chunk);
638
- }, userInputId, () => {
639
- spinner_1.Spinner.get().stop();
640
- process.stdout.write('\n' + (0, picocolors_1.green)((0, picocolors_1.underline)('Codebuff') + ': '));
641
- }, prompt, startTime);
642
- const urls = (0, web_scraper_1.parseUrlsFromContent)(prompt);
643
- const scrapedBlocks = await (0, web_scraper_1.getScrapedContentBlocks)(urls);
644
- const scrapedContent = scrapedBlocks.length > 0 ? scrapedBlocks.join('\n\n') + '\n\n' : '';
645
- // Append process updates to existing tool results
646
- const toolResults = (0, array_1.buildArray)(...(this.lastToolResults || []), ...(0, background_process_manager_1.getBackgroundProcessUpdates)(), cli.isManagerMode && {
647
- id: 'continued-terminal-output',
648
- name: 'run_terminal_command',
649
- result: (0, base_1.readNewTerminalOutput)(),
650
- }, scrapedContent && {
651
- id: 'scraped-content',
652
- name: 'web-scraper',
653
- result: scrapedContent,
654
- });
655
- spinner_1.Spinner.get().start('Thinking');
656
- const action = {
657
- promptId: userInputId,
658
- prompt,
659
- agentState: this.agentState,
660
- toolResults,
661
- fingerprintId: await this.fingerprintId,
662
- authToken: this.user?.authToken,
663
- costMode: this.costMode,
664
- model: this.model,
665
- cwd: (0, project_files_1.getWorkingDirectory)(),
666
- repoUrl: logger_1.loggerContext.repoUrl,
667
- repoName: logger_1.loggerContext.repoName,
668
- };
669
- if (cli.isManagerMode) {
670
- this.webSocket.sendAction({
671
- type: 'manager-prompt',
672
- ...action,
673
- });
674
- }
675
- else {
676
- this.webSocket.sendAction({
677
- type: 'prompt',
678
- ...action,
679
- });
680
- }
681
- return {
682
- responsePromise,
683
- stopResponse,
684
- };
685
- }
686
- subscribeToResponse(onChunk, userInputId, onStreamStart, prompt, startTime) {
687
- const rawChunkBuffer = [];
688
- this.responseBuffer = '';
689
- let streamStarted = false;
690
- let responseStopped = false;
691
- let resolveResponse;
692
- let rejectResponse;
693
- let unsubscribeChunks;
694
- let unsubscribeComplete;
695
- const responsePromise = new Promise((resolve, reject) => {
696
- resolveResponse = resolve;
697
- rejectResponse = reject;
698
- });
699
- const stopResponse = () => {
700
- responseStopped = true;
701
- unsubscribeChunks();
702
- unsubscribeComplete();
703
- const additionalMessages = [
704
- { role: 'user', content: prompt },
705
- {
706
- role: 'user',
707
- content: `<system><assistant_message>${rawChunkBuffer.join('')}</assistant_message>[RESPONSE_CANCELED_BY_USER]</system>`,
708
- },
709
- ];
710
- // Update the agent state with just the assistant's response
711
- const { messageHistory } = this.agentState;
712
- const newMessages = [...messageHistory, ...additionalMessages];
713
- this.agentState = {
714
- ...this.agentState,
715
- messageHistory: newMessages,
716
- };
717
- (0, chat_storage_1.setMessages)(newMessages);
718
- resolveResponse({
719
- type: 'prompt-response',
720
- promptId: userInputId,
721
- agentState: this.agentState,
722
- toolCalls: [],
723
- toolResults: [],
724
- wasStoppedByUser: true,
725
- });
726
- };
727
- const xmlStreamParser = (0, xml_stream_parser_1.createXMLStreamParser)(tool_renderers_1.toolRenderers, (chunk) => {
728
- onChunk(chunk);
729
- });
730
- unsubscribeChunks = this.webSocket.subscribe('response-chunk', (a) => {
731
- if (a.userInputId !== userInputId)
732
- return;
733
- const { chunk } = a;
734
- rawChunkBuffer.push(chunk);
735
- const trimmed = chunk.trim();
736
- for (const tag of constants_2.ONE_TIME_TAGS) {
737
- if (trimmed.startsWith(`<${tag}>`) && trimmed.endsWith(`</${tag}>`)) {
738
- if (this.oneTimeFlags[tag]) {
739
- return;
740
- }
741
- spinner_1.Spinner.get().stop();
742
- const warningMessage = trimmed
743
- .replace(`<${tag}>`, '')
744
- .replace(`</${tag}>`, '');
745
- process.stdout.write((0, picocolors_1.yellow)(`\n\n${warningMessage}\n\n`));
746
- this.oneTimeFlags[tag] = true;
747
- return;
748
- }
749
- }
750
- if (chunk && chunk.trim()) {
751
- if (!streamStarted && chunk.trim()) {
752
- streamStarted = true;
753
- onStreamStart();
754
- }
755
- }
756
- try {
757
- xmlStreamParser.write(chunk, 'utf8');
758
- }
759
- catch (e) {
760
- logger_1.logger.error({
761
- errorMessage: e instanceof Error ? e.message : String(e),
762
- errorStack: e instanceof Error ? e.stack : undefined,
763
- chunk,
764
- }, 'Error writing chunk to XML stream parser');
765
- }
766
- });
767
- let stepsCount = 0;
768
- let toolCallsCount = 0;
769
- unsubscribeComplete = this.webSocket.subscribe('prompt-response', async (action) => {
770
- const parsedAction = actions_1.PromptResponseSchema.safeParse(action);
771
- if (!parsedAction.success) {
772
- const message = [
773
- 'Received invalid prompt response from server:',
774
- JSON.stringify(parsedAction.error.errors),
775
- 'If this issues persists, please contact support@codebuff.com',
776
- ].join('\n');
777
- console.error(message);
778
- logger_1.logger.error({
779
- errorMessage: message,
780
- eventId: analytics_events_1.AnalyticsEvent.MALFORMED_PROMPT_RESPONSE,
781
- }, 'Malformed prompt response');
782
- return;
783
- }
784
- if (action.promptId !== userInputId)
785
- return;
786
- const a = parsedAction.data;
787
- let isComplete = false;
788
- spinner_1.Spinner.get().stop();
789
- this.agentState = a.agentState;
790
- const toolResults = [...a.toolResults];
791
- for (const toolCall of a.toolCalls) {
792
- try {
793
- if (toolCall.name === 'end_turn') {
794
- this.responseComplete = true;
795
- isComplete = true;
796
- continue;
797
- }
798
- if (toolCall.name === 'write_file' ||
799
- toolCall.name === 'str_replace' ||
800
- toolCall.name === 'create_plan') {
801
- await (0, checkpoint_1.waitForPreviousCheckpoint)();
802
- // Save lastChanges for `diff` command
803
- this.lastChanges.push(actions_1.FileChangeSchema.parse(toolCall.parameters));
804
- this.hadFileChanges = true;
805
- // Track the changed file path
806
- this.filesChangedForHook.push(toolCall.parameters.path);
807
- }
808
- if (toolCall.name === 'run_terminal_command') {
809
- await (0, checkpoint_1.waitForPreviousCheckpoint)();
810
- if (toolCall.parameters.mode === 'user') {
811
- // Special case: when terminal command is run as a user command, then no need to reprompt assistant.
812
- this.responseComplete = true;
813
- isComplete = true;
814
- }
815
- if (toolCall.parameters.mode === 'assistant' &&
816
- toolCall.parameters.process_type === 'BACKGROUND') {
817
- this.oneTimeFlags[constants_2.SHOULD_ASK_CONFIG] = true;
818
- }
819
- }
820
- const toolResult = await (0, tool_handlers_1.handleToolCall)(toolCall);
821
- toolResults.push(toolResult);
822
- }
823
- catch (error) {
824
- logger_1.logger.error({
825
- errorMessage: error instanceof Error ? error.message : String(error),
826
- errorStack: error instanceof Error ? error.stack : undefined,
827
- toolCallName: toolCall.name,
828
- toolCallId: toolCall.id,
829
- }, 'Error parsing tool call');
830
- console.error('\n\n' +
831
- (0, picocolors_1.red)(`Error parsing tool call ${toolCall.name}:\n${error}`) +
832
- '\n');
833
- }
834
- }
835
- stepsCount++;
836
- toolCallsCount += a.toolCalls.length;
837
- if (a.toolCalls.length === 0 && a.toolResults.length === 0) {
838
- this.responseComplete = true;
839
- isComplete = true;
840
- }
841
- console.log('\n');
842
- // If we had any file changes, update the project context
843
- if (this.hadFileChanges) {
844
- this.fileContext = await (0, project_files_1.getProjectFileContext)((0, project_files_1.getProjectRoot)(), {});
845
- }
846
- if (this.filesChangedForHook.length > 0 && isComplete) {
847
- // Run file change hooks with the actual changed files
848
- const { toolResults: hookToolResults, someHooksFailed } = await (0, hooks_1.runFileChangeHooks)(this.filesChangedForHook);
849
- toolResults.push(...hookToolResults);
850
- if (someHooksFailed) {
851
- isComplete = false;
852
- }
853
- this.filesChangedForHook = [];
854
- }
855
- if (!isComplete) {
856
- // Append process updates to existing tool results
857
- toolResults.push(...(0, background_process_manager_1.getBackgroundProcessUpdates)());
858
- // Continue the prompt with the tool results.
859
- spinner_1.Spinner.get().start('Thinking');
860
- const continuePromptAction = {
861
- type: 'prompt',
862
- promptId: userInputId,
863
- prompt: undefined,
864
- agentState: this.agentState,
865
- toolResults,
866
- fingerprintId: await this.fingerprintId,
867
- authToken: this.user?.authToken,
868
- costMode: this.costMode,
869
- model: this.model,
870
- cwd: (0, project_files_1.getWorkingDirectory)(),
871
- repoUrl: logger_1.loggerContext.repoUrl,
872
- };
873
- this.webSocket.sendAction(continuePromptAction);
874
- return;
875
- }
876
- const endTime = Date.now();
877
- const latencyMs = endTime - startTime;
878
- (0, analytics_1.trackEvent)(analytics_events_1.AnalyticsEvent.USER_INPUT_COMPLETE, {
879
- userInputId,
880
- latencyMs,
881
- stepsCount,
882
- toolCallsCount,
883
- });
884
- this.lastToolResults = toolResults;
885
- xmlStreamParser.end();
886
- askConfig: if (this.oneTimeFlags[constants_2.SHOULD_ASK_CONFIG] &&
887
- !this.oneTimeFlags[constants_2.ASKED_CONFIG]) {
888
- this.oneTimeFlags[constants_2.ASKED_CONFIG] = true;
889
- if ((0, fs_1.existsSync)(path_1.default.join((0, project_files_1.getProjectRoot)(), constants_3.codebuffConfigFile))) {
890
- break askConfig;
891
- }
892
- console.log('\n\n' +
893
- (0, picocolors_1.yellow)(`✨ Recommended: run the 'init' command in order to create a configuration file!
894
-
895
- If you would like background processes (like this one) to run automatically whenever Codebuff starts, creating a ${constants_3.codebuffConfigFile} config file can improve your workflow.
896
- Go to https://www.codebuff.com/config for more information.`) +
897
- '\n');
898
- }
899
- if (this.agentState) {
900
- (0, chat_storage_1.setMessages)(this.agentState.messageHistory);
901
- }
902
- // Show total credits used for this prompt if significant
903
- const credits = this.creditsByPromptId[userInputId]?.reduce((a, b) => a + b, 0) ?? 0;
904
- if (credits >= constants_2.REQUEST_CREDIT_SHOW_THRESHOLD) {
905
- console.log(`\n\n${(0, string_1.pluralize)(credits, 'credit')} used for this request.`);
906
- }
907
- if (this.hadFileChanges) {
908
- let checkpointAddendum = '';
909
- try {
910
- checkpointAddendum = ` or "checkpoint ${checkpoint_manager_1.checkpointManager.getLatestCheckpoint().id}" to revert`;
911
- }
912
- catch (error) {
913
- // No latest checkpoint, don't show addendum
914
- logger_1.logger.info({
915
- errorMessage: error instanceof Error ? error.message : String(error),
916
- errorStack: error instanceof Error ? error.stack : undefined,
917
- }, 'No latest checkpoint for addendum');
918
- }
919
- console.log(`\n\nComplete! Type "diff" to review changes${checkpointAddendum}.\n`);
920
- this.hadFileChanges = false;
921
- this.freshPrompt();
922
- }
923
- unsubscribeChunks();
924
- unsubscribeComplete();
925
- resolveResponse({ ...a, wasStoppedByUser: false });
926
- });
927
- // Reset flags at the start of each response
928
- this.responseComplete = false;
929
- return {
930
- responsePromise,
931
- stopResponse,
932
- };
933
- }
934
- async getUsage() {
935
- try {
936
- // Check for organization coverage first
937
- const coverage = await this.checkRepositoryCoverage();
938
- const response = await fetch(`${config_1.backendUrl}/api/usage`, {
939
- method: 'POST',
940
- headers: {
941
- 'Content-Type': 'application/json',
942
- },
943
- body: JSON.stringify({
944
- fingerprintId: await this.fingerprintId,
945
- authToken: this.user?.authToken,
946
- ...(coverage.isCovered &&
947
- coverage.organizationId && { orgId: coverage.organizationId }),
948
- }),
949
- });
950
- const data = await response.json();
951
- // Use zod schema to validate response
952
- const parsedResponse = actions_1.UsageReponseSchema.parse(data);
953
- if (data.type === 'action-error') {
954
- console.error((0, picocolors_1.red)(data.message));
955
- logger_1.logger.error({
956
- errorMessage: data.message,
957
- }, 'Action error');
958
- return;
959
- }
960
- this.setUsage(parsedResponse);
961
- // Calculate session usage and total for display
962
- const totalCreditsUsedThisSession = Object.values(this.creditsByPromptId)
963
- .flat()
964
- .reduce((sum, credits) => sum + credits, 0);
965
- let sessionUsageMessage = `Session usage: ${totalCreditsUsedThisSession.toLocaleString()}`;
966
- if (this.usageData.remainingBalance !== null) {
967
- const remainingColor = this.usageData.remainingBalance === null
968
- ? picocolors_1.yellow
969
- : this.usageData.remainingBalance <= 0
970
- ? picocolors_1.red
971
- : this.usageData.remainingBalance <= LOW_BALANCE_THRESHOLD
972
- ? picocolors_1.red
973
- : picocolors_1.green;
974
- sessionUsageMessage += `. Credits Remaining: ${remainingColor(this.usageData.remainingBalance.toLocaleString())}`;
975
- }
976
- else {
977
- sessionUsageMessage += '.';
978
- }
979
- console.log(sessionUsageMessage);
980
- if (coverage.isCovered && coverage.organizationName) {
981
- // When covered by an organization, show organization information
982
- console.log((0, picocolors_1.green)(`🏢 Your usage in this repository is covered by ${(0, picocolors_1.bold)(coverage.organizationName)}.`));
983
- // Try to use organizationSlug from the coverage response
984
- if (coverage.organizationSlug) {
985
- const orgUsageLink = `${config_1.websiteUrl}/orgs/${coverage.organizationSlug}`;
986
- console.log(`View your organization's usage details: ${(0, picocolors_1.underline)((0, picocolors_1.blue)(orgUsageLink))}`);
987
- }
988
- }
989
- else {
990
- // Only show personal usage details when not covered by an organization
991
- const usageLink = `${config_1.websiteUrl}/usage`; // Personal usage link
992
- // Only show personal credit renewal if not covered by an organization
993
- if (this.usageData.next_quota_reset) {
994
- const resetDate = new Date(this.usageData.next_quota_reset);
995
- const today = new Date();
996
- const isToday = resetDate.toDateString() === today.toDateString();
997
- const dateDisplay = isToday
998
- ? resetDate.toLocaleString() // Show full date and time for today
999
- : resetDate.toLocaleDateString(); // Just show date otherwise
1000
- console.log(`Free credits will renew on ${dateDisplay}. Details: ${(0, picocolors_1.underline)((0, picocolors_1.blue)(usageLink))}`);
1001
- }
1002
- this.showUsageWarning();
1003
- }
1004
- }
1005
- catch (error) {
1006
- logger_1.logger.error({
1007
- errorMessage: error instanceof Error ? error.message : String(error),
1008
- errorStack: error instanceof Error ? error.stack : undefined,
1009
- }, 'Error checking usage');
1010
- console.error((0, picocolors_1.red)(`Error checking usage: Please reach out to ${process.env.NEXT_PUBLIC_SUPPORT_EMAIL} for help.`));
1011
- // Check if it's a ZodError for more specific feedback
1012
- if (error instanceof zod_1.z.ZodError) {
1013
- console.error((0, picocolors_1.red)('Data validation failed:'), error.errors);
1014
- logger_1.logger.error({
1015
- errorMessage: 'Data validation failed',
1016
- errors: error.errors,
1017
- }, 'Data validation failed');
1018
- }
1019
- else {
1020
- console.error(error);
1021
- logger_1.logger.error({
1022
- errorMessage: error instanceof Error ? error.message : String(error),
1023
- errorStack: error instanceof Error ? error.stack : undefined,
1024
- }, 'Error checking usage');
1025
- }
1026
- }
1027
- finally {
1028
- this.freshPrompt();
1029
- }
1030
- }
1031
- async warmContextCache() {
1032
- const fileContext = await (0, project_files_1.getProjectFileContext)((0, project_files_1.getProjectRoot)(), {});
1033
- if (!fileContext) {
1034
- throw new Error('Failed to initialize project file context');
1035
- }
1036
- this.webSocket.subscribe('init-response', (a) => {
1037
- const parsedAction = actions_1.InitResponseSchema.safeParse(a);
1038
- if (!parsedAction.success)
1039
- return;
1040
- // Set initial usage data from the init response
1041
- this.setUsage(parsedAction.data);
1042
- });
1043
- const initAction = {
1044
- type: 'init',
1045
- fingerprintId: await this.fingerprintId,
1046
- authToken: this.user?.authToken,
1047
- fileContext,
1048
- // Add repoUrl here as per the diff for client.ts
1049
- repoUrl: logger_1.loggerContext.repoUrl,
1050
- };
1051
- this.webSocket.sendAction(initAction);
1052
- await this.fetchStoredApiKeyTypes();
1053
- }
1054
- /**
1055
- * Checks if the current repository is covered by an organization.
1056
- * @param remoteUrl Optional remote URL. If not provided, will try to get from git config.
1057
- * @returns Promise<{ isCovered: boolean; organizationName?: string; organizationId?: string; organizationSlug?: string; error?: string }>
1058
- */
1059
- async checkRepositoryCoverage(remoteUrl) {
1060
- try {
1061
- // Always use getRepoMetrics to get repo info, passing remoteUrl if provided
1062
- let repoMetrics;
1063
- try {
1064
- repoMetrics = await (0, git_1.getRepoMetrics)(remoteUrl);
1065
- }
1066
- catch (error) {
1067
- return {
1068
- isCovered: false,
1069
- error: 'Could not get repository information',
1070
- };
1071
- }
1072
- const { repoUrl, owner, repo } = repoMetrics;
1073
- if (!repoUrl) {
1074
- return { isCovered: false, error: 'No remote URL found' };
1075
- }
1076
- if (!owner || !repo) {
1077
- return { isCovered: false, error: 'Could not parse repository URL' };
1078
- }
1079
- // Check if user is authenticated
1080
- if (!this.user || !this.user.authToken) {
1081
- return { isCovered: false, error: 'User not authenticated' };
1082
- }
1083
- // Call backend API to check if repo is covered by organization
1084
- const response = await fetch(`${config_1.backendUrl}/api/orgs/is-repo-covered`, {
1085
- method: 'POST',
1086
- headers: {
1087
- 'Content-Type': 'application/json',
1088
- Authorization: `Bearer ${this.user.authToken}`,
1089
- },
1090
- body: JSON.stringify({
1091
- owner: owner.toLowerCase(),
1092
- repo: repo.toLowerCase(),
1093
- remoteUrl: repoUrl,
1094
- }),
1095
- });
1096
- if (!response.ok) {
1097
- const errorData = await response.json().catch(() => ({}));
1098
- return {
1099
- isCovered: false,
1100
- error: errorData.error ||
1101
- `HTTP ${response.status}: ${response.statusText}`,
1102
- };
1103
- }
1104
- const data = await response.json();
1105
- return {
1106
- isCovered: data.isCovered || false,
1107
- organizationName: data.organizationName,
1108
- organizationId: data.organizationId,
1109
- organizationSlug: data.organizationSlug,
1110
- };
1111
- }
1112
- catch (error) {
1113
- logger_1.logger.error({
1114
- errorMessage: error instanceof Error ? error.message : String(error),
1115
- errorStack: error instanceof Error ? error.stack : undefined,
1116
- remoteUrl,
1117
- }, 'Error checking repository coverage');
1118
- return {
1119
- isCovered: false,
1120
- error: error instanceof Error ? error.message : 'Unknown error',
1121
- };
1122
- }
1123
- }
1124
- subscribeToManagerResponse(onChunk, userInputId, onStreamStart, prompt, startTime) {
1125
- const rawChunkBuffer = [];
1126
- this.responseBuffer = '';
1127
- let streamStarted = false;
1128
- let responseStopped = false;
1129
- let resolveResponse;
1130
- let rejectResponse;
1131
- let unsubscribeChunks;
1132
- let unsubscribeComplete;
1133
- const responsePromise = new Promise((resolve, reject) => {
1134
- resolveResponse = resolve;
1135
- rejectResponse = reject;
1136
- });
1137
- const stopResponse = () => {
1138
- responseStopped = true;
1139
- unsubscribeChunks();
1140
- unsubscribeComplete();
1141
- const additionalMessages = [
1142
- { role: 'user', content: prompt },
1143
- {
1144
- role: 'user',
1145
- content: `<system><assistant_message>${rawChunkBuffer.join('')}</assistant_message>[RESPONSE_CANCELED_BY_USER]</system>`,
1146
- },
1147
- ];
1148
- // Update the agent state with just the assistant's response
1149
- const { messageHistory } = this.agentState;
1150
- const newMessages = [...messageHistory, ...additionalMessages];
1151
- this.agentState = {
1152
- ...this.agentState,
1153
- messageHistory: newMessages,
1154
- };
1155
- (0, chat_storage_1.setMessages)(newMessages);
1156
- resolveResponse({
1157
- type: 'manager-prompt-response',
1158
- promptId: userInputId,
1159
- agentState: this.agentState,
1160
- toolCalls: [],
1161
- toolResults: [],
1162
- wasStoppedByUser: true,
1163
- });
1164
- };
1165
- const xmlStreamParser = (0, xml_stream_parser_1.createXMLStreamParser)(tool_renderers_1.toolRenderers, (chunk) => {
1166
- onChunk(chunk);
1167
- });
1168
- unsubscribeChunks = this.webSocket.subscribe('response-chunk', (a) => {
1169
- if (a.userInputId !== userInputId)
1170
- return;
1171
- const { chunk } = a;
1172
- rawChunkBuffer.push(chunk);
1173
- const trimmed = chunk.trim();
1174
- for (const tag of constants_2.ONE_TIME_TAGS) {
1175
- if (trimmed.startsWith(`<${tag}>`) && trimmed.endsWith(`</${tag}>`)) {
1176
- if (this.oneTimeFlags[tag]) {
1177
- return;
1178
- }
1179
- spinner_1.Spinner.get().stop();
1180
- const warningMessage = trimmed
1181
- .replace(`<${tag}>`, '')
1182
- .replace(`</${tag}>`, '');
1183
- process.stdout.write((0, picocolors_1.yellow)(`\n\n${warningMessage}\n\n`));
1184
- this.oneTimeFlags[tag] = true;
1185
- return;
1186
- }
1187
- }
1188
- if (chunk && chunk.trim()) {
1189
- if (!streamStarted && chunk.trim()) {
1190
- streamStarted = true;
1191
- onStreamStart();
1192
- }
1193
- }
1194
- try {
1195
- xmlStreamParser.write(chunk, 'utf8');
1196
- }
1197
- catch (e) {
1198
- // console.error('Error writing chunk', e)
1199
- }
1200
- });
1201
- let stepsCount = 0;
1202
- let toolCallsCount = 0;
1203
- unsubscribeComplete = this.webSocket.subscribe('manager-prompt-response', async (action) => {
1204
- const parsedAction = actions_1.ManagerPromptResponseSchema.safeParse(action);
1205
- if (!parsedAction.success) {
1206
- const message = [
1207
- 'Received invalid manager-prompt-response from server:',
1208
- JSON.stringify(parsedAction.error.errors),
1209
- 'If this issues persists, please contact support@codebuff.com',
1210
- ].join('\n');
1211
- console.error(message);
1212
- logger_1.logger.error(message, {
1213
- eventId: analytics_events_1.AnalyticsEvent.MALFORMED_PROMPT_RESPONSE,
1214
- });
1215
- return;
1216
- }
1217
- if (action.promptId !== userInputId)
1218
- return;
1219
- const a = parsedAction.data;
1220
- let isComplete = false;
1221
- spinner_1.Spinner.get().stop();
1222
- this.agentState = a.agentState;
1223
- const toolResults = [...a.toolResults];
1224
- for (const toolCall of a.toolCalls) {
1225
- try {
1226
- if (toolCall.name === 'end_turn') {
1227
- this.responseComplete = true;
1228
- isComplete = true;
1229
- continue;
1230
- }
1231
- if (toolCall.name === 'run_terminal_command') {
1232
- if (toolCall.parameters.mode === 'user') {
1233
- // Special case: when terminal command is run as a user command, then no need to reprompt assistant.
1234
- this.responseComplete = true;
1235
- isComplete = true;
1236
- }
1237
- }
1238
- const toolResult = await (0, tool_handlers_1.handleToolCall)(toolCall);
1239
- toolResults.push(toolResult);
1240
- }
1241
- catch (error) {
1242
- console.error('\n\n' +
1243
- (0, picocolors_1.red)(`Error parsing tool call ${toolCall.name}:\n${error}`) +
1244
- '\n');
1245
- }
1246
- }
1247
- stepsCount++;
1248
- toolCallsCount += a.toolCalls.length;
1249
- if (a.toolCalls.length === 0 && a.toolResults.length === 0) {
1250
- this.responseComplete = true;
1251
- isComplete = true;
1252
- }
1253
- console.log('\n');
1254
- // If we had any file changes, update the project context
1255
- if (this.hadFileChanges) {
1256
- this.fileContext = await (0, project_files_1.getProjectFileContext)((0, project_files_1.getProjectRoot)(), {});
1257
- }
1258
- if (!isComplete) {
1259
- // Append process updates to existing tool results
1260
- toolResults.push(...(0, background_process_manager_1.getBackgroundProcessUpdates)());
1261
- toolResults.push({
1262
- id: 'continued-terminal-output',
1263
- name: 'run_terminal_command',
1264
- result: (0, base_1.readNewTerminalOutput)(),
1265
- });
1266
- // Continue the prompt with the tool results.
1267
- spinner_1.Spinner.get().start('Thinking');
1268
- this.webSocket.sendAction({
1269
- type: 'manager-prompt',
1270
- promptId: userInputId,
1271
- prompt: undefined,
1272
- agentState: this.agentState,
1273
- toolResults,
1274
- fingerprintId: await this.fingerprintId,
1275
- authToken: this.user?.authToken,
1276
- costMode: this.costMode,
1277
- model: this.model,
1278
- repoName: logger_1.loggerContext.repoName,
1279
- });
1280
- return;
1281
- }
1282
- const endTime = Date.now();
1283
- const latencyMs = endTime - startTime;
1284
- (0, analytics_1.trackEvent)(analytics_events_1.AnalyticsEvent.USER_INPUT_COMPLETE, {
1285
- userInputId,
1286
- latencyMs,
1287
- stepsCount,
1288
- toolCallsCount,
1289
- });
1290
- this.lastToolResults = toolResults;
1291
- xmlStreamParser.end();
1292
- if (this.agentState) {
1293
- (0, chat_storage_1.setMessages)(this.agentState.messageHistory);
1294
- }
1295
- // Show total credits used for this prompt if significant
1296
- const credits = this.creditsByPromptId[userInputId]?.reduce((a, b) => a + b, 0) ?? 0;
1297
- if (credits >= constants_2.REQUEST_CREDIT_SHOW_THRESHOLD) {
1298
- console.log(`\n\n${(0, string_1.pluralize)(credits, 'credit')} used for this request.`);
1299
- }
1300
- if (this.hadFileChanges) {
1301
- let checkpointAddendum = '';
1302
- try {
1303
- checkpointAddendum = ` or "checkpoint ${checkpoint_manager_1.checkpointManager.getLatestCheckpoint().id}" to revert`;
1304
- }
1305
- catch (error) {
1306
- // No latest checkpoint, don't show addendum
1307
- }
1308
- console.log(`\n\nComplete! Type "diff" to review changes${checkpointAddendum}.\n`);
1309
- this.hadFileChanges = false;
1310
- this.freshPrompt();
1311
- }
1312
- unsubscribeChunks();
1313
- unsubscribeComplete();
1314
- resolveResponse({ ...a, wasStoppedByUser: false });
1315
- });
1316
- // Reset flags at the start of each response
1317
- this.responseComplete = false;
1318
- return {
1319
- responsePromise,
1320
- stopResponse,
1321
- };
1322
- }
1323
- }
1324
- exports.Client = Client;
1325
- //# sourceMappingURL=client.js.map