byterover-cli 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/entities/event.d.ts +1 -1
  49. package/dist/core/domain/entities/event.js +3 -1
  50. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  51. package/dist/core/domain/errors/connection-error.js +54 -0
  52. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  53. package/dist/core/domain/errors/core-process-error.js +43 -0
  54. package/dist/core/domain/errors/task-error.d.ts +64 -0
  55. package/dist/core/domain/errors/task-error.js +116 -0
  56. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  57. package/dist/core/domain/errors/transport-error.js +114 -0
  58. package/dist/core/domain/instance/index.d.ts +1 -0
  59. package/dist/core/domain/instance/index.js +1 -0
  60. package/dist/core/domain/instance/types.d.ts +57 -0
  61. package/dist/core/domain/instance/types.js +72 -0
  62. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  63. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  64. package/dist/core/domain/transport/index.d.ts +2 -0
  65. package/dist/core/domain/transport/index.js +2 -0
  66. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  67. package/dist/core/domain/transport/schemas.js +554 -0
  68. package/dist/core/domain/transport/types.d.ts +67 -0
  69. package/dist/core/domain/transport/types.js +7 -0
  70. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  71. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  72. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  73. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  74. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  75. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  76. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  77. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  79. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  80. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  81. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  82. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  83. package/dist/core/interfaces/cipher/index.js +11 -0
  84. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  85. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  86. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  87. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  88. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  89. package/dist/core/interfaces/cipher/message-types.js +6 -0
  90. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  91. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  92. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  93. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  94. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  95. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  96. package/dist/core/interfaces/executor/index.d.ts +2 -0
  97. package/dist/core/interfaces/executor/index.js +2 -0
  98. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  99. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  100. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  101. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  102. package/dist/core/interfaces/instance/index.d.ts +2 -0
  103. package/dist/core/interfaces/instance/index.js +2 -0
  104. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  105. package/dist/core/interfaces/noop-implementations.js +62 -0
  106. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  107. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  108. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  109. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  110. package/dist/core/interfaces/transport/index.d.ts +2 -0
  111. package/dist/core/interfaces/transport/index.js +2 -0
  112. package/dist/hooks/init/welcome.js +9 -24
  113. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  114. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  115. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  116. package/dist/infra/cipher/agent/agent-error.js +79 -0
  117. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  118. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  119. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  120. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  121. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  122. package/dist/infra/cipher/agent/base-agent.js +240 -0
  123. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  124. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  125. package/dist/infra/cipher/agent/index.d.ts +22 -0
  126. package/dist/infra/cipher/agent/index.js +24 -0
  127. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  128. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  129. package/dist/infra/cipher/agent/types.d.ts +35 -0
  130. package/dist/infra/cipher/agent/types.js +1 -0
  131. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  132. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  133. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  134. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  135. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  136. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  137. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  138. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  139. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  140. package/dist/infra/cipher/consumer/index.js +2 -1
  141. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  142. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  143. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  144. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  145. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  146. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  147. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  148. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  149. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  150. package/dist/infra/cipher/interactive-loop.js +41 -33
  151. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  152. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  153. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  154. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  155. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  156. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  157. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  158. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  159. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  160. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  161. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  162. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  163. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  164. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  165. package/dist/infra/cipher/llm/context/utils.js +17 -4
  166. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  167. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  168. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  169. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  170. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  171. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  172. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  173. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  174. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  175. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  176. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  177. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  178. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  179. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  180. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  181. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  182. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  183. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  184. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  185. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  186. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  187. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  188. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  189. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  190. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  191. package/dist/infra/cipher/process/command-validator.js +75 -0
  192. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  193. package/dist/infra/cipher/process/path-utils.js +94 -0
  194. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  195. package/dist/infra/cipher/process/process-service.js +98 -17
  196. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  197. package/dist/infra/cipher/session/chat-session.js +163 -13
  198. package/dist/infra/cipher/session/index.d.ts +1 -0
  199. package/dist/infra/cipher/session/index.js +2 -0
  200. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  201. package/dist/infra/cipher/session/message-queue.js +90 -0
  202. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  203. package/dist/infra/cipher/session/session-manager.js +254 -7
  204. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  205. package/dist/infra/cipher/session/session-status.js +184 -0
  206. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  207. package/dist/infra/cipher/session/title-generator.js +31 -0
  208. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  209. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  210. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  211. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  212. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  213. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  214. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  215. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  216. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  217. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  218. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  219. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  220. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  221. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  222. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  223. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  224. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  225. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  226. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  227. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  228. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  229. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  230. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  231. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  232. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  233. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  234. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  235. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  236. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  237. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  238. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  239. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  240. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  241. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  242. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  243. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  244. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  245. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  246. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  247. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  249. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  250. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  251. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  252. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  253. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  254. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  255. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  256. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  257. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  258. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  259. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  260. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  261. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  262. package/dist/infra/cipher/tools/index.d.ts +1 -1
  263. package/dist/infra/cipher/tools/index.js +1 -1
  264. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  265. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  266. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  267. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  268. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  269. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  270. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  271. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  272. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  273. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  274. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  275. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  276. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  277. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  278. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  279. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  280. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  281. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  282. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  283. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  284. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  285. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  286. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  287. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  288. package/dist/infra/context-tree/path-utils.js +7 -0
  289. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  290. package/dist/infra/core/executors/curate-executor.js +123 -0
  291. package/dist/infra/core/executors/index.d.ts +2 -0
  292. package/dist/infra/core/executors/index.js +2 -0
  293. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  294. package/dist/infra/core/executors/query-executor.js +51 -0
  295. package/dist/infra/core/task-processor.d.ts +81 -0
  296. package/dist/infra/core/task-processor.js +115 -0
  297. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  298. package/dist/infra/instance/file-instance-discovery.js +84 -0
  299. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  300. package/dist/infra/instance/file-instance-manager.js +123 -0
  301. package/dist/infra/instance/index.d.ts +3 -0
  302. package/dist/infra/instance/index.js +3 -0
  303. package/dist/infra/instance/process-utils.d.ts +14 -0
  304. package/dist/infra/instance/process-utils.js +39 -0
  305. package/dist/infra/process/agent-worker.d.ts +20 -0
  306. package/dist/infra/process/agent-worker.js +602 -0
  307. package/dist/infra/process/index.d.ts +12 -0
  308. package/dist/infra/process/index.js +11 -0
  309. package/dist/infra/process/ipc-types.d.ts +55 -0
  310. package/dist/infra/process/ipc-types.js +12 -0
  311. package/dist/infra/process/process-manager.d.ts +154 -0
  312. package/dist/infra/process/process-manager.js +471 -0
  313. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  314. package/dist/infra/process/task-queue-manager.js +226 -0
  315. package/dist/infra/process/transport-handlers.d.ts +124 -0
  316. package/dist/infra/process/transport-handlers.js +348 -0
  317. package/dist/infra/process/transport-worker.d.ts +20 -0
  318. package/dist/infra/process/transport-worker.js +168 -0
  319. package/dist/infra/repl/commands/curate-command.js +0 -5
  320. package/dist/infra/repl/commands/query-command.js +0 -3
  321. package/dist/infra/repl/repl-startup.d.ts +4 -0
  322. package/dist/infra/repl/repl-startup.js +10 -1
  323. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  324. package/dist/infra/repl/transport-client-helper.js +96 -0
  325. package/dist/infra/transport/index.d.ts +4 -0
  326. package/dist/infra/transport/index.js +4 -0
  327. package/dist/infra/transport/port-utils.d.ts +42 -0
  328. package/dist/infra/transport/port-utils.js +84 -0
  329. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  330. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  331. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  332. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  333. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  334. package/dist/infra/transport/transport-client-factory.js +168 -0
  335. package/dist/infra/transport/transport-factory.d.ts +33 -0
  336. package/dist/infra/transport/transport-factory.js +59 -0
  337. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  338. package/dist/infra/usecase/curate-use-case.js +73 -259
  339. package/dist/infra/usecase/init-use-case.js +19 -8
  340. package/dist/infra/usecase/login-use-case.js +9 -3
  341. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  342. package/dist/infra/usecase/query-use-case.js +251 -326
  343. package/dist/infra/usecase/status-use-case.js +1 -1
  344. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  345. package/dist/resources/prompts/explore.yml +78 -0
  346. package/dist/resources/prompts/plan.yml +114 -0
  347. package/dist/resources/prompts/reflection.yml +1 -1
  348. package/dist/resources/prompts/system-prompt.yml +15 -8
  349. package/dist/resources/prompts/tool-outputs.yml +0 -5
  350. package/dist/resources/tools/bash_exec.txt +98 -0
  351. package/dist/resources/tools/bash_output.txt +40 -0
  352. package/dist/resources/tools/batch.txt +28 -0
  353. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  354. package/dist/resources/tools/curate.txt +22 -0
  355. package/dist/resources/tools/delete_memory.txt +1 -0
  356. package/dist/resources/tools/detect_domains.txt +11 -0
  357. package/dist/resources/tools/edit_file.txt +1 -0
  358. package/dist/resources/tools/edit_memory.txt +1 -0
  359. package/dist/resources/tools/glob_files.txt +20 -0
  360. package/dist/resources/tools/grep_content.txt +18 -0
  361. package/dist/resources/tools/kill_process.txt +16 -0
  362. package/dist/resources/tools/list_directory.txt +16 -0
  363. package/dist/resources/tools/list_memories.txt +1 -0
  364. package/dist/resources/tools/read_file.txt +31 -0
  365. package/dist/resources/tools/read_memory.txt +1 -0
  366. package/dist/resources/tools/read_todos.txt +17 -0
  367. package/dist/resources/tools/search_history.txt +1 -0
  368. package/dist/resources/tools/task.txt +23 -0
  369. package/dist/resources/tools/write_file.txt +1 -0
  370. package/dist/resources/tools/write_memory.txt +1 -0
  371. package/dist/resources/tools/write_todos.txt +29 -0
  372. package/dist/tui/app.js +9 -13
  373. package/dist/tui/components/command-details.d.ts +14 -0
  374. package/dist/tui/components/command-details.js +35 -0
  375. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  376. package/dist/tui/components/execution/execution-changes.js +19 -4
  377. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  378. package/dist/tui/components/execution/execution-content.js +26 -13
  379. package/dist/tui/components/execution/execution-input.js +3 -3
  380. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  381. package/dist/tui/components/execution/execution-progress.js +8 -6
  382. package/dist/tui/components/execution/log-item.d.ts +3 -4
  383. package/dist/tui/components/execution/log-item.js +2 -5
  384. package/dist/tui/components/footer.js +9 -4
  385. package/dist/tui/components/header.d.ts +3 -3
  386. package/dist/tui/components/header.js +5 -3
  387. package/dist/tui/components/index.d.ts +1 -0
  388. package/dist/tui/components/index.js +1 -0
  389. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  390. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  391. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  392. package/dist/tui/components/scrollable-list.js +12 -10
  393. package/dist/tui/components/suggestions.js +39 -41
  394. package/dist/tui/components/tab-bar.d.ts +2 -1
  395. package/dist/tui/components/tab-bar.js +3 -4
  396. package/dist/tui/constants.d.ts +0 -5
  397. package/dist/tui/constants.js +0 -5
  398. package/dist/tui/contexts/auth-context.js +9 -2
  399. package/dist/tui/contexts/{use-commands.js → commands-context.js} +6 -5
  400. package/dist/tui/contexts/index.d.ts +6 -1
  401. package/dist/tui/contexts/index.js +6 -1
  402. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  403. package/dist/tui/contexts/onboarding-context.js +9 -9
  404. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  405. package/dist/tui/contexts/tasks-context.js +218 -0
  406. package/dist/tui/contexts/transport-context.d.ts +29 -0
  407. package/dist/tui/contexts/transport-context.js +82 -0
  408. package/dist/tui/hooks/index.d.ts +10 -6
  409. package/dist/tui/hooks/index.js +7 -6
  410. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  411. package/dist/tui/hooks/use-activity-logs.js +87 -34
  412. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  413. package/dist/tui/hooks/use-auth-polling.js +104 -0
  414. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  415. package/dist/tui/hooks/use-slash-completion.js +1 -1
  416. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  417. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  418. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  419. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  420. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  421. package/dist/tui/hooks/use-ui-heights.js +88 -0
  422. package/dist/tui/providers/app-providers.js +2 -6
  423. package/dist/tui/types/commands.d.ts +0 -26
  424. package/dist/tui/types/index.d.ts +1 -1
  425. package/dist/tui/types/ui.d.ts +9 -4
  426. package/dist/tui/utils/line.d.ts +11 -0
  427. package/dist/tui/utils/line.js +16 -0
  428. package/dist/tui/utils/log.d.ts +27 -0
  429. package/dist/tui/utils/log.js +114 -0
  430. package/dist/tui/views/command-view.d.ts +7 -0
  431. package/dist/tui/views/command-view.js +103 -80
  432. package/dist/tui/views/login-view.js +7 -4
  433. package/dist/tui/views/logs-view.d.ts +13 -0
  434. package/dist/tui/views/logs-view.js +27 -52
  435. package/dist/utils/connection-error-handler.d.ts +16 -0
  436. package/dist/utils/connection-error-handler.js +49 -0
  437. package/dist/utils/crash-log.d.ts +14 -0
  438. package/dist/utils/crash-log.js +19 -0
  439. package/dist/utils/file-helpers.d.ts +14 -0
  440. package/dist/utils/file-helpers.js +21 -0
  441. package/dist/utils/global-logs-path.d.ts +11 -0
  442. package/dist/utils/global-logs-path.js +37 -0
  443. package/dist/utils/process-logger.d.ts +53 -0
  444. package/dist/utils/process-logger.js +253 -0
  445. package/dist/utils/sandbox-detector.d.ts +31 -0
  446. package/dist/utils/sandbox-detector.js +122 -0
  447. package/oclif.manifest.json +10 -198
  448. package/package.json +5 -1
  449. package/dist/commands/cipher-agent/run.d.ts +0 -142
  450. package/dist/commands/cipher-agent/run.js +0 -555
  451. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  452. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  453. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  454. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  455. package/dist/commands/foo.d.ts +0 -14
  456. package/dist/commands/foo.js +0 -66
  457. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  458. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  459. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  460. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  461. package/dist/infra/cipher/cipher-agent.js +0 -317
  462. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  463. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  464. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  465. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  466. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  467. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  468. package/dist/tui/contexts/consumer.d.ts +0 -31
  469. package/dist/tui/contexts/consumer.js +0 -56
  470. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  471. package/dist/tui/hooks/use-consumer.js +0 -50
  472. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  473. package/dist/tui/hooks/use-queue-polling.js +0 -90
  474. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  475. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  476. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  477. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  478. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Unified agent state manager combining DextoAgent config patterns with execution state tracking.
3
+ *
4
+ * Manages two concerns:
5
+ *
6
+ * 1. Configuration State (DextoAgent pattern):
7
+ * - baselineConfig: Original validated config, never mutated
8
+ * - runtimeConfig: Current active config, can be mutated
9
+ * - sessionOverrides: Per-session config overrides
10
+ *
11
+ * 2. Execution State (runtime tracking):
12
+ * - currentIteration: Turn counter
13
+ * - executionState: idle | executing | complete | error | aborted | tool_calling
14
+ * - terminationReason: Why execution ended
15
+ * - timing: startTime, endTime, durationMs
16
+ * - toolCallsExecuted: Tool call counter
17
+ * - executionHistory: Legacy history records
18
+ */
19
+ export class AgentStateManager {
20
+ agentEventBus;
21
+ baselineConfig;
22
+ currentIteration = 0;
23
+ durationMs;
24
+ endTime;
25
+ executionHistory = [];
26
+ executionState = 'idle';
27
+ runtimeConfig;
28
+ sessionOverrides = new Map();
29
+ startTime;
30
+ terminationReason;
31
+ toolCallsExecuted = 0;
32
+ constructor(staticConfig, agentEventBus) {
33
+ this.agentEventBus = agentEventBus;
34
+ // Deep clone to prevent external mutations
35
+ this.baselineConfig = structuredClone(staticConfig);
36
+ this.runtimeConfig = structuredClone(staticConfig);
37
+ }
38
+ /**
39
+ * Add an execution record to history (legacy method).
40
+ * @param record - Execution record to add
41
+ */
42
+ addExecutionRecord(record) {
43
+ this.executionHistory.push(record);
44
+ }
45
+ /**
46
+ * Clear session-specific overrides.
47
+ */
48
+ clearSessionOverride(sessionId) {
49
+ const hadOverride = this.sessionOverrides.has(sessionId);
50
+ this.sessionOverrides.delete(sessionId);
51
+ if (hadOverride) {
52
+ this.agentEventBus.emit('cipher:stateReset', { sessionId });
53
+ }
54
+ }
55
+ /**
56
+ * Mark execution as complete with reason.
57
+ * @param reason - Why execution terminated
58
+ */
59
+ complete(reason) {
60
+ this.executionState = 'complete';
61
+ this.terminationReason = reason;
62
+ this.endTime = new Date();
63
+ if (this.startTime) {
64
+ this.durationMs = this.endTime.getTime() - this.startTime.getTime();
65
+ }
66
+ }
67
+ /**
68
+ * Export current runtime state as a config object.
69
+ */
70
+ exportAsConfig() {
71
+ return structuredClone(this.runtimeConfig);
72
+ }
73
+ /**
74
+ * Mark execution as errored.
75
+ * @param reason - Error termination reason
76
+ */
77
+ fail(reason) {
78
+ this.executionState = 'error';
79
+ this.terminationReason = reason;
80
+ this.endTime = new Date();
81
+ if (this.startTime) {
82
+ this.durationMs = this.endTime.getTime() - this.startTime.getTime();
83
+ }
84
+ }
85
+ /**
86
+ * Get the original baseline configuration.
87
+ */
88
+ getBaselineConfig() {
89
+ return structuredClone(this.baselineConfig);
90
+ }
91
+ /**
92
+ * Get the current execution state.
93
+ * @returns Current agent state with all execution fields
94
+ */
95
+ getExecutionState() {
96
+ return {
97
+ currentIteration: this.currentIteration,
98
+ durationMs: this.durationMs,
99
+ endTime: this.endTime,
100
+ executionHistory: [...this.executionHistory],
101
+ executionState: this.executionState,
102
+ startTime: this.startTime,
103
+ terminationReason: this.terminationReason,
104
+ toolCallsExecuted: this.toolCallsExecuted,
105
+ };
106
+ }
107
+ /**
108
+ * Get effective LLM config for a session.
109
+ */
110
+ getLLMConfig(sessionId) {
111
+ return this.getRuntimeConfig(sessionId).llm;
112
+ }
113
+ /**
114
+ * Get the current model identifier.
115
+ */
116
+ getModel(sessionId) {
117
+ return this.getRuntimeConfig(sessionId).model;
118
+ }
119
+ /**
120
+ * Get runtime configuration for a session (includes session overrides if sessionId provided).
121
+ */
122
+ getRuntimeConfig(sessionId) {
123
+ if (!sessionId) {
124
+ return structuredClone(this.runtimeConfig);
125
+ }
126
+ const override = this.sessionOverrides.get(sessionId);
127
+ if (!override) {
128
+ return structuredClone(this.runtimeConfig);
129
+ }
130
+ // Merge session overrides into runtime config
131
+ return {
132
+ ...this.runtimeConfig,
133
+ llm: { ...this.runtimeConfig.llm, ...override.llm },
134
+ };
135
+ }
136
+ /**
137
+ * Get all session IDs that have overrides.
138
+ */
139
+ getSessionsWithOverrides() {
140
+ return [...this.sessionOverrides.keys()];
141
+ }
142
+ /**
143
+ * Check if a session has overrides.
144
+ */
145
+ hasSessionOverride(sessionId) {
146
+ return this.sessionOverrides.has(sessionId);
147
+ }
148
+ /**
149
+ * Increment the iteration counter.
150
+ * @returns The new iteration count
151
+ */
152
+ incrementIteration() {
153
+ this.currentIteration++;
154
+ return this.currentIteration;
155
+ }
156
+ /**
157
+ * Increment the tool calls counter.
158
+ * @returns The new tool calls count
159
+ */
160
+ incrementToolCalls() {
161
+ this.toolCallsExecuted++;
162
+ return this.toolCallsExecuted;
163
+ }
164
+ /**
165
+ * Reset all state to initial values.
166
+ * Resets both execution state and configuration state.
167
+ */
168
+ reset() {
169
+ // Reset execution state
170
+ this.currentIteration = 0;
171
+ this.durationMs = undefined;
172
+ this.endTime = undefined;
173
+ this.executionHistory = [];
174
+ this.executionState = 'idle';
175
+ this.startTime = undefined;
176
+ this.terminationReason = undefined;
177
+ this.toolCallsExecuted = 0;
178
+ }
179
+ /**
180
+ * Reset runtime configuration to baseline.
181
+ * Also clears all session overrides.
182
+ */
183
+ resetToBaseline() {
184
+ this.runtimeConfig = structuredClone(this.baselineConfig);
185
+ this.sessionOverrides.clear();
186
+ this.agentEventBus.emit('cipher:stateReset', {});
187
+ }
188
+ /**
189
+ * Set the current execution state.
190
+ * @param state - New execution state
191
+ */
192
+ setExecutionState(state) {
193
+ this.executionState = state;
194
+ }
195
+ /**
196
+ * Start execution tracking.
197
+ * Sets startTime and transitions to executing state.
198
+ */
199
+ startExecution() {
200
+ this.startTime = new Date();
201
+ this.executionState = 'executing';
202
+ }
203
+ /**
204
+ * Update LLM configuration globally or for a specific session.
205
+ *
206
+ * @param updates - Partial LLM configuration updates
207
+ * @param sessionId - Optional session ID for session-specific override
208
+ */
209
+ updateLLM(updates, sessionId) {
210
+ const oldValue = sessionId ? this.getRuntimeConfig(sessionId).llm : this.runtimeConfig.llm;
211
+ if (sessionId) {
212
+ // Session-specific override
213
+ this.setSessionOverride(sessionId, { llm: updates });
214
+ }
215
+ else {
216
+ // Global update
217
+ this.runtimeConfig = {
218
+ ...this.runtimeConfig,
219
+ llm: { ...this.runtimeConfig.llm, ...updates },
220
+ };
221
+ }
222
+ const newValue = sessionId ? this.getRuntimeConfig(sessionId).llm : this.runtimeConfig.llm;
223
+ this.agentEventBus.emit('cipher:stateChanged', {
224
+ field: 'llm',
225
+ newValue,
226
+ oldValue,
227
+ sessionId,
228
+ });
229
+ }
230
+ /**
231
+ * Update the model globally or for a specific session.
232
+ */
233
+ updateModel(model, sessionId) {
234
+ const oldValue = this.getModel(sessionId);
235
+ if (sessionId) {
236
+ // For session-specific model change, we need to track it differently
237
+ // since model is at the root level, not in llm config
238
+ // For now, emit state change event
239
+ this.agentEventBus.emit('cipher:stateChanged', {
240
+ field: 'model',
241
+ newValue: model,
242
+ oldValue,
243
+ sessionId,
244
+ });
245
+ }
246
+ else {
247
+ this.runtimeConfig = {
248
+ ...this.runtimeConfig,
249
+ model,
250
+ };
251
+ this.agentEventBus.emit('cipher:stateChanged', {
252
+ field: 'model',
253
+ newValue: model,
254
+ oldValue,
255
+ });
256
+ }
257
+ }
258
+ /**
259
+ * Set a session-specific override.
260
+ */
261
+ setSessionOverride(sessionId, override) {
262
+ const existing = this.sessionOverrides.get(sessionId) ?? {};
263
+ // Merge LLM overrides
264
+ const mergedOverride = {
265
+ ...existing,
266
+ llm: { ...existing.llm, ...override.llm },
267
+ };
268
+ this.sessionOverrides.set(sessionId, mergedOverride);
269
+ this.agentEventBus.emit('cipher:stateChanged', {
270
+ field: 'sessionOverride',
271
+ newValue: structuredClone(mergedOverride),
272
+ sessionId,
273
+ });
274
+ }
275
+ }
@@ -0,0 +1,118 @@
1
+ import type { CipherAgentServices } from '../../../core/interfaces/cipher/cipher-services.js';
2
+ import type { AgentEventBus } from '../events/event-emitter.js';
3
+ import { type LLMUpdates, type ValidatedAgentConfig, type ValidatedLLMConfig } from './agent-schemas.js';
4
+ import { AgentStateManager } from './agent-state-manager.js';
5
+ /**
6
+ * Abstract base agent class encapsulating DextoAgent patterns.
7
+ *
8
+ * Provides:
9
+ * - Two-phase initialization (constructor + start)
10
+ * - Lifecycle management (start, stop, restart)
11
+ * - State management with session overrides
12
+ * - Typed error handling
13
+ * - Configuration validation
14
+ *
15
+ * Subclasses must implement:
16
+ * - initializeServices(): Create agent-specific services
17
+ * - cleanupServices(): Cleanup on stop
18
+ */
19
+ export declare abstract class BaseAgent {
20
+ protected _isStarted: boolean;
21
+ protected _isStopped: boolean;
22
+ readonly config: ValidatedAgentConfig;
23
+ protected services?: CipherAgentServices;
24
+ protected stateManager?: AgentStateManager;
25
+ /**
26
+ * Create a new agent instance.
27
+ * Does NOT initialize services - call start() for async initialization.
28
+ *
29
+ * @param config - Agent configuration (will be validated with Zod)
30
+ * @throws AgentError if configuration validation fails
31
+ */
32
+ constructor(config: unknown);
33
+ /**
34
+ * Cleanup agent-specific services.
35
+ * Called during stop().
36
+ */
37
+ protected abstract cleanupServices(): Promise<void>;
38
+ /**
39
+ * Clear session-specific configuration overrides.
40
+ */
41
+ clearSessionConfig(sessionId: string): void;
42
+ /**
43
+ * Ensure the agent is started before operations.
44
+ * @throws AgentError if not started or stopped
45
+ */
46
+ protected ensureStarted(): void;
47
+ /**
48
+ * Get the agent event bus (for subscribing to events).
49
+ */
50
+ getAgentEventBus(): AgentEventBus;
51
+ /**
52
+ * Get the baseline configuration (original config, never modified).
53
+ */
54
+ getBaselineConfig(): Readonly<ValidatedAgentConfig>;
55
+ /**
56
+ * Get effective configuration for a session.
57
+ * Includes session-specific overrides if sessionId is provided.
58
+ */
59
+ getEffectiveConfig(sessionId?: string): Readonly<ValidatedAgentConfig>;
60
+ /**
61
+ * Get current LLM configuration.
62
+ */
63
+ getLLMConfig(sessionId?: string): Readonly<ValidatedLLMConfig>;
64
+ /**
65
+ * Get services (guaranteed to be defined after start).
66
+ */
67
+ protected getServices(): CipherAgentServices;
68
+ /**
69
+ * Get the state manager (guaranteed to be defined after start).
70
+ */
71
+ protected getStateManager(): AgentStateManager;
72
+ /**
73
+ * Initialize agent-specific services.
74
+ * Called during start().
75
+ */
76
+ protected abstract initializeServices(): Promise<CipherAgentServices>;
77
+ /**
78
+ * Check if the agent is started.
79
+ */
80
+ isStarted(): boolean;
81
+ /**
82
+ * Check if the agent is stopped.
83
+ */
84
+ isStopped(): boolean;
85
+ /**
86
+ * Reset configuration to baseline.
87
+ */
88
+ resetConfig(): void;
89
+ /**
90
+ * Restart the agent (stop + start).
91
+ */
92
+ restart(): Promise<void>;
93
+ /**
94
+ * Start the agent and initialize all services.
95
+ * Must be called before using other methods.
96
+ *
97
+ * @throws AgentError if already started or initialization fails
98
+ */
99
+ start(): Promise<void>;
100
+ /**
101
+ * Stop the agent and cleanup all services.
102
+ * After stopping, the agent can be restarted with start().
103
+ */
104
+ stop(): Promise<void>;
105
+ /**
106
+ * Update LLM configuration at runtime.
107
+ *
108
+ * @param updates - Partial LLM configuration updates
109
+ * @param sessionId - Optional session ID for session-specific override
110
+ * @returns Updated LLM configuration
111
+ */
112
+ updateLLM(updates: LLMUpdates, sessionId?: string): ValidatedLLMConfig;
113
+ /**
114
+ * Validate that all required services are present.
115
+ * Can be overridden by subclasses to add custom validation.
116
+ */
117
+ protected validateServices(services: CipherAgentServices): void;
118
+ }
@@ -0,0 +1,240 @@
1
+ import { AgentError } from './agent-error.js';
2
+ import { AgentConfigSchema, LLMUpdatesSchema } from './agent-schemas.js';
3
+ import { AgentStateManager } from './agent-state-manager.js';
4
+ /**
5
+ * Abstract base agent class encapsulating DextoAgent patterns.
6
+ *
7
+ * Provides:
8
+ * - Two-phase initialization (constructor + start)
9
+ * - Lifecycle management (start, stop, restart)
10
+ * - State management with session overrides
11
+ * - Typed error handling
12
+ * - Configuration validation
13
+ *
14
+ * Subclasses must implement:
15
+ * - initializeServices(): Create agent-specific services
16
+ * - cleanupServices(): Cleanup on stop
17
+ */
18
+ export class BaseAgent {
19
+ // === Lifecycle State ===
20
+ _isStarted = false;
21
+ _isStopped = false;
22
+ // === Configuration ===
23
+ config;
24
+ // === Services (initialized in start()) ===
25
+ services;
26
+ stateManager;
27
+ /**
28
+ * Create a new agent instance.
29
+ * Does NOT initialize services - call start() for async initialization.
30
+ *
31
+ * @param config - Agent configuration (will be validated with Zod)
32
+ * @throws AgentError if configuration validation fails
33
+ */
34
+ constructor(config) {
35
+ // Validate and transform config using Zod schema
36
+ const parseResult = AgentConfigSchema.safeParse(config);
37
+ if (!parseResult.success) {
38
+ throw AgentError.invalidConfig('Configuration validation failed', parseResult.error.format());
39
+ }
40
+ this.config = parseResult.data;
41
+ }
42
+ /**
43
+ * Clear session-specific configuration overrides.
44
+ */
45
+ clearSessionConfig(sessionId) {
46
+ this.ensureStarted();
47
+ this.getStateManager().clearSessionOverride(sessionId);
48
+ }
49
+ /**
50
+ * Ensure the agent is started before operations.
51
+ * @throws AgentError if not started or stopped
52
+ */
53
+ ensureStarted() {
54
+ if (this._isStopped && !this._isStarted) {
55
+ throw AgentError.stopped();
56
+ }
57
+ if (!this._isStarted) {
58
+ throw AgentError.notStarted();
59
+ }
60
+ }
61
+ /**
62
+ * Get the agent event bus (for subscribing to events).
63
+ */
64
+ getAgentEventBus() {
65
+ this.ensureStarted();
66
+ return this.getServices().agentEventBus;
67
+ }
68
+ /**
69
+ * Get the baseline configuration (original config, never modified).
70
+ */
71
+ getBaselineConfig() {
72
+ this.ensureStarted();
73
+ return this.getStateManager().getBaselineConfig();
74
+ }
75
+ /**
76
+ * Get effective configuration for a session.
77
+ * Includes session-specific overrides if sessionId is provided.
78
+ */
79
+ getEffectiveConfig(sessionId) {
80
+ this.ensureStarted();
81
+ return this.getStateManager().getRuntimeConfig(sessionId);
82
+ }
83
+ /**
84
+ * Get current LLM configuration.
85
+ */
86
+ getLLMConfig(sessionId) {
87
+ this.ensureStarted();
88
+ return this.getStateManager().getLLMConfig(sessionId);
89
+ }
90
+ /**
91
+ * Get services (guaranteed to be defined after start).
92
+ */
93
+ getServices() {
94
+ if (!this.services) {
95
+ throw AgentError.serviceNotInitialized('CipherAgentServices');
96
+ }
97
+ return this.services;
98
+ }
99
+ /**
100
+ * Get the state manager (guaranteed to be defined after start).
101
+ */
102
+ getStateManager() {
103
+ if (!this.stateManager) {
104
+ throw AgentError.serviceNotInitialized('AgentStateManager');
105
+ }
106
+ return this.stateManager;
107
+ }
108
+ /**
109
+ * Check if the agent is started.
110
+ */
111
+ isStarted() {
112
+ return this._isStarted;
113
+ }
114
+ /**
115
+ * Check if the agent is stopped.
116
+ */
117
+ isStopped() {
118
+ return this._isStopped;
119
+ }
120
+ /**
121
+ * Reset configuration to baseline.
122
+ */
123
+ resetConfig() {
124
+ this.ensureStarted();
125
+ this.getStateManager().resetToBaseline();
126
+ }
127
+ /**
128
+ * Restart the agent (stop + start).
129
+ */
130
+ async restart() {
131
+ await this.stop();
132
+ await this.start();
133
+ }
134
+ /**
135
+ * Start the agent and initialize all services.
136
+ * Must be called before using other methods.
137
+ *
138
+ * @throws AgentError if already started or initialization fails
139
+ */
140
+ async start() {
141
+ if (this._isStarted) {
142
+ throw AgentError.alreadyStarted();
143
+ }
144
+ if (this._isStopped) {
145
+ // Reset stopped flag to allow restart
146
+ this._isStopped = false;
147
+ }
148
+ try {
149
+ // Initialize services (implemented by subclass)
150
+ const services = await this.initializeServices();
151
+ // Validate required services
152
+ this.validateServices(services);
153
+ // Assign services
154
+ this.services = services;
155
+ // Create state manager with the event bus from services
156
+ this.stateManager = new AgentStateManager(this.config, services.agentEventBus);
157
+ this._isStarted = true;
158
+ }
159
+ catch (error) {
160
+ if (error instanceof AgentError) {
161
+ throw error;
162
+ }
163
+ throw AgentError.initializationFailed(error instanceof Error ? error.message : String(error), error);
164
+ }
165
+ }
166
+ /**
167
+ * Stop the agent and cleanup all services.
168
+ * After stopping, the agent can be restarted with start().
169
+ */
170
+ async stop() {
171
+ if (this._isStopped) {
172
+ return; // Already stopped, no-op
173
+ }
174
+ if (!this._isStarted) {
175
+ // Not started, just mark as stopped
176
+ this._isStopped = true;
177
+ return;
178
+ }
179
+ try {
180
+ // Cleanup services (implemented by subclass)
181
+ await this.cleanupServices();
182
+ // Clear state
183
+ this.services = undefined;
184
+ this.stateManager = undefined;
185
+ this._isStopped = true;
186
+ this._isStarted = false;
187
+ }
188
+ catch (error) {
189
+ // Still mark as stopped even if cleanup fails
190
+ this._isStopped = true;
191
+ this._isStarted = false;
192
+ throw AgentError.executionFailed(`Failed to stop agent: ${error instanceof Error ? error.message : String(error)}`, error);
193
+ }
194
+ }
195
+ /**
196
+ * Update LLM configuration at runtime.
197
+ *
198
+ * @param updates - Partial LLM configuration updates
199
+ * @param sessionId - Optional session ID for session-specific override
200
+ * @returns Updated LLM configuration
201
+ */
202
+ updateLLM(updates, sessionId) {
203
+ this.ensureStarted();
204
+ // Validate updates
205
+ const parseResult = LLMUpdatesSchema.safeParse(updates);
206
+ if (!parseResult.success) {
207
+ throw AgentError.invalidConfig('Invalid LLM updates', parseResult.error.format());
208
+ }
209
+ // Get current config and merge
210
+ const currentConfig = this.getStateManager().getLLMConfig(sessionId);
211
+ const mergedUpdates = { ...currentConfig, ...parseResult.data };
212
+ // Update state
213
+ this.getStateManager().updateLLM(mergedUpdates, sessionId);
214
+ return this.getStateManager().getLLMConfig(sessionId);
215
+ }
216
+ /**
217
+ * Validate that all required services are present.
218
+ * Can be overridden by subclasses to add custom validation.
219
+ */
220
+ validateServices(services) {
221
+ const requiredServices = [
222
+ 'agentEventBus',
223
+ 'toolManager',
224
+ 'systemPromptManager',
225
+ 'fileSystemService',
226
+ 'processService',
227
+ 'historyStorage',
228
+ 'memoryManager',
229
+ 'blobStorage',
230
+ 'policyEngine',
231
+ 'toolProvider',
232
+ 'toolScheduler',
233
+ ];
234
+ for (const serviceName of requiredServices) {
235
+ if (!services[serviceName]) {
236
+ throw AgentError.missingRequiredService(serviceName);
237
+ }
238
+ }
239
+ }
240
+ }