byterover-cli 0.4.1 → 1.0.1

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 (474) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  49. package/dist/core/domain/errors/connection-error.js +54 -0
  50. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  51. package/dist/core/domain/errors/core-process-error.js +43 -0
  52. package/dist/core/domain/errors/task-error.d.ts +64 -0
  53. package/dist/core/domain/errors/task-error.js +116 -0
  54. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  55. package/dist/core/domain/errors/transport-error.js +114 -0
  56. package/dist/core/domain/instance/index.d.ts +1 -0
  57. package/dist/core/domain/instance/index.js +1 -0
  58. package/dist/core/domain/instance/types.d.ts +57 -0
  59. package/dist/core/domain/instance/types.js +72 -0
  60. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  61. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  62. package/dist/core/domain/transport/index.d.ts +2 -0
  63. package/dist/core/domain/transport/index.js +2 -0
  64. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  65. package/dist/core/domain/transport/schemas.js +554 -0
  66. package/dist/core/domain/transport/types.d.ts +67 -0
  67. package/dist/core/domain/transport/types.js +7 -0
  68. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  69. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  70. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  71. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  72. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  73. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  74. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  75. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  76. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  77. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  79. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  80. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  81. package/dist/core/interfaces/cipher/index.js +11 -0
  82. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  83. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  84. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  85. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  86. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  87. package/dist/core/interfaces/cipher/message-types.js +6 -0
  88. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  89. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  90. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  91. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  92. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  93. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  94. package/dist/core/interfaces/executor/index.d.ts +2 -0
  95. package/dist/core/interfaces/executor/index.js +2 -0
  96. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  97. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  98. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  99. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  100. package/dist/core/interfaces/instance/index.d.ts +2 -0
  101. package/dist/core/interfaces/instance/index.js +2 -0
  102. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  103. package/dist/core/interfaces/noop-implementations.js +62 -0
  104. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  105. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  106. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  107. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  108. package/dist/core/interfaces/transport/index.d.ts +2 -0
  109. package/dist/core/interfaces/transport/index.js +2 -0
  110. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  111. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  112. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  113. package/dist/infra/cipher/agent/agent-error.js +79 -0
  114. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  115. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  116. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  117. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  118. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  119. package/dist/infra/cipher/agent/base-agent.js +240 -0
  120. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  121. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  122. package/dist/infra/cipher/agent/index.d.ts +22 -0
  123. package/dist/infra/cipher/agent/index.js +24 -0
  124. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  125. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  126. package/dist/infra/cipher/agent/types.d.ts +35 -0
  127. package/dist/infra/cipher/agent/types.js +1 -0
  128. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  129. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  130. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  131. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  132. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  133. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  134. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  135. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  136. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  137. package/dist/infra/cipher/consumer/index.js +2 -1
  138. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  139. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  140. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  141. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  142. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  143. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  144. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  145. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  146. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  147. package/dist/infra/cipher/interactive-loop.js +41 -33
  148. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  149. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  150. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  151. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  152. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  153. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  154. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  155. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  156. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  157. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  158. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  159. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  160. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  161. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  162. package/dist/infra/cipher/llm/context/utils.js +17 -4
  163. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  164. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  165. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  166. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  167. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  168. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  169. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  170. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  171. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  172. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  173. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  174. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  175. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  176. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  177. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  178. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  179. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  180. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  181. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  182. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  183. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  184. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  185. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  186. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  187. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  188. package/dist/infra/cipher/process/command-validator.js +75 -0
  189. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  190. package/dist/infra/cipher/process/path-utils.js +94 -0
  191. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  192. package/dist/infra/cipher/process/process-service.js +98 -17
  193. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  194. package/dist/infra/cipher/session/chat-session.js +163 -13
  195. package/dist/infra/cipher/session/index.d.ts +1 -0
  196. package/dist/infra/cipher/session/index.js +2 -0
  197. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  198. package/dist/infra/cipher/session/message-queue.js +90 -0
  199. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  200. package/dist/infra/cipher/session/session-manager.js +254 -7
  201. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  202. package/dist/infra/cipher/session/session-status.js +184 -0
  203. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  204. package/dist/infra/cipher/session/title-generator.js +31 -0
  205. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  206. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  207. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  208. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  209. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  210. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  211. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  212. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  213. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  214. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  215. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  216. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  217. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  218. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  219. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  220. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  221. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  222. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  223. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  224. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  225. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  226. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  227. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  228. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  229. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  230. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  231. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  232. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  233. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  234. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  235. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  236. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  237. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  238. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  239. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  240. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  241. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  242. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  243. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  244. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  245. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  246. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  247. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  249. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  250. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  251. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  252. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  253. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  254. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  255. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  256. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  257. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  258. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  259. package/dist/infra/cipher/tools/index.d.ts +1 -1
  260. package/dist/infra/cipher/tools/index.js +1 -1
  261. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  262. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  263. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  264. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  265. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  266. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  267. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  268. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  269. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  270. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  271. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  272. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  273. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  274. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  275. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  276. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  277. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  278. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  279. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  280. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  281. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  282. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  283. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  284. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  285. package/dist/infra/context-tree/path-utils.js +7 -0
  286. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  287. package/dist/infra/core/executors/curate-executor.js +123 -0
  288. package/dist/infra/core/executors/index.d.ts +2 -0
  289. package/dist/infra/core/executors/index.js +2 -0
  290. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  291. package/dist/infra/core/executors/query-executor.js +51 -0
  292. package/dist/infra/core/task-processor.d.ts +81 -0
  293. package/dist/infra/core/task-processor.js +115 -0
  294. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  295. package/dist/infra/instance/file-instance-discovery.js +84 -0
  296. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  297. package/dist/infra/instance/file-instance-manager.js +123 -0
  298. package/dist/infra/instance/index.d.ts +3 -0
  299. package/dist/infra/instance/index.js +3 -0
  300. package/dist/infra/instance/process-utils.d.ts +14 -0
  301. package/dist/infra/instance/process-utils.js +39 -0
  302. package/dist/infra/process/agent-worker.d.ts +20 -0
  303. package/dist/infra/process/agent-worker.js +602 -0
  304. package/dist/infra/process/index.d.ts +12 -0
  305. package/dist/infra/process/index.js +11 -0
  306. package/dist/infra/process/ipc-types.d.ts +55 -0
  307. package/dist/infra/process/ipc-types.js +12 -0
  308. package/dist/infra/process/process-manager.d.ts +154 -0
  309. package/dist/infra/process/process-manager.js +471 -0
  310. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  311. package/dist/infra/process/task-queue-manager.js +226 -0
  312. package/dist/infra/process/transport-handlers.d.ts +124 -0
  313. package/dist/infra/process/transport-handlers.js +348 -0
  314. package/dist/infra/process/transport-worker.d.ts +20 -0
  315. package/dist/infra/process/transport-worker.js +168 -0
  316. package/dist/infra/repl/commands/curate-command.js +0 -5
  317. package/dist/infra/repl/commands/query-command.js +0 -3
  318. package/dist/infra/repl/repl-startup.d.ts +4 -0
  319. package/dist/infra/repl/repl-startup.js +8 -1
  320. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  321. package/dist/infra/repl/transport-client-helper.js +96 -0
  322. package/dist/infra/transport/index.d.ts +4 -0
  323. package/dist/infra/transport/index.js +4 -0
  324. package/dist/infra/transport/port-utils.d.ts +42 -0
  325. package/dist/infra/transport/port-utils.js +84 -0
  326. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  327. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  328. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  329. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  330. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  331. package/dist/infra/transport/transport-client-factory.js +168 -0
  332. package/dist/infra/transport/transport-factory.d.ts +33 -0
  333. package/dist/infra/transport/transport-factory.js +59 -0
  334. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  335. package/dist/infra/usecase/curate-use-case.js +71 -262
  336. package/dist/infra/usecase/init-use-case.js +3 -2
  337. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  338. package/dist/infra/usecase/query-use-case.js +250 -326
  339. package/dist/infra/usecase/status-use-case.js +1 -1
  340. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  341. package/dist/resources/prompts/explore.yml +78 -0
  342. package/dist/resources/prompts/plan.yml +114 -0
  343. package/dist/resources/prompts/reflection.yml +1 -1
  344. package/dist/resources/prompts/system-prompt.yml +15 -8
  345. package/dist/resources/prompts/tool-outputs.yml +0 -5
  346. package/dist/resources/tools/bash_exec.txt +98 -0
  347. package/dist/resources/tools/bash_output.txt +40 -0
  348. package/dist/resources/tools/batch.txt +28 -0
  349. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  350. package/dist/resources/tools/curate.txt +22 -0
  351. package/dist/resources/tools/delete_memory.txt +1 -0
  352. package/dist/resources/tools/detect_domains.txt +11 -0
  353. package/dist/resources/tools/edit_file.txt +1 -0
  354. package/dist/resources/tools/edit_memory.txt +1 -0
  355. package/dist/resources/tools/glob_files.txt +20 -0
  356. package/dist/resources/tools/grep_content.txt +18 -0
  357. package/dist/resources/tools/kill_process.txt +16 -0
  358. package/dist/resources/tools/list_directory.txt +16 -0
  359. package/dist/resources/tools/list_memories.txt +1 -0
  360. package/dist/resources/tools/read_file.txt +31 -0
  361. package/dist/resources/tools/read_memory.txt +1 -0
  362. package/dist/resources/tools/read_todos.txt +17 -0
  363. package/dist/resources/tools/search_history.txt +1 -0
  364. package/dist/resources/tools/task.txt +23 -0
  365. package/dist/resources/tools/write_file.txt +1 -0
  366. package/dist/resources/tools/write_memory.txt +1 -0
  367. package/dist/resources/tools/write_todos.txt +29 -0
  368. package/dist/tui/app.js +9 -13
  369. package/dist/tui/components/command-details.d.ts +14 -0
  370. package/dist/tui/components/command-details.js +35 -0
  371. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  372. package/dist/tui/components/execution/execution-changes.js +19 -4
  373. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  374. package/dist/tui/components/execution/execution-content.js +26 -13
  375. package/dist/tui/components/execution/execution-input.js +3 -3
  376. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  377. package/dist/tui/components/execution/execution-progress.js +8 -6
  378. package/dist/tui/components/execution/log-item.d.ts +3 -4
  379. package/dist/tui/components/execution/log-item.js +2 -5
  380. package/dist/tui/components/footer.js +9 -4
  381. package/dist/tui/components/header.d.ts +3 -3
  382. package/dist/tui/components/header.js +5 -3
  383. package/dist/tui/components/index.d.ts +1 -0
  384. package/dist/tui/components/index.js +1 -0
  385. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  386. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  387. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  388. package/dist/tui/components/scrollable-list.js +12 -10
  389. package/dist/tui/components/suggestions.js +39 -41
  390. package/dist/tui/components/tab-bar.d.ts +2 -1
  391. package/dist/tui/components/tab-bar.js +3 -4
  392. package/dist/tui/constants.d.ts +0 -5
  393. package/dist/tui/constants.js +0 -5
  394. package/dist/tui/contexts/auth-context.js +9 -2
  395. package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
  396. package/dist/tui/contexts/index.d.ts +6 -1
  397. package/dist/tui/contexts/index.js +6 -1
  398. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  399. package/dist/tui/contexts/onboarding-context.js +9 -9
  400. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  401. package/dist/tui/contexts/tasks-context.js +218 -0
  402. package/dist/tui/contexts/transport-context.d.ts +29 -0
  403. package/dist/tui/contexts/transport-context.js +82 -0
  404. package/dist/tui/hooks/index.d.ts +10 -6
  405. package/dist/tui/hooks/index.js +7 -6
  406. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  407. package/dist/tui/hooks/use-activity-logs.js +87 -34
  408. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  409. package/dist/tui/hooks/use-auth-polling.js +104 -0
  410. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  411. package/dist/tui/hooks/use-slash-completion.js +1 -1
  412. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  413. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  414. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  415. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  416. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  417. package/dist/tui/hooks/use-ui-heights.js +88 -0
  418. package/dist/tui/providers/app-providers.js +2 -6
  419. package/dist/tui/types/commands.d.ts +0 -26
  420. package/dist/tui/types/index.d.ts +1 -1
  421. package/dist/tui/types/ui.d.ts +9 -4
  422. package/dist/tui/utils/line.d.ts +11 -0
  423. package/dist/tui/utils/line.js +16 -0
  424. package/dist/tui/utils/log.d.ts +27 -0
  425. package/dist/tui/utils/log.js +114 -0
  426. package/dist/tui/views/command-view.d.ts +7 -0
  427. package/dist/tui/views/command-view.js +103 -80
  428. package/dist/tui/views/login-view.js +7 -4
  429. package/dist/tui/views/logs-view.d.ts +13 -0
  430. package/dist/tui/views/logs-view.js +27 -52
  431. package/dist/utils/connection-error-handler.d.ts +16 -0
  432. package/dist/utils/connection-error-handler.js +49 -0
  433. package/dist/utils/crash-log.d.ts +14 -0
  434. package/dist/utils/crash-log.js +19 -0
  435. package/dist/utils/file-helpers.d.ts +14 -0
  436. package/dist/utils/file-helpers.js +21 -0
  437. package/dist/utils/global-logs-path.d.ts +11 -0
  438. package/dist/utils/global-logs-path.js +37 -0
  439. package/dist/utils/process-logger.d.ts +53 -0
  440. package/dist/utils/process-logger.js +253 -0
  441. package/dist/utils/sandbox-detector.d.ts +31 -0
  442. package/dist/utils/sandbox-detector.js +122 -0
  443. package/oclif.manifest.json +10 -198
  444. package/package.json +5 -1
  445. package/dist/commands/cipher-agent/run.d.ts +0 -142
  446. package/dist/commands/cipher-agent/run.js +0 -555
  447. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  448. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  449. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  450. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  451. package/dist/commands/foo.d.ts +0 -14
  452. package/dist/commands/foo.js +0 -66
  453. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  454. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  455. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  456. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  457. package/dist/infra/cipher/cipher-agent.js +0 -317
  458. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  459. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  460. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  461. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  462. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  463. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  464. package/dist/tui/contexts/consumer.d.ts +0 -31
  465. package/dist/tui/contexts/consumer.js +0 -56
  466. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  467. package/dist/tui/hooks/use-consumer.js +0 -50
  468. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  469. package/dist/tui/hooks/use-queue-polling.js +0 -90
  470. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  471. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  472. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  473. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  474. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -1,288 +1,97 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import open from 'open';
5
- import { CONTEXT_TREE_DOMAINS } from '../../config/context-tree-domains.js';
6
- import { BRV_DIR, CONTEXT_FILE, CONTEXT_TREE_DIR } from '../../constants.js';
7
- import { validateFileForCurate } from '../../utils/file-validator.js';
8
- import { getAgentStorage } from '../cipher/storage/agent-storage.js';
9
- import { WorkspaceNotInitializedError } from '../cipher/validation/workspace-validator.js';
10
- // Full path to context tree
11
- const CONTEXT_TREE_PATH = path.join(BRV_DIR, CONTEXT_TREE_DIR);
2
+ import { ConnectionError, ConnectionFailedError, InstanceCrashedError, NoInstanceRunningError } from '../../core/domain/errors/connection-error.js';
3
+ import { formatError } from '../../utils/error-handler.js';
4
+ import { getSandboxEnvironmentName, isSandboxEnvironment, isSandboxNetworkError } from '../../utils/sandbox-detector.js';
5
+ import { createTransportClientFactory } from '../transport/transport-client-factory.js';
12
6
  export class CurateUseCase {
13
- projectConfigStore;
14
7
  terminal;
15
- tokenStore;
16
8
  trackingService;
9
+ transportClientFactoryCreator;
17
10
  constructor(options) {
18
- this.projectConfigStore = options.projectConfigStore;
19
11
  this.terminal = options.terminal;
20
- this.tokenStore = options.tokenStore;
21
12
  this.trackingService = options.trackingService;
13
+ this.transportClientFactoryCreator = options.transportClientFactoryCreator ?? createTransportClientFactory;
22
14
  }
23
- /**
24
- * Create topic folder with context.md file
25
- * @param targetPath - The parent path where the topic folder will be created
26
- * @param topicName - The name of the topic folder to create
27
- * @returns The path to the created context.md file
28
- */
29
- createTopicWithContextFile(targetPath, topicName) {
30
- const topicPath = path.join(targetPath, topicName);
31
- const contextFilePath = path.join(topicPath, CONTEXT_FILE);
32
- // Create the topic directory
33
- fs.mkdirSync(topicPath, { recursive: true });
34
- // Create the context.md file with initial content
35
- const initialContent = `# ${topicName}\n\n<!-- Add your context here -->\n`;
36
- fs.writeFileSync(contextFilePath, initialContent, 'utf8');
37
- return contextFilePath;
38
- }
39
- /**
40
- * Generate a unique session ID for the autonomous agent.
41
- * Uses crypto.randomUUID() for guaranteed uniqueness (122 bits of entropy).
42
- */
43
- generateSessionId() {
44
- return randomUUID();
45
- }
46
- /**
47
- * Navigate through the context tree using file selector
48
- * Returns the selected path relative to context-tree root
49
- */
50
- async navigateContextTree() {
51
- const contextTreePath = path.resolve(process.cwd(), CONTEXT_TREE_PATH);
52
- // Ensure context tree directory exists
53
- if (!fs.existsSync(contextTreePath)) {
54
- fs.mkdirSync(contextTreePath, { recursive: true });
55
- }
56
- // Ensure predefined domains exist as directories
57
- for (const domain of CONTEXT_TREE_DOMAINS) {
58
- const domainPath = path.join(contextTreePath, domain.name);
59
- if (!fs.existsSync(domainPath)) {
60
- fs.mkdirSync(domainPath, { recursive: true });
61
- }
62
- }
63
- while (true) {
64
- try {
65
- // eslint-disable-next-line no-await-in-loop
66
- const selectedItem = await this.terminal.fileSelector({
67
- allowCancel: true,
68
- basePath: contextTreePath,
69
- filter: (item) => item.isDirectory,
70
- message: 'Target context location:',
71
- pageSize: 15,
72
- theme: {
73
- labels: {
74
- messages: {
75
- cancel: 'Selection cancelled.',
76
- empty: 'No sub-folders. Press Enter to add content here.',
77
- },
78
- },
79
- },
80
- type: 'directory',
81
- });
82
- // User cancelled
83
- if (!selectedItem) {
84
- return null;
85
- }
86
- // Restrict navigation to stay within the context tree
87
- const normalizedItemPath = path.resolve(selectedItem.path);
88
- const isValid = normalizedItemPath.startsWith(contextTreePath);
89
- if (isValid) {
90
- // Valid selection - proceed
91
- return selectedItem.path;
92
- }
93
- // Invalid selection - retry
94
- this.terminal.log('Invalid selection. Please choose a valid location within the context tree.');
95
- }
96
- catch {
97
- // Error occurred
98
- return null;
99
- }
100
- }
101
- }
102
- /**
103
- * Open a file in the default editor
104
- * @param filePath - The path to the file to open
105
- */
106
- async openFile(filePath) {
107
- await open(filePath);
108
- }
109
- /**
110
- * Prompt user to enter topic name with validation
111
- * @param targetPath - The path where the topic folder will be created
112
- * @returns The topic name or null if cancelled
113
- */
114
- async promptForTopicName(targetPath) {
115
- try {
116
- const topicName = await this.terminal.input({
117
- message: 'New topic name:',
118
- validate: (value) => this.validateTopicName(value, targetPath),
119
- });
120
- return topicName.trim();
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- async run(options) {
15
+ async run({ context, files, verbose = false }) {
127
16
  await this.trackingService.track('mem:curate', { status: 'started' });
128
- // Determine mode: autonomous if context is provided
129
- return options.context ? this.runAutonomous(options.context, options) : this.runInteractive();
130
- }
131
- /**
132
- * Handle workspace not initialized error
133
- */
134
- handleWorkspaceError(_error) {
135
- const message = 'Project not initialized. Please run "/init" to select your team and workspace.';
136
- this.terminal.log(message);
137
- }
138
- /**
139
- * Process file paths from --files flag
140
- * @param filePaths - Array of file paths (relative or absolute)
141
- * @returns Formatted instructions for the agent to read the specified files, or undefined if validation fails
142
- */
143
- processFileReferences(filePaths) {
144
- const MAX_FILES = 5;
145
- if (!filePaths || filePaths.length === 0) {
146
- return '';
17
+ if (!context) {
18
+ this.terminal.log('Context argument is required.');
19
+ this.terminal.log('Usage: brv curate "your context here"');
20
+ return;
147
21
  }
148
- // Validate max files and truncate if needed
149
- if (filePaths.length > MAX_FILES) {
150
- const ignored = filePaths.slice(MAX_FILES);
151
- this.terminal.log(`\n⚠️ Only the first ${MAX_FILES} files will be processed. Ignoring: ${ignored.join(', ')}\n`);
152
- filePaths = filePaths.slice(0, MAX_FILES);
153
- }
154
- // Get project root (current directory with .brv)
155
- const projectRoot = process.cwd();
156
- // Validate each file and collect errors
157
- const validPaths = [];
158
- const errors = [];
159
- for (const filePath of filePaths) {
160
- const result = validateFileForCurate(filePath, projectRoot);
161
- if (result.valid && result.normalizedPath) {
162
- validPaths.push(result.normalizedPath);
163
- }
164
- else {
165
- errors.push(` ✗ ${result.error}`);
166
- }
167
- }
168
- // If there are any validation errors, show them and return undefined
169
- if (errors.length > 0) {
170
- this.terminal.log('\n❌ File validation failed:\n');
171
- this.terminal.log(errors.join('\n'));
172
- this.terminal.log('');
173
- this.terminal.log('Invalid files provided. Please fix the errors above and try again.');
174
- return undefined;
175
- }
176
- // Format instructions for the agent
177
- const instructions = [
178
- '\n## IMPORTANT: Critical Files to Read (--files flag)',
179
- '',
180
- 'The user has explicitly specified these files as critical context that MUST be read before creating knowledge topics:',
181
- '',
182
- ...validPaths.map((p) => `- ${p}`),
183
- '',
184
- '**MANDATORY INSTRUCTIONS:**',
185
- '- You MUST use the `read_file` tool to read ALL of these files IN PARALLEL (in a single iteration) before proceeding to create knowledge topics',
186
- '- These files contain essential context that will help you create comprehensive and accurate knowledge topics',
187
- '- Read them in parallel to maximize efficiency - they do not depend on each other',
188
- '- After reading all files, proceed with the normal workflow: detect domains, find existing knowledge, and create/update topics',
189
- '',
190
- ];
191
- return instructions.join('\n');
192
- }
193
- /**
194
- * Run in autonomous mode - push to queue for background processing
195
- */
196
- async runAutonomous(content, options) {
22
+ let client;
197
23
  try {
198
- // Get authentication token
199
- const token = await this.tokenStore.load();
200
- if (!token) {
201
- this.terminal.log('Authentication required. Please run "/login" first.');
202
- return;
24
+ const transportClientFactory = this.transportClientFactoryCreator();
25
+ if (verbose) {
26
+ this.terminal.log('Discovering running instance...');
203
27
  }
204
- // Load project config
205
- const brvConfig = await this.projectConfigStore.read();
206
- // Validate workspace is initialized
207
- if (!brvConfig) {
208
- throw new WorkspaceNotInitializedError('Project not initialized. Please run "/init" to select your team and workspace.', '.brv');
28
+ const { client: connectedClient } = await transportClientFactory.connect();
29
+ client = connectedClient;
30
+ if (verbose) {
31
+ this.terminal.log(`Connected to instance (clientId: ${client.getClientId()})`);
209
32
  }
210
- // Process file references if provided (validates and creates instructions)
211
- const fileReferenceInstructions = this.processFileReferences(options.files ?? []);
212
- if (fileReferenceInstructions === undefined) {
213
- // Validation failed, error already displayed
214
- return;
215
- }
216
- // Initialize storage and create execution (auto-detects .brv/blobs)
217
- const storage = await getAgentStorage();
218
- // Create execution with status='queued'
219
- storage.createExecution('curate', JSON.stringify({
220
- content,
221
- fileReferenceInstructions,
222
- flags: { apiKey: options.apiKey, model: options.model, verbose: options.verbose },
223
- }));
224
- // Simple output for agents - just confirm saved
33
+ // Generate taskId in UseCase (Application layer owns task creation)
34
+ const taskId = randomUUID();
35
+ // Send task:create - Transport routes to Agent, UseCase handles logic
36
+ await client.request('task:create', {
37
+ content: context,
38
+ ...(files?.length ? { files } : {}),
39
+ taskId,
40
+ type: 'curate',
41
+ });
225
42
  this.terminal.log('✓ Context queued for processing.');
226
- // Track the event
227
43
  await this.trackingService.track('mem:curate', { status: 'finished' });
228
44
  }
229
45
  catch (error) {
230
- if (error instanceof WorkspaceNotInitializedError) {
231
- this.handleWorkspaceError(error);
232
- return;
46
+ this.handleConnectionError(error);
47
+ await this.trackingService.track('mem:curate', { message: formatError(error), status: 'error' });
48
+ }
49
+ finally {
50
+ if (client) {
51
+ await client.disconnect();
233
52
  }
234
- // Display error
235
- const errMsg = error instanceof Error ? error.message : 'Runtime error occurred';
236
- await this.trackingService.track('mem:curate', { message: errMsg, status: 'error' });
237
- this.terminal.error(errMsg);
238
53
  }
239
54
  }
240
- /**
241
- * Run in interactive mode with manual prompts
242
- */
243
- async runInteractive() {
244
- try {
245
- // Navigate to target location in context tree
246
- const targetPath = await this.navigateContextTree();
247
- if (!targetPath) {
248
- this.terminal.log('\nOperation cancelled.');
249
- return;
55
+ handleConnectionError(error) {
56
+ if (error instanceof NoInstanceRunningError) {
57
+ // Check if running in sandbox environment
58
+ if (isSandboxEnvironment()) {
59
+ const sandboxName = getSandboxEnvironmentName();
60
+ this.terminal.log(`Error: No ByteRover instance is running.\n` +
61
+ `⚠️ Sandbox environment detected (${sandboxName}).\n\n` +
62
+ `Please run 'brv' command in a separate terminal window/tab outside the sandbox first.`);
250
63
  }
251
- // Prompt for topic name with validation
252
- const topicName = await this.promptForTopicName(targetPath);
253
- if (!topicName) {
254
- this.terminal.log('\nOperation cancelled.');
255
- return;
64
+ else {
65
+ this.terminal.log('No ByteRover instance is running.\n\n' +
66
+ 'Start a ByteRover instance by running "brv" in a separate terminal window/tab.\n' +
67
+ 'The instance will keep running and handle your commands.');
256
68
  }
257
- // Create the topic folder with context.md
258
- const contextFilePath = this.createTopicWithContextFile(targetPath, topicName);
259
- this.terminal.log(`\nCreated: ${path.relative(process.cwd(), contextFilePath)}`);
260
- // Track the event
261
- this.trackingService.track('mem:curate');
262
- // Auto-open context.md in default editor
263
- this.terminal.log('Opening context.md for editing...');
264
- await this.openFile(contextFilePath);
265
- }
266
- catch (error) {
267
- const errMsg = error instanceof Error ? error.message : 'Unexpected error occurred';
268
- await this.trackingService.track('mem:curate', { message: errMsg, status: 'error' });
269
- this.terminal.error(errMsg);
270
- }
271
- }
272
- validateTopicName(value, targetPath) {
273
- const trimmed = value.trim();
274
- if (!trimmed) {
275
- return 'Topic name cannot be empty';
276
- }
277
- // Only allow letters, numbers, and hyphens
278
- if (!/^[a-zA-Z0-9-]+$/.test(trimmed)) {
279
- return 'Topic name can only contain letters (a-z, A-Z), numbers (0-9), and hyphens (-)';
69
+ return;
70
+ }
71
+ if (error instanceof InstanceCrashedError) {
72
+ this.terminal.log('ByteRover instance has crashed.\n\nPlease restart with: brv');
73
+ return;
74
+ }
75
+ if (error instanceof ConnectionFailedError) {
76
+ // Check if it's specifically a sandbox network restriction error
77
+ const isSandboxError = isSandboxNetworkError(error.originalError ?? error);
78
+ if (isSandboxError) {
79
+ const sandboxName = getSandboxEnvironmentName();
80
+ this.terminal.log(`Error: Failed to connect to ByteRover instance.\n` +
81
+ `Port: ${error.port ?? 'unknown'}\n` +
82
+ `⚠️ Sandbox network restriction detected (${sandboxName}).\n\n` +
83
+ `Please allow network access in the sandbox and retry the command.`);
84
+ }
85
+ else {
86
+ this.terminal.log(`Failed to connect to ByteRover instance: ${error.message}`);
87
+ }
88
+ return;
280
89
  }
281
- // Check if folder already exists
282
- const topicPath = path.join(targetPath, trimmed);
283
- if (fs.existsSync(topicPath)) {
284
- return `Topic "${trimmed}" already exists at this location`;
90
+ if (error instanceof ConnectionError) {
91
+ this.terminal.log(`Connection error: ${error.message}`);
92
+ return;
285
93
  }
286
- return true;
94
+ const message = error instanceof Error ? error.message : String(error);
95
+ this.terminal.log(`Unexpected error: ${message}`);
287
96
  }
288
97
  }
@@ -105,7 +105,7 @@ export class InitUseCase {
105
105
  return token;
106
106
  }
107
107
  async fetchAndSelectSpace(token, team) {
108
- this.terminal.actionStart('\nFetching all spaces');
108
+ this.terminal.actionStart('Fetching all spaces');
109
109
  const { spaces } = await this.spaceService.getSpaces(token.accessToken, token.sessionKey, team.id, { fetchAll: true });
110
110
  this.terminal.actionStop();
111
111
  if (spaces.length === 0) {
@@ -433,7 +433,7 @@ export class InitUseCase {
433
433
  }
434
434
  async syncFromRemoteOrInitialize(params) {
435
435
  // Pull from remote - fail if network/API error
436
- this.terminal.log('\nSyncing from ByteRover...');
436
+ this.terminal.actionStart('Syncing from ByteRover...');
437
437
  try {
438
438
  const coGitSnapshot = await this.cogitPullService.pull({
439
439
  accessToken: params.token.accessToken,
@@ -464,6 +464,7 @@ export class InitUseCase {
464
464
  await this.trackingService.track('init', { message: syncFailureErr, status: 'error' });
465
465
  throw new Error(syncFailureErr);
466
466
  }
467
+ this.terminal.actionStop();
467
468
  }
468
469
  /**
469
470
  * Appends ByteRover rules to a file that has no ByteRover content.
@@ -1,21 +1,20 @@
1
1
  import type { BrvConfig } from '../../core/domain/entities/brv-config.js';
2
- import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
3
2
  import type { ITerminal } from '../../core/interfaces/i-terminal.js';
4
- import type { ITokenStore } from '../../core/interfaces/i-token-store.js';
5
3
  import type { ITrackingService } from '../../core/interfaces/i-tracking-service.js';
6
4
  import type { IQueryUseCase, QueryUseCaseRunOptions } from '../../core/interfaces/usecase/i-query-use-case.js';
7
- import { CipherAgent } from '../cipher/cipher-agent.js';
5
+ import { CipherAgent } from '../cipher/agent/index.js';
6
+ import { type TransportClientFactory } from '../transport/transport-client-factory.js';
7
+ export type TransportClientFactoryCreator = () => TransportClientFactory;
8
8
  export interface QueryUseCaseOptions {
9
- projectConfigStore: IProjectConfigStore;
10
9
  terminal: ITerminal;
11
- tokenStore: ITokenStore;
12
10
  trackingService: ITrackingService;
11
+ /** Optional factory creator for dependency injection (defaults to createTransportClientFactory) */
12
+ transportClientFactoryCreator?: TransportClientFactoryCreator;
13
13
  }
14
14
  export declare class QueryUseCase implements IQueryUseCase {
15
- private readonly projectConfigStore;
16
15
  private readonly terminal;
17
- private readonly tokenStore;
18
16
  private readonly trackingService;
17
+ private readonly transportClientFactoryCreator;
19
18
  constructor(options: QueryUseCaseOptions);
20
19
  /**
21
20
  * Create CipherAgent instance. Protected to allow test overrides.
@@ -28,51 +27,25 @@ export declare class QueryUseCase implements IQueryUseCase {
28
27
  protected generateSessionId(): string;
29
28
  run(options: QueryUseCaseRunOptions): Promise<void>;
30
29
  /**
31
- * Create result summary for tool call
30
+ * Format a parsed object result into a concise summary.
32
31
  */
33
- private createResultSummary;
32
+ private formatParsedResult;
34
33
  /**
35
- * Extract summary from curate tool result
34
+ * Format tool arguments for display.
35
+ * Extract the most meaningful value for human reading.
36
36
  */
37
- private extractCurateSummary;
37
+ private formatToolArgs;
38
38
  /**
39
- * Format curate tool operation summary
39
+ * Format tool result for display.
40
+ * Shows meaningful, concise summary - NEVER shows raw JSON.
40
41
  */
41
- private formatCurateResult;
42
+ private formatToolResult;
42
43
  /**
43
- * Format items count from list_directory result
44
+ * Handle connection-related errors with user-friendly messages.
44
45
  */
45
- private formatItemsCount;
46
+ private handleConnectionError;
46
47
  /**
47
- * Format matches count from grep_content result
48
+ * Stream task results from the connected instance.
48
49
  */
49
- private formatMatchesCount;
50
- /**
51
- * Format tool result summary for display
52
- */
53
- private formatToolResultSummary;
54
- /**
55
- * Format topics count from find_knowledge_topics result
56
- */
57
- private formatTopicsCount;
58
- /**
59
- * Get user-friendly description for a tool
60
- *
61
- * @param toolName - Name of the tool
62
- * @param args - Tool arguments
63
- * @returns User-friendly description
64
- */
65
- private getToolDescription;
66
- /**
67
- * Handle workspace not initialized error
68
- */
69
- private handleWorkspaceError;
70
- /**
71
- * Setup event listeners for CipherAgent
72
- */
73
- private setupEventListeners;
74
- /**
75
- * Setup tool call tracking to persist in database
76
- */
77
- private setupToolCallTracking;
50
+ private streamTaskResults;
78
51
  }