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
@@ -1,177 +0,0 @@
1
- /**
2
- * Default implementation of ACE prompts using template strings.
3
- * These prompts are designed to work with coding agents (Claude Code, Cursor, etc.)
4
- * and LLMs that understand structured JSON output.
5
- */
6
- export class AcePromptTemplates {
7
- buildCuratorPrompt(reflection, playbook, questionContext) {
8
- const playbookText = playbook.asPrompt();
9
- const stats = playbook.stats();
10
- return `You are the curator of the ACE playbook.
11
- Your role is to transform reflections into structured playbook updates.
12
-
13
- ## Your Principles
14
- - Only add genuinely NEW insights not already captured in the playbook
15
- - Update existing bullets if the reflection provides better clarity
16
- - Remove bullets that have been proven incorrect or harmful
17
- - Keep bullets concise, specific, and actionable
18
- - Organize bullets into clear sections (e.g., "Common Errors", "Best Practices", "Strategies")
19
-
20
- ## Recent Reflection
21
-
22
- **Task Context**: ${questionContext}
23
-
24
- **Error Identified**: ${reflection.errorIdentification}
25
-
26
- **Root Cause**: ${reflection.rootCauseAnalysis}
27
-
28
- **Correct Approach**: ${reflection.correctApproach}
29
-
30
- **Key Insight**: ${reflection.keyInsight}
31
-
32
- **Bullet Tags**:
33
- ${reflection.bulletTags.map((bt) => `- ${bt.id}: ${bt.tag}`).join('\n')}
34
-
35
- ## Current Playbook (${stats.bullets} bullets, ${stats.sections} sections)
36
- ${playbookText}
37
-
38
- ## Instructions
39
-
40
- Review the reflection and determine what changes to make to the playbook.
41
-
42
- **Operation Types**:
43
- - **ADD**: Create a new bullet with fresh insights
44
- - **UPDATE**: Modify an existing bullet with better information
45
- - **REMOVE**: Delete a bullet that's been proven incorrect
46
-
47
- For each operation, provide:
48
- - **type**: The operation type (ADD, UPDATE, or REMOVE)
49
- - **section**: Which section (e.g., "Common Errors", "Best Practices")
50
- - **content**: The bullet text (for ADD/UPDATE)
51
- - **bulletId**: The existing bullet ID (for UPDATE/REMOVE)
52
- - **metadata**: Structured metadata with:
53
- - codebasePath: Relevant file path or context
54
- - tags: Array of relevant tags (e.g., ["typescript", "error-handling"])
55
- - timestamp: Will be auto-generated
56
-
57
- Output as a JSON object:
58
- {
59
- "reasoning": "Explain your curation decisions",
60
- "operations": [
61
- {
62
- "type": "ADD",
63
- "section": "Common Errors",
64
- "content": "Specific, actionable lesson learned",
65
- "metadata": {
66
- "codebasePath": "/relevant/path",
67
- "tags": ["tag1", "tag2"],
68
- "timestamp": "${new Date().toISOString()}"
69
- }
70
- },
71
- {
72
- "type": "UPDATE",
73
- "section": "Best Practices",
74
- "bulletId": "practices-00001",
75
- "content": "Updated guidance based on reflection",
76
- "metadata": {
77
- "codebasePath": "/relevant/path",
78
- "tags": ["tag1", "tag2"],
79
- "timestamp": "${new Date().toISOString()}"
80
- }
81
- },
82
- {
83
- "type": "REMOVE",
84
- "section": "Strategies",
85
- "bulletId": "strategies-00003"
86
- }
87
- ]
88
- }
89
-
90
- If no changes are needed, return an empty operations array.`;
91
- }
92
- buildExecutorPrompt(task, context, playbook, recentReflections) {
93
- const playbookText = playbook.asPrompt();
94
- const reflectionsText = recentReflections.length > 0 ? recentReflections.join('\n\n---\n\n') : 'No recent reflections.';
95
- const stats = playbook.stats();
96
- const statsText = `Playbook contains ${stats.bullets} bullets across ${stats.sections} sections.`;
97
- return `You are a software developer solving tasks using a knowledge playbook.
98
- The playbook contains strategies, lessons learned, and common errors to avoid.
99
-
100
- ## Your Task
101
- ${task}
102
-
103
- ## Additional Context
104
- ${context || 'None provided'}
105
-
106
- ## Playbook (${statsText})
107
- ${playbookText}
108
-
109
- ## Recent Reflections
110
- ${reflectionsText}
111
-
112
- ## Instructions
113
- 1. Review the playbook for relevant strategies and common errors
114
- 2. Consider recent reflections to avoid repeating mistakes
115
- 3. Reference specific bullets by their IDs when applying strategies
116
- 4. Show your step-by-step reasoning
117
- 5. Use tools as needed to complete the task
118
- 6. Track which bullets you reference and which tools you use
119
-
120
- Your response will be captured for later analysis, so be thorough in your reasoning.`;
121
- }
122
- buildReflectorPrompt(params) {
123
- const { executorOutput, feedback, groundTruth, playbook, task } = params;
124
- const playbookText = playbook.asPrompt();
125
- const groundTruthText = groundTruth ?? 'Not available';
126
- return `You are a senior code reviewer analyzing an execution trajectory.
127
- Your goal is to identify what went wrong, why it happened, and what lessons can be learned.
128
-
129
- ## Original Task
130
- ${task}
131
-
132
- ## Executor's Reasoning
133
- ${executorOutput.reasoning}
134
-
135
- ## Executor's Final Answer
136
- ${executorOutput.finalAnswer}
137
-
138
- ## Bullets Referenced
139
- ${executorOutput.bulletIds.length > 0 ? executorOutput.bulletIds.join(', ') : 'None'}
140
-
141
- ## Tools Used
142
- ${executorOutput.toolUsage.length > 0 ? executorOutput.toolUsage.join(', ') : 'None'}
143
-
144
- ## Environment Feedback
145
- ${feedback}
146
-
147
- ## Ground Truth (Expected Answer)
148
- ${groundTruthText}
149
-
150
- ## Current Playbook
151
- ${playbookText}
152
-
153
- ## Instructions
154
- Analyze the executor's performance and provide:
155
-
156
- 1. **Error Identification**: What specifically went wrong? Be precise.
157
- 2. **Root Cause Analysis**: Why did this error occur? What was the underlying cause?
158
- 3. **Correct Approach**: What should have been done instead? Be specific and actionable.
159
- 4. **Key Insight**: What reusable lesson can be extracted for the playbook?
160
- 5. **Bullet Tags**: For each bullet the executor referenced, tag it with a relevant tags
161
-
162
- Output your analysis as a JSON object with this structure:
163
- {
164
- "reasoning": "Your detailed analysis of what happened",
165
- "errorIdentification": "What went wrong",
166
- "rootCauseAnalysis": "Why it happened",
167
- "correctApproach": "What should have been done",
168
- "keyInsight": "Reusable lesson for the playbook",
169
- "bulletTags": [
170
- {"id": "bullet-00001", "tag": ["tag1", "tag2"]}
171
- {"id": "bullet-00002", "tag": ["tag1", "tag2"]}
172
- ]
173
- }
174
-
175
- Be thorough and constructive in your analysis.`;
176
- }
177
- }
@@ -1,27 +0,0 @@
1
- import type { IBulletContentStore } from '../../core/interfaces/i-bullet-content-store.js';
2
- /**
3
- * File-based implementation of IBulletContentStore.
4
- * Stores bullet content in .brv/ace/bullets/{bullet-id}.md files.
5
- */
6
- export declare class FileBulletContentStore implements IBulletContentStore {
7
- delete(bulletId: string, directory?: string): Promise<void>;
8
- exists(bulletId: string, directory?: string): Promise<boolean>;
9
- load(bulletId: string, directory?: string): Promise<string | undefined>;
10
- save(bulletId: string, content: string, directory?: string): Promise<string>;
11
- /**
12
- * Gets the full path to the .brv/ace directory
13
- */
14
- private getAceDirPath;
15
- /**
16
- * Gets the full path to the .brv directory
17
- */
18
- private getBrDirPath;
19
- /**
20
- * Gets the full path to the .brv/ace/bullets directory
21
- */
22
- private getBulletsDirPath;
23
- /**
24
- * Gets the full path to a bullet content file
25
- */
26
- private getContentPath;
27
- }
@@ -1,89 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
4
- import { ACE_DIR, BRV_DIR, BULLETS_DIR } from '../../constants.js';
5
- /**
6
- * File-based implementation of IBulletContentStore.
7
- * Stores bullet content in .brv/ace/bullets/{bullet-id}.md files.
8
- */
9
- export class FileBulletContentStore {
10
- async delete(bulletId, directory) {
11
- const contentPath = this.getContentPath(bulletId, directory);
12
- if (!existsSync(contentPath)) {
13
- return;
14
- }
15
- try {
16
- await unlink(contentPath);
17
- }
18
- catch (error) {
19
- throw new Error(`Failed to delete bullet content at ${contentPath}: ${error.message}`);
20
- }
21
- }
22
- async exists(bulletId, directory) {
23
- const contentPath = this.getContentPath(bulletId, directory);
24
- return existsSync(contentPath);
25
- }
26
- async load(bulletId, directory) {
27
- const contentPath = this.getContentPath(bulletId, directory);
28
- if (!existsSync(contentPath)) {
29
- return undefined;
30
- }
31
- try {
32
- const rawContent = await readFile(contentPath, 'utf8');
33
- // Strip the warning header if present
34
- const headerPattern = /^<!--\s*\nWARNING:.*?-->\n\n/s;
35
- const content = rawContent.replace(headerPattern, '');
36
- return content;
37
- }
38
- catch (error) {
39
- throw new Error(`Failed to load bullet content from ${contentPath}: ${error.message}`);
40
- }
41
- }
42
- async save(bulletId, content, directory) {
43
- const bulletsDirPath = this.getBulletsDirPath(directory);
44
- const contentPath = this.getContentPath(bulletId, directory);
45
- try {
46
- // Create .brv/ace/bullets directory if it doesn't exist
47
- await mkdir(bulletsDirPath, { recursive: true });
48
- // Add warning header to content
49
- const header = `<!--
50
- WARNING: Do not rename this file manually!
51
- File name: ${bulletId}.md
52
- This file is managed by ByteRover CLI. Only edit the content below.
53
- Renaming this file will break the link to the playbook metadata.
54
- -->\n\n`;
55
- const contentWithHeader = header + content;
56
- // Write content file with header
57
- await writeFile(contentPath, contentWithHeader, 'utf8');
58
- return contentPath;
59
- }
60
- catch (error) {
61
- throw new Error(`Failed to save bullet content to ${contentPath}: ${error.message}`);
62
- }
63
- }
64
- /**
65
- * Gets the full path to the .brv/ace directory
66
- */
67
- getAceDirPath(directory) {
68
- return join(this.getBrDirPath(directory), ACE_DIR);
69
- }
70
- /**
71
- * Gets the full path to the .brv directory
72
- */
73
- getBrDirPath(directory) {
74
- const baseDir = directory ?? process.cwd();
75
- return join(baseDir, BRV_DIR);
76
- }
77
- /**
78
- * Gets the full path to the .brv/ace/bullets directory
79
- */
80
- getBulletsDirPath(directory) {
81
- return join(this.getAceDirPath(directory), BULLETS_DIR);
82
- }
83
- /**
84
- * Gets the full path to a bullet content file
85
- */
86
- getContentPath(bulletId, directory) {
87
- return join(this.getBulletsDirPath(directory), `${bulletId}.md`);
88
- }
89
- }
@@ -1,9 +0,0 @@
1
- import type { DeltaBatch } from '../../core/domain/entities/delta-batch.js';
2
- import type { IDeltaStore } from '../../core/interfaces/i-delta-store.js';
3
- /**
4
- * File-based implementation of IDeltaStore.
5
- * Stores delta batches as JSON files in .brv/ace/deltas/ directory.
6
- */
7
- export declare class FileDeltaStore implements IDeltaStore {
8
- save(deltaBatch: DeltaBatch, hint?: string, directory?: string): Promise<string>;
9
- }
@@ -1,26 +0,0 @@
1
- import { writeFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { DELTAS_DIR } from '../../constants.js';
4
- import { ensureAceDirectory, generateTimestampedFilename } from './ace-file-utils.js';
5
- /**
6
- * File-based implementation of IDeltaStore.
7
- * Stores delta batches as JSON files in .brv/ace/deltas/ directory.
8
- */
9
- export class FileDeltaStore {
10
- async save(deltaBatch, hint, directory) {
11
- try {
12
- // Ensure deltas directory exists
13
- const deltasDir = await ensureAceDirectory(directory, DELTAS_DIR);
14
- // Generate filename with optional hint and timestamp
15
- const filename = generateTimestampedFilename('delta', hint);
16
- const filePath = join(deltasDir, filename);
17
- // Serialize and save delta batch
18
- const content = JSON.stringify(deltaBatch.toJson(), null, 2);
19
- await writeFile(filePath, content, 'utf8');
20
- return filePath;
21
- }
22
- catch (error) {
23
- throw new Error(`Failed to save delta batch: ${error.message}`);
24
- }
25
- }
26
- }
@@ -1,9 +0,0 @@
1
- import type { ExecutorOutput } from '../../core/domain/entities/executor-output.js';
2
- import type { IExecutorOutputStore } from '../../core/interfaces/i-executor-output-store.js';
3
- /**
4
- * File-based implementation of IExecutorOutputStore.
5
- * Stores executor outputs as JSON files in .brv/ace/executor-outputs/ directory.
6
- */
7
- export declare class FileExecutorOutputStore implements IExecutorOutputStore {
8
- save(output: ExecutorOutput, directory?: string): Promise<string>;
9
- }
@@ -1,26 +0,0 @@
1
- import { writeFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { EXECUTOR_OUTPUTS_DIR } from '../../constants.js';
4
- import { ensureAceDirectory, generateTimestampedFilename } from './ace-file-utils.js';
5
- /**
6
- * File-based implementation of IExecutorOutputStore.
7
- * Stores executor outputs as JSON files in .brv/ace/executor-outputs/ directory.
8
- */
9
- export class FileExecutorOutputStore {
10
- async save(output, directory) {
11
- try {
12
- // Ensure executor-outputs directory exists
13
- const outputDir = await ensureAceDirectory(directory, EXECUTOR_OUTPUTS_DIR);
14
- // Generate filename with hint from executor output and timestamp
15
- const filename = generateTimestampedFilename('executor', output.hint || undefined);
16
- const filePath = join(outputDir, filename);
17
- // Serialize and save executor output
18
- const content = JSON.stringify(output.toJson(), null, 2);
19
- await writeFile(filePath, content, 'utf8');
20
- return filePath;
21
- }
22
- catch (error) {
23
- throw new Error(`Failed to save executor output: ${error.message}`);
24
- }
25
- }
26
- }
@@ -1,29 +0,0 @@
1
- import type { IBulletContentStore } from '../../core/interfaces/i-bullet-content-store.js';
2
- import type { IPlaybookStore } from '../../core/interfaces/i-playbook-store.js';
3
- import { Playbook } from '../../core/domain/entities/playbook.js';
4
- /**
5
- * File-based implementation of IPlaybookStore.
6
- * Stores playbook metadata in .brv/ace/playbook.json and bullet content in .brv/ace/bullets/{id}.md files.
7
- */
8
- export declare class FilePlaybookStore implements IPlaybookStore {
9
- private static readonly PLAYBOOK_FILE;
10
- private readonly contentStore;
11
- constructor(contentStore?: IBulletContentStore);
12
- clear(directory?: string): Promise<void>;
13
- delete(directory?: string): Promise<void>;
14
- exists(directory?: string): Promise<boolean>;
15
- load(directory?: string): Promise<Playbook | undefined>;
16
- save(playbook: Playbook, directory?: string): Promise<void>;
17
- /**
18
- * Gets the full path to the .brv/ace directory
19
- */
20
- private getAceDirPath;
21
- /**
22
- * Gets the full path to the .brv directory
23
- */
24
- private getBrDirPath;
25
- /**
26
- * Gets the full path to the playbook.json file
27
- */
28
- private getPlaybookPath;
29
- }
@@ -1,107 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
4
- import { ACE_DIR, BRV_DIR } from '../../constants.js';
5
- import { Playbook } from '../../core/domain/entities/playbook.js';
6
- import { PlaybookNotFoundError } from '../../core/domain/errors/ace-error.js';
7
- import { FileBulletContentStore } from './file-bullet-content-store.js';
8
- /**
9
- * File-based implementation of IPlaybookStore.
10
- * Stores playbook metadata in .brv/ace/playbook.json and bullet content in .brv/ace/bullets/{id}.md files.
11
- */
12
- export class FilePlaybookStore {
13
- static PLAYBOOK_FILE = 'playbook.json';
14
- contentStore;
15
- constructor(contentStore) {
16
- this.contentStore = contentStore ?? new FileBulletContentStore();
17
- }
18
- async clear(directory) {
19
- const exists = await this.exists(directory);
20
- if (!exists) {
21
- return;
22
- }
23
- // Load existing playbook to get bullet IDs
24
- const playbook = await this.load(directory);
25
- if (playbook) {
26
- // Delete all bullet content files
27
- const bullets = playbook.getBullets();
28
- await Promise.all(bullets.map((bullet) => this.contentStore.delete(bullet.id, directory)));
29
- }
30
- // Save empty playbook
31
- const emptyPlaybook = new Playbook();
32
- await this.save(emptyPlaybook, directory);
33
- }
34
- async delete(directory) {
35
- const playbookPath = this.getPlaybookPath(directory);
36
- if (!existsSync(playbookPath)) {
37
- return;
38
- }
39
- try {
40
- // Load playbook to get bullet IDs
41
- const playbook = await this.load(directory);
42
- if (playbook) {
43
- // Delete all bullet content files
44
- const bullets = playbook.getBullets();
45
- await Promise.all(bullets.map((bullet) => this.contentStore.delete(bullet.id, directory)));
46
- }
47
- // Delete playbook.json
48
- await unlink(playbookPath);
49
- }
50
- catch (error) {
51
- throw new Error(`Failed to delete playbook at ${playbookPath}: ${error.message}`);
52
- }
53
- }
54
- async exists(directory) {
55
- const playbookPath = this.getPlaybookPath(directory);
56
- return existsSync(playbookPath);
57
- }
58
- async load(directory) {
59
- const playbookPath = this.getPlaybookPath(directory);
60
- if (!existsSync(playbookPath)) {
61
- return undefined;
62
- }
63
- try {
64
- const content = await readFile(playbookPath, 'utf8');
65
- return await Playbook.loads(content, this.contentStore, directory);
66
- }
67
- catch (error) {
68
- throw new PlaybookNotFoundError(`Failed to load playbook from ${playbookPath}: ${error.message}`);
69
- }
70
- }
71
- async save(playbook, directory) {
72
- const aceDirPath = this.getAceDirPath(directory);
73
- const playbookPath = this.getPlaybookPath(directory);
74
- try {
75
- // Create .brv/ace directory if it doesn't exist
76
- await mkdir(aceDirPath, { recursive: true });
77
- // Save all bullet content to separate files
78
- const bullets = playbook.getBullets();
79
- await Promise.all(bullets.map((bullet) => this.contentStore.save(bullet.id, bullet.content, directory)));
80
- // Write playbook.json (without content)
81
- const content = playbook.dumps(false);
82
- await writeFile(playbookPath, content, 'utf8');
83
- }
84
- catch (error) {
85
- throw new Error(`Failed to save playbook to ${playbookPath}: ${error.message}`);
86
- }
87
- }
88
- /**
89
- * Gets the full path to the .brv/ace directory
90
- */
91
- getAceDirPath(directory) {
92
- return join(this.getBrDirPath(directory), ACE_DIR);
93
- }
94
- /**
95
- * Gets the full path to the .brv directory
96
- */
97
- getBrDirPath(directory) {
98
- const baseDir = directory ?? process.cwd();
99
- return join(baseDir, BRV_DIR);
100
- }
101
- /**
102
- * Gets the full path to the playbook.json file
103
- */
104
- getPlaybookPath(directory) {
105
- return join(this.getAceDirPath(directory), FilePlaybookStore.PLAYBOOK_FILE);
106
- }
107
- }
@@ -1,10 +0,0 @@
1
- import type { IReflectionStore } from '../../core/interfaces/i-reflection-store.js';
2
- import { ReflectorOutput } from '../../core/domain/entities/reflector-output.js';
3
- /**
4
- * File-based implementation of IReflectionStore.
5
- * Stores reflections as JSON files in .brv/ace/reflections/ directory.
6
- */
7
- export declare class FileReflectionStore implements IReflectionStore {
8
- loadRecent(directory?: string, count?: number): Promise<ReflectorOutput[]>;
9
- save(reflection: ReflectorOutput, directory?: string): Promise<string>;
10
- }
@@ -1,55 +0,0 @@
1
- import { readdir, readFile, writeFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { REFLECTIONS_DIR } from '../../constants.js';
4
- import { ReflectorOutput } from '../../core/domain/entities/reflector-output.js';
5
- import { ensureAceDirectory, generateTimestampedFilename } from './ace-file-utils.js';
6
- /**
7
- * File-based implementation of IReflectionStore.
8
- * Stores reflections as JSON files in .brv/ace/reflections/ directory.
9
- */
10
- export class FileReflectionStore {
11
- async loadRecent(directory, count = 3) {
12
- try {
13
- // Get reflections directory path
14
- const reflectionsDir = await ensureAceDirectory(directory, REFLECTIONS_DIR);
15
- // Read all reflection files
16
- const files = await readdir(reflectionsDir);
17
- const reflectionFiles = files
18
- .filter((f) => f.endsWith('.json'))
19
- .sort()
20
- .reverse() // Most recent first (assuming timestamped filenames)
21
- .slice(0, count);
22
- // Load and parse reflections
23
- const reflections = await Promise.all(reflectionFiles.map(async (file) => {
24
- const filePath = join(reflectionsDir, file);
25
- const content = await readFile(filePath, 'utf8');
26
- const json = JSON.parse(content);
27
- return ReflectorOutput.fromJson(json);
28
- }));
29
- return reflections;
30
- }
31
- catch (error) {
32
- // If reflections directory doesn't exist or is empty, return empty array
33
- if (error.code === 'ENOENT') {
34
- return [];
35
- }
36
- throw new Error(`Failed to load recent reflections: ${error.message}`);
37
- }
38
- }
39
- async save(reflection, directory) {
40
- try {
41
- // Ensure reflections directory exists
42
- const reflectionsDir = await ensureAceDirectory(directory, REFLECTIONS_DIR);
43
- // Generate filename with hint from reflection and timestamp
44
- const filename = generateTimestampedFilename('reflection', reflection.hint || undefined);
45
- const filePath = join(reflectionsDir, filename);
46
- // Serialize and save reflection
47
- const content = JSON.stringify(reflection.toJson(), null, 2);
48
- await writeFile(filePath, content, 'utf8');
49
- return filePath;
50
- }
51
- catch (error) {
52
- throw new Error(`Failed to save reflection: ${error.message}`);
53
- }
54
- }
55
- }
@@ -1,42 +0,0 @@
1
- import type { Bullet, BulletMetadata } from '../../core/domain/entities/bullet.js';
2
- import type { DeltaBatch } from '../../core/domain/entities/delta-batch.js';
3
- import type { ReflectorOutput } from '../../core/domain/entities/reflector-output.js';
4
- import type { IPlaybookService } from '../../core/interfaces/i-playbook-service.js';
5
- import type { IPlaybookStore } from '../../core/interfaces/i-playbook-store.js';
6
- import { Playbook } from '../../core/domain/entities/playbook.js';
7
- export type PlaybookServiceConfig = {
8
- baseDirectory?: string;
9
- };
10
- /**
11
- * File-based implementation of IPlaybookService.
12
- * Provides high-level playbook operations including initialization,
13
- * bullet management, delta application, and reflection tag processing.
14
- */
15
- export declare class FilePlaybookService implements IPlaybookService {
16
- private static readonly SUBDIRS;
17
- private readonly config;
18
- private readonly playbookStore;
19
- constructor(config?: PlaybookServiceConfig, playbookStore?: IPlaybookStore);
20
- addOrUpdateBullet(params: {
21
- bulletId?: string;
22
- content: string;
23
- directory?: string;
24
- metadata?: BulletMetadata;
25
- section: string;
26
- }): Promise<Bullet>;
27
- applyDelta(params: {
28
- delta: DeltaBatch;
29
- directory?: string;
30
- }): Promise<{
31
- operationsApplied: number;
32
- playbook: Playbook;
33
- }>;
34
- applyReflectionTags(params: {
35
- directory?: string;
36
- reflection: ReflectorOutput;
37
- }): Promise<{
38
- playbook: Playbook;
39
- tagsApplied: number;
40
- }>;
41
- initialize(directory?: string): Promise<string>;
42
- }