byterover-cli 0.4.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  49. package/dist/core/domain/errors/connection-error.js +54 -0
  50. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  51. package/dist/core/domain/errors/core-process-error.js +43 -0
  52. package/dist/core/domain/errors/task-error.d.ts +64 -0
  53. package/dist/core/domain/errors/task-error.js +116 -0
  54. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  55. package/dist/core/domain/errors/transport-error.js +114 -0
  56. package/dist/core/domain/instance/index.d.ts +1 -0
  57. package/dist/core/domain/instance/index.js +1 -0
  58. package/dist/core/domain/instance/types.d.ts +57 -0
  59. package/dist/core/domain/instance/types.js +72 -0
  60. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  61. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  62. package/dist/core/domain/transport/index.d.ts +2 -0
  63. package/dist/core/domain/transport/index.js +2 -0
  64. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  65. package/dist/core/domain/transport/schemas.js +554 -0
  66. package/dist/core/domain/transport/types.d.ts +67 -0
  67. package/dist/core/domain/transport/types.js +7 -0
  68. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  69. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  70. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  71. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  72. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  73. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  74. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  75. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  76. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  77. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  79. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  80. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  81. package/dist/core/interfaces/cipher/index.js +11 -0
  82. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  83. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  84. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  85. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  86. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  87. package/dist/core/interfaces/cipher/message-types.js +6 -0
  88. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  89. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  90. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  91. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  92. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  93. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  94. package/dist/core/interfaces/executor/index.d.ts +2 -0
  95. package/dist/core/interfaces/executor/index.js +2 -0
  96. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  97. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  98. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  99. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  100. package/dist/core/interfaces/instance/index.d.ts +2 -0
  101. package/dist/core/interfaces/instance/index.js +2 -0
  102. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  103. package/dist/core/interfaces/noop-implementations.js +62 -0
  104. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  105. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  106. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  107. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  108. package/dist/core/interfaces/transport/index.d.ts +2 -0
  109. package/dist/core/interfaces/transport/index.js +2 -0
  110. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  111. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  112. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  113. package/dist/infra/cipher/agent/agent-error.js +79 -0
  114. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  115. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  116. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  117. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  118. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  119. package/dist/infra/cipher/agent/base-agent.js +240 -0
  120. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  121. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  122. package/dist/infra/cipher/agent/index.d.ts +22 -0
  123. package/dist/infra/cipher/agent/index.js +24 -0
  124. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  125. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  126. package/dist/infra/cipher/agent/types.d.ts +35 -0
  127. package/dist/infra/cipher/agent/types.js +1 -0
  128. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  129. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  130. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  131. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  132. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  133. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  134. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  135. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  136. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  137. package/dist/infra/cipher/consumer/index.js +2 -1
  138. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  139. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  140. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  141. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  142. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  143. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  144. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  145. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  146. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  147. package/dist/infra/cipher/interactive-loop.js +41 -33
  148. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  149. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  150. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  151. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  152. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  153. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  154. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  155. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  156. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  157. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  158. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  159. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  160. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  161. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  162. package/dist/infra/cipher/llm/context/utils.js +17 -4
  163. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  164. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  165. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  166. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  167. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  168. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  169. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  170. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  171. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  172. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  173. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  174. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  175. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  176. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  177. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  178. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  179. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  180. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  181. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  182. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  183. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  184. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  185. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  186. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  187. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  188. package/dist/infra/cipher/process/command-validator.js +75 -0
  189. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  190. package/dist/infra/cipher/process/path-utils.js +94 -0
  191. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  192. package/dist/infra/cipher/process/process-service.js +98 -17
  193. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  194. package/dist/infra/cipher/session/chat-session.js +163 -13
  195. package/dist/infra/cipher/session/index.d.ts +1 -0
  196. package/dist/infra/cipher/session/index.js +2 -0
  197. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  198. package/dist/infra/cipher/session/message-queue.js +90 -0
  199. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  200. package/dist/infra/cipher/session/session-manager.js +254 -7
  201. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  202. package/dist/infra/cipher/session/session-status.js +184 -0
  203. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  204. package/dist/infra/cipher/session/title-generator.js +31 -0
  205. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  206. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  207. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  208. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  209. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  210. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  211. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  212. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  213. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  214. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  215. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  216. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  217. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  218. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  219. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  220. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  221. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  222. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  223. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  224. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  225. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  226. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  227. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  228. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  229. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  230. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  231. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  232. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  233. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  234. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  235. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  236. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  237. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  238. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  239. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  240. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  241. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  242. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  243. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  244. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  245. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  246. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  247. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  249. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  250. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  251. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  252. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  253. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  254. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  255. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  256. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  257. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  258. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  259. package/dist/infra/cipher/tools/index.d.ts +1 -1
  260. package/dist/infra/cipher/tools/index.js +1 -1
  261. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  262. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  263. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  264. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  265. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  266. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  267. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  268. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  269. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  270. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  271. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  272. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  273. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  274. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  275. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  276. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  277. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  278. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  279. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  280. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  281. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  282. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  283. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  284. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  285. package/dist/infra/context-tree/path-utils.js +7 -0
  286. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  287. package/dist/infra/core/executors/curate-executor.js +123 -0
  288. package/dist/infra/core/executors/index.d.ts +2 -0
  289. package/dist/infra/core/executors/index.js +2 -0
  290. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  291. package/dist/infra/core/executors/query-executor.js +51 -0
  292. package/dist/infra/core/task-processor.d.ts +81 -0
  293. package/dist/infra/core/task-processor.js +115 -0
  294. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  295. package/dist/infra/instance/file-instance-discovery.js +84 -0
  296. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  297. package/dist/infra/instance/file-instance-manager.js +123 -0
  298. package/dist/infra/instance/index.d.ts +3 -0
  299. package/dist/infra/instance/index.js +3 -0
  300. package/dist/infra/instance/process-utils.d.ts +14 -0
  301. package/dist/infra/instance/process-utils.js +39 -0
  302. package/dist/infra/process/agent-worker.d.ts +20 -0
  303. package/dist/infra/process/agent-worker.js +602 -0
  304. package/dist/infra/process/index.d.ts +12 -0
  305. package/dist/infra/process/index.js +11 -0
  306. package/dist/infra/process/ipc-types.d.ts +55 -0
  307. package/dist/infra/process/ipc-types.js +12 -0
  308. package/dist/infra/process/process-manager.d.ts +154 -0
  309. package/dist/infra/process/process-manager.js +471 -0
  310. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  311. package/dist/infra/process/task-queue-manager.js +226 -0
  312. package/dist/infra/process/transport-handlers.d.ts +124 -0
  313. package/dist/infra/process/transport-handlers.js +348 -0
  314. package/dist/infra/process/transport-worker.d.ts +20 -0
  315. package/dist/infra/process/transport-worker.js +168 -0
  316. package/dist/infra/repl/commands/curate-command.js +0 -5
  317. package/dist/infra/repl/commands/query-command.js +0 -3
  318. package/dist/infra/repl/repl-startup.d.ts +4 -0
  319. package/dist/infra/repl/repl-startup.js +8 -1
  320. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  321. package/dist/infra/repl/transport-client-helper.js +96 -0
  322. package/dist/infra/transport/index.d.ts +4 -0
  323. package/dist/infra/transport/index.js +4 -0
  324. package/dist/infra/transport/port-utils.d.ts +42 -0
  325. package/dist/infra/transport/port-utils.js +84 -0
  326. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  327. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  328. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  329. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  330. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  331. package/dist/infra/transport/transport-client-factory.js +168 -0
  332. package/dist/infra/transport/transport-factory.d.ts +33 -0
  333. package/dist/infra/transport/transport-factory.js +59 -0
  334. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  335. package/dist/infra/usecase/curate-use-case.js +71 -262
  336. package/dist/infra/usecase/init-use-case.js +3 -2
  337. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  338. package/dist/infra/usecase/query-use-case.js +250 -326
  339. package/dist/infra/usecase/status-use-case.js +1 -1
  340. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  341. package/dist/resources/prompts/explore.yml +78 -0
  342. package/dist/resources/prompts/plan.yml +114 -0
  343. package/dist/resources/prompts/reflection.yml +1 -1
  344. package/dist/resources/prompts/system-prompt.yml +15 -8
  345. package/dist/resources/prompts/tool-outputs.yml +0 -5
  346. package/dist/resources/tools/bash_exec.txt +98 -0
  347. package/dist/resources/tools/bash_output.txt +40 -0
  348. package/dist/resources/tools/batch.txt +28 -0
  349. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  350. package/dist/resources/tools/curate.txt +22 -0
  351. package/dist/resources/tools/delete_memory.txt +1 -0
  352. package/dist/resources/tools/detect_domains.txt +11 -0
  353. package/dist/resources/tools/edit_file.txt +1 -0
  354. package/dist/resources/tools/edit_memory.txt +1 -0
  355. package/dist/resources/tools/glob_files.txt +20 -0
  356. package/dist/resources/tools/grep_content.txt +18 -0
  357. package/dist/resources/tools/kill_process.txt +16 -0
  358. package/dist/resources/tools/list_directory.txt +16 -0
  359. package/dist/resources/tools/list_memories.txt +1 -0
  360. package/dist/resources/tools/read_file.txt +31 -0
  361. package/dist/resources/tools/read_memory.txt +1 -0
  362. package/dist/resources/tools/read_todos.txt +17 -0
  363. package/dist/resources/tools/search_history.txt +1 -0
  364. package/dist/resources/tools/task.txt +23 -0
  365. package/dist/resources/tools/write_file.txt +1 -0
  366. package/dist/resources/tools/write_memory.txt +1 -0
  367. package/dist/resources/tools/write_todos.txt +29 -0
  368. package/dist/tui/app.js +9 -13
  369. package/dist/tui/components/command-details.d.ts +14 -0
  370. package/dist/tui/components/command-details.js +35 -0
  371. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  372. package/dist/tui/components/execution/execution-changes.js +19 -4
  373. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  374. package/dist/tui/components/execution/execution-content.js +26 -13
  375. package/dist/tui/components/execution/execution-input.js +3 -3
  376. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  377. package/dist/tui/components/execution/execution-progress.js +8 -6
  378. package/dist/tui/components/execution/log-item.d.ts +3 -4
  379. package/dist/tui/components/execution/log-item.js +2 -5
  380. package/dist/tui/components/footer.js +9 -4
  381. package/dist/tui/components/header.d.ts +3 -3
  382. package/dist/tui/components/header.js +5 -3
  383. package/dist/tui/components/index.d.ts +1 -0
  384. package/dist/tui/components/index.js +1 -0
  385. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  386. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  387. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  388. package/dist/tui/components/scrollable-list.js +12 -10
  389. package/dist/tui/components/suggestions.js +39 -41
  390. package/dist/tui/components/tab-bar.d.ts +2 -1
  391. package/dist/tui/components/tab-bar.js +3 -4
  392. package/dist/tui/constants.d.ts +0 -5
  393. package/dist/tui/constants.js +0 -5
  394. package/dist/tui/contexts/auth-context.js +9 -2
  395. package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
  396. package/dist/tui/contexts/index.d.ts +6 -1
  397. package/dist/tui/contexts/index.js +6 -1
  398. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  399. package/dist/tui/contexts/onboarding-context.js +9 -9
  400. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  401. package/dist/tui/contexts/tasks-context.js +218 -0
  402. package/dist/tui/contexts/transport-context.d.ts +29 -0
  403. package/dist/tui/contexts/transport-context.js +82 -0
  404. package/dist/tui/hooks/index.d.ts +10 -6
  405. package/dist/tui/hooks/index.js +7 -6
  406. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  407. package/dist/tui/hooks/use-activity-logs.js +87 -34
  408. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  409. package/dist/tui/hooks/use-auth-polling.js +104 -0
  410. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  411. package/dist/tui/hooks/use-slash-completion.js +1 -1
  412. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  413. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  414. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  415. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  416. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  417. package/dist/tui/hooks/use-ui-heights.js +88 -0
  418. package/dist/tui/providers/app-providers.js +2 -6
  419. package/dist/tui/types/commands.d.ts +0 -26
  420. package/dist/tui/types/index.d.ts +1 -1
  421. package/dist/tui/types/ui.d.ts +9 -4
  422. package/dist/tui/utils/line.d.ts +11 -0
  423. package/dist/tui/utils/line.js +16 -0
  424. package/dist/tui/utils/log.d.ts +27 -0
  425. package/dist/tui/utils/log.js +114 -0
  426. package/dist/tui/views/command-view.d.ts +7 -0
  427. package/dist/tui/views/command-view.js +103 -80
  428. package/dist/tui/views/login-view.js +7 -4
  429. package/dist/tui/views/logs-view.d.ts +13 -0
  430. package/dist/tui/views/logs-view.js +27 -52
  431. package/dist/utils/connection-error-handler.d.ts +16 -0
  432. package/dist/utils/connection-error-handler.js +49 -0
  433. package/dist/utils/crash-log.d.ts +14 -0
  434. package/dist/utils/crash-log.js +19 -0
  435. package/dist/utils/file-helpers.d.ts +14 -0
  436. package/dist/utils/file-helpers.js +21 -0
  437. package/dist/utils/global-logs-path.d.ts +11 -0
  438. package/dist/utils/global-logs-path.js +37 -0
  439. package/dist/utils/process-logger.d.ts +53 -0
  440. package/dist/utils/process-logger.js +253 -0
  441. package/dist/utils/sandbox-detector.d.ts +31 -0
  442. package/dist/utils/sandbox-detector.js +122 -0
  443. package/oclif.manifest.json +10 -198
  444. package/package.json +5 -1
  445. package/dist/commands/cipher-agent/run.d.ts +0 -142
  446. package/dist/commands/cipher-agent/run.js +0 -555
  447. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  448. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  449. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  450. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  451. package/dist/commands/foo.d.ts +0 -14
  452. package/dist/commands/foo.js +0 -66
  453. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  454. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  455. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  456. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  457. package/dist/infra/cipher/cipher-agent.js +0 -317
  458. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  459. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  460. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  461. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  462. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  463. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  464. package/dist/tui/contexts/consumer.d.ts +0 -31
  465. package/dist/tui/contexts/consumer.js +0 -56
  466. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  467. package/dist/tui/hooks/use-consumer.js +0 -50
  468. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  469. package/dist/tui/hooks/use-queue-polling.js +0 -90
  470. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  471. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  472. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  473. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  474. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,546 @@
1
+ import { setMaxListeners } from 'node:events';
2
+ import { STREAMING_EVENT_NAMES } from '../../../core/domain/cipher/streaming/types.js';
3
+ import { AgentEventBus } from '../events/event-emitter.js';
4
+ import { SessionManager } from '../session/session-manager.js';
5
+ import { AgentError } from './agent-error.js';
6
+ import { BaseAgent } from './base-agent.js';
7
+ import { createCipherAgentServices } from './service-initializer.js';
8
+ /**
9
+ * CipherAgent - Main agent implementation extending BaseAgent.
10
+ *
11
+ * Inherits from BaseAgent:
12
+ * - Two-phase initialization (constructor + start)
13
+ * - Lifecycle management (start, stop, restart)
14
+ * - State management with session overrides
15
+ * - Typed error handling
16
+ * - Configuration validation (Zod)
17
+ *
18
+ * Architecture (DextoAgent pattern):
19
+ * - Agent creates AgentEventBus in constructor (available before start)
20
+ * - Agent creates and owns shared services (ToolManager, SystemPromptManager, etc.)
21
+ * - SessionManager creates session-specific services (LLM, SessionEventBus)
22
+ * - Agent delegates execution to sessions via session.run()
23
+ *
24
+ * Usage:
25
+ * - execute(input) uses default session automatically
26
+ * - execute(input, sessionId) for multi-session support
27
+ */
28
+ export class CipherAgent extends BaseAgent {
29
+ // Private state (must come before methods)
30
+ _agentEventBus;
31
+ _brvConfig;
32
+ /**
33
+ * Session ID - created once during start().
34
+ * Each agent has exactly 1 session (Single-Session pattern).
35
+ */
36
+ _sessionId;
37
+ activeStreamControllers = new Map();
38
+ sessionManager;
39
+ /**
40
+ * Creates a new CipherAgent instance.
41
+ * Does NOT initialize services - call start() for async initialization.
42
+ *
43
+ * @param config - Agent configuration (Zod-validated AgentConfig)
44
+ * @param brvConfig - Optional ByteRover config for spaceId/teamId
45
+ */
46
+ constructor(config, brvConfig) {
47
+ // Call parent constructor (validates with Zod)
48
+ super(config);
49
+ // Create event bus early (DextoAgent pattern - available before start)
50
+ this._agentEventBus = new AgentEventBus();
51
+ this._brvConfig = brvConfig;
52
+ }
53
+ // === Public Getters (expose services for backward compatibility) ===
54
+ get agentEventBus() {
55
+ return this.services?.agentEventBus;
56
+ }
57
+ get fileSystemService() {
58
+ return this.services?.fileSystemService;
59
+ }
60
+ get historyStorage() {
61
+ return this.services?.historyStorage;
62
+ }
63
+ get memoryManager() {
64
+ return this.services?.memoryManager;
65
+ }
66
+ get processService() {
67
+ return this.services?.processService;
68
+ }
69
+ /**
70
+ * Get the session ID (created during start()).
71
+ * Each agent has exactly 1 session (Single-Session pattern).
72
+ */
73
+ get sessionId() {
74
+ return this._sessionId;
75
+ }
76
+ get systemPromptManager() {
77
+ return this.services?.systemPromptManager;
78
+ }
79
+ get toolManager() {
80
+ return this.services?.toolManager;
81
+ }
82
+ get toolProvider() {
83
+ return this.services?.toolProvider;
84
+ }
85
+ // === Public Methods (alphabetical order) ===
86
+ /**
87
+ * Cancels the currently running turn for the agent's default session.
88
+ * Safe to call even if no run is in progress.
89
+ *
90
+ * @returns true if a run was in progress and was signaled to abort; false otherwise
91
+ */
92
+ async cancel() {
93
+ this.ensureStarted();
94
+ const sessionId = this.getSessionIdInternal();
95
+ // Abort the stream iterator first (so consumer's for-await loop exits cleanly)
96
+ const streamController = this.activeStreamControllers.get(sessionId);
97
+ if (streamController) {
98
+ streamController.abort();
99
+ this.activeStreamControllers.delete(sessionId);
100
+ }
101
+ // Then cancel the session's LLM/tool execution
102
+ const session = this.getSessionManagerInternal().getSession(sessionId);
103
+ if (session) {
104
+ session.cancel();
105
+ return true;
106
+ }
107
+ // If no session found but stream was aborted, still return true
108
+ return Boolean(streamController);
109
+ }
110
+ async cleanupServices() {
111
+ // Abort all active streams and clear controllers
112
+ for (const controller of this.activeStreamControllers.values()) {
113
+ controller.abort();
114
+ }
115
+ this.activeStreamControllers.clear();
116
+ // Dispose session manager
117
+ if (this.sessionManager) {
118
+ this.sessionManager.dispose();
119
+ this.sessionManager = undefined;
120
+ }
121
+ // Reset execution state (only if state manager exists - may not during early cleanup)
122
+ if (this.stateManager) {
123
+ this.stateManager.reset();
124
+ }
125
+ }
126
+ /**
127
+ * Create a new session.
128
+ */
129
+ async createSession(sessionId) {
130
+ this.ensureStarted();
131
+ return this.getSessionManagerInternal().createSession(sessionId);
132
+ }
133
+ /**
134
+ * Delete a session completely (memory + history).
135
+ */
136
+ async deleteSession(sessionId) {
137
+ this.ensureStarted();
138
+ // Clear session config overrides
139
+ if (this.stateManager) {
140
+ this.stateManager.clearSessionOverride(sessionId);
141
+ }
142
+ return this.getSessionManagerInternal().deleteSession(sessionId);
143
+ }
144
+ /**
145
+ * Execute the agent with user input.
146
+ * Uses the agent's default session (created during start()).
147
+ * Internally uses generate() for single code path maintainability.
148
+ *
149
+ * @param input - User message
150
+ * @param options - Optional execution options
151
+ * @param options.executionContext - Optional execution context
152
+ * @param options.taskId - Optional task ID for concurrent task isolation
153
+ */
154
+ async execute(input, options) {
155
+ this.ensureStarted();
156
+ // Use generate() internally for single code path
157
+ const response = await this.generate(input, {
158
+ executionContext: options?.executionContext,
159
+ taskId: options?.taskId,
160
+ });
161
+ return response.content;
162
+ }
163
+ /**
164
+ * Generate a complete response (waits for full completion).
165
+ * Wrapper around stream() that collects all events and returns final result.
166
+ * Uses the agent's default session (created during start()).
167
+ *
168
+ * @param input - User message
169
+ * @param options - Optional configuration (signal for cancellation, taskId for billing)
170
+ * @returns Complete response with content, usage, and tool calls
171
+ */
172
+ async generate(input, options) {
173
+ const sessionId = this.getSessionIdInternal();
174
+ // Collect all events from stream
175
+ const events = [];
176
+ for await (const event of await this.stream(input, options)) {
177
+ events.push(event);
178
+ }
179
+ // Check for non-recoverable error events
180
+ const fatalErrorEvent = events.find((e) => e.name === 'llmservice:error' && e.recoverable !== true);
181
+ if (fatalErrorEvent) {
182
+ throw new Error(fatalErrorEvent.error);
183
+ }
184
+ // Find the final response event
185
+ const responseEvent = events.find((e) => e.name === 'llmservice:response');
186
+ if (!responseEvent || responseEvent.name !== 'llmservice:response') {
187
+ throw new Error('Stream did not complete successfully - no response received');
188
+ }
189
+ // Collect tool calls
190
+ const toolCallEvents = events.filter((e) => e.name === 'llmservice:toolCall');
191
+ const toolResultEvents = events.filter((e) => e.name === 'llmservice:toolResult');
192
+ const toolCalls = toolCallEvents.map((tc) => {
193
+ const toolResult = toolResultEvents.find((tr) => tr.callId === tc.callId);
194
+ return {
195
+ args: tc.args,
196
+ callId: tc.callId ?? `tool_${Date.now()}`,
197
+ result: toolResult ? { data: toolResult.result, success: toolResult.success } : undefined,
198
+ toolName: tc.toolName,
199
+ };
200
+ });
201
+ const defaultUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
202
+ return {
203
+ content: responseEvent.content,
204
+ reasoning: responseEvent.reasoning,
205
+ sessionId,
206
+ toolCalls,
207
+ usage: responseEvent.tokenUsage ?? defaultUsage,
208
+ };
209
+ }
210
+ /**
211
+ * Get an existing session or create a new one.
212
+ */
213
+ async getOrCreateSession(sessionId) {
214
+ this.ensureStarted();
215
+ const sessionMgr = this.getSessionManagerInternal();
216
+ const existingSession = sessionMgr.getSession(sessionId);
217
+ return existingSession ?? sessionMgr.createSession(sessionId);
218
+ }
219
+ /**
220
+ * Get a session by ID.
221
+ */
222
+ getSession(sessionId) {
223
+ this.ensureStarted();
224
+ return this.getSessionManagerInternal().getSession(sessionId);
225
+ }
226
+ /**
227
+ * Get session metadata without loading full history.
228
+ */
229
+ async getSessionMetadata(sessionId) {
230
+ this.ensureStarted();
231
+ return this.getHistoryStorageInternal().getSessionMetadata(sessionId);
232
+ }
233
+ /**
234
+ * Get current agent state.
235
+ * Returns default state if agent is not yet started.
236
+ */
237
+ getState() {
238
+ // Return default state if not started yet (for backward compatibility)
239
+ if (!this.stateManager) {
240
+ return {
241
+ currentIteration: 0,
242
+ executionHistory: [],
243
+ executionState: 'idle',
244
+ toolCallsExecuted: 0,
245
+ };
246
+ }
247
+ return this.stateManager.getExecutionState();
248
+ }
249
+ /**
250
+ * Get the current system prompt.
251
+ */
252
+ async getSystemPrompt() {
253
+ this.ensureStarted();
254
+ return this.getSystemPromptManagerInternal().build({});
255
+ }
256
+ async initializeServices() {
257
+ // Pass pre-created event bus to service initializer (DextoAgent pattern)
258
+ return createCipherAgentServices(this.config, this._agentEventBus);
259
+ }
260
+ /**
261
+ * List all persisted session IDs from history storage.
262
+ */
263
+ async listPersistedSessions() {
264
+ this.ensureStarted();
265
+ return this.getHistoryStorageInternal().listSessions();
266
+ }
267
+ /**
268
+ * List all session IDs (in-memory only).
269
+ */
270
+ listSessions() {
271
+ this.ensureStarted();
272
+ return this.getSessionManagerInternal().listSessions();
273
+ }
274
+ // === Protected Methods (implement abstract from BaseAgent) ===
275
+ /**
276
+ * Reset the agent to initial state.
277
+ * Resets execution state only. To reset sessions, use resetSession(sessionId).
278
+ */
279
+ reset() {
280
+ // Reset execution state (only if state manager exists - may not if not started)
281
+ if (this.stateManager) {
282
+ this.stateManager.reset();
283
+ }
284
+ }
285
+ /**
286
+ * Reset a specific session's conversation history.
287
+ * @param sessionId - The session ID to reset
288
+ */
289
+ resetSession(sessionId) {
290
+ const session = this.getSessionManagerInternal().getSession(sessionId);
291
+ if (session) {
292
+ session.reset();
293
+ }
294
+ // Emit conversation reset event (only if agent is started)
295
+ if (this._isStarted && this.services?.agentEventBus) {
296
+ this.services.agentEventBus.emit('cipher:conversationReset', { sessionId });
297
+ }
298
+ }
299
+ /**
300
+ * Start the agent - initializes all services asynchronously.
301
+ * Must be called before execute().
302
+ */
303
+ async start() {
304
+ // Call parent start (creates services)
305
+ await super.start();
306
+ // Create SessionManager with shared services
307
+ const services = this.getServices();
308
+ // Extract HTTP config
309
+ const httpConfig = {
310
+ accessToken: this.config.accessToken,
311
+ apiBaseUrl: this.config.apiBaseUrl,
312
+ projectId: this.config.projectId,
313
+ region: this.config.region,
314
+ sessionKey: this.config.sessionKey,
315
+ spaceId: this.config.spaceId ?? this._brvConfig?.spaceId ?? '',
316
+ teamId: this.config.teamId ?? this._brvConfig?.teamId ?? '',
317
+ };
318
+ // Extract LLM config for sessions
319
+ const sessionLLMConfig = {
320
+ httpReferer: this.config.httpReferer,
321
+ maxIterations: this.config.llm.maxIterations,
322
+ maxTokens: this.config.llm.maxTokens,
323
+ model: this.config.model,
324
+ openRouterApiKey: this.config.openRouterApiKey,
325
+ siteName: this.config.siteName,
326
+ temperature: this.config.llm.temperature,
327
+ verbose: this.config.llm.verbose,
328
+ };
329
+ // Create SessionManager
330
+ this.sessionManager = new SessionManager(services, httpConfig, sessionLLMConfig, {
331
+ config: {
332
+ maxSessions: this.config.sessions.maxSessions,
333
+ sessionTTL: this.config.sessions.sessionTTL,
334
+ },
335
+ });
336
+ // Create default session (Single-Session pattern)
337
+ // Each agent has exactly 1 session created at start time
338
+ const defaultSession = await this.sessionManager.createSession();
339
+ this._sessionId = defaultSession.id;
340
+ // Update ToolProvider with SessionManager getter for TaskTool
341
+ // This must happen after SessionManager is created since TaskTool needs it for subagent delegation
342
+ const { sessionManager } = this;
343
+ services.toolProvider.updateServices({
344
+ getSessionManager: () => sessionManager,
345
+ });
346
+ }
347
+ /**
348
+ * Stream a response with real-time event emission.
349
+ * Uses the agent's default session (created during start()).
350
+ *
351
+ * @param input - User message
352
+ * @param options - Optional configuration (signal for cancellation, taskId for billing)
353
+ * @returns AsyncIterator that yields StreamingEvent objects
354
+ */
355
+ async stream(input, options) {
356
+ this.ensureStarted();
357
+ const sessionId = this.getSessionIdInternal();
358
+ const signal = options?.signal;
359
+ // Event queue for aggregation
360
+ const eventQueue = [];
361
+ let completed = false;
362
+ // Create AbortController for cleanup
363
+ const controller = new AbortController();
364
+ const cleanupSignal = controller.signal;
365
+ // Store controller so cancel() can abort this stream (keyed by sessionId)
366
+ this.activeStreamControllers.set(sessionId, controller);
367
+ // Increase listener limit - stream() registers many event listeners
368
+ setMaxListeners(30, cleanupSignal);
369
+ // Track listener references for manual cleanup
370
+ const listeners = [];
371
+ // Get the agent event bus
372
+ const agentEventBus = this.services?.agentEventBus;
373
+ if (!agentEventBus) {
374
+ throw AgentError.serviceNotInitialized('AgentEventBus');
375
+ }
376
+ // Cleanup function to remove all listeners and stream controller
377
+ const cleanupListeners = () => {
378
+ if (listeners.length === 0) {
379
+ return; // Already cleaned up
380
+ }
381
+ for (const { event, listener } of listeners) {
382
+ agentEventBus.off(event, listener);
383
+ }
384
+ listeners.length = 0;
385
+ // Remove from active controllers map
386
+ this.activeStreamControllers.delete(sessionId);
387
+ };
388
+ // Wire external signal to trigger cleanup
389
+ if (signal) {
390
+ const abortHandler = () => {
391
+ cleanupListeners();
392
+ controller.abort();
393
+ };
394
+ signal.addEventListener('abort', abortHandler, { once: true });
395
+ }
396
+ // Subscribe to streaming events (filter by sessionId - ChatSession.id)
397
+ for (const eventName of STREAMING_EVENT_NAMES) {
398
+ const listener = (payload) => {
399
+ const data = payload;
400
+ if (data.sessionId !== sessionId)
401
+ return;
402
+ // Add event to queue with name discriminant
403
+ eventQueue.push({ name: eventName, ...data });
404
+ // Close iterator on run:complete
405
+ if (eventName === 'run:complete') {
406
+ completed = true;
407
+ }
408
+ };
409
+ agentEventBus.on(eventName, listener, { signal: cleanupSignal });
410
+ listeners.push({ event: eventName, listener });
411
+ }
412
+ // Start streaming in background (fire-and-forget)
413
+ ;
414
+ (async () => {
415
+ try {
416
+ // Get or create session using the provided sessionId
417
+ // ChatSession maintains conversation history
418
+ const sessionMgr = this.getSessionManagerInternal();
419
+ const existingSession = sessionMgr.getSession(sessionId);
420
+ const session = existingSession ?? (await sessionMgr.createSession(sessionId));
421
+ // Increment iteration counter
422
+ this.getStateManager().incrementIteration();
423
+ // Call session.streamRun() which emits events and run:complete
424
+ // Pass taskId for concurrent task isolation (included in all emitted events)
425
+ await session.streamRun(input, {
426
+ executionContext: options?.executionContext,
427
+ signal,
428
+ taskId: options?.taskId,
429
+ });
430
+ }
431
+ catch (error_) {
432
+ // Emit error event if something goes wrong
433
+ completed = true;
434
+ const error = error_ instanceof Error ? error_ : new Error(String(error_));
435
+ eventQueue.push({
436
+ code: undefined,
437
+ error: error.message,
438
+ name: 'llmservice:error',
439
+ recoverable: false,
440
+ sessionId,
441
+ });
442
+ }
443
+ })();
444
+ // Resolve function for waiting - will be called when new events arrive
445
+ let notifyNewEvent = null;
446
+ // Wrap the original listener to also notify waiters
447
+ const originalListeners = [...listeners];
448
+ listeners.length = 0;
449
+ for (const { event, listener: originalListener } of originalListeners) {
450
+ const wrappedListener = (payload) => {
451
+ originalListener(payload);
452
+ // Notify any waiting next() call
453
+ if (notifyNewEvent) {
454
+ notifyNewEvent();
455
+ notifyNewEvent = null;
456
+ }
457
+ };
458
+ agentEventBus.off(event, originalListener);
459
+ agentEventBus.on(event, wrappedListener, { signal: cleanupSignal });
460
+ listeners.push({ event, listener: wrappedListener });
461
+ }
462
+ // Return async iterable iterator
463
+ const iterator = {
464
+ async next() {
465
+ // If we already have events, return immediately
466
+ if (eventQueue.length > 0) {
467
+ return { done: false, value: eventQueue.shift() };
468
+ }
469
+ // If already completed, cleanup and return
470
+ if (completed) {
471
+ cleanupListeners();
472
+ return { done: true, value: undefined };
473
+ }
474
+ // Check for abort
475
+ if (signal?.aborted || cleanupSignal.aborted) {
476
+ cleanupListeners();
477
+ return { done: true, value: undefined };
478
+ }
479
+ // Wait for new events
480
+ await new Promise((resolve) => {
481
+ notifyNewEvent = resolve;
482
+ // Also resolve on abort
483
+ const abortHandler = () => {
484
+ notifyNewEvent = null;
485
+ resolve();
486
+ };
487
+ cleanupSignal.addEventListener('abort', abortHandler, { once: true });
488
+ if (signal) {
489
+ signal.addEventListener('abort', abortHandler, { once: true });
490
+ }
491
+ });
492
+ // After waiting, check state again
493
+ if (signal?.aborted || cleanupSignal.aborted) {
494
+ cleanupListeners();
495
+ return { done: true, value: undefined };
496
+ }
497
+ if (eventQueue.length > 0) {
498
+ return { done: false, value: eventQueue.shift() };
499
+ }
500
+ if (completed) {
501
+ cleanupListeners();
502
+ return { done: true, value: undefined };
503
+ }
504
+ // Recursive call to handle edge cases
505
+ return iterator.next();
506
+ },
507
+ async return() {
508
+ // Called when consumer breaks out early or explicitly calls return()
509
+ cleanupListeners();
510
+ controller.abort();
511
+ return { done: true, value: undefined };
512
+ },
513
+ [Symbol.asyncIterator]() {
514
+ return iterator;
515
+ },
516
+ };
517
+ return iterator;
518
+ }
519
+ // === Private Helpers (alphabetical order) ===
520
+ getHistoryStorageInternal() {
521
+ const storage = this.services?.historyStorage;
522
+ if (!storage) {
523
+ throw AgentError.serviceNotInitialized('HistoryStorage');
524
+ }
525
+ return storage;
526
+ }
527
+ getSessionIdInternal() {
528
+ if (!this._sessionId) {
529
+ throw AgentError.serviceNotInitialized('Session (call start() first)');
530
+ }
531
+ return this._sessionId;
532
+ }
533
+ getSessionManagerInternal() {
534
+ if (!this.sessionManager) {
535
+ throw AgentError.serviceNotInitialized('SessionManager');
536
+ }
537
+ return this.sessionManager;
538
+ }
539
+ getSystemPromptManagerInternal() {
540
+ const manager = this.services?.systemPromptManager;
541
+ if (!manager) {
542
+ throw AgentError.serviceNotInitialized('SystemPromptManager');
543
+ }
544
+ return manager;
545
+ }
546
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Agent module - Complete cipher agent implementation following DextoAgent patterns
3
+ *
4
+ * This module provides the full agent architecture with:
5
+ * - CipherAgent: Main agent class for LLM interactions
6
+ * - BaseAgent: Abstract class with lifecycle management (start/stop/restart)
7
+ * - Service initialization: Centralized service wiring
8
+ * - AgentStateManager: Runtime config with session-specific overrides
9
+ * - AgentError: Typed error factory with error codes
10
+ * - Zod schemas: Configuration validation with defaults
11
+ */
12
+ export { AgentErrorCode } from './agent-error-codes.js';
13
+ export { AgentError } from './agent-error.js';
14
+ export { AgentConfigSchema, BlobStorageConfigSchema, FileSystemConfigSchema, LLMConfigSchema, LLMUpdatesSchema, safeValidateAgentConfig, SessionConfigSchema, validateAgentConfig, } from './agent-schemas.js';
15
+ export { AgentStateManager } from './agent-state-manager.js';
16
+ export type { SessionOverride } from './agent-state-manager.js';
17
+ export { BaseAgent } from './base-agent.js';
18
+ export { CipherAgent } from './cipher-agent.js';
19
+ export { createCipherAgentServices, createSessionServices } from './service-initializer.js';
20
+ export type { ByteRoverHttpConfig, SessionLLMConfig } from './service-initializer.js';
21
+ export type { CipherAgentServices, SessionManagerConfig, SessionServices } from './service-initializer.js';
22
+ export type { AgentConfig, AgentEventSubscriber, AgentExecutionContext, BlobStorageConfig, FileSystemConfig, LLMConfig, LLMUpdates, SessionConfig, TerminationReason, ValidatedAgentConfig, ValidatedBlobStorageConfig, ValidatedFileSystemConfig, ValidatedLLMConfig, ValidatedSessionConfig, } from './types.js';
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Agent module - Complete cipher agent implementation following DextoAgent patterns
3
+ *
4
+ * This module provides the full agent architecture with:
5
+ * - CipherAgent: Main agent class for LLM interactions
6
+ * - BaseAgent: Abstract class with lifecycle management (start/stop/restart)
7
+ * - Service initialization: Centralized service wiring
8
+ * - AgentStateManager: Runtime config with session-specific overrides
9
+ * - AgentError: Typed error factory with error codes
10
+ * - Zod schemas: Configuration validation with defaults
11
+ */
12
+ // Error handling
13
+ export { AgentErrorCode } from './agent-error-codes.js';
14
+ export { AgentError } from './agent-error.js';
15
+ // Schemas
16
+ export { AgentConfigSchema, BlobStorageConfigSchema, FileSystemConfigSchema, LLMConfigSchema, LLMUpdatesSchema, safeValidateAgentConfig, SessionConfigSchema, validateAgentConfig, } from './agent-schemas.js';
17
+ // State management
18
+ export { AgentStateManager } from './agent-state-manager.js';
19
+ // Base agent class
20
+ export { BaseAgent } from './base-agent.js';
21
+ // Main agent class
22
+ export { CipherAgent } from './cipher-agent.js';
23
+ // Service initialization
24
+ export { createCipherAgentServices, createSessionServices } from './service-initializer.js';
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Service Initializer: Centralized Wiring for Cipher Agent Services
3
+ *
4
+ * This module is responsible for initializing and wiring together all core agent services.
5
+ * It provides a single entry point for constructing the service graph.
6
+ *
7
+ * Following DextoAgent pattern:
8
+ * - Config file is source of truth (ValidatedAgentConfig)
9
+ * - Centralized function (not factory class) for service creation
10
+ * - Explicit dependency order with numbered steps
11
+ * - Event bus passed in as parameter (created in agent constructor)
12
+ */
13
+ import type { CipherAgentServices, SessionServices } from '../../../core/interfaces/cipher/cipher-services.js';
14
+ import type { ValidatedAgentConfig } from './agent-schemas.js';
15
+ import { AgentEventBus } from '../events/event-emitter.js';
16
+ /**
17
+ * HTTP configuration for ByteRover LLM service.
18
+ */
19
+ export interface ByteRoverHttpConfig {
20
+ accessToken: string;
21
+ apiBaseUrl: string;
22
+ projectId: string;
23
+ region?: string;
24
+ sessionKey: string;
25
+ spaceId: string;
26
+ teamId: string;
27
+ timeout?: number;
28
+ }
29
+ /**
30
+ * LLM configuration for per-session services.
31
+ */
32
+ export interface SessionLLMConfig {
33
+ httpReferer?: string;
34
+ maxIterations?: number;
35
+ maxTokens?: number;
36
+ model: string;
37
+ openRouterApiKey?: string;
38
+ siteName?: string;
39
+ temperature?: number;
40
+ verbose?: boolean;
41
+ }
42
+ export type { CipherAgentServices, SessionManagerConfig, SessionServices } from '../../../core/interfaces/cipher/cipher-services.js';
43
+ /**
44
+ * Creates shared services for CipherAgent.
45
+ * These services are singletons shared across all sessions.
46
+ *
47
+ * Initialization order follows DextoAgent pattern (explicit numbered steps):
48
+ * 1. Logger (uses provided event bus)
49
+ * 2. File system service (no dependencies)
50
+ * 3. Process service (no dependencies)
51
+ * 4. Blob storage (no dependencies)
52
+ * 5. Memory system (depends on BlobStorage, Logger)
53
+ * 6. System prompt manager (no dependencies)
54
+ * 7. Tool provider (depends on FileSystemService, ProcessService, MemoryManager)
55
+ * 8. Policy engine (no dependencies)
56
+ * 9. Tool scheduler (depends on ToolProvider, PolicyEngine)
57
+ * 10. Tool manager (depends on ToolProvider, ToolScheduler)
58
+ * 11. History storage (depends on BlobStorage)
59
+ * 12. Return all services
60
+ *
61
+ * @param config - Validated agent configuration (Zod-validated)
62
+ * @param agentEventBus - Pre-created event bus from agent constructor (DextoAgent pattern)
63
+ * @returns Initialized shared services
64
+ */
65
+ export declare function createCipherAgentServices(config: ValidatedAgentConfig, agentEventBus: AgentEventBus): Promise<CipherAgentServices>;
66
+ /**
67
+ * Creates session-specific services for a ChatSession.
68
+ * Generator composition order (innermost to outermost):
69
+ * 1. Base generator (ByteRoverContentGenerator or OpenRouterContentGenerator)
70
+ * 2. RetryableContentGenerator - handles transient errors with backoff
71
+ * 3. LoggingContentGenerator - debug logging (if verbose enabled)
72
+ *
73
+ * @param sessionId - Unique session identifier
74
+ * @param sharedServices - Shared services from agent
75
+ * @param httpConfig - HTTP configuration
76
+ * @param llmConfig - LLM service configuration
77
+ * @returns Initialized session services
78
+ */
79
+ export declare function createSessionServices(sessionId: string, sharedServices: CipherAgentServices, httpConfig: ByteRoverHttpConfig, llmConfig: SessionLLMConfig): SessionServices;