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,7 @@
1
+ import type { Hook } from '@oclif/core';
2
+ /**
3
+ * Hook to handle command not found errors
4
+ * Provides helpful error messages when users type invalid commands or subcommands
5
+ */
6
+ declare const hook: Hook<'command_not_found'>;
7
+ export default hook;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Hook to handle command not found errors
3
+ * Provides helpful error messages when users type invalid commands or subcommands
4
+ */
5
+ const hook = async function (options) {
6
+ const { id } = options;
7
+ // Check if it's a cipher-agent subcommand typo
8
+ if (id?.startsWith('cipher-agent:')) {
9
+ const invalidSubcommand = id.replace('cipher-agent:', '');
10
+ this.log();
11
+ this.log(`Unknown cipher-agent command: "${invalidSubcommand}"`);
12
+ this.log();
13
+ this.log('USAGE');
14
+ this.log(' $ brv cipher-agent COMMAND');
15
+ this.log();
16
+ this.log('COMMANDS');
17
+ this.log(' cipher-agent run Run CipherAgent in interactive or single-execution mode');
18
+ this.log(' cipher-agent set-prompt Set custom system prompt for CipherAgent');
19
+ this.log(' cipher-agent show-prompt Show the current CipherAgent system prompt');
20
+ this.log();
21
+ // Exit with error code
22
+ this.exit(1);
23
+ }
24
+ // Default error message for other commands
25
+ this.log();
26
+ this.log(`Command "${id}" not found`);
27
+ this.log();
28
+ this.log('Run "brv --help" to see available commands');
29
+ this.log();
30
+ this.exit(1);
31
+ };
32
+ export default hook;
@@ -0,0 +1,7 @@
1
+ import type { Hook } from '@oclif/core';
2
+ /**
3
+ * Hook to handle errors and provide clean error messages
4
+ * Hides stack traces for user-facing errors
5
+ */
6
+ declare const hook: Hook<'error'>;
7
+ export default hook;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Hook to handle errors and provide clean error messages
3
+ * Hides stack traces for user-facing errors
4
+ */
5
+ const hook = async function (options) {
6
+ const { error } = options;
7
+ // Type guard for Error objects
8
+ if (!(error instanceof Error)) {
9
+ return;
10
+ }
11
+ // Suppress oclif's default error output (stack traces)
12
+ // Type assertion needed to delete dynamic property
13
+ delete error.oclif;
14
+ // Handle validation errors (missing args, invalid flags, etc.)
15
+ if (error.message.includes('Missing') && error.message.includes('required arg')) {
16
+ // Extract the clean error message without stack trace
17
+ const lines = error.message.split('\n');
18
+ const errorLine = lines[0];
19
+ const argLine = lines[1];
20
+ // Use process.stderr.write to avoid oclif formatting (no › prefix)
21
+ process.stderr.write('\n');
22
+ process.stderr.write(errorLine + '\n');
23
+ if (argLine) {
24
+ process.stderr.write(argLine + '\n');
25
+ }
26
+ process.stderr.write('\n');
27
+ process.stderr.write('See more help with --help\n');
28
+ process.stderr.write('\n');
29
+ // Prevent default error handling
30
+ this.exit(2);
31
+ }
32
+ // For user-facing errors (network, auth, etc.), show clean message only
33
+ // Check if error is already formatted with emoji prefix (❌, ⚠️, etc.)
34
+ const isUserFacingError = error.message.startsWith('❌') || error.message.startsWith('⚠️') || error.message.includes('Network error');
35
+ if (isUserFacingError) {
36
+ // Just show the clean error message, no "See more help"
37
+ process.stderr.write('\n');
38
+ process.stderr.write(error.message + '\n');
39
+ process.stderr.write('\n');
40
+ this.exit(1);
41
+ }
42
+ // For other errors (unknown errors), show message + help hint
43
+ process.stderr.write('\n');
44
+ process.stderr.write(error.message + '\n');
45
+ process.stderr.write('\n');
46
+ process.stderr.write('See more help with --help\n');
47
+ process.stderr.write('\n');
48
+ this.exit(1);
49
+ };
50
+ export default hook;
@@ -1,6 +1,72 @@
1
1
  import chalk from 'chalk';
2
2
  import { DOCS_URL } from '../../constants.js';
3
+ /**
4
+ * Validates Node.js version compatibility
5
+ * @returns Error message if incompatible, warning message if untested, null if compatible
6
+ */
7
+ function checkNodeVersion() {
8
+ const nodeVersion = process.version;
9
+ const versionMatch = nodeVersion.match(/^v(\d+)\.(\d+)\.(\d+)/);
10
+ if (!versionMatch) {
11
+ return {
12
+ message: `Unable to determine Node.js version. Current version: ${nodeVersion}`,
13
+ type: 'warning',
14
+ };
15
+ }
16
+ const [, major, minor] = versionMatch;
17
+ const majorVersion = Number.parseInt(major, 10);
18
+ const minorVersion = Number.parseInt(minor, 10);
19
+ // Minimum supported version: Node 18
20
+ if (majorVersion < 18) {
21
+ return {
22
+ message: `Node.js ${majorVersion}.${minorVersion} is not supported.\n` +
23
+ 'ByteRover CLI requires Node.js 18 or higher.\n' +
24
+ `Current version: ${nodeVersion}\n\n` +
25
+ 'Please upgrade Node.js:\n' +
26
+ ' - Using nvm: nvm install 22 && nvm use 22\n' +
27
+ ' - Download from: https://nodejs.org/',
28
+ type: 'error',
29
+ };
30
+ }
31
+ // Recommended versions: Node 18, 20, 22
32
+ // Node 24+ may have compatibility issues with native modules (better-sqlite3, grpc)
33
+ if (majorVersion >= 24) {
34
+ return {
35
+ message: `Node.js ${majorVersion}.${minorVersion} has not been fully tested with ByteRover CLI.\n` +
36
+ `Current version: ${nodeVersion}\n` +
37
+ 'Recommended versions: Node.js 18.x, 20.x, or 22.x (LTS)\n\n' +
38
+ 'Some native dependencies (sqlite, grpc) may not work correctly.\n' +
39
+ 'If you encounter errors, please switch to a recommended version:\n' +
40
+ ' - Using nvm: nvm install 22 && nvm use 22',
41
+ type: 'warning',
42
+ };
43
+ }
44
+ // All checks passed
45
+ return null;
46
+ }
3
47
  const hook = async function (options) {
48
+ // Check Node.js version compatibility first
49
+ const versionCheck = checkNodeVersion();
50
+ if (versionCheck) {
51
+ if (versionCheck.type === 'error') {
52
+ // Critical error - incompatible Node version
53
+ // Use process.stderr to show clean error without stack trace
54
+ process.stderr.write('\n');
55
+ process.stderr.write(chalk.red('❌ Incompatible Node.js version\n\n'));
56
+ process.stderr.write(versionCheck.message);
57
+ process.stderr.write('\n\n');
58
+ // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit
59
+ process.exit(1);
60
+ }
61
+ else if (versionCheck.type === 'warning') {
62
+ // Warning - untested version, but allow to continue
63
+ // Use process.stderr to show clean warning without stack trace
64
+ process.stderr.write('\n');
65
+ process.stderr.write(chalk.yellow('⚠️ Node.js version warning\n\n'));
66
+ process.stderr.write(chalk.yellow(versionCheck.message));
67
+ process.stderr.write('\n\n');
68
+ }
69
+ }
4
70
  // Detect root help commands only (not command-specific help)
5
71
  const isRootHelp = (options.id === undefined && options.argv.length === 0) || // bare `brv`
6
72
  (options.id === '--help' && options.argv.length === 0) || // `brv --help`
@@ -22,7 +88,12 @@ const hook = async function (options) {
22
88
  ' 2. Link your workspace:',
23
89
  ' brv init',
24
90
  '',
25
- 'After setup, run `brv status` to confirm connection and explore commands like `brv retrieve` or `brv complete`.',
91
+ 'After setup, run `brv status` to confirm your connection.',
92
+ '',
93
+ ' Explore commands:',
94
+ ' • `brv curate` - Organize and curate your context tree',
95
+ ' • `brv query` - Search and query your context tree',
96
+ ' • `brv push` - Push your context tree to ByteRover',
26
97
  ].join('\n');
27
98
  const docsLink = `For more information, run 'brv --help', 'brv [command] --help' or visit ${DOCS_URL}`;
28
99
  this.log(`\n${logo}\n\n${onboardingText}\n\n${docsLink}\n\n`);
@@ -0,0 +1,28 @@
1
+ import type { Hook } from '@oclif/core';
2
+ import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
3
+ /**
4
+ * Commands that should skip config version validation.
5
+ * These commands either don't need config or create/recreate it.
6
+ */
7
+ export declare const SKIP_COMMANDS: Set<string>;
8
+ /**
9
+ * Context for hook error handling.
10
+ */
11
+ type HookErrorContext = {
12
+ error: (message: string, options: {
13
+ exit: number;
14
+ }) => void;
15
+ };
16
+ /**
17
+ * Core validation logic extracted for testability.
18
+ * @param commandId - The command being executed
19
+ * @param configStore - The config store to use for reading config
20
+ * @param errorContext - Context with error function to call on version errors
21
+ */
22
+ export declare const validateBrvConfigVersion: (commandId: string, configStore: IProjectConfigStore, errorContext: HookErrorContext) => Promise<void>;
23
+ /**
24
+ * Prerun hook that validates the .brv/config.json version before command execution.
25
+ * Throws an error if the config version is missing or mismatched, prompting users to re-run `brv init`.
26
+ */
27
+ declare const hook: Hook<'prerun'>;
28
+ export default hook;
@@ -0,0 +1,43 @@
1
+ import { BrvConfigVersionError } from '../../core/domain/errors/brv-config-version-error.js';
2
+ import { ProjectConfigStore } from '../../infra/config/file-config-store.js';
3
+ /**
4
+ * Commands that should skip config version validation.
5
+ * These commands either don't need config or create/recreate it.
6
+ */
7
+ export const SKIP_COMMANDS = new Set(['--help', 'help', 'init', 'login', 'logout']);
8
+ /**
9
+ * Core validation logic extracted for testability.
10
+ * @param commandId - The command being executed
11
+ * @param configStore - The config store to use for reading config
12
+ * @param errorContext - Context with error function to call on version errors
13
+ */
14
+ export const validateBrvConfigVersion = async (commandId, configStore, errorContext) => {
15
+ // Skip version check for commands that don't need config
16
+ if (SKIP_COMMANDS.has(commandId)) {
17
+ return;
18
+ }
19
+ try {
20
+ // If config doesn't exist, let the command handle it
21
+ const exists = await configStore.exists();
22
+ if (!exists) {
23
+ return;
24
+ }
25
+ // read() will throw BrvConfigVersionError if version is invalid
26
+ await configStore.read();
27
+ }
28
+ catch (error) {
29
+ if (error instanceof BrvConfigVersionError) {
30
+ errorContext.error(error.message, { exit: 1 });
31
+ }
32
+ // Re-throw other errors (corrupted JSON, etc.)
33
+ throw error;
34
+ }
35
+ };
36
+ /**
37
+ * Prerun hook that validates the .brv/config.json version before command execution.
38
+ * Throws an error if the config version is missing or mismatched, prompting users to re-run `brv init`.
39
+ */
40
+ const hook = async function (options) {
41
+ await validateBrvConfigVersion(options.Command.id, new ProjectConfigStore(), this);
42
+ };
43
+ export default hook;
@@ -0,0 +1,86 @@
1
+ import type { BlobStorageConfig } from '../../core/domain/cipher/blob/types.js';
2
+ import type { FileSystemConfig } from '../../core/domain/cipher/file-system/types.js';
3
+ import type { CipherAgentServices, SessionServices } from '../../core/interfaces/cipher/cipher-services.js';
4
+ /**
5
+ * LLM configuration for CipherAgent
6
+ */
7
+ export interface CipherLLMConfig {
8
+ accessToken: string;
9
+ apiKey?: string;
10
+ blobStorageConfig?: Partial<BlobStorageConfig>;
11
+ fileSystemConfig?: Partial<FileSystemConfig>;
12
+ grpcEndpoint: string;
13
+ httpReferer?: string;
14
+ maxIterations?: number;
15
+ maxTokens?: number;
16
+ model: string;
17
+ openRouterApiKey?: string;
18
+ projectId: string;
19
+ region?: string;
20
+ sessionKey: string;
21
+ siteName?: string;
22
+ temperature?: number;
23
+ topK?: number;
24
+ topP?: number;
25
+ verbose?: boolean;
26
+ }
27
+ /**
28
+ * gRPC configuration for ByteRover LLM service
29
+ */
30
+ export interface ByteRoverGrpcConfig {
31
+ accessToken: string;
32
+ grpcEndpoint: string;
33
+ projectId: string;
34
+ region?: string;
35
+ sessionKey: string;
36
+ spaceId: string;
37
+ teamId: string;
38
+ timeout?: number;
39
+ }
40
+ export type { CipherAgentServices, SessionManagerConfig, SessionServices, } from '../../core/interfaces/cipher/cipher-services.js';
41
+ /**
42
+ * Creates shared services for CipherAgent.
43
+ * These services are singletons shared across all sessions.
44
+ *
45
+ * Following Dexto's pattern: shared services are created once at agent level,
46
+ * while session-specific services (LLM, EventBus) are created per session.
47
+ *
48
+ * @param llmConfig - LLM configuration
49
+ * @returns Initialized shared services
50
+ */
51
+ export declare function createCipherAgentServices(llmConfig: CipherLLMConfig): Promise<CipherAgentServices>;
52
+ /**
53
+ * Creates session-specific services for a ChatSession.
54
+ *
55
+ * Following Dexto's pattern: each session gets its own LLM service and event bus
56
+ * for conversation isolation, while using shared services for tools/prompts.
57
+ *
58
+ * Generator composition order (innermost to outermost):
59
+ * 1. Base generator (ByteRoverContentGenerator or OpenRouterContentGenerator)
60
+ * 2. RetryableContentGenerator - handles transient errors with backoff
61
+ * 3. LoggingContentGenerator - debug logging (if verbose enabled)
62
+ *
63
+ * @param sessionId - Unique session identifier
64
+ * @param sharedServices - Shared services from agent
65
+ * @param grpcConfig - gRPC configuration
66
+ * @param llmConfig - LLM service configuration
67
+ * @param llmConfig.openRouterApiKey - Optional OpenRouter API key for OpenRouter service
68
+ * @param llmConfig.httpReferer - Optional HTTP Referer for OpenRouter rankings
69
+ * @param llmConfig.siteName - Optional site name for OpenRouter rankings
70
+ * @param llmConfig.maxIterations - Maximum iterations for agentic loop
71
+ * @param llmConfig.maxTokens - Maximum output tokens
72
+ * @param llmConfig.model - LLM model identifier
73
+ * @param llmConfig.temperature - Temperature for generation
74
+ * @param llmConfig.verbose - Enable verbose debug output
75
+ * @returns Initialized session services
76
+ */
77
+ export declare function createSessionServices(sessionId: string, sharedServices: CipherAgentServices, grpcConfig: ByteRoverGrpcConfig, llmConfig: {
78
+ httpReferer?: string;
79
+ maxIterations?: number;
80
+ maxTokens?: number;
81
+ model: string;
82
+ openRouterApiKey?: string;
83
+ siteName?: string;
84
+ temperature?: number;
85
+ verbose?: boolean;
86
+ }): SessionServices;
@@ -0,0 +1,212 @@
1
+ import { join } from 'node:path';
2
+ import { createBlobStorage } from './blob/blob-storage-factory.js';
3
+ import { AgentEventBus, SessionEventBus } from './events/event-emitter.js';
4
+ import { FileSystemService } from './file-system/file-system-service.js';
5
+ import { ByteRoverLlmGrpcService } from './grpc/internal-llm-grpc-service.js';
6
+ import { ByteRoverContentGenerator, LoggingContentGenerator, RetryableContentGenerator } from './llm/generators/index.js';
7
+ import { ByteRoverLLMService } from './llm/internal-llm-service.js';
8
+ import { OpenRouterLLMService } from './llm/openrouter-llm-service.js';
9
+ import { DEFAULT_RETRY_POLICY } from './llm/retry/retry-policy.js';
10
+ import { EventBasedLogger } from './logger/event-based-logger.js';
11
+ import { MemoryManager } from './memory/memory-manager.js';
12
+ import { ProcessService } from './process/process-service.js';
13
+ import { BlobHistoryStorage } from './storage/blob-history-storage.js';
14
+ import { SimplePromptFactory } from './system-prompt/simple-prompt-factory.js';
15
+ import { CoreToolScheduler } from './tools/core-tool-scheduler.js';
16
+ import { DEFAULT_POLICY_RULES } from './tools/default-policy-rules.js';
17
+ import { PolicyEngine } from './tools/policy-engine.js';
18
+ import { ToolManager } from './tools/tool-manager.js';
19
+ import { ToolProvider } from './tools/tool-provider.js';
20
+ /**
21
+ * Creates shared services for CipherAgent.
22
+ * These services are singletons shared across all sessions.
23
+ *
24
+ * Following Dexto's pattern: shared services are created once at agent level,
25
+ * while session-specific services (LLM, EventBus) are created per session.
26
+ *
27
+ * @param llmConfig - LLM configuration
28
+ * @returns Initialized shared services
29
+ */
30
+ export async function createCipherAgentServices(llmConfig) {
31
+ // 1. Agent event bus (global)
32
+ const agentEventBus = new AgentEventBus();
33
+ // 2. Logger (depends on event bus)
34
+ const logger = new EventBasedLogger(agentEventBus, 'CipherAgent');
35
+ // 3. File system service (no dependencies)
36
+ const fileSystemService = new FileSystemService(llmConfig.fileSystemConfig);
37
+ await fileSystemService.initialize();
38
+ // 4. Process service (no dependencies)
39
+ // Use the same working directory as FileSystemService to ensure consistency
40
+ const workingDirectory = llmConfig.fileSystemConfig?.workingDirectory ?? process.cwd();
41
+ const processService = new ProcessService({
42
+ allowedCommands: [],
43
+ blockedCommands: [],
44
+ environment: {},
45
+ maxConcurrentProcesses: 5,
46
+ maxOutputBuffer: 1_048_576, // 1MB (1024 * 1024)
47
+ maxTimeout: 600_000, // 10 minutes
48
+ securityLevel: 'permissive', // Permissive mode: relies on working directory confinement
49
+ workingDirectory,
50
+ });
51
+ await processService.initialize();
52
+ // 5. Blob storage (no dependencies)
53
+ // Always uses SQLite for performance and ACID transactions
54
+ const blobStorage = createBlobStorage(llmConfig.blobStorageConfig ?? {
55
+ maxBlobSize: 100 * 1024 * 1024, // 100MB
56
+ maxTotalSize: 1024 * 1024 * 1024, // 1GB
57
+ storageDir: join(workingDirectory, '.brv', 'blobs'),
58
+ });
59
+ await blobStorage.initialize();
60
+ // 6. Memory system (depends on BlobStorage, Logger)
61
+ const memoryLogger = logger.withSource('MemoryManager');
62
+ const memoryManager = new MemoryManager(blobStorage, memoryLogger);
63
+ // 7. Simple prompt factory - SHARED across sessions
64
+ // Created early so it can be used by ToolProvider
65
+ const verbose = llmConfig.verbose ?? false;
66
+ const promptFactory = new SimplePromptFactory(undefined, verbose);
67
+ // 8. Tool system (depends on FileSystemService, ProcessService, MemoryManager, PromptFactory)
68
+ const toolProvider = new ToolProvider({
69
+ fileSystemService,
70
+ memoryManager,
71
+ processService,
72
+ }, promptFactory);
73
+ await toolProvider.initialize();
74
+ // 8. Policy engine with default rules for autonomous execution
75
+ const policyEngine = new PolicyEngine({ defaultDecision: 'ALLOW' });
76
+ policyEngine.addRules(DEFAULT_POLICY_RULES);
77
+ // 9. Tool scheduler (orchestrates policy check → execution)
78
+ const toolScheduler = new CoreToolScheduler(toolProvider, policyEngine, undefined, {
79
+ verbose,
80
+ });
81
+ // 10. Tool manager (with scheduler for policy-based execution)
82
+ const toolManager = new ToolManager(toolProvider, toolScheduler);
83
+ await toolManager.initialize();
84
+ // 11. History storage (depends on BlobStorage) - SHARED across sessions
85
+ const historyStorage = new BlobHistoryStorage(blobStorage);
86
+ // Log successful initialization
87
+ logger.info('CipherAgent services initialized successfully', {
88
+ model: llmConfig.model,
89
+ verbose: llmConfig.verbose,
90
+ workingDirectory,
91
+ });
92
+ return {
93
+ agentEventBus,
94
+ blobStorage,
95
+ fileSystemService,
96
+ historyStorage,
97
+ memoryManager,
98
+ policyEngine,
99
+ processService,
100
+ promptFactory,
101
+ toolManager,
102
+ toolProvider,
103
+ toolScheduler,
104
+ };
105
+ }
106
+ /**
107
+ * Creates session-specific services for a ChatSession.
108
+ *
109
+ * Following Dexto's pattern: each session gets its own LLM service and event bus
110
+ * for conversation isolation, while using shared services for tools/prompts.
111
+ *
112
+ * Generator composition order (innermost to outermost):
113
+ * 1. Base generator (ByteRoverContentGenerator or OpenRouterContentGenerator)
114
+ * 2. RetryableContentGenerator - handles transient errors with backoff
115
+ * 3. LoggingContentGenerator - debug logging (if verbose enabled)
116
+ *
117
+ * @param sessionId - Unique session identifier
118
+ * @param sharedServices - Shared services from agent
119
+ * @param grpcConfig - gRPC configuration
120
+ * @param llmConfig - LLM service configuration
121
+ * @param llmConfig.openRouterApiKey - Optional OpenRouter API key for OpenRouter service
122
+ * @param llmConfig.httpReferer - Optional HTTP Referer for OpenRouter rankings
123
+ * @param llmConfig.siteName - Optional site name for OpenRouter rankings
124
+ * @param llmConfig.maxIterations - Maximum iterations for agentic loop
125
+ * @param llmConfig.maxTokens - Maximum output tokens
126
+ * @param llmConfig.model - LLM model identifier
127
+ * @param llmConfig.temperature - Temperature for generation
128
+ * @param llmConfig.verbose - Enable verbose debug output
129
+ * @returns Initialized session services
130
+ */
131
+ export function createSessionServices(sessionId, sharedServices, grpcConfig, llmConfig) {
132
+ // 1. Create session-specific event bus
133
+ const sessionEventBus = new SessionEventBus();
134
+ // 2. Create session-scoped logger
135
+ const sessionLogger = new EventBasedLogger(sharedServices.agentEventBus, 'LLMService', sessionId);
136
+ // 3. Create LLM service based on configuration
137
+ // Priority: OpenRouter > ByteRover gRPC
138
+ let llmService;
139
+ if (llmConfig.openRouterApiKey) {
140
+ // Use OpenRouter service when OpenRouter API key is provided
141
+ // OpenRouterLLMService still uses old pattern (to be migrated later)
142
+ llmService = new OpenRouterLLMService(sessionId, {
143
+ apiKey: llmConfig.openRouterApiKey,
144
+ httpReferer: llmConfig.httpReferer,
145
+ maxIterations: llmConfig.maxIterations ?? 50,
146
+ maxTokens: llmConfig.maxTokens ?? 8192,
147
+ model: llmConfig.model ?? 'google/gemini-2.5-pro',
148
+ siteName: llmConfig.siteName,
149
+ temperature: llmConfig.temperature ?? 0.7,
150
+ verbose: llmConfig.verbose ?? false,
151
+ }, {
152
+ logger: sessionLogger,
153
+ memoryManager: sharedServices.memoryManager, // SHARED
154
+ sessionEventBus,
155
+ systemPromptManager: sharedServices.promptFactory, // SHARED
156
+ toolManager: sharedServices.toolManager, // SHARED
157
+ });
158
+ }
159
+ else {
160
+ // Use gRPC backend service (default) with new generator pattern
161
+ // Step 1: Create gRPC service
162
+ const grpcService = new ByteRoverLlmGrpcService({
163
+ accessToken: grpcConfig.accessToken,
164
+ grpcEndpoint: grpcConfig.grpcEndpoint,
165
+ projectId: grpcConfig.projectId,
166
+ region: grpcConfig.region,
167
+ sessionKey: grpcConfig.sessionKey,
168
+ spaceId: grpcConfig.spaceId,
169
+ teamId: grpcConfig.teamId,
170
+ timeout: grpcConfig.timeout,
171
+ });
172
+ // Step 2: Create base content generator
173
+ let generator = new ByteRoverContentGenerator(grpcService, {
174
+ maxTokens: llmConfig.maxTokens ?? 8192,
175
+ model: llmConfig.model ?? 'gemini-2.5-pro',
176
+ temperature: llmConfig.temperature ?? 0.7,
177
+ });
178
+ // Step 3: Wrap with retry decorator
179
+ generator = new RetryableContentGenerator(generator, {
180
+ eventBus: sessionEventBus,
181
+ policy: DEFAULT_RETRY_POLICY,
182
+ });
183
+ // Step 4: Wrap with logging decorator (always, for spinner events)
184
+ generator = new LoggingContentGenerator(generator, sessionEventBus, {
185
+ logChunks: llmConfig.verbose,
186
+ logRequests: llmConfig.verbose,
187
+ logResponses: llmConfig.verbose,
188
+ verbose: llmConfig.verbose,
189
+ });
190
+ // Step 5: Create LLM service with composed generator
191
+ llmService = new ByteRoverLLMService(sessionId, generator, {
192
+ maxIterations: llmConfig.maxIterations ?? 50,
193
+ maxTokens: llmConfig.maxTokens ?? 8192,
194
+ model: llmConfig.model ?? 'gemini-2.5-pro',
195
+ temperature: llmConfig.temperature ?? 0.7,
196
+ verbose: llmConfig.verbose ?? false,
197
+ }, {
198
+ historyStorage: sharedServices.historyStorage, // SHARED
199
+ logger: sessionLogger,
200
+ memoryManager: sharedServices.memoryManager, // SHARED
201
+ promptFactory: sharedServices.promptFactory, // SHARED
202
+ sessionEventBus,
203
+ toolManager: sharedServices.toolManager, // SHARED
204
+ });
205
+ }
206
+ // Event forwarding is handled by ChatSession.setupEventForwarding()
207
+ // to ensure proper cleanup when sessions are disposed
208
+ return {
209
+ llmService,
210
+ sessionEventBus,
211
+ };
212
+ }
@@ -0,0 +1,13 @@
1
+ import type { BlobStorageConfig } from '../../../core/domain/cipher/blob/types.js';
2
+ import type { IBlobStorage } from '../../../core/interfaces/cipher/i-blob-storage.js';
3
+ /**
4
+ * Factory function to create blob storage backend.
5
+ * Always uses SQLite for better performance, single file, and ACID transactions.
6
+ *
7
+ * @param config - Blob storage configuration
8
+ * @returns SQLite blob storage implementation
9
+ *
10
+ * @example
11
+ * const storage = createBlobStorage({ storageDir: '.brv/blobs' });
12
+ */
13
+ export declare function createBlobStorage(config?: Partial<BlobStorageConfig>): IBlobStorage;
@@ -0,0 +1,14 @@
1
+ import { SqliteBlobStorage } from './sqlite-blob-storage.js';
2
+ /**
3
+ * Factory function to create blob storage backend.
4
+ * Always uses SQLite for better performance, single file, and ACID transactions.
5
+ *
6
+ * @param config - Blob storage configuration
7
+ * @returns SQLite blob storage implementation
8
+ *
9
+ * @example
10
+ * const storage = createBlobStorage({ storageDir: '.brv/blobs' });
11
+ */
12
+ export function createBlobStorage(config) {
13
+ return new SqliteBlobStorage(config);
14
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Blob storage module
3
+ * Provides persistent storage for binary/large data blobs using SQLite
4
+ */
5
+ export type { BlobMetadata, BlobStats, BlobStorageConfig, StoredBlob } from '../../../core/domain/cipher/blob/types.js';
6
+ export { BlobError, BlobErrorCode } from '../../../core/domain/cipher/errors/blob-error.js';
7
+ export type { IBlobStorage } from '../../../core/interfaces/cipher/i-blob-storage.js';
8
+ export { createBlobStorage } from './blob-storage-factory.js';
9
+ export * as BlobMigrations from './migrations.js';
10
+ export { SqliteBlobStorage } from './sqlite-blob-storage.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Blob storage module
3
+ * Provides persistent storage for binary/large data blobs using SQLite
4
+ */
5
+ // Re-export errors from core
6
+ export { BlobError, BlobErrorCode } from '../../../core/domain/cipher/errors/blob-error.js';
7
+ // Factory (always returns SQLite implementation)
8
+ export { createBlobStorage } from './blob-storage-factory.js';
9
+ // Migration system
10
+ export * as BlobMigrations from './migrations.js';
11
+ // SQLite storage implementation
12
+ export { SqliteBlobStorage } from './sqlite-blob-storage.js';