byterover-cli 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +48 -3
  18. package/dist/commands/init.js +242 -70
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/pull.d.ts +33 -0
  21. package/dist/commands/pull.js +115 -0
  22. package/dist/commands/push.d.ts +13 -13
  23. package/dist/commands/push.js +81 -101
  24. package/dist/commands/query.d.ts +63 -0
  25. package/dist/commands/query.js +349 -0
  26. package/dist/commands/space/list.d.ts +5 -2
  27. package/dist/commands/space/list.js +60 -56
  28. package/dist/commands/space/switch.d.ts +16 -0
  29. package/dist/commands/space/switch.js +102 -53
  30. package/dist/commands/status.d.ts +5 -2
  31. package/dist/commands/status.js +43 -33
  32. package/dist/commands/watch.d.ts +23 -0
  33. package/dist/commands/watch.js +171 -0
  34. package/dist/config/auth.config.js +14 -2
  35. package/dist/config/context-tree-domains.d.ts +12 -0
  36. package/dist/config/context-tree-domains.js +29 -0
  37. package/dist/config/environment.d.ts +6 -0
  38. package/dist/config/environment.js +9 -2
  39. package/dist/constants.d.ts +5 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  42. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  43. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  44. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  45. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  46. package/dist/core/domain/cipher/agent/index.js +7 -0
  47. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  48. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  50. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  51. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  52. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  53. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  54. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  55. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  56. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  57. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  58. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  59. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  60. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  61. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  62. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  63. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  64. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  65. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  66. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  67. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  68. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  69. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  70. package/dist/core/domain/cipher/memory/types.js +4 -0
  71. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  72. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  73. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  74. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  75. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  76. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  77. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  78. package/dist/core/domain/cipher/todos/index.js +4 -0
  79. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  80. package/dist/core/domain/cipher/todos/types.js +5 -0
  81. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  82. package/dist/core/domain/cipher/tools/constants.js +24 -0
  83. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  84. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  85. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  86. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  87. package/dist/core/domain/entities/brv-config.js +115 -17
  88. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  89. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  90. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  91. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  92. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  93. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  94. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  95. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  96. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  97. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  98. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  99. package/dist/core/domain/entities/context-tree-index.js +27 -0
  100. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  101. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  102. package/dist/core/domain/entities/event.d.ts +1 -1
  103. package/dist/core/domain/entities/event.js +3 -1
  104. package/dist/core/domain/entities/parser.d.ts +567 -0
  105. package/dist/core/domain/entities/parser.js +10 -0
  106. package/dist/core/domain/entities/playbook.d.ts +2 -23
  107. package/dist/core/domain/entities/playbook.js +2 -70
  108. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  109. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  110. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  111. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  112. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  113. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  114. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  115. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  116. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  117. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  118. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  119. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  120. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  121. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  122. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  123. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  124. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  125. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  128. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  129. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  130. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  131. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  132. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  133. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  134. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  135. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  136. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  137. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  139. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  140. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  141. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  142. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  143. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  144. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  145. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  146. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  147. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  148. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  149. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  150. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  151. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  153. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  155. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  156. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  157. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  158. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  159. package/dist/core/interfaces/cipher/message-types.js +5 -0
  160. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  161. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  162. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  163. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  164. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  165. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  166. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  167. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  168. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  169. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  171. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  173. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  174. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  175. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  176. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  177. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  178. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  179. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  180. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  181. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  182. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  183. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  184. package/dist/hooks/error/clean-errors.d.ts +7 -0
  185. package/dist/hooks/error/clean-errors.js +50 -0
  186. package/dist/hooks/init/welcome.js +72 -1
  187. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  188. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  189. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  190. package/dist/infra/cipher/agent-service-factory.js +212 -0
  191. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  192. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  193. package/dist/infra/cipher/blob/index.d.ts +10 -0
  194. package/dist/infra/cipher/blob/index.js +12 -0
  195. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  196. package/dist/infra/cipher/blob/migrations.js +148 -0
  197. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  198. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  199. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  200. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  201. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  202. package/dist/infra/cipher/cipher-agent.js +317 -0
  203. package/dist/infra/cipher/command-parser.d.ts +23 -0
  204. package/dist/infra/cipher/command-parser.js +85 -0
  205. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  206. package/dist/infra/cipher/display/todo-display.js +129 -0
  207. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  208. package/dist/infra/cipher/events/event-emitter.js +158 -0
  209. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  210. package/dist/infra/cipher/exit-codes.js +58 -0
  211. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  212. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  213. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  214. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  215. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  216. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  217. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  218. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  219. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  220. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  221. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  222. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  223. package/dist/infra/cipher/interactive-commands.js +198 -0
  224. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  225. package/dist/infra/cipher/interactive-loop.js +352 -0
  226. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  227. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  228. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  229. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  230. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  231. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  232. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  233. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  234. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  235. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  236. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  237. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  238. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  239. package/dist/infra/cipher/llm/context/index.js +2 -0
  240. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  241. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  242. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  243. package/dist/infra/cipher/llm/context/utils.js +89 -0
  244. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  245. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  246. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  247. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  248. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  249. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  250. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  251. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  252. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  253. package/dist/infra/cipher/llm/generators/index.js +13 -0
  254. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  255. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  256. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  257. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  258. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  259. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  260. package/dist/infra/cipher/llm/index.d.ts +9 -0
  261. package/dist/infra/cipher/llm/index.js +13 -0
  262. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  263. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  264. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  265. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  266. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  267. package/dist/infra/cipher/llm/response-validator.js +157 -0
  268. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  269. package/dist/infra/cipher/llm/retry/index.js +10 -0
  270. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  271. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  272. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  273. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  274. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  275. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  276. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  277. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  278. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  279. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  280. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  281. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  282. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  283. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  284. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  285. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  286. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  287. package/dist/infra/cipher/logger/console-logger.js +63 -0
  288. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  289. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  290. package/dist/infra/cipher/memory/index.d.ts +6 -0
  291. package/dist/infra/cipher/memory/index.js +7 -0
  292. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  293. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  294. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  295. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  296. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  297. package/dist/infra/cipher/process/command-validator.js +266 -0
  298. package/dist/infra/cipher/process/index.d.ts +8 -0
  299. package/dist/infra/cipher/process/index.js +8 -0
  300. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  301. package/dist/infra/cipher/process/process-service.js +439 -0
  302. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  303. package/dist/infra/cipher/session/chat-session.js +165 -0
  304. package/dist/infra/cipher/session/index.d.ts +6 -0
  305. package/dist/infra/cipher/session/index.js +5 -0
  306. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  307. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  308. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  309. package/dist/infra/cipher/session/session-manager.js +172 -0
  310. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  311. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  312. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  313. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  314. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  315. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  316. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  317. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  318. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  319. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  320. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  321. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  322. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  323. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  324. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  326. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  327. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  328. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  329. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  330. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  331. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  332. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  333. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  334. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  335. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  336. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  337. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  338. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  339. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  340. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  342. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  344. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  346. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  347. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  348. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  350. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  351. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  352. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  353. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  354. package/dist/infra/cipher/tools/index.d.ts +18 -0
  355. package/dist/infra/cipher/tools/index.js +19 -0
  356. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  357. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  358. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  359. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  360. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  361. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  362. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  363. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  364. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  365. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  366. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  367. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  368. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  369. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  370. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  371. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  372. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  373. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  374. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  375. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  376. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  377. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  378. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  379. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  380. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  381. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  382. package/dist/infra/config/file-config-store.js +9 -3
  383. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  384. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  385. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  386. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  387. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  388. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  389. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  390. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  391. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  392. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  393. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  394. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  395. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  396. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  397. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  398. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  399. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  400. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  401. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  402. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  403. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  404. package/dist/infra/parsers/clean/shared.js +273 -0
  405. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  406. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  407. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  408. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  409. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  410. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  411. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  412. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  413. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  414. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  415. package/dist/infra/space/http-space-service.js +2 -1
  416. package/dist/infra/team/http-team-service.js +2 -1
  417. package/dist/infra/user/http-user-service.js +2 -1
  418. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  419. package/dist/infra/watcher/file-watcher-service.js +81 -0
  420. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  421. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  422. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  423. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  424. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  425. package/dist/resources/prompts/reflection.yml +27 -0
  426. package/dist/resources/prompts/system-prompt.yml +82 -0
  427. package/dist/resources/prompts/tool-outputs.yml +30 -0
  428. package/dist/templates/README.md +6 -7
  429. package/dist/templates/sections/command-reference.md +40 -111
  430. package/dist/templates/sections/workflow.md +3 -30
  431. package/dist/utils/emoji-helpers.d.ts +38 -0
  432. package/dist/utils/emoji-helpers.js +42 -0
  433. package/dist/utils/error-handler.d.ts +51 -0
  434. package/dist/utils/error-handler.js +169 -0
  435. package/dist/utils/error-helpers.d.ts +30 -0
  436. package/dist/utils/error-helpers.js +47 -0
  437. package/dist/utils/file-helpers.d.ts +15 -0
  438. package/dist/utils/file-helpers.js +44 -0
  439. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  440. package/dist/utils/oclif-error-helpers.js +46 -0
  441. package/dist/utils/tool-display-formatter.d.ts +53 -0
  442. package/dist/utils/tool-display-formatter.js +257 -0
  443. package/oclif.manifest.json +381 -141
  444. package/package.json +27 -6
  445. package/dist/commands/add.d.ts +0 -49
  446. package/dist/commands/add.js +0 -192
  447. package/dist/commands/complete.d.ts +0 -108
  448. package/dist/commands/complete.js +0 -340
  449. package/dist/commands/retrieve.d.ts +0 -26
  450. package/dist/commands/retrieve.js +0 -101
  451. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  452. package/dist/core/domain/entities/curator-output.js +0 -23
  453. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  454. package/dist/core/domain/entities/delta-batch.js +0 -52
  455. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  456. package/dist/core/domain/entities/delta-operation.js +0 -50
  457. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  458. package/dist/core/domain/entities/executor-output.js +0 -33
  459. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  460. package/dist/core/domain/entities/reflector-output.js +0 -44
  461. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  462. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  463. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  464. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  465. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  466. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  467. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  468. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  469. package/dist/infra/ace/ace-file-utils.js +0 -83
  470. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  471. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  472. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  473. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  474. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  475. package/dist/infra/ace/file-delta-store.js +0 -26
  476. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  477. package/dist/infra/ace/file-executor-output-store.js +0 -26
  478. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  479. package/dist/infra/ace/file-playbook-store.js +0 -107
  480. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  481. package/dist/infra/ace/file-reflection-store.js +0 -55
  482. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  483. package/dist/infra/playbook/file-playbook-service.js +0 -132
  484. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  485. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  486. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  487. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  488. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  489. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  490. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Cursor Clean Service
3
+ * Transforms Cursor raw parsed data to clean normalized format
4
+ */
5
+ import type { CleanSession } from '../../../core/domain/entities/parser.js';
6
+ import { Agent } from '../../../core/domain/entities/agent.js';
7
+ import { ICleanParserService } from '../../../core/interfaces/parser/i-clean-parser-service.js';
8
+ /**
9
+ * Cursor Clean Service
10
+ * Transforms Cursor raw parsed sessions to clean normalized format
11
+ */
12
+ export declare class CursorCleanService implements ICleanParserService {
13
+ private ide;
14
+ /**
15
+ * Initialize Cursor Clean Service
16
+ *
17
+ * @param ide - The IDE type (Cursor)
18
+ */
19
+ constructor(ide: Agent);
20
+ /**
21
+ * Parse and transform Cursor raw sessions to clean normalized format
22
+ *
23
+ * Reads Cursor raw session files organized by workspace, transforms them using
24
+ * Cursor-to-Claude conversion, and normalizes the sessions.
25
+ * Returns sessions in-memory without file writing.
26
+ *
27
+ * @param rawDir - Absolute path to the directory containing raw Cursor session files organized by workspace
28
+ * @returns Promise resolving to array of clean normalized sessions
29
+ */
30
+ parse(rawDir: string): Promise<readonly CleanSession[]>;
31
+ /**
32
+ * Add filesystem paths from property value to path set
33
+ *
34
+ * Helper function for normalizing workspace paths from various property formats found
35
+ * throughout Cursor session data. Handles both string and array values to accommodate
36
+ * different workspace path representations (single workspace vs monorepo with multiple paths).
37
+ *
38
+ * Processing logic:
39
+ * - Array values: Each element is checked and added individually if it's a string
40
+ * - String values: Added directly to the set
41
+ * - Other types: Ignored (no-op)
42
+ *
43
+ * The Set data structure automatically handles deduplication of paths. Used extensively
44
+ * in workspace path extraction to accumulate paths from multiple sources (metadata,
45
+ * top-level properties, tool results).
46
+ *
47
+ * @param value - Property value that may be a string path, array of string paths, or other type
48
+ * @param paths - Set to accumulate parsed filesystem paths (modified in place)
49
+ */
50
+ private addPathsFromProperty;
51
+ /**
52
+ * Extract and transform tool results from Cursor bubble to tool_use content block
53
+ *
54
+ * Converts Cursor's toolResults structure into a tool_use content block format compatible
55
+ * with the unified message format. Extracts tool name and ID, simplifies parameters and output
56
+ * based on tool type (e.g., run_terminal_cmd, read_file, write_file, etc.) for cleaner output.
57
+ * Returns null if no valid toolResults provided.
58
+ *
59
+ * @param toolResults - Cursor bubble's toolResults object with name, toolCallId, params, result
60
+ * @returns CleanCursorToolUseBlock or null if toolResults is empty
61
+ */
62
+ private extractCursorToolResult;
63
+ /**
64
+ * Extract workspace paths from Cursor session metadata
65
+ *
66
+ * Checks session metadata for workspacePath property and adds it to the paths set.
67
+ * Handles both string and array workspace paths using addPathsFromProperty helper.
68
+ * No-op if metadata is missing or does not contain workspacePath.
69
+ *
70
+ * @param cursorSession - RawCursorRawSession object containing optional metadata
71
+ * @param paths - Set to accumulate workspace paths
72
+ */
73
+ private extractPathsFromMetadata;
74
+ /**
75
+ * Extract file system paths from tool output text using regex pattern matching
76
+ *
77
+ * Scans output text for filesystem paths matching pattern /[^\s]+ (slash-prefixed, non-whitespace).
78
+ * Filters results to valid-looking paths: contain /, don't start with /tmp, longer than 5 chars.
79
+ * Removes trailing files (e.g., /path/to/file.ext → /path/to) to extract directory paths.
80
+ * Used for extracting workspace paths from terminal command outputs.
81
+ *
82
+ * @param output - Tool output text potentially containing filesystem paths
83
+ * @param paths - Set to accumulate discovered workspace paths
84
+ */
85
+ private extractPathsFromToolOutput;
86
+ /**
87
+ * Extract workspace paths from tool results in all bubbles
88
+ *
89
+ * Iterates through all bubbles in the session, checking for toolResults with output/content.
90
+ * Extracts paths from tool result text using extractPathsFromToolOutput which parses
91
+ * filesystem paths from tool execution results (common in run_terminal_cmd results).
92
+ * Used to discover workspace paths from command execution outputs.
93
+ *
94
+ * @param cursorSession - RawCursorRawSession object containing bubbles array
95
+ * @param paths - Set to accumulate discovered workspace paths
96
+ */
97
+ private extractPathsFromToolResults;
98
+ /**
99
+ * Extract all workspace paths from Cursor session data
100
+ *
101
+ * Collects workspace paths from multiple sources: top-level workspacePath property,
102
+ * session metadata workspacePath, and filesystem paths extracted from tool result outputs.
103
+ * Deduplicates paths and returns a sorted array. Provides comprehensive path discovery
104
+ * from various locations where Cursor stores workspace information.
105
+ *
106
+ * @param cursorSession - RawCursorRawSession object with workspacePath, metadata, and bubbles
107
+ * @returns Sorted array of unique workspace paths discovered
108
+ */
109
+ private extractWorkspacePathsFromCursor;
110
+ /**
111
+ * Simplify tool input parameters based on tool type
112
+ *
113
+ * Filters tool input parameters to keep only essential fields for each tool type,
114
+ * removing verbose metadata and unnecessary properties. Handles common Cursor tools:
115
+ * codebase_search, create_folder, delete_file, delete_folder, read_file, run_terminal_cmd, write_file.
116
+ * Returns complete params for unknown tools. Produces cleaner, more focused tool invocation records.
117
+ *
118
+ * @param toolName - Name of the tool (determines which parameters to keep)
119
+ * @param params - Full parameter object from Cursor tool invocation
120
+ * @returns Filtered parameter object with only essential fields for the tool type
121
+ */
122
+ private simplifyToolInput;
123
+ /**
124
+ * Simplify tool output based on tool type
125
+ *
126
+ * Extracts essential content from verbose Cursor tool result structures, removing
127
+ * redundant metadata while preserving actionable information. Handles common tools:
128
+ * codebase_search (search results), file operations (success/message), read_file (contents),
129
+ * run_terminal_cmd (output), and others. Returns tool_result wrapper with simplified content.
130
+ * Returns undefined if result is empty.
131
+ *
132
+ * @param toolName - Name of the tool (determines which output fields to extract)
133
+ * @param result - Full result object from Cursor tool execution
134
+ * @returns CleanCursorToolResultBlock with simplified content or undefined if empty
135
+ */
136
+ private simplifyToolOutput;
137
+ /**
138
+ * Transform a single Cursor bubble into a Claude-format message
139
+ *
140
+ * Converts Cursor's bubble structure (a turn in conversation) to Claude message format.
141
+ * Maps: ai → assistant message (text → thinking block), user → user message (text → text block).
142
+ * Extracts and includes tool results, code blocks, and timestamp. Returns message with
143
+ * content array (may be empty thinking block if no content).
144
+ *
145
+ * @param bubble - CursorBubble object with type, text, toolResults, codeBlocks, timestamp
146
+ * @returns Message object with type, content array, and ISO timestamp
147
+ */
148
+ private transformCursorBubbleToClaudeMessage;
149
+ /**
150
+ * Transform complete Cursor session to Claude-compatible format
151
+ *
152
+ * Converts all bubbles in a Cursor session to Claude messages, extracting workspace paths
153
+ * from multiple sources (direct property, metadata, tool outputs). Produces normalized
154
+ * session object with messages array, workspace paths, and preserved metadata/timestamps.
155
+ *
156
+ * @param cursorSession - RawCursorRawSession object with bubbles array and metadata
157
+ * @param workspaceHash - Workspace identifier hash to include in output
158
+ * @returns Session object in Claude format with messages and workspace information
159
+ */
160
+ private transformCursorToClaudeFormat;
161
+ }
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Cursor Clean Service
3
+ * Transforms Cursor raw parsed data to clean normalized format
4
+ */
5
+ import { readdir, readFile } from 'node:fs/promises';
6
+ import { join as pathJoin } from 'node:path';
7
+ import { normalizeClaudeSession } from './shared.js';
8
+ /**
9
+ * Cursor Clean Service
10
+ * Transforms Cursor raw parsed sessions to clean normalized format
11
+ */
12
+ export class CursorCleanService {
13
+ ide;
14
+ /**
15
+ * Initialize Cursor Clean Service
16
+ *
17
+ * @param ide - The IDE type (Cursor)
18
+ */
19
+ constructor(ide) {
20
+ this.ide = ide;
21
+ }
22
+ /**
23
+ * Parse and transform Cursor raw sessions to clean normalized format
24
+ *
25
+ * Reads Cursor raw session files organized by workspace, transforms them using
26
+ * Cursor-to-Claude conversion, and normalizes the sessions.
27
+ * Returns sessions in-memory without file writing.
28
+ *
29
+ * @param rawDir - Absolute path to the directory containing raw Cursor session files organized by workspace
30
+ * @returns Promise resolving to array of clean normalized sessions
31
+ */
32
+ /* eslint-disable no-await-in-loop */
33
+ async parse(rawDir) {
34
+ console.log('🔍 Starting Cursor clean transformation...');
35
+ console.log(`📁 Raw directory: ${rawDir}`);
36
+ try {
37
+ const entries = await readdir(rawDir);
38
+ const allCleanSessions = [];
39
+ for (const entry of entries) {
40
+ const workspacePath = pathJoin(rawDir, entry);
41
+ const files = await readdir(workspacePath);
42
+ for (const file of files) {
43
+ if (!file.endsWith('.json'))
44
+ continue;
45
+ try {
46
+ const content = await readFile(pathJoin(workspacePath, file), 'utf8');
47
+ const session = JSON.parse(content);
48
+ // Transform Cursor format to Claude format using workspace ID as hash
49
+ const claudeFormatted = this.transformCursorToClaudeFormat(session, entry);
50
+ // Normalize the session using shared transformer
51
+ const normalized = normalizeClaudeSession(claudeFormatted, 'Cursor');
52
+ // Add to array instead of writing to disk
53
+ allCleanSessions.push(normalized);
54
+ console.log(` ✅ ${session.title}`);
55
+ }
56
+ catch (error) {
57
+ console.warn(`⚠️ Failed to transform ${file}:`, error instanceof Error ? error.message : String(error));
58
+ }
59
+ }
60
+ }
61
+ console.log(`\n🎉 Cursor clean transformation complete! ${allCleanSessions.length} sessions processed`);
62
+ return Object.freeze(allCleanSessions);
63
+ }
64
+ catch (error) {
65
+ console.error('❌ Error during transformation:', error instanceof Error ? error.message : 'Unknown error');
66
+ return Object.freeze([]);
67
+ }
68
+ }
69
+ /* eslint-enable no-await-in-loop */
70
+ /**
71
+ * Add filesystem paths from property value to path set
72
+ *
73
+ * Helper function for normalizing workspace paths from various property formats found
74
+ * throughout Cursor session data. Handles both string and array values to accommodate
75
+ * different workspace path representations (single workspace vs monorepo with multiple paths).
76
+ *
77
+ * Processing logic:
78
+ * - Array values: Each element is checked and added individually if it's a string
79
+ * - String values: Added directly to the set
80
+ * - Other types: Ignored (no-op)
81
+ *
82
+ * The Set data structure automatically handles deduplication of paths. Used extensively
83
+ * in workspace path extraction to accumulate paths from multiple sources (metadata,
84
+ * top-level properties, tool results).
85
+ *
86
+ * @param value - Property value that may be a string path, array of string paths, or other type
87
+ * @param paths - Set to accumulate parsed filesystem paths (modified in place)
88
+ */
89
+ addPathsFromProperty(value, paths) {
90
+ if (Array.isArray(value)) {
91
+ for (const p of value) {
92
+ if (typeof p === 'string')
93
+ paths.add(p);
94
+ }
95
+ }
96
+ else if (typeof value === 'string') {
97
+ paths.add(value);
98
+ }
99
+ }
100
+ /**
101
+ * Extract and transform tool results from Cursor bubble to tool_use content block
102
+ *
103
+ * Converts Cursor's toolResults structure into a tool_use content block format compatible
104
+ * with the unified message format. Extracts tool name and ID, simplifies parameters and output
105
+ * based on tool type (e.g., run_terminal_cmd, read_file, write_file, etc.) for cleaner output.
106
+ * Returns null if no valid toolResults provided.
107
+ *
108
+ * @param toolResults - Cursor bubble's toolResults object with name, toolCallId, params, result
109
+ * @returns CleanCursorToolUseBlock or null if toolResults is empty
110
+ */
111
+ extractCursorToolResult(toolResults) {
112
+ if (!toolResults)
113
+ return null;
114
+ const toolName = toolResults.name;
115
+ const toolId = toolResults.toolCallId;
116
+ const toolUse = {
117
+ id: toolId,
118
+ name: toolName,
119
+ // eslint-disable-next-line camelcase
120
+ tool_use_id: toolId,
121
+ type: 'tool_use',
122
+ };
123
+ // Extract and simplify input parameters
124
+ if (toolResults.params) {
125
+ toolUse.input = this.simplifyToolInput(toolName, toolResults.params);
126
+ }
127
+ // Extract and simplify execution result
128
+ if (toolResults.result) {
129
+ toolUse.output = this.simplifyToolOutput(toolName, toolResults.result);
130
+ }
131
+ return toolUse;
132
+ }
133
+ /**
134
+ * Extract workspace paths from Cursor session metadata
135
+ *
136
+ * Checks session metadata for workspacePath property and adds it to the paths set.
137
+ * Handles both string and array workspace paths using addPathsFromProperty helper.
138
+ * No-op if metadata is missing or does not contain workspacePath.
139
+ *
140
+ * @param cursorSession - RawCursorRawSession object containing optional metadata
141
+ * @param paths - Set to accumulate workspace paths
142
+ */
143
+ extractPathsFromMetadata(cursorSession, paths) {
144
+ if (!cursorSession.metadata) {
145
+ return;
146
+ }
147
+ const { metadata } = cursorSession;
148
+ if (metadata.workspacePath) {
149
+ this.addPathsFromProperty(metadata.workspacePath, paths);
150
+ }
151
+ }
152
+ /**
153
+ * Extract file system paths from tool output text using regex pattern matching
154
+ *
155
+ * Scans output text for filesystem paths matching pattern /[^\s]+ (slash-prefixed, non-whitespace).
156
+ * Filters results to valid-looking paths: contain /, don't start with /tmp, longer than 5 chars.
157
+ * Removes trailing files (e.g., /path/to/file.ext → /path/to) to extract directory paths.
158
+ * Used for extracting workspace paths from terminal command outputs.
159
+ *
160
+ * @param output - Tool output text potentially containing filesystem paths
161
+ * @param paths - Set to accumulate discovered workspace paths
162
+ */
163
+ extractPathsFromToolOutput(output, paths) {
164
+ const pathMatches = output.match(/\/[^\s]+/g) || [];
165
+ for (const p of pathMatches) {
166
+ // Only add valid-looking paths (start with /, contain common path separators)
167
+ if (p.includes('/') && !p.startsWith('/tmp') && p.length > 5) {
168
+ // Extract directory path (remove trailing file if it looks like a file)
169
+ const dirPath = p.replace(/\/[^/]*\.[a-z]+$/, '') || p;
170
+ if (dirPath !== '/') {
171
+ paths.add(dirPath);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * Extract workspace paths from tool results in all bubbles
178
+ *
179
+ * Iterates through all bubbles in the session, checking for toolResults with output/content.
180
+ * Extracts paths from tool result text using extractPathsFromToolOutput which parses
181
+ * filesystem paths from tool execution results (common in run_terminal_cmd results).
182
+ * Used to discover workspace paths from command execution outputs.
183
+ *
184
+ * @param cursorSession - RawCursorRawSession object containing bubbles array
185
+ * @param paths - Set to accumulate discovered workspace paths
186
+ */
187
+ extractPathsFromToolResults(cursorSession, paths) {
188
+ for (const bubble of cursorSession.bubbles) {
189
+ if (!bubble.toolResults) {
190
+ continue;
191
+ }
192
+ const { toolResults } = bubble;
193
+ // Parse tool result output for file paths (common in run_terminal_cmd)
194
+ const output = typeof toolResults.output === 'string'
195
+ ? toolResults.output
196
+ : typeof toolResults.content === 'string'
197
+ ? toolResults.content
198
+ : '';
199
+ this.extractPathsFromToolOutput(output, paths);
200
+ }
201
+ }
202
+ /**
203
+ * Extract all workspace paths from Cursor session data
204
+ *
205
+ * Collects workspace paths from multiple sources: top-level workspacePath property,
206
+ * session metadata workspacePath, and filesystem paths extracted from tool result outputs.
207
+ * Deduplicates paths and returns a sorted array. Provides comprehensive path discovery
208
+ * from various locations where Cursor stores workspace information.
209
+ *
210
+ * @param cursorSession - RawCursorRawSession object with workspacePath, metadata, and bubbles
211
+ * @returns Sorted array of unique workspace paths discovered
212
+ */
213
+ extractWorkspacePathsFromCursor(cursorSession) {
214
+ const paths = new Set();
215
+ // Check if raw parser already extracted workspace paths
216
+ if (cursorSession.workspacePath) {
217
+ this.addPathsFromProperty(cursorSession.workspacePath, paths);
218
+ }
219
+ // Extract from metadata if available
220
+ this.extractPathsFromMetadata(cursorSession, paths);
221
+ // Extract from tool command results in bubbles
222
+ this.extractPathsFromToolResults(cursorSession, paths);
223
+ return [...paths].sort();
224
+ }
225
+ /**
226
+ * Simplify tool input parameters based on tool type
227
+ *
228
+ * Filters tool input parameters to keep only essential fields for each tool type,
229
+ * removing verbose metadata and unnecessary properties. Handles common Cursor tools:
230
+ * codebase_search, create_folder, delete_file, delete_folder, read_file, run_terminal_cmd, write_file.
231
+ * Returns complete params for unknown tools. Produces cleaner, more focused tool invocation records.
232
+ *
233
+ * @param toolName - Name of the tool (determines which parameters to keep)
234
+ * @param params - Full parameter object from Cursor tool invocation
235
+ * @returns Filtered parameter object with only essential fields for the tool type
236
+ */
237
+ simplifyToolInput(toolName, params) {
238
+ if (!params)
239
+ return {};
240
+ switch (toolName) {
241
+ case 'codebase_search': {
242
+ // Keep only the query, move codeResults to output
243
+ return {
244
+ query: params.query,
245
+ };
246
+ }
247
+ case 'create_folder': {
248
+ // Keep only the folder path
249
+ return {
250
+ targetFolder: params.targetFolder,
251
+ };
252
+ }
253
+ case 'delete_file':
254
+ // eslint-disable-next-line no-fallthrough
255
+ case 'delete_folder': {
256
+ // Keep only the path
257
+ return {
258
+ targetPath: params.targetPath,
259
+ };
260
+ }
261
+ case 'read_file': {
262
+ // Keep only the target file path
263
+ return {
264
+ targetFile: params.targetFile,
265
+ };
266
+ }
267
+ case 'run_terminal_cmd': {
268
+ // Keep only the command
269
+ return {
270
+ command: params.command,
271
+ };
272
+ }
273
+ case 'write_file': {
274
+ // Keep file path and content
275
+ return {
276
+ content: params.content,
277
+ targetFile: params.targetFile,
278
+ };
279
+ }
280
+ default: {
281
+ // Return all params for unknown tools
282
+ return params;
283
+ }
284
+ }
285
+ }
286
+ /**
287
+ * Simplify tool output based on tool type
288
+ *
289
+ * Extracts essential content from verbose Cursor tool result structures, removing
290
+ * redundant metadata while preserving actionable information. Handles common tools:
291
+ * codebase_search (search results), file operations (success/message), read_file (contents),
292
+ * run_terminal_cmd (output), and others. Returns tool_result wrapper with simplified content.
293
+ * Returns undefined if result is empty.
294
+ *
295
+ * @param toolName - Name of the tool (determines which output fields to extract)
296
+ * @param result - Full result object from Cursor tool execution
297
+ * @returns CleanCursorToolResultBlock with simplified content or undefined if empty
298
+ */
299
+ simplifyToolOutput(toolName, result) {
300
+ if (!result)
301
+ return undefined;
302
+ switch (toolName) {
303
+ case 'codebase_search': {
304
+ // Keep the search results
305
+ return {
306
+ content: result.codeResults || result,
307
+ type: 'tool_result',
308
+ };
309
+ }
310
+ case 'create_folder':
311
+ // eslint-disable-next-line no-fallthrough
312
+ case 'delete_file':
313
+ // eslint-disable-next-line no-fallthrough
314
+ case 'delete_folder':
315
+ case 'write_file': {
316
+ // For file operations, keep simple confirmation
317
+ const message = result.message || result.content?.message || '';
318
+ const success = result.success !== false;
319
+ return {
320
+ content: { message, success },
321
+ type: 'tool_result',
322
+ };
323
+ }
324
+ case 'read_file': {
325
+ // Return the file contents as a string instead of wrapped object
326
+ const contents = result.contents || result.content?.contents || '';
327
+ return {
328
+ content: contents,
329
+ type: 'tool_result',
330
+ };
331
+ }
332
+ case 'run_terminal_cmd': {
333
+ // Extract only the command output
334
+ const output = result.output || result.content?.output || '';
335
+ return {
336
+ content: { output },
337
+ type: 'tool_result',
338
+ };
339
+ }
340
+ default: {
341
+ // Default wrapper for unknown tools
342
+ return {
343
+ content: result,
344
+ type: 'tool_result',
345
+ };
346
+ }
347
+ }
348
+ }
349
+ /**
350
+ * Transform a single Cursor bubble into a Claude-format message
351
+ *
352
+ * Converts Cursor's bubble structure (a turn in conversation) to Claude message format.
353
+ * Maps: ai → assistant message (text → thinking block), user → user message (text → text block).
354
+ * Extracts and includes tool results, code blocks, and timestamp. Returns message with
355
+ * content array (may be empty thinking block if no content).
356
+ *
357
+ * @param bubble - CursorBubble object with type, text, toolResults, codeBlocks, timestamp
358
+ * @returns Message object with type, content array, and ISO timestamp
359
+ */
360
+ transformCursorBubbleToClaudeMessage(bubble) {
361
+ const messageType = bubble.type === 'ai' ? 'assistant' : 'user';
362
+ const content = [];
363
+ // Add main text content
364
+ // For assistant messages: convert to thinking block
365
+ // For user messages: keep as text block
366
+ if (bubble.text) {
367
+ if (messageType === 'assistant') {
368
+ content.push({
369
+ thinking: bubble.text,
370
+ type: 'thinking',
371
+ });
372
+ }
373
+ else {
374
+ content.push({
375
+ text: bubble.text,
376
+ type: 'text',
377
+ });
378
+ }
379
+ }
380
+ // Add tool results as tool_use blocks
381
+ if (bubble.toolResults) {
382
+ const toolBlock = this.extractCursorToolResult(bubble.toolResults);
383
+ if (toolBlock) {
384
+ content.push(toolBlock);
385
+ }
386
+ }
387
+ // Add code blocks as text blocks with language info
388
+ if (bubble.codeBlocks) {
389
+ for (const codeBlock of bubble.codeBlocks) {
390
+ if (codeBlock.content) {
391
+ const languageId = codeBlock.languageId || '';
392
+ content.push({
393
+ text: `\`\`\`${languageId}\n${codeBlock.content}\n\`\`\``,
394
+ type: 'text',
395
+ });
396
+ }
397
+ }
398
+ }
399
+ const { timestamp } = bubble;
400
+ return {
401
+ content: content.length > 0 ? content : [{ thinking: '', type: 'thinking' }],
402
+ timestamp: new Date(timestamp).toISOString(),
403
+ type: messageType,
404
+ };
405
+ }
406
+ /**
407
+ * Transform complete Cursor session to Claude-compatible format
408
+ *
409
+ * Converts all bubbles in a Cursor session to Claude messages, extracting workspace paths
410
+ * from multiple sources (direct property, metadata, tool outputs). Produces normalized
411
+ * session object with messages array, workspace paths, and preserved metadata/timestamps.
412
+ *
413
+ * @param cursorSession - RawCursorRawSession object with bubbles array and metadata
414
+ * @param workspaceHash - Workspace identifier hash to include in output
415
+ * @returns Session object in Claude format with messages and workspace information
416
+ */
417
+ transformCursorToClaudeFormat(cursorSession, workspaceHash) {
418
+ const { bubbles } = cursorSession;
419
+ const messages = bubbles.map((bubble) => this.transformCursorBubbleToClaudeMessage(bubble));
420
+ // Extract workspace paths - check raw parser first, then fallback to extraction
421
+ const workspacePaths = this.extractWorkspacePathsFromCursor(cursorSession);
422
+ return {
423
+ id: cursorSession.id,
424
+ messages,
425
+ metadata: cursorSession.metadata,
426
+ timestamp: cursorSession.timestamp,
427
+ title: cursorSession.title,
428
+ workspaceHash,
429
+ workspacePaths: workspacePaths.length > 0 ? workspacePaths : undefined,
430
+ };
431
+ }
432
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Clean Parser Service Factory
3
+ * Routes IDE-based clean parsing requests to the appropriate clean parser service
4
+ * Supports: Claude Code, Cursor, GitHub Copilot, Codex
5
+ */
6
+ import type { CleanSession } from '../../../core/domain/entities/parser.js';
7
+ import { Agent } from '../../../core/domain/entities/agent.js';
8
+ import { ICleanParserService } from '../../../core/interfaces/parser/i-clean-parser-service.js';
9
+ /**
10
+ * Clean Parser Service Factory
11
+ * Creates and returns appropriate clean parser service for the given IDE
12
+ */
13
+ export declare class CleanParserServiceFactory {
14
+ private static readonly SUPPORTED_IDES;
15
+ /**
16
+ * Create a clean parser service for the specified IDE
17
+ *
18
+ * Factory method that instantiates the appropriate clean parser service
19
+ * based on the provided IDE type. Routes to specialized service classes.
20
+ *
21
+ * @param ide - The IDE type: 'Claude Code', 'Cursor', 'Github Copilot', or 'Codex'
22
+ * @returns The appropriate clean parser service instance
23
+ * @throws Error if IDE is not supported
24
+ */
25
+ static createCleanParserService(ide: Agent): ICleanParserService;
26
+ /**
27
+ * Get list of supported IDEs
28
+ *
29
+ * Returns array of all IDE types that have corresponding clean parser services.
30
+ *
31
+ * @returns Array of supported IDE type strings
32
+ */
33
+ static getSupportedIDEs(): Agent[];
34
+ /**
35
+ * Check if IDE is supported
36
+ *
37
+ * Validates whether the provided IDE string corresponds to a supported IDE.
38
+ *
39
+ * @param ide - IDE name to validate
40
+ * @returns True if IDE is in supported list, false otherwise
41
+ */
42
+ static isSupported(ide: Agent): boolean;
43
+ /**
44
+ * Parse and clean conversations for the specified IDE
45
+ *
46
+ * Creates appropriate service and delegates to its parse method to transform
47
+ * raw session data into clean normalized format. Returns sessions in-memory.
48
+ *
49
+ * @param ide - The IDE type (Claude Code, Cursor, Github Copilot, Codex)
50
+ * @param rawDir - Path to directory containing raw session files
51
+ * @returns Promise resolving to array of clean normalized sessions
52
+ */
53
+ static parseConversations(ide: Agent, rawDir: string): Promise<readonly CleanSession[]>;
54
+ }