codecane 1.0.293 → 1.0.296

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 (300) hide show
  1. package/README.md +87 -0
  2. package/dist/background-process-manager.d.ts +50 -0
  3. package/dist/background-process-manager.js +359 -0
  4. package/dist/background-process-manager.js.map +1 -0
  5. package/dist/browser-runner.d.ts +35 -0
  6. package/dist/browser-runner.js +680 -0
  7. package/dist/browser-runner.js.map +1 -0
  8. package/dist/chat-storage.d.ts +2 -0
  9. package/dist/chat-storage.js +93 -0
  10. package/dist/chat-storage.js.map +1 -0
  11. package/dist/checkpoints/checkpoint-manager.d.ts +94 -0
  12. package/dist/checkpoints/checkpoint-manager.js +280 -0
  13. package/dist/checkpoints/checkpoint-manager.js.map +1 -0
  14. package/dist/checkpoints/file-manager.d.ts +72 -0
  15. package/dist/checkpoints/file-manager.js +294 -0
  16. package/dist/checkpoints/file-manager.js.map +1 -0
  17. package/dist/cli-handlers/api-key.d.ts +25 -0
  18. package/dist/cli-handlers/api-key.js +66 -0
  19. package/dist/cli-handlers/api-key.js.map +1 -0
  20. package/dist/cli-handlers/checkpoint.d.ts +18 -0
  21. package/dist/cli-handlers/checkpoint.js +195 -0
  22. package/dist/cli-handlers/checkpoint.js.map +1 -0
  23. package/dist/cli-handlers/diff.d.ts +2 -0
  24. package/dist/cli-handlers/diff.js +31 -0
  25. package/dist/cli-handlers/diff.js.map +1 -0
  26. package/dist/cli-handlers/easter-egg.d.ts +1 -0
  27. package/dist/cli-handlers/easter-egg.js +126 -0
  28. package/dist/cli-handlers/easter-egg.js.map +1 -0
  29. package/dist/cli-handlers/inititalization-flow.d.ts +1 -0
  30. package/dist/cli-handlers/inititalization-flow.js +24 -0
  31. package/dist/cli-handlers/inititalization-flow.js.map +1 -0
  32. package/dist/cli.d.ts +44 -0
  33. package/dist/cli.js +494 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/client.d.ts +151 -0
  36. package/dist/client.js +835 -0
  37. package/dist/client.js.map +1 -0
  38. package/dist/code-map/languages.d.ts +13 -0
  39. package/dist/code-map/languages.d.ts.map +1 -0
  40. package/dist/code-map/languages.js +129 -0
  41. package/dist/code-map/languages.js.map +1 -0
  42. package/dist/code-map/parse.d.ts +12 -0
  43. package/dist/code-map/parse.d.ts.map +1 -0
  44. package/dist/code-map/parse.js +127 -0
  45. package/dist/code-map/parse.js.map +1 -0
  46. package/dist/code-map/test-langs/test.d.ts +12 -0
  47. package/dist/code-map/test-langs/test.d.ts.map +1 -0
  48. package/dist/code-map/test-langs/test.js +23 -0
  49. package/dist/code-map/test-langs/test.js.map +1 -0
  50. package/dist/code-map/tree-sitter-queries/readme.md +23 -0
  51. package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +11 -0
  52. package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +13 -0
  53. package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +17 -0
  54. package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +26 -0
  55. package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +19 -0
  56. package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +15 -0
  57. package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +26 -0
  58. package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +9 -0
  59. package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +58 -0
  60. package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +26 -0
  61. package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +15 -0
  62. package/dist/code-map/tsconfig.tsbuildinfo +1 -0
  63. package/dist/common/actions.d.ts +2592 -0
  64. package/dist/common/actions.js +144 -0
  65. package/dist/common/actions.js.map +1 -0
  66. package/dist/common/analytics.d.ts +4 -0
  67. package/dist/common/analytics.js +40 -0
  68. package/dist/common/analytics.js.map +1 -0
  69. package/dist/common/api-keys/constants.d.ts +8 -0
  70. package/dist/common/api-keys/constants.js +26 -0
  71. package/dist/common/api-keys/constants.js.map +1 -0
  72. package/dist/common/api-keys/crypto.d.ts +24 -0
  73. package/dist/common/api-keys/crypto.js +186 -0
  74. package/dist/common/api-keys/crypto.js.map +1 -0
  75. package/dist/common/browser-actions.d.ts +4415 -0
  76. package/dist/common/browser-actions.js +343 -0
  77. package/dist/common/browser-actions.js.map +1 -0
  78. package/dist/common/constants/analytics-events.d.ts +19 -0
  79. package/dist/common/constants/analytics-events.js +27 -0
  80. package/dist/common/constants/analytics-events.js.map +1 -0
  81. package/dist/common/constants/grant-priorities.d.ts +2 -0
  82. package/dist/common/constants/grant-priorities.js +10 -0
  83. package/dist/common/constants/grant-priorities.js.map +1 -0
  84. package/dist/common/constants/tools.d.ts +17 -0
  85. package/dist/common/constants/tools.js +45 -0
  86. package/dist/common/constants/tools.js.map +1 -0
  87. package/dist/common/constants.d.ts +134 -0
  88. package/dist/common/constants.js +180 -0
  89. package/dist/common/constants.js.map +1 -0
  90. package/dist/common/db/drizzle.config.d.ts +2 -0
  91. package/dist/common/db/drizzle.config.js +17 -0
  92. package/dist/common/db/drizzle.config.js.map +1 -0
  93. package/dist/common/db/env.d.mts +1 -0
  94. package/dist/common/db/env.mjs +26 -0
  95. package/dist/common/db/env.mjs.map +1 -0
  96. package/dist/common/db/index.d.ts +6 -0
  97. package/dist/common/db/index.js +35 -0
  98. package/dist/common/db/index.js.map +1 -0
  99. package/dist/common/db/schema.d.ts +1419 -0
  100. package/dist/common/db/schema.js +175 -0
  101. package/dist/common/db/schema.js.map +1 -0
  102. package/dist/common/db/transaction.d.ts +12 -0
  103. package/dist/common/db/transaction.js +36 -0
  104. package/dist/common/db/transaction.js.map +1 -0
  105. package/dist/common/env.d.mts +1 -0
  106. package/dist/common/env.mjs +40 -0
  107. package/dist/common/env.mjs.map +1 -0
  108. package/dist/common/json-config/__tests__/stringify-schema.test.d.ts +1 -0
  109. package/dist/common/json-config/__tests__/stringify-schema.test.js +66 -0
  110. package/dist/common/json-config/__tests__/stringify-schema.test.js.map +1 -0
  111. package/dist/common/json-config/constants.d.ts +82 -0
  112. package/dist/common/json-config/constants.js +48 -0
  113. package/dist/common/json-config/constants.js.map +1 -0
  114. package/dist/common/json-config/parser.d.ts +7 -0
  115. package/dist/common/json-config/parser.js +51 -0
  116. package/dist/common/json-config/parser.js.map +1 -0
  117. package/dist/common/json-config/stringify-schema.d.ts +9 -0
  118. package/dist/common/json-config/stringify-schema.js +131 -0
  119. package/dist/common/json-config/stringify-schema.js.map +1 -0
  120. package/dist/common/project-file-tree.d.ts +11 -0
  121. package/dist/common/project-file-tree.js +200 -0
  122. package/dist/common/project-file-tree.js.map +1 -0
  123. package/dist/common/types/agent-state.d.ts +464 -0
  124. package/dist/common/types/agent-state.js +32 -0
  125. package/dist/common/types/agent-state.js.map +1 -0
  126. package/dist/common/types/grant.d.ts +2 -0
  127. package/dist/common/types/grant.js +10 -0
  128. package/dist/common/types/grant.js.map +1 -0
  129. package/dist/common/types/message.d.ts +311 -0
  130. package/dist/common/types/message.js +54 -0
  131. package/dist/common/types/message.js.map +1 -0
  132. package/dist/common/types/referral.d.ts +2 -0
  133. package/dist/common/types/referral.js +5 -0
  134. package/dist/common/types/referral.js.map +1 -0
  135. package/dist/common/types/tools.d.ts +5 -0
  136. package/dist/common/types/tools.js +3 -0
  137. package/dist/common/types/tools.js.map +1 -0
  138. package/dist/common/types/usage.d.ts +40 -0
  139. package/dist/common/types/usage.js +15 -0
  140. package/dist/common/types/usage.js.map +1 -0
  141. package/dist/common/util/__tests__/messages.test.d.ts +1 -0
  142. package/dist/common/util/__tests__/messages.test.js +70 -0
  143. package/dist/common/util/__tests__/messages.test.js.map +1 -0
  144. package/dist/common/util/__tests__/saxy.test.d.ts +1 -0
  145. package/dist/common/util/__tests__/saxy.test.js +387 -0
  146. package/dist/common/util/__tests__/saxy.test.js.map +1 -0
  147. package/dist/common/util/__tests__/string.test.d.ts +1 -0
  148. package/dist/common/util/__tests__/string.test.js +82 -0
  149. package/dist/common/util/__tests__/string.test.js.map +1 -0
  150. package/dist/common/util/array.d.ts +6 -0
  151. package/dist/common/util/array.js +32 -0
  152. package/dist/common/util/array.js.map +1 -0
  153. package/dist/common/util/changes.d.ts +7 -0
  154. package/dist/common/util/changes.js +78 -0
  155. package/dist/common/util/changes.js.map +1 -0
  156. package/dist/common/util/credentials.d.ts +25 -0
  157. package/dist/common/util/credentials.js +24 -0
  158. package/dist/common/util/credentials.js.map +1 -0
  159. package/dist/common/util/currency.d.ts +14 -0
  160. package/dist/common/util/currency.js +23 -0
  161. package/dist/common/util/currency.js.map +1 -0
  162. package/dist/common/util/dates.d.ts +10 -0
  163. package/dist/common/util/dates.js +22 -0
  164. package/dist/common/util/dates.js.map +1 -0
  165. package/dist/common/util/file.d.ts +159 -0
  166. package/dist/common/util/file.js +192 -0
  167. package/dist/common/util/file.js.map +1 -0
  168. package/dist/common/util/git.d.ts +6 -0
  169. package/dist/common/util/git.js +81 -0
  170. package/dist/common/util/git.js.map +1 -0
  171. package/dist/common/util/logger.d.ts +8 -0
  172. package/dist/common/util/logger.js +52 -0
  173. package/dist/common/util/logger.js.map +1 -0
  174. package/dist/common/util/lru-cache.d.ts +30 -0
  175. package/dist/common/util/lru-cache.js +68 -0
  176. package/dist/common/util/lru-cache.js.map +1 -0
  177. package/dist/common/util/messages.d.ts +9 -0
  178. package/dist/common/util/messages.js +69 -0
  179. package/dist/common/util/messages.js.map +1 -0
  180. package/dist/common/util/min-heap.d.ts +15 -0
  181. package/dist/common/util/min-heap.js +73 -0
  182. package/dist/common/util/min-heap.js.map +1 -0
  183. package/dist/common/util/object.d.ts +18 -0
  184. package/dist/common/util/object.js +91 -0
  185. package/dist/common/util/object.js.map +1 -0
  186. package/dist/common/util/patch.d.ts +1 -0
  187. package/dist/common/util/patch.js +215 -0
  188. package/dist/common/util/patch.js.map +1 -0
  189. package/dist/common/util/promise.d.ts +17 -0
  190. package/dist/common/util/promise.js +80 -0
  191. package/dist/common/util/promise.js.map +1 -0
  192. package/dist/common/util/referral.d.ts +1 -0
  193. package/dist/common/util/referral.js +6 -0
  194. package/dist/common/util/referral.js.map +1 -0
  195. package/dist/common/util/saxy.d.ts +164 -0
  196. package/dist/common/util/saxy.js +503 -0
  197. package/dist/common/util/saxy.js.map +1 -0
  198. package/dist/common/util/string.d.ts +61 -0
  199. package/dist/common/util/string.js +220 -0
  200. package/dist/common/util/string.js.map +1 -0
  201. package/dist/common/util/stripe.d.ts +3 -0
  202. package/dist/common/util/stripe.js +22 -0
  203. package/dist/common/util/stripe.js.map +1 -0
  204. package/dist/common/util/sync-failure.d.ts +1 -0
  205. package/dist/common/util/sync-failure.js +57 -0
  206. package/dist/common/util/sync-failure.js.map +1 -0
  207. package/dist/common/websockets/websocket-client.d.ts +42 -0
  208. package/dist/common/websockets/websocket-client.js +216 -0
  209. package/dist/common/websockets/websocket-client.js.map +1 -0
  210. package/dist/common/websockets/websocket-schema.d.ts +4876 -0
  211. package/dist/common/websockets/websocket-schema.js +55 -0
  212. package/dist/common/websockets/websocket-schema.js.map +1 -0
  213. package/dist/config.d.ts +4 -0
  214. package/dist/config.js +12 -0
  215. package/dist/config.js.map +1 -0
  216. package/dist/create-template-project.d.ts +1 -0
  217. package/dist/create-template-project.js +107 -0
  218. package/dist/create-template-project.js.map +1 -0
  219. package/dist/credentials.d.ts +4 -0
  220. package/dist/credentials.js +38 -0
  221. package/dist/credentials.js.map +1 -0
  222. package/dist/dev-process-manager.d.ts +10 -0
  223. package/dist/dev-process-manager.js +55 -0
  224. package/dist/dev-process-manager.js.map +1 -0
  225. package/dist/display.d.ts +9 -0
  226. package/dist/display.js +68 -0
  227. package/dist/display.js.map +1 -0
  228. package/dist/fingerprint.d.ts +1 -0
  229. package/dist/fingerprint.js +48 -0
  230. package/dist/fingerprint.js.map +1 -0
  231. package/dist/index.d.ts +2 -0
  232. package/dist/index.js +130 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/menu.d.ts +3 -0
  235. package/dist/menu.js +170 -0
  236. package/dist/menu.js.map +1 -0
  237. package/dist/project-files.d.ts +129 -0
  238. package/dist/project-files.js +556 -0
  239. package/dist/project-files.js.map +1 -0
  240. package/dist/startup-process-handler.d.ts +2 -0
  241. package/dist/startup-process-handler.js +21 -0
  242. package/dist/startup-process-handler.js.map +1 -0
  243. package/dist/tool-handlers.d.ts +30 -0
  244. package/dist/tool-handlers.js +245 -0
  245. package/dist/tool-handlers.js.map +1 -0
  246. package/dist/types.d.ts +15 -0
  247. package/dist/types.js +3 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/update-codebuff.d.ts +1 -0
  250. package/dist/update-codebuff.js +161 -0
  251. package/dist/update-codebuff.js.map +1 -0
  252. package/dist/utils/__tests__/background-process-manager.test.d.ts +1 -0
  253. package/dist/utils/__tests__/background-process-manager.test.js +327 -0
  254. package/dist/utils/__tests__/background-process-manager.test.js.map +1 -0
  255. package/dist/utils/__tests__/response-example-4-files.txt +621 -0
  256. package/dist/utils/__tests__/tool-renderers.test.d.ts +1 -0
  257. package/dist/utils/__tests__/tool-renderers.test.js +51 -0
  258. package/dist/utils/__tests__/tool-renderers.test.js.map +1 -0
  259. package/dist/utils/__tests__/xml-stream-parser.test.d.ts +1 -0
  260. package/dist/utils/__tests__/xml-stream-parser.test.js +229 -0
  261. package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
  262. package/dist/utils/analytics.d.ts +6 -0
  263. package/dist/utils/analytics.js +83 -0
  264. package/dist/utils/analytics.js.map +1 -0
  265. package/dist/utils/detect-shell.d.ts +1 -0
  266. package/dist/utils/detect-shell.js +60 -0
  267. package/dist/utils/detect-shell.js.map +1 -0
  268. package/dist/utils/git.d.ts +2 -0
  269. package/dist/utils/git.js +40 -0
  270. package/dist/utils/git.js.map +1 -0
  271. package/dist/utils/logger.d.ts +21 -0
  272. package/dist/utils/logger.js +105 -0
  273. package/dist/utils/logger.js.map +1 -0
  274. package/dist/utils/spinner.d.ts +11 -0
  275. package/dist/utils/spinner.js +87 -0
  276. package/dist/utils/spinner.js.map +1 -0
  277. package/dist/utils/system-info.d.ts +8 -0
  278. package/dist/utils/system-info.js +22 -0
  279. package/dist/utils/system-info.js.map +1 -0
  280. package/dist/utils/terminal.d.ts +43 -0
  281. package/dist/utils/terminal.js +546 -0
  282. package/dist/utils/terminal.js.map +1 -0
  283. package/dist/utils/tool-renderers.d.ts +16 -0
  284. package/dist/utils/tool-renderers.js +163 -0
  285. package/dist/utils/tool-renderers.js.map +1 -0
  286. package/dist/utils/xml-stream-parser.d.ts +9 -0
  287. package/dist/utils/xml-stream-parser.js +128 -0
  288. package/dist/utils/xml-stream-parser.js.map +1 -0
  289. package/dist/web-scraper.d.ts +3 -0
  290. package/dist/web-scraper.js +57 -0
  291. package/dist/web-scraper.js.map +1 -0
  292. package/dist/workers/checkpoint-worker.d.ts +1 -0
  293. package/dist/workers/checkpoint-worker.js +48 -0
  294. package/dist/workers/checkpoint-worker.js.map +1 -0
  295. package/dist/workers/project-context.d.ts +1 -0
  296. package/dist/workers/project-context.js +20 -0
  297. package/dist/workers/project-context.js.map +1 -0
  298. package/package.json +69 -22
  299. package/bin/launcher.js +0 -21
  300. package/scripts/postinstall.js +0 -100
@@ -0,0 +1,229 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const stream_1 = require("stream");
9
+ // @ts-ignore
10
+ const bun_test_1 = require("bun:test");
11
+ const tools_1 = require("../../common/constants/tools");
12
+ const strip_ansi_1 = __importDefault(require("strip-ansi"));
13
+ const tool_renderers_1 = require("../tool-renderers");
14
+ const xml_stream_parser_1 = require("../xml-stream-parser");
15
+ const toolRenderers = {
16
+ run_terminal_command: tool_renderers_1.defaultToolCallRenderer,
17
+ write_file: tool_renderers_1.defaultToolCallRenderer,
18
+ read_files: tool_renderers_1.defaultToolCallRenderer,
19
+ };
20
+ (0, bun_test_1.describe)('Saxy Stream Processor', () => {
21
+ (0, bun_test_1.test)('pipes output to writable stream', async () => {
22
+ const xml = (0, tools_1.getToolCallString)('run_terminal_command', {
23
+ command: 'echo hello',
24
+ });
25
+ let result = '';
26
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
27
+ const writable = new stream_1.Writable({
28
+ write(chunk, encoding, callback) {
29
+ result += chunk.toString();
30
+ callback();
31
+ },
32
+ });
33
+ processor.pipe(writable);
34
+ processor.write(xml);
35
+ processor.end();
36
+ // Wait for the stream to finish
37
+ await new Promise((resolve) => {
38
+ writable.on('finish', resolve);
39
+ });
40
+ (0, bun_test_1.expect)(result).toContain('Run Terminal Command');
41
+ (0, bun_test_1.expect)(result).toContain('echo hello');
42
+ });
43
+ (0, bun_test_1.test)('handles multiple tool calls in sequence', async () => {
44
+ const xml = (0, tools_1.getToolCallString)('run_terminal_command', { command: 'ls' }) +
45
+ (0, tools_1.getToolCallString)('read_files', { paths: 'file.txt' });
46
+ let result = '';
47
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
48
+ const writable = new stream_1.Writable({
49
+ write(chunk, encoding, callback) {
50
+ result += chunk.toString();
51
+ callback();
52
+ },
53
+ });
54
+ processor.pipe(writable);
55
+ processor.write(xml);
56
+ processor.end();
57
+ // Wait for the stream to finish
58
+ await new Promise((resolve) => {
59
+ writable.on('finish', resolve);
60
+ });
61
+ (0, bun_test_1.expect)(result).toContain('Run Terminal Command');
62
+ (0, bun_test_1.expect)(result).toContain('ls');
63
+ (0, bun_test_1.expect)(result).toContain('Read Files');
64
+ (0, bun_test_1.expect)(result).toContain('file.txt');
65
+ });
66
+ (0, bun_test_1.test)('handles text content between tool calls', async () => {
67
+ const xml = (0, tools_1.getToolCallString)('run_terminal_command', { command: 'ls' }) +
68
+ 'Some text between tool calls' +
69
+ (0, tools_1.getToolCallString)('read_files', { paths: 'file.txt' });
70
+ let result = '';
71
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
72
+ const writable = new stream_1.Writable({
73
+ write(chunk, encoding, callback) {
74
+ result += chunk.toString();
75
+ callback();
76
+ },
77
+ });
78
+ processor.pipe(writable);
79
+ processor.write(xml);
80
+ processor.end();
81
+ // Wait for the stream to finish
82
+ await new Promise((resolve) => {
83
+ writable.on('finish', resolve);
84
+ });
85
+ (0, bun_test_1.expect)(result).toContain('Run Terminal Command');
86
+ (0, bun_test_1.expect)(result).toContain('ls');
87
+ (0, bun_test_1.expect)(result).toContain('Some text between tool calls');
88
+ (0, bun_test_1.expect)(result).toContain('Read Files');
89
+ (0, bun_test_1.expect)(result).toContain('file.txt');
90
+ });
91
+ (0, bun_test_1.test)('processes chunks incrementally with output verification', async () => {
92
+ // Define chunks that will be written one at a time
93
+ const terminalCommand = (0, tools_1.getToolCallString)('run_terminal_command', {
94
+ command: 'npm install',
95
+ });
96
+ const codeSearch = (0, tools_1.getToolCallString)('code_search', { pattern: 'function' });
97
+ // Split the XML into chunks
98
+ const chunks = [
99
+ terminalCommand.slice(0, 15),
100
+ terminalCommand.slice(15, 30),
101
+ terminalCommand.slice(30, 40),
102
+ terminalCommand.slice(40, 50),
103
+ terminalCommand.slice(50),
104
+ codeSearch.slice(0, 15),
105
+ codeSearch.slice(15),
106
+ ];
107
+ // Array to store output chunks as they're produced
108
+ const outputChunks = [];
109
+ // Create a writable stream that captures each output chunk
110
+ const writable = new stream_1.Writable({
111
+ write(chunk, encoding, callback) {
112
+ const chunkStr = chunk.toString();
113
+ outputChunks.push(chunkStr);
114
+ callback();
115
+ },
116
+ });
117
+ // Create the processor
118
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
119
+ processor.pipe(writable);
120
+ // Process each chunk with a small delay between them
121
+ for (const chunk of chunks) {
122
+ processor.write(chunk);
123
+ // Small delay to simulate real-world streaming
124
+ await new Promise((resolve) => setTimeout(resolve, 5));
125
+ }
126
+ processor.end();
127
+ // Wait for the stream to finish
128
+ await new Promise((resolve) => {
129
+ writable.on('finish', resolve);
130
+ });
131
+ // Verify the complete output
132
+ const fullOutput = (0, strip_ansi_1.default)(outputChunks.join(''));
133
+ (0, bun_test_1.expect)(fullOutput).toContain('Run Terminal Command');
134
+ (0, bun_test_1.expect)(fullOutput).toContain('npm install');
135
+ (0, bun_test_1.expect)(fullOutput).toContain('Code Search');
136
+ (0, bun_test_1.expect)(fullOutput).toContain('function');
137
+ // Verify incremental output - but don't make assumptions about which chunks contain what
138
+ // Just check that we got multiple output chunks (incremental processing)
139
+ (0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
140
+ // Check that the terminal command appears before the code search in the output
141
+ const terminalCommandIndex = fullOutput.indexOf('Run Terminal Command');
142
+ const codeSearchIndex = fullOutput.indexOf('Code Search');
143
+ (0, bun_test_1.expect)(terminalCommandIndex).toBeLessThan(codeSearchIndex);
144
+ });
145
+ (0, bun_test_1.test)('processes text content incrementally', async () => {
146
+ // Define chunks that will be written one at a time
147
+ const chunks = ['hi', 'hi2', 'hi3 <yo>\nyo\n</yo>'];
148
+ // Array to store output chunks as they're produced
149
+ const outputChunks = [];
150
+ // Create a writable stream that captures each output chunk
151
+ const writable = new stream_1.Writable({
152
+ write(chunk, encoding, callback) {
153
+ const chunkStr = chunk.toString();
154
+ outputChunks.push(chunkStr);
155
+ callback();
156
+ },
157
+ });
158
+ // Create the processor
159
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
160
+ processor.pipe(writable);
161
+ // Process each chunk with a small delay between them
162
+ for (const chunk of chunks) {
163
+ processor.write(chunk);
164
+ // Small delay to simulate real-world streaming
165
+ await new Promise((resolve) => setTimeout(resolve, 5));
166
+ }
167
+ processor.end();
168
+ // Wait for the stream to finish
169
+ await new Promise((resolve) => {
170
+ writable.on('finish', resolve);
171
+ });
172
+ // Verify the complete output
173
+ const fullOutput = outputChunks.join('');
174
+ (0, bun_test_1.expect)(fullOutput).toEqual('hihi2hi3 <yo>\nyo\n</yo>');
175
+ (0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(3);
176
+ });
177
+ (0, bun_test_1.test)('real world example write to 4 files', async () => {
178
+ // Read the file content directly - no need for complex unescaping
179
+ const response = fs_1.default.readFileSync(path_1.default.join(__dirname, './response-example-4-files.txt'), 'utf-8');
180
+ // Array to store output chunks as they're produced
181
+ const outputChunks = [];
182
+ // Create a writable stream that captures each output chunk
183
+ const writable = new stream_1.Writable({
184
+ write(chunk, encoding, callback) {
185
+ const chunkStr = chunk.toString();
186
+ outputChunks.push(chunkStr);
187
+ callback();
188
+ },
189
+ });
190
+ let writeFileStartCount = 0;
191
+ let writeFileEndCount = 0;
192
+ const testToolRenderers = {
193
+ ...toolRenderers,
194
+ write_file: {
195
+ ...tool_renderers_1.defaultToolCallRenderer,
196
+ onToolStart: (toolName) => {
197
+ writeFileStartCount++;
198
+ return 'Write File';
199
+ },
200
+ onParamStart: (paramName, toolName) => {
201
+ return null;
202
+ },
203
+ onParamEnd: (paramName, toolName, content) => {
204
+ return null;
205
+ },
206
+ onToolEnd: (toolName, params) => {
207
+ writeFileEndCount++;
208
+ return null;
209
+ },
210
+ },
211
+ };
212
+ // Create the processor
213
+ const processor = (0, xml_stream_parser_1.createXMLStreamParser)(testToolRenderers);
214
+ processor.pipe(writable);
215
+ processor.write(response);
216
+ processor.end();
217
+ // Wait for the stream to finish
218
+ await new Promise((resolve) => {
219
+ writable.on('finish', resolve);
220
+ });
221
+ // Verify the complete output
222
+ const fullOutput = outputChunks.join('');
223
+ (0, bun_test_1.expect)(fullOutput).toContain('Write File'); // Check for expected output without worrying about formatting
224
+ (0, bun_test_1.expect)(writeFileEndCount).toBe(4);
225
+ // We expect multiple chunks for a large response
226
+ (0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
227
+ });
228
+ });
229
+ //# sourceMappingURL=xml-stream-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-stream-parser.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/xml-stream-parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { AnalyticsEvent } from '../common/constants/analytics-events';
2
+ export declare let identified: boolean;
3
+ export declare function initAnalytics(): void;
4
+ export declare function flushAnalytics(): Promise<void>;
5
+ export declare function trackEvent(event: AnalyticsEvent, properties?: Record<string, any>): void;
6
+ export declare function identifyUser(userId: string, properties?: Record<string, any>): void;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.identified = void 0;
4
+ exports.initAnalytics = initAnalytics;
5
+ exports.flushAnalytics = flushAnalytics;
6
+ exports.trackEvent = trackEvent;
7
+ exports.identifyUser = identifyUser;
8
+ const posthog_node_1 = require("posthog-node");
9
+ // Prints the events to console
10
+ // It's very noisy, so recommended you set this to true
11
+ // only when you're actively adding new analytics
12
+ let DEBUG_DEV_EVENTS = false;
13
+ // Store the identified user ID
14
+ let currentUserId;
15
+ let client;
16
+ exports.identified = false;
17
+ function initAnalytics() {
18
+ if (!process.env.NEXT_PUBLIC_POSTHOG_API_KEY ||
19
+ !process.env.NEXT_PUBLIC_APP_URL) {
20
+ throw new Error('NEXT_PUBLIC_POSTHOG_API_KEY or NEXT_PUBLIC_APP_URL is not set');
21
+ }
22
+ client = new posthog_node_1.PostHog(process.env.NEXT_PUBLIC_POSTHOG_API_KEY, {
23
+ host: `${process.env.NEXT_PUBLIC_APP_URL}/ingest`,
24
+ });
25
+ }
26
+ async function flushAnalytics() {
27
+ if (!client) {
28
+ return;
29
+ }
30
+ try {
31
+ await client.flush();
32
+ }
33
+ catch (error) {
34
+ // Silently handle PostHog network errors
35
+ if (DEBUG_DEV_EVENTS) {
36
+ console.error('PostHog error:', error);
37
+ }
38
+ }
39
+ }
40
+ function trackEvent(event, properties) {
41
+ const distinctId = currentUserId;
42
+ if (!distinctId) {
43
+ return;
44
+ }
45
+ if (!client) {
46
+ throw new Error('Analytics client not initialized');
47
+ }
48
+ if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'production') {
49
+ if (DEBUG_DEV_EVENTS) {
50
+ console.log('Analytics event sent', {
51
+ event,
52
+ properties,
53
+ });
54
+ }
55
+ return;
56
+ }
57
+ client.capture({
58
+ distinctId,
59
+ event,
60
+ properties,
61
+ });
62
+ }
63
+ function identifyUser(userId, properties) {
64
+ // Store the user ID for future events
65
+ currentUserId = userId;
66
+ if (!client) {
67
+ throw new Error('Analytics client not initialized');
68
+ }
69
+ if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'production') {
70
+ if (DEBUG_DEV_EVENTS) {
71
+ console.log('Identify event sent', {
72
+ userId,
73
+ properties,
74
+ });
75
+ }
76
+ return;
77
+ }
78
+ client.identify({
79
+ distinctId: userId,
80
+ properties,
81
+ });
82
+ }
83
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":";;;AAcA,sCAaC;AAED,wCAYC;AAED,gCA2BC;AAED,oCAsBC;AA7FD,+CAAsC;AAEtC,+BAA+B;AAC/B,uDAAuD;AACvD,iDAAiD;AACjD,IAAI,gBAAgB,GAAG,KAAK,CAAA;AAE5B,+BAA+B;AAC/B,IAAI,aAAiC,CAAA;AACrC,IAAI,MAA2B,CAAA;AAEpB,QAAA,UAAU,GAAY,KAAK,CAAA;AAEtC,SAAgB,aAAa;IAC3B,IACE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACxC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAChC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAA;IACH,CAAC;IAED,MAAM,GAAG,IAAI,sBAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;QAC5D,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS;KAClD,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yCAAyC;QACzC,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CACxB,KAAqB,EACrB,UAAgC;IAEhC,MAAM,UAAU,GAAG,aAAa,CAAA;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,YAAY,EAAE,CAAC;QAC5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE;gBAClC,KAAK;gBACL,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,CAAC;QACb,UAAU;QACV,KAAK;QACL,UAAU;KACX,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc,EAAE,UAAgC;IAC3E,sCAAsC;IACtC,aAAa,GAAG,MAAM,CAAA;IAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,YAAY,EAAE,CAAC;QAC5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;gBACjC,MAAM;gBACN,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC;QACd,UAAU,EAAE,MAAM;QAClB,UAAU;KACX,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function detectShell(): 'bash' | 'zsh' | 'fish' | 'cmd.exe' | 'powershell' | 'unknown' | string;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectShell = detectShell;
4
+ const os_1 = require("os");
5
+ const child_process_1 = require("child_process");
6
+ function detectShell() {
7
+ // Get the parent process environment
8
+ const shell = process.env.SHELL || process.env.COMSPEC || process.env.PSModulePath;
9
+ try {
10
+ // Handle Windows detection
11
+ if ((0, os_1.platform)() === 'win32') {
12
+ try {
13
+ // Check if running in PowerShell
14
+ (0, child_process_1.execSync)('$PSVersionTable', { stdio: 'pipe' });
15
+ return 'powershell';
16
+ }
17
+ catch {
18
+ // Check explicit CMD environment
19
+ if (process.env.COMSPEC?.toLowerCase().includes('cmd.exe')) {
20
+ return 'cmd.exe';
21
+ }
22
+ // Check parent process as final Windows check
23
+ const parentProcess = (0, child_process_1.execSync)('wmic process get ParentProcessId,CommandLine', { stdio: 'pipe' })
24
+ .toString()
25
+ .toLowerCase();
26
+ if (parentProcess.includes('powershell'))
27
+ return 'powershell';
28
+ if (parentProcess.includes('cmd.exe'))
29
+ return 'cmd.exe';
30
+ }
31
+ }
32
+ // Handle Unix-like systems
33
+ if (shell) {
34
+ const shellLower = shell.toLowerCase();
35
+ if (shellLower.includes('bash'))
36
+ return 'bash';
37
+ if (shellLower.includes('zsh'))
38
+ return 'zsh';
39
+ if (shellLower.includes('fish'))
40
+ return 'fish';
41
+ }
42
+ // Try to get the parent process name on Unix systems
43
+ if ((0, os_1.platform)() !== 'win32') {
44
+ const ppid = process.ppid;
45
+ const parentProcess = (0, child_process_1.execSync)(`ps -p ${ppid} -o comm=`, {
46
+ stdio: 'pipe',
47
+ })
48
+ .toString()
49
+ .trim();
50
+ if (parentProcess)
51
+ return parentProcess;
52
+ }
53
+ }
54
+ catch (error) {
55
+ // Log error if needed
56
+ // console.error('Error detecting shell:', error);
57
+ }
58
+ return 'unknown';
59
+ }
60
+ //# sourceMappingURL=detect-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-shell.js","sourceRoot":"","sources":["../../src/utils/detect-shell.ts"],"names":[],"mappings":";;AAGA,kCA6DC;AAhED,2BAA6B;AAC7B,iDAAwC;AAExC,SAAgB,WAAW;IAQzB,qCAAqC;IACrC,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAEtE,IAAI,CAAC;QACH,2BAA2B;QAC3B,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,iCAAiC;gBACjC,IAAA,wBAAQ,EAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC9C,OAAO,YAAY,CAAA;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3D,OAAO,SAAS,CAAA;gBAClB,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,aAAa,GAAG,IAAA,wBAAQ,EAC5B,8CAA8C,EAC9C,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;qBACE,QAAQ,EAAE;qBACV,WAAW,EAAE,CAAA;gBAChB,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAAE,OAAO,YAAY,CAAA;gBAC7D,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,OAAO,SAAS,CAAA;YACzD,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;YACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAA;YAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAA;QAChD,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YACzB,MAAM,aAAa,GAAG,IAAA,wBAAQ,EAAC,SAAS,IAAI,WAAW,EAAE;gBACvD,KAAK,EAAE,MAAM;aACd,CAAC;iBACC,QAAQ,EAAE;iBACV,IAAI,EAAE,CAAA;YACT,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAA;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,kDAAkD;IACpD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function gitCommandIsAvailable(): boolean;
2
+ export declare function findGitRoot(startDir: string): string | null;
@@ -0,0 +1,40 @@
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.gitCommandIsAvailable = gitCommandIsAvailable;
7
+ exports.findGitRoot = findGitRoot;
8
+ const child_process_1 = require("child_process");
9
+ const fs_1 = require("fs");
10
+ const path_1 = __importDefault(require("path"));
11
+ /**
12
+ * Checks if the native git command is available on the system.
13
+ * Caches the result to avoid repeated checks.
14
+ * @returns boolean indicating if git command is available
15
+ */
16
+ let cachedGitAvailable = null;
17
+ function gitCommandIsAvailable() {
18
+ if (cachedGitAvailable === null) {
19
+ try {
20
+ (0, child_process_1.execFileSync)('git', ['--version'], { stdio: 'ignore' });
21
+ cachedGitAvailable = true;
22
+ }
23
+ catch (error) {
24
+ cachedGitAvailable = false;
25
+ }
26
+ }
27
+ return cachedGitAvailable;
28
+ }
29
+ function findGitRoot(startDir) {
30
+ let currentDir = startDir;
31
+ while (currentDir !== path_1.default.parse(currentDir).root) {
32
+ const gitDir = path_1.default.join(currentDir, '.git');
33
+ if ((0, fs_1.existsSync)(gitDir) && (0, fs_1.statSync)(gitDir).isDirectory()) {
34
+ return currentDir;
35
+ }
36
+ currentDir = path_1.default.dirname(currentDir);
37
+ }
38
+ return null;
39
+ }
40
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";;;;;AAUA,sDAWC;AAED,kCAYC;AAnCD,iDAA4C;AAC5C,2BAAyC;AACzC,gDAAuB;AAEvB;;;;GAIG;AACH,IAAI,kBAAkB,GAAmB,IAAI,CAAA;AAC7C,SAAgB,qBAAqB;IACnC,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAA,4BAAY,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvD,kBAAkB,GAAG,IAAI,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAkB,GAAG,KAAK,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IAC1C,IAAI,UAAU,GAAG,QAAQ,CAAA;IAEzB,OAAO,UAAU,KAAK,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,IAAI,IAAA,eAAU,EAAC,MAAM,CAAC,IAAI,IAAA,aAAQ,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzD,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,21 @@
1
+ import pino from 'pino';
2
+ export interface LoggerContext {
3
+ userId?: string;
4
+ userEmail?: string;
5
+ clientSessionId?: string;
6
+ fingerprintId?: string;
7
+ clientRequestId?: string;
8
+ [key: string]: any;
9
+ }
10
+ export declare const loggerContext: LoggerContext;
11
+ declare const loggingLevels: readonly ["info", "debug", "warn", "error", "fatal"];
12
+ type LogLevel = (typeof loggingLevels)[number];
13
+ /**
14
+ * Wrapper around Pino logger.
15
+ *
16
+ * To also send to Posthog, set data.eventId to type AnalyticsEvent
17
+ *
18
+ * e.g. logger.info({eventId: AnalyticsEvent.SOME_EVENT, field: value}, 'some message')
19
+ */
20
+ export declare const logger: Record<LogLevel, pino.LogFn>;
21
+ export {};
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.logger = exports.loggerContext = void 0;
30
+ const fs_1 = require("fs");
31
+ const path_1 = __importStar(require("path"));
32
+ const util_1 = require("util");
33
+ const analytics_events_1 = require("../common/constants/analytics-events");
34
+ const pino_1 = __importDefault(require("pino"));
35
+ const project_files_1 = require("../project-files");
36
+ const analytics_1 = require("./analytics");
37
+ exports.loggerContext = {};
38
+ const analyticsBuffer = [];
39
+ let logPath = undefined;
40
+ let pinoLogger = undefined;
41
+ const loggingLevels = ['info', 'debug', 'warn', 'error', 'fatal'];
42
+ function setLogPath(p) {
43
+ if (logPath === p) {
44
+ return;
45
+ }
46
+ logPath = p;
47
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(p), { recursive: true });
48
+ pinoLogger = (0, pino_1.default)({
49
+ level: 'debug',
50
+ formatters: {
51
+ level: (label) => {
52
+ return { level: label.toUpperCase() };
53
+ },
54
+ },
55
+ timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`,
56
+ }, pino_1.default.transport({
57
+ target: 'pino/file',
58
+ options: { destination: p },
59
+ level: 'debug',
60
+ }));
61
+ }
62
+ function sendAnalyticsAndLog(level, data, msg, ...args) {
63
+ if (process.env.CODEBUFF_GITHUB_ACTIONS !== 'true') {
64
+ setLogPath(process.env.NEXT_PUBLIC_CB_ENVIRONMENT === 'local'
65
+ ? path_1.default.join(__dirname, '../../../debug', 'npm-app.log')
66
+ : path_1.default.join((0, project_files_1.getCurrentChatDir)(), 'log.jsonl'));
67
+ }
68
+ logOrStore: if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'local' &&
69
+ Object.values(analytics_events_1.AnalyticsEvent).includes(data.eventId)) {
70
+ const analyticsEventId = data.eventId;
71
+ const toTrack = {
72
+ data,
73
+ level,
74
+ loggerContext: exports.loggerContext,
75
+ msg: (0, util_1.format)(msg, ...args),
76
+ };
77
+ // Not accurate for anonymous users
78
+ if (!exports.loggerContext.userId) {
79
+ analyticsBuffer.push({ analyticsEventId, toTrack });
80
+ break logOrStore;
81
+ }
82
+ for (const item of analyticsBuffer) {
83
+ (0, analytics_1.trackEvent)(item.analyticsEventId, item.toTrack);
84
+ }
85
+ analyticsBuffer.length = 0;
86
+ (0, analytics_1.trackEvent)(analyticsEventId, toTrack);
87
+ }
88
+ if (pinoLogger !== undefined) {
89
+ pinoLogger[level]({ ...exports.loggerContext, data }, msg, ...args);
90
+ }
91
+ }
92
+ /**
93
+ * Wrapper around Pino logger.
94
+ *
95
+ * To also send to Posthog, set data.eventId to type AnalyticsEvent
96
+ *
97
+ * e.g. logger.info({eventId: AnalyticsEvent.SOME_EVENT, field: value}, 'some message')
98
+ */
99
+ exports.logger = Object.fromEntries(loggingLevels.map((level) => {
100
+ return [
101
+ level,
102
+ (data, msg, ...args) => sendAnalyticsAndLog(level, data, msg, ...args),
103
+ ];
104
+ }));
105
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class Spinner {
2
+ private static instance;
3
+ private loadingInterval;
4
+ private constructor();
5
+ static get(): Spinner;
6
+ start(): void;
7
+ stop(): void;
8
+ restoreCursor(): void;
9
+ log(message: string): void;
10
+ private rewriteLine;
11
+ }