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,80 @@
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 { ClaudeCleanService } from './clean-claude-service.js';
7
+ import { CodexCleanService } from './clean-codex-service.js';
8
+ import { CopilotCleanService } from './clean-copilot-service.js';
9
+ import { CursorCleanService } from './clean-cursor-service.js';
10
+ /**
11
+ * Clean Parser Service Factory
12
+ * Creates and returns appropriate clean parser service for the given IDE
13
+ */
14
+ export class CleanParserServiceFactory {
15
+ static SUPPORTED_IDES = ['Claude Code', 'Cursor', 'Github Copilot', 'Codex'];
16
+ /**
17
+ * Create a clean parser service for the specified IDE
18
+ *
19
+ * Factory method that instantiates the appropriate clean parser service
20
+ * based on the provided IDE type. Routes to specialized service classes.
21
+ *
22
+ * @param ide - The IDE type: 'Claude Code', 'Cursor', 'Github Copilot', or 'Codex'
23
+ * @returns The appropriate clean parser service instance
24
+ * @throws Error if IDE is not supported
25
+ */
26
+ static createCleanParserService(ide) {
27
+ switch (ide) {
28
+ case 'Claude Code': {
29
+ return new ClaudeCleanService(ide);
30
+ }
31
+ case 'Codex': {
32
+ return new CodexCleanService(ide);
33
+ }
34
+ case 'Cursor': {
35
+ return new CursorCleanService(ide);
36
+ }
37
+ case 'Github Copilot': {
38
+ return new CopilotCleanService(ide);
39
+ }
40
+ default: {
41
+ throw new Error(`Unsupported IDE: ${ide}. Supported IDEs are: claude, cursor, copilot, codex`);
42
+ }
43
+ }
44
+ }
45
+ /**
46
+ * Get list of supported IDEs
47
+ *
48
+ * Returns array of all IDE types that have corresponding clean parser services.
49
+ *
50
+ * @returns Array of supported IDE type strings
51
+ */
52
+ static getSupportedIDEs() {
53
+ return [...this.SUPPORTED_IDES];
54
+ }
55
+ /**
56
+ * Check if IDE is supported
57
+ *
58
+ * Validates whether the provided IDE string corresponds to a supported IDE.
59
+ *
60
+ * @param ide - IDE name to validate
61
+ * @returns True if IDE is in supported list, false otherwise
62
+ */
63
+ static isSupported(ide) {
64
+ return this.getSupportedIDEs().includes(ide);
65
+ }
66
+ /**
67
+ * Parse and clean conversations for the specified IDE
68
+ *
69
+ * Creates appropriate service and delegates to its parse method to transform
70
+ * raw session data into clean normalized format. Returns sessions in-memory.
71
+ *
72
+ * @param ide - The IDE type (Claude Code, Cursor, Github Copilot, Codex)
73
+ * @param rawDir - Path to directory containing raw session files
74
+ * @returns Promise resolving to array of clean normalized sessions
75
+ */
76
+ static async parseConversations(ide, rawDir) {
77
+ const service = this.createCleanParserService(ide);
78
+ return service.parse(rawDir);
79
+ }
80
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Shared transformation utilities for all clean parsers
3
+ * Provides centralized session normalization implementation
4
+ */
5
+ import { CleanMessage, CleanSession, ContentBlock, SessionType } from '../../../core/domain/entities/parser.js';
6
+ import { ISessionNormalizer } from '../../../core/interfaces/parser/i-session-normalizer.js';
7
+ /**
8
+ * Session Normalizer implementation
9
+ * Provides shared normalization utilities for all clean parsers
10
+ */
11
+ export declare class SessionNormalizer implements ISessionNormalizer {
12
+ /**
13
+ * Add turn_id to each message based on timestamp order
14
+ *
15
+ * Assigns sequential turn_id values (1-based) to all messages to track
16
+ * their order in the conversation.
17
+ *
18
+ * @param messages - Array of messages to assign turn IDs to
19
+ * @returns Array of messages with turn_id property added
20
+ */
21
+ addTurnIds(messages: CleanMessage[]): CleanMessage[];
22
+ /**
23
+ * Combine tool_use and tool_result messages
24
+ *
25
+ * Merges separate tool_use and tool_result content blocks into single blocks
26
+ * with embedded output. Removes standalone tool_result blocks after combining.
27
+ * Two-pass algorithm: first collect results by ID, then merge with tool_use blocks.
28
+ *
29
+ * @param messages - Array of clean messages to process
30
+ * @returns Array of messages with combined tool execution blocks
31
+ */
32
+ combineToolResults(messages: CleanMessage[]): CleanMessage[];
33
+ /**
34
+ * Extract unique workspace paths from session messages and metadata
35
+ *
36
+ * Collects workspace paths from multiple sources: existing paths, message cwd properties,
37
+ * and metadata cwd property. Removes duplicates and sorts alphabetically.
38
+ *
39
+ * @param messages - Array of clean messages to extract paths from
40
+ * @param metadata - Session metadata object (may contain cwd property)
41
+ * @param existingPaths - Optional pre-existing paths to include
42
+ * @returns Sorted array of unique workspace paths
43
+ */
44
+ extractWorkspacePaths(messages: CleanMessage[], metadata: unknown, existingPaths?: string[]): string[];
45
+ /**
46
+ * Normalize message content to always be an array of content blocks
47
+ *
48
+ * Converts various content formats (string, array, object) into a standardized
49
+ * array of ContentBlock objects for consistent processing.
50
+ *
51
+ * @param content - Content to normalize (can be string, array of blocks, object, or any value)
52
+ * @returns Array of normalized ContentBlock objects
53
+ */
54
+ normalizeContent(content: unknown): ContentBlock[];
55
+ /**
56
+ * Normalize a single content block
57
+ *
58
+ * Converts a block into a properly typed ContentBlock. Infers the block type
59
+ * from its properties if not explicitly specified (text, thinking, tool_use, tool_result).
60
+ *
61
+ * @param block - Block to normalize (string, object, or any value)
62
+ * @returns Normalized ContentBlock with proper type inference
63
+ */
64
+ normalizeContentBlock(block: unknown): ContentBlock;
65
+ /**
66
+ * Normalize Claude session format
67
+ *
68
+ * Transforms raw session data into standardized CleanSession format. Normalizes message
69
+ * content to content blocks, combines tool calls with results, assigns turn IDs,
70
+ * and extracts workspace paths. Handles sessions from Claude, Copilot, Cursor, and Codex.
71
+ *
72
+ * @param session - Raw session object with messages and metadata
73
+ * @param sessionType - Type of session (Claude, Copilot, Cursor, Codex)
74
+ * @returns Normalized CleanSession with standardized format
75
+ */
76
+ normalizeSession(session: Record<string, unknown>, sessionType?: SessionType): CleanSession;
77
+ }
78
+ export declare const sessionNormalizer: SessionNormalizer;
79
+ export declare function normalizeClaudeSession(session: Record<string, unknown>, sessionType?: SessionType): CleanSession;
80
+ export declare function normalizeContent(content: unknown): ContentBlock[];
81
+ export declare function normalizeContentBlock(block: unknown): ContentBlock;
82
+ export declare function combineToolResults(messages: CleanMessage[]): CleanMessage[];
83
+ export declare function addTurnIds(messages: CleanMessage[]): CleanMessage[];
84
+ export declare function extractWorkspacePaths(messages: CleanMessage[], metadata: unknown, existingPaths?: string[]): string[];
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Shared transformation utilities for all clean parsers
3
+ * Provides centralized session normalization implementation
4
+ */
5
+ /**
6
+ * Session Normalizer implementation
7
+ * Provides shared normalization utilities for all clean parsers
8
+ */
9
+ export class SessionNormalizer {
10
+ /**
11
+ * Add turn_id to each message based on timestamp order
12
+ *
13
+ * Assigns sequential turn_id values (1-based) to all messages to track
14
+ * their order in the conversation.
15
+ *
16
+ * @param messages - Array of messages to assign turn IDs to
17
+ * @returns Array of messages with turn_id property added
18
+ */
19
+ addTurnIds(messages) {
20
+ return messages.map((msg, index) => ({
21
+ ...msg,
22
+ // eslint-disable-next-line camelcase
23
+ turn_id: index + 1,
24
+ }));
25
+ }
26
+ /**
27
+ * Combine tool_use and tool_result messages
28
+ *
29
+ * Merges separate tool_use and tool_result content blocks into single blocks
30
+ * with embedded output. Removes standalone tool_result blocks after combining.
31
+ * Two-pass algorithm: first collect results by ID, then merge with tool_use blocks.
32
+ *
33
+ * @param messages - Array of clean messages to process
34
+ * @returns Array of messages with combined tool execution blocks
35
+ */
36
+ combineToolResults(messages) {
37
+ const combined = [];
38
+ const toolResults = {};
39
+ // First pass: collect tool results by tool_use_id
40
+ for (const msg of messages) {
41
+ for (const block of msg.content) {
42
+ if (block.type === 'tool_result') {
43
+ const toolBlock = block;
44
+ toolResults[toolBlock.tool_use_id] = toolBlock;
45
+ }
46
+ }
47
+ }
48
+ // Second pass: combine tool_use with results
49
+ for (const msg of messages) {
50
+ const combinedContent = [];
51
+ for (const block of msg.content) {
52
+ if (block.type === 'tool_use') {
53
+ const toolBlock = block;
54
+ if (toolBlock.id && toolResults[toolBlock.id]) {
55
+ // Attach result to tool_use, preserving tool_use_id
56
+ const result = toolResults[toolBlock.id];
57
+ const resultData = { ...result };
58
+ delete resultData.tool_use_id;
59
+ combinedContent.push({
60
+ ...toolBlock,
61
+ output: resultData,
62
+ // eslint-disable-next-line camelcase
63
+ tool_use_id: toolBlock.id,
64
+ });
65
+ }
66
+ else {
67
+ combinedContent.push(block);
68
+ }
69
+ }
70
+ else if (block.type !== 'tool_result') {
71
+ // Skip tool_result blocks (they're now merged)
72
+ combinedContent.push(block);
73
+ }
74
+ }
75
+ if (combinedContent.length > 0) {
76
+ combined.push({
77
+ ...msg,
78
+ content: combinedContent,
79
+ });
80
+ }
81
+ }
82
+ return combined;
83
+ }
84
+ /**
85
+ * Extract unique workspace paths from session messages and metadata
86
+ *
87
+ * Collects workspace paths from multiple sources: existing paths, message cwd properties,
88
+ * and metadata cwd property. Removes duplicates and sorts alphabetically.
89
+ *
90
+ * @param messages - Array of clean messages to extract paths from
91
+ * @param metadata - Session metadata object (may contain cwd property)
92
+ * @param existingPaths - Optional pre-existing paths to include
93
+ * @returns Sorted array of unique workspace paths
94
+ */
95
+ extractWorkspacePaths(messages, metadata, existingPaths) {
96
+ const paths = new Set();
97
+ // Start with existing paths if provided
98
+ if (existingPaths && Array.isArray(existingPaths)) {
99
+ for (const p of existingPaths) {
100
+ if (p && typeof p === 'string') {
101
+ paths.add(p);
102
+ }
103
+ }
104
+ }
105
+ // Extract from messages
106
+ for (const msg of messages) {
107
+ const { cwd } = msg;
108
+ if (cwd && typeof cwd === 'string') {
109
+ paths.add(cwd);
110
+ }
111
+ }
112
+ // Extract from metadata
113
+ if (typeof metadata === 'object' && metadata !== null) {
114
+ const metaObj = metadata;
115
+ if (metaObj.cwd && typeof metaObj.cwd === 'string') {
116
+ paths.add(metaObj.cwd);
117
+ }
118
+ }
119
+ return [...paths].sort();
120
+ }
121
+ /**
122
+ * Normalize message content to always be an array of content blocks
123
+ *
124
+ * Converts various content formats (string, array, object) into a standardized
125
+ * array of ContentBlock objects for consistent processing.
126
+ *
127
+ * @param content - Content to normalize (can be string, array of blocks, object, or any value)
128
+ * @returns Array of normalized ContentBlock objects
129
+ */
130
+ normalizeContent(content) {
131
+ if (Array.isArray(content)) {
132
+ return content.map((block) => this.normalizeContentBlock(block));
133
+ }
134
+ if (typeof content === 'string') {
135
+ return [
136
+ {
137
+ text: content,
138
+ type: 'text',
139
+ },
140
+ ];
141
+ }
142
+ if (typeof content === 'object' && content !== null) {
143
+ return [this.normalizeContentBlock(content)];
144
+ }
145
+ return [];
146
+ }
147
+ /**
148
+ * Normalize a single content block
149
+ *
150
+ * Converts a block into a properly typed ContentBlock. Infers the block type
151
+ * from its properties if not explicitly specified (text, thinking, tool_use, tool_result).
152
+ *
153
+ * @param block - Block to normalize (string, object, or any value)
154
+ * @returns Normalized ContentBlock with proper type inference
155
+ */
156
+ normalizeContentBlock(block) {
157
+ if (typeof block === 'string') {
158
+ return {
159
+ text: block,
160
+ type: 'text',
161
+ };
162
+ }
163
+ if (typeof block !== 'object' || block === null) {
164
+ return { text: String(block), type: 'text' };
165
+ }
166
+ const blockObj = block;
167
+ const normalized = { ...blockObj };
168
+ // Remove redundant 'signature' property
169
+ delete normalized.signature;
170
+ // Ensure proper type for content blocks
171
+ if (!normalized.type) {
172
+ if ('text' in normalized) {
173
+ normalized.type = 'text';
174
+ }
175
+ else if ('thinking' in normalized) {
176
+ normalized.type = 'thinking';
177
+ }
178
+ else if ('name' in normalized && 'input' in normalized) {
179
+ normalized.type = 'tool_use';
180
+ }
181
+ else if ('tool_use_id' in normalized) {
182
+ normalized.type = 'tool_result';
183
+ }
184
+ else {
185
+ normalized.type = 'text';
186
+ }
187
+ }
188
+ return normalized;
189
+ }
190
+ /**
191
+ * Normalize Claude session format
192
+ *
193
+ * Transforms raw session data into standardized CleanSession format. Normalizes message
194
+ * content to content blocks, combines tool calls with results, assigns turn IDs,
195
+ * and extracts workspace paths. Handles sessions from Claude, Copilot, Cursor, and Codex.
196
+ *
197
+ * @param session - Raw session object with messages and metadata
198
+ * @param sessionType - Type of session (Claude, Copilot, Cursor, Codex)
199
+ * @returns Normalized CleanSession with standardized format
200
+ */
201
+ normalizeSession(session, sessionType = 'Claude') {
202
+ // Normalize messages
203
+ const rawMessages = session.messages || [];
204
+ let normalizedMessages = rawMessages.map((rawMsg) => {
205
+ const msg = rawMsg;
206
+ const msgType = msg.type || 'user';
207
+ const timestamp = msg.timestamp || new Date().toISOString();
208
+ // Normalize content to array format
209
+ const contentArray = this.normalizeContent(msg.content);
210
+ // Set default type for content blocks based on message type
211
+ const processedContent = contentArray.map((block) => {
212
+ if (msgType === 'user' && !block.type) {
213
+ return { ...block, type: 'text' };
214
+ }
215
+ if (msgType === 'assistant' && !block.type) {
216
+ return { ...block, type: 'thinking' };
217
+ }
218
+ return block;
219
+ });
220
+ const normalizedMsg = {
221
+ content: processedContent,
222
+ timestamp,
223
+ type: msgType,
224
+ };
225
+ // Copy over other properties except content, type, and timestamp
226
+ for (const [key, value] of Object.entries(msg)) {
227
+ if (key !== 'content' && key !== 'type' && key !== 'timestamp' && value !== undefined) {
228
+ ;
229
+ normalizedMsg[key] = value;
230
+ }
231
+ }
232
+ return normalizedMsg;
233
+ });
234
+ // Combine tool_use and tool_result messages
235
+ normalizedMessages = this.combineToolResults(normalizedMessages);
236
+ // Add turn_id based on timestamp order
237
+ normalizedMessages = this.addTurnIds(normalizedMessages);
238
+ // Extract unique workspace paths - preserve existing ones if already set
239
+ const existingPaths = session.workspacePaths || undefined;
240
+ const workspacePaths = this.extractWorkspacePaths(normalizedMessages, session.metadata, existingPaths);
241
+ // Return normalized session
242
+ return {
243
+ id: session.id || '',
244
+ messages: normalizedMessages,
245
+ metadata: session.metadata,
246
+ timestamp: session.timestamp || Date.now(),
247
+ title: session.title || '',
248
+ type: sessionType,
249
+ workspacePaths: workspacePaths.length > 0 ? workspacePaths : [],
250
+ };
251
+ }
252
+ }
253
+ // Export singleton instance for convenience
254
+ export const sessionNormalizer = new SessionNormalizer();
255
+ // Re-export standalone functions for backward compatibility
256
+ export function normalizeClaudeSession(session, sessionType = 'Claude') {
257
+ return sessionNormalizer.normalizeSession(session, sessionType);
258
+ }
259
+ export function normalizeContent(content) {
260
+ return sessionNormalizer.normalizeContent(content);
261
+ }
262
+ export function normalizeContentBlock(block) {
263
+ return sessionNormalizer.normalizeContentBlock(block);
264
+ }
265
+ export function combineToolResults(messages) {
266
+ return sessionNormalizer.combineToolResults(messages);
267
+ }
268
+ export function addTurnIds(messages) {
269
+ return sessionNormalizer.addTurnIds(messages);
270
+ }
271
+ export function extractWorkspacePaths(messages, metadata, existingPaths) {
272
+ return sessionNormalizer.extractWorkspacePaths(messages, metadata, existingPaths);
273
+ }
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Claude Code Raw Service
3
+ * Consolidates ClaudeCodeParser + ClaudeRawParser
4
+ * Parses JSONL transcript files from ~/.claude/projects/
5
+ */
6
+ import { Agent } from '../../../core/domain/entities/agent.js';
7
+ import { IRawParserService } from '../../../core/interfaces/parser/i-raw-parser-service.js';
8
+ /**
9
+ * Claude Raw Service - Wraps parser and handles file I/O and output management
10
+ */
11
+ export declare class ClaudeRawService implements IRawParserService {
12
+ private ide;
13
+ /**
14
+ * Initialize Claude Raw Service
15
+ *
16
+ * @param ide - The IDE type (Claude Code)
17
+ */
18
+ constructor(ide: Agent);
19
+ /**
20
+ * Main entry point - Parse Claude Code sessions from a custom directory
21
+ *
22
+ * Parses all JSONL transcript files from a custom Claude projects directory,
23
+ * extracts session information, and writes normalized JSON files to output directory.
24
+ * Organizes output by Claude project folder name. Returns success status.
25
+ *
26
+ * @param customDir - Path to directory containing Claude Code session files
27
+ * @param outputDir - Optional output directory (defaults to process.cwd()/.brv/logs/{ide}/raw)
28
+ * @returns Promise resolving to true if parsing succeeded, false otherwise
29
+ */
30
+ parse(customDir: string, outputDir?: string): Promise<boolean>;
31
+ /**
32
+ * Calculate aggregate session metadata from transcript entries
33
+ *
34
+ * Aggregates token usage (input, output, cache), counts message types, extracts workspace,
35
+ * workspace path, and timestamps. Returns comprehensive metadata about the session including
36
+ * duration, token costs, and message counts for analysis and reporting.
37
+ *
38
+ * @param entries - Array of transcript entries from JSONL file
39
+ * @param messages - Parsed messages array (for count verification)
40
+ * @param logPath - Log file path (used to extract workspace information)
41
+ * @returns RawClaudeSessionMetadata object with aggregated statistics
42
+ */
43
+ private calculateMetadata;
44
+ /**
45
+ * Convert Claude Code transcript entries to normalized messages
46
+ *
47
+ * Transforms raw JSONL transcript entries (user, assistant, system) into standardized
48
+ * RawClaudeRawMessage objects with preserved content, timestamps, and token counts.
49
+ * Filters out invalid entries without content.
50
+ *
51
+ * @param entries - Array of RawClaudeTranscriptEntry objects from JSONL file
52
+ * @returns Array of normalized RawClaudeRawMessage objects
53
+ */
54
+ private convertToMessages;
55
+ /**
56
+ * Create normalized message from transcript entry
57
+ *
58
+ * Converts a single transcript entry (user or assistant) into a normalized message.
59
+ * Extracts content blocks, preserving array structure for multi-block content but
60
+ * converting single text blocks to plain strings for backward compatibility.
61
+ * Includes token counts if available and preserves cwd if present.
62
+ *
63
+ * @param entry - Transcript entry with message content
64
+ * @param type - Message type: 'user' or 'assistant'
65
+ * @returns Normalized RawClaudeRawMessage object
66
+ * @throws Error if message field is missing
67
+ */
68
+ private createMessageFromEntry;
69
+ /**
70
+ * Create or get subdirectory within output directory
71
+ *
72
+ * Creates a subdirectory within the output directory if it doesn't exist.
73
+ * Uses recursive mode to create parent directories as needed.
74
+ *
75
+ * @param outputDir - Base output directory path
76
+ * @param subdirName - Name of subdirectory to create
77
+ * @returns Full path to the created or existing subdirectory
78
+ */
79
+ private createSubdirectory;
80
+ /**
81
+ * Create system message from transcript entry
82
+ *
83
+ * Converts a system-type transcript entry into a normalized message object.
84
+ * System messages typically contain metadata or initial instructions.
85
+ * Preserves cwd if present in the entry.
86
+ *
87
+ * @param entry - Transcript entry with type='system'
88
+ * @returns Normalized RawClaudeRawMessage with type='system'
89
+ */
90
+ private createSystemMessage;
91
+ /**
92
+ * Extract and normalize content blocks from message
93
+ *
94
+ * Handles multiple content formats: null/undefined (empty array), strings (wrapped as text block),
95
+ * arrays of blocks/strings (normalized to ContentBlock array), objects with type (treated as block),
96
+ * and other objects (stringified as text). Produces consistent ContentBlock array output.
97
+ *
98
+ * @param content - Raw message content in various formats
99
+ * @returns Array of normalized ContentBlock objects
100
+ */
101
+ private extractContentBlocks;
102
+ /**
103
+ * Extract session ID from Claude Code log file path
104
+ *
105
+ * Parses the filename from the log path to extract the session ID.
106
+ * Claude Code session IDs are typically UUIDs in the JSONL filename.
107
+ * Removes the .jsonl extension to get the session ID.
108
+ *
109
+ * @param logPath - Path to Claude Code session log file
110
+ * @returns Session ID extracted from the filename
111
+ */
112
+ private extractSessionId;
113
+ /**
114
+ * Extract and sort session start and end timestamps
115
+ *
116
+ * Collects timestamps from transcript entries, filters out empty values,
117
+ * sorts them chronologically, and returns first (startedAt) and last (endedAt).
118
+ * Returns default current timestamp if no valid timestamps found.
119
+ *
120
+ * @param entries - Array of transcript entries with optional timestamp fields
121
+ * @returns RawClaudeTimestamps object with startedAt and optional endedAt ISO timestamp strings
122
+ */
123
+ private extractTimestamps;
124
+ /**
125
+ * Extract session title from first user message
126
+ *
127
+ * Uses the first line of the first user message as the session title.
128
+ * Truncates to TITLE_MAX_LENGTH (100 chars) and appends "..." if truncated.
129
+ * Returns default title if no user messages found or first message is not text.
130
+ *
131
+ * @param messages - Array of parsed session messages
132
+ * @returns Session title string (max 100 characters)
133
+ */
134
+ private extractTitle;
135
+ /**
136
+ * Extract workspace information from Claude Code log file path
137
+ *
138
+ * Parses the log path to extract workspace information. Claude Code stores projects
139
+ * in ~/.claude/projects/-path-to-workspace format where slashes are replaced with dashes.
140
+ * Extracts and reconstructs the original workspace path and repository name.
141
+ * Returns default path object if extraction fails.
142
+ *
143
+ * @param logPath - Claude Code session log file path
144
+ * @returns RawClaudeWorkspaceMetadata with workspace path and optional repository name/url
145
+ */
146
+ private extractWorkspace;
147
+ /**
148
+ * Get the output directory path for raw parser results
149
+ *
150
+ * Returns the standardized output directory path for storing raw parsed sessions.
151
+ * Directory is relative to current working directory under .brv/logs/{ide}/raw
152
+ *
153
+ * @param ide - IDE agent type (used as directory component)
154
+ * @param override - Optional custom output directory (overrides default)
155
+ * @returns Full path to raw output directory
156
+ */
157
+ private getOutputDir;
158
+ /**
159
+ * Parse all Claude Code session logs in a directory
160
+ *
161
+ * Finds all JSONL files in the directory (excluding combined files), parses them in parallel,
162
+ * and returns array of successfully parsed sessions sorted by start time.
163
+ * Collects and reports any parse errors without failing completely.
164
+ *
165
+ * @param dirPath - Path to directory containing JSONL session files
166
+ * @returns Promise resolving to array of parsed RawClaudeRawSession objects
167
+ * @throws Error if directory cannot be read
168
+ */
169
+ private parseSessionDirectory;
170
+ /**
171
+ * Parse a single Claude Code session log file
172
+ *
173
+ * Validates log file format, reads JSONL content, parses each line as a transcript entry,
174
+ * converts entries to messages, calculates session metadata, and extracts session title.
175
+ * Throws detailed error if log file is invalid or unparseable.
176
+ *
177
+ * @param logPath - Absolute path to Claude Code session JSONL file
178
+ * @returns Promise resolving to parsed RawClaudeRawSession object
179
+ * @throws Error if file is invalid or cannot be parsed
180
+ */
181
+ private parseSessionLog;
182
+ /**
183
+ * Validate Claude Code log file format and existence
184
+ *
185
+ * Checks three validation criteria:
186
+ * 1. Path contains /.claude/projects/ directory marker
187
+ * 2. File has .jsonl extension
188
+ * 3. File exists on filesystem
189
+ * Returns false silently if any check fails.
190
+ *
191
+ * @param logPath - Path to file to validate
192
+ * @returns Promise resolving to true if file is valid Claude Code log file, false otherwise
193
+ */
194
+ private validateLogFile;
195
+ }