byterover-cli 0.4.0 → 1.0.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 (478) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/entities/event.d.ts +1 -1
  49. package/dist/core/domain/entities/event.js +3 -1
  50. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  51. package/dist/core/domain/errors/connection-error.js +54 -0
  52. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  53. package/dist/core/domain/errors/core-process-error.js +43 -0
  54. package/dist/core/domain/errors/task-error.d.ts +64 -0
  55. package/dist/core/domain/errors/task-error.js +116 -0
  56. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  57. package/dist/core/domain/errors/transport-error.js +114 -0
  58. package/dist/core/domain/instance/index.d.ts +1 -0
  59. package/dist/core/domain/instance/index.js +1 -0
  60. package/dist/core/domain/instance/types.d.ts +57 -0
  61. package/dist/core/domain/instance/types.js +72 -0
  62. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  63. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  64. package/dist/core/domain/transport/index.d.ts +2 -0
  65. package/dist/core/domain/transport/index.js +2 -0
  66. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  67. package/dist/core/domain/transport/schemas.js +554 -0
  68. package/dist/core/domain/transport/types.d.ts +67 -0
  69. package/dist/core/domain/transport/types.js +7 -0
  70. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  71. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  72. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  73. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  74. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  75. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  76. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  77. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  79. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  80. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  81. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  82. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  83. package/dist/core/interfaces/cipher/index.js +11 -0
  84. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  85. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  86. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  87. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  88. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  89. package/dist/core/interfaces/cipher/message-types.js +6 -0
  90. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  91. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  92. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  93. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  94. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  95. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  96. package/dist/core/interfaces/executor/index.d.ts +2 -0
  97. package/dist/core/interfaces/executor/index.js +2 -0
  98. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  99. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  100. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  101. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  102. package/dist/core/interfaces/instance/index.d.ts +2 -0
  103. package/dist/core/interfaces/instance/index.js +2 -0
  104. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  105. package/dist/core/interfaces/noop-implementations.js +62 -0
  106. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  107. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  108. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  109. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  110. package/dist/core/interfaces/transport/index.d.ts +2 -0
  111. package/dist/core/interfaces/transport/index.js +2 -0
  112. package/dist/hooks/init/welcome.js +9 -24
  113. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  114. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  115. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  116. package/dist/infra/cipher/agent/agent-error.js +79 -0
  117. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  118. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  119. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  120. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  121. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  122. package/dist/infra/cipher/agent/base-agent.js +240 -0
  123. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  124. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  125. package/dist/infra/cipher/agent/index.d.ts +22 -0
  126. package/dist/infra/cipher/agent/index.js +24 -0
  127. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  128. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  129. package/dist/infra/cipher/agent/types.d.ts +35 -0
  130. package/dist/infra/cipher/agent/types.js +1 -0
  131. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  132. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  133. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  134. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  135. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  136. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  137. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  138. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  139. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  140. package/dist/infra/cipher/consumer/index.js +2 -1
  141. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  142. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  143. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  144. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  145. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  146. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  147. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  148. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  149. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  150. package/dist/infra/cipher/interactive-loop.js +41 -33
  151. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  152. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  153. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  154. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  155. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  156. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  157. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  158. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  159. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  160. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  161. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  162. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  163. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  164. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  165. package/dist/infra/cipher/llm/context/utils.js +17 -4
  166. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  167. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  168. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  169. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  170. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  171. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  172. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  173. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  174. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  175. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  176. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  177. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  178. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  179. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  180. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  181. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  182. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  183. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  184. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  185. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  186. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  187. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  188. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  189. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  190. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  191. package/dist/infra/cipher/process/command-validator.js +75 -0
  192. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  193. package/dist/infra/cipher/process/path-utils.js +94 -0
  194. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  195. package/dist/infra/cipher/process/process-service.js +98 -17
  196. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  197. package/dist/infra/cipher/session/chat-session.js +163 -13
  198. package/dist/infra/cipher/session/index.d.ts +1 -0
  199. package/dist/infra/cipher/session/index.js +2 -0
  200. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  201. package/dist/infra/cipher/session/message-queue.js +90 -0
  202. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  203. package/dist/infra/cipher/session/session-manager.js +254 -7
  204. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  205. package/dist/infra/cipher/session/session-status.js +184 -0
  206. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  207. package/dist/infra/cipher/session/title-generator.js +31 -0
  208. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  209. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  210. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  211. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  212. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  213. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  214. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  215. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  216. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  217. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  218. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  219. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  220. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  221. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  222. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  223. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  224. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  225. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  226. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  227. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  228. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  229. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  230. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  231. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  232. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  233. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  234. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  235. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  236. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  237. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  238. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  239. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  240. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  241. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  242. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  243. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  244. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  245. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  246. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  247. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  249. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  250. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  251. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  252. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  253. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  254. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  255. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  256. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  257. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  258. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  259. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  260. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  261. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  262. package/dist/infra/cipher/tools/index.d.ts +1 -1
  263. package/dist/infra/cipher/tools/index.js +1 -1
  264. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  265. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  266. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  267. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  268. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  269. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  270. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  271. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  272. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  273. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  274. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  275. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  276. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  277. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  278. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  279. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  280. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  281. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  282. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  283. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  284. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  285. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  286. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  287. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  288. package/dist/infra/context-tree/path-utils.js +7 -0
  289. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  290. package/dist/infra/core/executors/curate-executor.js +123 -0
  291. package/dist/infra/core/executors/index.d.ts +2 -0
  292. package/dist/infra/core/executors/index.js +2 -0
  293. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  294. package/dist/infra/core/executors/query-executor.js +51 -0
  295. package/dist/infra/core/task-processor.d.ts +81 -0
  296. package/dist/infra/core/task-processor.js +115 -0
  297. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  298. package/dist/infra/instance/file-instance-discovery.js +84 -0
  299. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  300. package/dist/infra/instance/file-instance-manager.js +123 -0
  301. package/dist/infra/instance/index.d.ts +3 -0
  302. package/dist/infra/instance/index.js +3 -0
  303. package/dist/infra/instance/process-utils.d.ts +14 -0
  304. package/dist/infra/instance/process-utils.js +39 -0
  305. package/dist/infra/process/agent-worker.d.ts +20 -0
  306. package/dist/infra/process/agent-worker.js +602 -0
  307. package/dist/infra/process/index.d.ts +12 -0
  308. package/dist/infra/process/index.js +11 -0
  309. package/dist/infra/process/ipc-types.d.ts +55 -0
  310. package/dist/infra/process/ipc-types.js +12 -0
  311. package/dist/infra/process/process-manager.d.ts +154 -0
  312. package/dist/infra/process/process-manager.js +471 -0
  313. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  314. package/dist/infra/process/task-queue-manager.js +226 -0
  315. package/dist/infra/process/transport-handlers.d.ts +124 -0
  316. package/dist/infra/process/transport-handlers.js +348 -0
  317. package/dist/infra/process/transport-worker.d.ts +20 -0
  318. package/dist/infra/process/transport-worker.js +168 -0
  319. package/dist/infra/repl/commands/curate-command.js +0 -5
  320. package/dist/infra/repl/commands/query-command.js +0 -3
  321. package/dist/infra/repl/repl-startup.d.ts +4 -0
  322. package/dist/infra/repl/repl-startup.js +10 -1
  323. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  324. package/dist/infra/repl/transport-client-helper.js +96 -0
  325. package/dist/infra/transport/index.d.ts +4 -0
  326. package/dist/infra/transport/index.js +4 -0
  327. package/dist/infra/transport/port-utils.d.ts +42 -0
  328. package/dist/infra/transport/port-utils.js +84 -0
  329. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  330. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  331. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  332. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  333. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  334. package/dist/infra/transport/transport-client-factory.js +168 -0
  335. package/dist/infra/transport/transport-factory.d.ts +33 -0
  336. package/dist/infra/transport/transport-factory.js +59 -0
  337. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  338. package/dist/infra/usecase/curate-use-case.js +73 -259
  339. package/dist/infra/usecase/init-use-case.js +19 -8
  340. package/dist/infra/usecase/login-use-case.js +9 -3
  341. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  342. package/dist/infra/usecase/query-use-case.js +251 -326
  343. package/dist/infra/usecase/status-use-case.js +1 -1
  344. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  345. package/dist/resources/prompts/explore.yml +78 -0
  346. package/dist/resources/prompts/plan.yml +114 -0
  347. package/dist/resources/prompts/reflection.yml +1 -1
  348. package/dist/resources/prompts/system-prompt.yml +15 -8
  349. package/dist/resources/prompts/tool-outputs.yml +0 -5
  350. package/dist/resources/tools/bash_exec.txt +98 -0
  351. package/dist/resources/tools/bash_output.txt +40 -0
  352. package/dist/resources/tools/batch.txt +28 -0
  353. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  354. package/dist/resources/tools/curate.txt +22 -0
  355. package/dist/resources/tools/delete_memory.txt +1 -0
  356. package/dist/resources/tools/detect_domains.txt +11 -0
  357. package/dist/resources/tools/edit_file.txt +1 -0
  358. package/dist/resources/tools/edit_memory.txt +1 -0
  359. package/dist/resources/tools/glob_files.txt +20 -0
  360. package/dist/resources/tools/grep_content.txt +18 -0
  361. package/dist/resources/tools/kill_process.txt +16 -0
  362. package/dist/resources/tools/list_directory.txt +16 -0
  363. package/dist/resources/tools/list_memories.txt +1 -0
  364. package/dist/resources/tools/read_file.txt +31 -0
  365. package/dist/resources/tools/read_memory.txt +1 -0
  366. package/dist/resources/tools/read_todos.txt +17 -0
  367. package/dist/resources/tools/search_history.txt +1 -0
  368. package/dist/resources/tools/task.txt +23 -0
  369. package/dist/resources/tools/write_file.txt +1 -0
  370. package/dist/resources/tools/write_memory.txt +1 -0
  371. package/dist/resources/tools/write_todos.txt +29 -0
  372. package/dist/tui/app.js +9 -13
  373. package/dist/tui/components/command-details.d.ts +14 -0
  374. package/dist/tui/components/command-details.js +35 -0
  375. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  376. package/dist/tui/components/execution/execution-changes.js +19 -4
  377. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  378. package/dist/tui/components/execution/execution-content.js +26 -13
  379. package/dist/tui/components/execution/execution-input.js +3 -3
  380. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  381. package/dist/tui/components/execution/execution-progress.js +8 -6
  382. package/dist/tui/components/execution/log-item.d.ts +3 -4
  383. package/dist/tui/components/execution/log-item.js +2 -5
  384. package/dist/tui/components/footer.js +9 -4
  385. package/dist/tui/components/header.d.ts +3 -3
  386. package/dist/tui/components/header.js +5 -3
  387. package/dist/tui/components/index.d.ts +1 -0
  388. package/dist/tui/components/index.js +1 -0
  389. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  390. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  391. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  392. package/dist/tui/components/scrollable-list.js +12 -10
  393. package/dist/tui/components/suggestions.js +39 -41
  394. package/dist/tui/components/tab-bar.d.ts +2 -1
  395. package/dist/tui/components/tab-bar.js +3 -4
  396. package/dist/tui/constants.d.ts +0 -5
  397. package/dist/tui/constants.js +0 -5
  398. package/dist/tui/contexts/auth-context.js +9 -2
  399. package/dist/tui/contexts/{use-commands.js → commands-context.js} +6 -5
  400. package/dist/tui/contexts/index.d.ts +6 -1
  401. package/dist/tui/contexts/index.js +6 -1
  402. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  403. package/dist/tui/contexts/onboarding-context.js +9 -9
  404. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  405. package/dist/tui/contexts/tasks-context.js +218 -0
  406. package/dist/tui/contexts/transport-context.d.ts +29 -0
  407. package/dist/tui/contexts/transport-context.js +82 -0
  408. package/dist/tui/hooks/index.d.ts +10 -6
  409. package/dist/tui/hooks/index.js +7 -6
  410. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  411. package/dist/tui/hooks/use-activity-logs.js +87 -34
  412. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  413. package/dist/tui/hooks/use-auth-polling.js +104 -0
  414. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  415. package/dist/tui/hooks/use-slash-completion.js +1 -1
  416. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  417. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  418. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  419. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  420. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  421. package/dist/tui/hooks/use-ui-heights.js +88 -0
  422. package/dist/tui/providers/app-providers.js +2 -6
  423. package/dist/tui/types/commands.d.ts +0 -26
  424. package/dist/tui/types/index.d.ts +1 -1
  425. package/dist/tui/types/ui.d.ts +9 -4
  426. package/dist/tui/utils/line.d.ts +11 -0
  427. package/dist/tui/utils/line.js +16 -0
  428. package/dist/tui/utils/log.d.ts +27 -0
  429. package/dist/tui/utils/log.js +114 -0
  430. package/dist/tui/views/command-view.d.ts +7 -0
  431. package/dist/tui/views/command-view.js +103 -80
  432. package/dist/tui/views/login-view.js +7 -4
  433. package/dist/tui/views/logs-view.d.ts +13 -0
  434. package/dist/tui/views/logs-view.js +27 -52
  435. package/dist/utils/connection-error-handler.d.ts +16 -0
  436. package/dist/utils/connection-error-handler.js +49 -0
  437. package/dist/utils/crash-log.d.ts +14 -0
  438. package/dist/utils/crash-log.js +19 -0
  439. package/dist/utils/file-helpers.d.ts +14 -0
  440. package/dist/utils/file-helpers.js +21 -0
  441. package/dist/utils/global-logs-path.d.ts +11 -0
  442. package/dist/utils/global-logs-path.js +37 -0
  443. package/dist/utils/process-logger.d.ts +53 -0
  444. package/dist/utils/process-logger.js +253 -0
  445. package/dist/utils/sandbox-detector.d.ts +31 -0
  446. package/dist/utils/sandbox-detector.js +122 -0
  447. package/oclif.manifest.json +10 -198
  448. package/package.json +5 -1
  449. package/dist/commands/cipher-agent/run.d.ts +0 -142
  450. package/dist/commands/cipher-agent/run.js +0 -555
  451. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  452. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  453. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  454. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  455. package/dist/commands/foo.d.ts +0 -14
  456. package/dist/commands/foo.js +0 -66
  457. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  458. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  459. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  460. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  461. package/dist/infra/cipher/cipher-agent.js +0 -317
  462. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  463. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  464. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  465. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  466. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  467. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  468. package/dist/tui/contexts/consumer.d.ts +0 -31
  469. package/dist/tui/contexts/consumer.js +0 -56
  470. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  471. package/dist/tui/hooks/use-consumer.js +0 -50
  472. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  473. package/dist/tui/hooks/use-queue-polling.js +0 -90
  474. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  475. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  476. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  477. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  478. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -1,555 +0,0 @@
1
- import { Args, Command, Flags } from '@oclif/core';
2
- import { getCurrentConfig, isDevelopment } from '../../config/environment.js';
3
- import { PROJECT } from '../../constants.js';
4
- import { CipherAgent } from '../../infra/cipher/cipher-agent.js';
5
- import { ExitCode, ExitError, exitWithCode } from '../../infra/cipher/exit-codes.js';
6
- import { displayInfo, startInteractiveLoop } from '../../infra/cipher/interactive-loop.js';
7
- import { WorkspaceNotInitializedError } from '../../infra/cipher/validation/workspace-validator.js';
8
- import { ProjectConfigStore } from '../../infra/config/file-config-store.js';
9
- import { KeychainTokenStore } from '../../infra/storage/keychain-token-store.js';
10
- import { OclifTerminal } from '../../infra/terminal/oclif-terminal.js';
11
- import { formatToolCall, formatToolResult } from '../../utils/tool-display-formatter.js';
12
- export default class CipherAgentRun extends Command {
13
- static args = {
14
- prompt: Args.string({
15
- description: 'The prompt to send to CipherAgent (optional in interactive mode)',
16
- required: false,
17
- }),
18
- };
19
- static description = 'Run CipherAgent in interactive or single-execution mode [Development only]';
20
- static examples = [
21
- '# Interactive mode (creates new unique session each time)',
22
- '<%= config.bin %> <%= command.id %>',
23
- '<%= config.bin %> <%= command.id %> --interactive',
24
- '',
25
- '# Continue most recent session in interactive mode',
26
- '<%= config.bin %> <%= command.id %> -c',
27
- '<%= config.bin %> <%= command.id %> -c -i',
28
- '',
29
- '# Resume specific session in interactive mode',
30
- '<%= config.bin %> <%= command.id %> -r session-1731686400123-a7b3c9',
31
- '<%= config.bin %> <%= command.id %> -r session-1731686400123-a7b3c9 -i',
32
- '',
33
- '# Single execution mode (creates new unique session)',
34
- '<%= config.bin %> <%= command.id %> "Analyze the project structure" --no-interactive',
35
- '<%= config.bin %> <%= command.id %> "Find all TypeScript files" --no-interactive',
36
- '',
37
- '# Continue session with a new prompt (headless)',
38
- '<%= config.bin %> <%= command.id %> -c "What did we discuss?"',
39
- '<%= config.bin %> <%= command.id %> -r session-1731686400123-a7b3c9 "Continue implementation"',
40
- '',
41
- '# Piped input (automatically uses non-interactive mode)',
42
- 'echo "Analyze the codebase" | <%= config.bin %> <%= command.id %>',
43
- '',
44
- '# Specify working directory',
45
- '<%= config.bin %> <%= command.id %> -w /path/to/project',
46
- '<%= config.bin %> <%= command.id %> --working-directory ~/myproject',
47
- ];
48
- static flags = {
49
- ...(isDevelopment()
50
- ? {
51
- apiKey: Flags.string({
52
- char: 'k',
53
- description: 'OpenRouter API key (use OpenRouter instead of gRPC backend) [Development only]',
54
- env: 'OPENROUTER_API_KEY',
55
- }),
56
- model: Flags.string({
57
- char: 'm',
58
- description: 'Model to use (default: google/gemini-2.5-pro for OpenRouter, gemini-2.5-pro for gRPC) [Development only]',
59
- }),
60
- verbose: Flags.boolean({
61
- char: 'v',
62
- default: false,
63
- description: 'Enable verbose debug output for prompt loading and agent operations [Development only]',
64
- }),
65
- }
66
- : {}),
67
- continue: Flags.boolean({
68
- char: 'c',
69
- description: 'Continue most recent session (requires prompt in headless mode)',
70
- }),
71
- interactive: Flags.boolean({
72
- allowNo: true,
73
- char: 'i',
74
- description: 'Enable interactive mode (auto-detected from TTY if not specified)',
75
- }),
76
- maxTokens: Flags.integer({
77
- char: 't',
78
- description: 'Maximum tokens in response (default: 8192)',
79
- }),
80
- resume: Flags.string({
81
- char: 'r',
82
- description: 'Resume specific session by ID (requires prompt in headless mode)',
83
- }),
84
- temperature: Flags.string({
85
- char: 'T',
86
- description: 'Temperature for randomness 0-1 (default: 0.2)',
87
- }),
88
- workingDirectory: Flags.string({
89
- char: 'w',
90
- description: 'Working directory for file operations (default: current directory)',
91
- }),
92
- };
93
- static hidden = !isDevelopment();
94
- terminal = {};
95
- // Override catch to prevent oclif from logging errors that were already displayed
96
- async catch(error) {
97
- // Check if error is ExitError (message already displayed by exitWithCode)
98
- if (error instanceof ExitError) {
99
- return;
100
- }
101
- // Backwards compatibility: also check oclif.exit property
102
- if (error.oclif?.exit !== undefined) {
103
- // Error already displayed by exitWithCode, silently exit
104
- return;
105
- }
106
- // For other errors, re-throw to let oclif handle them
107
- throw error;
108
- }
109
- createServices() {
110
- this.terminal = new OclifTerminal(this);
111
- return {
112
- projectConfigStore: new ProjectConfigStore(),
113
- };
114
- }
115
- /**
116
- * Generate a unique session ID with timestamp and random component.
117
- *
118
- * Format: "session-{timestamp}-{random}"
119
- * Example: "session-1731686400123-a7b3c9"
120
- *
121
- * @returns Unique session ID string
122
- */
123
- generateSessionId() {
124
- const timestamp = Date.now();
125
- const random = Math.random().toString(36).slice(2, 8);
126
- return `${timestamp}-${random}`;
127
- }
128
- /**
129
- * Get the most recent session ID from history storage.
130
- *
131
- * @param agent - CipherAgent instance
132
- * @returns Most recent session ID or undefined if no sessions found
133
- */
134
- async getMostRecentSessionId(agent) {
135
- // Get all session IDs from persisted storage
136
- const sessionIds = await agent.listPersistedSessions();
137
- if (sessionIds.length === 0) {
138
- return undefined;
139
- }
140
- // Get metadata for all sessions to find most recent
141
- let mostRecentId;
142
- let mostRecentActivity = 0;
143
- for (const sessionId of sessionIds) {
144
- // eslint-disable-next-line no-await-in-loop -- Sequential metadata loading required
145
- const metadata = await agent.getSessionMetadata(sessionId);
146
- if (metadata && metadata.lastActivity > mostRecentActivity) {
147
- mostRecentActivity = metadata.lastActivity;
148
- mostRecentId = sessionId;
149
- }
150
- }
151
- return mostRecentId;
152
- }
153
- // eslint-disable-next-line complexity
154
- async run() {
155
- // Load services first to initialize terminal
156
- const { projectConfigStore } = this.createServices();
157
- if (!isDevelopment()) {
158
- this.terminal.error('This command is only available in development environment');
159
- return;
160
- }
161
- const { args, flags } = await this.parse(CipherAgentRun);
162
- try {
163
- // Get authentication token from keychain
164
- const tokenStore = new KeychainTokenStore();
165
- const token = await tokenStore.load();
166
- if (!token) {
167
- exitWithCode(ExitCode.CONFIG_ERROR, 'Authentication required. Please run "brv login" first.');
168
- }
169
- // Construct the prompt
170
- const currentPrompt = args.prompt || ''; // Will be handled by interactive mode if empty
171
- // Determine interactive mode
172
- // Priority: explicit flag > TTY detection
173
- const isInteractive = flags.interactive === undefined
174
- ? process.stdin.isTTY === true // Auto-detect from TTY
175
- : flags.interactive; // User explicitly set --interactive or --no-interactive
176
- // Validate prompt requirement for non-interactive mode
177
- if (!isInteractive && !currentPrompt) {
178
- this.terminal.error('Prompt is required in non-interactive mode. Use --interactive flag for interactive mode.');
179
- }
180
- // Validate flags: In headless mode, prompt is required for session continuation
181
- if ((flags.continue || flags.resume) && !isInteractive && !args.prompt) {
182
- this.terminal.error('Session continuation flags (-c/--continue or -r/--resume) require a prompt in headless mode.');
183
- }
184
- // Load ByteRover config to get custom system prompt (if configured)
185
- const brvConfig = await projectConfigStore.read();
186
- // Validate workspace is initialized
187
- if (!brvConfig) {
188
- throw new WorkspaceNotInitializedError('Project not initialized. Please run "brv init" to select your team and workspace.', '.brv');
189
- }
190
- // Create LLM configuration
191
- const llmConfig = this.createLLMConfig({ ...token, spaceId: brvConfig?.spaceId ?? '', teamId: brvConfig?.teamId ?? '' }, flags);
192
- // Create CipherAgent with service factory pattern
193
- const agent = new CipherAgent(llmConfig, brvConfig);
194
- this.terminal.log('Starting CipherAgent...');
195
- await agent.start();
196
- try {
197
- // Resolve session ID based on flags
198
- const resolvedSessionId = await this.resolveSessionId(agent, flags);
199
- // Setup event listeners
200
- this.setupEventListeners(agent, isInteractive);
201
- if (isInteractive) {
202
- // Interactive mode: start the loop with event bus for spinner
203
- await startInteractiveLoop(agent, {
204
- eventBus: agent.agentEventBus,
205
- model: llmConfig.model,
206
- sessionId: resolvedSessionId,
207
- });
208
- }
209
- else {
210
- // Non-interactive mode: single execution
211
- if (!currentPrompt) {
212
- this.terminal.error('Prompt is required in non-interactive mode.');
213
- }
214
- this.terminal.log('Executing prompt...');
215
- const response = await agent.execute(currentPrompt, resolvedSessionId);
216
- this.terminal.log('\nCipherAgent Response:');
217
- this.terminal.log(response);
218
- // Show agent state
219
- const state = agent.getState();
220
- this.terminal.log(`\n[Agent State: ${state.currentIteration} iterations]`);
221
- }
222
- }
223
- finally {
224
- // await agent.stop()
225
- }
226
- }
227
- catch (error) {
228
- // Handle workspace not initialized error with friendly message
229
- if (error instanceof WorkspaceNotInitializedError) {
230
- this.handleWorkspaceError(error);
231
- return;
232
- }
233
- // Handle graceful exit (Ctrl+C) - exit silently without error
234
- const errorMessage = error instanceof Error ? error.message : String(error);
235
- if (errorMessage.includes('Readline closed')) {
236
- // Silent exit - cleanup already happened
237
- return;
238
- }
239
- // Generic error handling with proper exit code
240
- exitWithCode(ExitCode.RUNTIME_ERROR, `Failed to execute CipherAgent: ${errorMessage}`);
241
- }
242
- }
243
- /**
244
- * Validate that a session exists in storage.
245
- *
246
- * @param agent - CipherAgent instance
247
- * @param sessionId - Session ID to validate
248
- * @returns True if session exists
249
- */
250
- async validateSessionExists(agent, sessionId) {
251
- const metadata = await agent.getSessionMetadata(sessionId);
252
- return metadata !== undefined;
253
- }
254
- /**
255
- * Create LLM configuration from flags and environment
256
- *
257
- * @param token - Authentication token
258
- * @param token.accessToken - Access token for authentication
259
- * @param token.sessionKey - Session key for authentication
260
- * @param token.spaceId - Space ID for the session
261
- * @param token.teamId - Team ID for the session
262
- * @param flags - Command flags
263
- * @param flags.apiKey - OpenRouter API key for direct service (optional)
264
- * @param flags.maxTokens - Maximum tokens in response
265
- * @param flags.model - Model to use
266
- * @param flags.temperature - Temperature for randomness
267
- * @param flags.verbose - Enable verbose debug output
268
- * @param flags.workingDirectory - Working directory for file operations
269
- * @returns LLM configuration object
270
- */
271
- createLLMConfig(token, flags) {
272
- // Default model: google/gemini-2.5-pro for OpenRouter, gemini-2.5-pro for HTTP
273
- const model = flags.model ?? (flags.apiKey ? 'google/gemini-2.5-pro' : 'gemini-2.5-pro');
274
- const envConfig = getCurrentConfig();
275
- return {
276
- accessToken: token.accessToken,
277
- apiBaseUrl: envConfig.llmApiBaseUrl,
278
- fileSystemConfig: flags.workingDirectory ? { workingDirectory: flags.workingDirectory } : undefined,
279
- maxIterations: 10, // Hardcoded default
280
- maxTokens: flags.maxTokens ?? 8192, // Default: 8192
281
- model,
282
- openRouterApiKey: flags.apiKey, // Map -k flag to OpenRouter API key
283
- projectId: PROJECT,
284
- sessionKey: token.sessionKey,
285
- spaceId: token.spaceId,
286
- teamId: token.teamId,
287
- temperature: flags.temperature ? Number.parseFloat(flags.temperature) : 0.2, // Default: 0.2
288
- verbose: flags.verbose ?? false,
289
- };
290
- }
291
- /**
292
- * Format curate tool result summary
293
- *
294
- * @param result - Tool result data
295
- * @returns Formatted summary string or empty
296
- */
297
- formatCurateResult(result) {
298
- if (typeof result !== 'string') {
299
- return '';
300
- }
301
- try {
302
- const parsed = JSON.parse(result);
303
- if (!parsed.summary) {
304
- return '';
305
- }
306
- const { added = 0, deleted = 0, failed = 0, merged = 0, updated = 0 } = parsed.summary;
307
- const parts = [];
308
- if (added > 0)
309
- parts.push(`${added} added`);
310
- if (updated > 0)
311
- parts.push(`${updated} updated`);
312
- if (merged > 0)
313
- parts.push(`${merged} merged`);
314
- if (deleted > 0)
315
- parts.push(`${deleted} deleted`);
316
- if (failed > 0)
317
- parts.push(`${failed} failed`);
318
- return parts.length > 0 ? parts.join(', ') : 'No operations';
319
- }
320
- catch {
321
- return '';
322
- }
323
- }
324
- /**
325
- * Format find_knowledge_topics tool result summary
326
- *
327
- * @param result - Tool result data
328
- * @returns Formatted summary string or empty
329
- */
330
- formatFindKnowledgeTopicsResult(result) {
331
- if (typeof result !== 'string') {
332
- return '';
333
- }
334
- try {
335
- const parsed = JSON.parse(result);
336
- const count = Array.isArray(parsed) ? parsed.length : Object.keys(parsed).length;
337
- return `${count} topics retrieved`;
338
- }
339
- catch {
340
- return '';
341
- }
342
- }
343
- /**
344
- * Format grep_content tool result summary
345
- *
346
- * @param result - Tool result data
347
- * @returns Formatted summary string or empty
348
- */
349
- formatGrepContentResult(result) {
350
- if (typeof result !== 'string') {
351
- return '';
352
- }
353
- const lines = result.split('\n').filter((line) => line.trim());
354
- return `${lines.length} matches found`;
355
- }
356
- /**
357
- * Format list_directory tool result summary
358
- *
359
- * @param result - Tool result data
360
- * @returns Formatted summary string or empty
361
- */
362
- formatListDirectoryResult(result) {
363
- if (typeof result !== 'string') {
364
- return '';
365
- }
366
- const lines = result.split('\n').filter((line) => line.trim());
367
- return `${lines.length} items`;
368
- }
369
- /**
370
- * Format tool call for concise display in interactive mode
371
- *
372
- * @param toolName - Name of the tool
373
- * @param args - Tool arguments
374
- * @returns Formatted string for display
375
- */
376
- formatToolForInteractive(toolName, args) {
377
- // Provide user-friendly action descriptions
378
- switch (toolName) {
379
- case 'bash_exec': {
380
- const cmd = String(args.command ?? '');
381
- // Truncate long commands but keep readable
382
- return cmd.length > 60 ? `Running command...` : `Running: ${cmd}`;
383
- }
384
- case 'create_knowledge_topic': {
385
- return 'Creating knowledge topic...';
386
- }
387
- case 'curate': {
388
- return 'Curating knowledge topics...';
389
- }
390
- case 'find_knowledge_topics': {
391
- return 'Querying knowledge base...';
392
- }
393
- case 'grep_content': {
394
- return 'Searching context tree...';
395
- }
396
- case 'list_directory': {
397
- return 'Listing directory...';
398
- }
399
- case 'read_file': {
400
- return `Reading file...`;
401
- }
402
- case 'update_knowledge_topic': {
403
- return 'Updating knowledge topic...';
404
- }
405
- case 'write_file': {
406
- return 'Writing file...';
407
- }
408
- default: {
409
- // For other tools, use a generic format
410
- return 'Processing...';
411
- }
412
- }
413
- }
414
- /**
415
- * Format tool result summary for display
416
- *
417
- * @param toolName - Name of the tool
418
- * @param result - Tool result data
419
- * @returns Formatted summary string or empty if no summary needed
420
- */
421
- formatToolResultSummary(toolName, result) {
422
- switch (toolName) {
423
- case 'curate': {
424
- return this.formatCurateResult(result);
425
- }
426
- case 'find_knowledge_topics': {
427
- return this.formatFindKnowledgeTopicsResult(result);
428
- }
429
- case 'grep_content': {
430
- return this.formatGrepContentResult(result);
431
- }
432
- case 'list_directory': {
433
- return this.formatListDirectoryResult(result);
434
- }
435
- default: {
436
- return '';
437
- }
438
- }
439
- }
440
- /**
441
- * Handle workspace not initialized error with friendly message
442
- *
443
- * @param _error - WorkspaceNotInitializedError instance (unused, kept for type safety)
444
- */
445
- handleWorkspaceError(_error) {
446
- const message = 'Project not initialized. Please run "brv init" to select your team and workspace.';
447
- exitWithCode(ExitCode.VALIDATION_ERROR, message);
448
- }
449
- /**
450
- * Resolve session ID based on flags
451
- *
452
- * @param agent - CipherAgent instance
453
- * @param flags - Command flags
454
- * @param flags.continue - Continue most recent session flag
455
- * @param flags.resume - Resume specific session flag
456
- * @returns Resolved session ID
457
- */
458
- async resolveSessionId(agent, flags) {
459
- // Validate flags: -c and -r are mutually exclusive
460
- if (flags.continue && flags.resume) {
461
- exitWithCode(ExitCode.VALIDATION_ERROR, 'Cannot use both -c/--continue and -r/--resume flags together. Choose one.');
462
- }
463
- if (flags.resume) {
464
- // Resume specific session by ID
465
- const sessionExists = await this.validateSessionExists(agent, flags.resume);
466
- if (!sessionExists) {
467
- exitWithCode(ExitCode.VALIDATION_ERROR, `Session '${flags.resume}' not found. Use 'brv cipher-agent sessions' to see available sessions.`);
468
- }
469
- const metadata = await agent.getSessionMetadata(flags.resume);
470
- this.terminal.log(`📌 Resuming session: ${flags.resume} (${metadata?.messageCount ?? 0} messages)\n`);
471
- return flags.resume;
472
- }
473
- if (flags.continue) {
474
- // Continue most recent session
475
- const mostRecentSessionId = await this.getMostRecentSessionId(agent);
476
- if (!mostRecentSessionId) {
477
- exitWithCode(ExitCode.VALIDATION_ERROR, 'No previous sessions found. Start a new conversation without -c flag.');
478
- }
479
- const metadata = await agent.getSessionMetadata(mostRecentSessionId);
480
- this.terminal.log(`📌 Continuing most recent session: ${mostRecentSessionId} (${metadata?.messageCount ?? 0} messages)\n`);
481
- return mostRecentSessionId;
482
- }
483
- // No continuation flags: generate new unique session ID
484
- const newSessionId = this.generateSessionId();
485
- this.terminal.log(`🚀 Starting new session: ${newSessionId}\n`);
486
- return newSessionId;
487
- }
488
- /**
489
- * Setup event listeners based on mode
490
- *
491
- * @param agent - CipherAgent instance
492
- * @param isInteractive - Whether in interactive mode
493
- */
494
- setupEventListeners(agent, isInteractive) {
495
- if (!agent.agentEventBus) {
496
- throw new Error('Agent event bus not initialized');
497
- }
498
- const eventBus = agent.agentEventBus;
499
- if (isInteractive) {
500
- // In interactive mode, show concise tool events for transparency
501
- eventBus.on('llmservice:toolCall', (payload) => {
502
- const details = this.formatToolForInteractive(payload.toolName, payload.args);
503
- // Clean format: 🔧 tool_name → Action description...
504
- displayInfo(`🔧 ${payload.toolName} → ${details}`);
505
- });
506
- eventBus.on('llmservice:toolResult', (payload) => {
507
- if (payload.success) {
508
- // Clean format: ✅ tool_name → Complete (with optional summary)
509
- const summary = this.formatToolResultSummary(payload.toolName, payload.result);
510
- displayInfo(summary ? `✅ ${payload.toolName} → Complete (${summary})` : `✅ ${payload.toolName} → Complete`);
511
- }
512
- else {
513
- // Clean format: ❌ tool_name → Failed: error message
514
- const errorMessage = payload.error || 'Unknown error';
515
- displayInfo(`❌ ${payload.toolName} → Failed: ${errorMessage}`);
516
- }
517
- });
518
- eventBus.on('llmservice:error', (payload) => {
519
- const errorMessage = payload.error || 'Unknown error occurred';
520
- displayInfo(`❌ Error: ${errorMessage}`);
521
- });
522
- eventBus.on('cipher:conversationReset', () => {
523
- displayInfo('🔄 Conversation history cleared');
524
- });
525
- return;
526
- }
527
- // In non-interactive mode, show verbose event logs for debugging
528
- eventBus.on('llmservice:thinking', () => {
529
- this.terminal.log('🤔 [Event] LLM is thinking...');
530
- });
531
- eventBus.on('llmservice:response', (payload) => {
532
- this.terminal.log(`✅ [Event] LLM Response (${payload.provider}/${payload.model})`);
533
- });
534
- eventBus.on('llmservice:toolCall', (payload) => {
535
- const formattedCall = formatToolCall(payload.toolName, payload.args);
536
- this.terminal.log(`🔧 [Event] Tool Call: ${formattedCall}`);
537
- });
538
- eventBus.on('llmservice:toolResult', (payload) => {
539
- const resultSummary = formatToolResult(payload.toolName, payload.success, payload.result, payload.error);
540
- if (payload.success) {
541
- this.terminal.log(`✓ [Event] Tool Success: ${payload.toolName} → ${resultSummary}`);
542
- }
543
- else {
544
- this.terminal.log(`✗ [Event] Tool Error: ${payload.toolName} → ${resultSummary}`);
545
- }
546
- });
547
- eventBus.on('llmservice:error', (payload) => {
548
- const errorMessage = payload.error || 'Unknown error occurred';
549
- this.terminal.log(`❌ [Event] LLM Error: ${errorMessage}`);
550
- });
551
- eventBus.on('cipher:conversationReset', () => {
552
- this.terminal.log('🔄 [Event] Conversation Reset');
553
- });
554
- }
555
- }
@@ -1,16 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
3
- import type { ITerminal } from '../../core/interfaces/i-terminal.js';
4
- export default class CipherAgentSetPrompt extends Command {
5
- static args: {
6
- prompt: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- };
8
- static description: string;
9
- static examples: string[];
10
- static hidden: boolean;
11
- protected terminal: ITerminal;
12
- protected createServices(): {
13
- projectConfigStore: IProjectConfigStore;
14
- };
15
- run(): Promise<void>;
16
- }
@@ -1,58 +0,0 @@
1
- import { Args, Command } from '@oclif/core';
2
- import { isDevelopment } from '../../config/environment.js';
3
- import { BrvConfig } from '../../core/domain/entities/brv-config.js';
4
- import { ProjectConfigStore } from '../../infra/config/file-config-store.js';
5
- import { OclifTerminal } from '../../infra/terminal/oclif-terminal.js';
6
- import { getErrorMessage } from '../../utils/error-helpers.js';
7
- export default class CipherAgentSetPrompt extends Command {
8
- static args = {
9
- prompt: Args.string({ description: 'The system prompt for CipherAgent', required: true }),
10
- };
11
- static description = 'Set custom system prompt for CipherAgent [Development only]';
12
- static examples = [
13
- '<%= config.bin %> <%= command.id %> "You are a helpful coding assistant specialized in TypeScript"',
14
- '<%= config.bin %> <%= command.id %> "You are an expert in refactoring and code quality improvements"',
15
- ];
16
- static hidden = !isDevelopment();
17
- terminal = {};
18
- createServices() {
19
- this.terminal = new OclifTerminal(this);
20
- return {
21
- projectConfigStore: new ProjectConfigStore(),
22
- };
23
- }
24
- async run() {
25
- const { projectConfigStore } = this.createServices();
26
- if (!isDevelopment()) {
27
- this.terminal.error('This command is only available in development environment');
28
- return;
29
- }
30
- const { args } = await this.parse(CipherAgentSetPrompt);
31
- try {
32
- // Check if config exists
33
- const configExists = await projectConfigStore.exists();
34
- if (!configExists) {
35
- this.terminal.error('No ByteRover config found. Please run "byterover init" first to initialize the project.');
36
- }
37
- // Read existing config
38
- const existingConfig = await projectConfigStore.read();
39
- if (!existingConfig) {
40
- this.terminal.error('Failed to read existing config.');
41
- return;
42
- }
43
- // Create updated config with new system prompt
44
- const updatedConfig = new BrvConfig({
45
- ...existingConfig,
46
- cipherAgentSystemPrompt: args.prompt,
47
- });
48
- // Write updated config
49
- await projectConfigStore.write(updatedConfig);
50
- this.terminal.log('✓ CipherAgent system prompt updated successfully!');
51
- this.terminal.log('\nNew prompt:');
52
- this.terminal.log(args.prompt);
53
- }
54
- catch (error) {
55
- this.terminal.error(`Failed to set system prompt: ${getErrorMessage(error)}`);
56
- }
57
- }
58
- }
@@ -1,13 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- import type { IProjectConfigStore } from '../../core/interfaces/i-project-config-store.js';
3
- import type { ITerminal } from '../../core/interfaces/i-terminal.js';
4
- export default class CipherAgentShowPrompt extends Command {
5
- static description: string;
6
- static examples: string[];
7
- static hidden: boolean;
8
- protected terminal: ITerminal;
9
- protected createServices(): {
10
- projectConfigStore: IProjectConfigStore;
11
- };
12
- run(): Promise<void>;
13
- }