byterover-cli 0.3.4 → 0.4.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 (346) hide show
  1. package/README.md +119 -63
  2. package/bin/dev.js +8 -1
  3. package/bin/run.js +7 -0
  4. package/dist/commands/cipher-agent/run.d.ts +30 -0
  5. package/dist/commands/cipher-agent/run.js +123 -61
  6. package/dist/commands/cipher-agent/set-prompt.d.ts +2 -0
  7. package/dist/commands/cipher-agent/set-prompt.js +13 -8
  8. package/dist/commands/cipher-agent/show-prompt.d.ts +2 -0
  9. package/dist/commands/cipher-agent/show-prompt.js +17 -12
  10. package/dist/commands/curate.d.ts +3 -60
  11. package/dist/commands/curate.js +45 -341
  12. package/dist/commands/foo.d.ts +4 -2
  13. package/dist/commands/foo.js +21 -16
  14. package/dist/commands/main.d.ts +9 -0
  15. package/dist/commands/main.js +34 -0
  16. package/dist/commands/query.d.ts +2 -48
  17. package/dist/commands/query.js +19 -287
  18. package/dist/commands/status.d.ts +2 -13
  19. package/dist/commands/status.js +12 -91
  20. package/dist/commands/watch.d.ts +2 -0
  21. package/dist/commands/watch.js +23 -19
  22. package/dist/config/environment.d.ts +1 -1
  23. package/dist/config/environment.js +2 -2
  24. package/dist/constants.d.ts +4 -5
  25. package/dist/constants.js +5 -5
  26. package/dist/core/domain/cipher/errors/storage-error.d.ts +89 -0
  27. package/dist/core/domain/cipher/errors/storage-error.js +130 -0
  28. package/dist/core/domain/cipher/queue/types.d.ts +71 -0
  29. package/dist/core/domain/cipher/queue/types.js +9 -0
  30. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +218 -0
  31. package/dist/core/domain/cipher/storage/message-storage-types.js +18 -0
  32. package/dist/core/domain/cipher/tools/constants.d.ts +1 -0
  33. package/dist/core/domain/cipher/tools/constants.js +1 -0
  34. package/dist/core/domain/entities/event.d.ts +1 -1
  35. package/dist/core/domain/entities/event.js +5 -0
  36. package/dist/core/domain/entities/global-config.d.ts +36 -0
  37. package/dist/core/domain/entities/global-config.js +66 -0
  38. package/dist/core/domain/knowledge/directory-manager.d.ts +10 -0
  39. package/dist/core/domain/knowledge/directory-manager.js +18 -0
  40. package/dist/core/domain/knowledge/markdown-writer.d.ts +9 -0
  41. package/dist/core/domain/knowledge/markdown-writer.js +51 -1
  42. package/dist/core/interfaces/cipher/i-agent-storage.d.ts +152 -0
  43. package/dist/core/interfaces/cipher/i-agent-storage.js +1 -0
  44. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +2 -0
  45. package/dist/core/interfaces/cipher/i-key-storage.d.ts +91 -0
  46. package/dist/core/interfaces/cipher/i-key-storage.js +1 -0
  47. package/dist/core/interfaces/i-global-config-store.d.ts +34 -0
  48. package/dist/core/interfaces/i-global-config-store.js +1 -0
  49. package/dist/core/interfaces/i-onboarding-preference-store.d.ts +20 -0
  50. package/dist/core/interfaces/i-onboarding-preference-store.js +1 -0
  51. package/dist/core/interfaces/i-terminal.d.ts +146 -0
  52. package/dist/core/interfaces/i-terminal.js +1 -0
  53. package/dist/core/interfaces/i-workspace-detector-service.d.ts +8 -0
  54. package/dist/core/interfaces/i-workspace-detector-service.js +1 -0
  55. package/dist/core/interfaces/usecase/i-clear-use-case.d.ts +6 -0
  56. package/dist/core/interfaces/usecase/i-clear-use-case.js +1 -0
  57. package/dist/core/interfaces/usecase/i-curate-use-case.d.ts +10 -0
  58. package/dist/core/interfaces/usecase/i-curate-use-case.js +1 -0
  59. package/dist/core/interfaces/usecase/i-generate-rules-use-case.d.ts +3 -0
  60. package/dist/core/interfaces/usecase/i-generate-rules-use-case.js +1 -0
  61. package/dist/core/interfaces/usecase/i-init-use-case.d.ts +5 -0
  62. package/dist/core/interfaces/usecase/i-init-use-case.js +1 -0
  63. package/dist/core/interfaces/usecase/i-login-use-case.d.ts +3 -0
  64. package/dist/core/interfaces/usecase/i-login-use-case.js +1 -0
  65. package/dist/core/interfaces/usecase/i-logout-use-case.d.ts +5 -0
  66. package/dist/core/interfaces/usecase/i-logout-use-case.js +1 -0
  67. package/dist/core/interfaces/usecase/i-pull-use-case.d.ts +5 -0
  68. package/dist/core/interfaces/usecase/i-pull-use-case.js +1 -0
  69. package/dist/core/interfaces/usecase/i-push-use-case.d.ts +6 -0
  70. package/dist/core/interfaces/usecase/i-push-use-case.js +1 -0
  71. package/dist/core/interfaces/usecase/i-query-use-case.d.ts +9 -0
  72. package/dist/core/interfaces/usecase/i-query-use-case.js +1 -0
  73. package/dist/core/interfaces/usecase/i-space-list-use-case.d.ts +3 -0
  74. package/dist/core/interfaces/usecase/i-space-list-use-case.js +1 -0
  75. package/dist/core/interfaces/usecase/i-space-switch-use-case.d.ts +3 -0
  76. package/dist/core/interfaces/usecase/i-space-switch-use-case.js +1 -0
  77. package/dist/core/interfaces/usecase/i-status-use-case.d.ts +5 -0
  78. package/dist/core/interfaces/usecase/i-status-use-case.js +1 -0
  79. package/dist/hooks/init/update-notifier.js +1 -5
  80. package/dist/hooks/init/welcome.js +1 -2
  81. package/dist/infra/cipher/agent-service-factory.d.ts +13 -6
  82. package/dist/infra/cipher/agent-service-factory.js +40 -16
  83. package/dist/infra/cipher/cipher-agent.js +4 -4
  84. package/dist/infra/cipher/consumer/consumer-lock.d.ts +20 -0
  85. package/dist/infra/cipher/consumer/consumer-lock.js +40 -0
  86. package/dist/infra/cipher/consumer/consumer-service.d.ts +99 -0
  87. package/dist/infra/cipher/consumer/consumer-service.js +165 -0
  88. package/dist/infra/cipher/consumer/execution-consumer.d.ts +121 -0
  89. package/dist/infra/cipher/consumer/execution-consumer.js +523 -0
  90. package/dist/infra/cipher/consumer/index.d.ts +33 -0
  91. package/dist/infra/cipher/consumer/index.js +33 -0
  92. package/dist/infra/cipher/consumer/queue-polling-service.d.ts +120 -0
  93. package/dist/infra/cipher/consumer/queue-polling-service.js +248 -0
  94. package/dist/infra/cipher/http/internal-llm-http-service.d.ts +94 -0
  95. package/dist/infra/cipher/http/internal-llm-http-service.js +118 -0
  96. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +106 -0
  97. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +132 -0
  98. package/dist/infra/cipher/llm/context/compaction/index.d.ts +9 -0
  99. package/dist/infra/cipher/llm/context/compaction/index.js +9 -0
  100. package/dist/infra/cipher/llm/context/context-manager.d.ts +46 -2
  101. package/dist/infra/cipher/llm/context/context-manager.js +68 -4
  102. package/dist/infra/cipher/llm/context/rw-lock.d.ts +72 -0
  103. package/dist/infra/cipher/llm/context/rw-lock.js +145 -0
  104. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +7 -7
  105. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +8 -8
  106. package/dist/infra/cipher/llm/internal-llm-service.js +2 -0
  107. package/dist/infra/cipher/session/session-manager.d.ts +4 -4
  108. package/dist/infra/cipher/session/session-manager.js +5 -5
  109. package/dist/infra/cipher/storage/agent-storage.d.ts +246 -0
  110. package/dist/infra/cipher/storage/agent-storage.js +956 -0
  111. package/dist/infra/cipher/storage/dual-format-history-storage.d.ts +77 -0
  112. package/dist/infra/cipher/storage/dual-format-history-storage.js +149 -0
  113. package/dist/infra/cipher/storage/granular-history-storage.d.ts +65 -0
  114. package/dist/infra/cipher/storage/granular-history-storage.js +118 -0
  115. package/dist/infra/cipher/storage/message-storage-service.d.ts +108 -0
  116. package/dist/infra/cipher/storage/message-storage-service.js +529 -0
  117. package/dist/infra/cipher/storage/process-utils.d.ts +16 -0
  118. package/dist/infra/cipher/storage/process-utils.js +43 -0
  119. package/dist/infra/cipher/storage/sqlite-key-storage.d.ts +105 -0
  120. package/dist/infra/cipher/storage/sqlite-key-storage.js +404 -0
  121. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +1 -0
  122. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +7 -0
  123. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  124. package/dist/infra/cipher/tools/implementations/curate-tool.d.ts +10 -0
  125. package/dist/infra/cipher/tools/implementations/curate-tool.js +371 -0
  126. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +11 -8
  127. package/dist/infra/cipher/tools/tool-manager.d.ts +8 -2
  128. package/dist/infra/cipher/tools/tool-manager.js +29 -2
  129. package/dist/infra/cipher/tools/tool-registry.js +7 -0
  130. package/dist/infra/http/authenticated-http-client.d.ts +21 -0
  131. package/dist/infra/http/authenticated-http-client.js +38 -0
  132. package/dist/infra/repl/commands/arg-parser.d.ts +97 -0
  133. package/dist/infra/repl/commands/arg-parser.js +129 -0
  134. package/dist/infra/repl/commands/clear-command.d.ts +5 -0
  135. package/dist/infra/repl/commands/clear-command.js +61 -0
  136. package/dist/infra/repl/commands/curate-command.d.ts +9 -0
  137. package/dist/infra/repl/commands/curate-command.js +88 -0
  138. package/dist/infra/repl/commands/gen-rules-command.d.ts +7 -0
  139. package/dist/infra/repl/commands/gen-rules-command.js +38 -0
  140. package/dist/infra/repl/commands/index.d.ts +8 -0
  141. package/dist/infra/repl/commands/index.js +36 -0
  142. package/dist/infra/repl/commands/init-command.d.ts +7 -0
  143. package/dist/infra/repl/commands/init-command.js +83 -0
  144. package/dist/infra/repl/commands/login-command.d.ts +7 -0
  145. package/dist/infra/repl/commands/login-command.js +50 -0
  146. package/dist/infra/repl/commands/logout-command.d.ts +5 -0
  147. package/dist/infra/repl/commands/logout-command.js +48 -0
  148. package/dist/infra/repl/commands/pull-command.d.ts +5 -0
  149. package/dist/infra/repl/commands/pull-command.js +61 -0
  150. package/dist/infra/repl/commands/push-command.d.ts +5 -0
  151. package/dist/infra/repl/commands/push-command.js +66 -0
  152. package/dist/infra/repl/commands/query-command.d.ts +5 -0
  153. package/dist/infra/repl/commands/query-command.js +66 -0
  154. package/dist/infra/repl/commands/space/index.d.ts +5 -0
  155. package/dist/infra/repl/commands/space/index.js +14 -0
  156. package/dist/infra/repl/commands/space/list-command.d.ts +5 -0
  157. package/dist/infra/repl/commands/space/list-command.js +70 -0
  158. package/dist/infra/repl/commands/space/switch-command.d.ts +5 -0
  159. package/dist/infra/repl/commands/space/switch-command.js +37 -0
  160. package/dist/infra/repl/commands/status-command.d.ts +5 -0
  161. package/dist/infra/repl/commands/status-command.js +39 -0
  162. package/dist/infra/repl/repl-startup.d.ts +18 -0
  163. package/dist/infra/repl/repl-startup.js +26 -0
  164. package/dist/infra/storage/file-global-config-store.d.ts +22 -0
  165. package/dist/infra/storage/file-global-config-store.js +65 -0
  166. package/dist/infra/storage/file-onboarding-preference-store.d.ts +10 -0
  167. package/dist/infra/storage/file-onboarding-preference-store.js +46 -0
  168. package/dist/infra/terminal/oclif-terminal.d.ts +19 -0
  169. package/dist/infra/terminal/oclif-terminal.js +60 -0
  170. package/dist/infra/terminal/repl-terminal.d.ts +31 -0
  171. package/dist/infra/terminal/repl-terminal.js +116 -0
  172. package/dist/infra/tracking/mixpanel-tracking-service.d.ts +11 -1
  173. package/dist/infra/tracking/mixpanel-tracking-service.js +18 -13
  174. package/dist/infra/usecase/clear-use-case.d.ts +20 -0
  175. package/dist/infra/usecase/clear-use-case.js +58 -0
  176. package/dist/infra/usecase/curate-use-case.d.ts +66 -0
  177. package/dist/infra/usecase/curate-use-case.js +283 -0
  178. package/dist/{commands/gen-rules.d.ts → infra/usecase/generate-rules-use-case.d.ts} +14 -20
  179. package/dist/{commands/gen-rules.js → infra/usecase/generate-rules-use-case.js} +59 -78
  180. package/dist/infra/usecase/init-use-case.d.ts +139 -0
  181. package/dist/{commands/init.js → infra/usecase/init-use-case.js} +184 -230
  182. package/dist/infra/usecase/login-use-case.d.ts +28 -0
  183. package/dist/infra/usecase/login-use-case.js +88 -0
  184. package/dist/infra/usecase/logout-use-case.d.ts +22 -0
  185. package/dist/infra/usecase/logout-use-case.js +51 -0
  186. package/dist/infra/usecase/pull-use-case.d.ts +35 -0
  187. package/dist/infra/usecase/pull-use-case.js +89 -0
  188. package/dist/infra/usecase/push-use-case.d.ts +37 -0
  189. package/dist/infra/usecase/push-use-case.js +124 -0
  190. package/dist/infra/usecase/query-use-case.d.ts +78 -0
  191. package/dist/infra/usecase/query-use-case.js +401 -0
  192. package/dist/infra/usecase/space-list-use-case.d.ts +27 -0
  193. package/dist/infra/usecase/space-list-use-case.js +64 -0
  194. package/dist/infra/usecase/space-switch-use-case.d.ts +36 -0
  195. package/dist/infra/usecase/space-switch-use-case.js +140 -0
  196. package/dist/infra/usecase/status-use-case.d.ts +27 -0
  197. package/dist/infra/usecase/status-use-case.js +97 -0
  198. package/dist/infra/workspace/workspace-detector-service.d.ts +3 -6
  199. package/dist/resources/prompts/curate-context-tree-curation.yml +23 -11
  200. package/dist/resources/prompts/query-context-tree-retrieval.yml +3 -4
  201. package/dist/resources/prompts/system-prompt.yml +1 -1
  202. package/dist/resources/prompts/tool-outputs.yml +4 -3
  203. package/dist/templates/sections/command-reference.md +12 -0
  204. package/dist/templates/sections/workflow.md +10 -1
  205. package/dist/tui/app.d.ts +9 -0
  206. package/dist/tui/app.js +26 -0
  207. package/dist/tui/components/enter-prompt.d.ts +13 -0
  208. package/dist/tui/components/enter-prompt.js +15 -0
  209. package/dist/tui/components/execution/execution-changes.d.ts +14 -0
  210. package/dist/tui/components/execution/execution-changes.js +15 -0
  211. package/dist/tui/components/execution/execution-content.d.ts +25 -0
  212. package/dist/tui/components/execution/execution-content.js +67 -0
  213. package/dist/tui/components/execution/execution-input.d.ts +12 -0
  214. package/dist/tui/components/execution/execution-input.js +16 -0
  215. package/dist/tui/components/execution/execution-progress.d.ts +21 -0
  216. package/dist/tui/components/execution/execution-progress.js +21 -0
  217. package/dist/tui/components/execution/execution-status.d.ts +13 -0
  218. package/dist/tui/components/execution/execution-status.js +19 -0
  219. package/dist/tui/components/execution/index.d.ts +11 -0
  220. package/dist/tui/components/execution/index.js +11 -0
  221. package/dist/tui/components/execution/log-item.d.ts +17 -0
  222. package/dist/tui/components/execution/log-item.js +25 -0
  223. package/dist/tui/components/footer.d.ts +5 -0
  224. package/dist/tui/components/footer.js +12 -0
  225. package/dist/tui/components/header.d.ts +18 -0
  226. package/dist/tui/components/header.js +18 -0
  227. package/dist/tui/components/index.d.ts +17 -0
  228. package/dist/tui/components/index.js +14 -0
  229. package/dist/tui/components/inline-prompts/index.d.ts +15 -0
  230. package/dist/tui/components/inline-prompts/index.js +10 -0
  231. package/dist/tui/components/inline-prompts/inline-confirm.d.ts +17 -0
  232. package/dist/tui/components/inline-prompts/inline-confirm.js +32 -0
  233. package/dist/tui/components/inline-prompts/inline-file-selector.d.ts +43 -0
  234. package/dist/tui/components/inline-prompts/inline-file-selector.js +185 -0
  235. package/dist/tui/components/inline-prompts/inline-input.d.ts +19 -0
  236. package/dist/tui/components/inline-prompts/inline-input.js +32 -0
  237. package/dist/tui/components/inline-prompts/inline-search.d.ts +20 -0
  238. package/dist/tui/components/inline-prompts/inline-search.js +50 -0
  239. package/dist/tui/components/inline-prompts/inline-select.d.ts +20 -0
  240. package/dist/tui/components/inline-prompts/inline-select.js +34 -0
  241. package/dist/tui/components/logo.d.ts +43 -0
  242. package/dist/tui/components/logo.js +103 -0
  243. package/dist/tui/components/message-item.d.ts +12 -0
  244. package/dist/tui/components/message-item.js +12 -0
  245. package/dist/tui/components/onboarding/copyable-prompt.d.ts +15 -0
  246. package/dist/tui/components/onboarding/copyable-prompt.js +65 -0
  247. package/dist/tui/components/onboarding/index.d.ts +7 -0
  248. package/dist/tui/components/onboarding/index.js +6 -0
  249. package/dist/tui/components/onboarding/onboarding-flow.d.ts +13 -0
  250. package/dist/tui/components/onboarding/onboarding-flow.js +304 -0
  251. package/dist/tui/components/onboarding/onboarding-step.d.ts +23 -0
  252. package/dist/tui/components/onboarding/onboarding-step.js +12 -0
  253. package/dist/tui/components/output-log.d.ts +14 -0
  254. package/dist/tui/components/output-log.js +13 -0
  255. package/dist/tui/components/scrollable-list.d.ts +30 -0
  256. package/dist/tui/components/scrollable-list.js +121 -0
  257. package/dist/tui/components/suggestions.d.ts +16 -0
  258. package/dist/tui/components/suggestions.js +162 -0
  259. package/dist/tui/components/tab-bar.d.ts +10 -0
  260. package/dist/tui/components/tab-bar.js +12 -0
  261. package/dist/tui/constants.d.ts +11 -0
  262. package/dist/tui/constants.js +13 -0
  263. package/dist/tui/contexts/auth-context.d.ts +30 -0
  264. package/dist/tui/contexts/auth-context.js +153 -0
  265. package/dist/tui/contexts/consumer.d.ts +31 -0
  266. package/dist/tui/contexts/consumer.js +56 -0
  267. package/dist/tui/contexts/index.d.ts +6 -0
  268. package/dist/tui/contexts/index.js +6 -0
  269. package/dist/tui/contexts/onboarding-context.d.ts +43 -0
  270. package/dist/tui/contexts/onboarding-context.js +181 -0
  271. package/dist/tui/contexts/services-context.d.ts +29 -0
  272. package/dist/tui/contexts/services-context.js +20 -0
  273. package/dist/tui/contexts/use-commands.d.ts +29 -0
  274. package/dist/tui/contexts/use-commands.js +53 -0
  275. package/dist/tui/contexts/use-mode.d.ts +43 -0
  276. package/dist/tui/contexts/use-mode.js +76 -0
  277. package/dist/tui/contexts/use-theme.d.ts +53 -0
  278. package/dist/tui/contexts/use-theme.js +60 -0
  279. package/dist/tui/hooks/index.d.ts +17 -0
  280. package/dist/tui/hooks/index.js +14 -0
  281. package/dist/tui/hooks/use-activity-logs.d.ts +26 -0
  282. package/dist/tui/hooks/use-activity-logs.js +90 -0
  283. package/dist/tui/hooks/use-consumer.d.ts +12 -0
  284. package/dist/tui/hooks/use-consumer.js +50 -0
  285. package/dist/tui/hooks/use-onboarding.d.ts +7 -0
  286. package/dist/tui/hooks/use-onboarding.js +6 -0
  287. package/dist/tui/hooks/use-queue-polling.d.ts +31 -0
  288. package/dist/tui/hooks/use-queue-polling.js +90 -0
  289. package/dist/tui/hooks/use-slash-command-processor.d.ts +16 -0
  290. package/dist/tui/hooks/use-slash-command-processor.js +132 -0
  291. package/dist/tui/hooks/use-slash-completion.d.ts +30 -0
  292. package/dist/tui/hooks/use-slash-completion.js +230 -0
  293. package/dist/tui/hooks/use-tab-navigation.d.ts +10 -0
  294. package/dist/tui/hooks/use-tab-navigation.js +35 -0
  295. package/dist/tui/hooks/use-visible-window.d.ts +22 -0
  296. package/dist/tui/hooks/use-visible-window.js +37 -0
  297. package/dist/tui/index.d.ts +1 -0
  298. package/dist/tui/index.js +1 -0
  299. package/dist/tui/providers/app-providers.d.ts +25 -0
  300. package/dist/tui/providers/app-providers.js +9 -0
  301. package/dist/tui/types/commands.d.ts +252 -0
  302. package/dist/tui/types/commands.js +16 -0
  303. package/dist/tui/types/dialogs.d.ts +37 -0
  304. package/dist/tui/types/dialogs.js +4 -0
  305. package/dist/tui/types/index.d.ts +11 -0
  306. package/dist/tui/types/index.js +7 -0
  307. package/dist/tui/types/messages.d.ts +55 -0
  308. package/dist/tui/types/messages.js +4 -0
  309. package/dist/tui/types/prompts.d.ts +100 -0
  310. package/dist/tui/types/prompts.js +4 -0
  311. package/dist/tui/types/ui.d.ts +14 -0
  312. package/dist/tui/types/ui.js +4 -0
  313. package/dist/tui/types.d.ts +1 -0
  314. package/dist/tui/types.js +1 -0
  315. package/dist/tui/views/command-view.d.ts +12 -0
  316. package/dist/tui/views/command-view.js +451 -0
  317. package/dist/tui/views/index.d.ts +6 -0
  318. package/dist/tui/views/index.js +6 -0
  319. package/dist/tui/views/login-view.d.ts +10 -0
  320. package/dist/tui/views/login-view.js +30 -0
  321. package/dist/tui/views/logs-view.d.ts +11 -0
  322. package/dist/tui/views/logs-view.js +73 -0
  323. package/dist/utils/file-validator.d.ts +16 -0
  324. package/dist/utils/file-validator.js +81 -0
  325. package/dist/utils/global-config-path.d.ts +15 -0
  326. package/dist/utils/global-config-path.js +38 -0
  327. package/oclif.manifest.json +29 -315
  328. package/package.json +11 -4
  329. package/dist/commands/clear.d.ts +0 -19
  330. package/dist/commands/clear.js +0 -78
  331. package/dist/commands/init.d.ts +0 -130
  332. package/dist/commands/login.d.ts +0 -22
  333. package/dist/commands/login.js +0 -108
  334. package/dist/commands/logout.d.ts +0 -16
  335. package/dist/commands/logout.js +0 -61
  336. package/dist/commands/pull.d.ts +0 -33
  337. package/dist/commands/pull.js +0 -115
  338. package/dist/commands/push.d.ts +0 -35
  339. package/dist/commands/push.js +0 -160
  340. package/dist/commands/space/list.d.ts +0 -25
  341. package/dist/commands/space/list.js +0 -114
  342. package/dist/commands/space/switch.d.ts +0 -36
  343. package/dist/commands/space/switch.js +0 -160
  344. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +0 -149
  345. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +0 -364
  346. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +0 -94
@@ -1,364 +0,0 @@
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
- }
@@ -1,94 +0,0 @@
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
- }