byterover-cli 0.2.1 → 0.3.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 (490) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +48 -3
  18. package/dist/commands/init.js +242 -70
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/pull.d.ts +33 -0
  21. package/dist/commands/pull.js +115 -0
  22. package/dist/commands/push.d.ts +13 -13
  23. package/dist/commands/push.js +81 -101
  24. package/dist/commands/query.d.ts +63 -0
  25. package/dist/commands/query.js +349 -0
  26. package/dist/commands/space/list.d.ts +5 -2
  27. package/dist/commands/space/list.js +60 -56
  28. package/dist/commands/space/switch.d.ts +16 -0
  29. package/dist/commands/space/switch.js +102 -53
  30. package/dist/commands/status.d.ts +5 -2
  31. package/dist/commands/status.js +43 -33
  32. package/dist/commands/watch.d.ts +23 -0
  33. package/dist/commands/watch.js +171 -0
  34. package/dist/config/auth.config.js +14 -2
  35. package/dist/config/context-tree-domains.d.ts +12 -0
  36. package/dist/config/context-tree-domains.js +29 -0
  37. package/dist/config/environment.d.ts +6 -0
  38. package/dist/config/environment.js +9 -2
  39. package/dist/constants.d.ts +5 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  42. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  43. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  44. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  45. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  46. package/dist/core/domain/cipher/agent/index.js +7 -0
  47. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  48. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  50. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  51. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  52. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  53. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  54. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  55. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  56. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  57. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  58. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  59. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  60. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  61. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  62. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  63. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  64. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  65. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  66. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  67. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  68. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  69. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  70. package/dist/core/domain/cipher/memory/types.js +4 -0
  71. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  72. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  73. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  74. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  75. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  76. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  77. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  78. package/dist/core/domain/cipher/todos/index.js +4 -0
  79. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  80. package/dist/core/domain/cipher/todos/types.js +5 -0
  81. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  82. package/dist/core/domain/cipher/tools/constants.js +24 -0
  83. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  84. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  85. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  86. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  87. package/dist/core/domain/entities/brv-config.js +115 -17
  88. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  89. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  90. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  91. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  92. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  93. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  94. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  95. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  96. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  97. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  98. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  99. package/dist/core/domain/entities/context-tree-index.js +27 -0
  100. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  101. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  102. package/dist/core/domain/entities/event.d.ts +1 -1
  103. package/dist/core/domain/entities/event.js +3 -1
  104. package/dist/core/domain/entities/parser.d.ts +567 -0
  105. package/dist/core/domain/entities/parser.js +10 -0
  106. package/dist/core/domain/entities/playbook.d.ts +2 -23
  107. package/dist/core/domain/entities/playbook.js +2 -70
  108. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  109. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  110. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  111. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  112. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  113. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  114. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  115. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  116. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  117. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  118. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  119. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  120. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  121. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  122. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  123. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  124. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  125. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  128. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  129. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  130. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  131. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  132. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  133. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  134. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  135. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  136. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  137. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  139. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  140. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  141. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  142. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  143. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  144. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  145. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  146. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  147. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  148. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  149. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  150. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  151. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  153. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  155. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  156. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  157. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  158. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  159. package/dist/core/interfaces/cipher/message-types.js +5 -0
  160. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  161. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  162. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  163. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  164. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  165. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  166. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  167. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  168. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  169. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  171. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  173. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  174. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  175. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  176. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  177. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  178. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  179. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  180. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  181. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  182. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  183. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  184. package/dist/hooks/error/clean-errors.d.ts +7 -0
  185. package/dist/hooks/error/clean-errors.js +50 -0
  186. package/dist/hooks/init/welcome.js +72 -1
  187. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  188. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  189. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  190. package/dist/infra/cipher/agent-service-factory.js +212 -0
  191. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  192. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  193. package/dist/infra/cipher/blob/index.d.ts +10 -0
  194. package/dist/infra/cipher/blob/index.js +12 -0
  195. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  196. package/dist/infra/cipher/blob/migrations.js +148 -0
  197. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  198. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  199. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  200. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  201. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  202. package/dist/infra/cipher/cipher-agent.js +317 -0
  203. package/dist/infra/cipher/command-parser.d.ts +23 -0
  204. package/dist/infra/cipher/command-parser.js +85 -0
  205. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  206. package/dist/infra/cipher/display/todo-display.js +129 -0
  207. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  208. package/dist/infra/cipher/events/event-emitter.js +158 -0
  209. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  210. package/dist/infra/cipher/exit-codes.js +58 -0
  211. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  212. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  213. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  214. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  215. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  216. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  217. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  218. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  219. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  220. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  221. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  222. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  223. package/dist/infra/cipher/interactive-commands.js +198 -0
  224. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  225. package/dist/infra/cipher/interactive-loop.js +352 -0
  226. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  227. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  228. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  229. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  230. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  231. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  232. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  233. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  234. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  235. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  236. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  237. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  238. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  239. package/dist/infra/cipher/llm/context/index.js +2 -0
  240. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  241. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  242. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  243. package/dist/infra/cipher/llm/context/utils.js +89 -0
  244. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  245. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  246. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  247. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  248. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  249. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  250. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  251. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  252. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  253. package/dist/infra/cipher/llm/generators/index.js +13 -0
  254. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  255. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  256. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  257. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  258. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  259. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  260. package/dist/infra/cipher/llm/index.d.ts +9 -0
  261. package/dist/infra/cipher/llm/index.js +13 -0
  262. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  263. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  264. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  265. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  266. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  267. package/dist/infra/cipher/llm/response-validator.js +157 -0
  268. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  269. package/dist/infra/cipher/llm/retry/index.js +10 -0
  270. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  271. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  272. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  273. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  274. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  275. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  276. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  277. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  278. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  279. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  280. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  281. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  282. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  283. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  284. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  285. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  286. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  287. package/dist/infra/cipher/logger/console-logger.js +63 -0
  288. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  289. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  290. package/dist/infra/cipher/memory/index.d.ts +6 -0
  291. package/dist/infra/cipher/memory/index.js +7 -0
  292. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  293. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  294. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  295. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  296. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  297. package/dist/infra/cipher/process/command-validator.js +266 -0
  298. package/dist/infra/cipher/process/index.d.ts +8 -0
  299. package/dist/infra/cipher/process/index.js +8 -0
  300. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  301. package/dist/infra/cipher/process/process-service.js +439 -0
  302. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  303. package/dist/infra/cipher/session/chat-session.js +165 -0
  304. package/dist/infra/cipher/session/index.d.ts +6 -0
  305. package/dist/infra/cipher/session/index.js +5 -0
  306. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  307. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  308. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  309. package/dist/infra/cipher/session/session-manager.js +172 -0
  310. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  311. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  312. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  313. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  314. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  315. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  316. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  317. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  318. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  319. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  320. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  321. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  322. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  323. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  324. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  326. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  327. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  328. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  329. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  330. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  331. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  332. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  333. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  334. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  335. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  336. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  337. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  338. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  339. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  340. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  342. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  344. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  346. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  347. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  348. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  350. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  351. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  352. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  353. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  354. package/dist/infra/cipher/tools/index.d.ts +18 -0
  355. package/dist/infra/cipher/tools/index.js +19 -0
  356. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  357. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  358. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  359. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  360. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  361. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  362. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  363. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  364. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  365. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  366. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  367. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  368. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  369. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  370. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  371. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  372. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  373. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  374. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  375. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  376. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  377. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  378. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  379. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  380. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  381. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  382. package/dist/infra/config/file-config-store.js +9 -3
  383. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  384. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  385. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  386. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  387. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  388. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  389. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  390. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  391. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  392. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  393. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  394. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  395. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  396. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  397. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  398. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  399. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  400. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  401. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  402. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  403. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  404. package/dist/infra/parsers/clean/shared.js +273 -0
  405. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  406. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  407. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  408. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  409. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  410. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  411. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  412. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  413. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  414. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  415. package/dist/infra/space/http-space-service.js +2 -1
  416. package/dist/infra/team/http-team-service.js +2 -1
  417. package/dist/infra/user/http-user-service.js +2 -1
  418. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  419. package/dist/infra/watcher/file-watcher-service.js +81 -0
  420. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  421. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  422. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  423. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  424. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  425. package/dist/resources/prompts/reflection.yml +27 -0
  426. package/dist/resources/prompts/system-prompt.yml +82 -0
  427. package/dist/resources/prompts/tool-outputs.yml +30 -0
  428. package/dist/templates/README.md +6 -7
  429. package/dist/templates/sections/command-reference.md +40 -111
  430. package/dist/templates/sections/workflow.md +3 -30
  431. package/dist/utils/emoji-helpers.d.ts +38 -0
  432. package/dist/utils/emoji-helpers.js +42 -0
  433. package/dist/utils/error-handler.d.ts +51 -0
  434. package/dist/utils/error-handler.js +169 -0
  435. package/dist/utils/error-helpers.d.ts +30 -0
  436. package/dist/utils/error-helpers.js +47 -0
  437. package/dist/utils/file-helpers.d.ts +15 -0
  438. package/dist/utils/file-helpers.js +44 -0
  439. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  440. package/dist/utils/oclif-error-helpers.js +46 -0
  441. package/dist/utils/tool-display-formatter.d.ts +53 -0
  442. package/dist/utils/tool-display-formatter.js +257 -0
  443. package/oclif.manifest.json +381 -141
  444. package/package.json +27 -6
  445. package/dist/commands/add.d.ts +0 -49
  446. package/dist/commands/add.js +0 -192
  447. package/dist/commands/complete.d.ts +0 -108
  448. package/dist/commands/complete.js +0 -340
  449. package/dist/commands/retrieve.d.ts +0 -26
  450. package/dist/commands/retrieve.js +0 -101
  451. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  452. package/dist/core/domain/entities/curator-output.js +0 -23
  453. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  454. package/dist/core/domain/entities/delta-batch.js +0 -52
  455. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  456. package/dist/core/domain/entities/delta-operation.js +0 -50
  457. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  458. package/dist/core/domain/entities/executor-output.js +0 -33
  459. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  460. package/dist/core/domain/entities/reflector-output.js +0 -44
  461. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  462. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  463. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  464. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  465. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  466. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  467. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  468. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  469. package/dist/infra/ace/ace-file-utils.js +0 -83
  470. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  471. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  472. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  473. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  474. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  475. package/dist/infra/ace/file-delta-store.js +0 -26
  476. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  477. package/dist/infra/ace/file-executor-output-store.js +0 -26
  478. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  479. package/dist/infra/ace/file-playbook-store.js +0 -107
  480. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  481. package/dist/infra/ace/file-reflection-store.js +0 -55
  482. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  483. package/dist/infra/playbook/file-playbook-service.js +0 -132
  484. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  485. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  486. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  487. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  488. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  489. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  490. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Command parser for interactive CLI
3
+ * Parses user input to distinguish between slash commands and regular prompts
4
+ */
5
+ /**
6
+ * Parse user input into command or prompt
7
+ *
8
+ * @param input - Raw user input string
9
+ * @returns Parsed command result (discriminated union)
10
+ */
11
+ export function parseInput(input) {
12
+ const trimmed = input.trim();
13
+ // Check if it's a slash command
14
+ if (trimmed.startsWith('/')) {
15
+ const args = parseQuotedArguments(trimmed.slice(1));
16
+ const command = args[0] || '';
17
+ const commandArgs = args.slice(1);
18
+ return {
19
+ args: commandArgs,
20
+ command,
21
+ rawInput: trimmed,
22
+ type: 'command',
23
+ };
24
+ }
25
+ // Regular user prompt
26
+ return {
27
+ rawInput: input,
28
+ type: 'prompt',
29
+ };
30
+ }
31
+ /**
32
+ * Parse command arguments with support for quoted strings
33
+ * Respects single and double quotes with escape sequences
34
+ *
35
+ * @param input - Command input (without leading slash)
36
+ * @returns Array of parsed arguments
37
+ */
38
+ function parseQuotedArguments(input) {
39
+ const args = [];
40
+ let current = '';
41
+ let inQuote = null;
42
+ let escaped = false;
43
+ for (const char of input) {
44
+ if (escaped) {
45
+ // Handle escape sequences
46
+ current += char;
47
+ escaped = false;
48
+ continue;
49
+ }
50
+ if (char === '\\') {
51
+ // Start escape sequence
52
+ escaped = true;
53
+ continue;
54
+ }
55
+ if (inQuote) {
56
+ // Inside quoted string
57
+ if (char === inQuote) {
58
+ // End quote
59
+ inQuote = null;
60
+ }
61
+ else {
62
+ current += char;
63
+ }
64
+ }
65
+ else if (char === '"' || char === "'") {
66
+ // Start quote
67
+ inQuote = char;
68
+ }
69
+ else if (char === ' ' || char === '\t') {
70
+ // Whitespace - end of argument
71
+ if (current.length > 0) {
72
+ args.push(current);
73
+ current = '';
74
+ }
75
+ }
76
+ else {
77
+ current += char;
78
+ }
79
+ }
80
+ // Add final argument if any
81
+ if (current.length > 0) {
82
+ args.push(current);
83
+ }
84
+ return args;
85
+ }
@@ -0,0 +1,23 @@
1
+ import type { Todo } from '../../../core/domain/cipher/todos/types.js';
2
+ /**
3
+ * Formats a single todo item for display.
4
+ *
5
+ * @param todo - Todo item to format
6
+ * @param index - 1-based index of the todo
7
+ * @returns Formatted todo string
8
+ */
9
+ export declare function formatTodoItem(todo: Todo, index: number): string;
10
+ /**
11
+ * Formats the entire todo list for display.
12
+ *
13
+ * @param todos - Array of todos to format
14
+ * @returns Formatted todo list string
15
+ */
16
+ export declare function formatTodoList(todos: Todo[]): string;
17
+ /**
18
+ * Formats a compact status line for the current task.
19
+ *
20
+ * @param todos - Array of todos
21
+ * @returns Status line string or null if no task in progress
22
+ */
23
+ export declare function formatCurrentTaskStatus(todos: Todo[]): null | string;
@@ -0,0 +1,129 @@
1
+ /**
2
+ * ANSI color codes for terminal output.
3
+ */
4
+ const Colors = {
5
+ blue: '\u001B[34m',
6
+ cyan: '\u001B[36m',
7
+ dim: '\u001B[2m',
8
+ green: '\u001B[32m',
9
+ red: '\u001B[31m',
10
+ reset: '\u001B[0m',
11
+ yellow: '\u001B[33m',
12
+ };
13
+ /**
14
+ * Gets the status icon for a todo.
15
+ *
16
+ * @param status - Todo status
17
+ * @returns Colored status icon
18
+ */
19
+ function getStatusIcon(status) {
20
+ switch (status) {
21
+ case 'cancelled': {
22
+ return `${Colors.dim}⊘${Colors.reset}`;
23
+ }
24
+ case 'completed': {
25
+ return `${Colors.green}✓${Colors.reset}`;
26
+ }
27
+ case 'in_progress': {
28
+ return `${Colors.blue}→${Colors.reset}`;
29
+ }
30
+ case 'pending': {
31
+ return `${Colors.dim}○${Colors.reset}`;
32
+ }
33
+ }
34
+ }
35
+ /**
36
+ * Gets the status color for a todo.
37
+ *
38
+ * @param status - Todo status
39
+ * @returns ANSI color code
40
+ */
41
+ function getStatusColor(status) {
42
+ switch (status) {
43
+ case 'cancelled': {
44
+ return Colors.dim;
45
+ }
46
+ case 'completed': {
47
+ return Colors.green;
48
+ }
49
+ case 'in_progress': {
50
+ return Colors.blue;
51
+ }
52
+ case 'pending': {
53
+ return Colors.dim;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Formats a single todo item for display.
59
+ *
60
+ * @param todo - Todo item to format
61
+ * @param index - 1-based index of the todo
62
+ * @returns Formatted todo string
63
+ */
64
+ export function formatTodoItem(todo, index) {
65
+ const icon = getStatusIcon(todo.status);
66
+ const color = getStatusColor(todo.status);
67
+ const content = todo.status === 'in_progress' ? todo.activeForm : todo.content;
68
+ return `${icon} ${color}${index}. ${content}${Colors.reset}`;
69
+ }
70
+ /**
71
+ * Formats the entire todo list for display.
72
+ *
73
+ * @param todos - Array of todos to format
74
+ * @returns Formatted todo list string
75
+ */
76
+ export function formatTodoList(todos) {
77
+ if (todos.length === 0) {
78
+ return `${Colors.dim}No tasks${Colors.reset}`;
79
+ }
80
+ // Add each todo
81
+ const lines = todos.map((todo, i) => formatTodoItem(todo, i + 1));
82
+ // Add progress summary
83
+ const stats = getTodoStats(todos);
84
+ const summaryLines = ['', formatProgressBar(stats)];
85
+ return [...lines, ...summaryLines].join('\n');
86
+ }
87
+ /**
88
+ * Formats a compact progress bar.
89
+ *
90
+ * @param stats - Todo statistics
91
+ * @returns Formatted progress bar string
92
+ */
93
+ function formatProgressBar(stats) {
94
+ const percentage = stats.total > 0 ? Math.round((stats.completed / stats.total) * 100) : 0;
95
+ const barWidth = 20;
96
+ const filled = Math.round((percentage / 100) * barWidth);
97
+ const empty = barWidth - filled;
98
+ const bar = `${Colors.green}${'█'.repeat(filled)}${Colors.dim}${'░'.repeat(empty)}${Colors.reset}`;
99
+ return `${bar} ${percentage}% (${stats.completed}/${stats.total})`;
100
+ }
101
+ /**
102
+ * Gets statistics about the todo list.
103
+ *
104
+ * @param todos - Array of todos
105
+ * @returns Statistics object
106
+ */
107
+ function getTodoStats(todos) {
108
+ return {
109
+ cancelled: todos.filter((t) => t.status === 'cancelled').length,
110
+ completed: todos.filter((t) => t.status === 'completed').length,
111
+ inProgress: todos.filter((t) => t.status === 'in_progress').length,
112
+ pending: todos.filter((t) => t.status === 'pending').length,
113
+ total: todos.length,
114
+ };
115
+ }
116
+ /**
117
+ * Formats a compact status line for the current task.
118
+ *
119
+ * @param todos - Array of todos
120
+ * @returns Status line string or null if no task in progress
121
+ */
122
+ export function formatCurrentTaskStatus(todos) {
123
+ const inProgress = todos.find((t) => t.status === 'in_progress');
124
+ if (!inProgress) {
125
+ return null;
126
+ }
127
+ const stats = getTodoStats(todos);
128
+ return `${Colors.blue}→${Colors.reset} ${inProgress.activeForm} ${Colors.dim}(${stats.completed + 1}/${stats.total})${Colors.reset}`;
129
+ }
@@ -0,0 +1,137 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { AgentEventMap, SessionEventMap } from '../../../core/domain/cipher/agent-events/types.js';
3
+ import type { EventListenerOptions, IEventEmitter } from '../../../core/interfaces/cipher/i-event-emitter.js';
4
+ /**
5
+ * Base implementation of a type-safe event emitter.
6
+ *
7
+ * Extends Node.js EventEmitter with TypeScript type safety and AbortController support.
8
+ * This follows the pattern from Dexto's event system.
9
+ *
10
+ * Features:
11
+ * - Type-safe emit/on/once/off methods
12
+ * - AbortController integration for automatic listener cleanup
13
+ * - Proper handling of void payloads
14
+ * - WeakMap-based tracking for signal-listener associations
15
+ *
16
+ * @template TEventMap - Map of event names to their payload types
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * interface MyEvents {
21
+ * 'data:received': { value: number };
22
+ * 'data:cleared': void;
23
+ * }
24
+ *
25
+ * class MyEventBus extends BaseTypedEventEmitter<MyEvents> {}
26
+ *
27
+ * const bus = new MyEventBus();
28
+ * bus.emit('data:received', { value: 42 });
29
+ * bus.emit('data:cleared');
30
+ *
31
+ * // With AbortController
32
+ * const controller = new AbortController();
33
+ * bus.on('data:received', (data) => console.log(data.value), { signal: controller.signal });
34
+ * controller.abort(); // Automatically removes listener
35
+ * ```
36
+ */
37
+ export declare class BaseTypedEventEmitter<TEventMap extends object> extends EventEmitter implements IEventEmitter<TEventMap> {
38
+ /**
39
+ * WeakMap tracking AbortSignal → Set<listener function>.
40
+ * Used to automatically remove listeners when signals are aborted.
41
+ */
42
+ private readonly signalListeners;
43
+ /**
44
+ * Emit an event with optional payload.
45
+ *
46
+ * @param eventName - Name of the event to emit
47
+ * @param payload - Event payload (omit for void events)
48
+ * @returns true if the event had listeners, false otherwise
49
+ */
50
+ emit<K extends keyof TEventMap>(eventName: K, ...payload: TEventMap[K] extends void ? [] : [TEventMap[K]]): boolean;
51
+ emit(eventName: string, ...args: never[]): boolean;
52
+ /**
53
+ * Remove an event listener.
54
+ *
55
+ * @param eventName - Name of the event
56
+ * @param listener - Callback function to remove
57
+ * @returns this (for chaining)
58
+ */
59
+ off<K extends keyof TEventMap>(eventName: K, listener: TEventMap[K] extends void ? () => void : (payload: TEventMap[K]) => void): this;
60
+ off(eventName: string | symbol, listener: (data?: unknown) => void): this;
61
+ /**
62
+ * Register an event listener.
63
+ *
64
+ * @param eventName - Name of the event to listen for
65
+ * @param listener - Callback function
66
+ * @param options - Optional AbortSignal for automatic cleanup
67
+ * @returns this (for chaining)
68
+ */
69
+ on<K extends keyof TEventMap>(eventName: K, listener: TEventMap[K] extends void ? () => void : (payload: TEventMap[K]) => void, options?: EventListenerOptions): this;
70
+ on(eventName: string | symbol, listener: (data?: unknown) => void): this;
71
+ /**
72
+ * Register a one-time event listener.
73
+ *
74
+ * @param eventName - Name of the event to listen for
75
+ * @param listener - Callback function
76
+ * @param options - Optional AbortSignal for automatic cleanup
77
+ * @returns this (for chaining)
78
+ */
79
+ once<K extends keyof TEventMap>(eventName: K, listener: TEventMap[K] extends void ? () => void : (payload: TEventMap[K]) => void, options?: EventListenerOptions): this;
80
+ once(eventName: string | symbol, listener: (data?: unknown) => void): this;
81
+ /**
82
+ * Setup automatic cleanup when AbortSignal fires.
83
+ *
84
+ * @param eventName - Event name
85
+ * @param listener - Listener function to remove
86
+ * @param signal - AbortSignal to watch
87
+ */
88
+ private setupAbortCleanup;
89
+ }
90
+ /**
91
+ * Event bus for agent-level events.
92
+ *
93
+ * Handles global agent events like state changes, conversation resets, etc.
94
+ * All events include sessionId to track which session triggered the event.
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * const agentBus = new AgentEventBus();
99
+ *
100
+ * agentBus.on('cipher:stateChanged', (payload) => {
101
+ * console.log(`State changed: ${payload.field} in session ${payload.sessionId}`);
102
+ * });
103
+ *
104
+ * agentBus.emit('cipher:stateChanged', {
105
+ * field: 'model',
106
+ * newValue: 'gemini-2.5-flash',
107
+ * sessionId: 'session-123'
108
+ * });
109
+ * ```
110
+ */
111
+ export declare class AgentEventBus extends BaseTypedEventEmitter<AgentEventMap> {
112
+ }
113
+ /**
114
+ * Event bus for session-level events.
115
+ *
116
+ * Handles session-scoped events like LLM thinking, tool calls, responses, etc.
117
+ * Events do not include sessionId as they are already scoped to a specific session.
118
+ *
119
+ * Typically, these events are forwarded to the AgentEventBus with sessionId added.
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const sessionBus = new SessionEventBus();
124
+ *
125
+ * sessionBus.on('llmservice:toolCall', (payload) => {
126
+ * console.log(`Tool call: ${payload.toolName}`);
127
+ * });
128
+ *
129
+ * sessionBus.emit('llmservice:toolCall', {
130
+ * toolName: 'read_file',
131
+ * args: { filePath: '/path/to/file' },
132
+ * callId: 'call-456'
133
+ * });
134
+ * ```
135
+ */
136
+ export declare class SessionEventBus extends BaseTypedEventEmitter<SessionEventMap> {
137
+ }
@@ -0,0 +1,158 @@
1
+ import { EventEmitter } from 'node:events';
2
+ /**
3
+ * Base implementation of a type-safe event emitter.
4
+ *
5
+ * Extends Node.js EventEmitter with TypeScript type safety and AbortController support.
6
+ * This follows the pattern from Dexto's event system.
7
+ *
8
+ * Features:
9
+ * - Type-safe emit/on/once/off methods
10
+ * - AbortController integration for automatic listener cleanup
11
+ * - Proper handling of void payloads
12
+ * - WeakMap-based tracking for signal-listener associations
13
+ *
14
+ * @template TEventMap - Map of event names to their payload types
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * interface MyEvents {
19
+ * 'data:received': { value: number };
20
+ * 'data:cleared': void;
21
+ * }
22
+ *
23
+ * class MyEventBus extends BaseTypedEventEmitter<MyEvents> {}
24
+ *
25
+ * const bus = new MyEventBus();
26
+ * bus.emit('data:received', { value: 42 });
27
+ * bus.emit('data:cleared');
28
+ *
29
+ * // With AbortController
30
+ * const controller = new AbortController();
31
+ * bus.on('data:received', (data) => console.log(data.value), { signal: controller.signal });
32
+ * controller.abort(); // Automatically removes listener
33
+ * ```
34
+ */
35
+ export class BaseTypedEventEmitter
36
+ // eslint-disable-next-line unicorn/prefer-event-target
37
+ extends EventEmitter {
38
+ /**
39
+ * WeakMap tracking AbortSignal → Set<listener function>.
40
+ * Used to automatically remove listeners when signals are aborted.
41
+ */
42
+ signalListeners = new WeakMap();
43
+ emit(eventName, ...args) {
44
+ return super.emit(eventName, ...args);
45
+ }
46
+ off(eventName, listener) {
47
+ return super.off(eventName, listener);
48
+ }
49
+ on(eventName, listener, options) {
50
+ // If signal is already aborted, don't add the listener
51
+ if (options?.signal?.aborted) {
52
+ return this;
53
+ }
54
+ // Add the listener
55
+ super.on(eventName, listener);
56
+ // Handle AbortController cleanup
57
+ if (options?.signal) {
58
+ this.setupAbortCleanup(eventName, listener, options.signal);
59
+ }
60
+ return this;
61
+ }
62
+ once(eventName, listener, options) {
63
+ // If signal is already aborted, don't add the listener
64
+ if (options?.signal?.aborted) {
65
+ return this;
66
+ }
67
+ // Add the listener
68
+ super.once(eventName, listener);
69
+ // Handle AbortController cleanup
70
+ if (options?.signal) {
71
+ this.setupAbortCleanup(eventName, listener, options.signal);
72
+ }
73
+ return this;
74
+ }
75
+ /**
76
+ * Setup automatic cleanup when AbortSignal fires.
77
+ *
78
+ * @param eventName - Event name
79
+ * @param listener - Listener function to remove
80
+ * @param signal - AbortSignal to watch
81
+ */
82
+ setupAbortCleanup(eventName, listener, signal) {
83
+ // If already aborted, remove listener immediately
84
+ if (signal.aborted) {
85
+ super.off(eventName, listener);
86
+ return;
87
+ }
88
+ // Track this listener for this signal
89
+ let listeners = this.signalListeners.get(signal);
90
+ if (!listeners) {
91
+ listeners = new Set();
92
+ this.signalListeners.set(signal, listeners);
93
+ }
94
+ listeners.add(listener);
95
+ // Setup abort handler
96
+ const abortHandler = () => {
97
+ super.off(eventName, listener);
98
+ // Cleanup tracking
99
+ const trackedListeners = this.signalListeners.get(signal);
100
+ if (trackedListeners) {
101
+ trackedListeners.delete(listener);
102
+ if (trackedListeners.size === 0) {
103
+ // No more listeners for this signal
104
+ signal.removeEventListener('abort', abortHandler);
105
+ }
106
+ }
107
+ };
108
+ signal.addEventListener('abort', abortHandler, { once: true });
109
+ }
110
+ }
111
+ /**
112
+ * Event bus for agent-level events.
113
+ *
114
+ * Handles global agent events like state changes, conversation resets, etc.
115
+ * All events include sessionId to track which session triggered the event.
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const agentBus = new AgentEventBus();
120
+ *
121
+ * agentBus.on('cipher:stateChanged', (payload) => {
122
+ * console.log(`State changed: ${payload.field} in session ${payload.sessionId}`);
123
+ * });
124
+ *
125
+ * agentBus.emit('cipher:stateChanged', {
126
+ * field: 'model',
127
+ * newValue: 'gemini-2.5-flash',
128
+ * sessionId: 'session-123'
129
+ * });
130
+ * ```
131
+ */
132
+ export class AgentEventBus extends BaseTypedEventEmitter {
133
+ }
134
+ /**
135
+ * Event bus for session-level events.
136
+ *
137
+ * Handles session-scoped events like LLM thinking, tool calls, responses, etc.
138
+ * Events do not include sessionId as they are already scoped to a specific session.
139
+ *
140
+ * Typically, these events are forwarded to the AgentEventBus with sessionId added.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const sessionBus = new SessionEventBus();
145
+ *
146
+ * sessionBus.on('llmservice:toolCall', (payload) => {
147
+ * console.log(`Tool call: ${payload.toolName}`);
148
+ * });
149
+ *
150
+ * sessionBus.emit('llmservice:toolCall', {
151
+ * toolName: 'read_file',
152
+ * args: { filePath: '/path/to/file' },
153
+ * callId: 'call-456'
154
+ * });
155
+ * ```
156
+ */
157
+ export class SessionEventBus extends BaseTypedEventEmitter {
158
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Exit codes for cipher-agent command
3
+ *
4
+ * These codes follow Unix conventions and provide clear signals
5
+ * for scripting and automation scenarios.
6
+ */
7
+ export declare const ExitCode: {
8
+ /**
9
+ * Configuration error - Invalid API key, missing model config, invalid settings
10
+ */
11
+ readonly CONFIG_ERROR: 3;
12
+ /**
13
+ * Runtime error - LLM execution failure, network issues, unexpected errors
14
+ */
15
+ readonly RUNTIME_ERROR: 1;
16
+ /**
17
+ * Success - AI response generated successfully
18
+ */
19
+ readonly SUCCESS: 0;
20
+ /**
21
+ * Validation error - Invalid input, workspace not initialized, file not found
22
+ */
23
+ readonly VALIDATION_ERROR: 2;
24
+ };
25
+ export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
26
+ /**
27
+ * Custom error class for exit codes with oclif integration.
28
+ * Extends Error to add code and oclif properties without type assertions.
29
+ */
30
+ export declare class ExitError extends Error {
31
+ readonly code: number;
32
+ readonly oclif: {
33
+ exit: number;
34
+ };
35
+ constructor(code: ExitCode, message?: string);
36
+ }
37
+ /**
38
+ * Exit the process with the given code and optional error message
39
+ *
40
+ * @param code - Exit code to use
41
+ * @param message - Optional error message to write to stderr
42
+ * @throws {ExitError} Throws ExitError for oclif to handle (except for silent success exits)
43
+ */
44
+ export declare function exitWithCode(code: ExitCode, message?: string): never;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Exit codes for cipher-agent command
3
+ *
4
+ * These codes follow Unix conventions and provide clear signals
5
+ * for scripting and automation scenarios.
6
+ */
7
+ export const ExitCode = {
8
+ /**
9
+ * Configuration error - Invalid API key, missing model config, invalid settings
10
+ */
11
+ CONFIG_ERROR: 3,
12
+ /**
13
+ * Runtime error - LLM execution failure, network issues, unexpected errors
14
+ */
15
+ RUNTIME_ERROR: 1,
16
+ /**
17
+ * Success - AI response generated successfully
18
+ */
19
+ SUCCESS: 0,
20
+ /**
21
+ * Validation error - Invalid input, workspace not initialized, file not found
22
+ */
23
+ VALIDATION_ERROR: 2,
24
+ };
25
+ /**
26
+ * Custom error class for exit codes with oclif integration.
27
+ * Extends Error to add code and oclif properties without type assertions.
28
+ */
29
+ export class ExitError extends Error {
30
+ code;
31
+ oclif;
32
+ constructor(code, message) {
33
+ super(message ?? 'Exit');
34
+ this.name = 'ExitError';
35
+ this.code = code;
36
+ this.oclif = { exit: code };
37
+ }
38
+ }
39
+ /**
40
+ * Exit the process with the given code and optional error message
41
+ *
42
+ * @param code - Exit code to use
43
+ * @param message - Optional error message to write to stderr
44
+ * @throws {ExitError} Throws ExitError for oclif to handle (except for silent success exits)
45
+ */
46
+ export function exitWithCode(code, message) {
47
+ if (message) {
48
+ process.stderr.write(`${message}\n`);
49
+ }
50
+ // For successful exits without message, exit silently via process.exit
51
+ // This prevents oclif from showing "Error: Exit" or similar messages
52
+ if (code === ExitCode.SUCCESS && !message) {
53
+ // eslint-disable-next-line n/no-process-exit, unicorn/no-process-exit
54
+ process.exit(code);
55
+ }
56
+ // Throw ExitError - no type assertions needed!
57
+ throw new ExitError(code, message);
58
+ }