@compass-ai/nova 1.0.72 → 1.0.74

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 (974) hide show
  1. package/dist/acp/agent.d.ts +318 -0
  2. package/dist/acp/agent.d.ts.map +1 -0
  3. package/dist/acp/agent.js +795 -0
  4. package/dist/acp/agent.js.map +1 -0
  5. package/dist/acp/backpressure-writer.d.ts +49 -0
  6. package/dist/acp/backpressure-writer.d.ts.map +1 -0
  7. package/dist/acp/backpressure-writer.js +153 -0
  8. package/dist/acp/backpressure-writer.js.map +1 -0
  9. package/dist/acp/event-adapter.d.ts +242 -0
  10. package/dist/acp/event-adapter.d.ts.map +1 -0
  11. package/dist/acp/event-adapter.js +456 -0
  12. package/dist/acp/event-adapter.js.map +1 -0
  13. package/dist/acp/index.d.ts +30 -0
  14. package/dist/acp/index.d.ts.map +1 -0
  15. package/dist/acp/index.js +36 -0
  16. package/dist/acp/index.js.map +1 -0
  17. package/dist/acp/modes.d.ts +56 -0
  18. package/dist/acp/modes.d.ts.map +1 -0
  19. package/dist/acp/modes.js +135 -0
  20. package/dist/acp/modes.js.map +1 -0
  21. package/dist/acp/session-manager.d.ts +170 -0
  22. package/dist/acp/session-manager.d.ts.map +1 -0
  23. package/dist/acp/session-manager.js +381 -0
  24. package/dist/acp/session-manager.js.map +1 -0
  25. package/dist/acp/text-coalescer.d.ts +45 -0
  26. package/dist/acp/text-coalescer.d.ts.map +1 -0
  27. package/dist/acp/text-coalescer.js +110 -0
  28. package/dist/acp/text-coalescer.js.map +1 -0
  29. package/dist/acp/tool-bridge.d.ts +156 -0
  30. package/dist/acp/tool-bridge.d.ts.map +1 -0
  31. package/dist/acp/tool-bridge.js +381 -0
  32. package/dist/acp/tool-bridge.js.map +1 -0
  33. package/dist/acp/types.d.ts +314 -0
  34. package/dist/acp/types.d.ts.map +1 -0
  35. package/dist/acp/types.js +8 -0
  36. package/dist/acp/types.js.map +1 -0
  37. package/dist/cli.d.ts +9 -0
  38. package/dist/cli.d.ts.map +1 -0
  39. package/dist/cli.js +185 -184
  40. package/dist/cli.js.map +1 -0
  41. package/dist/commands/acp.d.ts +26 -0
  42. package/dist/commands/acp.d.ts.map +1 -0
  43. package/dist/commands/acp.js +492 -0
  44. package/dist/commands/acp.js.map +1 -0
  45. package/dist/commands/cache.d.ts +33 -0
  46. package/dist/commands/cache.d.ts.map +1 -0
  47. package/dist/commands/cache.js +537 -0
  48. package/dist/commands/cache.js.map +1 -0
  49. package/dist/commands/config.d.ts +10 -0
  50. package/dist/commands/config.d.ts.map +1 -0
  51. package/dist/commands/config.js +367 -0
  52. package/dist/commands/config.js.map +1 -0
  53. package/dist/commands/consent.d.ts +21 -0
  54. package/dist/commands/consent.d.ts.map +1 -0
  55. package/dist/commands/consent.js +334 -0
  56. package/dist/commands/consent.js.map +1 -0
  57. package/dist/commands/data.d.ts +24 -0
  58. package/dist/commands/data.d.ts.map +1 -0
  59. package/dist/commands/data.js +586 -0
  60. package/dist/commands/data.js.map +1 -0
  61. package/dist/commands/index.d.ts +145 -0
  62. package/dist/commands/index.d.ts.map +1 -0
  63. package/dist/commands/index.js +210 -0
  64. package/dist/commands/index.js.map +1 -0
  65. package/dist/commands/init.d.ts +106 -0
  66. package/dist/commands/init.d.ts.map +1 -0
  67. package/dist/commands/init.js +349 -0
  68. package/dist/commands/init.js.map +1 -0
  69. package/dist/commands/logs.d.ts +13 -0
  70. package/dist/commands/logs.d.ts.map +1 -0
  71. package/dist/commands/logs.js +359 -0
  72. package/dist/commands/logs.js.map +1 -0
  73. package/dist/commands/mcp.d.ts +20 -0
  74. package/dist/commands/mcp.d.ts.map +1 -0
  75. package/dist/commands/mcp.js +687 -0
  76. package/dist/commands/mcp.js.map +1 -0
  77. package/dist/commands/reset.d.ts +20 -0
  78. package/dist/commands/reset.d.ts.map +1 -0
  79. package/dist/commands/reset.js +372 -0
  80. package/dist/commands/reset.js.map +1 -0
  81. package/dist/commands/setup.d.ts +74 -0
  82. package/dist/commands/setup.d.ts.map +1 -0
  83. package/dist/commands/setup.js +863 -0
  84. package/dist/commands/setup.js.map +1 -0
  85. package/dist/commands/slash/agents.d.ts +40 -0
  86. package/dist/commands/slash/agents.d.ts.map +1 -0
  87. package/dist/commands/slash/agents.js +519 -0
  88. package/dist/commands/slash/agents.js.map +1 -0
  89. package/dist/commands/slash/approve.d.ts +46 -0
  90. package/dist/commands/slash/approve.d.ts.map +1 -0
  91. package/dist/commands/slash/approve.js +239 -0
  92. package/dist/commands/slash/approve.js.map +1 -0
  93. package/dist/commands/slash/attach.d.ts +70 -0
  94. package/dist/commands/slash/attach.d.ts.map +1 -0
  95. package/dist/commands/slash/attach.js +333 -0
  96. package/dist/commands/slash/attach.js.map +1 -0
  97. package/dist/commands/slash/clear.d.ts +47 -0
  98. package/dist/commands/slash/clear.d.ts.map +1 -0
  99. package/dist/commands/slash/clear.js +261 -0
  100. package/dist/commands/slash/clear.js.map +1 -0
  101. package/dist/commands/slash/commit.d.ts +40 -0
  102. package/dist/commands/slash/commit.d.ts.map +1 -0
  103. package/dist/commands/slash/commit.js +337 -0
  104. package/dist/commands/slash/commit.js.map +1 -0
  105. package/dist/commands/slash/compact.d.ts +48 -0
  106. package/dist/commands/slash/compact.d.ts.map +1 -0
  107. package/dist/commands/slash/compact.js +288 -0
  108. package/dist/commands/slash/compact.js.map +1 -0
  109. package/dist/commands/slash/config.d.ts +20 -0
  110. package/dist/commands/slash/config.d.ts.map +1 -0
  111. package/dist/commands/slash/config.js +136 -0
  112. package/dist/commands/slash/config.js.map +1 -0
  113. package/dist/commands/slash/context.d.ts +49 -0
  114. package/dist/commands/slash/context.d.ts.map +1 -0
  115. package/dist/commands/slash/context.js +430 -0
  116. package/dist/commands/slash/context.js.map +1 -0
  117. package/dist/commands/slash/cost.d.ts +34 -0
  118. package/dist/commands/slash/cost.d.ts.map +1 -0
  119. package/dist/commands/slash/cost.js +312 -0
  120. package/dist/commands/slash/cost.js.map +1 -0
  121. package/dist/commands/slash/custom.d.ts +41 -0
  122. package/dist/commands/slash/custom.d.ts.map +1 -0
  123. package/dist/commands/slash/custom.js +126 -0
  124. package/dist/commands/slash/custom.js.map +1 -0
  125. package/dist/commands/slash/exit.d.ts +25 -0
  126. package/dist/commands/slash/exit.d.ts.map +1 -0
  127. package/dist/commands/slash/exit.js +186 -0
  128. package/dist/commands/slash/exit.js.map +1 -0
  129. package/dist/commands/slash/export.d.ts +27 -0
  130. package/dist/commands/slash/export.d.ts.map +1 -0
  131. package/dist/commands/slash/export.js +318 -0
  132. package/dist/commands/slash/export.js.map +1 -0
  133. package/dist/commands/slash/files.d.ts +47 -0
  134. package/dist/commands/slash/files.d.ts.map +1 -0
  135. package/dist/commands/slash/files.js +521 -0
  136. package/dist/commands/slash/files.js.map +1 -0
  137. package/dist/commands/slash/help.d.ts +50 -0
  138. package/dist/commands/slash/help.d.ts.map +1 -0
  139. package/dist/commands/slash/help.js +282 -0
  140. package/dist/commands/slash/help.js.map +1 -0
  141. package/dist/commands/slash/index-cmd.d.ts +41 -0
  142. package/dist/commands/slash/index-cmd.d.ts.map +1 -0
  143. package/dist/commands/slash/index-cmd.js +349 -0
  144. package/dist/commands/slash/index-cmd.js.map +1 -0
  145. package/dist/commands/slash/index.d.ts +97 -0
  146. package/dist/commands/slash/index.d.ts.map +1 -0
  147. package/dist/commands/slash/index.js +251 -0
  148. package/dist/commands/slash/index.js.map +1 -0
  149. package/dist/commands/slash/login.d.ts +23 -0
  150. package/dist/commands/slash/login.d.ts.map +1 -0
  151. package/dist/commands/slash/login.js +175 -0
  152. package/dist/commands/slash/login.js.map +1 -0
  153. package/dist/commands/slash/logout.d.ts +23 -0
  154. package/dist/commands/slash/logout.d.ts.map +1 -0
  155. package/dist/commands/slash/logout.js +153 -0
  156. package/dist/commands/slash/logout.js.map +1 -0
  157. package/dist/commands/slash/logs.d.ts +29 -0
  158. package/dist/commands/slash/logs.d.ts.map +1 -0
  159. package/dist/commands/slash/logs.js +423 -0
  160. package/dist/commands/slash/logs.js.map +1 -0
  161. package/dist/commands/slash/mcp.d.ts +29 -0
  162. package/dist/commands/slash/mcp.d.ts.map +1 -0
  163. package/dist/commands/slash/mcp.js +1026 -0
  164. package/dist/commands/slash/mcp.js.map +1 -0
  165. package/dist/commands/slash/model.d.ts +60 -0
  166. package/dist/commands/slash/model.d.ts.map +1 -0
  167. package/dist/commands/slash/model.js +466 -0
  168. package/dist/commands/slash/model.js.map +1 -0
  169. package/dist/commands/slash/personality.d.ts +40 -0
  170. package/dist/commands/slash/personality.d.ts.map +1 -0
  171. package/dist/commands/slash/personality.js +272 -0
  172. package/dist/commands/slash/personality.js.map +1 -0
  173. package/dist/commands/slash/purge.d.ts +42 -0
  174. package/dist/commands/slash/purge.d.ts.map +1 -0
  175. package/dist/commands/slash/purge.js +233 -0
  176. package/dist/commands/slash/purge.js.map +1 -0
  177. package/dist/commands/slash/reset.d.ts +44 -0
  178. package/dist/commands/slash/reset.d.ts.map +1 -0
  179. package/dist/commands/slash/reset.js +326 -0
  180. package/dist/commands/slash/reset.js.map +1 -0
  181. package/dist/commands/slash/skills.d.ts +40 -0
  182. package/dist/commands/slash/skills.d.ts.map +1 -0
  183. package/dist/commands/slash/skills.js +207 -0
  184. package/dist/commands/slash/skills.js.map +1 -0
  185. package/dist/commands/slash/tokens.d.ts +34 -0
  186. package/dist/commands/slash/tokens.d.ts.map +1 -0
  187. package/dist/commands/slash/tokens.js +205 -0
  188. package/dist/commands/slash/tokens.js.map +1 -0
  189. package/dist/commands/slash/unleash.d.ts +50 -0
  190. package/dist/commands/slash/unleash.d.ts.map +1 -0
  191. package/dist/commands/slash/unleash.js +262 -0
  192. package/dist/commands/slash/unleash.js.map +1 -0
  193. package/dist/commands/slash/update.d.ts +34 -0
  194. package/dist/commands/slash/update.d.ts.map +1 -0
  195. package/dist/commands/slash/update.js +364 -0
  196. package/dist/commands/slash/update.js.map +1 -0
  197. package/dist/commands/slash/wrap.d.ts +18 -0
  198. package/dist/commands/slash/wrap.d.ts.map +1 -0
  199. package/dist/commands/slash/wrap.js +21 -0
  200. package/dist/commands/slash/wrap.js.map +1 -0
  201. package/dist/commands/tokens.d.ts +26 -0
  202. package/dist/commands/tokens.d.ts.map +1 -0
  203. package/dist/commands/tokens.js +245 -0
  204. package/dist/commands/tokens.js.map +1 -0
  205. package/dist/constants/builtin-agents.d.ts +27 -0
  206. package/dist/constants/builtin-agents.d.ts.map +1 -0
  207. package/dist/constants/builtin-agents.js +710 -0
  208. package/dist/constants/builtin-agents.js.map +1 -0
  209. package/dist/constants/builtin-skills.d.ts +32 -0
  210. package/dist/constants/builtin-skills.d.ts.map +1 -0
  211. package/dist/constants/builtin-skills.js +389 -0
  212. package/dist/constants/builtin-skills.js.map +1 -0
  213. package/dist/constants/defaults.d.ts +448 -0
  214. package/dist/constants/defaults.d.ts.map +1 -0
  215. package/dist/constants/defaults.js +829 -0
  216. package/dist/constants/defaults.js.map +1 -0
  217. package/dist/constants/index.d.ts +27 -0
  218. package/dist/constants/index.d.ts.map +1 -0
  219. package/dist/constants/index.js +85 -0
  220. package/dist/constants/index.js.map +1 -0
  221. package/dist/constants/install-hints.d.ts +7 -0
  222. package/dist/constants/install-hints.d.ts.map +1 -0
  223. package/dist/constants/install-hints.js +123 -0
  224. package/dist/constants/install-hints.js.map +1 -0
  225. package/dist/constants/models.d.ts +255 -0
  226. package/dist/constants/models.d.ts.map +1 -0
  227. package/dist/constants/models.js +596 -0
  228. package/dist/constants/models.js.map +1 -0
  229. package/dist/constants/schedule.d.ts +43 -0
  230. package/dist/constants/schedule.d.ts.map +1 -0
  231. package/dist/constants/schedule.js +110 -0
  232. package/dist/constants/schedule.js.map +1 -0
  233. package/dist/constants/system-utilities.d.ts +57 -0
  234. package/dist/constants/system-utilities.d.ts.map +1 -0
  235. package/dist/constants/system-utilities.js +421 -0
  236. package/dist/constants/system-utilities.js.map +1 -0
  237. package/dist/constants/token-limits.d.ts +102 -0
  238. package/dist/constants/token-limits.d.ts.map +1 -0
  239. package/dist/constants/token-limits.js +286 -0
  240. package/dist/constants/token-limits.js.map +1 -0
  241. package/dist/core/autocomplete.d.ts +132 -0
  242. package/dist/core/autocomplete.d.ts.map +1 -0
  243. package/dist/core/autocomplete.js +653 -0
  244. package/dist/core/autocomplete.js.map +1 -0
  245. package/dist/core/command-parser.d.ts +301 -0
  246. package/dist/core/command-parser.d.ts.map +1 -0
  247. package/dist/core/command-parser.js +526 -0
  248. package/dist/core/command-parser.js.map +1 -0
  249. package/dist/core/context-builder.d.ts +264 -0
  250. package/dist/core/context-builder.d.ts.map +1 -0
  251. package/dist/core/context-builder.js +1018 -0
  252. package/dist/core/context-builder.js.map +1 -0
  253. package/dist/core/event-emitter.d.ts +411 -0
  254. package/dist/core/event-emitter.d.ts.map +1 -0
  255. package/dist/core/event-emitter.js +138 -0
  256. package/dist/core/event-emitter.js.map +1 -0
  257. package/dist/core/history-manager.d.ts +62 -0
  258. package/dist/core/history-manager.d.ts.map +1 -0
  259. package/dist/core/history-manager.js +151 -0
  260. package/dist/core/history-manager.js.map +1 -0
  261. package/dist/core/slash-command-handler.d.ts +352 -0
  262. package/dist/core/slash-command-handler.d.ts.map +1 -0
  263. package/dist/core/slash-command-handler.js +563 -0
  264. package/dist/core/slash-command-handler.js.map +1 -0
  265. package/dist/core/task-processor.d.ts +179 -0
  266. package/dist/core/task-processor.d.ts.map +1 -0
  267. package/dist/core/task-processor.js +519 -0
  268. package/dist/core/task-processor.js.map +1 -0
  269. package/dist/index.d.ts +90 -0
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.js +4 -3
  272. package/dist/index.js.map +1 -0
  273. package/dist/prompts/agent-prompt-generator.d.ts +26 -0
  274. package/dist/prompts/agent-prompt-generator.d.ts.map +1 -0
  275. package/dist/prompts/agent-prompt-generator.js +244 -0
  276. package/dist/prompts/agent-prompt-generator.js.map +1 -0
  277. package/dist/prompts/commit-message.d.ts +35 -0
  278. package/dist/prompts/commit-message.d.ts.map +1 -0
  279. package/dist/prompts/commit-message.js +187 -0
  280. package/dist/prompts/commit-message.js.map +1 -0
  281. package/dist/prompts/conversation.d.ts +51 -0
  282. package/dist/prompts/conversation.d.ts.map +1 -0
  283. package/dist/prompts/conversation.js +115 -0
  284. package/dist/prompts/conversation.js.map +1 -0
  285. package/dist/prompts/index.d.ts +39 -0
  286. package/dist/prompts/index.d.ts.map +1 -0
  287. package/dist/prompts/index.js +74 -0
  288. package/dist/prompts/index.js.map +1 -0
  289. package/dist/prompts/memory.d.ts +6 -0
  290. package/dist/prompts/memory.d.ts.map +1 -0
  291. package/dist/prompts/memory.js +29 -0
  292. package/dist/prompts/memory.js.map +1 -0
  293. package/dist/prompts/personality.d.ts +77 -0
  294. package/dist/prompts/personality.d.ts.map +1 -0
  295. package/dist/prompts/personality.js +393 -0
  296. package/dist/prompts/personality.js.map +1 -0
  297. package/dist/prompts/plan-generator.d.ts +144 -0
  298. package/dist/prompts/plan-generator.d.ts.map +1 -0
  299. package/dist/prompts/plan-generator.js +553 -0
  300. package/dist/prompts/plan-generator.js.map +1 -0
  301. package/dist/prompts/system.d.ts +95 -0
  302. package/dist/prompts/system.d.ts.map +1 -0
  303. package/dist/prompts/system.js +461 -0
  304. package/dist/prompts/system.js.map +1 -0
  305. package/dist/prompts/task-processor.d.ts +94 -0
  306. package/dist/prompts/task-processor.d.ts.map +1 -0
  307. package/dist/prompts/task-processor.js +554 -0
  308. package/dist/prompts/task-processor.js.map +1 -0
  309. package/dist/prompts/unguarded.d.ts +78 -0
  310. package/dist/prompts/unguarded.d.ts.map +1 -0
  311. package/dist/prompts/unguarded.js +418 -0
  312. package/dist/prompts/unguarded.js.map +1 -0
  313. package/dist/prompts/utils.d.ts +73 -0
  314. package/dist/prompts/utils.d.ts.map +1 -0
  315. package/dist/prompts/utils.js +114 -0
  316. package/dist/prompts/utils.js.map +1 -0
  317. package/dist/prompts/workflow.d.ts +241 -0
  318. package/dist/prompts/workflow.d.ts.map +1 -0
  319. package/dist/prompts/workflow.js +608 -0
  320. package/dist/prompts/workflow.js.map +1 -0
  321. package/dist/services/action-logger.d.ts +383 -0
  322. package/dist/services/action-logger.d.ts.map +1 -0
  323. package/dist/services/action-logger.js +544 -0
  324. package/dist/services/action-logger.js.map +1 -0
  325. package/dist/services/agent-budget-allocator.d.ts +111 -0
  326. package/dist/services/agent-budget-allocator.d.ts.map +1 -0
  327. package/dist/services/agent-budget-allocator.js +278 -0
  328. package/dist/services/agent-budget-allocator.js.map +1 -0
  329. package/dist/services/agent-manager.d.ts +181 -0
  330. package/dist/services/agent-manager.d.ts.map +1 -0
  331. package/dist/services/agent-manager.js +749 -0
  332. package/dist/services/agent-manager.js.map +1 -0
  333. package/dist/services/agent-spawner.d.ts +138 -0
  334. package/dist/services/agent-spawner.d.ts.map +1 -0
  335. package/dist/services/agent-spawner.js +748 -0
  336. package/dist/services/agent-spawner.js.map +1 -0
  337. package/dist/services/agent-state-service.d.ts +145 -0
  338. package/dist/services/agent-state-service.d.ts.map +1 -0
  339. package/dist/services/agent-state-service.js +247 -0
  340. package/dist/services/agent-state-service.js.map +1 -0
  341. package/dist/services/anthropic-client.d.ts +357 -0
  342. package/dist/services/anthropic-client.d.ts.map +1 -0
  343. package/dist/services/anthropic-client.js +1451 -0
  344. package/dist/services/anthropic-client.js.map +1 -0
  345. package/dist/services/approval-manager.d.ts +385 -0
  346. package/dist/services/approval-manager.d.ts.map +1 -0
  347. package/dist/services/approval-manager.js +1044 -0
  348. package/dist/services/approval-manager.js.map +1 -0
  349. package/dist/services/audit-logger.d.ts +245 -0
  350. package/dist/services/audit-logger.d.ts.map +1 -0
  351. package/dist/services/audit-logger.js +324 -0
  352. package/dist/services/audit-logger.js.map +1 -0
  353. package/dist/services/backup-manager.d.ts +136 -0
  354. package/dist/services/backup-manager.d.ts.map +1 -0
  355. package/dist/services/backup-manager.js +260 -0
  356. package/dist/services/backup-manager.js.map +1 -0
  357. package/dist/services/cache-service.d.ts +247 -0
  358. package/dist/services/cache-service.d.ts.map +1 -0
  359. package/dist/services/cache-service.js +558 -0
  360. package/dist/services/cache-service.js.map +1 -0
  361. package/dist/services/chat-archival-service.d.ts +108 -0
  362. package/dist/services/chat-archival-service.d.ts.map +1 -0
  363. package/dist/services/chat-archival-service.js +465 -0
  364. package/dist/services/chat-archival-service.js.map +1 -0
  365. package/dist/services/codebase-indexer.d.ts +272 -0
  366. package/dist/services/codebase-indexer.d.ts.map +1 -0
  367. package/dist/services/codebase-indexer.js +863 -0
  368. package/dist/services/codebase-indexer.js.map +1 -0
  369. package/dist/services/compass-auth-service.d.ts +204 -0
  370. package/dist/services/compass-auth-service.d.ts.map +1 -0
  371. package/dist/services/compass-auth-service.js +391 -0
  372. package/dist/services/compass-auth-service.js.map +1 -0
  373. package/dist/services/complexity-classifier.d.ts +208 -0
  374. package/dist/services/complexity-classifier.d.ts.map +1 -0
  375. package/dist/services/complexity-classifier.js +1410 -0
  376. package/dist/services/complexity-classifier.js.map +1 -0
  377. package/dist/services/config-manager.d.ts +278 -0
  378. package/dist/services/config-manager.d.ts.map +1 -0
  379. package/dist/services/config-manager.js +651 -0
  380. package/dist/services/config-manager.js.map +1 -0
  381. package/dist/services/consent-manager.d.ts +239 -0
  382. package/dist/services/consent-manager.d.ts.map +1 -0
  383. package/dist/services/consent-manager.js +516 -0
  384. package/dist/services/consent-manager.js.map +1 -0
  385. package/dist/services/conversation-compactor.d.ts +223 -0
  386. package/dist/services/conversation-compactor.d.ts.map +1 -0
  387. package/dist/services/conversation-compactor.js +750 -0
  388. package/dist/services/conversation-compactor.js.map +1 -0
  389. package/dist/services/cost-tracker.d.ts +167 -0
  390. package/dist/services/cost-tracker.d.ts.map +1 -0
  391. package/dist/services/cost-tracker.js +199 -0
  392. package/dist/services/cost-tracker.js.map +1 -0
  393. package/dist/services/credential-store.d.ts +273 -0
  394. package/dist/services/credential-store.d.ts.map +1 -0
  395. package/dist/services/credential-store.js +877 -0
  396. package/dist/services/credential-store.js.map +1 -0
  397. package/dist/services/custom-command-service.d.ts +112 -0
  398. package/dist/services/custom-command-service.d.ts.map +1 -0
  399. package/dist/services/custom-command-service.js +464 -0
  400. package/dist/services/custom-command-service.js.map +1 -0
  401. package/dist/services/default-statusline-renderer.d.ts +60 -0
  402. package/dist/services/default-statusline-renderer.d.ts.map +1 -0
  403. package/dist/services/default-statusline-renderer.js +110 -0
  404. package/dist/services/default-statusline-renderer.js.map +1 -0
  405. package/dist/services/enhanced-context-gatherer.d.ts +116 -0
  406. package/dist/services/enhanced-context-gatherer.d.ts.map +1 -0
  407. package/dist/services/enhanced-context-gatherer.js +605 -0
  408. package/dist/services/enhanced-context-gatherer.js.map +1 -0
  409. package/dist/services/file-hash-tracker.d.ts +95 -0
  410. package/dist/services/file-hash-tracker.d.ts.map +1 -0
  411. package/dist/services/file-hash-tracker.js +199 -0
  412. package/dist/services/file-hash-tracker.js.map +1 -0
  413. package/dist/services/file-service.d.ts +274 -0
  414. package/dist/services/file-service.d.ts.map +1 -0
  415. package/dist/services/file-service.js +876 -0
  416. package/dist/services/file-service.js.map +1 -0
  417. package/dist/services/git-service.d.ts +536 -0
  418. package/dist/services/git-service.d.ts.map +1 -0
  419. package/dist/services/git-service.js +1215 -0
  420. package/dist/services/git-service.js.map +1 -0
  421. package/dist/services/hook-service.d.ts +148 -0
  422. package/dist/services/hook-service.d.ts.map +1 -0
  423. package/dist/services/hook-service.js +705 -0
  424. package/dist/services/hook-service.js.map +1 -0
  425. package/dist/services/ide-state-service.d.ts +114 -0
  426. package/dist/services/ide-state-service.d.ts.map +1 -0
  427. package/dist/services/ide-state-service.js +204 -0
  428. package/dist/services/ide-state-service.js.map +1 -0
  429. package/dist/services/interactive-clarifier.d.ts +90 -0
  430. package/dist/services/interactive-clarifier.d.ts.map +1 -0
  431. package/dist/services/interactive-clarifier.js +446 -0
  432. package/dist/services/interactive-clarifier.js.map +1 -0
  433. package/dist/services/iteration-scoper.d.ts +225 -0
  434. package/dist/services/iteration-scoper.d.ts.map +1 -0
  435. package/dist/services/iteration-scoper.js +387 -0
  436. package/dist/services/iteration-scoper.js.map +1 -0
  437. package/dist/services/llm-plan-generator.d.ts +44 -0
  438. package/dist/services/llm-plan-generator.d.ts.map +1 -0
  439. package/dist/services/llm-plan-generator.js +863 -0
  440. package/dist/services/llm-plan-generator.js.map +1 -0
  441. package/dist/services/llm-system-prompt-generator.d.ts +85 -0
  442. package/dist/services/llm-system-prompt-generator.d.ts.map +1 -0
  443. package/dist/services/llm-system-prompt-generator.js +257 -0
  444. package/dist/services/llm-system-prompt-generator.js.map +1 -0
  445. package/dist/services/log-interpreter.d.ts +190 -0
  446. package/dist/services/log-interpreter.d.ts.map +1 -0
  447. package/dist/services/log-interpreter.js +520 -0
  448. package/dist/services/log-interpreter.js.map +1 -0
  449. package/dist/services/mcp-config-manager.d.ts +141 -0
  450. package/dist/services/mcp-config-manager.d.ts.map +1 -0
  451. package/dist/services/mcp-config-manager.js +678 -0
  452. package/dist/services/mcp-config-manager.js.map +1 -0
  453. package/dist/services/mcp-oauth-service.d.ts +170 -0
  454. package/dist/services/mcp-oauth-service.d.ts.map +1 -0
  455. package/dist/services/mcp-oauth-service.js +892 -0
  456. package/dist/services/mcp-oauth-service.js.map +1 -0
  457. package/dist/services/mcp-plugin-support.d.ts +81 -0
  458. package/dist/services/mcp-plugin-support.d.ts.map +1 -0
  459. package/dist/services/mcp-plugin-support.js +305 -0
  460. package/dist/services/mcp-plugin-support.js.map +1 -0
  461. package/dist/services/mcp-server-manager.d.ts +134 -0
  462. package/dist/services/mcp-server-manager.d.ts.map +1 -0
  463. package/dist/services/mcp-server-manager.js +613 -0
  464. package/dist/services/mcp-server-manager.js.map +1 -0
  465. package/dist/services/mcp-tool-integration.d.ts +119 -0
  466. package/dist/services/mcp-tool-integration.d.ts.map +1 -0
  467. package/dist/services/mcp-tool-integration.js +381 -0
  468. package/dist/services/mcp-tool-integration.js.map +1 -0
  469. package/dist/services/mcp-transport.d.ts +105 -0
  470. package/dist/services/mcp-transport.d.ts.map +1 -0
  471. package/dist/services/mcp-transport.js +1316 -0
  472. package/dist/services/mcp-transport.js.map +1 -0
  473. package/dist/services/memory-service.d.ts +55 -0
  474. package/dist/services/memory-service.d.ts.map +1 -0
  475. package/dist/services/memory-service.js +251 -0
  476. package/dist/services/memory-service.js.map +1 -0
  477. package/dist/services/model-availability.d.ts +64 -0
  478. package/dist/services/model-availability.d.ts.map +1 -0
  479. package/dist/services/model-availability.js +114 -0
  480. package/dist/services/model-availability.js.map +1 -0
  481. package/dist/services/plan-generator.d.ts +98 -0
  482. package/dist/services/plan-generator.d.ts.map +1 -0
  483. package/dist/services/plan-generator.js +658 -0
  484. package/dist/services/plan-generator.js.map +1 -0
  485. package/dist/services/plan-mode-fallback.d.ts +80 -0
  486. package/dist/services/plan-mode-fallback.d.ts.map +1 -0
  487. package/dist/services/plan-mode-fallback.js +307 -0
  488. package/dist/services/plan-mode-fallback.js.map +1 -0
  489. package/dist/services/plan-mode-handler.d.ts +42 -0
  490. package/dist/services/plan-mode-handler.d.ts.map +1 -0
  491. package/dist/services/plan-mode-handler.js +388 -0
  492. package/dist/services/plan-mode-handler.js.map +1 -0
  493. package/dist/services/plan-persistence.d.ts +203 -0
  494. package/dist/services/plan-persistence.d.ts.map +1 -0
  495. package/dist/services/plan-persistence.js +538 -0
  496. package/dist/services/plan-persistence.js.map +1 -0
  497. package/dist/services/prompt-preprocessor.d.ts +73 -0
  498. package/dist/services/prompt-preprocessor.d.ts.map +1 -0
  499. package/dist/services/prompt-preprocessor.js +146 -0
  500. package/dist/services/prompt-preprocessor.js.map +1 -0
  501. package/dist/services/rating-service.d.ts +84 -0
  502. package/dist/services/rating-service.d.ts.map +1 -0
  503. package/dist/services/rating-service.js +171 -0
  504. package/dist/services/rating-service.js.map +1 -0
  505. package/dist/services/rating-state-manager.d.ts +131 -0
  506. package/dist/services/rating-state-manager.d.ts.map +1 -0
  507. package/dist/services/rating-state-manager.js +270 -0
  508. package/dist/services/rating-state-manager.js.map +1 -0
  509. package/dist/services/sdk-runner.d.ts +113 -0
  510. package/dist/services/sdk-runner.d.ts.map +1 -0
  511. package/dist/services/sdk-runner.js +1424 -0
  512. package/dist/services/sdk-runner.js.map +1 -0
  513. package/dist/services/session-manager.d.ts +528 -0
  514. package/dist/services/session-manager.d.ts.map +1 -0
  515. package/dist/services/session-manager.js +1184 -0
  516. package/dist/services/session-manager.js.map +1 -0
  517. package/dist/services/shell-executor.d.ts +337 -0
  518. package/dist/services/shell-executor.d.ts.map +1 -0
  519. package/dist/services/shell-executor.js +1201 -0
  520. package/dist/services/shell-executor.js.map +1 -0
  521. package/dist/services/skill-service.d.ts +149 -0
  522. package/dist/services/skill-service.d.ts.map +1 -0
  523. package/dist/services/skill-service.js +594 -0
  524. package/dist/services/skill-service.js.map +1 -0
  525. package/dist/services/statusline-executor.d.ts +102 -0
  526. package/dist/services/statusline-executor.d.ts.map +1 -0
  527. package/dist/services/statusline-executor.js +305 -0
  528. package/dist/services/statusline-executor.js.map +1 -0
  529. package/dist/services/step-tracker.d.ts +356 -0
  530. package/dist/services/step-tracker.d.ts.map +1 -0
  531. package/dist/services/step-tracker.js +634 -0
  532. package/dist/services/step-tracker.js.map +1 -0
  533. package/dist/services/system-event-logger.d.ts +473 -0
  534. package/dist/services/system-event-logger.d.ts.map +1 -0
  535. package/dist/services/system-event-logger.js +790 -0
  536. package/dist/services/system-event-logger.js.map +1 -0
  537. package/dist/services/system-utility-detector.d.ts +91 -0
  538. package/dist/services/system-utility-detector.d.ts.map +1 -0
  539. package/dist/services/system-utility-detector.js +238 -0
  540. package/dist/services/system-utility-detector.js.map +1 -0
  541. package/dist/services/team-context-store.d.ts +100 -0
  542. package/dist/services/team-context-store.d.ts.map +1 -0
  543. package/dist/services/team-context-store.js +513 -0
  544. package/dist/services/team-context-store.js.map +1 -0
  545. package/dist/services/temp-file-service.d.ts +164 -0
  546. package/dist/services/temp-file-service.d.ts.map +1 -0
  547. package/dist/services/temp-file-service.js +303 -0
  548. package/dist/services/temp-file-service.js.map +1 -0
  549. package/dist/services/token-limit-enforcer.d.ts +53 -0
  550. package/dist/services/token-limit-enforcer.d.ts.map +1 -0
  551. package/dist/services/token-limit-enforcer.js +90 -0
  552. package/dist/services/token-limit-enforcer.js.map +1 -0
  553. package/dist/services/token-limit-store.d.ts +105 -0
  554. package/dist/services/token-limit-store.d.ts.map +1 -0
  555. package/dist/services/token-limit-store.js +288 -0
  556. package/dist/services/token-limit-store.js.map +1 -0
  557. package/dist/services/token-tracker.d.ts +290 -0
  558. package/dist/services/token-tracker.d.ts.map +1 -0
  559. package/dist/services/token-tracker.js +751 -0
  560. package/dist/services/token-tracker.js.map +1 -0
  561. package/dist/services/tool-registry.d.ts +302 -0
  562. package/dist/services/tool-registry.d.ts.map +1 -0
  563. package/dist/services/tool-registry.js +606 -0
  564. package/dist/services/tool-registry.js.map +1 -0
  565. package/dist/services/tools-logger.d.ts +152 -0
  566. package/dist/services/tools-logger.d.ts.map +1 -0
  567. package/dist/services/tools-logger.js +222 -0
  568. package/dist/services/tools-logger.js.map +1 -0
  569. package/dist/services/update-plan-handler.d.ts +56 -0
  570. package/dist/services/update-plan-handler.d.ts.map +1 -0
  571. package/dist/services/update-plan-handler.js +372 -0
  572. package/dist/services/update-plan-handler.js.map +1 -0
  573. package/dist/services/update-service.d.ts +197 -0
  574. package/dist/services/update-service.d.ts.map +1 -0
  575. package/dist/services/update-service.js +749 -0
  576. package/dist/services/update-service.js.map +1 -0
  577. package/dist/services/verifier.d.ts +113 -0
  578. package/dist/services/verifier.d.ts.map +1 -0
  579. package/dist/services/verifier.js +541 -0
  580. package/dist/services/verifier.js.map +1 -0
  581. package/dist/services/workflow-manager.d.ts +277 -0
  582. package/dist/services/workflow-manager.d.ts.map +1 -0
  583. package/dist/services/workflow-manager.js +616 -0
  584. package/dist/services/workflow-manager.js.map +1 -0
  585. package/dist/services/workflow-orchestrator.d.ts +148 -0
  586. package/dist/services/workflow-orchestrator.d.ts.map +1 -0
  587. package/dist/services/workflow-orchestrator.js +617 -0
  588. package/dist/services/workflow-orchestrator.js.map +1 -0
  589. package/dist/services/worktree-manager.d.ts +36 -0
  590. package/dist/services/worktree-manager.d.ts.map +1 -0
  591. package/dist/services/worktree-manager.js +185 -0
  592. package/dist/services/worktree-manager.js.map +1 -0
  593. package/dist/templates/ascii-art.d.ts +136 -0
  594. package/dist/templates/ascii-art.d.ts.map +1 -0
  595. package/dist/templates/ascii-art.js +286 -0
  596. package/dist/templates/ascii-art.js.map +1 -0
  597. package/dist/templates/help.d.ts +186 -0
  598. package/dist/templates/help.d.ts.map +1 -0
  599. package/dist/templates/help.js +588 -0
  600. package/dist/templates/help.js.map +1 -0
  601. package/dist/templates/prompts/workflow-prompts.d.ts +9 -0
  602. package/dist/templates/prompts/workflow-prompts.d.ts.map +1 -0
  603. package/dist/templates/prompts/workflow-prompts.js +9 -0
  604. package/dist/templates/prompts/workflow-prompts.js.map +1 -0
  605. package/dist/tools/agent-tools.d.ts +9 -0
  606. package/dist/tools/agent-tools.d.ts.map +1 -0
  607. package/dist/tools/agent-tools.js +349 -0
  608. package/dist/tools/agent-tools.js.map +1 -0
  609. package/dist/tools/edit-replacers.d.ts +90 -0
  610. package/dist/tools/edit-replacers.d.ts.map +1 -0
  611. package/dist/tools/edit-replacers.js +553 -0
  612. package/dist/tools/edit-replacers.js.map +1 -0
  613. package/dist/tools/file-tools.d.ts +13 -0
  614. package/dist/tools/file-tools.d.ts.map +1 -0
  615. package/dist/tools/file-tools.js +954 -0
  616. package/dist/tools/file-tools.js.map +1 -0
  617. package/dist/tools/git-tools.d.ts +9 -0
  618. package/dist/tools/git-tools.d.ts.map +1 -0
  619. package/dist/tools/git-tools.js +261 -0
  620. package/dist/tools/git-tools.js.map +1 -0
  621. package/dist/tools/index.d.ts +13 -0
  622. package/dist/tools/index.d.ts.map +1 -0
  623. package/dist/tools/index.js +70 -0
  624. package/dist/tools/index.js.map +1 -0
  625. package/dist/tools/network-tools.d.ts +8 -0
  626. package/dist/tools/network-tools.d.ts.map +1 -0
  627. package/dist/tools/network-tools.js +261 -0
  628. package/dist/tools/network-tools.js.map +1 -0
  629. package/dist/tools/openai-tools.d.ts +16 -0
  630. package/dist/tools/openai-tools.d.ts.map +1 -0
  631. package/dist/tools/openai-tools.js +385 -0
  632. package/dist/tools/openai-tools.js.map +1 -0
  633. package/dist/tools/plan-tools.d.ts +9 -0
  634. package/dist/tools/plan-tools.d.ts.map +1 -0
  635. package/dist/tools/plan-tools.js +223 -0
  636. package/dist/tools/plan-tools.js.map +1 -0
  637. package/dist/tools/schedule-tools.d.ts +9 -0
  638. package/dist/tools/schedule-tools.d.ts.map +1 -0
  639. package/dist/tools/schedule-tools.js +405 -0
  640. package/dist/tools/schedule-tools.js.map +1 -0
  641. package/dist/tools/search-tools.d.ts +8 -0
  642. package/dist/tools/search-tools.d.ts.map +1 -0
  643. package/dist/tools/search-tools.js +357 -0
  644. package/dist/tools/search-tools.js.map +1 -0
  645. package/dist/tools/shared-utils.d.ts +91 -0
  646. package/dist/tools/shared-utils.d.ts.map +1 -0
  647. package/dist/tools/shared-utils.js +385 -0
  648. package/dist/tools/shared-utils.js.map +1 -0
  649. package/dist/tools/shell-tools.d.ts +9 -0
  650. package/dist/tools/shell-tools.d.ts.map +1 -0
  651. package/dist/tools/shell-tools.js +409 -0
  652. package/dist/tools/shell-tools.js.map +1 -0
  653. package/dist/tools/skill-tools.d.ts +13 -0
  654. package/dist/tools/skill-tools.d.ts.map +1 -0
  655. package/dist/tools/skill-tools.js +244 -0
  656. package/dist/tools/skill-tools.js.map +1 -0
  657. package/dist/tools/swarm-tools.d.ts +9 -0
  658. package/dist/tools/swarm-tools.d.ts.map +1 -0
  659. package/dist/tools/swarm-tools.js +422 -0
  660. package/dist/tools/swarm-tools.js.map +1 -0
  661. package/dist/tools/user-tools.d.ts +13 -0
  662. package/dist/tools/user-tools.d.ts.map +1 -0
  663. package/dist/tools/user-tools.js +232 -0
  664. package/dist/tools/user-tools.js.map +1 -0
  665. package/dist/types/agent-process.d.ts +244 -0
  666. package/dist/types/agent-process.d.ts.map +1 -0
  667. package/dist/types/agent-process.js +93 -0
  668. package/dist/types/agent-process.js.map +1 -0
  669. package/dist/types/agent.d.ts +358 -0
  670. package/dist/types/agent.d.ts.map +1 -0
  671. package/dist/types/agent.js +171 -0
  672. package/dist/types/agent.js.map +1 -0
  673. package/dist/types/anthropic.d.ts +438 -0
  674. package/dist/types/anthropic.d.ts.map +1 -0
  675. package/dist/types/anthropic.js +9 -0
  676. package/dist/types/anthropic.js.map +1 -0
  677. package/dist/types/approval.d.ts +332 -0
  678. package/dist/types/approval.d.ts.map +1 -0
  679. package/dist/types/approval.js +44 -0
  680. package/dist/types/approval.js.map +1 -0
  681. package/dist/types/autocomplete.d.ts +57 -0
  682. package/dist/types/autocomplete.d.ts.map +1 -0
  683. package/dist/types/autocomplete.js +7 -0
  684. package/dist/types/autocomplete.js.map +1 -0
  685. package/dist/types/chat-archive.d.ts +161 -0
  686. package/dist/types/chat-archive.d.ts.map +1 -0
  687. package/dist/types/chat-archive.js +36 -0
  688. package/dist/types/chat-archive.js.map +1 -0
  689. package/dist/types/config.d.ts +268 -0
  690. package/dist/types/config.d.ts.map +1 -0
  691. package/dist/types/config.js +188 -0
  692. package/dist/types/config.js.map +1 -0
  693. package/dist/types/consent.d.ts +191 -0
  694. package/dist/types/consent.d.ts.map +1 -0
  695. package/dist/types/consent.js +119 -0
  696. package/dist/types/consent.js.map +1 -0
  697. package/dist/types/custom-command.d.ts +139 -0
  698. package/dist/types/custom-command.d.ts.map +1 -0
  699. package/dist/types/custom-command.js +7 -0
  700. package/dist/types/custom-command.js.map +1 -0
  701. package/dist/types/git.d.ts +20 -0
  702. package/dist/types/git.d.ts.map +1 -0
  703. package/dist/types/git.js +2 -0
  704. package/dist/types/git.js.map +1 -0
  705. package/dist/types/hook.d.ts +342 -0
  706. package/dist/types/hook.d.ts.map +1 -0
  707. package/dist/types/hook.js +84 -0
  708. package/dist/types/hook.js.map +1 -0
  709. package/dist/types/index.d.ts +86 -0
  710. package/dist/types/index.d.ts.map +1 -0
  711. package/dist/types/index.js +71 -0
  712. package/dist/types/index.js.map +1 -0
  713. package/dist/types/mcp.d.ts +456 -0
  714. package/dist/types/mcp.d.ts.map +1 -0
  715. package/dist/types/mcp.js +94 -0
  716. package/dist/types/mcp.js.map +1 -0
  717. package/dist/types/rating.d.ts +110 -0
  718. package/dist/types/rating.d.ts.map +1 -0
  719. package/dist/types/rating.js +53 -0
  720. package/dist/types/rating.js.map +1 -0
  721. package/dist/types/schedule.d.ts +91 -0
  722. package/dist/types/schedule.d.ts.map +1 -0
  723. package/dist/types/schedule.js +8 -0
  724. package/dist/types/schedule.js.map +1 -0
  725. package/dist/types/session.d.ts +361 -0
  726. package/dist/types/session.d.ts.map +1 -0
  727. package/dist/types/session.js +9 -0
  728. package/dist/types/session.js.map +1 -0
  729. package/dist/types/skill.d.ts +258 -0
  730. package/dist/types/skill.d.ts.map +1 -0
  731. package/dist/types/skill.js +79 -0
  732. package/dist/types/skill.js.map +1 -0
  733. package/dist/types/statusline.d.ts +212 -0
  734. package/dist/types/statusline.d.ts.map +1 -0
  735. package/dist/types/statusline.js +8 -0
  736. package/dist/types/statusline.js.map +1 -0
  737. package/dist/types/stream.d.ts +61 -0
  738. package/dist/types/stream.d.ts.map +1 -0
  739. package/dist/types/stream.js +17 -0
  740. package/dist/types/stream.js.map +1 -0
  741. package/dist/types/swarm.d.ts +132 -0
  742. package/dist/types/swarm.d.ts.map +1 -0
  743. package/dist/types/swarm.js +21 -0
  744. package/dist/types/swarm.js.map +1 -0
  745. package/dist/types/token-limits.d.ts +107 -0
  746. package/dist/types/token-limits.d.ts.map +1 -0
  747. package/dist/types/token-limits.js +57 -0
  748. package/dist/types/token-limits.js.map +1 -0
  749. package/dist/types/token.d.ts +329 -0
  750. package/dist/types/token.d.ts.map +1 -0
  751. package/dist/types/token.js +9 -0
  752. package/dist/types/token.js.map +1 -0
  753. package/dist/types/update.d.ts +189 -0
  754. package/dist/types/update.d.ts.map +1 -0
  755. package/dist/types/update.js +55 -0
  756. package/dist/types/update.js.map +1 -0
  757. package/dist/types/workflow.d.ts +396 -0
  758. package/dist/types/workflow.d.ts.map +1 -0
  759. package/dist/types/workflow.js +46 -0
  760. package/dist/types/workflow.js.map +1 -0
  761. package/dist/ui/App.d.ts +62 -0
  762. package/dist/ui/App.d.ts.map +1 -0
  763. package/dist/ui/App.js +511 -0
  764. package/dist/ui/App.js.map +1 -0
  765. package/dist/ui/InteractiveSession.d.ts +34 -0
  766. package/dist/ui/InteractiveSession.d.ts.map +1 -0
  767. package/dist/ui/InteractiveSession.js +3611 -0
  768. package/dist/ui/InteractiveSession.js.map +1 -0
  769. package/dist/ui/MCPApprovalPrompt.d.ts +27 -0
  770. package/dist/ui/MCPApprovalPrompt.d.ts.map +1 -0
  771. package/dist/ui/MCPApprovalPrompt.js +51 -0
  772. package/dist/ui/MCPApprovalPrompt.js.map +1 -0
  773. package/dist/ui/SetupWizard.d.ts +26 -0
  774. package/dist/ui/SetupWizard.d.ts.map +1 -0
  775. package/dist/ui/SetupWizard.js +396 -0
  776. package/dist/ui/SetupWizard.js.map +1 -0
  777. package/dist/ui/components/AgentCreationWizard.d.ts +36 -0
  778. package/dist/ui/components/AgentCreationWizard.d.ts.map +1 -0
  779. package/dist/ui/components/AgentCreationWizard.js +619 -0
  780. package/dist/ui/components/AgentCreationWizard.js.map +1 -0
  781. package/dist/ui/components/AgentManager.d.ts +41 -0
  782. package/dist/ui/components/AgentManager.d.ts.map +1 -0
  783. package/dist/ui/components/AgentManager.js +343 -0
  784. package/dist/ui/components/AgentManager.js.map +1 -0
  785. package/dist/ui/components/ApprovalDialog.d.ts +18 -0
  786. package/dist/ui/components/ApprovalDialog.d.ts.map +1 -0
  787. package/dist/ui/components/ApprovalDialog.js +439 -0
  788. package/dist/ui/components/ApprovalDialog.js.map +1 -0
  789. package/dist/ui/components/AsciiArt.d.ts +54 -0
  790. package/dist/ui/components/AsciiArt.d.ts.map +1 -0
  791. package/dist/ui/components/AsciiArt.js +89 -0
  792. package/dist/ui/components/AsciiArt.js.map +1 -0
  793. package/dist/ui/components/ClarificationWizard.d.ts +36 -0
  794. package/dist/ui/components/ClarificationWizard.d.ts.map +1 -0
  795. package/dist/ui/components/ClarificationWizard.js +407 -0
  796. package/dist/ui/components/ClarificationWizard.js.map +1 -0
  797. package/dist/ui/components/CompassSpinner.d.ts +15 -0
  798. package/dist/ui/components/CompassSpinner.d.ts.map +1 -0
  799. package/dist/ui/components/CompassSpinner.js +50 -0
  800. package/dist/ui/components/CompassSpinner.js.map +1 -0
  801. package/dist/ui/components/ConfirmationSelector.d.ts +45 -0
  802. package/dist/ui/components/ConfirmationSelector.d.ts.map +1 -0
  803. package/dist/ui/components/ConfirmationSelector.js +106 -0
  804. package/dist/ui/components/ConfirmationSelector.js.map +1 -0
  805. package/dist/ui/components/ContextUsage.d.ts +76 -0
  806. package/dist/ui/components/ContextUsage.d.ts.map +1 -0
  807. package/dist/ui/components/ContextUsage.js +188 -0
  808. package/dist/ui/components/ContextUsage.js.map +1 -0
  809. package/dist/ui/components/DiffPreview.d.ts +13 -0
  810. package/dist/ui/components/DiffPreview.d.ts.map +1 -0
  811. package/dist/ui/components/DiffPreview.js +30 -0
  812. package/dist/ui/components/DiffPreview.js.map +1 -0
  813. package/dist/ui/components/ExecutionModeSelector.d.ts +45 -0
  814. package/dist/ui/components/ExecutionModeSelector.d.ts.map +1 -0
  815. package/dist/ui/components/ExecutionModeSelector.js +120 -0
  816. package/dist/ui/components/ExecutionModeSelector.js.map +1 -0
  817. package/dist/ui/components/FileTree.d.ts +47 -0
  818. package/dist/ui/components/FileTree.d.ts.map +1 -0
  819. package/dist/ui/components/FileTree.js +258 -0
  820. package/dist/ui/components/FileTree.js.map +1 -0
  821. package/dist/ui/components/HelpMenu.d.ts +49 -0
  822. package/dist/ui/components/HelpMenu.d.ts.map +1 -0
  823. package/dist/ui/components/HelpMenu.js +91 -0
  824. package/dist/ui/components/HelpMenu.js.map +1 -0
  825. package/dist/ui/components/InterleavedStream.d.ts +42 -0
  826. package/dist/ui/components/InterleavedStream.d.ts.map +1 -0
  827. package/dist/ui/components/InterleavedStream.js +1500 -0
  828. package/dist/ui/components/InterleavedStream.js.map +1 -0
  829. package/dist/ui/components/ModelSelector.d.ts +81 -0
  830. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  831. package/dist/ui/components/ModelSelector.js +305 -0
  832. package/dist/ui/components/ModelSelector.js.map +1 -0
  833. package/dist/ui/components/PlanApprovalDialog.d.ts +21 -0
  834. package/dist/ui/components/PlanApprovalDialog.d.ts.map +1 -0
  835. package/dist/ui/components/PlanApprovalDialog.js +189 -0
  836. package/dist/ui/components/PlanApprovalDialog.js.map +1 -0
  837. package/dist/ui/components/PlanExecutionTracker.d.ts +53 -0
  838. package/dist/ui/components/PlanExecutionTracker.d.ts.map +1 -0
  839. package/dist/ui/components/PlanExecutionTracker.js +113 -0
  840. package/dist/ui/components/PlanExecutionTracker.js.map +1 -0
  841. package/dist/ui/components/ProgressIndicator.d.ts +151 -0
  842. package/dist/ui/components/ProgressIndicator.d.ts.map +1 -0
  843. package/dist/ui/components/ProgressIndicator.js +171 -0
  844. package/dist/ui/components/ProgressIndicator.js.map +1 -0
  845. package/dist/ui/components/Prompt.d.ts +47 -0
  846. package/dist/ui/components/Prompt.d.ts.map +1 -0
  847. package/dist/ui/components/Prompt.js +632 -0
  848. package/dist/ui/components/Prompt.js.map +1 -0
  849. package/dist/ui/components/RatingPanel.d.ts +45 -0
  850. package/dist/ui/components/RatingPanel.d.ts.map +1 -0
  851. package/dist/ui/components/RatingPanel.js +119 -0
  852. package/dist/ui/components/RatingPanel.js.map +1 -0
  853. package/dist/ui/components/StatusLine.d.ts +43 -0
  854. package/dist/ui/components/StatusLine.d.ts.map +1 -0
  855. package/dist/ui/components/StatusLine.js +44 -0
  856. package/dist/ui/components/StatusLine.js.map +1 -0
  857. package/dist/ui/components/StreamingResponse.d.ts +45 -0
  858. package/dist/ui/components/StreamingResponse.d.ts.map +1 -0
  859. package/dist/ui/components/StreamingResponse.js +56 -0
  860. package/dist/ui/components/StreamingResponse.js.map +1 -0
  861. package/dist/ui/components/TokenUsage.d.ts +89 -0
  862. package/dist/ui/components/TokenUsage.d.ts.map +1 -0
  863. package/dist/ui/components/TokenUsage.js +99 -0
  864. package/dist/ui/components/TokenUsage.js.map +1 -0
  865. package/dist/ui/components/ToolSummary.d.ts +77 -0
  866. package/dist/ui/components/ToolSummary.d.ts.map +1 -0
  867. package/dist/ui/components/ToolSummary.js +162 -0
  868. package/dist/ui/components/ToolSummary.js.map +1 -0
  869. package/dist/ui/components/UpdateNotification.d.ts +65 -0
  870. package/dist/ui/components/UpdateNotification.d.ts.map +1 -0
  871. package/dist/ui/components/UpdateNotification.js +166 -0
  872. package/dist/ui/components/UpdateNotification.js.map +1 -0
  873. package/dist/ui/diff-renderer.d.ts +18 -0
  874. package/dist/ui/diff-renderer.d.ts.map +1 -0
  875. package/dist/ui/diff-renderer.js +206 -0
  876. package/dist/ui/diff-renderer.js.map +1 -0
  877. package/dist/ui/themes/markdown-theme.d.ts +48 -0
  878. package/dist/ui/themes/markdown-theme.d.ts.map +1 -0
  879. package/dist/ui/themes/markdown-theme.js +79 -0
  880. package/dist/ui/themes/markdown-theme.js.map +1 -0
  881. package/dist/ui/themes/ui-theme.d.ts +301 -0
  882. package/dist/ui/themes/ui-theme.d.ts.map +1 -0
  883. package/dist/ui/themes/ui-theme.js +204 -0
  884. package/dist/ui/themes/ui-theme.js.map +1 -0
  885. package/dist/utils/attachment-handler.d.ts +129 -0
  886. package/dist/utils/attachment-handler.d.ts.map +1 -0
  887. package/dist/utils/attachment-handler.js +280 -0
  888. package/dist/utils/attachment-handler.js.map +1 -0
  889. package/dist/utils/backup-cleanup.d.ts +28 -0
  890. package/dist/utils/backup-cleanup.d.ts.map +1 -0
  891. package/dist/utils/backup-cleanup.js +99 -0
  892. package/dist/utils/backup-cleanup.js.map +1 -0
  893. package/dist/utils/clipboard-handler.d.ts +82 -0
  894. package/dist/utils/clipboard-handler.d.ts.map +1 -0
  895. package/dist/utils/clipboard-handler.js +311 -0
  896. package/dist/utils/clipboard-handler.js.map +1 -0
  897. package/dist/utils/cloud-detection.d.ts +14 -0
  898. package/dist/utils/cloud-detection.d.ts.map +1 -0
  899. package/dist/utils/cloud-detection.js +92 -0
  900. package/dist/utils/cloud-detection.js.map +1 -0
  901. package/dist/utils/command-parser.d.ts +56 -0
  902. package/dist/utils/command-parser.d.ts.map +1 -0
  903. package/dist/utils/command-parser.js +206 -0
  904. package/dist/utils/command-parser.js.map +1 -0
  905. package/dist/utils/console-capture.d.ts +30 -0
  906. package/dist/utils/console-capture.d.ts.map +1 -0
  907. package/dist/utils/console-capture.js +88 -0
  908. package/dist/utils/console-capture.js.map +1 -0
  909. package/dist/utils/cron-parser.d.ts +52 -0
  910. package/dist/utils/cron-parser.d.ts.map +1 -0
  911. package/dist/utils/cron-parser.js +455 -0
  912. package/dist/utils/cron-parser.js.map +1 -0
  913. package/dist/utils/crypto.d.ts +351 -0
  914. package/dist/utils/crypto.d.ts.map +1 -0
  915. package/dist/utils/crypto.js +615 -0
  916. package/dist/utils/crypto.js.map +1 -0
  917. package/dist/utils/diff.d.ts +311 -0
  918. package/dist/utils/diff.d.ts.map +1 -0
  919. package/dist/utils/diff.js +566 -0
  920. package/dist/utils/diff.js.map +1 -0
  921. package/dist/utils/editor.d.ts +12 -0
  922. package/dist/utils/editor.d.ts.map +1 -0
  923. package/dist/utils/editor.js +30 -0
  924. package/dist/utils/editor.js.map +1 -0
  925. package/dist/utils/file-system.d.ts +512 -0
  926. package/dist/utils/file-system.d.ts.map +1 -0
  927. package/dist/utils/file-system.js +798 -0
  928. package/dist/utils/file-system.js.map +1 -0
  929. package/dist/utils/format.d.ts +318 -0
  930. package/dist/utils/format.d.ts.map +1 -0
  931. package/dist/utils/format.js +587 -0
  932. package/dist/utils/format.js.map +1 -0
  933. package/dist/utils/ignore-patterns.d.ts +93 -0
  934. package/dist/utils/ignore-patterns.d.ts.map +1 -0
  935. package/dist/utils/ignore-patterns.js +710 -0
  936. package/dist/utils/ignore-patterns.js.map +1 -0
  937. package/dist/utils/log-cleanup.d.ts +16 -0
  938. package/dist/utils/log-cleanup.d.ts.map +1 -0
  939. package/dist/utils/log-cleanup.js +51 -0
  940. package/dist/utils/log-cleanup.js.map +1 -0
  941. package/dist/utils/logger.d.ts +305 -0
  942. package/dist/utils/logger.d.ts.map +1 -0
  943. package/dist/utils/logger.js +447 -0
  944. package/dist/utils/logger.js.map +1 -0
  945. package/dist/utils/path.d.ts +406 -0
  946. package/dist/utils/path.d.ts.map +1 -0
  947. package/dist/utils/path.js +549 -0
  948. package/dist/utils/path.js.map +1 -0
  949. package/dist/utils/schedule-file.d.ts +63 -0
  950. package/dist/utils/schedule-file.d.ts.map +1 -0
  951. package/dist/utils/schedule-file.js +244 -0
  952. package/dist/utils/schedule-file.js.map +1 -0
  953. package/dist/utils/task-id.d.ts +29 -0
  954. package/dist/utils/task-id.d.ts.map +1 -0
  955. package/dist/utils/task-id.js +53 -0
  956. package/dist/utils/task-id.js.map +1 -0
  957. package/dist/utils/temp-cleanup.d.ts +46 -0
  958. package/dist/utils/temp-cleanup.d.ts.map +1 -0
  959. package/dist/utils/temp-cleanup.js +95 -0
  960. package/dist/utils/temp-cleanup.js.map +1 -0
  961. package/dist/utils/terminal-output.d.ts +34 -0
  962. package/dist/utils/terminal-output.d.ts.map +1 -0
  963. package/dist/utils/terminal-output.js +40 -0
  964. package/dist/utils/terminal-output.js.map +1 -0
  965. package/dist/utils/token-counter.d.ts +224 -0
  966. package/dist/utils/token-counter.d.ts.map +1 -0
  967. package/dist/utils/token-counter.js +332 -0
  968. package/dist/utils/token-counter.js.map +1 -0
  969. package/dist/utils/tool-mapper.d.ts +70 -0
  970. package/dist/utils/tool-mapper.d.ts.map +1 -0
  971. package/dist/utils/tool-mapper.js +234 -0
  972. package/dist/utils/tool-mapper.js.map +1 -0
  973. package/package.json +2 -1
  974. package/scripts/preuninstall.mjs +99 -0
@@ -0,0 +1,876 @@
1
+ /**
2
+ * File operations service for safe read/write with backup integration,
3
+ * atomic multi-file operations, and rollback capability.
4
+ *
5
+ * This service provides a high-level interface for file operations that:
6
+ * - Integrates with BackupManager for automatic backup creation
7
+ * - Supports atomic multi-file transactions with rollback
8
+ * - Integrates with ApprovalManager for user consent
9
+ * - Emits events for UI updates
10
+ * - Provides safe path handling to prevent directory traversal
11
+ */
12
+ import path from 'path';
13
+ import { v4 as uuidv4 } from 'uuid';
14
+ import { safeReadFile, safeWriteFile, safeReadJson, pathExists, ensureDir, remove, copy, stat, isDirectory, isFile, } from '../utils/file-system.js';
15
+ import { sanitizePath, isPathWithin, getGlobalCompassDir, getProjectCompassDir } from '../utils/path.js';
16
+ import { generateDiff } from '../utils/diff.js';
17
+ import { formatTimestamp } from '../utils/format.js';
18
+ import { logger } from '../utils/logger.js';
19
+ import { getBackupManager } from './backup-manager.js';
20
+ import { getApprovalManager } from './approval-manager.js';
21
+ import { getEventEmitter } from '../core/event-emitter.js';
22
+ import { getSystemEventLogger } from './system-event-logger.js';
23
+ import { getTempFileService } from './temp-file-service.js';
24
+ /**
25
+ * FileService provides safe file operations with backup integration,
26
+ * approval workflow, and transaction support for atomic multi-file operations.
27
+ */
28
+ class FileService {
29
+ /** Project root directory for path validation */
30
+ projectRoot = process.cwd();
31
+ /** Currently active transaction */
32
+ activeTransaction = null;
33
+ /** Set of external file paths that have been approved for reading this session */
34
+ approvedExternalPaths = new Set();
35
+ /**
36
+ * Sets the project root directory for path validation
37
+ * @param projectRoot - The root directory of the project
38
+ */
39
+ setProjectRoot(projectRoot) {
40
+ this.projectRoot = projectRoot;
41
+ }
42
+ /**
43
+ * Gets the current project root
44
+ * @returns The project root directory
45
+ */
46
+ getProjectRoot() {
47
+ return this.projectRoot;
48
+ }
49
+ /**
50
+ * Reads a file safely with path validation
51
+ * @param filePath - Path to the file (relative or absolute)
52
+ * @param options - Read options
53
+ * @returns File content or null if not found
54
+ */
55
+ async readFile(filePath, options = {}) {
56
+ const { requireApprovalForExternal = true } = options;
57
+ // Allow external paths for reads since we have approval flow for external files
58
+ const safePath = this.validatePath(filePath, true);
59
+ if (!safePath) {
60
+ logger.warn(`Path validation failed for: ${filePath}`);
61
+ return options.fallback ?? null;
62
+ }
63
+ // Check if this is an external file (outside project root)
64
+ const isExternal = this.isExternalPath(safePath);
65
+ // Request approval for external files if required and not already approved
66
+ if (isExternal && requireApprovalForExternal && !this.approvedExternalPaths.has(safePath)) {
67
+ const approvalManager = getApprovalManager();
68
+ const approvalResponse = await approvalManager.requestApproval('file_read_external', `Read external file: ${filePath}`, {
69
+ filePaths: [filePath],
70
+ affectedFiles: 1,
71
+ });
72
+ if (!approvalResponse.approved) {
73
+ logger.info(`External file read rejected by user: ${filePath}`);
74
+ return options.fallback ?? null;
75
+ }
76
+ // Remember this path as approved for the session
77
+ this.approvedExternalPaths.add(safePath);
78
+ }
79
+ const content = await safeReadFile(safePath, {
80
+ encoding: options.encoding,
81
+ fallback: options.fallback,
82
+ });
83
+ // Log file read event
84
+ if (content !== null) {
85
+ getSystemEventLogger().logFileRead(filePath, content.length, true);
86
+ }
87
+ return content;
88
+ }
89
+ /**
90
+ * Checks if a path is external (outside the project root)
91
+ * @param filePath - Absolute path to check
92
+ * @returns True if the path is outside the project root
93
+ */
94
+ isExternalPath(filePath) {
95
+ if (!isPathWithin(filePath, this.projectRoot)) {
96
+ // Compass-managed directories are internal safe paths, not external
97
+ const globalCompass = getGlobalCompassDir();
98
+ const projectCompass = getProjectCompassDir(this.projectRoot);
99
+ if (filePath.startsWith(globalCompass) || filePath.startsWith(projectCompass)) {
100
+ return false;
101
+ }
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+ /**
107
+ * Reads and parses a JSON file
108
+ * @param filePath - Path to the JSON file
109
+ * @param fallback - Fallback value if file doesn't exist or is invalid
110
+ * @returns Parsed JSON or fallback value
111
+ */
112
+ async readJsonFile(filePath, fallback) {
113
+ const safePath = this.validatePath(filePath);
114
+ if (!safePath) {
115
+ logger.warn(`Path validation failed for: ${filePath}`);
116
+ return fallback ?? null;
117
+ }
118
+ return safeReadJson(safePath, fallback);
119
+ }
120
+ /**
121
+ * Writes content to a file with backup and approval integration
122
+ * @param filePath - Path to the file (relative or absolute)
123
+ * @param content - Content to write
124
+ * @param options - Write options
125
+ * @returns Operation result
126
+ */
127
+ async writeFile(filePath, content, options = {}) {
128
+ const { createBackup = true, requireApproval = true, description, atomic = true, complexityContext, } = options;
129
+ const safePath = this.validatePath(filePath);
130
+ if (!safePath) {
131
+ return {
132
+ success: false,
133
+ filePath,
134
+ operation: 'modify',
135
+ error: 'Path validation failed - potential directory traversal detected',
136
+ };
137
+ }
138
+ const fileExists = await pathExists(safePath);
139
+ const operation = fileExists ? 'modify' : 'create';
140
+ // Get original content for diff
141
+ let originalContent = null;
142
+ let diff;
143
+ if (fileExists) {
144
+ originalContent = await safeReadFile(safePath);
145
+ if (originalContent !== null) {
146
+ diff = generateDiff(originalContent, content, {
147
+ fileName: path.basename(filePath),
148
+ });
149
+ }
150
+ }
151
+ else {
152
+ // For new files, generate diff showing all content as additions
153
+ diff = generateDiff('', content, {
154
+ fileName: path.basename(filePath),
155
+ });
156
+ }
157
+ // Request approval if required
158
+ if (requireApproval) {
159
+ const approvalManager = getApprovalManager();
160
+ const approvalType = operation === 'create' ? 'file_create' : 'file_modify';
161
+ // Create temp preview file for VS Code integration
162
+ let previewTempRecord;
163
+ try {
164
+ const tempFileService = getTempFileService();
165
+ previewTempRecord = await tempFileService.createTempFile({
166
+ prefix: '[Nova]-preview',
167
+ extension: path.extname(filePath),
168
+ content: content, // Write the full new content for preview
169
+ metadata: { originalPath: filePath },
170
+ });
171
+ }
172
+ catch {
173
+ // Non-critical - proceed without preview if temp file creation fails
174
+ logger.debug('Failed to create preview temp file, proceeding without preview');
175
+ }
176
+ const approvalResponse = await approvalManager.requestApproval(approvalType, description || `${operation === 'create' ? 'Create' : 'Modify'} file: ${filePath}`, {
177
+ filePaths: [filePath],
178
+ affectedFiles: 1,
179
+ linesAdded: diff?.additions,
180
+ linesRemoved: diff?.deletions,
181
+ diff: diff?.unified,
182
+ // Include complexity context for SMART mode decisions
183
+ complexityMode: complexityContext?.mode,
184
+ complexityConfidence: complexityContext?.confidence,
185
+ // Include preview file path for VS Code integration
186
+ previewFilePath: previewTempRecord?.tempPath,
187
+ });
188
+ // Clean up temp preview file after approval (whether approved or rejected)
189
+ if (previewTempRecord) {
190
+ try {
191
+ const tempFileService = getTempFileService();
192
+ await tempFileService.deleteTempFile(previewTempRecord.id);
193
+ }
194
+ catch {
195
+ // Non-critical - temp file will be cleaned up by periodic cleanup
196
+ logger.debug('Failed to delete preview temp file, will be cleaned up later');
197
+ }
198
+ }
199
+ if (!approvalResponse.approved) {
200
+ // Include user feedback in the error message if provided
201
+ const errorMessage = approvalResponse.reason
202
+ ? approvalResponse.reason
203
+ : 'Operation rejected by user';
204
+ return {
205
+ success: false,
206
+ filePath,
207
+ operation,
208
+ error: errorMessage,
209
+ };
210
+ }
211
+ }
212
+ // Create backup if file exists and backup is requested
213
+ let backup;
214
+ if (createBackup && fileExists) {
215
+ const backupManager = await getBackupManager();
216
+ const backupRecord = await backupManager.createBackup(safePath);
217
+ if (backupRecord) {
218
+ backup = backupRecord;
219
+ }
220
+ }
221
+ // Write the file
222
+ try {
223
+ await safeWriteFile(safePath, content, {
224
+ atomic,
225
+ createDir: true,
226
+ });
227
+ // Emit file-modified event
228
+ const eventEmitter = getEventEmitter();
229
+ eventEmitter.emit('file-modified', { path: filePath, operation });
230
+ logger.info(`File ${operation}d: ${filePath}`);
231
+ // Log file write event
232
+ getSystemEventLogger().logFileWrite(filePath, content.length, true);
233
+ return {
234
+ success: true,
235
+ filePath,
236
+ operation,
237
+ backup,
238
+ diff,
239
+ };
240
+ }
241
+ catch (error) {
242
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
243
+ logger.error(`Failed to ${operation} file: ${filePath}`, error);
244
+ // Log file write failure
245
+ getSystemEventLogger().logFileWrite(filePath, content.length, false, errorMessage);
246
+ return {
247
+ success: false,
248
+ filePath,
249
+ operation,
250
+ backup,
251
+ error: errorMessage,
252
+ };
253
+ }
254
+ }
255
+ /**
256
+ * Writes JSON content to a file
257
+ * @param filePath - Path to the file
258
+ * @param data - Data to serialize and write
259
+ * @param options - Write options
260
+ * @returns Operation result
261
+ */
262
+ async writeJsonFile(filePath, data, options = {}) {
263
+ const content = JSON.stringify(data, null, 2);
264
+ return this.writeFile(filePath, content, options);
265
+ }
266
+ /**
267
+ * Deletes a file with backup and approval integration
268
+ * @param filePath - Path to the file to delete
269
+ * @param options - Operation options
270
+ * @returns Operation result
271
+ */
272
+ async deleteFile(filePath, options = {}) {
273
+ const { createBackup = true, requireApproval = true, description, complexityContext } = options;
274
+ const safePath = this.validatePath(filePath);
275
+ if (!safePath) {
276
+ return {
277
+ success: false,
278
+ filePath,
279
+ operation: 'delete',
280
+ error: 'Path validation failed - potential directory traversal detected',
281
+ };
282
+ }
283
+ if (!(await pathExists(safePath))) {
284
+ return {
285
+ success: false,
286
+ filePath,
287
+ operation: 'delete',
288
+ error: 'File does not exist',
289
+ };
290
+ }
291
+ // Request approval if required
292
+ if (requireApproval) {
293
+ const approvalManager = getApprovalManager();
294
+ const approvalResponse = await approvalManager.requestApproval('file_delete', description || `Delete file: ${filePath}`, {
295
+ filePaths: [filePath],
296
+ affectedFiles: 1,
297
+ // Include complexity context for SMART mode decisions
298
+ complexityMode: complexityContext?.mode,
299
+ complexityConfidence: complexityContext?.confidence,
300
+ });
301
+ if (!approvalResponse.approved) {
302
+ // Include user feedback in the error message if provided
303
+ const errorMessage = approvalResponse.reason
304
+ ? approvalResponse.reason
305
+ : 'Operation rejected by user';
306
+ return {
307
+ success: false,
308
+ filePath,
309
+ operation: 'delete',
310
+ error: errorMessage,
311
+ };
312
+ }
313
+ }
314
+ // Create backup before deletion
315
+ let backup;
316
+ if (createBackup) {
317
+ const backupManager = await getBackupManager();
318
+ const backupRecord = await backupManager.createBackup(safePath);
319
+ if (backupRecord) {
320
+ backup = backupRecord;
321
+ }
322
+ }
323
+ // Delete the file
324
+ try {
325
+ await remove(safePath);
326
+ // Emit file-modified event
327
+ const eventEmitter = getEventEmitter();
328
+ eventEmitter.emit('file-modified', { path: filePath, operation: 'delete' });
329
+ logger.info(`File deleted: ${filePath}`);
330
+ // Log file delete event
331
+ getSystemEventLogger().logFileDelete(filePath, true);
332
+ return {
333
+ success: true,
334
+ filePath,
335
+ operation: 'delete',
336
+ backup,
337
+ };
338
+ }
339
+ catch (error) {
340
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
341
+ logger.error(`Failed to delete file: ${filePath}`, error);
342
+ // Log file delete failure
343
+ getSystemEventLogger().logFileDelete(filePath, false, errorMessage);
344
+ return {
345
+ success: false,
346
+ filePath,
347
+ operation: 'delete',
348
+ backup,
349
+ error: errorMessage,
350
+ };
351
+ }
352
+ }
353
+ /**
354
+ * Renames or moves a file with backup and approval integration
355
+ * @param oldPath - Current path of the file
356
+ * @param newPath - New path for the file
357
+ * @param options - Operation options
358
+ * @returns Operation result
359
+ */
360
+ async renameFile(oldPath, newPath, options = {}) {
361
+ const { createBackup = true, requireApproval = true, description, complexityContext } = options;
362
+ const safeOldPath = this.validatePath(oldPath);
363
+ const safeNewPath = this.validatePath(newPath);
364
+ if (!safeOldPath || !safeNewPath) {
365
+ return {
366
+ success: false,
367
+ filePath: oldPath,
368
+ operation: 'rename',
369
+ error: 'Path validation failed - potential directory traversal detected',
370
+ };
371
+ }
372
+ if (!(await pathExists(safeOldPath))) {
373
+ return {
374
+ success: false,
375
+ filePath: oldPath,
376
+ operation: 'rename',
377
+ error: 'Source file does not exist',
378
+ };
379
+ }
380
+ if (await pathExists(safeNewPath)) {
381
+ return {
382
+ success: false,
383
+ filePath: oldPath,
384
+ operation: 'rename',
385
+ error: 'Destination file already exists',
386
+ };
387
+ }
388
+ // Request approval if required
389
+ if (requireApproval) {
390
+ const approvalManager = getApprovalManager();
391
+ const approvalResponse = await approvalManager.requestApproval('file_rename', description || `Rename file: ${oldPath} → ${newPath}`, {
392
+ filePaths: [oldPath, newPath],
393
+ affectedFiles: 1,
394
+ // Include complexity context for SMART mode decisions
395
+ complexityMode: complexityContext?.mode,
396
+ complexityConfidence: complexityContext?.confidence,
397
+ });
398
+ if (!approvalResponse.approved) {
399
+ // Include user feedback in the error message if provided
400
+ const errorMessage = approvalResponse.reason
401
+ ? approvalResponse.reason
402
+ : 'Operation rejected by user';
403
+ return {
404
+ success: false,
405
+ filePath: oldPath,
406
+ operation: 'rename',
407
+ error: errorMessage,
408
+ };
409
+ }
410
+ }
411
+ // Create backup before rename
412
+ let backup;
413
+ if (createBackup) {
414
+ const backupManager = await getBackupManager();
415
+ const backupRecord = await backupManager.createBackup(safeOldPath);
416
+ if (backupRecord) {
417
+ backup = backupRecord;
418
+ }
419
+ }
420
+ // Perform the rename
421
+ try {
422
+ // Ensure destination directory exists
423
+ await ensureDir(path.dirname(safeNewPath));
424
+ // Copy to new location then remove old
425
+ await copy(safeOldPath, safeNewPath);
426
+ await remove(safeOldPath);
427
+ // Emit file-modified event
428
+ const eventEmitter = getEventEmitter();
429
+ eventEmitter.emit('file-modified', { path: newPath, operation: 'create' });
430
+ logger.info(`File renamed: ${oldPath} → ${newPath}`);
431
+ // Log file rename event
432
+ getSystemEventLogger().logFileRename(oldPath, newPath, true);
433
+ return {
434
+ success: true,
435
+ filePath: newPath,
436
+ operation: 'rename',
437
+ backup,
438
+ };
439
+ }
440
+ catch (error) {
441
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
442
+ logger.error(`Failed to rename file: ${oldPath}`, error);
443
+ // Log file rename failure
444
+ getSystemEventLogger().logFileRename(oldPath, newPath, false, errorMessage);
445
+ return {
446
+ success: false,
447
+ filePath: oldPath,
448
+ operation: 'rename',
449
+ backup,
450
+ error: errorMessage,
451
+ };
452
+ }
453
+ }
454
+ /**
455
+ * Checks if a file exists
456
+ * @param filePath - Path to check
457
+ * @returns True if file exists
458
+ */
459
+ async exists(filePath) {
460
+ const safePath = this.validatePath(filePath);
461
+ if (!safePath) {
462
+ return false;
463
+ }
464
+ return pathExists(safePath);
465
+ }
466
+ /**
467
+ * Checks if a path is a file
468
+ * @param filePath - Path to check
469
+ * @returns True if path is a file
470
+ */
471
+ async isFile(filePath) {
472
+ const safePath = this.validatePath(filePath);
473
+ if (!safePath) {
474
+ return false;
475
+ }
476
+ return isFile(safePath);
477
+ }
478
+ /**
479
+ * Checks if a path is a directory
480
+ * @param filePath - Path to check
481
+ * @returns True if path is a directory
482
+ */
483
+ async isDirectory(filePath) {
484
+ const safePath = this.validatePath(filePath);
485
+ if (!safePath) {
486
+ return false;
487
+ }
488
+ return isDirectory(safePath);
489
+ }
490
+ /**
491
+ * Gets file statistics
492
+ * @param filePath - Path to the file
493
+ * @returns File stats or null if not found
494
+ */
495
+ async getStats(filePath) {
496
+ const safePath = this.validatePath(filePath);
497
+ if (!safePath) {
498
+ return null;
499
+ }
500
+ const stats = await stat(safePath);
501
+ if (!stats) {
502
+ return null;
503
+ }
504
+ return {
505
+ size: stats.size,
506
+ modified: stats.mtime,
507
+ created: stats.birthtime,
508
+ isFile: stats.isFile(),
509
+ isDirectory: stats.isDirectory(),
510
+ };
511
+ }
512
+ // ============================================
513
+ // Transaction Support for Atomic Multi-File Operations
514
+ // ============================================
515
+ /**
516
+ * Begins a new transaction for atomic multi-file operations
517
+ * @returns The transaction ID
518
+ */
519
+ beginTransaction() {
520
+ if (this.activeTransaction) {
521
+ throw new Error('A transaction is already in progress. Commit or rollback first.');
522
+ }
523
+ this.activeTransaction = {
524
+ id: uuidv4(),
525
+ createdAt: formatTimestamp(),
526
+ operations: [],
527
+ status: 'pending',
528
+ };
529
+ logger.debug(`Transaction started: ${this.activeTransaction.id}`);
530
+ return this.activeTransaction.id;
531
+ }
532
+ /**
533
+ * Adds a file write operation to the current transaction
534
+ * @param filePath - Path to the file
535
+ * @param content - Content to write
536
+ */
537
+ addWriteOperation(filePath, content) {
538
+ if (!this.activeTransaction) {
539
+ throw new Error('No active transaction. Call beginTransaction() first.');
540
+ }
541
+ const safePath = this.validatePath(filePath);
542
+ if (!safePath) {
543
+ throw new Error(`Invalid path: ${filePath}`);
544
+ }
545
+ this.activeTransaction.operations.push({
546
+ id: uuidv4(),
547
+ type: 'modify',
548
+ filePath: safePath,
549
+ content,
550
+ executed: false,
551
+ });
552
+ logger.debug(`Added write operation to transaction: ${filePath}`);
553
+ }
554
+ /**
555
+ * Adds a file delete operation to the current transaction
556
+ * @param filePath - Path to the file to delete
557
+ */
558
+ addDeleteOperation(filePath) {
559
+ if (!this.activeTransaction) {
560
+ throw new Error('No active transaction. Call beginTransaction() first.');
561
+ }
562
+ const safePath = this.validatePath(filePath);
563
+ if (!safePath) {
564
+ throw new Error(`Invalid path: ${filePath}`);
565
+ }
566
+ this.activeTransaction.operations.push({
567
+ id: uuidv4(),
568
+ type: 'delete',
569
+ filePath: safePath,
570
+ executed: false,
571
+ });
572
+ logger.debug(`Added delete operation to transaction: ${filePath}`);
573
+ }
574
+ /**
575
+ * Adds a file rename operation to the current transaction
576
+ * @param oldPath - Current path of the file
577
+ * @param newPath - New path for the file
578
+ */
579
+ addRenameOperation(oldPath, newPath) {
580
+ if (!this.activeTransaction) {
581
+ throw new Error('No active transaction. Call beginTransaction() first.');
582
+ }
583
+ const safeOldPath = this.validatePath(oldPath);
584
+ const safeNewPath = this.validatePath(newPath);
585
+ if (!safeOldPath || !safeNewPath) {
586
+ throw new Error(`Invalid path: ${oldPath} or ${newPath}`);
587
+ }
588
+ this.activeTransaction.operations.push({
589
+ id: uuidv4(),
590
+ type: 'rename',
591
+ filePath: safeOldPath,
592
+ newPath: safeNewPath,
593
+ executed: false,
594
+ });
595
+ logger.debug(`Added rename operation to transaction: ${oldPath} → ${newPath}`);
596
+ }
597
+ /**
598
+ * Commits the current transaction, executing all operations atomically
599
+ * @param options - Options for the commit
600
+ * @returns Array of operation results
601
+ */
602
+ async commitTransaction(options = {}) {
603
+ if (!this.activeTransaction) {
604
+ throw new Error('No active transaction to commit.');
605
+ }
606
+ const { requireApproval = true, description } = options;
607
+ const transaction = this.activeTransaction;
608
+ const results = [];
609
+ // Request approval for the entire transaction
610
+ if (requireApproval && transaction.operations.length > 0) {
611
+ const approvalManager = getApprovalManager();
612
+ const filePaths = transaction.operations.map((op) => op.filePath);
613
+ const approvalResponse = await approvalManager.requestApproval('multi_file_operation', description || `Multi-file operation: ${transaction.operations.length} files`, {
614
+ filePaths,
615
+ affectedFiles: transaction.operations.length,
616
+ });
617
+ if (!approvalResponse.approved) {
618
+ transaction.status = 'failed';
619
+ this.activeTransaction = null;
620
+ // Include user feedback in the error message if provided
621
+ const errorMessage = approvalResponse.reason
622
+ ? `Transaction rejected: ${approvalResponse.reason}`
623
+ : 'Transaction rejected by user';
624
+ return transaction.operations.map((op) => ({
625
+ success: false,
626
+ filePath: op.filePath,
627
+ operation: op.type === 'rename' ? 'rename' : op.type,
628
+ error: errorMessage,
629
+ }));
630
+ }
631
+ }
632
+ const backupManager = await getBackupManager();
633
+ // Execute all operations
634
+ try {
635
+ for (const operation of transaction.operations) {
636
+ // Create backup for existing files
637
+ if (operation.type !== 'create' && (await pathExists(operation.filePath))) {
638
+ const backup = await backupManager.createBackup(operation.filePath);
639
+ if (backup) {
640
+ operation.backup = backup;
641
+ }
642
+ operation.originalContent = await safeReadFile(operation.filePath) || undefined;
643
+ }
644
+ // Execute the operation
645
+ let result;
646
+ switch (operation.type) {
647
+ case 'create':
648
+ case 'modify':
649
+ await safeWriteFile(operation.filePath, operation.content || '', {
650
+ atomic: true,
651
+ createDir: true,
652
+ });
653
+ result = {
654
+ success: true,
655
+ filePath: operation.filePath,
656
+ operation: operation.type,
657
+ backup: operation.backup,
658
+ };
659
+ break;
660
+ case 'delete':
661
+ await remove(operation.filePath);
662
+ result = {
663
+ success: true,
664
+ filePath: operation.filePath,
665
+ operation: 'delete',
666
+ backup: operation.backup,
667
+ };
668
+ break;
669
+ case 'rename':
670
+ await ensureDir(path.dirname(operation.newPath));
671
+ await copy(operation.filePath, operation.newPath);
672
+ await remove(operation.filePath);
673
+ result = {
674
+ success: true,
675
+ filePath: operation.newPath,
676
+ operation: 'rename',
677
+ backup: operation.backup,
678
+ };
679
+ break;
680
+ default:
681
+ result = {
682
+ success: false,
683
+ filePath: operation.filePath,
684
+ operation: 'modify',
685
+ error: `Unknown operation type: ${operation.type}`,
686
+ };
687
+ }
688
+ operation.executed = true;
689
+ results.push(result);
690
+ // Emit event for each successful operation
691
+ if (result.success) {
692
+ const eventEmitter = getEventEmitter();
693
+ // Map rename to create for event emission (file is created at new location)
694
+ const eventOperation = result.operation === 'rename' ? 'create' : result.operation;
695
+ eventEmitter.emit('file-modified', {
696
+ path: result.filePath,
697
+ operation: eventOperation,
698
+ });
699
+ }
700
+ }
701
+ transaction.status = 'committed';
702
+ logger.info(`Transaction committed: ${transaction.id} (${results.length} operations)`);
703
+ }
704
+ catch (error) {
705
+ // Rollback on failure
706
+ logger.error(`Transaction failed, rolling back: ${transaction.id}`, error);
707
+ await this.rollbackTransaction();
708
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
709
+ // Mark remaining operations as failed
710
+ for (const operation of transaction.operations) {
711
+ if (!operation.executed) {
712
+ results.push({
713
+ success: false,
714
+ filePath: operation.filePath,
715
+ operation: operation.type === 'rename' ? 'rename' : operation.type,
716
+ error: `Transaction rolled back: ${errorMessage}`,
717
+ });
718
+ }
719
+ }
720
+ }
721
+ this.activeTransaction = null;
722
+ return results;
723
+ }
724
+ /**
725
+ * Rolls back the current transaction, restoring all modified files
726
+ */
727
+ async rollbackTransaction() {
728
+ if (!this.activeTransaction) {
729
+ logger.warn('No active transaction to rollback');
730
+ return;
731
+ }
732
+ const transaction = this.activeTransaction;
733
+ const backupManager = await getBackupManager();
734
+ // Rollback executed operations in reverse order
735
+ const executedOps = transaction.operations.filter((op) => op.executed).reverse();
736
+ for (const operation of executedOps) {
737
+ try {
738
+ if (operation.backup) {
739
+ // Restore from backup
740
+ await backupManager.restore(operation.backup.id);
741
+ logger.debug(`Rolled back: ${operation.filePath}`);
742
+ }
743
+ else if (operation.type === 'create') {
744
+ // Remove created file
745
+ if (await pathExists(operation.filePath)) {
746
+ await remove(operation.filePath);
747
+ logger.debug(`Removed created file: ${operation.filePath}`);
748
+ }
749
+ }
750
+ else if (operation.type === 'rename' && operation.newPath) {
751
+ // Reverse the rename
752
+ if (await pathExists(operation.newPath)) {
753
+ await copy(operation.newPath, operation.filePath);
754
+ await remove(operation.newPath);
755
+ logger.debug(`Reversed rename: ${operation.newPath} → ${operation.filePath}`);
756
+ }
757
+ }
758
+ }
759
+ catch (error) {
760
+ logger.error(`Failed to rollback operation: ${operation.filePath}`, error);
761
+ }
762
+ }
763
+ transaction.status = 'rolled_back';
764
+ this.activeTransaction = null;
765
+ logger.info(`Transaction rolled back: ${transaction.id}`);
766
+ }
767
+ /**
768
+ * Gets the current active transaction
769
+ * @returns The active transaction or null
770
+ */
771
+ getActiveTransaction() {
772
+ return this.activeTransaction;
773
+ }
774
+ /**
775
+ * Checks if there is an active transaction
776
+ * @returns True if a transaction is in progress
777
+ */
778
+ hasActiveTransaction() {
779
+ return this.activeTransaction !== null;
780
+ }
781
+ // ============================================
782
+ // Utility Methods
783
+ // ============================================
784
+ /**
785
+ * Restores a file from its most recent backup
786
+ * @param filePath - Path to the file to restore
787
+ * @returns True if restoration was successful
788
+ */
789
+ async restoreFromBackup(filePath) {
790
+ const safePath = this.validatePath(filePath);
791
+ if (!safePath) {
792
+ logger.warn(`Path validation failed for restore: ${filePath}`);
793
+ return false;
794
+ }
795
+ const backupManager = await getBackupManager();
796
+ return backupManager.restoreLatest(safePath);
797
+ }
798
+ /**
799
+ * Gets the diff between current file content and proposed new content
800
+ * @param filePath - Path to the file
801
+ * @param newContent - Proposed new content
802
+ * @returns Diff result or null if file doesn't exist
803
+ */
804
+ async getDiff(filePath, newContent) {
805
+ const safePath = this.validatePath(filePath);
806
+ if (!safePath) {
807
+ return null;
808
+ }
809
+ const currentContent = await safeReadFile(safePath);
810
+ if (currentContent === null) {
811
+ return null;
812
+ }
813
+ return generateDiff(currentContent, newContent, {
814
+ fileName: path.basename(filePath),
815
+ });
816
+ }
817
+ /**
818
+ * Validates and sanitizes a file path
819
+ * @param filePath - Path to validate
820
+ * @param allowExternal - Whether to allow paths outside project root (default: false)
821
+ * @returns Sanitized absolute path or null if invalid
822
+ */
823
+ validatePath(filePath, allowExternal = false) {
824
+ // Resolve the path to absolute form
825
+ const resolvedPath = path.isAbsolute(filePath)
826
+ ? path.normalize(filePath)
827
+ : path.resolve(this.projectRoot, filePath);
828
+ // Check for directory traversal patterns even in absolute paths
829
+ // This catches attempts like /project/../../../etc/passwd
830
+ const normalizedPath = path.normalize(resolvedPath);
831
+ // For relative paths, use sanitizePath to prevent directory traversal
832
+ if (!path.isAbsolute(filePath)) {
833
+ const sanitized = sanitizePath(filePath, this.projectRoot);
834
+ if (!sanitized) {
835
+ logger.warn(`Path validation failed (directory traversal attempt): ${filePath}`);
836
+ return null;
837
+ }
838
+ }
839
+ // Check if path is within project root
840
+ const isWithinProject = isPathWithin(normalizedPath, this.projectRoot);
841
+ // If path is outside project root
842
+ if (!isWithinProject) {
843
+ // Always allow access to the global compass directory (~/.compass/)
844
+ const globalDir = getGlobalCompassDir();
845
+ if (isPathWithin(normalizedPath, globalDir)) {
846
+ logger.debug(`Allowing global compass directory access: ${filePath}`);
847
+ return normalizedPath;
848
+ }
849
+ if (allowExternal) {
850
+ // External paths are allowed for this operation (e.g., read with approval)
851
+ logger.debug(`Allowing external path access: ${filePath}`);
852
+ return normalizedPath;
853
+ }
854
+ else {
855
+ // Block access to paths outside project root
856
+ logger.warn(`Path is outside project root and external access not allowed: ${filePath}`);
857
+ return null;
858
+ }
859
+ }
860
+ return normalizedPath;
861
+ }
862
+ }
863
+ // Singleton instance
864
+ let fileServiceInstance = null;
865
+ /**
866
+ * Gets the singleton FileService instance
867
+ * @returns The FileService instance
868
+ */
869
+ export function getFileService() {
870
+ if (!fileServiceInstance) {
871
+ fileServiceInstance = new FileService();
872
+ }
873
+ return fileServiceInstance;
874
+ }
875
+ export { FileService };
876
+ //# sourceMappingURL=file-service.js.map