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,31 @@
1
+ import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
2
+ /**
3
+ * Default fallback tokenizer for unknown or unsupported models.
4
+ *
5
+ * This tokenizer provides a generic character-based approximation
6
+ * that can be used when no provider-specific tokenizer is available.
7
+ * It uses a simple heuristic that works reasonably well for English text.
8
+ */
9
+ export declare class DefaultTokenizer implements ITokenizer {
10
+ /**
11
+ * Approximates token count using a character-based heuristic.
12
+ *
13
+ * Assumes roughly 4 characters per token, which is a common approximation
14
+ * for English text with modern tokenizers (like GPT, Claude, Gemini).
15
+ *
16
+ * This heuristic may be less accurate for:
17
+ * - Non-English languages (especially character-based languages)
18
+ * - Code (which often has different tokenization patterns)
19
+ * - Text with many special characters or formatting
20
+ *
21
+ * @param text - Text content to count tokens for
22
+ * @returns Approximate number of tokens
23
+ */
24
+ countTokens(text: string): number;
25
+ /**
26
+ * Gets the provider name for this tokenizer.
27
+ *
28
+ * @returns 'default' as the provider identifier
29
+ */
30
+ getProviderName(): string;
31
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Default fallback tokenizer for unknown or unsupported models.
3
+ *
4
+ * This tokenizer provides a generic character-based approximation
5
+ * that can be used when no provider-specific tokenizer is available.
6
+ * It uses a simple heuristic that works reasonably well for English text.
7
+ */
8
+ export class DefaultTokenizer {
9
+ /**
10
+ * Approximates token count using a character-based heuristic.
11
+ *
12
+ * Assumes roughly 4 characters per token, which is a common approximation
13
+ * for English text with modern tokenizers (like GPT, Claude, Gemini).
14
+ *
15
+ * This heuristic may be less accurate for:
16
+ * - Non-English languages (especially character-based languages)
17
+ * - Code (which often has different tokenization patterns)
18
+ * - Text with many special characters or formatting
19
+ *
20
+ * @param text - Text content to count tokens for
21
+ * @returns Approximate number of tokens
22
+ */
23
+ countTokens(text) {
24
+ if (!text) {
25
+ return 0;
26
+ }
27
+ // Simple heuristic: ~4 characters per token
28
+ return Math.ceil(text.length / 4);
29
+ }
30
+ /**
31
+ * Gets the provider name for this tokenizer.
32
+ *
33
+ * @returns 'default' as the provider identifier
34
+ */
35
+ getProviderName() {
36
+ return 'default';
37
+ }
38
+ }
@@ -0,0 +1,37 @@
1
+ import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
2
+ /**
3
+ * Tokenizer for Google Gemini models - CURRENTLY USING APPROXIMATION.
4
+ *
5
+ * This implementation uses a character-based approximation rather than
6
+ * accurate token counting. This is a temporary solution due to the
7
+ * asynchronous nature of the official Gemini countTokens API.
8
+ *
9
+ * TODO: Consider these improvements:
10
+ * 1. Use the official @google/genai countTokens method (requires async handling)
11
+ * 2. Implement a WASM-based tokenizer for accurate synchronous counting
12
+ * 3. Cache token counts for frequently used text
13
+ * 4. Model-specific adjustments based on actual Gemini tokenization patterns
14
+ */
15
+ export declare class GeminiTokenizer implements ITokenizer {
16
+ private readonly modelName;
17
+ /**
18
+ * Creates a new Gemini tokenizer instance.
19
+ *
20
+ * @param model - The Gemini model name (e.g., 'gemini-2.5-flash', 'gemini-pro')
21
+ * Currently not used for approximation, but stored for future improvements
22
+ */
23
+ constructor(model: string);
24
+ /**
25
+ * Approximates the token count for Google Gemini models.
26
+ *
27
+ * Uses a rough character-based approximation: ~4 characters per token.
28
+ * This is based on common estimates for English text with modern tokenizers.
29
+ *
30
+ * IMPORTANT: This is NOT accurate for Gemini models and should be replaced
31
+ * with a proper implementation when possible.
32
+ *
33
+ * @param text - Text content to count tokens for
34
+ * @returns Approximate number of tokens
35
+ */
36
+ countTokens(text: string): number;
37
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Tokenizer for Google Gemini models - CURRENTLY USING APPROXIMATION.
3
+ *
4
+ * This implementation uses a character-based approximation rather than
5
+ * accurate token counting. This is a temporary solution due to the
6
+ * asynchronous nature of the official Gemini countTokens API.
7
+ *
8
+ * TODO: Consider these improvements:
9
+ * 1. Use the official @google/genai countTokens method (requires async handling)
10
+ * 2. Implement a WASM-based tokenizer for accurate synchronous counting
11
+ * 3. Cache token counts for frequently used text
12
+ * 4. Model-specific adjustments based on actual Gemini tokenization patterns
13
+ */
14
+ export class GeminiTokenizer {
15
+ modelName;
16
+ /**
17
+ * Creates a new Gemini tokenizer instance.
18
+ *
19
+ * @param model - The Gemini model name (e.g., 'gemini-2.5-flash', 'gemini-pro')
20
+ * Currently not used for approximation, but stored for future improvements
21
+ */
22
+ constructor(model) {
23
+ this.modelName = model;
24
+ }
25
+ /**
26
+ * Approximates the token count for Google Gemini models.
27
+ *
28
+ * Uses a rough character-based approximation: ~4 characters per token.
29
+ * This is based on common estimates for English text with modern tokenizers.
30
+ *
31
+ * IMPORTANT: This is NOT accurate for Gemini models and should be replaced
32
+ * with a proper implementation when possible.
33
+ *
34
+ * @param text - Text content to count tokens for
35
+ * @returns Approximate number of tokens
36
+ */
37
+ countTokens(text) {
38
+ if (!text) {
39
+ return 0;
40
+ }
41
+ // Rough approximation: ~4 characters per token
42
+ // This is a simplified heuristic and varies by language and content type
43
+ return Math.ceil(text.length / 4);
44
+ }
45
+ }
@@ -0,0 +1,29 @@
1
+ import type { ITokenizer } from '../../../../core/interfaces/cipher/i-tokenizer.js';
2
+ /**
3
+ * Tokenizer for OpenRouter API.
4
+ *
5
+ * OpenRouter supports multiple model providers (OpenAI, Anthropic, etc.),
6
+ * each with different tokenization schemes. This tokenizer provides a
7
+ * generic approximation that works reasonably well across different models.
8
+ *
9
+ * For more accurate token counting, model-specific tokenizers could be
10
+ * implemented based on the selected model's provider.
11
+ */
12
+ export declare class OpenRouterTokenizer implements ITokenizer {
13
+ /**
14
+ * Approximates token count using a character-based heuristic.
15
+ *
16
+ * Uses ~4 characters per token, which is a common approximation
17
+ * for modern tokenizers (GPT, Claude, Gemini, etc.).
18
+ *
19
+ * @param text - Text content to count tokens for
20
+ * @returns Approximate number of tokens
21
+ */
22
+ countTokens(text: string): number;
23
+ /**
24
+ * Gets the provider name for this tokenizer.
25
+ *
26
+ * @returns 'openrouter' as the provider identifier
27
+ */
28
+ getProviderName(): string;
29
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Tokenizer for OpenRouter API.
3
+ *
4
+ * OpenRouter supports multiple model providers (OpenAI, Anthropic, etc.),
5
+ * each with different tokenization schemes. This tokenizer provides a
6
+ * generic approximation that works reasonably well across different models.
7
+ *
8
+ * For more accurate token counting, model-specific tokenizers could be
9
+ * implemented based on the selected model's provider.
10
+ */
11
+ export class OpenRouterTokenizer {
12
+ /**
13
+ * Approximates token count using a character-based heuristic.
14
+ *
15
+ * Uses ~4 characters per token, which is a common approximation
16
+ * for modern tokenizers (GPT, Claude, Gemini, etc.).
17
+ *
18
+ * @param text - Text content to count tokens for
19
+ * @returns Approximate number of tokens
20
+ */
21
+ countTokens(text) {
22
+ if (!text) {
23
+ return 0;
24
+ }
25
+ // Simple heuristic: ~4 characters per token
26
+ // This works reasonably well for most OpenRouter models
27
+ return Math.ceil(text.length / 4);
28
+ }
29
+ /**
30
+ * Gets the provider name for this tokenizer.
31
+ *
32
+ * @returns 'openrouter' as the provider identifier
33
+ */
34
+ getProviderName() {
35
+ return 'openrouter';
36
+ }
37
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Tool Output Processing Layer
3
+ *
4
+ * Handles truncation and file saving for large tool outputs.
5
+ * Prevents context overflow by truncating outputs while preserving critical information.
6
+ */
7
+ /**
8
+ * Configuration for output truncation behavior
9
+ */
10
+ export interface TruncationConfig {
11
+ /**
12
+ * Whether to enable truncation
13
+ * @default true
14
+ */
15
+ enabled?: boolean;
16
+ /**
17
+ * Number of lines to keep from the end of the output
18
+ * @default 250
19
+ */
20
+ headLines?: number;
21
+ /**
22
+ * Number of lines to keep from the start of the output
23
+ * @default 250
24
+ */
25
+ tailLines?: number;
26
+ /**
27
+ * Character threshold for triggering truncation
28
+ * @default 50000
29
+ */
30
+ threshold?: number;
31
+ }
32
+ /**
33
+ * Result of output processing
34
+ */
35
+ export interface ProcessedOutput {
36
+ /**
37
+ * Processed content (truncated if necessary)
38
+ */
39
+ content: string;
40
+ /**
41
+ * Metadata about the processing
42
+ */
43
+ metadata?: {
44
+ /**
45
+ * Original content length before truncation
46
+ */
47
+ originalLength?: number;
48
+ /**
49
+ * Path to file where full output was saved
50
+ */
51
+ savedToFile?: string;
52
+ /**
53
+ * Whether output was truncated
54
+ */
55
+ truncated?: boolean;
56
+ };
57
+ }
58
+ /**
59
+ * Default truncation configuration
60
+ */
61
+ export declare const DEFAULT_TRUNCATION_CONFIG: Required<TruncationConfig>;
62
+ /**
63
+ * Tool output processor with truncation and file saving capabilities
64
+ */
65
+ export declare class ToolOutputProcessor {
66
+ private readonly config;
67
+ /**
68
+ * Create a new tool output processor
69
+ *
70
+ * @param config - Truncation configuration
71
+ */
72
+ constructor(config?: TruncationConfig);
73
+ /**
74
+ * Process tool output with truncation and file saving
75
+ *
76
+ * If output exceeds threshold:
77
+ * 1. Saves full output to temp file
78
+ * 2. Returns truncated content (head + tail with omission notice)
79
+ * 3. Includes metadata about truncation
80
+ *
81
+ * @param toolName - Name of the tool that produced the output
82
+ * @param output - Raw tool output (any type, will be stringified)
83
+ * @returns Processed output with metadata
84
+ */
85
+ processOutput(toolName: string, output: unknown): Promise<ProcessedOutput>;
86
+ /**
87
+ * Save content to a temporary file
88
+ *
89
+ * Creates a unique temp file for storing full tool output.
90
+ *
91
+ * @param toolName - Name of the tool
92
+ * @param content - Content to save
93
+ * @returns Path to saved file
94
+ */
95
+ private saveToTempFile;
96
+ /**
97
+ * Safely stringify any value
98
+ *
99
+ * Handles circular references and special types.
100
+ *
101
+ * @param value - Value to stringify
102
+ * @returns String representation
103
+ */
104
+ private stringify;
105
+ /**
106
+ * Truncate content keeping head and tail lines
107
+ *
108
+ * Format:
109
+ * [First N lines]
110
+ * ... [omission notice with line count and file reference] ...
111
+ * [Last N lines]
112
+ *
113
+ * @param content - Content to truncate
114
+ * @returns Truncated content
115
+ */
116
+ private truncateContent;
117
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Tool Output Processing Layer
3
+ *
4
+ * Handles truncation and file saving for large tool outputs.
5
+ * Prevents context overflow by truncating outputs while preserving critical information.
6
+ */
7
+ import { existsSync, promises as fsPromises, mkdirSync } from 'node:fs';
8
+ import { tmpdir } from 'node:os';
9
+ import { join } from 'node:path';
10
+ /**
11
+ * Default truncation configuration
12
+ */
13
+ export const DEFAULT_TRUNCATION_CONFIG = {
14
+ enabled: true,
15
+ headLines: 250,
16
+ tailLines: 250,
17
+ threshold: 50_000,
18
+ };
19
+ /**
20
+ * Tool output processor with truncation and file saving capabilities
21
+ */
22
+ export class ToolOutputProcessor {
23
+ config;
24
+ /**
25
+ * Create a new tool output processor
26
+ *
27
+ * @param config - Truncation configuration
28
+ */
29
+ constructor(config) {
30
+ this.config = {
31
+ ...DEFAULT_TRUNCATION_CONFIG,
32
+ ...config,
33
+ };
34
+ }
35
+ /**
36
+ * Process tool output with truncation and file saving
37
+ *
38
+ * If output exceeds threshold:
39
+ * 1. Saves full output to temp file
40
+ * 2. Returns truncated content (head + tail with omission notice)
41
+ * 3. Includes metadata about truncation
42
+ *
43
+ * @param toolName - Name of the tool that produced the output
44
+ * @param output - Raw tool output (any type, will be stringified)
45
+ * @returns Processed output with metadata
46
+ */
47
+ async processOutput(toolName, output) {
48
+ // Convert output to string
49
+ const contentString = this.stringify(output);
50
+ const originalLength = contentString.length;
51
+ // Check if truncation is needed
52
+ if (!this.config.enabled || originalLength <= this.config.threshold) {
53
+ return {
54
+ content: contentString,
55
+ };
56
+ }
57
+ // Save full output to temp file
58
+ const savedFilePath = await this.saveToTempFile(toolName, contentString);
59
+ // Truncate content
60
+ const truncatedContent = this.truncateContent(contentString);
61
+ return {
62
+ content: truncatedContent,
63
+ metadata: {
64
+ originalLength,
65
+ savedToFile: savedFilePath,
66
+ truncated: true,
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Save content to a temporary file
72
+ *
73
+ * Creates a unique temp file for storing full tool output.
74
+ *
75
+ * @param toolName - Name of the tool
76
+ * @param content - Content to save
77
+ * @returns Path to saved file
78
+ */
79
+ async saveToTempFile(toolName, content) {
80
+ // Create temp directory if it doesn't exist
81
+ const tempDir = join(tmpdir(), 'byterover-tool-outputs');
82
+ if (!existsSync(tempDir)) {
83
+ mkdirSync(tempDir, { recursive: true });
84
+ }
85
+ // Generate unique filename
86
+ const timestamp = Date.now();
87
+ const sanitizedToolName = toolName.replaceAll(/[^a-z0-9-_]/gi, '_');
88
+ const filename = `${sanitizedToolName}_${timestamp}.txt`;
89
+ const filePath = join(tempDir, filename);
90
+ // Write content to file
91
+ await fsPromises.writeFile(filePath, content, 'utf8');
92
+ return filePath;
93
+ }
94
+ /**
95
+ * Safely stringify any value
96
+ *
97
+ * Handles circular references and special types.
98
+ *
99
+ * @param value - Value to stringify
100
+ * @returns String representation
101
+ */
102
+ stringify(value) {
103
+ if (typeof value === 'string') {
104
+ return value;
105
+ }
106
+ if (value === null || value === undefined) {
107
+ return String(value);
108
+ }
109
+ try {
110
+ // Try JSON.stringify with circular reference handling
111
+ return JSON.stringify(value, (_, val) => {
112
+ // Handle circular references by converting to string
113
+ if (typeof val === 'object' && val !== null) {
114
+ return val;
115
+ }
116
+ return val;
117
+ }, 2);
118
+ }
119
+ catch {
120
+ // Fallback to String() if JSON.stringify fails
121
+ return String(value);
122
+ }
123
+ }
124
+ /**
125
+ * Truncate content keeping head and tail lines
126
+ *
127
+ * Format:
128
+ * [First N lines]
129
+ * ... [omission notice with line count and file reference] ...
130
+ * [Last N lines]
131
+ *
132
+ * @param content - Content to truncate
133
+ * @returns Truncated content
134
+ */
135
+ truncateContent(content) {
136
+ const lines = content.split('\n');
137
+ const totalLines = lines.length;
138
+ // Calculate how many lines to keep
139
+ const headLines = Math.min(this.config.headLines, totalLines);
140
+ const tailLines = Math.min(this.config.tailLines, totalLines);
141
+ // If content is small enough to fit, return as-is
142
+ if (headLines + tailLines >= totalLines) {
143
+ return content;
144
+ }
145
+ // Extract head and tail
146
+ const head = lines.slice(0, headLines).join('\n');
147
+ const tail = lines.slice(-tailLines).join('\n');
148
+ // Calculate omitted lines
149
+ const omittedLines = totalLines - headLines - tailLines;
150
+ const omissionNotice = `\n\n... [${omittedLines} lines omitted - full output saved to file] ...\n\n`;
151
+ return head + omissionNotice + tail;
152
+ }
153
+ }
@@ -0,0 +1,42 @@
1
+ import type { ILogger } from '../../../core/interfaces/cipher/i-logger.js';
2
+ /**
3
+ * Console-based logger implementation.
4
+ *
5
+ * This is a concrete logger that writes to the console with color formatting.
6
+ * Used at the command/presentation layer to display logs to the user.
7
+ *
8
+ * Design principles:
9
+ * - Only used in command layer (not in domain/infrastructure)
10
+ * - Formats messages with chalk for better UX
11
+ * - Includes timestamps for debugging
12
+ * - Can be swapped with other implementations (file, remote, etc.)
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const logger = new ConsoleLogger({ verbose: true });
17
+ * logger.info('Server started', { port: 3000 });
18
+ * // Output: [2025-01-26 10:30:45] INFO: Server started {"port":3000}
19
+ * ```
20
+ */
21
+ export declare class ConsoleLogger implements ILogger {
22
+ private readonly verbose;
23
+ /**
24
+ * Create a new console logger.
25
+ *
26
+ * @param options - Logger options
27
+ * @param options.verbose - Enable verbose (debug) output
28
+ */
29
+ constructor(options?: {
30
+ verbose?: boolean;
31
+ });
32
+ debug(message: string, context?: Record<string, unknown>): void;
33
+ error(message: string, context?: Record<string, unknown>): void;
34
+ info(message: string, context?: Record<string, unknown>): void;
35
+ warn(message: string, context?: Record<string, unknown>): void;
36
+ /**
37
+ * Format current timestamp for log messages.
38
+ *
39
+ * @returns Formatted timestamp string (YYYY-MM-DD HH:MM:SS)
40
+ */
41
+ private formatTimestamp;
42
+ }
@@ -0,0 +1,63 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Console-based logger implementation.
4
+ *
5
+ * This is a concrete logger that writes to the console with color formatting.
6
+ * Used at the command/presentation layer to display logs to the user.
7
+ *
8
+ * Design principles:
9
+ * - Only used in command layer (not in domain/infrastructure)
10
+ * - Formats messages with chalk for better UX
11
+ * - Includes timestamps for debugging
12
+ * - Can be swapped with other implementations (file, remote, etc.)
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const logger = new ConsoleLogger({ verbose: true });
17
+ * logger.info('Server started', { port: 3000 });
18
+ * // Output: [2025-01-26 10:30:45] INFO: Server started {"port":3000}
19
+ * ```
20
+ */
21
+ export class ConsoleLogger {
22
+ verbose;
23
+ /**
24
+ * Create a new console logger.
25
+ *
26
+ * @param options - Logger options
27
+ * @param options.verbose - Enable verbose (debug) output
28
+ */
29
+ constructor(options = {}) {
30
+ this.verbose = options.verbose ?? false;
31
+ }
32
+ debug(message, context) {
33
+ if (!this.verbose)
34
+ return;
35
+ const timestamp = this.formatTimestamp();
36
+ const contextStr = context ? ` ${JSON.stringify(context)}` : '';
37
+ console.log(chalk.gray(`[${timestamp}] DEBUG: ${message}${contextStr}`));
38
+ }
39
+ error(message, context) {
40
+ const timestamp = this.formatTimestamp();
41
+ const contextStr = context ? ` ${JSON.stringify(context)}` : '';
42
+ console.error(chalk.red(`[${timestamp}] ERROR: ${message}${contextStr}`));
43
+ }
44
+ info(message, context) {
45
+ const timestamp = this.formatTimestamp();
46
+ const contextStr = context ? ` ${JSON.stringify(context)}` : '';
47
+ console.log(chalk.cyan(`[${timestamp}] INFO: ${message}${contextStr}`));
48
+ }
49
+ warn(message, context) {
50
+ const timestamp = this.formatTimestamp();
51
+ const contextStr = context ? ` ${JSON.stringify(context)}` : '';
52
+ console.warn(chalk.yellow(`[${timestamp}] WARN: ${message}${contextStr}`));
53
+ }
54
+ /**
55
+ * Format current timestamp for log messages.
56
+ *
57
+ * @returns Formatted timestamp string (YYYY-MM-DD HH:MM:SS)
58
+ */
59
+ formatTimestamp() {
60
+ const now = new Date();
61
+ return now.toISOString().replace('T', ' ').slice(0, 19);
62
+ }
63
+ }
@@ -0,0 +1,54 @@
1
+ import type { ILogger } from '../../../core/interfaces/cipher/i-logger.js';
2
+ import type { AgentEventBus } from '../events/event-emitter.js';
3
+ /**
4
+ * Event-based logger that emits cipher:log events instead of writing directly.
5
+ *
6
+ * This follows Clean Architecture by decoupling logging from infrastructure.
7
+ * The logger emits events that can be handled by any listener (console, file, remote, etc.).
8
+ *
9
+ * Design principles:
10
+ * - Domain/infrastructure layers use this logger
11
+ * - Events are emitted to AgentEventBus
12
+ * - Command layer listens to events and decides how to handle them
13
+ * - Supports optional source and sessionId for context tracking
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const logger = new EventBasedLogger(agentBus, 'MyService');
18
+ * logger.info('User logged in', { userId: '123' });
19
+ * // Emits: cipher:log { level: 'info', message: '...', source: 'MyService', ... }
20
+ * ```
21
+ */
22
+ export declare class EventBasedLogger implements ILogger {
23
+ private readonly eventBus;
24
+ private readonly source?;
25
+ private readonly sessionId?;
26
+ /**
27
+ * Create a new event-based logger.
28
+ *
29
+ * @param eventBus - Agent event bus to emit log events to
30
+ * @param source - Optional source identifier (e.g., class name)
31
+ * @param sessionId - Optional session ID for session-scoped logs
32
+ */
33
+ constructor(eventBus: AgentEventBus, source?: string | undefined, sessionId?: string | undefined);
34
+ debug(message: string, context?: Record<string, unknown>): void;
35
+ error(message: string, context?: Record<string, unknown>): void;
36
+ info(message: string, context?: Record<string, unknown>): void;
37
+ warn(message: string, context?: Record<string, unknown>): void;
38
+ /**
39
+ * Create a child logger with a different session ID.
40
+ * Useful for creating session-scoped loggers.
41
+ *
42
+ * @param sessionId - Session ID for the child logger
43
+ * @returns New logger instance with the specified session ID
44
+ */
45
+ withSessionId(sessionId: string): EventBasedLogger;
46
+ /**
47
+ * Create a child logger with a different source.
48
+ * Useful for creating component-scoped loggers.
49
+ *
50
+ * @param source - Source identifier for the child logger
51
+ * @returns New logger instance with the specified source
52
+ */
53
+ withSource(source: string): EventBasedLogger;
54
+ }