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,115 @@
1
+ import { Command, Flags, ux } from '@oclif/core';
2
+ import { getCurrentConfig } from '../config/environment.js';
3
+ import { DEFAULT_BRANCH } from '../constants.js';
4
+ import { ExitCode, ExitError, exitWithCode } from '../infra/cipher/exit-codes.js';
5
+ import { WorkspaceNotInitializedError } from '../infra/cipher/validation/workspace-validator.js';
6
+ import { HttpCogitPullService } from '../infra/cogit/http-cogit-pull-service.js';
7
+ import { ProjectConfigStore } from '../infra/config/file-config-store.js';
8
+ import { FileContextTreeSnapshotService } from '../infra/context-tree/file-context-tree-snapshot-service.js';
9
+ import { FileContextTreeWriterService } from '../infra/context-tree/file-context-tree-writer-service.js';
10
+ import { KeychainTokenStore } from '../infra/storage/keychain-token-store.js';
11
+ import { MixpanelTrackingService } from '../infra/tracking/mixpanel-tracking-service.js';
12
+ export default class Pull extends Command {
13
+ static description = 'Pull context tree from ByteRover memory storage';
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %>',
16
+ '<%= config.bin %> <%= command.id %> --branch develop',
17
+ '<%= config.bin %> <%= command.id %> -b feature-auth',
18
+ ];
19
+ static flags = {
20
+ branch: Flags.string({
21
+ char: 'b',
22
+ default: DEFAULT_BRANCH,
23
+ description: 'ByteRover branch name (not Git branch)',
24
+ }),
25
+ };
26
+ async catch(error) {
27
+ if (error instanceof ExitError) {
28
+ return;
29
+ }
30
+ if (error.oclif?.exit !== undefined) {
31
+ return;
32
+ }
33
+ throw error;
34
+ }
35
+ async checkLocalChanges(contextTreeSnapshotService) {
36
+ const changes = await contextTreeSnapshotService.getChanges();
37
+ return changes.added.length > 0 || changes.modified.length > 0 || changes.deleted.length > 0;
38
+ }
39
+ async checkProjectInit(projectConfigStore) {
40
+ const projectConfig = await projectConfigStore.read();
41
+ if (projectConfig === undefined) {
42
+ throw new WorkspaceNotInitializedError('Project not initialized. Please run "brv init" to select your team and workspace.', '.brv');
43
+ }
44
+ return projectConfig;
45
+ }
46
+ createServices() {
47
+ const envConfig = getCurrentConfig();
48
+ const tokenStore = new KeychainTokenStore();
49
+ const trackingService = new MixpanelTrackingService(tokenStore);
50
+ const contextTreeSnapshotService = new FileContextTreeSnapshotService();
51
+ return {
52
+ cogitPullService: new HttpCogitPullService({
53
+ apiBaseUrl: envConfig.cogitApiBaseUrl,
54
+ }),
55
+ contextTreeSnapshotService,
56
+ contextTreeWriterService: new FileContextTreeWriterService({ snapshotService: contextTreeSnapshotService }),
57
+ projectConfigStore: new ProjectConfigStore(),
58
+ tokenStore,
59
+ trackingService,
60
+ };
61
+ }
62
+ async run() {
63
+ const { flags } = await this.parse(Pull);
64
+ try {
65
+ const { cogitPullService, contextTreeSnapshotService, contextTreeWriterService, projectConfigStore, tokenStore, trackingService, } = this.createServices();
66
+ await trackingService.track('mem:pull');
67
+ const token = await this.validateAuth(tokenStore);
68
+ const projectConfig = await this.checkProjectInit(projectConfigStore);
69
+ // Check for local changes
70
+ ux.action.start('Checking for local Context Tree changes');
71
+ const hasLocalChanges = await this.checkLocalChanges(contextTreeSnapshotService);
72
+ ux.action.stop();
73
+ if (hasLocalChanges) {
74
+ exitWithCode(ExitCode.VALIDATION_ERROR, 'You have local changes that have not been pushed. Run "brv push" first.');
75
+ }
76
+ // Pull from CoGit
77
+ this.log('Pulling from ByteRover...');
78
+ const snapshot = await cogitPullService.pull({
79
+ accessToken: token.accessToken,
80
+ branch: flags.branch,
81
+ sessionKey: token.sessionKey,
82
+ spaceId: projectConfig.spaceId,
83
+ teamId: projectConfig.teamId,
84
+ });
85
+ // Sync files to local context tree
86
+ ux.action.start('Syncing context files');
87
+ const syncResult = await contextTreeWriterService.sync({ files: snapshot.files });
88
+ ux.action.stop();
89
+ // Update snapshot ONLY after successful sync
90
+ await contextTreeSnapshotService.saveSnapshot();
91
+ // Success message
92
+ this.log('\n✓ Successfully pulled context tree from ByteRover memory storage!');
93
+ this.log(` Branch: ${flags.branch}`);
94
+ this.log(` Commit: ${snapshot.commitSha.slice(0, 7)}`);
95
+ this.log(` Added: ${syncResult.added.length}, Edited: ${syncResult.edited.length}, Deleted: ${syncResult.deleted.length}`);
96
+ }
97
+ catch (error) {
98
+ if (error instanceof WorkspaceNotInitializedError) {
99
+ exitWithCode(ExitCode.VALIDATION_ERROR, 'Project not initialized. Please run "brv init" to select your team and workspace.');
100
+ }
101
+ const message = error instanceof Error ? error.message : 'Pull failed';
102
+ exitWithCode(ExitCode.RUNTIME_ERROR, `Failed to pull: ${message}`);
103
+ }
104
+ }
105
+ async validateAuth(tokenStore) {
106
+ const token = await tokenStore.load();
107
+ if (token === undefined) {
108
+ this.error('Not authenticated. Run "brv login" first.');
109
+ }
110
+ if (!token.isValid()) {
111
+ this.error('Authentication token expired. Run "brv login" again.');
112
+ }
113
+ return token;
114
+ }
115
+ }
@@ -1,12 +1,11 @@
1
1
  import { Command } from '@oclif/core';
2
2
  import type { AuthToken } from '../core/domain/entities/auth-token.js';
3
3
  import type { BrvConfig } from '../core/domain/entities/brv-config.js';
4
- import type { PresignedUrl } from '../core/domain/entities/presigned-url.js';
5
- import type { PresignedUrlsResponse } from '../core/domain/entities/presigned-urls-response.js';
6
- import type { IMemoryStorageService } from '../core/interfaces/i-memory-storage-service.js';
7
- import type { IPlaybookStore } from '../core/interfaces/i-playbook-store.js';
4
+ import type { ICogitPushService } from '../core/interfaces/i-cogit-push-service.js';
5
+ import type { IContextFileReader } from '../core/interfaces/i-context-file-reader.js';
8
6
  import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
9
7
  import type { ITokenStore } from '../core/interfaces/i-token-store.js';
8
+ import { IContextTreeSnapshotService } from '../core/interfaces/i-context-tree-snapshot-service.js';
10
9
  import { ITrackingService } from '../core/interfaces/i-tracking-service.js';
11
10
  export default class Push extends Command {
12
11
  static description: string;
@@ -15,21 +14,22 @@ export default class Push extends Command {
15
14
  branch: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
15
  yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
16
  };
17
+ protected buildSpaceUrl(webAppUrl: string, teamName: string, spaceName: string): string;
18
+ catch(error: Error & {
19
+ oclif?: {
20
+ exit: number;
21
+ };
22
+ }): Promise<void>;
18
23
  protected checkProjectInit(projectConfigStore: IProjectConfigStore): Promise<BrvConfig>;
19
- protected cleanUpLocalFiles(playbookStore: IPlaybookStore): Promise<void>;
20
- protected confirmPush(projectConfig: BrvConfig, branch: string, fileCount: number): Promise<boolean>;
21
- protected confirmUpload(memoryService: IMemoryStorageService, token: AuthToken, projectConfig: BrvConfig, requestId: string): Promise<void>;
24
+ protected confirmPush(projectConfig: BrvConfig, branch: string): Promise<boolean>;
22
25
  protected createServices(): {
23
- memoryService: IMemoryStorageService;
24
- playbookStore: IPlaybookStore;
26
+ cogitPushService: ICogitPushService;
27
+ contextFileReader: IContextFileReader;
28
+ contextTreeSnapshotService: IContextTreeSnapshotService;
25
29
  projectConfigStore: IProjectConfigStore;
26
30
  tokenStore: ITokenStore;
27
31
  trackingService: ITrackingService;
28
32
  };
29
- protected getPresignedUrls(memoryService: IMemoryStorageService, token: AuthToken, projectConfig: BrvConfig): Promise<PresignedUrlsResponse>;
30
- protected loadPlaybookContent(playbookStore: IPlaybookStore): Promise<string>;
31
33
  run(): Promise<void>;
32
- protected uploadFiles(memoryService: IMemoryStorageService, presignedUrls: ReadonlyArray<PresignedUrl>, playbookContent: string): Promise<void>;
33
34
  protected validateAuth(tokenStore: ITokenStore): Promise<AuthToken>;
34
- protected verifyPlaybookExists(playbookStore: IPlaybookStore): Promise<void>;
35
35
  }
@@ -1,16 +1,18 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import { Command, Flags, ux } from '@oclif/core';
3
- import { join } from 'node:path';
4
3
  import { getCurrentConfig } from '../config/environment.js';
5
- import { ACE_DIR, BRV_DIR, BULLETS_DIR, DEFAULT_BRANCH, DELTAS_DIR, EXECUTOR_OUTPUTS_DIR, PLAYBOOK_FILE, REFLECTIONS_DIR, } from '../constants.js';
6
- import { FilePlaybookStore } from '../infra/ace/file-playbook-store.js';
4
+ import { DEFAULT_BRANCH } from '../constants.js';
5
+ import { ExitCode, ExitError, exitWithCode } from '../infra/cipher/exit-codes.js';
6
+ import { WorkspaceNotInitializedError } from '../infra/cipher/validation/workspace-validator.js';
7
+ import { mapToPushContexts } from '../infra/cogit/context-tree-to-push-context-mapper.js';
8
+ import { HttpCogitPushService } from '../infra/cogit/http-cogit-push-service.js';
7
9
  import { ProjectConfigStore } from '../infra/config/file-config-store.js';
8
- import { HttpMemoryStorageService } from '../infra/memory/http-memory-storage-service.js';
10
+ import { FileContextFileReader } from '../infra/context-tree/file-context-file-reader.js';
11
+ import { FileContextTreeSnapshotService } from '../infra/context-tree/file-context-tree-snapshot-service.js';
9
12
  import { KeychainTokenStore } from '../infra/storage/keychain-token-store.js';
10
13
  import { MixpanelTrackingService } from '../infra/tracking/mixpanel-tracking-service.js';
11
- import { clearDirectory } from '../utils/file-helpers.js';
12
14
  export default class Push extends Command {
13
- static description = 'Push playbook to ByteRover memory storage and clean up local ACE files';
15
+ static description = 'Push context tree to ByteRover memory storage';
14
16
  static examples = [
15
17
  '<%= config.bin %> <%= command.id %>',
16
18
  '<%= config.bin %> <%= command.id %> --branch develop',
@@ -29,138 +31,122 @@ export default class Push extends Command {
29
31
  description: 'Skip confirmation prompt',
30
32
  }),
31
33
  };
34
+ buildSpaceUrl(webAppUrl, teamName, spaceName) {
35
+ return `${webAppUrl}/${teamName}/${spaceName}`;
36
+ }
37
+ // Override catch to prevent oclif from logging errors that were already displayed
38
+ async catch(error) {
39
+ // Check if error is ExitError (message already displayed by exitWithCode)
40
+ if (error instanceof ExitError) {
41
+ return;
42
+ }
43
+ // Backwards compatibility: also check oclif.exit property
44
+ if (error.oclif?.exit !== undefined) {
45
+ // Error already displayed by exitWithCode, silently exit
46
+ return;
47
+ }
48
+ // For other errors, re-throw to let oclif handle them
49
+ throw error;
50
+ }
32
51
  async checkProjectInit(projectConfigStore) {
33
52
  const projectConfig = await projectConfigStore.read();
34
53
  if (projectConfig === undefined) {
35
- this.error('Project not initialized. Run "brv init" first.');
54
+ throw new WorkspaceNotInitializedError('Project not initialized. Please run "brv init" to select your team and workspace.', '.brv');
36
55
  }
37
56
  return projectConfig;
38
57
  }
39
- async cleanUpLocalFiles(playbookStore) {
40
- this.log('\nCleaning up local files...');
41
- // Clear playbook content and bullet files
42
- ux.action.start(' Clearing playbook and bullet files');
43
- await playbookStore.clear();
44
- ux.action.stop('✓');
45
- // Clean executor outputs
46
- const baseDir = process.cwd();
47
- const aceDir = join(baseDir, BRV_DIR, ACE_DIR);
48
- const executorOutputsDir = join(aceDir, EXECUTOR_OUTPUTS_DIR);
49
- const reflectionsDir = join(aceDir, REFLECTIONS_DIR);
50
- const deltasDir = join(aceDir, DELTAS_DIR);
51
- ux.action.start(' Cleaning executor outputs');
52
- const executorCount = await clearDirectory(executorOutputsDir);
53
- ux.action.stop(`✓ (${executorCount} files removed)`);
54
- // Clean reflections
55
- ux.action.start(' Cleaning reflections');
56
- const reflectionCount = await clearDirectory(reflectionsDir);
57
- ux.action.stop(`✓ (${reflectionCount} files removed)`);
58
- // Clean deltas
59
- ux.action.start(' Cleaning deltas');
60
- const deltaCount = await clearDirectory(deltasDir);
61
- ux.action.stop(`✓ (${deltaCount} files removed)`);
62
- }
63
- async confirmPush(projectConfig, branch, fileCount) {
58
+ async confirmPush(projectConfig, branch) {
64
59
  this.log('\nYou are about to push to ByteRover memory storage:');
65
60
  this.log(` Space: ${projectConfig.spaceName}`);
66
61
  this.log(` Branch: ${branch}`);
67
- this.log(` Files to upload: ${fileCount}`);
68
- this.log('\nAfter successful push, these local files will be cleaned up:');
69
- this.log(' - Playbook content');
70
- this.log(` - Bullet files (${BRV_DIR}/${ACE_DIR}/${BULLETS_DIR}/)`);
71
- this.log(` - Executor outputs (${BRV_DIR}/${ACE_DIR}/${EXECUTOR_OUTPUTS_DIR}/)`);
72
- this.log(` - Reflections (${BRV_DIR}/${ACE_DIR}/${REFLECTIONS_DIR}/)`);
73
- this.log(` - Deltas (${BRV_DIR}/${ACE_DIR}/${DELTAS_DIR}/)`);
74
62
  return confirm({
75
63
  default: false,
76
- message: 'Push to ByteRover and clean up local files?',
64
+ message: 'Push to ByteRover?',
77
65
  });
78
66
  }
79
- async confirmUpload(memoryService, token, projectConfig, requestId) {
80
- ux.action.start('Confirming upload');
81
- await memoryService.confirmUpload({
82
- accessToken: token.accessToken,
83
- requestId,
84
- sessionKey: token.sessionKey,
85
- spaceId: projectConfig.spaceId,
86
- teamId: projectConfig.teamId,
87
- });
88
- ux.action.stop('✓');
89
- }
90
67
  createServices() {
91
68
  const envConfig = getCurrentConfig();
92
69
  const tokenStore = new KeychainTokenStore();
93
70
  const trackingService = new MixpanelTrackingService(tokenStore);
94
71
  return {
95
- memoryService: new HttpMemoryStorageService({
72
+ cogitPushService: new HttpCogitPushService({
96
73
  apiBaseUrl: envConfig.cogitApiBaseUrl,
97
74
  }),
98
- playbookStore: new FilePlaybookStore(),
75
+ contextFileReader: new FileContextFileReader(),
76
+ contextTreeSnapshotService: new FileContextTreeSnapshotService(),
99
77
  projectConfigStore: new ProjectConfigStore(),
100
78
  tokenStore,
101
79
  trackingService,
102
80
  };
103
81
  }
104
- async getPresignedUrls(memoryService, token, projectConfig) {
105
- const { flags } = await this.parse(Push);
106
- ux.action.start('Requesting upload URLs');
107
- const response = await memoryService.getPresignedUrls({
108
- accessToken: token.accessToken,
109
- branch: flags.branch,
110
- fileNames: [`${PLAYBOOK_FILE}`],
111
- sessionKey: token.sessionKey,
112
- spaceId: projectConfig.spaceId,
113
- teamId: projectConfig.teamId,
114
- });
115
- ux.action.stop();
116
- return response;
117
- }
118
- async loadPlaybookContent(playbookStore) {
119
- ux.action.start('Loading playbook');
120
- const playbook = await playbookStore.load();
121
- if (playbook === undefined) {
122
- this.error('Failed to load playbook');
123
- }
124
- const playbookContent = playbook.dumps();
125
- ux.action.stop();
126
- return playbookContent;
127
- }
128
82
  async run() {
129
83
  const { flags } = await this.parse(Push);
130
84
  try {
131
- const { memoryService, playbookStore, projectConfigStore, tokenStore, trackingService } = this.createServices();
85
+ const { cogitPushService, contextFileReader, contextTreeSnapshotService, projectConfigStore, tokenStore, trackingService, } = this.createServices();
132
86
  await trackingService.track('mem:push');
133
87
  const token = await this.validateAuth(tokenStore);
134
88
  const projectConfig = await this.checkProjectInit(projectConfigStore);
135
- await this.verifyPlaybookExists(playbookStore);
89
+ // Check for changes
90
+ ux.action.start('Checking for Context Tree changes');
91
+ const contextTreeChanges = await contextTreeSnapshotService.getChanges();
92
+ ux.action.stop();
93
+ if (contextTreeChanges.added.length === 0 &&
94
+ contextTreeChanges.modified.length === 0 &&
95
+ contextTreeChanges.deleted.length === 0) {
96
+ this.log('No context changes to push.');
97
+ return;
98
+ }
136
99
  // Prompt for confirmation unless --yes flag is provided
137
100
  if (!flags.yes) {
138
- const confirmed = await this.confirmPush(projectConfig, flags.branch, 1);
101
+ const confirmed = await this.confirmPush(projectConfig, flags.branch);
139
102
  if (!confirmed) {
140
- this.log('Push cancelled. No files were uploaded or cleaned.');
103
+ this.log('Push cancelled.');
141
104
  return;
142
105
  }
143
106
  }
144
- const response = await this.getPresignedUrls(memoryService, token, projectConfig);
145
- const playbookContent = await this.loadPlaybookContent(playbookStore);
146
- await this.uploadFiles(memoryService, response.presignedUrls, playbookContent);
147
- await this.confirmUpload(memoryService, token, projectConfig, response.requestId);
148
- await this.cleanUpLocalFiles(playbookStore);
107
+ // Read and prepare files
108
+ ux.action.start('Reading context files');
109
+ const [addedFiles, modifiedFiles] = await Promise.all([
110
+ contextFileReader.readMany(contextTreeChanges.added),
111
+ contextFileReader.readMany(contextTreeChanges.modified),
112
+ ]);
113
+ ux.action.stop();
114
+ const pushContexts = mapToPushContexts({
115
+ addedFiles,
116
+ deletedPaths: contextTreeChanges.deleted,
117
+ modifiedFiles,
118
+ });
119
+ if (pushContexts.length === 0) {
120
+ this.log('\nNo valid context files to push.');
121
+ return;
122
+ }
123
+ // Push to CoGit (with two-request SHA flow)
124
+ this.log('Pushing to ByteRover...');
125
+ await cogitPushService.push({
126
+ accessToken: token.accessToken,
127
+ branch: flags.branch,
128
+ contexts: pushContexts,
129
+ sessionKey: token.sessionKey,
130
+ spaceId: projectConfig.spaceId,
131
+ teamId: projectConfig.teamId,
132
+ });
133
+ // Update snapshot ONLY after successful push
134
+ await contextTreeSnapshotService.saveSnapshot();
149
135
  // Success message
150
- this.log('\n✓ Successfully pushed playbook to ByteRover memory storage!');
136
+ this.log('\n✓ Successfully pushed context tree to ByteRover memory storage!');
151
137
  this.log(` Branch: ${flags.branch}`);
152
- this.log(` Files uploaded: ${response.presignedUrls.length}`);
138
+ this.log(` Added: ${addedFiles.length}, Edited: ${modifiedFiles.length}, Deleted: ${contextTreeChanges.deleted.length}`);
139
+ this.log(` View: ${this.buildSpaceUrl(getCurrentConfig().webAppUrl, projectConfig.teamName, projectConfig.spaceName)}`);
153
140
  }
154
141
  catch (error) {
155
- this.error(error instanceof Error ? error.message : 'Push failed');
142
+ if (error instanceof WorkspaceNotInitializedError) {
143
+ exitWithCode(ExitCode.VALIDATION_ERROR, 'Project not initialized. Please run "brv init" to select your team and workspace.');
144
+ }
145
+ // For other errors, use exitWithCode to properly display error before exit
146
+ const message = error instanceof Error ? error.message : 'Push failed';
147
+ exitWithCode(ExitCode.RUNTIME_ERROR, `Failed to push: ${message}`);
156
148
  }
157
149
  }
158
- async uploadFiles(memoryService, presignedUrls, playbookContent) {
159
- this.log('\nUploading files...');
160
- ux.action.start(' Uploading files');
161
- await Promise.all(presignedUrls.map((presignedUrl) => memoryService.uploadFile(presignedUrl.uploadUrl, playbookContent)));
162
- ux.action.stop('✓');
163
- }
164
150
  async validateAuth(tokenStore) {
165
151
  const token = await tokenStore.load();
166
152
  if (token === undefined) {
@@ -171,10 +157,4 @@ export default class Push extends Command {
171
157
  }
172
158
  return token;
173
159
  }
174
- async verifyPlaybookExists(playbookStore) {
175
- const playbookExists = await playbookStore.exists();
176
- if (!playbookExists) {
177
- this.error('Playbook not found. Run "brv init" to create one.');
178
- }
179
- }
180
160
  }
@@ -0,0 +1,63 @@
1
+ import { Command } from '@oclif/core';
2
+ import type { IProjectConfigStore } from '../core/interfaces/i-project-config-store.js';
3
+ import type { ITrackingService } from '../core/interfaces/i-tracking-service.js';
4
+ export default class Query extends Command {
5
+ static args: {
6
+ query: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static description: string;
9
+ static examples: string[];
10
+ static flags: {
11
+ apiKey?: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions> | undefined;
12
+ model?: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions> | undefined;
13
+ verbose?: import("@oclif/core/interfaces").BooleanFlag<boolean> | undefined;
14
+ };
15
+ static strict: boolean;
16
+ catch(error: Error & {
17
+ oclif?: {
18
+ exit: number;
19
+ };
20
+ }): Promise<void>;
21
+ protected createServices(): {
22
+ projectConfigStore: IProjectConfigStore;
23
+ trackingService: ITrackingService;
24
+ };
25
+ /**
26
+ * Generate a unique session ID for the query agent.
27
+ * Uses crypto.randomUUID() for guaranteed uniqueness (122 bits of entropy).
28
+ */
29
+ protected generateSessionId(): string;
30
+ run(): Promise<void>;
31
+ /**
32
+ * Format items count from list_directory result
33
+ */
34
+ private formatItemsCount;
35
+ /**
36
+ * Format matches count from grep_content result
37
+ */
38
+ private formatMatchesCount;
39
+ /**
40
+ * Format tool result summary for display
41
+ */
42
+ private formatToolResultSummary;
43
+ /**
44
+ * Format topics count from find_knowledge_topics result
45
+ */
46
+ private formatTopicsCount;
47
+ /**
48
+ * Get user-friendly description for a tool
49
+ *
50
+ * @param toolName - Name of the tool
51
+ * @param args - Tool arguments
52
+ * @returns User-friendly description
53
+ */
54
+ private getToolDescription;
55
+ /**
56
+ * Handle workspace not initialized error
57
+ */
58
+ private handleWorkspaceError;
59
+ /**
60
+ * Setup event listeners for CipherAgent
61
+ */
62
+ private setupEventListeners;
63
+ }