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,149 @@
1
+ import type { RequestOptions } from '@anthropic-ai/sdk/internal/request-options';
2
+ import type { MessageCreateParamsNonStreaming } from '@anthropic-ai/sdk/resources/messages.js';
3
+ import type { Content, GenerateContentConfig, GenerateContentResponse } from '@google/genai';
4
+ /**
5
+ * ByteRover gRPC LLM provider configuration.
6
+ */
7
+ export interface ByteRoverGrpcConfig {
8
+ accessToken: string;
9
+ grpcEndpoint: string;
10
+ projectId?: string;
11
+ region?: string;
12
+ sessionKey: string;
13
+ spaceId: string;
14
+ teamId: string;
15
+ timeout?: number;
16
+ }
17
+ /**
18
+ * ByteRover gRPC LLM API client.
19
+ *
20
+ * Simple wrapper around ByteRover gRPC LLM service.
21
+ * Delegates prompt building and formatting to service layer.
22
+ *
23
+ * Responsibilities:
24
+ * - Call the remote gRPC service
25
+ * - Stream and collect responses
26
+ * - Convert to GenerateContentResponse format
27
+ *
28
+ * Does NOT:
29
+ * - Build prompts or format inputs
30
+ * - Parse or manipulate response content
31
+ * - Handle tool call parsing from text
32
+ */
33
+ export declare class ByteRoverLlmGrpcService {
34
+ private client;
35
+ private readonly config;
36
+ private credentials;
37
+ /**
38
+ * Initialize a new ByteRover gRPC LLM service client.
39
+ *
40
+ * Sets up configuration with sensible defaults:
41
+ * - projectId defaults to 'byterover'
42
+ * - region defaults to 'us-east1' (can be overridden per request)
43
+ * - timeout defaults to 30 seconds
44
+ *
45
+ * Determines whether to use secure (TLS) or insecure connections based on
46
+ * the endpoint hostname. The actual gRPC client is lazily initialized on first use.
47
+ *
48
+ * @param config - gRPC client configuration (accessToken, grpcEndpoint, sessionKey, optional: projectId, region, timeout)
49
+ */
50
+ constructor(config: ByteRoverGrpcConfig);
51
+ /**
52
+ * Close the gRPC connection and cleanup resources.
53
+ *
54
+ * Safely closes the underlying gRPC client connection if it exists.
55
+ * Can be called multiple times without error.
56
+ */
57
+ close(): void;
58
+ /**
59
+ * Call ByteRover gRPC LLM service to generate content.
60
+ *
61
+ * Simple forward to remote gRPC service - delegates all formatting to backend.
62
+ * Supports both Gemini and Claude formats - the correct format is determined
63
+ * automatically based on the model name.
64
+ *
65
+ * Parameter structure differs by provider:
66
+ * - Gemini: contents = Content[], config = GenerateContentConfig
67
+ * - Claude: contents = MessageCreateParamsNonStreaming (complete body), config = RequestOptions (HTTP options)
68
+ *
69
+ * @param contents - For Gemini: Content[]. For Claude: MessageCreateParamsNonStreaming (complete body)
70
+ * @param config - For Gemini: GenerateContentConfig. For Claude: RequestOptions (optional HTTP options)
71
+ * @param model - Model to use (detects provider from model name)
72
+ * @param executionMetadata - Optional execution metadata (mode, executionContext)
73
+ * @returns Response in GenerateContentResponse format
74
+ */
75
+ generateContent(contents: Content[] | MessageCreateParamsNonStreaming, config: GenerateContentConfig | RequestOptions, model: string, executionMetadata?: Record<string, unknown>): Promise<GenerateContentResponse>;
76
+ /**
77
+ * Call the ByteRover gRPC Generate endpoint and collect streaming response.
78
+ *
79
+ * Handles authentication headers, streaming response collection, timeouts,
80
+ * and error handling. Uses a timeout mechanism to prevent hanging when the
81
+ * server closes the connection without proper cleanup.
82
+ *
83
+ * @param request - The gRPC generate request with model, provider, region, and params
84
+ * @returns Promise resolving to the complete LLM response
85
+ * @throws Error if client is not initialized, timeout occurs, or stream error happens
86
+ */
87
+ private callGrpcGenerate;
88
+ /**
89
+ * Check if error message contains any of the given keywords
90
+ */
91
+ private containsAny;
92
+ /**
93
+ * Detect LLM provider from model identifier.
94
+ *
95
+ * Determines which provider (Claude or Gemini) to use based on the model name.
96
+ * Defaults to Gemini if the model doesn't match Claude patterns.
97
+ *
98
+ * @param model - Model identifier (e.g., 'claude-3-5-sonnet', 'gemini-2.5-flash')
99
+ * @returns Provider name: 'claude' or 'gemini'
100
+ */
101
+ private detectProviderFromModel;
102
+ /**
103
+ * Detect appropriate GCP region from model identifier.
104
+ *
105
+ * Routes Claude models to us-east5 and Gemini models to us-east1.
106
+ * This ensures compatibility with the provider's available regions on Vertex AI.
107
+ *
108
+ * @param model - Model identifier (e.g., 'claude-3-5-sonnet', 'gemini-2.5-flash')
109
+ * @returns GCP region identifier ('us-east5' or 'us-east1')
110
+ */
111
+ private detectRegionFromModel;
112
+ /**
113
+ * Initialize the gRPC client on first use (lazy loading).
114
+ *
115
+ * Loads the protobuf definition, constructs the gRPC service client,
116
+ * and caches it for reuse. Only called once - subsequent calls return immediately.
117
+ *
118
+ * Uses the proto file at runtime to support dynamic loading and avoid bundling
119
+ * proto files into the compiled JavaScript.
120
+ *
121
+ * @throws Error if proto file cannot be found or parsed
122
+ */
123
+ private initializeClient;
124
+ /**
125
+ * Parse gRPC error to extract user-friendly error message.
126
+ *
127
+ * Handles common gRPC error patterns and extracts meaningful messages:
128
+ * - RESOURCE_EXHAUSTED: Billing/quota issues
129
+ * - UNAUTHENTICATED: Authentication failures
130
+ * - PERMISSION_DENIED: Authorization issues
131
+ * - UNAVAILABLE: Service unavailability
132
+ * - Other errors: Generic failure message
133
+ *
134
+ * @param error - gRPC error object
135
+ * @returns User-friendly error message
136
+ */
137
+ private parseGrpcError;
138
+ /**
139
+ * Parse gRPC status error to extract user-friendly error message.
140
+ *
141
+ * @param status - gRPC status object
142
+ * @returns User-friendly error message
143
+ */
144
+ private parseGrpcStatusError;
145
+ /**
146
+ * Parse resource exhausted errors (billing/quota)
147
+ */
148
+ private parseResourceExhaustedError;
149
+ }
@@ -0,0 +1,364 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import * as protoLoader from '@grpc/proto-loader';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ /**
6
+ * ByteRover gRPC LLM API client.
7
+ *
8
+ * Simple wrapper around ByteRover gRPC LLM service.
9
+ * Delegates prompt building and formatting to service layer.
10
+ *
11
+ * Responsibilities:
12
+ * - Call the remote gRPC service
13
+ * - Stream and collect responses
14
+ * - Convert to GenerateContentResponse format
15
+ *
16
+ * Does NOT:
17
+ * - Build prompts or format inputs
18
+ * - Parse or manipulate response content
19
+ * - Handle tool call parsing from text
20
+ */
21
+ export class ByteRoverLlmGrpcService {
22
+ client = null;
23
+ config;
24
+ credentials;
25
+ /**
26
+ * Initialize a new ByteRover gRPC LLM service client.
27
+ *
28
+ * Sets up configuration with sensible defaults:
29
+ * - projectId defaults to 'byterover'
30
+ * - region defaults to 'us-east1' (can be overridden per request)
31
+ * - timeout defaults to 30 seconds
32
+ *
33
+ * Determines whether to use secure (TLS) or insecure connections based on
34
+ * the endpoint hostname. The actual gRPC client is lazily initialized on first use.
35
+ *
36
+ * @param config - gRPC client configuration (accessToken, grpcEndpoint, sessionKey, optional: projectId, region, timeout)
37
+ */
38
+ constructor(config) {
39
+ this.config = {
40
+ accessToken: config.accessToken,
41
+ grpcEndpoint: config.grpcEndpoint,
42
+ projectId: config.projectId ?? 'byterover',
43
+ region: config.region ?? 'us-east1',
44
+ sessionKey: config.sessionKey,
45
+ spaceId: config.spaceId,
46
+ teamId: config.teamId,
47
+ timeout: config.timeout ?? 60_000,
48
+ };
49
+ // Determine if using secure (TLS) or insecure connection based on endpoint
50
+ const isLocalhost = config.grpcEndpoint.includes('localhost') || config.grpcEndpoint.includes('127.0.0.1');
51
+ this.credentials = isLocalhost ? grpc.credentials.createInsecure() : grpc.credentials.createSsl();
52
+ }
53
+ /**
54
+ * Close the gRPC connection and cleanup resources.
55
+ *
56
+ * Safely closes the underlying gRPC client connection if it exists.
57
+ * Can be called multiple times without error.
58
+ */
59
+ close() {
60
+ if (this.client) {
61
+ this.client.close();
62
+ this.client = null;
63
+ }
64
+ }
65
+ /**
66
+ * Call ByteRover gRPC LLM service to generate content.
67
+ *
68
+ * Simple forward to remote gRPC service - delegates all formatting to backend.
69
+ * Supports both Gemini and Claude formats - the correct format is determined
70
+ * automatically based on the model name.
71
+ *
72
+ * Parameter structure differs by provider:
73
+ * - Gemini: contents = Content[], config = GenerateContentConfig
74
+ * - Claude: contents = MessageCreateParamsNonStreaming (complete body), config = RequestOptions (HTTP options)
75
+ *
76
+ * @param contents - For Gemini: Content[]. For Claude: MessageCreateParamsNonStreaming (complete body)
77
+ * @param config - For Gemini: GenerateContentConfig. For Claude: RequestOptions (optional HTTP options)
78
+ * @param model - Model to use (detects provider from model name)
79
+ * @param executionMetadata - Optional execution metadata (mode, executionContext)
80
+ * @returns Response in GenerateContentResponse format
81
+ */
82
+ async generateContent(contents, config, model, executionMetadata) {
83
+ await this.initializeClient();
84
+ const request = {
85
+ executionMetadata: JSON.stringify(executionMetadata ?? {}),
86
+ params: {
87
+ config: JSON.stringify(config),
88
+ contents: JSON.stringify(contents),
89
+ model,
90
+ },
91
+ project_id: this.config.projectId,
92
+ provider: this.detectProviderFromModel(model),
93
+ region: this.detectRegionFromModel(model),
94
+ spaceId: this.config.spaceId,
95
+ teamId: this.config.teamId,
96
+ };
97
+ return this.callGrpcGenerate(request);
98
+ }
99
+ /**
100
+ * Call the ByteRover gRPC Generate endpoint and collect streaming response.
101
+ *
102
+ * Handles authentication headers, streaming response collection, timeouts,
103
+ * and error handling. Uses a timeout mechanism to prevent hanging when the
104
+ * server closes the connection without proper cleanup.
105
+ *
106
+ * @param request - The gRPC generate request with model, provider, region, and params
107
+ * @returns Promise resolving to the complete LLM response
108
+ * @throws Error if client is not initialized, timeout occurs, or stream error happens
109
+ */
110
+ callGrpcGenerate(request) {
111
+ return new Promise((resolve, reject) => {
112
+ if (!this.client) {
113
+ reject(new Error('gRPC client not initialized'));
114
+ return;
115
+ }
116
+ // Log gRPC request
117
+ // console.log('[gRPC] Request:', request)
118
+ // Create metadata with authentication headers
119
+ const metadata = new grpc.Metadata();
120
+ metadata.add('authorization', `Bearer ${this.config.accessToken}`);
121
+ metadata.add('x-byterover-session-id', this.config.sessionKey);
122
+ // Call the gRPC Generate method
123
+ // eslint-disable-next-line new-cap
124
+ const call = this.client.Generate(request, metadata);
125
+ let content = null;
126
+ let settled = false;
127
+ // Timeout to prevent hanging when server destroys stream without proper cleanup
128
+ const timeoutHandle = setTimeout(() => {
129
+ if (!settled) {
130
+ settled = true;
131
+ call.cancel();
132
+ reject(new Error('gRPC call timeout: server did not respond within 30 seconds'));
133
+ }
134
+ }, this.config.timeout);
135
+ // Cleanup function
136
+ const cleanup = () => {
137
+ clearTimeout(timeoutHandle);
138
+ };
139
+ // Collect streaming responses
140
+ call.on('data', (data) => {
141
+ const response = data;
142
+ if (response.data) {
143
+ try {
144
+ content = JSON.parse(response.data);
145
+ if (!settled) {
146
+ settled = true;
147
+ cleanup();
148
+ resolve(content);
149
+ }
150
+ }
151
+ catch (error) {
152
+ console.error(`[gRPC Provider] Failed to parse response chunk:`, error);
153
+ }
154
+ }
155
+ else {
156
+ console.warn(`[gRPC Provider] Response data is empty or undefined:`, response);
157
+ }
158
+ });
159
+ call.on('end', () => {
160
+ if (settled) {
161
+ return;
162
+ }
163
+ settled = true;
164
+ cleanup();
165
+ if (content === null) {
166
+ reject(new Error('gRPC call ended without receiving valid response data'));
167
+ }
168
+ else {
169
+ resolve(content);
170
+ }
171
+ });
172
+ call.on('error', (error) => {
173
+ if (settled) {
174
+ return;
175
+ }
176
+ settled = true;
177
+ cleanup();
178
+ // Parse gRPC error to extract user-friendly message
179
+ const userMessage = this.parseGrpcError(error);
180
+ reject(new Error(userMessage));
181
+ });
182
+ // Handle gRPC status codes (server-sent errors)
183
+ call.on('status', (status) => {
184
+ if (status.code !== grpc.status.OK && !settled) {
185
+ settled = true;
186
+ cleanup();
187
+ // Parse status error to extract user-friendly message
188
+ const userMessage = this.parseGrpcStatusError(status);
189
+ reject(new Error(userMessage));
190
+ }
191
+ });
192
+ });
193
+ }
194
+ /**
195
+ * Check if error message contains any of the given keywords
196
+ */
197
+ containsAny(message, keywords) {
198
+ return keywords.some((keyword) => message.includes(keyword));
199
+ }
200
+ /**
201
+ * Detect LLM provider from model identifier.
202
+ *
203
+ * Determines which provider (Claude or Gemini) to use based on the model name.
204
+ * Defaults to Gemini if the model doesn't match Claude patterns.
205
+ *
206
+ * @param model - Model identifier (e.g., 'claude-3-5-sonnet', 'gemini-2.5-flash')
207
+ * @returns Provider name: 'claude' or 'gemini'
208
+ */
209
+ detectProviderFromModel(model) {
210
+ return model.toLowerCase().startsWith('claude') ? 'claude' : 'gemini';
211
+ }
212
+ /**
213
+ * Detect appropriate GCP region from model identifier.
214
+ *
215
+ * Routes Claude models to us-east5 and Gemini models to us-east1.
216
+ * This ensures compatibility with the provider's available regions on Vertex AI.
217
+ *
218
+ * @param model - Model identifier (e.g., 'claude-3-5-sonnet', 'gemini-2.5-flash')
219
+ * @returns GCP region identifier ('us-east5' or 'us-east1')
220
+ */
221
+ detectRegionFromModel(model) {
222
+ // return model.toLowerCase().startsWith('claude') ? 'us-east5' : 'us-central1'
223
+ return model.toLowerCase().startsWith('claude') ? 'us-east5' : 'global';
224
+ }
225
+ /**
226
+ * Initialize the gRPC client on first use (lazy loading).
227
+ *
228
+ * Loads the protobuf definition, constructs the gRPC service client,
229
+ * and caches it for reuse. Only called once - subsequent calls return immediately.
230
+ *
231
+ * Uses the proto file at runtime to support dynamic loading and avoid bundling
232
+ * proto files into the compiled JavaScript.
233
+ *
234
+ * @throws Error if proto file cannot be found or parsed
235
+ */
236
+ async initializeClient() {
237
+ if (this.client) {
238
+ return;
239
+ }
240
+ const filename = fileURLToPath(import.meta.url);
241
+ const dirname = path.dirname(filename);
242
+ const protoPath = path.resolve(dirname, '../grpc/internal-llm-grpc.proto');
243
+ const packageDefinition = await protoLoader.load(protoPath, {
244
+ defaults: true,
245
+ enums: String,
246
+ keepCase: true,
247
+ longs: String,
248
+ oneofs: true,
249
+ });
250
+ const proto = grpc.loadPackageDefinition(packageDefinition);
251
+ const { LLMService } = proto.byterover.llm.v1;
252
+ this.client = new LLMService(this.config.grpcEndpoint, this.credentials);
253
+ }
254
+ /**
255
+ * Parse gRPC error to extract user-friendly error message.
256
+ *
257
+ * Handles common gRPC error patterns and extracts meaningful messages:
258
+ * - RESOURCE_EXHAUSTED: Billing/quota issues
259
+ * - UNAUTHENTICATED: Authentication failures
260
+ * - PERMISSION_DENIED: Authorization issues
261
+ * - UNAVAILABLE: Service unavailability
262
+ * - Other errors: Generic failure message
263
+ *
264
+ * @param error - gRPC error object
265
+ * @returns User-friendly error message
266
+ */
267
+ parseGrpcError(error) {
268
+ const errorMessage = error.message || String(error);
269
+ // Check resource exhausted errors
270
+ const resourceError = this.parseResourceExhaustedError(errorMessage);
271
+ if (resourceError)
272
+ return resourceError;
273
+ // Check authentication errors
274
+ if (this.containsAny(errorMessage, ['UNAUTHENTICATED', 'authentication'])) {
275
+ return '❌ Authentication failed: Your session may have expired. Please run "brv login" to re-authenticate.';
276
+ }
277
+ // Check permission errors
278
+ if (this.containsAny(errorMessage, ['PERMISSION_DENIED', 'permission'])) {
279
+ return '❌ Permission denied: You do not have access to this resource. Please check your team/space permissions.';
280
+ }
281
+ // Check network/connection errors
282
+ if (this.containsAny(errorMessage, [
283
+ 'ECONNREFUSED',
284
+ 'ENOTFOUND',
285
+ 'ETIMEDOUT',
286
+ 'connection refused',
287
+ 'network',
288
+ 'dns',
289
+ 'getaddrinfo',
290
+ ])) {
291
+ return '❌ Network error: Unable to connect to ByteRover servers. Please check your internet connection and try again.';
292
+ }
293
+ // Check service availability errors
294
+ if (this.containsAny(errorMessage, ['UNAVAILABLE', 'unavailable'])) {
295
+ return '❌ Service unavailable: ByteRover API is temporarily unavailable. Please try again later.';
296
+ }
297
+ // Generic error with cleaned message
298
+ return `❌ API error: ${errorMessage.split(':').pop()?.trim() || 'Unknown error occurred'}`;
299
+ }
300
+ /**
301
+ * Parse gRPC status error to extract user-friendly error message.
302
+ *
303
+ * @param status - gRPC status object
304
+ * @returns User-friendly error message
305
+ */
306
+ parseGrpcStatusError(status) {
307
+ const statusName = grpc.status[status.code];
308
+ const details = status.details || 'No details provided';
309
+ // Map common status codes to user-friendly messages
310
+ switch (status.code) {
311
+ case grpc.status.DEADLINE_EXCEEDED: {
312
+ return '❌ Request timeout: The API request took too long. Please try again.';
313
+ }
314
+ case grpc.status.INVALID_ARGUMENT: {
315
+ return `❌ Invalid request: ${details}`;
316
+ }
317
+ case grpc.status.NOT_FOUND: {
318
+ return '❌ Resource not found: The requested resource does not exist.';
319
+ }
320
+ case grpc.status.PERMISSION_DENIED: {
321
+ return '❌ Permission denied: You do not have access to this resource.';
322
+ }
323
+ case grpc.status.RESOURCE_EXHAUSTED: {
324
+ if (details.includes('Billing') || details.includes('credentials')) {
325
+ return '❌ Billing error: Your ByteRover account may not have sufficient credits or valid payment method.';
326
+ }
327
+ return '❌ Resource exhausted: API quota or billing limit reached.';
328
+ }
329
+ case grpc.status.UNAUTHENTICATED: {
330
+ return '❌ Authentication failed: Your session may have expired. Please run "brv login" to re-authenticate.';
331
+ }
332
+ case grpc.status.UNAVAILABLE: {
333
+ // Check if it's a network error (user's connection) vs server unavailable
334
+ const detailsLower = details.toLowerCase();
335
+ if (detailsLower.includes('enotfound') ||
336
+ detailsLower.includes('econnrefused') ||
337
+ detailsLower.includes('etimedout') ||
338
+ detailsLower.includes('network') ||
339
+ detailsLower.includes('dns') ||
340
+ detailsLower.includes('getaddrinfo')) {
341
+ return '❌ Network error: Unable to connect to ByteRover servers. Please check your internet connection and try again.';
342
+ }
343
+ return '❌ Service unavailable: ByteRover API is temporarily unavailable. Please try again later.';
344
+ }
345
+ default: {
346
+ return `❌ API error [${statusName}]: ${details}`;
347
+ }
348
+ }
349
+ }
350
+ /**
351
+ * Parse resource exhausted errors (billing/quota)
352
+ */
353
+ parseResourceExhaustedError(errorMessage) {
354
+ if (!errorMessage.includes('RESOURCE_EXHAUSTED'))
355
+ return null;
356
+ if (this.containsAny(errorMessage, ['Billing service error', 'Invalid credentials'])) {
357
+ return '❌ Billing error: Your ByteRover account may not have sufficient credits or valid payment method. Please check your account settings.';
358
+ }
359
+ if (this.containsAny(errorMessage, ['quota', 'rate limit'])) {
360
+ return '❌ Rate limit exceeded: You have reached your API quota. Please wait or upgrade your plan.';
361
+ }
362
+ return '❌ Resource exhausted: API quota or billing limit reached. Please check your ByteRover account.';
363
+ }
364
+ }
@@ -0,0 +1,94 @@
1
+ syntax = "proto3";
2
+
3
+ package byterover.llm.v1;
4
+
5
+ /**
6
+ * LLM Service for ByteRover unified LLM operations
7
+ *
8
+ * Provides a unified, type-safe interface for multiple LLM providers:
9
+ * - Gemini: Google Cloud Vertex AI Gemini models
10
+ * - Claude: Anthropic Claude models via Vertex AI
11
+ *
12
+ * Architecture: Type-safe pass-through wrapper
13
+ * - Accepts provider-specific typed parameters
14
+ * - Forwards all parameters directly to the provider SDK
15
+ * - SDK validates and calls the LLM API
16
+ * - Responses are streamed incrementally for better performance
17
+ *
18
+ * All parameters are forwarded directly to the provider SDKs without modification.
19
+ * Parameter validation occurs at the SDK level.
20
+ */
21
+ service LLMService {
22
+ /**
23
+ * Generate content with streaming support
24
+ *
25
+ * Makes a single API call to the chosen LLM provider and streams response chunks.
26
+ * All parameters in the request are forwarded directly to the provider SDK.
27
+ *
28
+ * Request:
29
+ * - provider: "gemini" or "claude"
30
+ * - project_id: GCP Project ID
31
+ * - region: GCP Region (default: us-central1)
32
+ * - params: Provider-specific parameters (all forwarded as-is to SDK)
33
+ *
34
+ * Response: Server streams response chunks incrementally
35
+ * - Each chunk contains either text content or tool calls
36
+ * - Final chunk includes finish_reason and token counts
37
+ */
38
+ rpc Generate(GenerateRequest) returns (stream GenerateResponse);
39
+ }
40
+
41
+ /**
42
+ * Request for content generation
43
+ */
44
+ message GenerateRequest {
45
+ // Generation parameters
46
+ GenerateParams params = 1;
47
+
48
+ // Project ID for the request
49
+ string project_id = 2;
50
+
51
+ // LLM provider (e.g., "claude", "gemini")
52
+ string provider = 3;
53
+
54
+ // Region for the request (e.g., "us-east1", "us-east5")
55
+ string region = 4;
56
+
57
+ // Current user teamID for the request
58
+ string teamId = 5;
59
+
60
+ // Current user spaceID for the request
61
+ string spaceId = 6;
62
+
63
+ // Current user executionMetadata for the request
64
+ string executionMetadata = 7;
65
+ }
66
+
67
+ message GenerateParams {
68
+ // Required: Content messages as JSON string
69
+ // Parse on server: const contents = JSON.parse(params.contents)
70
+ // Gemini: JSON array of Content[] from @google-cloud/vertexai
71
+ // Claude: JSON array of MessageParam[] from @anthropic-ai/sdk
72
+ string contents = 1;
73
+
74
+ // Required: Generation configuration as JSON string
75
+ // Parse on server: const config = JSON.parse(params.config)
76
+ // Gemini: JSON object with generationConfig, systemInstruction, tools, etc.
77
+ // Claude: JSON object with system, temperature, max_tokens, tools, etc.
78
+ string config = 2;
79
+
80
+ // Required: Model identifier
81
+ // Examples: 'gemini-2.5-flash', 'claude-3-5-sonnet-20241022'
82
+ string model = 3;
83
+ }
84
+
85
+ /**
86
+ * Response chunk from the LLM
87
+ *
88
+ * Streamed incrementally for better performance.
89
+ * Each chunk contains either text content or a tool call.
90
+ */
91
+ message GenerateResponse {
92
+ // Complete response as JSON string (for full response in single chunk)
93
+ string data = 1;
94
+ }
@@ -0,0 +1,16 @@
1
+ import type { ICipherAgent } from '../../core/interfaces/cipher/i-cipher-agent.js';
2
+ /**
3
+ * Get all available command names (including aliases) for autocomplete
4
+ *
5
+ * @returns Array of command names with '/' prefix
6
+ */
7
+ export declare function getCommandNames(): string[];
8
+ /**
9
+ * Execute an interactive command
10
+ *
11
+ * @param command - Command name
12
+ * @param args - Command arguments
13
+ * @param agent - CipherAgent instance
14
+ * @returns Promise<boolean> - true to continue loop, false to exit
15
+ */
16
+ export declare function executeCommand(command: string, args: string[], agent: ICipherAgent): Promise<boolean>;