byterover-cli 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +63 -3
  18. package/dist/commands/init.js +285 -70
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/pull.d.ts +33 -0
  21. package/dist/commands/pull.js +115 -0
  22. package/dist/commands/push.d.ts +13 -13
  23. package/dist/commands/push.js +81 -101
  24. package/dist/commands/query.d.ts +63 -0
  25. package/dist/commands/query.js +349 -0
  26. package/dist/commands/space/list.d.ts +5 -2
  27. package/dist/commands/space/list.js +60 -56
  28. package/dist/commands/space/switch.d.ts +16 -0
  29. package/dist/commands/space/switch.js +102 -53
  30. package/dist/commands/status.d.ts +5 -2
  31. package/dist/commands/status.js +43 -33
  32. package/dist/commands/watch.d.ts +23 -0
  33. package/dist/commands/watch.js +171 -0
  34. package/dist/config/auth.config.js +14 -2
  35. package/dist/config/context-tree-domains.d.ts +12 -0
  36. package/dist/config/context-tree-domains.js +29 -0
  37. package/dist/config/environment.d.ts +6 -0
  38. package/dist/config/environment.js +9 -2
  39. package/dist/constants.d.ts +5 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  42. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  43. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  44. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  45. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  46. package/dist/core/domain/cipher/agent/index.js +7 -0
  47. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  48. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  50. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  51. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  52. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  53. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  54. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  55. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  56. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  57. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  58. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  59. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  60. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  61. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  62. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  63. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  64. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  65. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  66. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  67. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  68. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  69. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  70. package/dist/core/domain/cipher/memory/types.js +4 -0
  71. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  72. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  73. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  74. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  75. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  76. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  77. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  78. package/dist/core/domain/cipher/todos/index.js +4 -0
  79. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  80. package/dist/core/domain/cipher/todos/types.js +5 -0
  81. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  82. package/dist/core/domain/cipher/tools/constants.js +24 -0
  83. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  84. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  85. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  86. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  87. package/dist/core/domain/entities/brv-config.js +115 -17
  88. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  89. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  90. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  91. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  92. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  93. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  94. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  95. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  96. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  97. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  98. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  99. package/dist/core/domain/entities/context-tree-index.js +27 -0
  100. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  101. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  102. package/dist/core/domain/entities/event.d.ts +1 -1
  103. package/dist/core/domain/entities/event.js +3 -1
  104. package/dist/core/domain/entities/parser.d.ts +567 -0
  105. package/dist/core/domain/entities/parser.js +10 -0
  106. package/dist/core/domain/entities/playbook.d.ts +2 -23
  107. package/dist/core/domain/entities/playbook.js +2 -70
  108. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  109. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  110. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  111. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  112. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  113. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  114. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  115. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  116. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  117. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  118. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  119. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  120. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  121. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  122. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  123. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  124. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  125. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  128. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  129. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  130. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  131. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  132. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  133. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  134. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  135. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  136. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  137. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  139. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  140. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  141. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  142. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  143. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  144. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  145. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  146. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  147. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  148. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  149. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  150. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  151. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  153. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  155. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  156. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  157. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  158. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  159. package/dist/core/interfaces/cipher/message-types.js +5 -0
  160. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  161. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  162. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  163. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  164. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  165. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  166. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  167. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  168. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  169. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  171. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  173. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  174. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  175. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  176. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  177. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  178. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  179. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  180. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  181. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  182. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  183. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  184. package/dist/hooks/error/clean-errors.d.ts +7 -0
  185. package/dist/hooks/error/clean-errors.js +50 -0
  186. package/dist/hooks/init/welcome.js +72 -1
  187. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  188. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  189. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  190. package/dist/infra/cipher/agent-service-factory.js +212 -0
  191. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  192. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  193. package/dist/infra/cipher/blob/index.d.ts +10 -0
  194. package/dist/infra/cipher/blob/index.js +12 -0
  195. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  196. package/dist/infra/cipher/blob/migrations.js +148 -0
  197. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  198. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  199. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  200. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  201. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  202. package/dist/infra/cipher/cipher-agent.js +317 -0
  203. package/dist/infra/cipher/command-parser.d.ts +23 -0
  204. package/dist/infra/cipher/command-parser.js +85 -0
  205. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  206. package/dist/infra/cipher/display/todo-display.js +129 -0
  207. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  208. package/dist/infra/cipher/events/event-emitter.js +158 -0
  209. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  210. package/dist/infra/cipher/exit-codes.js +58 -0
  211. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  212. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  213. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  214. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  215. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  216. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  217. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  218. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  219. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  220. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  221. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  222. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  223. package/dist/infra/cipher/interactive-commands.js +198 -0
  224. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  225. package/dist/infra/cipher/interactive-loop.js +352 -0
  226. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  227. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  228. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  229. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  230. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  231. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  232. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  233. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  234. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  235. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  236. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  237. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  238. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  239. package/dist/infra/cipher/llm/context/index.js +2 -0
  240. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  241. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  242. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  243. package/dist/infra/cipher/llm/context/utils.js +89 -0
  244. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  245. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  246. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  247. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  248. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  249. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  250. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  251. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  252. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  253. package/dist/infra/cipher/llm/generators/index.js +13 -0
  254. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  255. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  256. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  257. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  258. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  259. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  260. package/dist/infra/cipher/llm/index.d.ts +9 -0
  261. package/dist/infra/cipher/llm/index.js +13 -0
  262. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  263. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  264. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  265. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  266. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  267. package/dist/infra/cipher/llm/response-validator.js +157 -0
  268. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  269. package/dist/infra/cipher/llm/retry/index.js +10 -0
  270. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  271. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  272. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  273. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  274. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  275. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  276. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  277. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  278. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  279. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  280. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  281. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  282. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  283. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  284. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  285. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  286. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  287. package/dist/infra/cipher/logger/console-logger.js +63 -0
  288. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  289. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  290. package/dist/infra/cipher/memory/index.d.ts +6 -0
  291. package/dist/infra/cipher/memory/index.js +7 -0
  292. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  293. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  294. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  295. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  296. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  297. package/dist/infra/cipher/process/command-validator.js +266 -0
  298. package/dist/infra/cipher/process/index.d.ts +8 -0
  299. package/dist/infra/cipher/process/index.js +8 -0
  300. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  301. package/dist/infra/cipher/process/process-service.js +439 -0
  302. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  303. package/dist/infra/cipher/session/chat-session.js +165 -0
  304. package/dist/infra/cipher/session/index.d.ts +6 -0
  305. package/dist/infra/cipher/session/index.js +5 -0
  306. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  307. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  308. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  309. package/dist/infra/cipher/session/session-manager.js +172 -0
  310. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  311. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  312. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  313. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  314. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  315. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  316. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  317. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  318. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  319. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  320. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  321. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  322. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  323. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  324. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  326. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  327. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  328. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  329. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  330. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  331. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  332. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  333. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  334. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  335. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  336. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  337. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  338. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  339. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  340. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  342. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  344. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  346. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  347. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  348. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  350. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  351. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  352. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  353. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  354. package/dist/infra/cipher/tools/index.d.ts +18 -0
  355. package/dist/infra/cipher/tools/index.js +19 -0
  356. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  357. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  358. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  359. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  360. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  361. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  362. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  363. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  364. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  365. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  366. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  367. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  368. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  369. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  370. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  371. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  372. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  373. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  374. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  375. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  376. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  377. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  378. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  379. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  380. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  381. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  382. package/dist/infra/config/file-config-store.js +9 -3
  383. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  384. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  385. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  386. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  387. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  388. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  389. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  390. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  391. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  392. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  393. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  394. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  395. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  396. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  397. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  398. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  399. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  400. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  401. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  402. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  403. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  404. package/dist/infra/parsers/clean/shared.js +273 -0
  405. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  406. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  407. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  408. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  409. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  410. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  411. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  412. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  413. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  414. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  415. package/dist/infra/space/http-space-service.js +2 -1
  416. package/dist/infra/team/http-team-service.js +2 -1
  417. package/dist/infra/user/http-user-service.js +2 -1
  418. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  419. package/dist/infra/watcher/file-watcher-service.js +81 -0
  420. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  421. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  422. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  423. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  424. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  425. package/dist/resources/prompts/reflection.yml +27 -0
  426. package/dist/resources/prompts/system-prompt.yml +82 -0
  427. package/dist/resources/prompts/tool-outputs.yml +30 -0
  428. package/dist/templates/README.md +6 -7
  429. package/dist/templates/sections/command-reference.md +40 -111
  430. package/dist/templates/sections/workflow.md +3 -30
  431. package/dist/utils/emoji-helpers.d.ts +38 -0
  432. package/dist/utils/emoji-helpers.js +42 -0
  433. package/dist/utils/error-handler.d.ts +51 -0
  434. package/dist/utils/error-handler.js +169 -0
  435. package/dist/utils/error-helpers.d.ts +30 -0
  436. package/dist/utils/error-helpers.js +47 -0
  437. package/dist/utils/file-helpers.d.ts +15 -0
  438. package/dist/utils/file-helpers.js +44 -0
  439. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  440. package/dist/utils/oclif-error-helpers.js +46 -0
  441. package/dist/utils/tool-display-formatter.d.ts +53 -0
  442. package/dist/utils/tool-display-formatter.js +257 -0
  443. package/oclif.manifest.json +381 -141
  444. package/package.json +27 -6
  445. package/dist/commands/add.d.ts +0 -49
  446. package/dist/commands/add.js +0 -192
  447. package/dist/commands/complete.d.ts +0 -108
  448. package/dist/commands/complete.js +0 -340
  449. package/dist/commands/retrieve.d.ts +0 -26
  450. package/dist/commands/retrieve.js +0 -101
  451. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  452. package/dist/core/domain/entities/curator-output.js +0 -23
  453. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  454. package/dist/core/domain/entities/delta-batch.js +0 -52
  455. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  456. package/dist/core/domain/entities/delta-operation.js +0 -50
  457. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  458. package/dist/core/domain/entities/executor-output.js +0 -33
  459. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  460. package/dist/core/domain/entities/reflector-output.js +0 -44
  461. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  462. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  463. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  464. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  465. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  466. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  467. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  468. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  469. package/dist/infra/ace/ace-file-utils.js +0 -83
  470. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  471. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  472. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  473. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  474. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  475. package/dist/infra/ace/file-delta-store.js +0 -26
  476. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  477. package/dist/infra/ace/file-executor-output-store.js +0 -26
  478. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  479. package/dist/infra/ace/file-playbook-store.js +0 -107
  480. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  481. package/dist/infra/ace/file-reflection-store.js +0 -55
  482. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  483. package/dist/infra/playbook/file-playbook-service.js +0 -132
  484. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  485. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  486. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  487. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  488. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  489. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  490. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * ByteRover Content Generator.
3
+ *
4
+ * Implements IContentGenerator using ByteRover gRPC service.
5
+ * Supports both Claude and Gemini models through the unified gRPC interface.
6
+ */
7
+ import { ClaudeMessageFormatter } from '../formatters/claude-formatter.js';
8
+ import { GeminiMessageFormatter } from '../formatters/gemini-formatter.js';
9
+ import { ThinkingConfigManager } from '../thought-parser.js';
10
+ import { ClaudeTokenizer } from '../tokenizers/claude-tokenizer.js';
11
+ import { GeminiTokenizer } from '../tokenizers/gemini-tokenizer.js';
12
+ /**
13
+ * ByteRover Content Generator.
14
+ *
15
+ * Wraps ByteRoverLlmGrpcService and implements IContentGenerator.
16
+ * Handles:
17
+ * - Provider detection (Claude vs Gemini)
18
+ * - Message formatting via provider-specific formatters
19
+ * - Token estimation via provider-specific tokenizers
20
+ * - Response parsing to unified format
21
+ */
22
+ export class ByteRoverContentGenerator {
23
+ config;
24
+ formatter;
25
+ grpcService;
26
+ providerType;
27
+ tokenizer;
28
+ /**
29
+ * Create a new ByteRover Content Generator.
30
+ *
31
+ * @param grpcService - Configured gRPC service for LLM API calls
32
+ * @param config - Generator configuration
33
+ */
34
+ constructor(grpcService, config) {
35
+ this.grpcService = grpcService;
36
+ this.config = {
37
+ maxTokens: config.maxTokens ?? 8192,
38
+ model: config.model,
39
+ temperature: config.temperature ?? 0.7,
40
+ thinkingConfig: config.thinkingConfig,
41
+ };
42
+ // Detect provider type from model name
43
+ this.providerType = this.detectProviderType(this.config.model);
44
+ // Initialize formatter and tokenizer based on provider type
45
+ if (this.providerType === 'claude') {
46
+ this.formatter = new ClaudeMessageFormatter();
47
+ this.tokenizer = new ClaudeTokenizer(this.config.model);
48
+ }
49
+ else {
50
+ this.formatter = new GeminiMessageFormatter();
51
+ this.tokenizer = new GeminiTokenizer(this.config.model);
52
+ }
53
+ }
54
+ /**
55
+ * Estimate tokens synchronously using character-based approximation.
56
+ *
57
+ * @param content - Text to estimate tokens for
58
+ * @returns Estimated token count
59
+ */
60
+ estimateTokensSync(content) {
61
+ return this.tokenizer.countTokens(content);
62
+ }
63
+ /**
64
+ * Generate content (non-streaming).
65
+ *
66
+ * @param request - Generation request
67
+ * @returns Generated content response
68
+ */
69
+ async generateContent(request) {
70
+ // Format messages for provider
71
+ const formattedMessages = this.formatter.format(request.contents);
72
+ // Build generation config
73
+ const genConfig = this.buildGenerationConfig(request.tools ?? {}, request.systemPrompt ?? '', formattedMessages);
74
+ // Call gRPC service
75
+ const contents = this.providerType === 'claude' ? genConfig : formattedMessages;
76
+ const config = this.providerType === 'claude' ? {} : genConfig;
77
+ // Build execution metadata from request
78
+ const executionMetadata = {
79
+ sessionId: request.sessionId,
80
+ ...(request.mode && { mode: request.mode }),
81
+ ...(request.executionContext && { executionContext: request.executionContext }),
82
+ };
83
+ const rawResponse = await this.grpcService.generateContent(contents, config, this.config.model, executionMetadata);
84
+ // Parse response to internal format
85
+ const messages = this.formatter.parseResponse(rawResponse);
86
+ const lastMessage = messages.at(-1);
87
+ if (!lastMessage) {
88
+ return {
89
+ content: '',
90
+ finishReason: 'error',
91
+ rawResponse,
92
+ toolCalls: [],
93
+ };
94
+ }
95
+ // Extract content and tool calls
96
+ const content = this.extractTextContent(lastMessage);
97
+ const toolCalls = lastMessage.toolCalls ?? [];
98
+ // Determine finish reason
99
+ let finishReason = 'stop';
100
+ if (toolCalls.length > 0) {
101
+ finishReason = 'tool_calls';
102
+ }
103
+ return {
104
+ content,
105
+ finishReason,
106
+ rawResponse,
107
+ toolCalls,
108
+ };
109
+ }
110
+ /**
111
+ * Generate content with streaming.
112
+ *
113
+ * Note: The current gRPC service collects all chunks before returning.
114
+ * This implementation yields the complete response as a single chunk.
115
+ * True streaming can be implemented when the gRPC service exposes the stream.
116
+ *
117
+ * @param request - Generation request
118
+ * @yields Content chunks as they are generated
119
+ * @returns Async generator yielding content chunks
120
+ */
121
+ async *generateContentStream(request) {
122
+ // For now, use non-streaming and yield complete response
123
+ // True streaming can be added when gRPC service exposes the stream
124
+ const response = await this.generateContent(request);
125
+ yield {
126
+ content: response.content,
127
+ finishReason: response.finishReason,
128
+ isComplete: true,
129
+ toolCalls: response.toolCalls,
130
+ };
131
+ }
132
+ /**
133
+ * Build Claude-specific generation configuration.
134
+ */
135
+ buildClaudeConfig(tools, systemPrompt, messages) {
136
+ /* eslint-disable camelcase */
137
+ const claudeTools = Object.entries(tools).map(([name, schema]) => ({
138
+ description: schema.description ?? '',
139
+ input_schema: schema.parameters,
140
+ name,
141
+ }));
142
+ return {
143
+ max_tokens: this.config.maxTokens,
144
+ messages,
145
+ model: this.config.model,
146
+ system: systemPrompt,
147
+ temperature: this.config.temperature,
148
+ ...(claudeTools.length > 0 && { tools: claudeTools }),
149
+ };
150
+ /* eslint-enable camelcase */
151
+ }
152
+ /**
153
+ * Build Gemini-specific generation configuration.
154
+ */
155
+ buildGeminiConfig(tools, systemPrompt) {
156
+ const toolDefinitions = Object.entries(tools).map(([name, schema]) => ({
157
+ description: schema.description ?? '',
158
+ name,
159
+ parameters: schema.parameters,
160
+ }));
161
+ const baseConfig = {
162
+ maxOutputTokens: this.config.maxTokens,
163
+ temperature: this.config.temperature,
164
+ topP: 1,
165
+ ...(systemPrompt && { systemInstruction: { parts: [{ text: systemPrompt }] } }),
166
+ ...(toolDefinitions.length > 0 && {
167
+ tools: [
168
+ {
169
+ functionDeclarations: toolDefinitions,
170
+ },
171
+ ],
172
+ }),
173
+ };
174
+ // Add thinking configuration for Gemini models
175
+ const thinkingConfig = ThinkingConfigManager.mergeConfig(this.config.model, this.config.thinkingConfig);
176
+ if (thinkingConfig) {
177
+ baseConfig.thinkingConfig = thinkingConfig;
178
+ }
179
+ return baseConfig;
180
+ }
181
+ /**
182
+ * Build generation config for the appropriate provider.
183
+ */
184
+ buildGenerationConfig(tools, systemPrompt, messages) {
185
+ if (this.providerType === 'claude') {
186
+ return this.buildClaudeConfig(tools, systemPrompt, messages);
187
+ }
188
+ return this.buildGeminiConfig(tools, systemPrompt);
189
+ }
190
+ /**
191
+ * Detect provider type from model name.
192
+ */
193
+ detectProviderType(model) {
194
+ return model.toLowerCase().startsWith('claude') ? 'claude' : 'gemini';
195
+ }
196
+ /**
197
+ * Extract text content from an internal message.
198
+ */
199
+ extractTextContent(message) {
200
+ if (typeof message.content === 'string') {
201
+ return message.content;
202
+ }
203
+ if (Array.isArray(message.content)) {
204
+ return message.content
205
+ .filter((part) => part.type === 'text')
206
+ .map((part) => (part.type === 'text' ? part.text : ''))
207
+ .join('');
208
+ }
209
+ return '';
210
+ }
211
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Content Generator exports.
3
+ *
4
+ * This module provides content generators implementing IContentGenerator:
5
+ * - ByteRoverContentGenerator: Uses ByteRover gRPC service
6
+ * - OpenRouterContentGenerator: Uses OpenRouter API (OpenAI-compatible)
7
+ * - LoggingContentGenerator: Decorator for debug logging
8
+ * - RetryableContentGenerator: Decorator for retry with backoff
9
+ */
10
+ export { ByteRoverContentGenerator, type ByteRoverContentGeneratorConfig } from './byterover-content-generator.js';
11
+ export { LoggingContentGenerator, type LoggingOptions } from './logging-content-generator.js';
12
+ export { OpenRouterContentGenerator, type OpenRouterContentGeneratorConfig } from './openrouter-content-generator.js';
13
+ export { RetryableContentGenerator, type RetryableOptions } from './retryable-content-generator.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Content Generator exports.
3
+ *
4
+ * This module provides content generators implementing IContentGenerator:
5
+ * - ByteRoverContentGenerator: Uses ByteRover gRPC service
6
+ * - OpenRouterContentGenerator: Uses OpenRouter API (OpenAI-compatible)
7
+ * - LoggingContentGenerator: Decorator for debug logging
8
+ * - RetryableContentGenerator: Decorator for retry with backoff
9
+ */
10
+ export { ByteRoverContentGenerator } from './byterover-content-generator.js';
11
+ export { LoggingContentGenerator } from './logging-content-generator.js';
12
+ export { OpenRouterContentGenerator } from './openrouter-content-generator.js';
13
+ export { RetryableContentGenerator } from './retryable-content-generator.js';
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Logging Content Generator Decorator.
3
+ *
4
+ * Wraps any IContentGenerator to add debug logging capabilities.
5
+ * Logs request/response metadata, timing, and errors.
6
+ */
7
+ import type { GenerateContentChunk, GenerateContentRequest, GenerateContentResponse, IContentGenerator } from '../../../../core/interfaces/cipher/i-content-generator.js';
8
+ import type { SessionEventBus } from '../../events/event-emitter.js';
9
+ /**
10
+ * Logging options for the decorator.
11
+ */
12
+ export interface LoggingOptions {
13
+ /** Log individual streaming chunks */
14
+ logChunks?: boolean;
15
+ /** Log request details */
16
+ logRequests?: boolean;
17
+ /** Log response details */
18
+ logResponses?: boolean;
19
+ /** Enable verbose logging (all options) */
20
+ verbose?: boolean;
21
+ }
22
+ /**
23
+ * Logging Content Generator.
24
+ *
25
+ * Decorator that wraps any IContentGenerator to add logging capabilities.
26
+ * Useful for debugging, monitoring, and performance analysis.
27
+ *
28
+ * Features:
29
+ * - Request/response logging with configurable verbosity
30
+ * - Timing information for all operations
31
+ * - Error logging with context
32
+ * - Event emission via SessionEventBus
33
+ */
34
+ export declare class LoggingContentGenerator implements IContentGenerator {
35
+ private readonly eventBus?;
36
+ private readonly inner;
37
+ private readonly options;
38
+ /**
39
+ * Create a new Logging Content Generator.
40
+ *
41
+ * @param inner - The wrapped content generator
42
+ * @param eventBus - Optional event bus for emitting events
43
+ * @param options - Logging options
44
+ */
45
+ constructor(inner: IContentGenerator, eventBus?: SessionEventBus, options?: LoggingOptions);
46
+ /**
47
+ * Estimate tokens (delegates to inner generator).
48
+ *
49
+ * @param content - Text to estimate tokens for
50
+ * @returns Estimated token count
51
+ */
52
+ estimateTokensSync(content: string): number;
53
+ /**
54
+ * Generate content with logging.
55
+ *
56
+ * @param request - Generation request
57
+ * @returns Generated content response
58
+ */
59
+ generateContent(request: GenerateContentRequest): Promise<GenerateContentResponse>;
60
+ /**
61
+ * Generate content with streaming and logging.
62
+ *
63
+ * @param request - Generation request
64
+ * @yields Content chunks as they are generated
65
+ * @returns Async generator yielding content chunks
66
+ */
67
+ generateContentStream(request: GenerateContentRequest): AsyncGenerator<GenerateContentChunk>;
68
+ /**
69
+ * Generate a unique request ID for tracking.
70
+ */
71
+ private generateRequestId;
72
+ /**
73
+ * Log a streaming chunk.
74
+ */
75
+ private logChunk;
76
+ /**
77
+ * Log an error that occurred during generation.
78
+ */
79
+ private logError;
80
+ /**
81
+ * Log a generation request.
82
+ */
83
+ private logRequest;
84
+ /**
85
+ * Log a generation response.
86
+ */
87
+ private logResponse;
88
+ /**
89
+ * Log streaming completion.
90
+ */
91
+ private logStreamComplete;
92
+ /**
93
+ * Check if chunks should be logged.
94
+ */
95
+ private shouldLogChunks;
96
+ /**
97
+ * Check if requests should be logged.
98
+ */
99
+ private shouldLogRequests;
100
+ /**
101
+ * Check if responses should be logged.
102
+ */
103
+ private shouldLogResponses;
104
+ }
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Logging Content Generator Decorator.
3
+ *
4
+ * Wraps any IContentGenerator to add debug logging capabilities.
5
+ * Logs request/response metadata, timing, and errors.
6
+ */
7
+ /**
8
+ * Logging Content Generator.
9
+ *
10
+ * Decorator that wraps any IContentGenerator to add logging capabilities.
11
+ * Useful for debugging, monitoring, and performance analysis.
12
+ *
13
+ * Features:
14
+ * - Request/response logging with configurable verbosity
15
+ * - Timing information for all operations
16
+ * - Error logging with context
17
+ * - Event emission via SessionEventBus
18
+ */
19
+ export class LoggingContentGenerator {
20
+ eventBus;
21
+ inner;
22
+ options;
23
+ /**
24
+ * Create a new Logging Content Generator.
25
+ *
26
+ * @param inner - The wrapped content generator
27
+ * @param eventBus - Optional event bus for emitting events
28
+ * @param options - Logging options
29
+ */
30
+ constructor(inner, eventBus, options = {}) {
31
+ this.inner = inner;
32
+ this.eventBus = eventBus;
33
+ this.options = options;
34
+ }
35
+ /**
36
+ * Estimate tokens (delegates to inner generator).
37
+ *
38
+ * @param content - Text to estimate tokens for
39
+ * @returns Estimated token count
40
+ */
41
+ estimateTokensSync(content) {
42
+ return this.inner.estimateTokensSync(content);
43
+ }
44
+ /**
45
+ * Generate content with logging.
46
+ *
47
+ * @param request - Generation request
48
+ * @returns Generated content response
49
+ */
50
+ async generateContent(request) {
51
+ const startTime = Date.now();
52
+ const requestId = this.generateRequestId();
53
+ this.logRequest(requestId, request);
54
+ this.eventBus?.emit('llmservice:thinking');
55
+ try {
56
+ const response = await this.inner.generateContent(request);
57
+ this.logResponse(requestId, response, Date.now() - startTime);
58
+ return response;
59
+ }
60
+ catch (error) {
61
+ this.logError(requestId, error, Date.now() - startTime);
62
+ throw error;
63
+ }
64
+ }
65
+ /**
66
+ * Generate content with streaming and logging.
67
+ *
68
+ * @param request - Generation request
69
+ * @yields Content chunks as they are generated
70
+ * @returns Async generator yielding content chunks
71
+ */
72
+ async *generateContentStream(request) {
73
+ const startTime = Date.now();
74
+ const requestId = this.generateRequestId();
75
+ this.logRequest(requestId, request);
76
+ this.eventBus?.emit('llmservice:thinking');
77
+ try {
78
+ let chunkCount = 0;
79
+ let totalContentLength = 0;
80
+ for await (const chunk of this.inner.generateContentStream(request)) {
81
+ chunkCount++;
82
+ if (chunk.content) {
83
+ totalContentLength += chunk.content.length;
84
+ }
85
+ if (this.shouldLogChunks()) {
86
+ this.logChunk(requestId, chunk, chunkCount);
87
+ }
88
+ yield chunk;
89
+ }
90
+ this.logStreamComplete(requestId, chunkCount, totalContentLength, Date.now() - startTime);
91
+ }
92
+ catch (error) {
93
+ this.logError(requestId, error, Date.now() - startTime);
94
+ throw error;
95
+ }
96
+ }
97
+ /**
98
+ * Generate a unique request ID for tracking.
99
+ */
100
+ generateRequestId() {
101
+ return Math.random().toString(36).slice(2, 8);
102
+ }
103
+ /**
104
+ * Log a streaming chunk.
105
+ */
106
+ logChunk(requestId, chunk, index) {
107
+ console.debug(`[LLM:${requestId}] Chunk #${index}`, {
108
+ contentLength: chunk.content?.length ?? 0,
109
+ finishReason: chunk.finishReason,
110
+ hasToolCalls: Boolean(chunk.toolCalls?.length),
111
+ isComplete: chunk.isComplete,
112
+ });
113
+ }
114
+ /**
115
+ * Log an error that occurred during generation.
116
+ */
117
+ logError(requestId, error, durationMs) {
118
+ const errorMessage = error instanceof Error ? error.message : String(error);
119
+ console.error(`[LLM:${requestId}] Error after ${durationMs}ms:`, errorMessage);
120
+ this.eventBus?.emit('llmservice:error', {
121
+ error: errorMessage,
122
+ });
123
+ }
124
+ /**
125
+ * Log a generation request.
126
+ */
127
+ logRequest(requestId, request) {
128
+ if (!this.shouldLogRequests()) {
129
+ return;
130
+ }
131
+ console.debug(`[LLM:${requestId}] Request`, {
132
+ hasSystemPrompt: Boolean(request.systemPrompt),
133
+ hasTools: Boolean(request.tools && Object.keys(request.tools).length > 0),
134
+ maxTokens: request.config.maxTokens,
135
+ messageCount: request.contents.length,
136
+ model: request.model,
137
+ temperature: request.config.temperature,
138
+ toolCount: request.tools ? Object.keys(request.tools).length : 0,
139
+ });
140
+ }
141
+ /**
142
+ * Log a generation response.
143
+ */
144
+ logResponse(requestId, response, durationMs) {
145
+ if (!this.shouldLogResponses()) {
146
+ return;
147
+ }
148
+ console.debug(`[LLM:${requestId}] Response in ${durationMs}ms`, {
149
+ contentLength: response.content.length,
150
+ finishReason: response.finishReason,
151
+ toolCalls: response.toolCalls?.length ?? 0,
152
+ usage: response.usage,
153
+ });
154
+ }
155
+ /**
156
+ * Log streaming completion.
157
+ */
158
+ logStreamComplete(requestId, chunkCount, totalContentLength, durationMs) {
159
+ console.debug(`[LLM:${requestId}] Stream complete in ${durationMs}ms`, {
160
+ chunkCount,
161
+ totalContentLength,
162
+ });
163
+ }
164
+ /**
165
+ * Check if chunks should be logged.
166
+ */
167
+ shouldLogChunks() {
168
+ return this.options.logChunks === true || this.options.verbose === true;
169
+ }
170
+ /**
171
+ * Check if requests should be logged.
172
+ */
173
+ shouldLogRequests() {
174
+ return this.options.logRequests === true || this.options.verbose === true;
175
+ }
176
+ /**
177
+ * Check if responses should be logged.
178
+ */
179
+ shouldLogResponses() {
180
+ return this.options.logResponses === true || this.options.verbose === true;
181
+ }
182
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * OpenRouter Content Generator.
3
+ *
4
+ * Implements IContentGenerator using OpenRouter API (OpenAI-compatible).
5
+ * Supports various models available through OpenRouter.
6
+ */
7
+ import type { GenerateContentChunk, GenerateContentRequest, GenerateContentResponse, IContentGenerator } from '../../../../core/interfaces/cipher/i-content-generator.js';
8
+ /**
9
+ * Configuration for OpenRouter Content Generator.
10
+ */
11
+ export interface OpenRouterContentGeneratorConfig {
12
+ /** OpenRouter API key */
13
+ apiKey: string;
14
+ /** Base URL for OpenRouter API */
15
+ baseUrl?: string;
16
+ /** HTTP Referer header for OpenRouter */
17
+ httpReferer?: string;
18
+ /** Maximum tokens in the response */
19
+ maxTokens?: number;
20
+ /** Model identifier */
21
+ model?: string;
22
+ /** Site name for X-Title header */
23
+ siteName?: string;
24
+ /** Temperature for randomness */
25
+ temperature?: number;
26
+ /** Request timeout in milliseconds */
27
+ timeout?: number;
28
+ }
29
+ /**
30
+ * OpenRouter Content Generator.
31
+ *
32
+ * Wraps OpenAI client configured for OpenRouter and implements IContentGenerator.
33
+ * Provides:
34
+ * - Non-streaming content generation
35
+ * - Streaming content generation (true streaming via OpenAI SDK)
36
+ * - Token estimation
37
+ */
38
+ export declare class OpenRouterContentGenerator implements IContentGenerator {
39
+ private readonly client;
40
+ private readonly config;
41
+ private readonly formatter;
42
+ private readonly tokenizer;
43
+ /**
44
+ * Create a new OpenRouter Content Generator.
45
+ *
46
+ * @param config - Generator configuration
47
+ */
48
+ constructor(config: OpenRouterContentGeneratorConfig);
49
+ /**
50
+ * Estimate tokens synchronously using character-based approximation.
51
+ *
52
+ * @param content - Text to estimate tokens for
53
+ * @returns Estimated token count
54
+ */
55
+ estimateTokensSync(content: string): number;
56
+ /**
57
+ * Generate content (non-streaming).
58
+ *
59
+ * @param request - Generation request
60
+ * @returns Generated content response
61
+ */
62
+ generateContent(request: GenerateContentRequest): Promise<GenerateContentResponse>;
63
+ /**
64
+ * Generate content with streaming.
65
+ *
66
+ * Uses OpenAI SDK's native streaming support for real-time content generation.
67
+ *
68
+ * @param request - Generation request
69
+ * @yields Content chunks as they are generated
70
+ * @returns Async generator yielding content chunks
71
+ */
72
+ generateContentStream(request: GenerateContentRequest): AsyncGenerator<GenerateContentChunk>;
73
+ /**
74
+ * Build tool calls array from accumulated tool calls.
75
+ */
76
+ private buildToolCallsArray;
77
+ /**
78
+ * Build tools array from ToolSet.
79
+ */
80
+ private buildTools;
81
+ /**
82
+ * Determine finish reason from OpenAI finish reason.
83
+ */
84
+ private determineFinishReason;
85
+ /**
86
+ * Extract text content from an internal message.
87
+ */
88
+ private extractTextContent;
89
+ /**
90
+ * Process tool call deltas and accumulate them.
91
+ */
92
+ private processToolCallDeltas;
93
+ }