orquesta-cli 0.1.12

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 (851) hide show
  1. package/.eslintrc.json +26 -0
  2. package/.prettierrc.json +10 -0
  3. package/CLAUDE.md +199 -0
  4. package/LICENSE +21 -0
  5. package/README.md +280 -0
  6. package/SECURITY.md +290 -0
  7. package/TEST_LOCAL.md +245 -0
  8. package/dist/agents/base/base-agent.d.ts +38 -0
  9. package/dist/agents/base/base-agent.d.ts.map +1 -0
  10. package/dist/agents/base/base-agent.js +69 -0
  11. package/dist/agents/base/base-agent.js.map +1 -0
  12. package/dist/agents/docs-search/index.d.ts +33 -0
  13. package/dist/agents/docs-search/index.d.ts.map +1 -0
  14. package/dist/agents/docs-search/index.js +244 -0
  15. package/dist/agents/docs-search/index.js.map +1 -0
  16. package/dist/agents/index.d.ts +4 -0
  17. package/dist/agents/index.d.ts.map +1 -0
  18. package/dist/agents/index.js +4 -0
  19. package/dist/agents/index.js.map +1 -0
  20. package/dist/agents/planner/index.d.ts +17 -0
  21. package/dist/agents/planner/index.d.ts.map +1 -0
  22. package/dist/agents/planner/index.js +250 -0
  23. package/dist/agents/planner/index.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +144 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/constants.d.ts +8 -0
  29. package/dist/constants.d.ts.map +1 -0
  30. package/dist/constants.js +10 -0
  31. package/dist/constants.js.map +1 -0
  32. package/dist/core/compact/compact-manager.d.ts +22 -0
  33. package/dist/core/compact/compact-manager.d.ts.map +1 -0
  34. package/dist/core/compact/compact-manager.js +75 -0
  35. package/dist/core/compact/compact-manager.js.map +1 -0
  36. package/dist/core/compact/compact-prompts.d.ts +11 -0
  37. package/dist/core/compact/compact-prompts.d.ts.map +1 -0
  38. package/dist/core/compact/compact-prompts.js +90 -0
  39. package/dist/core/compact/compact-prompts.js.map +1 -0
  40. package/dist/core/compact/context-tracker.d.ts +28 -0
  41. package/dist/core/compact/context-tracker.d.ts.map +1 -0
  42. package/dist/core/compact/context-tracker.js +71 -0
  43. package/dist/core/compact/context-tracker.js.map +1 -0
  44. package/dist/core/compact/index.d.ts +4 -0
  45. package/dist/core/compact/index.d.ts.map +1 -0
  46. package/dist/core/compact/index.js +4 -0
  47. package/dist/core/compact/index.js.map +1 -0
  48. package/dist/core/config/config-manager.d.ts +44 -0
  49. package/dist/core/config/config-manager.d.ts.map +1 -0
  50. package/dist/core/config/config-manager.js +259 -0
  51. package/dist/core/config/config-manager.js.map +1 -0
  52. package/dist/core/config/index.d.ts +2 -0
  53. package/dist/core/config/index.d.ts.map +1 -0
  54. package/dist/core/config/index.js +2 -0
  55. package/dist/core/config/index.js.map +1 -0
  56. package/dist/core/docs-manager.d.ts +46 -0
  57. package/dist/core/docs-manager.d.ts.map +1 -0
  58. package/dist/core/docs-manager.js +475 -0
  59. package/dist/core/docs-manager.js.map +1 -0
  60. package/dist/core/git-auto-updater.d.ts +58 -0
  61. package/dist/core/git-auto-updater.d.ts.map +1 -0
  62. package/dist/core/git-auto-updater.js +374 -0
  63. package/dist/core/git-auto-updater.js.map +1 -0
  64. package/dist/core/llm/index.d.ts +2 -0
  65. package/dist/core/llm/index.d.ts.map +1 -0
  66. package/dist/core/llm/index.js +2 -0
  67. package/dist/core/llm/index.js.map +1 -0
  68. package/dist/core/llm/llm-client.d.ts +97 -0
  69. package/dist/core/llm/llm-client.d.ts.map +1 -0
  70. package/dist/core/llm/llm-client.js +1000 -0
  71. package/dist/core/llm/llm-client.js.map +1 -0
  72. package/dist/core/session/index.d.ts +2 -0
  73. package/dist/core/session/index.d.ts.map +1 -0
  74. package/dist/core/session/index.js +2 -0
  75. package/dist/core/session/index.js.map +1 -0
  76. package/dist/core/session/session-manager.d.ts +71 -0
  77. package/dist/core/session/session-manager.d.ts.map +1 -0
  78. package/dist/core/session/session-manager.js +250 -0
  79. package/dist/core/session/session-manager.js.map +1 -0
  80. package/dist/core/slash-command-handler.d.ts +31 -0
  81. package/dist/core/slash-command-handler.d.ts.map +1 -0
  82. package/dist/core/slash-command-handler.js +302 -0
  83. package/dist/core/slash-command-handler.js.map +1 -0
  84. package/dist/core/usage-tracker.d.ts +70 -0
  85. package/dist/core/usage-tracker.d.ts.map +1 -0
  86. package/dist/core/usage-tracker.js +251 -0
  87. package/dist/core/usage-tracker.js.map +1 -0
  88. package/dist/errors/base.d.ts +22 -0
  89. package/dist/errors/base.d.ts.map +1 -0
  90. package/dist/errors/base.js +43 -0
  91. package/dist/errors/base.js.map +1 -0
  92. package/dist/errors/file.d.ts +31 -0
  93. package/dist/errors/file.d.ts.map +1 -0
  94. package/dist/errors/file.js +110 -0
  95. package/dist/errors/file.js.map +1 -0
  96. package/dist/errors/index.d.ts +10 -0
  97. package/dist/errors/index.d.ts.map +1 -0
  98. package/dist/errors/index.js +41 -0
  99. package/dist/errors/index.js.map +1 -0
  100. package/dist/errors/llm.d.ts +26 -0
  101. package/dist/errors/llm.d.ts.map +1 -0
  102. package/dist/errors/llm.js +86 -0
  103. package/dist/errors/llm.js.map +1 -0
  104. package/dist/errors/network.d.ts +19 -0
  105. package/dist/errors/network.d.ts.map +1 -0
  106. package/dist/errors/network.js +82 -0
  107. package/dist/errors/network.js.map +1 -0
  108. package/dist/errors/validation.d.ts +19 -0
  109. package/dist/errors/validation.d.ts.map +1 -0
  110. package/dist/errors/validation.js +62 -0
  111. package/dist/errors/validation.js.map +1 -0
  112. package/dist/eval/eval-runner.d.ts +24 -0
  113. package/dist/eval/eval-runner.d.ts.map +1 -0
  114. package/dist/eval/eval-runner.js +309 -0
  115. package/dist/eval/eval-runner.js.map +1 -0
  116. package/dist/eval/index.d.ts +3 -0
  117. package/dist/eval/index.d.ts.map +1 -0
  118. package/dist/eval/index.js +3 -0
  119. package/dist/eval/index.js.map +1 -0
  120. package/dist/eval/types.d.ts +77 -0
  121. package/dist/eval/types.d.ts.map +1 -0
  122. package/dist/eval/types.js +2 -0
  123. package/dist/eval/types.js.map +1 -0
  124. package/dist/index.d.ts +4 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +6 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/orchestration/index.d.ts +4 -0
  129. package/dist/orchestration/index.d.ts.map +1 -0
  130. package/dist/orchestration/index.js +3 -0
  131. package/dist/orchestration/index.js.map +1 -0
  132. package/dist/orchestration/plan-executor.d.ts +28 -0
  133. package/dist/orchestration/plan-executor.d.ts.map +1 -0
  134. package/dist/orchestration/plan-executor.js +382 -0
  135. package/dist/orchestration/plan-executor.js.map +1 -0
  136. package/dist/orchestration/types.d.ts +66 -0
  137. package/dist/orchestration/types.d.ts.map +1 -0
  138. package/dist/orchestration/types.js +2 -0
  139. package/dist/orchestration/types.js.map +1 -0
  140. package/dist/orchestration/utils.d.ts +13 -0
  141. package/dist/orchestration/utils.d.ts.map +1 -0
  142. package/dist/orchestration/utils.js +78 -0
  143. package/dist/orchestration/utils.js.map +1 -0
  144. package/dist/orquesta/connection.d.ts +35 -0
  145. package/dist/orquesta/connection.d.ts.map +1 -0
  146. package/dist/orquesta/connection.js +189 -0
  147. package/dist/orquesta/connection.js.map +1 -0
  148. package/dist/prompts/agents/docs-search-decision.d.ts +6 -0
  149. package/dist/prompts/agents/docs-search-decision.d.ts.map +1 -0
  150. package/dist/prompts/agents/docs-search-decision.js +46 -0
  151. package/dist/prompts/agents/docs-search-decision.js.map +1 -0
  152. package/dist/prompts/agents/docs-search.d.ts +4 -0
  153. package/dist/prompts/agents/docs-search.d.ts.map +1 -0
  154. package/dist/prompts/agents/docs-search.js +70 -0
  155. package/dist/prompts/agents/docs-search.js.map +1 -0
  156. package/dist/prompts/agents/planning.d.ts +4 -0
  157. package/dist/prompts/agents/planning.d.ts.map +1 -0
  158. package/dist/prompts/agents/planning.js +119 -0
  159. package/dist/prompts/agents/planning.js.map +1 -0
  160. package/dist/prompts/index.d.ts +10 -0
  161. package/dist/prompts/index.d.ts.map +1 -0
  162. package/dist/prompts/index.js +10 -0
  163. package/dist/prompts/index.js.map +1 -0
  164. package/dist/prompts/shared/codebase-rules.d.ts +4 -0
  165. package/dist/prompts/shared/codebase-rules.d.ts.map +1 -0
  166. package/dist/prompts/shared/codebase-rules.js +16 -0
  167. package/dist/prompts/shared/codebase-rules.js.map +1 -0
  168. package/dist/prompts/shared/git-rules.d.ts +2 -0
  169. package/dist/prompts/shared/git-rules.d.ts.map +1 -0
  170. package/dist/prompts/shared/git-rules.js +87 -0
  171. package/dist/prompts/shared/git-rules.js.map +1 -0
  172. package/dist/prompts/shared/language-rules.d.ts +4 -0
  173. package/dist/prompts/shared/language-rules.d.ts.map +1 -0
  174. package/dist/prompts/shared/language-rules.js +22 -0
  175. package/dist/prompts/shared/language-rules.js.map +1 -0
  176. package/dist/prompts/shared/tool-usage.d.ts +12 -0
  177. package/dist/prompts/shared/tool-usage.d.ts.map +1 -0
  178. package/dist/prompts/shared/tool-usage.js +51 -0
  179. package/dist/prompts/shared/tool-usage.js.map +1 -0
  180. package/dist/prompts/system/compact.d.ts +3 -0
  181. package/dist/prompts/system/compact.d.ts.map +1 -0
  182. package/dist/prompts/system/compact.js +73 -0
  183. package/dist/prompts/system/compact.js.map +1 -0
  184. package/dist/prompts/system/plan-execute.d.ts +3 -0
  185. package/dist/prompts/system/plan-execute.d.ts.map +1 -0
  186. package/dist/prompts/system/plan-execute.js +83 -0
  187. package/dist/prompts/system/plan-execute.js.map +1 -0
  188. package/dist/tools/browser/browser-client.d.ts +107 -0
  189. package/dist/tools/browser/browser-client.d.ts.map +1 -0
  190. package/dist/tools/browser/browser-client.js +958 -0
  191. package/dist/tools/browser/browser-client.js.map +1 -0
  192. package/dist/tools/browser/browser-tools.d.ts +17 -0
  193. package/dist/tools/browser/browser-tools.d.ts.map +1 -0
  194. package/dist/tools/browser/browser-tools.js +972 -0
  195. package/dist/tools/browser/browser-tools.js.map +1 -0
  196. package/dist/tools/browser/index.d.ts +7 -0
  197. package/dist/tools/browser/index.d.ts.map +1 -0
  198. package/dist/tools/browser/index.js +17 -0
  199. package/dist/tools/browser/index.js.map +1 -0
  200. package/dist/tools/index.d.ts +4 -0
  201. package/dist/tools/index.d.ts.map +1 -0
  202. package/dist/tools/index.js +4 -0
  203. package/dist/tools/index.js.map +1 -0
  204. package/dist/tools/llm/agents/docs-search-tools.d.ts +17 -0
  205. package/dist/tools/llm/agents/docs-search-tools.d.ts.map +1 -0
  206. package/dist/tools/llm/agents/docs-search-tools.js +265 -0
  207. package/dist/tools/llm/agents/docs-search-tools.js.map +1 -0
  208. package/dist/tools/llm/agents/index.d.ts +4 -0
  209. package/dist/tools/llm/agents/index.d.ts.map +1 -0
  210. package/dist/tools/llm/agents/index.js +3 -0
  211. package/dist/tools/llm/agents/index.js.map +1 -0
  212. package/dist/tools/llm/index.d.ts +3 -0
  213. package/dist/tools/llm/index.d.ts.map +1 -0
  214. package/dist/tools/llm/index.js +3 -0
  215. package/dist/tools/llm/index.js.map +1 -0
  216. package/dist/tools/llm/simple/ask-user-tool.d.ts +5 -0
  217. package/dist/tools/llm/simple/ask-user-tool.d.ts.map +1 -0
  218. package/dist/tools/llm/simple/ask-user-tool.js +7 -0
  219. package/dist/tools/llm/simple/ask-user-tool.js.map +1 -0
  220. package/dist/tools/llm/simple/background-bash-tool.d.ts +30 -0
  221. package/dist/tools/llm/simple/background-bash-tool.d.ts.map +1 -0
  222. package/dist/tools/llm/simple/background-bash-tool.js +323 -0
  223. package/dist/tools/llm/simple/background-bash-tool.js.map +1 -0
  224. package/dist/tools/llm/simple/background-powershell-tool.d.ts +30 -0
  225. package/dist/tools/llm/simple/background-powershell-tool.d.ts.map +1 -0
  226. package/dist/tools/llm/simple/background-powershell-tool.js +305 -0
  227. package/dist/tools/llm/simple/background-powershell-tool.js.map +1 -0
  228. package/dist/tools/llm/simple/bash-tool.d.ts +4 -0
  229. package/dist/tools/llm/simple/bash-tool.d.ts.map +1 -0
  230. package/dist/tools/llm/simple/bash-tool.js +178 -0
  231. package/dist/tools/llm/simple/bash-tool.js.map +1 -0
  232. package/dist/tools/llm/simple/docs-search-agent-tool.d.ts +6 -0
  233. package/dist/tools/llm/simple/docs-search-agent-tool.d.ts.map +1 -0
  234. package/dist/tools/llm/simple/docs-search-agent-tool.js +104 -0
  235. package/dist/tools/llm/simple/docs-search-agent-tool.js.map +1 -0
  236. package/dist/tools/llm/simple/file-tools.d.ts +13 -0
  237. package/dist/tools/llm/simple/file-tools.d.ts.map +1 -0
  238. package/dist/tools/llm/simple/file-tools.js +785 -0
  239. package/dist/tools/llm/simple/file-tools.js.map +1 -0
  240. package/dist/tools/llm/simple/final-response-tool.d.ts +12 -0
  241. package/dist/tools/llm/simple/final-response-tool.d.ts.map +1 -0
  242. package/dist/tools/llm/simple/final-response-tool.js +107 -0
  243. package/dist/tools/llm/simple/final-response-tool.js.map +1 -0
  244. package/dist/tools/llm/simple/index.d.ts +11 -0
  245. package/dist/tools/llm/simple/index.d.ts.map +1 -0
  246. package/dist/tools/llm/simple/index.js +20 -0
  247. package/dist/tools/llm/simple/index.js.map +1 -0
  248. package/dist/tools/llm/simple/planning-tools.d.ts +5 -0
  249. package/dist/tools/llm/simple/planning-tools.d.ts.map +1 -0
  250. package/dist/tools/llm/simple/planning-tools.js +117 -0
  251. package/dist/tools/llm/simple/planning-tools.js.map +1 -0
  252. package/dist/tools/llm/simple/powershell-tool.d.ts +4 -0
  253. package/dist/tools/llm/simple/powershell-tool.d.ts.map +1 -0
  254. package/dist/tools/llm/simple/powershell-tool.js +178 -0
  255. package/dist/tools/llm/simple/powershell-tool.js.map +1 -0
  256. package/dist/tools/llm/simple/simple-tool-executor.d.ts +38 -0
  257. package/dist/tools/llm/simple/simple-tool-executor.d.ts.map +1 -0
  258. package/dist/tools/llm/simple/simple-tool-executor.js +134 -0
  259. package/dist/tools/llm/simple/simple-tool-executor.js.map +1 -0
  260. package/dist/tools/llm/simple/todo-tools.d.ts +15 -0
  261. package/dist/tools/llm/simple/todo-tools.d.ts.map +1 -0
  262. package/dist/tools/llm/simple/todo-tools.js +145 -0
  263. package/dist/tools/llm/simple/todo-tools.js.map +1 -0
  264. package/dist/tools/llm/simple/user-interaction-tools.d.ts +22 -0
  265. package/dist/tools/llm/simple/user-interaction-tools.d.ts.map +1 -0
  266. package/dist/tools/llm/simple/user-interaction-tools.js +168 -0
  267. package/dist/tools/llm/simple/user-interaction-tools.js.map +1 -0
  268. package/dist/tools/office/common/constants.d.ts +194 -0
  269. package/dist/tools/office/common/constants.d.ts.map +1 -0
  270. package/dist/tools/office/common/constants.js +169 -0
  271. package/dist/tools/office/common/constants.js.map +1 -0
  272. package/dist/tools/office/common/index.d.ts +4 -0
  273. package/dist/tools/office/common/index.d.ts.map +1 -0
  274. package/dist/tools/office/common/index.js +3 -0
  275. package/dist/tools/office/common/index.js.map +1 -0
  276. package/dist/tools/office/common/types.d.ts +82 -0
  277. package/dist/tools/office/common/types.d.ts.map +1 -0
  278. package/dist/tools/office/common/types.js +2 -0
  279. package/dist/tools/office/common/types.js.map +1 -0
  280. package/dist/tools/office/common/utils.d.ts +14 -0
  281. package/dist/tools/office/common/utils.d.ts.map +1 -0
  282. package/dist/tools/office/common/utils.js +58 -0
  283. package/dist/tools/office/common/utils.js.map +1 -0
  284. package/dist/tools/office/excel-client.d.ts +123 -0
  285. package/dist/tools/office/excel-client.d.ts.map +1 -0
  286. package/dist/tools/office/excel-client.js +1037 -0
  287. package/dist/tools/office/excel-client.js.map +1 -0
  288. package/dist/tools/office/excel-tools/cells.d.ts +10 -0
  289. package/dist/tools/office/excel-tools/cells.d.ts.map +1 -0
  290. package/dist/tools/office/excel-tools/cells.js +279 -0
  291. package/dist/tools/office/excel-tools/cells.js.map +1 -0
  292. package/dist/tools/office/excel-tools/charts.d.ts +6 -0
  293. package/dist/tools/office/excel-tools/charts.d.ts.map +1 -0
  294. package/dist/tools/office/excel-tools/charts.js +124 -0
  295. package/dist/tools/office/excel-tools/charts.js.map +1 -0
  296. package/dist/tools/office/excel-tools/comments.d.ts +6 -0
  297. package/dist/tools/office/excel-tools/comments.d.ts.map +1 -0
  298. package/dist/tools/office/excel-tools/comments.js +114 -0
  299. package/dist/tools/office/excel-tools/comments.js.map +1 -0
  300. package/dist/tools/office/excel-tools/data-ops.d.ts +10 -0
  301. package/dist/tools/office/excel-tools/data-ops.d.ts.map +1 -0
  302. package/dist/tools/office/excel-tools/data-ops.js +266 -0
  303. package/dist/tools/office/excel-tools/data-ops.js.map +1 -0
  304. package/dist/tools/office/excel-tools/export.d.ts +5 -0
  305. package/dist/tools/office/excel-tools/export.d.ts.map +1 -0
  306. package/dist/tools/office/excel-tools/export.js +75 -0
  307. package/dist/tools/office/excel-tools/export.js.map +1 -0
  308. package/dist/tools/office/excel-tools/formatting.d.ts +10 -0
  309. package/dist/tools/office/excel-tools/formatting.d.ts.map +1 -0
  310. package/dist/tools/office/excel-tools/formatting.js +276 -0
  311. package/dist/tools/office/excel-tools/formatting.js.map +1 -0
  312. package/dist/tools/office/excel-tools/index.d.ts +16 -0
  313. package/dist/tools/office/excel-tools/index.d.ts.map +1 -0
  314. package/dist/tools/office/excel-tools/index.js +42 -0
  315. package/dist/tools/office/excel-tools/index.js.map +1 -0
  316. package/dist/tools/office/excel-tools/launch.d.ts +10 -0
  317. package/dist/tools/office/excel-tools/launch.d.ts.map +1 -0
  318. package/dist/tools/office/excel-tools/launch.js +248 -0
  319. package/dist/tools/office/excel-tools/launch.js.map +1 -0
  320. package/dist/tools/office/excel-tools/media.d.ts +5 -0
  321. package/dist/tools/office/excel-tools/media.d.ts.map +1 -0
  322. package/dist/tools/office/excel-tools/media.js +84 -0
  323. package/dist/tools/office/excel-tools/media.js.map +1 -0
  324. package/dist/tools/office/excel-tools/named-ranges.d.ts +6 -0
  325. package/dist/tools/office/excel-tools/named-ranges.d.ts.map +1 -0
  326. package/dist/tools/office/excel-tools/named-ranges.js +113 -0
  327. package/dist/tools/office/excel-tools/named-ranges.js.map +1 -0
  328. package/dist/tools/office/excel-tools/protection.d.ts +5 -0
  329. package/dist/tools/office/excel-tools/protection.d.ts.map +1 -0
  330. package/dist/tools/office/excel-tools/protection.js +75 -0
  331. package/dist/tools/office/excel-tools/protection.js.map +1 -0
  332. package/dist/tools/office/excel-tools/rows-columns.d.ts +11 -0
  333. package/dist/tools/office/excel-tools/rows-columns.d.ts.map +1 -0
  334. package/dist/tools/office/excel-tools/rows-columns.js +293 -0
  335. package/dist/tools/office/excel-tools/rows-columns.js.map +1 -0
  336. package/dist/tools/office/excel-tools/sheets.d.ts +8 -0
  337. package/dist/tools/office/excel-tools/sheets.d.ts.map +1 -0
  338. package/dist/tools/office/excel-tools/sheets.js +177 -0
  339. package/dist/tools/office/excel-tools/sheets.js.map +1 -0
  340. package/dist/tools/office/excel-tools/validation.d.ts +7 -0
  341. package/dist/tools/office/excel-tools/validation.d.ts.map +1 -0
  342. package/dist/tools/office/excel-tools/validation.js +175 -0
  343. package/dist/tools/office/excel-tools/validation.js.map +1 -0
  344. package/dist/tools/office/excel-tools.d.ts +3 -0
  345. package/dist/tools/office/excel-tools.d.ts.map +1 -0
  346. package/dist/tools/office/excel-tools.js +3 -0
  347. package/dist/tools/office/excel-tools.js.map +1 -0
  348. package/dist/tools/office/index.d.ts +6 -0
  349. package/dist/tools/office/index.d.ts.map +1 -0
  350. package/dist/tools/office/index.js +9 -0
  351. package/dist/tools/office/index.js.map +1 -0
  352. package/dist/tools/office/office-client-base.d.ts +31 -0
  353. package/dist/tools/office/office-client-base.d.ts.map +1 -0
  354. package/dist/tools/office/office-client-base.js +154 -0
  355. package/dist/tools/office/office-client-base.js.map +1 -0
  356. package/dist/tools/office/office-client.d.ts +196 -0
  357. package/dist/tools/office/office-client.d.ts.map +1 -0
  358. package/dist/tools/office/office-client.js +200 -0
  359. package/dist/tools/office/office-client.js.map +1 -0
  360. package/dist/tools/office/powerpoint-client.d.ts +135 -0
  361. package/dist/tools/office/powerpoint-client.d.ts.map +1 -0
  362. package/dist/tools/office/powerpoint-client.js +1136 -0
  363. package/dist/tools/office/powerpoint-client.js.map +1 -0
  364. package/dist/tools/office/powerpoint-tools/effects.d.ts +9 -0
  365. package/dist/tools/office/powerpoint-tools/effects.d.ts.map +1 -0
  366. package/dist/tools/office/powerpoint-tools/effects.js +246 -0
  367. package/dist/tools/office/powerpoint-tools/effects.js.map +1 -0
  368. package/dist/tools/office/powerpoint-tools/export.d.ts +6 -0
  369. package/dist/tools/office/powerpoint-tools/export.d.ts.map +1 -0
  370. package/dist/tools/office/powerpoint-tools/export.js +108 -0
  371. package/dist/tools/office/powerpoint-tools/export.js.map +1 -0
  372. package/dist/tools/office/powerpoint-tools/index.d.ts +13 -0
  373. package/dist/tools/office/powerpoint-tools/index.d.ts.map +1 -0
  374. package/dist/tools/office/powerpoint-tools/index.js +33 -0
  375. package/dist/tools/office/powerpoint-tools/index.js.map +1 -0
  376. package/dist/tools/office/powerpoint-tools/launch.d.ts +9 -0
  377. package/dist/tools/office/powerpoint-tools/launch.d.ts.map +1 -0
  378. package/dist/tools/office/powerpoint-tools/launch.js +214 -0
  379. package/dist/tools/office/powerpoint-tools/launch.js.map +1 -0
  380. package/dist/tools/office/powerpoint-tools/media.d.ts +8 -0
  381. package/dist/tools/office/powerpoint-tools/media.d.ts.map +1 -0
  382. package/dist/tools/office/powerpoint-tools/media.js +211 -0
  383. package/dist/tools/office/powerpoint-tools/media.js.map +1 -0
  384. package/dist/tools/office/powerpoint-tools/notes.d.ts +8 -0
  385. package/dist/tools/office/powerpoint-tools/notes.d.ts.map +1 -0
  386. package/dist/tools/office/powerpoint-tools/notes.js +171 -0
  387. package/dist/tools/office/powerpoint-tools/notes.js.map +1 -0
  388. package/dist/tools/office/powerpoint-tools/sections.d.ts +6 -0
  389. package/dist/tools/office/powerpoint-tools/sections.d.ts.map +1 -0
  390. package/dist/tools/office/powerpoint-tools/sections.js +104 -0
  391. package/dist/tools/office/powerpoint-tools/sections.js.map +1 -0
  392. package/dist/tools/office/powerpoint-tools/shapes.d.ts +22 -0
  393. package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +1 -0
  394. package/dist/tools/office/powerpoint-tools/shapes.js +681 -0
  395. package/dist/tools/office/powerpoint-tools/shapes.js.map +1 -0
  396. package/dist/tools/office/powerpoint-tools/slides.d.ts +11 -0
  397. package/dist/tools/office/powerpoint-tools/slides.d.ts.map +1 -0
  398. package/dist/tools/office/powerpoint-tools/slides.js +283 -0
  399. package/dist/tools/office/powerpoint-tools/slides.js.map +1 -0
  400. package/dist/tools/office/powerpoint-tools/tables.d.ts +6 -0
  401. package/dist/tools/office/powerpoint-tools/tables.d.ts.map +1 -0
  402. package/dist/tools/office/powerpoint-tools/tables.js +132 -0
  403. package/dist/tools/office/powerpoint-tools/tables.js.map +1 -0
  404. package/dist/tools/office/powerpoint-tools/text.d.ts +12 -0
  405. package/dist/tools/office/powerpoint-tools/text.d.ts.map +1 -0
  406. package/dist/tools/office/powerpoint-tools/text.js +366 -0
  407. package/dist/tools/office/powerpoint-tools/text.js.map +1 -0
  408. package/dist/tools/office/powerpoint-tools.d.ts +3 -0
  409. package/dist/tools/office/powerpoint-tools.d.ts.map +1 -0
  410. package/dist/tools/office/powerpoint-tools.js +3 -0
  411. package/dist/tools/office/powerpoint-tools.js.map +1 -0
  412. package/dist/tools/office/word-client.d.ts +147 -0
  413. package/dist/tools/office/word-client.d.ts.map +1 -0
  414. package/dist/tools/office/word-client.js +1341 -0
  415. package/dist/tools/office/word-client.js.map +1 -0
  416. package/dist/tools/office/word-tools/bookmarks.d.ts +7 -0
  417. package/dist/tools/office/word-tools/bookmarks.d.ts.map +1 -0
  418. package/dist/tools/office/word-tools/bookmarks.js +146 -0
  419. package/dist/tools/office/word-tools/bookmarks.js.map +1 -0
  420. package/dist/tools/office/word-tools/comments.d.ts +7 -0
  421. package/dist/tools/office/word-tools/comments.d.ts.map +1 -0
  422. package/dist/tools/office/word-tools/comments.js +146 -0
  423. package/dist/tools/office/word-tools/comments.js.map +1 -0
  424. package/dist/tools/office/word-tools/content.d.ts +7 -0
  425. package/dist/tools/office/word-tools/content.d.ts.map +1 -0
  426. package/dist/tools/office/word-tools/content.js +168 -0
  427. package/dist/tools/office/word-tools/content.js.map +1 -0
  428. package/dist/tools/office/word-tools/export.d.ts +5 -0
  429. package/dist/tools/office/word-tools/export.d.ts.map +1 -0
  430. package/dist/tools/office/word-tools/export.js +73 -0
  431. package/dist/tools/office/word-tools/export.js.map +1 -0
  432. package/dist/tools/office/word-tools/formatting.d.ts +6 -0
  433. package/dist/tools/office/word-tools/formatting.d.ts.map +1 -0
  434. package/dist/tools/office/word-tools/formatting.js +129 -0
  435. package/dist/tools/office/word-tools/formatting.js.map +1 -0
  436. package/dist/tools/office/word-tools/headers-footers.d.ts +6 -0
  437. package/dist/tools/office/word-tools/headers-footers.d.ts.map +1 -0
  438. package/dist/tools/office/word-tools/headers-footers.js +117 -0
  439. package/dist/tools/office/word-tools/headers-footers.js.map +1 -0
  440. package/dist/tools/office/word-tools/index.d.ts +16 -0
  441. package/dist/tools/office/word-tools/index.d.ts.map +1 -0
  442. package/dist/tools/office/word-tools/index.js +45 -0
  443. package/dist/tools/office/word-tools/index.js.map +1 -0
  444. package/dist/tools/office/word-tools/launch.d.ts +10 -0
  445. package/dist/tools/office/word-tools/launch.d.ts.map +1 -0
  446. package/dist/tools/office/word-tools/launch.js +255 -0
  447. package/dist/tools/office/word-tools/launch.js.map +1 -0
  448. package/dist/tools/office/word-tools/lists.d.ts +5 -0
  449. package/dist/tools/office/word-tools/lists.d.ts.map +1 -0
  450. package/dist/tools/office/word-tools/lists.js +73 -0
  451. package/dist/tools/office/word-tools/lists.js.map +1 -0
  452. package/dist/tools/office/word-tools/navigation.d.ts +5 -0
  453. package/dist/tools/office/word-tools/navigation.d.ts.map +1 -0
  454. package/dist/tools/office/word-tools/navigation.js +85 -0
  455. package/dist/tools/office/word-tools/navigation.js.map +1 -0
  456. package/dist/tools/office/word-tools/page-setup.d.ts +7 -0
  457. package/dist/tools/office/word-tools/page-setup.d.ts.map +1 -0
  458. package/dist/tools/office/word-tools/page-setup.js +152 -0
  459. package/dist/tools/office/word-tools/page-setup.js.map +1 -0
  460. package/dist/tools/office/word-tools/tables.d.ts +8 -0
  461. package/dist/tools/office/word-tools/tables.d.ts.map +1 -0
  462. package/dist/tools/office/word-tools/tables.js +197 -0
  463. package/dist/tools/office/word-tools/tables.js.map +1 -0
  464. package/dist/tools/office/word-tools/text.d.ts +9 -0
  465. package/dist/tools/office/word-tools/text.d.ts.map +1 -0
  466. package/dist/tools/office/word-tools/text.js +235 -0
  467. package/dist/tools/office/word-tools/text.js.map +1 -0
  468. package/dist/tools/office/word-tools/undo-redo.d.ts +5 -0
  469. package/dist/tools/office/word-tools/undo-redo.d.ts.map +1 -0
  470. package/dist/tools/office/word-tools/undo-redo.js +73 -0
  471. package/dist/tools/office/word-tools/undo-redo.js.map +1 -0
  472. package/dist/tools/office/word-tools/watermarks.d.ts +5 -0
  473. package/dist/tools/office/word-tools/watermarks.d.ts.map +1 -0
  474. package/dist/tools/office/word-tools/watermarks.js +81 -0
  475. package/dist/tools/office/word-tools/watermarks.js.map +1 -0
  476. package/dist/tools/office/word-tools.d.ts +3 -0
  477. package/dist/tools/office/word-tools.d.ts.map +1 -0
  478. package/dist/tools/office/word-tools.js +3 -0
  479. package/dist/tools/office/word-tools.js.map +1 -0
  480. package/dist/tools/registry.d.ts +53 -0
  481. package/dist/tools/registry.d.ts.map +1 -0
  482. package/dist/tools/registry.js +278 -0
  483. package/dist/tools/registry.js.map +1 -0
  484. package/dist/tools/types.d.ts +88 -0
  485. package/dist/tools/types.d.ts.map +1 -0
  486. package/dist/tools/types.js +19 -0
  487. package/dist/tools/types.js.map +1 -0
  488. package/dist/types/index.d.ts +126 -0
  489. package/dist/types/index.d.ts.map +1 -0
  490. package/dist/types/index.js +2 -0
  491. package/dist/types/index.js.map +1 -0
  492. package/dist/ui/PlanExecuteView.d.ts +11 -0
  493. package/dist/ui/PlanExecuteView.d.ts.map +1 -0
  494. package/dist/ui/PlanExecuteView.js +29 -0
  495. package/dist/ui/PlanExecuteView.js.map +1 -0
  496. package/dist/ui/TodoPanel.d.ts +13 -0
  497. package/dist/ui/TodoPanel.d.ts.map +1 -0
  498. package/dist/ui/TodoPanel.js +135 -0
  499. package/dist/ui/TodoPanel.js.map +1 -0
  500. package/dist/ui/UpdateNotification.d.ts +13 -0
  501. package/dist/ui/UpdateNotification.d.ts.map +1 -0
  502. package/dist/ui/UpdateNotification.js +42 -0
  503. package/dist/ui/UpdateNotification.js.map +1 -0
  504. package/dist/ui/components/ActivityIndicator.d.ts +25 -0
  505. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -0
  506. package/dist/ui/components/ActivityIndicator.js +115 -0
  507. package/dist/ui/components/ActivityIndicator.js.map +1 -0
  508. package/dist/ui/components/CommandBrowser.d.ts +10 -0
  509. package/dist/ui/components/CommandBrowser.d.ts.map +1 -0
  510. package/dist/ui/components/CommandBrowser.js +53 -0
  511. package/dist/ui/components/CommandBrowser.js.map +1 -0
  512. package/dist/ui/components/CustomTextInput.d.ts +13 -0
  513. package/dist/ui/components/CustomTextInput.d.ts.map +1 -0
  514. package/dist/ui/components/CustomTextInput.js +245 -0
  515. package/dist/ui/components/CustomTextInput.js.map +1 -0
  516. package/dist/ui/components/DocsSearchProgress.d.ts +13 -0
  517. package/dist/ui/components/DocsSearchProgress.d.ts.map +1 -0
  518. package/dist/ui/components/DocsSearchProgress.js +37 -0
  519. package/dist/ui/components/DocsSearchProgress.js.map +1 -0
  520. package/dist/ui/components/FileBrowser.d.ts +11 -0
  521. package/dist/ui/components/FileBrowser.d.ts.map +1 -0
  522. package/dist/ui/components/FileBrowser.js +45 -0
  523. package/dist/ui/components/FileBrowser.js.map +1 -0
  524. package/dist/ui/components/LLMSetupWizard.d.ts +8 -0
  525. package/dist/ui/components/LLMSetupWizard.d.ts.map +1 -0
  526. package/dist/ui/components/LLMSetupWizard.js +192 -0
  527. package/dist/ui/components/LLMSetupWizard.js.map +1 -0
  528. package/dist/ui/components/Logo.d.ts +19 -0
  529. package/dist/ui/components/Logo.d.ts.map +1 -0
  530. package/dist/ui/components/Logo.js +55 -0
  531. package/dist/ui/components/Logo.js.map +1 -0
  532. package/dist/ui/components/MarkdownRenderer.d.ts +9 -0
  533. package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -0
  534. package/dist/ui/components/MarkdownRenderer.js +198 -0
  535. package/dist/ui/components/MarkdownRenderer.js.map +1 -0
  536. package/dist/ui/components/ModelSelector.d.ts +8 -0
  537. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  538. package/dist/ui/components/ModelSelector.js +111 -0
  539. package/dist/ui/components/ModelSelector.js.map +1 -0
  540. package/dist/ui/components/PlanExecuteApp.d.ts +23 -0
  541. package/dist/ui/components/PlanExecuteApp.d.ts.map +1 -0
  542. package/dist/ui/components/PlanExecuteApp.js +1324 -0
  543. package/dist/ui/components/PlanExecuteApp.js.map +1 -0
  544. package/dist/ui/components/ProgressBar.d.ts +10 -0
  545. package/dist/ui/components/ProgressBar.d.ts.map +1 -0
  546. package/dist/ui/components/ProgressBar.js +26 -0
  547. package/dist/ui/components/ProgressBar.js.map +1 -0
  548. package/dist/ui/components/StatusBar.d.ts +23 -0
  549. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  550. package/dist/ui/components/StatusBar.js +162 -0
  551. package/dist/ui/components/StatusBar.js.map +1 -0
  552. package/dist/ui/components/ThinkingIndicator.d.ts +14 -0
  553. package/dist/ui/components/ThinkingIndicator.d.ts.map +1 -0
  554. package/dist/ui/components/ThinkingIndicator.js +63 -0
  555. package/dist/ui/components/ThinkingIndicator.js.map +1 -0
  556. package/dist/ui/components/TodoListView.d.ts +11 -0
  557. package/dist/ui/components/TodoListView.d.ts.map +1 -0
  558. package/dist/ui/components/TodoListView.js +69 -0
  559. package/dist/ui/components/TodoListView.js.map +1 -0
  560. package/dist/ui/components/ToolSelector.d.ts +7 -0
  561. package/dist/ui/components/ToolSelector.d.ts.map +1 -0
  562. package/dist/ui/components/ToolSelector.js +111 -0
  563. package/dist/ui/components/ToolSelector.js.map +1 -0
  564. package/dist/ui/components/dialogs/ApprovalDialog.d.ts +13 -0
  565. package/dist/ui/components/dialogs/ApprovalDialog.d.ts.map +1 -0
  566. package/dist/ui/components/dialogs/ApprovalDialog.js +173 -0
  567. package/dist/ui/components/dialogs/ApprovalDialog.js.map +1 -0
  568. package/dist/ui/components/dialogs/AskUserDialog.d.ts +9 -0
  569. package/dist/ui/components/dialogs/AskUserDialog.d.ts.map +1 -0
  570. package/dist/ui/components/dialogs/AskUserDialog.js +111 -0
  571. package/dist/ui/components/dialogs/AskUserDialog.js.map +1 -0
  572. package/dist/ui/components/dialogs/DocsBrowser.d.ts +8 -0
  573. package/dist/ui/components/dialogs/DocsBrowser.d.ts.map +1 -0
  574. package/dist/ui/components/dialogs/DocsBrowser.js +127 -0
  575. package/dist/ui/components/dialogs/DocsBrowser.js.map +1 -0
  576. package/dist/ui/components/dialogs/SettingsDialog.d.ts +10 -0
  577. package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +1 -0
  578. package/dist/ui/components/dialogs/SettingsDialog.js +563 -0
  579. package/dist/ui/components/dialogs/SettingsDialog.js.map +1 -0
  580. package/dist/ui/components/dialogs/index.d.ts +4 -0
  581. package/dist/ui/components/dialogs/index.d.ts.map +1 -0
  582. package/dist/ui/components/dialogs/index.js +4 -0
  583. package/dist/ui/components/dialogs/index.js.map +1 -0
  584. package/dist/ui/components/index.d.ts +12 -0
  585. package/dist/ui/components/index.d.ts.map +1 -0
  586. package/dist/ui/components/index.js +9 -0
  587. package/dist/ui/components/index.js.map +1 -0
  588. package/dist/ui/components/panels/LogPanel.d.ts +7 -0
  589. package/dist/ui/components/panels/LogPanel.d.ts.map +1 -0
  590. package/dist/ui/components/panels/LogPanel.js +280 -0
  591. package/dist/ui/components/panels/LogPanel.js.map +1 -0
  592. package/dist/ui/components/panels/SessionPanel.d.ts +8 -0
  593. package/dist/ui/components/panels/SessionPanel.d.ts.map +1 -0
  594. package/dist/ui/components/panels/SessionPanel.js +81 -0
  595. package/dist/ui/components/panels/SessionPanel.js.map +1 -0
  596. package/dist/ui/components/panels/index.d.ts +4 -0
  597. package/dist/ui/components/panels/index.d.ts.map +1 -0
  598. package/dist/ui/components/panels/index.js +4 -0
  599. package/dist/ui/components/panels/index.js.map +1 -0
  600. package/dist/ui/components/views/ChatView.d.ts +12 -0
  601. package/dist/ui/components/views/ChatView.d.ts.map +1 -0
  602. package/dist/ui/components/views/ChatView.js +289 -0
  603. package/dist/ui/components/views/ChatView.js.map +1 -0
  604. package/dist/ui/components/views/index.d.ts +2 -0
  605. package/dist/ui/components/views/index.d.ts.map +1 -0
  606. package/dist/ui/components/views/index.js +2 -0
  607. package/dist/ui/components/views/index.js.map +1 -0
  608. package/dist/ui/contexts/TokenContext.d.ts +29 -0
  609. package/dist/ui/contexts/TokenContext.d.ts.map +1 -0
  610. package/dist/ui/contexts/TokenContext.js +79 -0
  611. package/dist/ui/contexts/TokenContext.js.map +1 -0
  612. package/dist/ui/hooks/atFileProcessor.d.ts +15 -0
  613. package/dist/ui/hooks/atFileProcessor.d.ts.map +1 -0
  614. package/dist/ui/hooks/atFileProcessor.js +88 -0
  615. package/dist/ui/hooks/atFileProcessor.js.map +1 -0
  616. package/dist/ui/hooks/index.d.ts +8 -0
  617. package/dist/ui/hooks/index.d.ts.map +1 -0
  618. package/dist/ui/hooks/index.js +8 -0
  619. package/dist/ui/hooks/index.js.map +1 -0
  620. package/dist/ui/hooks/slashCommandProcessor.d.ts +21 -0
  621. package/dist/ui/hooks/slashCommandProcessor.d.ts.map +1 -0
  622. package/dist/ui/hooks/slashCommandProcessor.js +100 -0
  623. package/dist/ui/hooks/slashCommandProcessor.js.map +1 -0
  624. package/dist/ui/hooks/useCommandBrowserState.d.ts +12 -0
  625. package/dist/ui/hooks/useCommandBrowserState.d.ts.map +1 -0
  626. package/dist/ui/hooks/useCommandBrowserState.js +66 -0
  627. package/dist/ui/hooks/useCommandBrowserState.js.map +1 -0
  628. package/dist/ui/hooks/useFileBrowserState.d.ts +15 -0
  629. package/dist/ui/hooks/useFileBrowserState.d.ts.map +1 -0
  630. package/dist/ui/hooks/useFileBrowserState.js +80 -0
  631. package/dist/ui/hooks/useFileBrowserState.js.map +1 -0
  632. package/dist/ui/hooks/useFileList.d.ts +20 -0
  633. package/dist/ui/hooks/useFileList.d.ts.map +1 -0
  634. package/dist/ui/hooks/useFileList.js +57 -0
  635. package/dist/ui/hooks/useFileList.js.map +1 -0
  636. package/dist/ui/hooks/useInputHistory.d.ts +9 -0
  637. package/dist/ui/hooks/useInputHistory.d.ts.map +1 -0
  638. package/dist/ui/hooks/useInputHistory.js +68 -0
  639. package/dist/ui/hooks/useInputHistory.js.map +1 -0
  640. package/dist/ui/hooks/usePlanExecution.d.ts +8 -0
  641. package/dist/ui/hooks/usePlanExecution.d.ts.map +1 -0
  642. package/dist/ui/hooks/usePlanExecution.js +214 -0
  643. package/dist/ui/hooks/usePlanExecution.js.map +1 -0
  644. package/dist/ui/index.d.ts +7 -0
  645. package/dist/ui/index.d.ts.map +1 -0
  646. package/dist/ui/index.js +7 -0
  647. package/dist/ui/index.js.map +1 -0
  648. package/dist/ui/ink-entry.d.ts +3 -0
  649. package/dist/ui/ink-entry.d.ts.map +1 -0
  650. package/dist/ui/ink-entry.js +22 -0
  651. package/dist/ui/ink-entry.js.map +1 -0
  652. package/dist/utils/env-filter.d.ts +4 -0
  653. package/dist/utils/env-filter.d.ts.map +1 -0
  654. package/dist/utils/env-filter.js +101 -0
  655. package/dist/utils/env-filter.js.map +1 -0
  656. package/dist/utils/file-system.d.ts +9 -0
  657. package/dist/utils/file-system.d.ts.map +1 -0
  658. package/dist/utils/file-system.js +99 -0
  659. package/dist/utils/file-system.js.map +1 -0
  660. package/dist/utils/git-utils.d.ts +2 -0
  661. package/dist/utils/git-utils.d.ts.map +1 -0
  662. package/dist/utils/git-utils.js +16 -0
  663. package/dist/utils/git-utils.js.map +1 -0
  664. package/dist/utils/json-stream-logger.d.ts +74 -0
  665. package/dist/utils/json-stream-logger.d.ts.map +1 -0
  666. package/dist/utils/json-stream-logger.js +808 -0
  667. package/dist/utils/json-stream-logger.js.map +1 -0
  668. package/dist/utils/logger.d.ts +152 -0
  669. package/dist/utils/logger.d.ts.map +1 -0
  670. package/dist/utils/logger.js +1672 -0
  671. package/dist/utils/logger.js.map +1 -0
  672. package/dist/utils/platform-utils.d.ts +19 -0
  673. package/dist/utils/platform-utils.d.ts.map +1 -0
  674. package/dist/utils/platform-utils.js +134 -0
  675. package/dist/utils/platform-utils.js.map +1 -0
  676. package/dist/utils/wsl-utils.d.ts +4 -0
  677. package/dist/utils/wsl-utils.d.ts.map +1 -0
  678. package/dist/utils/wsl-utils.js +72 -0
  679. package/dist/utils/wsl-utils.js.map +1 -0
  680. package/electron.vite.config.ts +63 -0
  681. package/google374b9eba0c52b043.html +1 -0
  682. package/package.json +122 -0
  683. package/src/agents/base/base-agent.ts +159 -0
  684. package/src/agents/docs-search/index.ts +365 -0
  685. package/src/agents/index.ts +34 -0
  686. package/src/agents/planner/index.ts +544 -0
  687. package/src/cli.ts +201 -0
  688. package/src/constants.ts +47 -0
  689. package/src/core/compact/compact-manager.ts +160 -0
  690. package/src/core/compact/compact-prompts.ts +150 -0
  691. package/src/core/compact/context-tracker.ts +164 -0
  692. package/src/core/compact/index.ts +25 -0
  693. package/src/core/config/config-manager.ts +460 -0
  694. package/src/core/config/index.ts +5 -0
  695. package/src/core/docs-manager.ts +678 -0
  696. package/src/core/llm/index.ts +7 -0
  697. package/src/core/llm/llm-client.ts +1550 -0
  698. package/src/core/session/index.ts +5 -0
  699. package/src/core/session/session-manager.ts +464 -0
  700. package/src/core/slash-command-handler.ts +410 -0
  701. package/src/core/usage-tracker.ts +438 -0
  702. package/src/errors/base.ts +81 -0
  703. package/src/errors/file.ts +183 -0
  704. package/src/errors/index.ts +95 -0
  705. package/src/errors/llm.ts +151 -0
  706. package/src/errors/network.ts +124 -0
  707. package/src/errors/validation.ts +111 -0
  708. package/src/eval/eval-runner.ts +456 -0
  709. package/src/eval/index.ts +8 -0
  710. package/src/eval/types.ts +139 -0
  711. package/src/index.ts +22 -0
  712. package/src/orchestration/index.ts +30 -0
  713. package/src/orchestration/plan-executor.ts +652 -0
  714. package/src/orchestration/types.ts +127 -0
  715. package/src/orchestration/utils.ts +119 -0
  716. package/src/orquesta/connection.ts +291 -0
  717. package/src/prompts/agents/docs-search-decision.ts +74 -0
  718. package/src/prompts/agents/docs-search.ts +84 -0
  719. package/src/prompts/agents/planning.ts +143 -0
  720. package/src/prompts/index.ts +31 -0
  721. package/src/prompts/shared/codebase-rules.ts +29 -0
  722. package/src/prompts/shared/git-rules.ts +94 -0
  723. package/src/prompts/shared/language-rules.ts +36 -0
  724. package/src/prompts/shared/tool-usage.ts +72 -0
  725. package/src/prompts/system/compact.ts +80 -0
  726. package/src/prompts/system/plan-execute.ts +89 -0
  727. package/src/tools/browser/browser-client.ts +1363 -0
  728. package/src/tools/browser/browser-tools.ts +1139 -0
  729. package/src/tools/browser/index.ts +65 -0
  730. package/src/tools/index.ts +23 -0
  731. package/src/tools/llm/agents/docs-search-tools.ts +368 -0
  732. package/src/tools/llm/agents/index.ts +22 -0
  733. package/src/tools/llm/index.ts +11 -0
  734. package/src/tools/llm/simple/ask-user-tool.ts +25 -0
  735. package/src/tools/llm/simple/background-bash-tool.ts +443 -0
  736. package/src/tools/llm/simple/background-powershell-tool.ts +421 -0
  737. package/src/tools/llm/simple/bash-tool.ts +238 -0
  738. package/src/tools/llm/simple/docs-search-agent-tool.ts +146 -0
  739. package/src/tools/llm/simple/file-tools.ts +1051 -0
  740. package/src/tools/llm/simple/final-response-tool.ts +180 -0
  741. package/src/tools/llm/simple/index.ts +42 -0
  742. package/src/tools/llm/simple/planning-tools.ts +143 -0
  743. package/src/tools/llm/simple/powershell-tool.ts +241 -0
  744. package/src/tools/llm/simple/simple-tool-executor.ts +279 -0
  745. package/src/tools/llm/simple/todo-tools.ts +207 -0
  746. package/src/tools/llm/simple/user-interaction-tools.ts +277 -0
  747. package/src/tools/office/common/constants.ts +335 -0
  748. package/src/tools/office/common/index.ts +133 -0
  749. package/src/tools/office/common/types.ts +286 -0
  750. package/src/tools/office/common/utils.ts +116 -0
  751. package/src/tools/office/excel-client.ts +1336 -0
  752. package/src/tools/office/excel-tools/cells.ts +359 -0
  753. package/src/tools/office/excel-tools/charts.ts +166 -0
  754. package/src/tools/office/excel-tools/comments.ts +155 -0
  755. package/src/tools/office/excel-tools/data-ops.ts +349 -0
  756. package/src/tools/office/excel-tools/export.ts +105 -0
  757. package/src/tools/office/excel-tools/formatting.ts +357 -0
  758. package/src/tools/office/excel-tools/index.ts +55 -0
  759. package/src/tools/office/excel-tools/launch.ts +303 -0
  760. package/src/tools/office/excel-tools/media.ts +117 -0
  761. package/src/tools/office/excel-tools/named-ranges.ts +148 -0
  762. package/src/tools/office/excel-tools/protection.ts +105 -0
  763. package/src/tools/office/excel-tools/rows-columns.ts +386 -0
  764. package/src/tools/office/excel-tools/sheets.ts +228 -0
  765. package/src/tools/office/excel-tools/validation.ts +226 -0
  766. package/src/tools/office/excel-tools.ts +9 -0
  767. package/src/tools/office/index.ts +259 -0
  768. package/src/tools/office/office-client-base.ts +242 -0
  769. package/src/tools/office/office-client.ts +377 -0
  770. package/src/tools/office/powerpoint-client.ts +1498 -0
  771. package/src/tools/office/powerpoint-tools/effects.ts +315 -0
  772. package/src/tools/office/powerpoint-tools/export.ts +138 -0
  773. package/src/tools/office/powerpoint-tools/index.ts +45 -0
  774. package/src/tools/office/powerpoint-tools/launch.ts +263 -0
  775. package/src/tools/office/powerpoint-tools/media.ts +291 -0
  776. package/src/tools/office/powerpoint-tools/notes.ts +220 -0
  777. package/src/tools/office/powerpoint-tools/sections.ts +140 -0
  778. package/src/tools/office/powerpoint-tools/shapes.ts +870 -0
  779. package/src/tools/office/powerpoint-tools/slides.ts +350 -0
  780. package/src/tools/office/powerpoint-tools/tables.ts +182 -0
  781. package/src/tools/office/powerpoint-tools/text.ts +473 -0
  782. package/src/tools/office/powerpoint-tools.ts +9 -0
  783. package/src/tools/office/word-client.ts +1697 -0
  784. package/src/tools/office/word-tools/bookmarks.ts +186 -0
  785. package/src/tools/office/word-tools/comments.ts +185 -0
  786. package/src/tools/office/word-tools/content.ts +229 -0
  787. package/src/tools/office/word-tools/export.ts +97 -0
  788. package/src/tools/office/word-tools/formatting.ts +161 -0
  789. package/src/tools/office/word-tools/headers-footers.ts +155 -0
  790. package/src/tools/office/word-tools/index.ts +57 -0
  791. package/src/tools/office/word-tools/launch.ts +312 -0
  792. package/src/tools/office/word-tools/lists.ts +97 -0
  793. package/src/tools/office/word-tools/navigation.ts +114 -0
  794. package/src/tools/office/word-tools/page-setup.ts +195 -0
  795. package/src/tools/office/word-tools/tables.ts +262 -0
  796. package/src/tools/office/word-tools/text.ts +294 -0
  797. package/src/tools/office/word-tools/undo-redo.ts +97 -0
  798. package/src/tools/office/word-tools/watermarks.ts +105 -0
  799. package/src/tools/office/word-tools.ts +9 -0
  800. package/src/tools/registry.ts +527 -0
  801. package/src/tools/types.ts +231 -0
  802. package/src/types/index.ts +181 -0
  803. package/src/ui/PlanExecuteView.tsx +119 -0
  804. package/src/ui/TodoPanel.tsx +240 -0
  805. package/src/ui/UpdateNotification.tsx +105 -0
  806. package/src/ui/components/ActivityIndicator.tsx +234 -0
  807. package/src/ui/components/CommandBrowser.tsx +114 -0
  808. package/src/ui/components/CustomTextInput.tsx +389 -0
  809. package/src/ui/components/DocsSearchProgress.tsx +85 -0
  810. package/src/ui/components/FileBrowser.tsx +93 -0
  811. package/src/ui/components/LLMSetupWizard.tsx +333 -0
  812. package/src/ui/components/Logo.tsx +125 -0
  813. package/src/ui/components/MarkdownRenderer.tsx +358 -0
  814. package/src/ui/components/ModelSelector.tsx +203 -0
  815. package/src/ui/components/PlanExecuteApp.tsx +2007 -0
  816. package/src/ui/components/ProgressBar.tsx +51 -0
  817. package/src/ui/components/StatusBar.tsx +302 -0
  818. package/src/ui/components/ThinkingIndicator.tsx +120 -0
  819. package/src/ui/components/TodoListView.tsx +140 -0
  820. package/src/ui/components/ToolSelector.tsx +215 -0
  821. package/src/ui/components/dialogs/ApprovalDialog.tsx +259 -0
  822. package/src/ui/components/dialogs/AskUserDialog.tsx +159 -0
  823. package/src/ui/components/dialogs/DocsBrowser.tsx +222 -0
  824. package/src/ui/components/dialogs/SettingsDialog.tsx +939 -0
  825. package/src/ui/components/dialogs/index.ts +13 -0
  826. package/src/ui/components/index.ts +27 -0
  827. package/src/ui/components/panels/LogPanel.tsx +385 -0
  828. package/src/ui/components/panels/SessionPanel.tsx +146 -0
  829. package/src/ui/components/panels/index.ts +13 -0
  830. package/src/ui/components/views/ChatView.tsx +447 -0
  831. package/src/ui/components/views/index.ts +5 -0
  832. package/src/ui/contexts/TokenContext.tsx +139 -0
  833. package/src/ui/hooks/atFileProcessor.ts +167 -0
  834. package/src/ui/hooks/index.ts +11 -0
  835. package/src/ui/hooks/slashCommandProcessor.ts +174 -0
  836. package/src/ui/hooks/useCommandBrowserState.ts +97 -0
  837. package/src/ui/hooks/useFileBrowserState.ts +116 -0
  838. package/src/ui/hooks/useFileList.ts +132 -0
  839. package/src/ui/hooks/useInputHistory.ts +89 -0
  840. package/src/ui/hooks/usePlanExecution.ts +339 -0
  841. package/src/ui/index.ts +10 -0
  842. package/src/ui/ink-entry.tsx +36 -0
  843. package/src/utils/env-filter.ts +164 -0
  844. package/src/utils/file-system.ts +133 -0
  845. package/src/utils/git-utils.ts +30 -0
  846. package/src/utils/json-stream-logger.ts +1259 -0
  847. package/src/utils/logger.ts +2767 -0
  848. package/src/utils/platform-utils.ts +256 -0
  849. package/src/utils/wsl-utils.ts +113 -0
  850. package/tsconfig.electron.json +39 -0
  851. package/tsconfig.json +64 -0
@@ -0,0 +1,1259 @@
1
+ /**
2
+ * JSON Stream Logger
3
+ *
4
+ * Logs all terminal interactions and events to a JSON file for analysis
5
+ */
6
+
7
+ import { createWriteStream, WriteStream } from 'fs';
8
+ import { mkdir, access, readFile, writeFile } from 'fs/promises';
9
+ import { dirname, join } from 'path';
10
+ import chalk from 'chalk';
11
+ import { PROJECTS_DIR } from '../constants.js';
12
+
13
+ // Flush interval for periodic buffer writes (in milliseconds)
14
+ const FLUSH_INTERVAL_MS = 1000;
15
+
16
+ // Log category type
17
+ export type LogCategory = 'all' | 'chat' | 'tool' | 'http' | 'llm' | 'ui' | 'system' | 'debug';
18
+
19
+ export interface StreamLogEntry {
20
+ timestamp: string;
21
+ type:
22
+ | 'user_input'
23
+ | 'assistant_response'
24
+ | 'system_message'
25
+ | 'error'
26
+ | 'tool_call'
27
+ | 'tool_start' // Tool execution start
28
+ | 'tool_end' // Tool execution complete
29
+ | 'todo_update'
30
+ | 'planning_start' // Planning start
31
+ | 'planning_end' // Planning complete
32
+ | 'server_request' // Windows server request
33
+ | 'server_response' // Windows server response
34
+ | 'debug'
35
+ | 'info'
36
+ // New log types for comprehensive logging
37
+ | 'ui_interaction' // UI interaction (click, keyboard, scroll, etc.)
38
+ | 'component_lifecycle' // Component lifecycle (mount, unmount, render)
39
+ | 'screen_change' // Screen/tab/route transition
40
+ | 'form_event' // Form event (submit, validation, etc.)
41
+ | 'modal_event' // Modal/dialog/toast event
42
+ | 'loading_event' // Loading/skeleton/progress event
43
+ | 'animation_event' // Animation/transition event
44
+ | 'layout_event' // Layout event (resize, breakpoint, etc.)
45
+ | 'ipc_event' // IPC communication event (Electron)
46
+ | 'window_event' // Window event (Electron)
47
+ | 'system_event' // System event (app ready, quit, etc.)
48
+ | 'update_event' // Auto-update event
49
+ | 'session_event' // Session event (start, end, milestone)
50
+ | 'http_event'; // HTTP event (stream start/end, etc.)
51
+ content: string;
52
+ category?: LogCategory; // Log category (for file splitting)
53
+ metadata?: Record<string, unknown>;
54
+ }
55
+
56
+ /**
57
+ * Determine category from log type
58
+ */
59
+ function getLogCategory(type: StreamLogEntry['type']): LogCategory {
60
+ switch (type) {
61
+ // Chat category
62
+ case 'user_input':
63
+ case 'assistant_response':
64
+ return 'chat';
65
+
66
+ // Tool category
67
+ case 'tool_call':
68
+ case 'tool_start':
69
+ case 'tool_end':
70
+ case 'todo_update':
71
+ case 'planning_start':
72
+ case 'planning_end':
73
+ return 'tool';
74
+
75
+ // HTTP category
76
+ case 'server_request':
77
+ case 'server_response':
78
+ case 'http_event':
79
+ return 'http';
80
+
81
+ // UI category
82
+ case 'ui_interaction':
83
+ case 'component_lifecycle':
84
+ case 'screen_change':
85
+ case 'form_event':
86
+ case 'modal_event':
87
+ case 'loading_event':
88
+ case 'animation_event':
89
+ case 'layout_event':
90
+ return 'ui';
91
+
92
+ // System category
93
+ case 'system_message':
94
+ case 'ipc_event':
95
+ case 'window_event':
96
+ case 'system_event':
97
+ case 'update_event':
98
+ case 'session_event':
99
+ case 'error':
100
+ return 'system';
101
+
102
+ // Debug category
103
+ case 'debug':
104
+ case 'info':
105
+ return 'debug';
106
+
107
+ default:
108
+ return 'system';
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Re-determine category from message content
114
+ * Analyze message prefix for more accurate category determination
115
+ */
116
+ function refineCategoryFromContent(category: LogCategory, content: string): LogCategory {
117
+ const msg = content.toLowerCase();
118
+
119
+ // LLM-related messages go to llm category
120
+ if (msg.includes('[llm]') || msg.includes('llm request') || msg.includes('llm response') ||
121
+ msg.includes('llm tool') || msg.includes('completion') || msg.includes('tokens')) {
122
+ return 'llm';
123
+ }
124
+
125
+ // HTTP-related messages
126
+ if (msg.includes('[http]') || msg.includes('stream start') || msg.includes('stream end') ||
127
+ msg.includes('stream chunk') || msg.includes('http request') || msg.includes('http response')) {
128
+ return 'http';
129
+ }
130
+
131
+ // Tool-related messages
132
+ if (msg.includes('[tool]') || msg.includes('[bash]') || msg.includes('[read]') ||
133
+ msg.includes('[write]') || msg.includes('[edit]') || msg.includes('tool execution') ||
134
+ msg.includes('tool result')) {
135
+ return 'tool';
136
+ }
137
+
138
+ // UI-related messages
139
+ if (msg.includes('[ui]') || msg.includes('[component]') || msg.includes('[render]') ||
140
+ msg.includes('[modal]') || msg.includes('[form]') || msg.includes('[loading]')) {
141
+ return 'ui';
142
+ }
143
+
144
+ // System-related messages
145
+ if (msg.includes('[system]') || msg.includes('[session]') || msg.includes('[config]') ||
146
+ msg.includes('[update]') || msg.includes('[window]') || msg.includes('[ipc]')) {
147
+ return 'system';
148
+ }
149
+
150
+ // Keep existing category
151
+ return category;
152
+ }
153
+
154
+ // Category stream information
155
+ interface CategoryStreamInfo {
156
+ stream: WriteStream;
157
+ buffer: StreamLogEntry[];
158
+ isFirstEntry: boolean;
159
+ filePath: string;
160
+ }
161
+
162
+ export class JsonStreamLogger {
163
+ private writeStream: WriteStream | null = null;
164
+ private errorWriteStream: WriteStream | null = null;
165
+ private filePath: string;
166
+ private errorFilePath: string;
167
+ private isFirstEntry = true;
168
+ private isFirstErrorEntry = true;
169
+ private buffer: StreamLogEntry[] = [];
170
+ private errorBuffer: StreamLogEntry[] = [];
171
+ private flushInterval: NodeJS.Timeout | null = null;
172
+ private isEnabled = false;
173
+ private errorStreamInitialized = false;
174
+ private appendMode = false;
175
+ private verbose = false;
176
+
177
+ // Category-based stream management (for file splitting)
178
+ private categoryStreams: Map<LogCategory, CategoryStreamInfo> = new Map();
179
+ private enableCategorySplit = true; // Enable category-based file splitting
180
+ private pendingStreamInits: Set<Promise<void>> = new Set(); // Track pending stream initialization promises
181
+
182
+ constructor(filePath: string, errorFilePath: string) {
183
+ this.filePath = filePath;
184
+ this.errorFilePath = errorFilePath;
185
+ }
186
+
187
+ /**
188
+ * Initialize the JSON stream logger
189
+ * @param append - Whether to append to existing file
190
+ * @param verbose - Whether to show initialization messages
191
+ */
192
+ async initialize(append = false, verbose = false): Promise<void> {
193
+ this.verbose = verbose;
194
+ try {
195
+ // Store append mode for error stream initialization
196
+ this.appendMode = append;
197
+
198
+ // Create directory if it doesn't exist
199
+ await mkdir(dirname(this.filePath), { recursive: true });
200
+
201
+ // Check if file exists and we're in append mode
202
+ let fileExists = false;
203
+ try {
204
+ await access(this.filePath);
205
+ fileExists = true;
206
+ } catch {
207
+ fileExists = false;
208
+ }
209
+
210
+ if (append && fileExists) {
211
+ // Append mode: remove closing bracket and continue
212
+ await this.prepareFileForAppend(this.filePath);
213
+ this.writeStream = createWriteStream(this.filePath, { flags: 'a' });
214
+ this.isFirstEntry = false; // Not first entry since file has content
215
+ if (this.verbose) {
216
+ console.log(chalk.dim(`📝 JSON stream logging resumed (append mode)`));
217
+ }
218
+ } else {
219
+ // New file mode: create fresh file
220
+ this.writeStream = createWriteStream(this.filePath, { flags: 'w' });
221
+ this.writeStream.write('[\n');
222
+ this.isFirstEntry = true;
223
+ if (this.verbose) {
224
+ console.log(chalk.dim(`📝 JSON stream logging enabled`));
225
+ }
226
+ }
227
+
228
+ this.isEnabled = true;
229
+
230
+ // Set up periodic flush
231
+ this.flushInterval = setInterval(() => {
232
+ this.flush();
233
+ this.flushErrors();
234
+ this.flushCategories();
235
+ }, FLUSH_INTERVAL_MS);
236
+
237
+ if (this.verbose) {
238
+ console.log(chalk.dim(` Log: ${this.filePath}`));
239
+ }
240
+ } catch (error) {
241
+ console.error(chalk.red('Failed to initialize JSON stream logger:'), error);
242
+ this.isEnabled = false;
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Prepare file for append by removing closing bracket
248
+ */
249
+ private async prepareFileForAppend(filePath: string): Promise<void> {
250
+ try {
251
+ const content = await readFile(filePath, 'utf-8');
252
+ // Remove the closing bracket and trailing whitespace
253
+ const trimmed = content.trimEnd();
254
+ if (trimmed.endsWith(']')) {
255
+ const withoutClosing = trimmed.slice(0, -1);
256
+ await writeFile(filePath, withoutClosing, 'utf-8');
257
+ }
258
+ } catch (error) {
259
+ console.error(chalk.yellow('Warning: Could not prepare file for append:'), error);
260
+ // Continue anyway - will create new file
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Initialize category stream (lazy initialization)
266
+ * This method can be called even after being pre-registered in the Map by log()
267
+ * If stream is null, create stream and update existing info
268
+ */
269
+ private async initializeCategoryStream(category: LogCategory): Promise<void> {
270
+ if (!this.enableCategorySplit) {
271
+ return;
272
+ }
273
+
274
+ // Check existing info (may have been pre-registered by log())
275
+ const existingInfo = this.categoryStreams.get(category);
276
+
277
+ // Return if valid stream already exists
278
+ if (existingInfo && existingInfo.stream && !existingInfo.stream.destroyed) {
279
+ return;
280
+ }
281
+
282
+ try {
283
+ // Generate category file path: {sessionId}_log.json → {sessionId}_{category}.json
284
+ const categoryFilePath = existingInfo?.filePath || this.filePath.replace('_log.json', `_${category}.json`);
285
+
286
+ // Create directory if it doesn't exist
287
+ await mkdir(dirname(categoryFilePath), { recursive: true });
288
+
289
+ // Check if file exists and we're in append mode
290
+ let fileExists = false;
291
+ try {
292
+ await access(categoryFilePath);
293
+ fileExists = true;
294
+ } catch {
295
+ fileExists = false;
296
+ }
297
+
298
+ let stream: WriteStream;
299
+ let isFirstEntry = true;
300
+
301
+ if (this.appendMode && fileExists) {
302
+ // Append mode: remove closing bracket and continue
303
+ await this.prepareFileForAppend(categoryFilePath);
304
+ stream = createWriteStream(categoryFilePath, { flags: 'a' });
305
+ isFirstEntry = false;
306
+ } else {
307
+ // New file mode: create fresh file
308
+ stream = createWriteStream(categoryFilePath, { flags: 'w' });
309
+ stream.write('[\n');
310
+ isFirstEntry = true;
311
+ }
312
+
313
+ // Update stream only if existing info exists, otherwise create new
314
+ if (existingInfo) {
315
+ existingInfo.stream = stream;
316
+ existingInfo.isFirstEntry = isFirstEntry;
317
+ // filePath is already set
318
+ } else {
319
+ this.categoryStreams.set(category, {
320
+ stream,
321
+ buffer: [],
322
+ isFirstEntry,
323
+ filePath: categoryFilePath,
324
+ });
325
+ }
326
+
327
+ if (this.verbose) {
328
+ console.log(chalk.dim(` Category log: ${categoryFilePath}`));
329
+ }
330
+ } catch (error) {
331
+ console.error(chalk.red(`Failed to initialize category stream (${category}):`), error);
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Log an entry to the JSON stream
337
+ */
338
+ log(entry: StreamLogEntry): void {
339
+ if (!this.isEnabled || !this.writeStream) {
340
+ return;
341
+ }
342
+
343
+ // Determine category if not set
344
+ if (!entry.category) {
345
+ const baseCategory = getLogCategory(entry.type);
346
+ // Refine category based on message content (for more accurate categorization)
347
+ entry.category = refineCategoryFromContent(baseCategory, entry.content);
348
+ }
349
+
350
+ // Add to main buffer
351
+ this.buffer.push(entry);
352
+
353
+ // Add to error buffer if error
354
+ if (entry.type === 'error') {
355
+ // Initialize error stream on first error (lazy initialization)
356
+ if (!this.errorStreamInitialized) {
357
+ this.initializeErrorStream().catch(err => {
358
+ console.error(chalk.red('Failed to initialize error stream:'), err);
359
+ });
360
+ }
361
+ this.errorBuffer.push(entry);
362
+ }
363
+
364
+ // Add to category buffer (for file splitting)
365
+ if (this.enableCategorySplit && entry.category && entry.category !== 'all') {
366
+ const category = entry.category;
367
+
368
+ // If no stream, register temporary object with buffer only (stream initialized later)
369
+ if (!this.categoryStreams.has(category)) {
370
+ // Generate file path
371
+ const categoryFilePath = this.filePath.replace('_log.json', `_${category}.json`);
372
+
373
+ // First register in Map (stream is null, buffer only prepared)
374
+ this.categoryStreams.set(category, {
375
+ stream: null as unknown as WriteStream,
376
+ buffer: [],
377
+ isFirstEntry: true,
378
+ filePath: categoryFilePath,
379
+ });
380
+
381
+ // Initialize stream asynchronously (track promise)
382
+ const initPromise = this.initializeCategoryStream(category).catch(err => {
383
+ console.error(chalk.red(`Failed to initialize category stream (${category}):`), err);
384
+ });
385
+ this.pendingStreamInits.add(initPromise);
386
+ initPromise.finally(() => this.pendingStreamInits.delete(initPromise));
387
+ }
388
+
389
+ // streamInfo now always exists
390
+ const streamInfo = this.categoryStreams.get(category);
391
+ if (streamInfo) {
392
+ streamInfo.buffer.push(entry);
393
+ }
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Flush buffered entries to file
399
+ */
400
+ private flush(): void {
401
+ if (!this.writeStream || this.buffer.length === 0) {
402
+ return;
403
+ }
404
+
405
+ try {
406
+ for (const entry of this.buffer) {
407
+ // Add comma if not first entry
408
+ if (!this.isFirstEntry) {
409
+ this.writeStream.write(',\n');
410
+ }
411
+ this.isFirstEntry = false;
412
+
413
+ // Write the entry as formatted JSON
414
+ const json = JSON.stringify(entry, null, 2);
415
+ // Indent each line by 2 spaces for array formatting
416
+ const indentedJson = json.split('\n').map(line => ' ' + line).join('\n');
417
+ this.writeStream.write(indentedJson);
418
+ }
419
+
420
+ // Clear buffer
421
+ this.buffer = [];
422
+ } catch (error) {
423
+ console.error(chalk.red('Failed to write to JSON stream:'), error);
424
+ }
425
+ }
426
+
427
+ /**
428
+ * Initialize error stream (lazy initialization)
429
+ */
430
+ private async initializeErrorStream(): Promise<void> {
431
+ if (this.errorStreamInitialized) {
432
+ return;
433
+ }
434
+
435
+ try {
436
+ // Create directory if it doesn't exist
437
+ await mkdir(dirname(this.errorFilePath), { recursive: true });
438
+
439
+ // Check if file exists and we're in append mode
440
+ let fileExists = false;
441
+ try {
442
+ await access(this.errorFilePath);
443
+ fileExists = true;
444
+ } catch {
445
+ fileExists = false;
446
+ }
447
+
448
+ if (this.appendMode && fileExists) {
449
+ // Append mode: remove closing bracket and continue
450
+ await this.prepareFileForAppend(this.errorFilePath);
451
+ this.errorWriteStream = createWriteStream(this.errorFilePath, { flags: 'a' });
452
+ this.isFirstErrorEntry = false;
453
+ } else {
454
+ // New file mode: create fresh file
455
+ this.errorWriteStream = createWriteStream(this.errorFilePath, { flags: 'w' });
456
+ this.errorWriteStream.write('[\n');
457
+ this.isFirstErrorEntry = true;
458
+ }
459
+
460
+ this.errorStreamInitialized = true;
461
+ console.log(chalk.dim(` Error log: ${this.errorFilePath}`));
462
+ } catch (error) {
463
+ console.error(chalk.red('Failed to initialize error stream:'), error);
464
+ }
465
+ }
466
+
467
+ /**
468
+ * Flush buffered error entries to error file
469
+ */
470
+ private flushErrors(): void {
471
+ if (!this.errorWriteStream || this.errorBuffer.length === 0) {
472
+ return;
473
+ }
474
+
475
+ try {
476
+ for (const entry of this.errorBuffer) {
477
+ // Add comma if not first entry
478
+ if (!this.isFirstErrorEntry) {
479
+ this.errorWriteStream.write(',\n');
480
+ }
481
+ this.isFirstErrorEntry = false;
482
+
483
+ // Write the entry as formatted JSON
484
+ const json = JSON.stringify(entry, null, 2);
485
+ // Indent each line by 2 spaces for array formatting
486
+ const indentedJson = json.split('\n').map(line => ' ' + line).join('\n');
487
+ this.errorWriteStream.write(indentedJson);
488
+ }
489
+
490
+ // Clear error buffer
491
+ this.errorBuffer = [];
492
+ } catch (error) {
493
+ console.error(chalk.red('Failed to write to error JSON stream:'), error);
494
+ }
495
+ }
496
+
497
+ /**
498
+ * Flush buffered entries to category files
499
+ */
500
+ private flushCategories(): void {
501
+ for (const [_category, streamInfo] of this.categoryStreams) {
502
+ // Skip if stream is missing, not writable, or buffer is empty
503
+ // If stream not yet initialized, buffer is maintained and retry on next flush
504
+ if (!streamInfo.stream || !streamInfo.stream.writable || streamInfo.buffer.length === 0) {
505
+ continue;
506
+ }
507
+
508
+ try {
509
+ for (const entry of streamInfo.buffer) {
510
+ // Add comma if not first entry
511
+ if (!streamInfo.isFirstEntry) {
512
+ streamInfo.stream.write(',\n');
513
+ }
514
+ streamInfo.isFirstEntry = false;
515
+
516
+ // Write the entry as formatted JSON
517
+ const json = JSON.stringify(entry, null, 2);
518
+ // Indent each line by 2 spaces for array formatting
519
+ const indentedJson = json.split('\n').map(line => ' ' + line).join('\n');
520
+ streamInfo.stream.write(indentedJson);
521
+ }
522
+
523
+ // Clear category buffer
524
+ streamInfo.buffer = [];
525
+ } catch (error) {
526
+ console.error(chalk.red(`Failed to write to category stream:`), error);
527
+ }
528
+ }
529
+ }
530
+
531
+ /**
532
+ * Log user input
533
+ */
534
+ logUserInput(input: string): void {
535
+ this.log({
536
+ timestamp: new Date().toISOString(),
537
+ type: 'user_input',
538
+ content: input,
539
+ metadata: {
540
+ length: input.length,
541
+ },
542
+ });
543
+ }
544
+
545
+ /**
546
+ * Log assistant response
547
+ */
548
+ logAssistantResponse(response: string, streaming = false): void {
549
+ this.log({
550
+ timestamp: new Date().toISOString(),
551
+ type: 'assistant_response',
552
+ content: response,
553
+ metadata: {
554
+ length: response.length,
555
+ streaming,
556
+ },
557
+ });
558
+ }
559
+
560
+ /**
561
+ * Log system message
562
+ */
563
+ logSystemMessage(message: string): void {
564
+ this.log({
565
+ timestamp: new Date().toISOString(),
566
+ type: 'system_message',
567
+ content: message,
568
+ });
569
+ }
570
+
571
+ /**
572
+ * Log error
573
+ */
574
+ logError(error: Error | unknown, context?: string): void {
575
+ let errorMessage: string;
576
+ let errorStack: string | undefined;
577
+ let errorDetails: Record<string, unknown> | undefined;
578
+
579
+ if (error instanceof Error) {
580
+ errorMessage = error.message;
581
+ errorStack = error.stack;
582
+ // Include custom error details if available
583
+ if ((error as any).details) {
584
+ errorDetails = (error as any).details;
585
+ }
586
+ } else if (typeof error === 'object' && error !== null) {
587
+ // For plain objects, serialize them properly
588
+ try {
589
+ errorMessage = JSON.stringify(error, null, 2);
590
+ errorDetails = error as Record<string, unknown>;
591
+ } catch {
592
+ errorMessage = String(error);
593
+ }
594
+ } else {
595
+ errorMessage = String(error);
596
+ }
597
+
598
+ this.log({
599
+ timestamp: new Date().toISOString(),
600
+ type: 'error',
601
+ content: errorMessage,
602
+ metadata: {
603
+ context,
604
+ stack: errorStack,
605
+ name: error instanceof Error ? error.constructor.name : 'Unknown',
606
+ ...(errorDetails && { details: errorDetails }),
607
+ },
608
+ });
609
+ }
610
+
611
+ /**
612
+ * Log tool call
613
+ */
614
+ logToolCall(toolName: string, args: unknown, result?: unknown, error?: Error): void {
615
+ this.log({
616
+ timestamp: new Date().toISOString(),
617
+ type: 'tool_call',
618
+ content: `Tool: ${toolName}`,
619
+ metadata: {
620
+ toolName,
621
+ args,
622
+ result: result ? (typeof result === 'string' ? result.substring(0, 500) : result) : undefined,
623
+ error: error ? error.message : undefined,
624
+ success: !error,
625
+ },
626
+ });
627
+ }
628
+
629
+ /**
630
+ * Log TODO update
631
+ */
632
+ logTodoUpdate(todos: unknown[]): void {
633
+ this.log({
634
+ timestamp: new Date().toISOString(),
635
+ type: 'todo_update',
636
+ content: `TODO list updated (${todos.length} items)`,
637
+ metadata: {
638
+ todos,
639
+ count: todos.length,
640
+ },
641
+ });
642
+ }
643
+
644
+ /**
645
+ * Log debug information
646
+ */
647
+ logDebug(message: string, data?: unknown): void {
648
+ this.log({
649
+ timestamp: new Date().toISOString(),
650
+ type: 'debug',
651
+ content: message,
652
+ metadata: data ? { data } : undefined,
653
+ });
654
+ }
655
+
656
+ /**
657
+ * Log info message
658
+ */
659
+ logInfo(message: string, data?: unknown): void {
660
+ this.log({
661
+ timestamp: new Date().toISOString(),
662
+ type: 'info',
663
+ content: message,
664
+ metadata: data ? { data } : undefined,
665
+ });
666
+ }
667
+
668
+ /**
669
+ * Log tool execution start
670
+ */
671
+ logToolStart(toolName: string, args: unknown, reason?: string): void {
672
+ this.log({
673
+ timestamp: new Date().toISOString(),
674
+ type: 'tool_start',
675
+ content: `Tool Start: ${toolName}`,
676
+ metadata: {
677
+ toolName,
678
+ args,
679
+ reason,
680
+ },
681
+ });
682
+ }
683
+
684
+ /**
685
+ * Log tool execution end
686
+ */
687
+ logToolEnd(toolName: string, success: boolean, result?: unknown, error?: string, durationMs?: number): void {
688
+ this.log({
689
+ timestamp: new Date().toISOString(),
690
+ type: 'tool_end',
691
+ content: `Tool End: ${toolName} (${success ? 'success' : 'failed'})`,
692
+ metadata: {
693
+ toolName,
694
+ success,
695
+ result: result ? (typeof result === 'string' ? result.substring(0, 1000) : result) : undefined,
696
+ error,
697
+ durationMs,
698
+ },
699
+ });
700
+ }
701
+
702
+ /**
703
+ * Log planning phase start
704
+ */
705
+ logPlanningStart(userMessage: string, context?: Record<string, unknown>): void {
706
+ this.log({
707
+ timestamp: new Date().toISOString(),
708
+ type: 'planning_start',
709
+ content: `Planning Start: ${userMessage.substring(0, 100)}...`,
710
+ metadata: {
711
+ userMessage,
712
+ messageLength: userMessage.length,
713
+ ...context,
714
+ },
715
+ });
716
+ }
717
+
718
+ /**
719
+ * Log planning phase end
720
+ */
721
+ logPlanningEnd(todoCount: number, todos?: unknown[], directResponse?: boolean, durationMs?: number): void {
722
+ this.log({
723
+ timestamp: new Date().toISOString(),
724
+ type: 'planning_end',
725
+ content: directResponse ? 'Planning End: Direct response' : `Planning End: ${todoCount} TODOs created`,
726
+ metadata: {
727
+ todoCount,
728
+ todos,
729
+ directResponse,
730
+ durationMs,
731
+ },
732
+ });
733
+ }
734
+
735
+ /**
736
+ * Log server request (legacy Windows servers)
737
+ */
738
+ logServerRequest(serverType: 'browser' | 'office', method: string, endpoint: string, body?: unknown): void {
739
+ this.log({
740
+ timestamp: new Date().toISOString(),
741
+ type: 'server_request',
742
+ content: `${serverType.toUpperCase()} Server: ${method} ${endpoint}`,
743
+ metadata: {
744
+ serverType,
745
+ method,
746
+ endpoint,
747
+ body,
748
+ },
749
+ });
750
+ }
751
+
752
+ /**
753
+ * Log server response (for Windows servers)
754
+ */
755
+ logServerResponse(
756
+ serverType: 'browser' | 'office',
757
+ endpoint: string,
758
+ success: boolean,
759
+ response?: unknown,
760
+ error?: string,
761
+ durationMs?: number
762
+ ): void {
763
+ this.log({
764
+ timestamp: new Date().toISOString(),
765
+ type: 'server_response',
766
+ content: `${serverType.toUpperCase()} Server Response: ${endpoint} (${success ? 'success' : 'failed'})`,
767
+ metadata: {
768
+ serverType,
769
+ endpoint,
770
+ success,
771
+ response: response ? (typeof response === 'string' ? response.substring(0, 500) : response) : undefined,
772
+ error,
773
+ durationMs,
774
+ },
775
+ });
776
+ }
777
+
778
+ // ============================================================================
779
+ // New Log Methods for Comprehensive Logging
780
+ // ============================================================================
781
+
782
+ /**
783
+ * Log UI interaction (click, keyboard, scroll, drag)
784
+ */
785
+ logUIInteraction(action: string, element?: string, context?: Record<string, unknown>): void {
786
+ this.log({
787
+ timestamp: new Date().toISOString(),
788
+ type: 'ui_interaction',
789
+ content: `UI: ${action}${element ? ` - ${element}` : ''}`,
790
+ metadata: {
791
+ action,
792
+ element,
793
+ ...context,
794
+ },
795
+ });
796
+ }
797
+
798
+ /**
799
+ * Log component lifecycle (mount, unmount, render, stateChange)
800
+ */
801
+ logComponentLifecycle(
802
+ event: 'mount' | 'unmount' | 'render' | 'renderComplete' | 'stateChange',
803
+ componentName: string,
804
+ context?: Record<string, unknown>
805
+ ): void {
806
+ this.log({
807
+ timestamp: new Date().toISOString(),
808
+ type: 'component_lifecycle',
809
+ content: `Component ${event}: ${componentName}`,
810
+ metadata: {
811
+ event,
812
+ componentName,
813
+ ...context,
814
+ },
815
+ });
816
+ }
817
+
818
+ /**
819
+ * Log screen/navigation changes
820
+ */
821
+ logScreenChange(
822
+ changeType: 'screen' | 'tab' | 'route',
823
+ target: string,
824
+ context?: Record<string, unknown>
825
+ ): void {
826
+ this.log({
827
+ timestamp: new Date().toISOString(),
828
+ type: 'screen_change',
829
+ content: `${changeType.charAt(0).toUpperCase() + changeType.slice(1)} change: ${target}`,
830
+ metadata: {
831
+ changeType,
832
+ target,
833
+ ...context,
834
+ },
835
+ });
836
+ }
837
+
838
+ /**
839
+ * Log form events
840
+ */
841
+ logFormEvent(
842
+ event: 'start' | 'submit' | 'result' | 'error' | 'fieldChange' | 'validation',
843
+ formId: string,
844
+ context?: Record<string, unknown>
845
+ ): void {
846
+ this.log({
847
+ timestamp: new Date().toISOString(),
848
+ type: 'form_event',
849
+ content: `Form ${event}: ${formId}`,
850
+ metadata: {
851
+ event,
852
+ formId,
853
+ ...context,
854
+ },
855
+ });
856
+ }
857
+
858
+ /**
859
+ * Log modal/dialog/toast events
860
+ */
861
+ logModalEvent(
862
+ event: 'modalOpen' | 'modalClose' | 'dialogShow' | 'dialogResult' | 'toastShow' | 'toastDismiss',
863
+ id: string,
864
+ context?: Record<string, unknown>
865
+ ): void {
866
+ this.log({
867
+ timestamp: new Date().toISOString(),
868
+ type: 'modal_event',
869
+ content: `${event}: ${id}`,
870
+ metadata: {
871
+ event,
872
+ id,
873
+ ...context,
874
+ },
875
+ });
876
+ }
877
+
878
+ /**
879
+ * Log loading/skeleton/progress events
880
+ */
881
+ logLoadingEvent(
882
+ event: 'loadingStart' | 'loadingEnd' | 'loadingError' | 'skeletonShow' | 'skeletonHide' |
883
+ 'progressStart' | 'progressUpdate' | 'progressComplete' | 'progressError',
884
+ id: string,
885
+ context?: Record<string, unknown>
886
+ ): void {
887
+ this.log({
888
+ timestamp: new Date().toISOString(),
889
+ type: 'loading_event',
890
+ content: `${event}: ${id}`,
891
+ metadata: {
892
+ event,
893
+ id,
894
+ ...context,
895
+ },
896
+ });
897
+ }
898
+
899
+ /**
900
+ * Log animation/transition events
901
+ */
902
+ logAnimationEvent(
903
+ event: 'animationStart' | 'animationEnd' | 'transitionStart' | 'transitionEnd' | 'hoverEnter' | 'hoverLeave',
904
+ name: string,
905
+ context?: Record<string, unknown>
906
+ ): void {
907
+ this.log({
908
+ timestamp: new Date().toISOString(),
909
+ type: 'animation_event',
910
+ content: `${event}: ${name}`,
911
+ metadata: {
912
+ event,
913
+ name,
914
+ ...context,
915
+ },
916
+ });
917
+ }
918
+
919
+ /**
920
+ * Log layout events (viewport, breakpoint, shift)
921
+ */
922
+ logLayoutEvent(
923
+ event: 'viewportResize' | 'breakpointChange' | 'layoutShift' | 'scrollPosition',
924
+ context?: Record<string, unknown>
925
+ ): void {
926
+ this.log({
927
+ timestamp: new Date().toISOString(),
928
+ type: 'layout_event',
929
+ content: `Layout: ${event}`,
930
+ metadata: {
931
+ event,
932
+ ...context,
933
+ },
934
+ });
935
+ }
936
+
937
+ /**
938
+ * Log IPC events (Electron)
939
+ */
940
+ logIPCEvent(
941
+ event: 'send' | 'receive' | 'invoke' | 'handle' | 'error',
942
+ channel: string,
943
+ context?: Record<string, unknown>
944
+ ): void {
945
+ this.log({
946
+ timestamp: new Date().toISOString(),
947
+ type: 'ipc_event',
948
+ content: `IPC ${event}: ${channel}`,
949
+ metadata: {
950
+ event,
951
+ channel,
952
+ ...context,
953
+ },
954
+ });
955
+ }
956
+
957
+ /**
958
+ * Log window events (Electron)
959
+ */
960
+ logWindowEvent(
961
+ event: 'create' | 'close' | 'stateChange' | 'focus' | 'blur',
962
+ context?: Record<string, unknown>
963
+ ): void {
964
+ this.log({
965
+ timestamp: new Date().toISOString(),
966
+ type: 'window_event',
967
+ content: `Window: ${event}`,
968
+ metadata: {
969
+ event,
970
+ ...context,
971
+ },
972
+ });
973
+ }
974
+
975
+ /**
976
+ * Log system events (app lifecycle)
977
+ */
978
+ logSystemEvent(
979
+ event: 'appReady' | 'appActivate' | 'appBeforeQuit' | 'appQuit' | 'systemSuspend' | 'systemResume' |
980
+ 'networkChange' | 'themeChange',
981
+ context?: Record<string, unknown>
982
+ ): void {
983
+ this.log({
984
+ timestamp: new Date().toISOString(),
985
+ type: 'system_event',
986
+ content: `System: ${event}`,
987
+ metadata: {
988
+ event,
989
+ ...context,
990
+ },
991
+ });
992
+ }
993
+
994
+ /**
995
+ * Log auto-update events
996
+ */
997
+ logUpdateEvent(
998
+ event: 'checkStart' | 'available' | 'downloadStart' | 'downloadProgress' | 'downloadComplete' |
999
+ 'installing' | 'installed' | 'error',
1000
+ context?: Record<string, unknown>
1001
+ ): void {
1002
+ this.log({
1003
+ timestamp: new Date().toISOString(),
1004
+ type: 'update_event',
1005
+ content: `Update: ${event}`,
1006
+ metadata: {
1007
+ event,
1008
+ ...context,
1009
+ },
1010
+ });
1011
+ }
1012
+
1013
+ /**
1014
+ * Log session events
1015
+ */
1016
+ logSessionEvent(
1017
+ event: 'start' | 'end' | 'milestone' | 'featureUsage',
1018
+ context?: Record<string, unknown>
1019
+ ): void {
1020
+ this.log({
1021
+ timestamp: new Date().toISOString(),
1022
+ type: 'session_event',
1023
+ content: `Session: ${event}`,
1024
+ metadata: {
1025
+ event,
1026
+ ...context,
1027
+ },
1028
+ });
1029
+ }
1030
+
1031
+ /**
1032
+ * Log HTTP stream events
1033
+ */
1034
+ logHTTPEvent(
1035
+ event: 'streamStart' | 'streamChunk' | 'streamEnd' | 'error',
1036
+ context?: Record<string, unknown>
1037
+ ): void {
1038
+ this.log({
1039
+ timestamp: new Date().toISOString(),
1040
+ type: 'http_event',
1041
+ content: `HTTP: ${event}`,
1042
+ metadata: {
1043
+ event,
1044
+ ...context,
1045
+ },
1046
+ });
1047
+ }
1048
+
1049
+ /**
1050
+ * Log error boundary/unhandled errors
1051
+ */
1052
+ logErrorEvent(
1053
+ event: 'errorBoundary' | 'unhandledRejection' | 'globalError',
1054
+ context?: Record<string, unknown>
1055
+ ): void {
1056
+ this.log({
1057
+ timestamp: new Date().toISOString(),
1058
+ type: 'error',
1059
+ content: `Error: ${event}`,
1060
+ metadata: {
1061
+ event,
1062
+ ...context,
1063
+ },
1064
+ });
1065
+ }
1066
+
1067
+ /**
1068
+ * Get the log directory path (for server log files)
1069
+ */
1070
+ getLogDirectory(): string {
1071
+ return dirname(this.filePath);
1072
+ }
1073
+
1074
+ /**
1075
+ * Get the log file path
1076
+ */
1077
+ getLogFilePath(): string {
1078
+ return this.filePath;
1079
+ }
1080
+
1081
+ /**
1082
+ * Close the JSON stream logger
1083
+ */
1084
+ async close(): Promise<void> {
1085
+ // Already closed, skip
1086
+ if (!this.isEnabled || !this.writeStream) {
1087
+ return;
1088
+ }
1089
+
1090
+ // Mark as disabled immediately to prevent duplicate close attempts
1091
+ this.isEnabled = false;
1092
+
1093
+ // Clear flush interval
1094
+ if (this.flushInterval) {
1095
+ clearInterval(this.flushInterval);
1096
+ this.flushInterval = null;
1097
+ }
1098
+
1099
+ // Wait for all pending category stream initializations to complete
1100
+ if (this.pendingStreamInits.size > 0) {
1101
+ await Promise.all(this.pendingStreamInits);
1102
+ }
1103
+
1104
+ // Flush any remaining buffers
1105
+ this.flush();
1106
+
1107
+ // Only flush errors if error stream was initialized
1108
+ if (this.errorStreamInitialized) {
1109
+ this.flushErrors();
1110
+ }
1111
+
1112
+ // Flush category buffers
1113
+ this.flushCategories();
1114
+
1115
+ // Close all streams
1116
+ const promises: Promise<void>[] = [];
1117
+
1118
+ // Close main stream if not already destroyed
1119
+ if (!this.writeStream.destroyed) {
1120
+ // Write closing bracket for JSON array
1121
+ if (this.writeStream.writable) {
1122
+ this.writeStream.write('\n]\n');
1123
+ }
1124
+
1125
+ promises.push(new Promise<void>((resolve, reject) => {
1126
+ this.writeStream!.end((error?: Error) => {
1127
+ if (error) {
1128
+ console.error(chalk.red('Failed to close JSON stream:'), error);
1129
+ reject(error);
1130
+ } else {
1131
+ if (this.verbose) {
1132
+ console.log(chalk.dim(`✅ Log saved: ${this.filePath}`));
1133
+ }
1134
+ resolve();
1135
+ }
1136
+ });
1137
+ }));
1138
+ } else if (this.verbose) {
1139
+ console.log(chalk.dim(`⚠️ Log stream already closed: ${this.filePath}`));
1140
+ }
1141
+
1142
+ // Only close error stream if it was initialized and not destroyed
1143
+ if (this.errorStreamInitialized && this.errorWriteStream && !this.errorWriteStream.destroyed) {
1144
+ if (this.errorWriteStream.writable) {
1145
+ this.errorWriteStream.write('\n]\n');
1146
+ }
1147
+
1148
+ promises.push(new Promise<void>((resolve, reject) => {
1149
+ this.errorWriteStream!.end((error?: Error) => {
1150
+ if (error) {
1151
+ console.error(chalk.red('Failed to close error JSON stream:'), error);
1152
+ reject(error);
1153
+ } else {
1154
+ console.log(chalk.dim(`✅ Error log saved: ${this.errorFilePath}`));
1155
+ resolve();
1156
+ }
1157
+ });
1158
+ }));
1159
+ }
1160
+
1161
+ // Close category streams
1162
+ for (const [category, streamInfo] of this.categoryStreams) {
1163
+ if (streamInfo.stream && !streamInfo.stream.destroyed) {
1164
+ if (streamInfo.stream.writable) {
1165
+ streamInfo.stream.write('\n]\n');
1166
+ }
1167
+
1168
+ promises.push(new Promise<void>((resolve, reject) => {
1169
+ streamInfo.stream.end((error?: Error) => {
1170
+ if (error) {
1171
+ console.error(chalk.red(`Failed to close category stream (${category}):`), error);
1172
+ reject(error);
1173
+ } else {
1174
+ if (this.verbose) {
1175
+ console.log(chalk.dim(`✅ Category log saved: ${streamInfo.filePath}`));
1176
+ }
1177
+ resolve();
1178
+ }
1179
+ });
1180
+ }));
1181
+ }
1182
+ }
1183
+
1184
+ await Promise.all(promises);
1185
+
1186
+ // Clear references
1187
+ this.writeStream = null;
1188
+ this.errorWriteStream = null;
1189
+ this.categoryStreams.clear();
1190
+ }
1191
+
1192
+ /**
1193
+ * Check if logging is enabled
1194
+ */
1195
+ isActive(): boolean {
1196
+ return this.isEnabled;
1197
+ }
1198
+
1199
+ /**
1200
+ * Get the log file path
1201
+ */
1202
+ getFilePath(): string {
1203
+ return this.filePath;
1204
+ }
1205
+ }
1206
+
1207
+ // Global JSON stream logger instance (null if not enabled)
1208
+ let globalJsonStreamLogger: JsonStreamLogger | null = null;
1209
+
1210
+ /**
1211
+ * Initialize global JSON stream logger
1212
+ * Automatically generates log paths based on current working directory and session ID
1213
+ * @param sessionId - Session ID for the log file
1214
+ * @param append - Whether to append to existing file
1215
+ * @param verbose - Whether to show initialization messages
1216
+ */
1217
+ export async function initializeJsonStreamLogger(sessionId: string, append = false, verbose = false): Promise<JsonStreamLogger> {
1218
+ if (globalJsonStreamLogger) {
1219
+ await globalJsonStreamLogger.close();
1220
+ }
1221
+
1222
+ // Get current working directory and sanitize it for use in path
1223
+ // Replace '/' with '-' and remove leading '-' if present (for absolute paths)
1224
+ const cwd = process.cwd().replace(/\//g, '-').replace(/^-/, '');
1225
+
1226
+ // Create log directory path
1227
+ const projectLogDir = join(PROJECTS_DIR, cwd);
1228
+
1229
+ // Create log file paths
1230
+ const logFile = join(projectLogDir, `${sessionId}_log.json`);
1231
+ const errorLogFile = join(projectLogDir, `${sessionId}_error.json`);
1232
+
1233
+ globalJsonStreamLogger = new JsonStreamLogger(logFile, errorLogFile);
1234
+ await globalJsonStreamLogger.initialize(append, verbose);
1235
+
1236
+ return globalJsonStreamLogger;
1237
+ }
1238
+
1239
+ /**
1240
+ * Get global JSON stream logger instance
1241
+ */
1242
+ export function getJsonStreamLogger(): JsonStreamLogger | null {
1243
+ return globalJsonStreamLogger;
1244
+ }
1245
+
1246
+ /**
1247
+ * Alias for getJsonStreamLogger (shorter name)
1248
+ */
1249
+ export const getStreamLogger = getJsonStreamLogger;
1250
+
1251
+ /**
1252
+ * Close global JSON stream logger
1253
+ */
1254
+ export async function closeJsonStreamLogger(): Promise<void> {
1255
+ if (globalJsonStreamLogger && globalJsonStreamLogger.isActive()) {
1256
+ await globalJsonStreamLogger.close();
1257
+ globalJsonStreamLogger = null;
1258
+ }
1259
+ }