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,144 @@
1
+ import { ToolName } from '../../../core/domain/cipher/tools/constants.js';
2
+ import { createBashExecTool } from './implementations/bash-exec-tool.js';
3
+ import { createBashOutputTool } from './implementations/bash-output-tool.js';
4
+ import { createCreateKnowledgeTopicTool } from './implementations/create-knowledge-topic-tool.js';
5
+ import { createDeleteMemoryTool } from './implementations/delete-memory-tool.js';
6
+ import { createDetectDomainsTool } from './implementations/detect-domains-tool.js';
7
+ import { createEditFileTool } from './implementations/edit-file-tool.js';
8
+ import { createEditMemoryTool } from './implementations/edit-memory-tool.js';
9
+ import { createFindKnowledgeTopicsTool } from './implementations/find-knowledge-topics-tool.js';
10
+ import { createGlobFilesTool } from './implementations/glob-files-tool.js';
11
+ import { createGrepContentTool } from './implementations/grep-content-tool.js';
12
+ import { createKillProcessTool } from './implementations/kill-process-tool.js';
13
+ import { createListMemoriesTool } from './implementations/list-memories-tool.js';
14
+ import { createReadFileTool } from './implementations/read-file-tool.js';
15
+ import { createReadMemoryTool } from './implementations/read-memory-tool.js';
16
+ import { createSearchHistoryTool } from './implementations/search-history-tool.js';
17
+ import { createWriteFileTool } from './implementations/write-file-tool.js';
18
+ import { createWriteMemoryTool } from './implementations/write-memory-tool.js';
19
+ import { createWriteTodosTool } from './implementations/write-todos-tool.js';
20
+ import { ToolMarker } from './tool-markers.js';
21
+ /**
22
+ * Helper function to safely retrieve a required service.
23
+ * Throws a descriptive error if the service is not available.
24
+ *
25
+ * @param service - The service to retrieve
26
+ * @param serviceName - Name of the service for error messages
27
+ * @returns The service if available
28
+ * @throws Error if service is undefined
29
+ */
30
+ function getRequiredService(service, serviceName) {
31
+ if (!service) {
32
+ throw new Error(`Required service '${serviceName}' is not available. This is a bug.`);
33
+ }
34
+ return service;
35
+ }
36
+ /**
37
+ * Central registry of all tools.
38
+ * Maps tool names to their factory functions and required services.
39
+ *
40
+ * To add a new tool:
41
+ * 1. Add tool name to ToolName constants
42
+ * 2. Create tool implementation file
43
+ * 3. Add entry to this registry
44
+ */
45
+ export const TOOL_REGISTRY = {
46
+ [ToolName.BASH_EXEC]: {
47
+ factory: (services) => createBashExecTool(getRequiredService(services.processService, 'processService')),
48
+ markers: [ToolMarker.Execution],
49
+ requiredServices: ['processService'],
50
+ },
51
+ [ToolName.BASH_OUTPUT]: {
52
+ factory: (services) => createBashOutputTool(getRequiredService(services.processService, 'processService')),
53
+ markers: [ToolMarker.Execution, ToolMarker.Optional],
54
+ requiredServices: ['processService'],
55
+ },
56
+ [ToolName.CREATE_KNOWLEDGE_TOPIC]: {
57
+ factory: () => createCreateKnowledgeTopicTool(),
58
+ markers: [ToolMarker.ContextBuilding],
59
+ outputGuidance: 'create_knowledge_topic',
60
+ requiredServices: [], // Uses DirectoryManager for file operations
61
+ },
62
+ [ToolName.DELETE_MEMORY]: {
63
+ factory: (services) => createDeleteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
64
+ markers: [ToolMarker.ContextBuilding],
65
+ outputGuidance: 'delete_memory',
66
+ requiredServices: ['memoryManager'],
67
+ },
68
+ [ToolName.DETECT_DOMAINS]: {
69
+ factory: () => createDetectDomainsTool(),
70
+ markers: [ToolMarker.ContextBuilding],
71
+ outputGuidance: 'detect_domains',
72
+ requiredServices: [], // No services required (validates LLM-detected domains)
73
+ },
74
+ [ToolName.EDIT_FILE]: {
75
+ factory: (services) => createEditFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
76
+ markers: [ToolMarker.Modification],
77
+ requiredServices: ['fileSystemService'],
78
+ },
79
+ [ToolName.EDIT_MEMORY]: {
80
+ factory: (services) => createEditMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
81
+ markers: [ToolMarker.ContextBuilding],
82
+ outputGuidance: 'edit_memory',
83
+ requiredServices: ['memoryManager'],
84
+ },
85
+ [ToolName.FIND_KNOWLEDGE_TOPICS]: {
86
+ factory: () => createFindKnowledgeTopicsTool(),
87
+ markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
88
+ outputGuidance: 'find_knowledge_topics',
89
+ requiredServices: [], // Uses DirectoryManager for file operations
90
+ },
91
+ [ToolName.GLOB_FILES]: {
92
+ factory: (services) => createGlobFilesTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
93
+ markers: [ToolMarker.Core, ToolMarker.Discovery],
94
+ requiredServices: ['fileSystemService'],
95
+ },
96
+ [ToolName.GREP_CONTENT]: {
97
+ factory: (services) => createGrepContentTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
98
+ markers: [ToolMarker.Core, ToolMarker.Discovery],
99
+ requiredServices: ['fileSystemService'],
100
+ },
101
+ [ToolName.KILL_PROCESS]: {
102
+ factory: (services) => createKillProcessTool(getRequiredService(services.processService, 'processService')),
103
+ markers: [ToolMarker.Execution, ToolMarker.Optional],
104
+ requiredServices: ['processService'],
105
+ },
106
+ [ToolName.LIST_MEMORIES]: {
107
+ factory: (services) => createListMemoriesTool(getRequiredService(services.memoryManager, 'memoryManager')),
108
+ markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
109
+ outputGuidance: 'list_memories',
110
+ requiredServices: ['memoryManager'],
111
+ },
112
+ [ToolName.READ_FILE]: {
113
+ factory: (services) => createReadFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
114
+ markers: [ToolMarker.Core, ToolMarker.Discovery],
115
+ requiredServices: ['fileSystemService'],
116
+ },
117
+ [ToolName.READ_MEMORY]: {
118
+ factory: (services) => createReadMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
119
+ markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
120
+ outputGuidance: 'read_memory',
121
+ requiredServices: ['memoryManager'],
122
+ },
123
+ [ToolName.SEARCH_HISTORY]: {
124
+ factory: (_services) => createSearchHistoryTool(),
125
+ markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
126
+ requiredServices: [], // No services required yet (stub implementation)
127
+ },
128
+ [ToolName.WRITE_FILE]: {
129
+ factory: (services) => createWriteFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
130
+ markers: [ToolMarker.Modification],
131
+ requiredServices: ['fileSystemService'],
132
+ },
133
+ [ToolName.WRITE_MEMORY]: {
134
+ factory: (services) => createWriteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
135
+ markers: [ToolMarker.ContextBuilding],
136
+ outputGuidance: 'write_memory',
137
+ requiredServices: ['memoryManager'],
138
+ },
139
+ [ToolName.WRITE_TODOS]: {
140
+ factory: () => createWriteTodosTool(),
141
+ markers: [ToolMarker.Planning, ToolMarker.Core],
142
+ requiredServices: [], // No services required (stateless tool)
143
+ },
144
+ };
@@ -0,0 +1,10 @@
1
+ import type { ZodSchema } from 'zod';
2
+ import type { JSONSchema7 } from '../../../../core/domain/cipher/tools/types.js';
3
+ /**
4
+ * Convert a Zod schema to JSON Schema v7.
5
+ * Used to expose tool schemas to the LLM.
6
+ *
7
+ * @param zodSchema - Zod schema to convert
8
+ * @returns JSON Schema v7 representation
9
+ */
10
+ export declare function convertZodToJsonSchema(zodSchema: ZodSchema): JSONSchema7;
@@ -0,0 +1,29 @@
1
+ import { zodToJsonSchema } from 'zod-to-json-schema';
2
+ import { getErrorMessage } from '../../../../utils/error-helpers.js';
3
+ /**
4
+ * Convert a Zod schema to JSON Schema v7.
5
+ * Used to expose tool schemas to the LLM.
6
+ *
7
+ * @param zodSchema - Zod schema to convert
8
+ * @returns JSON Schema v7 representation
9
+ */
10
+ export function convertZodToJsonSchema(zodSchema) {
11
+ try {
12
+ // Convert using zod-to-json-schema library
13
+ const jsonSchema = zodToJsonSchema(zodSchema, {
14
+ // Remove $schema field as it's not needed for tool definitions
15
+ $refStrategy: 'none',
16
+ });
17
+ // Cast to JSONSchema7 (zod-to-json-schema returns compatible format)
18
+ return jsonSchema;
19
+ }
20
+ catch (error) {
21
+ // Fallback to basic object schema if conversion fails
22
+ console.warn(`Failed to convert Zod schema to JSON Schema: ${getErrorMessage(error)}`);
23
+ return {
24
+ additionalProperties: false,
25
+ properties: {},
26
+ type: 'object',
27
+ };
28
+ }
29
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Error thrown when ByteRover workspace is not initialized.
3
+ */
4
+ export declare class WorkspaceNotInitializedError extends Error {
5
+ /** The expected workspace directory path */
6
+ readonly expectedPath: string;
7
+ constructor(message: string, expectedPath: string);
8
+ }
9
+ /**
10
+ * Validates that the ByteRover workspace is properly initialized.
11
+ *
12
+ * Checks for the existence of:
13
+ * - `.brv` directory (created by `brv init`)
14
+ * - `.brv/blobs` directory (for blob storage)
15
+ *
16
+ * @param workingDirectory - The working directory to check (defaults to process.cwd())
17
+ * @throws WorkspaceNotInitializedError if workspace is not initialized
18
+ */
19
+ export declare function validateWorkspaceInitialized(workingDirectory?: string): void;
@@ -0,0 +1,37 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Error thrown when ByteRover workspace is not initialized.
5
+ */
6
+ export class WorkspaceNotInitializedError extends Error {
7
+ /** The expected workspace directory path */
8
+ expectedPath;
9
+ constructor(message, expectedPath) {
10
+ super(message);
11
+ this.name = 'WorkspaceNotInitializedError';
12
+ this.expectedPath = expectedPath;
13
+ }
14
+ }
15
+ /**
16
+ * Validates that the ByteRover workspace is properly initialized.
17
+ *
18
+ * Checks for the existence of:
19
+ * - `.brv` directory (created by `brv init`)
20
+ * - `.brv/blobs` directory (for blob storage)
21
+ *
22
+ * @param workingDirectory - The working directory to check (defaults to process.cwd())
23
+ * @throws WorkspaceNotInitializedError if workspace is not initialized
24
+ */
25
+ export function validateWorkspaceInitialized(workingDirectory) {
26
+ const cwd = workingDirectory ?? process.cwd();
27
+ const brvDir = join(cwd, '.brv');
28
+ const blobsDir = join(cwd, '.brv', 'blobs');
29
+ // Check if .brv directory exists
30
+ if (!existsSync(brvDir)) {
31
+ throw new WorkspaceNotInitializedError('Workspace not initialized', brvDir);
32
+ }
33
+ // Check if .brv/blobs directory exists
34
+ if (!existsSync(blobsDir)) {
35
+ throw new WorkspaceNotInitializedError('Blob storage directory not found', blobsDir);
36
+ }
37
+ }
@@ -0,0 +1,14 @@
1
+ import type { ICodingAgentLogParser } from '../../../core/interfaces/cipher/i-coding-agent-log-parser.js';
2
+ import type { CodingAgentLogWatcherOptions, ICodingAgentLogWatcher } from '../../../core/interfaces/cipher/i-coding-agent-log-watcher.js';
3
+ import type { IFileWatcherService } from '../../../core/interfaces/i-file-watcher-service.js';
4
+ export declare class CodingAgentLogWatcher implements ICodingAgentLogWatcher {
5
+ private callback;
6
+ private readonly fileWatcher;
7
+ private readonly parser;
8
+ private watching;
9
+ constructor(fileWatcher: IFileWatcherService, parser: ICodingAgentLogParser);
10
+ isWatching(): boolean;
11
+ start(options: CodingAgentLogWatcherOptions): Promise<void>;
12
+ stop(): Promise<void>;
13
+ private handleFileEvent;
14
+ }
@@ -0,0 +1,55 @@
1
+ export class CodingAgentLogWatcher {
2
+ callback;
3
+ fileWatcher;
4
+ parser;
5
+ watching;
6
+ constructor(fileWatcher, parser) {
7
+ this.watching = false;
8
+ this.fileWatcher = fileWatcher;
9
+ this.parser = parser;
10
+ }
11
+ isWatching() {
12
+ return this.watching;
13
+ }
14
+ async start(options) {
15
+ if (this.watching) {
16
+ throw new Error('Already watching. Stop the watcher before starting again.');
17
+ }
18
+ this.callback = options.onCleanSession;
19
+ this.watching = true;
20
+ this.fileWatcher.setFileEventHandler(async (event) => {
21
+ await this.handleFileEvent(event, options.codingAgentInfo.name);
22
+ });
23
+ await this.fileWatcher.start([options.codingAgentInfo.chatLogPath]);
24
+ }
25
+ async stop() {
26
+ if (!this.watching) {
27
+ return;
28
+ }
29
+ await this.fileWatcher.stop();
30
+ this.callback = undefined;
31
+ this.watching = false;
32
+ }
33
+ async handleFileEvent(event, codingAgent) {
34
+ try {
35
+ if (event.type !== 'add' && event.type !== 'change') {
36
+ return;
37
+ }
38
+ const sessions = await this.parser.parse(event.path, codingAgent);
39
+ if (this.callback !== undefined) {
40
+ for (const session of sessions) {
41
+ try {
42
+ // eslint-disable-next-line no-await-in-loop
43
+ await this.callback(session);
44
+ }
45
+ catch (error) {
46
+ console.error(`[CodingAgentLogWatcher] Error in session callback: ${error}`);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.error(`[CodingAgentLogWatcher] Error processing file ${event.path}: ${error}`);
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,21 @@
1
+ import type { ContextFileContent } from '../../core/interfaces/i-context-file-reader.js';
2
+ import { CogitPushContext } from '../../core/domain/entities/cogit-push-context.js';
3
+ /**
4
+ * Parameters for mapping context files to push contexts.
5
+ */
6
+ export type MapToPushContextsParams = {
7
+ /** Files to be added (new files) */
8
+ addedFiles: ContextFileContent[];
9
+ /** Paths of files to be deleted (only path needed, files no longer exist) */
10
+ deletedPaths: string[];
11
+ /** Files to be edited (modified files) */
12
+ modifiedFiles: ContextFileContent[];
13
+ };
14
+ /**
15
+ * Maps context file contents to CogitPushContext instances for the CoGit API.
16
+ * Converts file reader output to the format expected by the push service.
17
+ *
18
+ * @param params - The mapping parameters containing files to process
19
+ * @returns Array of CogitPushContext instances ready for the push API
20
+ */
21
+ export declare const mapToPushContexts: (params: MapToPushContextsParams) => CogitPushContext[];
@@ -0,0 +1,32 @@
1
+ import { CogitPushContext } from '../../core/domain/entities/cogit-push-context.js';
2
+ /**
3
+ * Maps context file contents to CogitPushContext instances for the CoGit API.
4
+ * Converts file reader output to the format expected by the push service.
5
+ *
6
+ * @param params - The mapping parameters containing files to process
7
+ * @returns Array of CogitPushContext instances ready for the push API
8
+ */
9
+ export const mapToPushContexts = (params) => {
10
+ const addedContextFiles = params.addedFiles.map((file) => new CogitPushContext({
11
+ content: file.content,
12
+ operation: 'add',
13
+ path: `/${file.path}`,
14
+ tags: [],
15
+ title: file.title,
16
+ }));
17
+ const editedContextFiles = params.modifiedFiles.map((file) => new CogitPushContext({
18
+ content: file.content,
19
+ operation: 'edit',
20
+ path: `/${file.path}`,
21
+ tags: [],
22
+ title: file.title,
23
+ }));
24
+ const deletedContextFiles = params.deletedPaths.map((path) => new CogitPushContext({
25
+ content: '',
26
+ operation: 'delete',
27
+ path: `/${path}`,
28
+ tags: [],
29
+ title: '',
30
+ }));
31
+ return [...addedContextFiles, ...editedContextFiles, ...deletedContextFiles];
32
+ };
@@ -0,0 +1,15 @@
1
+ import type { ICogitPullService, PullParams } from '../../core/interfaces/i-cogit-pull-service.js';
2
+ import { CogitSnapshot } from '../../core/domain/entities/cogit-snapshot.js';
3
+ export type HttpCogitPullServiceConfig = {
4
+ apiBaseUrl: string;
5
+ timeout?: number;
6
+ };
7
+ /**
8
+ * HTTP implementation of ICogitPullService for ByteRover CoGit service.
9
+ * Fetches context tree snapshots from a CoGit repository.
10
+ */
11
+ export declare class HttpCogitPullService implements ICogitPullService {
12
+ private readonly config;
13
+ constructor(config: HttpCogitPullServiceConfig);
14
+ pull(params: PullParams): Promise<CogitSnapshot>;
15
+ }
@@ -0,0 +1,30 @@
1
+ import { CogitSnapshot } from '../../core/domain/entities/cogit-snapshot.js';
2
+ import { AuthenticatedHttpClient } from '../http/authenticated-http-client.js';
3
+ /**
4
+ * HTTP implementation of ICogitPullService for ByteRover CoGit service.
5
+ * Fetches context tree snapshots from a CoGit repository.
6
+ */
7
+ export class HttpCogitPullService {
8
+ config;
9
+ constructor(config) {
10
+ this.config = {
11
+ ...config,
12
+ timeout: config.timeout ?? 30_000,
13
+ };
14
+ }
15
+ async pull(params) {
16
+ const baseUrl = `${this.config.apiBaseUrl}/organizations/${params.teamId}/projects/${params.spaceId}/git/snapshot`;
17
+ const url = `${baseUrl}?branch=${encodeURIComponent(params.branch)}`;
18
+ const httpClient = new AuthenticatedHttpClient(params.accessToken, params.sessionKey);
19
+ try {
20
+ const response = await httpClient.get(url, {
21
+ timeout: this.config.timeout,
22
+ });
23
+ return CogitSnapshot.fromJson(response);
24
+ }
25
+ catch (error) {
26
+ const message = error instanceof Error ? error.message : 'Unknown error';
27
+ throw new Error(`Failed to pull from CoGit: ${message}`);
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,17 @@
1
+ import type { ICogitPushService, PushParams } from '../../core/interfaces/i-cogit-push-service.js';
2
+ import { CogitPushResponse } from '../../core/domain/entities/cogit-push-response.js';
3
+ export type HttpCogitPushServiceConfig = {
4
+ apiBaseUrl: string;
5
+ timeout?: number;
6
+ };
7
+ /**
8
+ * HTTP implementation of ICogitPushService for ByteRover CoGit service.
9
+ * Implements a two-request SHA flow to handle concurrent updates.
10
+ */
11
+ export declare class HttpCogitPushService implements ICogitPushService {
12
+ private readonly config;
13
+ constructor(config: HttpCogitPushServiceConfig);
14
+ push(params: PushParams): Promise<CogitPushResponse>;
15
+ private extractShaFromError;
16
+ private makeRequest;
17
+ }
@@ -0,0 +1,104 @@
1
+ /* eslint-disable camelcase */
2
+ import axios from 'axios';
3
+ import { CogitPushResponse } from '../../core/domain/entities/cogit-push-response.js';
4
+ import { getErrorMessage } from '../../utils/error-helpers.js';
5
+ /**
6
+ * Extracts the current SHA from an error response details field.
7
+ * Error format: "...Expected SHA 'xxx' but current SHA is 'yyy'..."
8
+ * @param details The error details string
9
+ * @returns The extracted SHA or undefined if not found
10
+ */
11
+ const extractShaFromErrorDetails = (details) => {
12
+ const shaMatch = /SHA is '([a-f0-9]+)'/i.exec(details);
13
+ return shaMatch?.[1];
14
+ };
15
+ /**
16
+ * HTTP implementation of ICogitPushService for ByteRover CoGit service.
17
+ * Implements a two-request SHA flow to handle concurrent updates.
18
+ */
19
+ export class HttpCogitPushService {
20
+ config;
21
+ constructor(config) {
22
+ this.config = {
23
+ ...config,
24
+ timeout: config.timeout ?? 30_000,
25
+ };
26
+ }
27
+ async push(params) {
28
+ const url = `${this.config.apiBaseUrl}/organizations/${params.teamId}/projects/${params.spaceId}/commits`;
29
+ const memories = params.contexts.map((context) => ({
30
+ content: context.content,
31
+ operation: context.operation,
32
+ path: context.path,
33
+ tags: [...context.tags],
34
+ title: context.title,
35
+ }));
36
+ // First request: Send with empty current_sha
37
+ // This is a temporary workaround to let CoGit determine the current SHA.
38
+ // In the future, we need to generate the SHA from the CLI.
39
+ try {
40
+ const response = await this.makeRequest({
41
+ accessToken: params.accessToken,
42
+ branch: params.branch,
43
+ currentSha: '',
44
+ memories,
45
+ sessionKey: params.sessionKey,
46
+ url,
47
+ });
48
+ return response;
49
+ }
50
+ catch (error) {
51
+ // Try to extract SHA from error response
52
+ const sha = this.extractShaFromError(error);
53
+ if (!sha) {
54
+ throw new Error(`Failed to push to CoGit: ${getErrorMessage(error)}`);
55
+ }
56
+ // Second request: Retry with extracted SHA
57
+ try {
58
+ const response = await this.makeRequest({
59
+ accessToken: params.accessToken,
60
+ branch: params.branch,
61
+ currentSha: sha,
62
+ memories,
63
+ sessionKey: params.sessionKey,
64
+ url,
65
+ });
66
+ return response;
67
+ }
68
+ catch (retryError) {
69
+ throw new Error(`Failed to push to CoGit: ${getErrorMessage(retryError)}`);
70
+ }
71
+ }
72
+ }
73
+ extractShaFromError(error) {
74
+ // Check if error has response data with details
75
+ if (error &&
76
+ typeof error === 'object' &&
77
+ 'response' in error &&
78
+ error.response &&
79
+ typeof error.response === 'object' &&
80
+ 'data' in error.response) {
81
+ const errorResponse = error.response.data;
82
+ if (errorResponse.details) {
83
+ return extractShaFromErrorDetails(errorResponse.details);
84
+ }
85
+ }
86
+ return undefined;
87
+ }
88
+ async makeRequest(params) {
89
+ const requestBody = {
90
+ branch: params.branch,
91
+ current_sha: params.currentSha,
92
+ memories: params.memories,
93
+ };
94
+ // Directly use axios here because of the work around to get current SHA from CoGit's error response
95
+ const response = await axios.post(params.url, requestBody, {
96
+ headers: {
97
+ Authorization: `Bearer ${params.accessToken}`,
98
+ 'x-byterover-session-id': params.sessionKey,
99
+ },
100
+ timeout: this.config.timeout,
101
+ });
102
+ return CogitPushResponse.fromJson(response.data);
103
+ }
104
+ }
@@ -3,6 +3,8 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
4
  import { BRV_DIR, PROJECT_CONFIG_FILE } from '../../constants.js';
5
5
  import { BrvConfig } from '../../core/domain/entities/brv-config.js';
6
+ import { BrvConfigVersionError } from '../../core/domain/errors/brv-config-version-error.js';
7
+ import { getErrorMessage } from '../../utils/error-helpers.js';
6
8
  /**
7
9
  * File-based implementation of IProjectConfigStore.
8
10
  * Stores configuration in .brv/config.json in the project directory.
@@ -23,21 +25,25 @@ export class ProjectConfigStore {
23
25
  return BrvConfig.fromJson(json);
24
26
  }
25
27
  catch (error) {
26
- throw new Error(`Failed to read config from ${configPath}: ${error.message}`);
28
+ if (error instanceof BrvConfigVersionError) {
29
+ throw error;
30
+ }
31
+ throw new Error(`Failed to read config from ${configPath}: ${getErrorMessage(error)}`);
27
32
  }
28
33
  }
29
34
  async write(config, directory) {
30
35
  const brDirPath = this.getBrvDirPath(directory);
31
36
  const configPath = this.getConfigPath(directory);
32
37
  try {
33
- // Create .brv directory if it doesn't exist
38
+ // Create .brv directory and blobs subdirectory if they don't exist
34
39
  await mkdir(brDirPath, { recursive: true });
40
+ await mkdir(join(brDirPath, 'blobs'), { recursive: true });
35
41
  // Write config.json
36
42
  const content = JSON.stringify(config.toJson(), undefined, 2);
37
43
  await writeFile(configPath, content, 'utf8');
38
44
  }
39
45
  catch (error) {
40
- throw new Error(`Failed to write config to ${configPath}: ${error.message}`);
46
+ throw new Error(`Failed to write config to ${configPath}: ${getErrorMessage(error)}`);
41
47
  }
42
48
  }
43
49
  /**
@@ -0,0 +1,14 @@
1
+ import type { ContextFileContent, IContextFileReader } from '../../core/interfaces/i-context-file-reader.js';
2
+ export type FileContextFileReaderConfig = {
3
+ baseDirectory?: string;
4
+ };
5
+ /**
6
+ * File-based implementation of IContextFileReader.
7
+ * Reads context.md files from the context tree and extracts their metadata.
8
+ */
9
+ export declare class FileContextFileReader implements IContextFileReader {
10
+ private readonly config;
11
+ constructor(config?: FileContextFileReaderConfig);
12
+ read(relativePath: string, directory?: string): Promise<ContextFileContent | undefined>;
13
+ readMany(relativePaths: string[], directory?: string): Promise<ContextFileContent[]>;
14
+ }
@@ -0,0 +1,46 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { BRV_DIR, CONTEXT_TREE_DIR } from '../../constants.js';
4
+ /**
5
+ * Extracts the title from the first markdown heading in the content.
6
+ * @param content - The file content
7
+ * @param fallbackTitle - The title to use if no heading is found
8
+ * @returns The extracted title or fallback
9
+ */
10
+ const extractTitle = (content, fallbackTitle) => {
11
+ // Match the first line that starts with "# " (level 1 heading)
12
+ const match = /^# (.+)$/m.exec(content);
13
+ return match ? match[1].trim() : fallbackTitle;
14
+ };
15
+ /**
16
+ * File-based implementation of IContextFileReader.
17
+ * Reads context.md files from the context tree and extracts their metadata.
18
+ */
19
+ export class FileContextFileReader {
20
+ config;
21
+ constructor(config = {}) {
22
+ this.config = config;
23
+ }
24
+ async read(relativePath, directory) {
25
+ const baseDir = directory ?? this.config.baseDirectory ?? process.cwd();
26
+ const fullPath = join(baseDir, BRV_DIR, CONTEXT_TREE_DIR, relativePath);
27
+ try {
28
+ const content = await readFile(fullPath, 'utf8');
29
+ const title = extractTitle(content, relativePath);
30
+ return {
31
+ content,
32
+ path: relativePath,
33
+ title,
34
+ };
35
+ }
36
+ catch {
37
+ // File doesn't exist or can't be read
38
+ return undefined;
39
+ }
40
+ }
41
+ async readMany(relativePaths, directory) {
42
+ const results = await Promise.all(relativePaths.map((path) => this.read(path, directory)));
43
+ // Filter out undefined results (files that couldn't be read)
44
+ return results.filter((result) => result !== undefined);
45
+ }
46
+ }
@@ -0,0 +1,14 @@
1
+ import type { IContextTreeService } from '../../core/interfaces/i-context-tree-service.js';
2
+ export type ContextTreeServiceConfig = {
3
+ baseDirectory?: string;
4
+ };
5
+ /**
6
+ * File-based implementation of IContextTreeService.
7
+ * Provides operations for managing the context tree structure.
8
+ */
9
+ export declare class FileContextTreeService implements IContextTreeService {
10
+ private readonly config;
11
+ constructor(config?: ContextTreeServiceConfig);
12
+ exists(directory?: string): Promise<boolean>;
13
+ initialize(directory?: string): Promise<string>;
14
+ }