byterover-cli 0.2.0 → 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 (498) 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 +53 -2
  18. package/dist/commands/init.js +279 -66
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/logout.d.ts +16 -0
  21. package/dist/commands/logout.js +61 -0
  22. package/dist/commands/pull.d.ts +33 -0
  23. package/dist/commands/pull.js +115 -0
  24. package/dist/commands/push.d.ts +13 -13
  25. package/dist/commands/push.js +81 -101
  26. package/dist/commands/query.d.ts +63 -0
  27. package/dist/commands/query.js +349 -0
  28. package/dist/commands/space/list.d.ts +5 -2
  29. package/dist/commands/space/list.js +60 -56
  30. package/dist/commands/space/switch.d.ts +16 -0
  31. package/dist/commands/space/switch.js +102 -53
  32. package/dist/commands/status.d.ts +5 -2
  33. package/dist/commands/status.js +43 -33
  34. package/dist/commands/watch.d.ts +23 -0
  35. package/dist/commands/watch.js +171 -0
  36. package/dist/config/auth.config.js +14 -2
  37. package/dist/config/context-tree-domains.d.ts +12 -0
  38. package/dist/config/context-tree-domains.js +29 -0
  39. package/dist/config/environment.d.ts +6 -0
  40. package/dist/config/environment.js +9 -2
  41. package/dist/constants.d.ts +5 -0
  42. package/dist/constants.js +6 -0
  43. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  44. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  45. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  46. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  47. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  48. package/dist/core/domain/cipher/agent/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  50. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  51. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  52. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  53. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  54. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  55. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  56. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  57. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  58. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  59. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  60. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  61. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  62. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  63. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  64. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  65. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  66. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  67. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  68. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  69. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  70. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  71. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  72. package/dist/core/domain/cipher/memory/types.js +4 -0
  73. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  74. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  75. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  76. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  77. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  78. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  79. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  80. package/dist/core/domain/cipher/todos/index.js +4 -0
  81. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  82. package/dist/core/domain/cipher/todos/types.js +5 -0
  83. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  84. package/dist/core/domain/cipher/tools/constants.js +24 -0
  85. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  86. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  87. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  88. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  89. package/dist/core/domain/entities/brv-config.js +115 -17
  90. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  91. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  92. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  93. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  94. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  95. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  96. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  97. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  98. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  99. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  100. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  101. package/dist/core/domain/entities/context-tree-index.js +27 -0
  102. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  103. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  104. package/dist/core/domain/entities/event.d.ts +1 -1
  105. package/dist/core/domain/entities/event.js +4 -1
  106. package/dist/core/domain/entities/parser.d.ts +567 -0
  107. package/dist/core/domain/entities/parser.js +10 -0
  108. package/dist/core/domain/entities/playbook.d.ts +2 -23
  109. package/dist/core/domain/entities/playbook.js +2 -70
  110. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  111. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  112. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  113. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  114. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  115. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  116. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  117. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  118. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  119. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  120. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  121. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  122. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  123. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  124. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  125. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  128. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  129. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  130. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  131. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  132. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  133. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  134. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  135. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  136. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  137. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  139. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  140. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  141. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  142. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  143. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  144. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  145. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  146. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  147. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  148. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  149. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  150. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  151. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  153. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  155. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  156. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  157. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  158. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  159. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  160. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  161. package/dist/core/interfaces/cipher/message-types.js +5 -0
  162. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  163. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  164. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  165. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  166. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  167. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  168. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  169. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  171. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  173. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  174. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  175. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  176. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  177. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  178. package/dist/core/interfaces/i-rule-template-service.d.ts +0 -4
  179. package/dist/core/interfaces/i-rule-template-service.js +1 -4
  180. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  181. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  182. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  183. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  184. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  185. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  186. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  187. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  188. package/dist/hooks/error/clean-errors.d.ts +7 -0
  189. package/dist/hooks/error/clean-errors.js +50 -0
  190. package/dist/hooks/init/welcome.js +72 -1
  191. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  192. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  193. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  194. package/dist/infra/cipher/agent-service-factory.js +212 -0
  195. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  196. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  197. package/dist/infra/cipher/blob/index.d.ts +10 -0
  198. package/dist/infra/cipher/blob/index.js +12 -0
  199. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  200. package/dist/infra/cipher/blob/migrations.js +148 -0
  201. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  202. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  203. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  204. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  205. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  206. package/dist/infra/cipher/cipher-agent.js +317 -0
  207. package/dist/infra/cipher/command-parser.d.ts +23 -0
  208. package/dist/infra/cipher/command-parser.js +85 -0
  209. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  210. package/dist/infra/cipher/display/todo-display.js +129 -0
  211. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  212. package/dist/infra/cipher/events/event-emitter.js +158 -0
  213. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  214. package/dist/infra/cipher/exit-codes.js +58 -0
  215. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  216. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  217. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  218. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  219. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  220. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  221. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  222. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  223. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  224. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  225. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  226. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  227. package/dist/infra/cipher/interactive-commands.js +198 -0
  228. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  229. package/dist/infra/cipher/interactive-loop.js +352 -0
  230. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  231. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  232. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  233. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  234. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  235. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  236. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  237. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  238. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  239. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  240. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  241. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  242. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  243. package/dist/infra/cipher/llm/context/index.js +2 -0
  244. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  245. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  246. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  247. package/dist/infra/cipher/llm/context/utils.js +89 -0
  248. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  249. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  250. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  251. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  252. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  253. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  254. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  255. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  256. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  257. package/dist/infra/cipher/llm/generators/index.js +13 -0
  258. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  259. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  260. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  261. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  262. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  263. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  264. package/dist/infra/cipher/llm/index.d.ts +9 -0
  265. package/dist/infra/cipher/llm/index.js +13 -0
  266. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  267. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  268. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  269. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  270. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  271. package/dist/infra/cipher/llm/response-validator.js +157 -0
  272. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  273. package/dist/infra/cipher/llm/retry/index.js +10 -0
  274. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  275. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  276. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  277. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  278. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  279. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  280. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  281. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  282. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  283. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  284. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  285. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  286. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  287. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  288. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  289. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  290. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  291. package/dist/infra/cipher/logger/console-logger.js +63 -0
  292. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  293. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  294. package/dist/infra/cipher/memory/index.d.ts +6 -0
  295. package/dist/infra/cipher/memory/index.js +7 -0
  296. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  297. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  298. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  299. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  300. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  301. package/dist/infra/cipher/process/command-validator.js +266 -0
  302. package/dist/infra/cipher/process/index.d.ts +8 -0
  303. package/dist/infra/cipher/process/index.js +8 -0
  304. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  305. package/dist/infra/cipher/process/process-service.js +439 -0
  306. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  307. package/dist/infra/cipher/session/chat-session.js +165 -0
  308. package/dist/infra/cipher/session/index.d.ts +6 -0
  309. package/dist/infra/cipher/session/index.js +5 -0
  310. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  311. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  312. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  313. package/dist/infra/cipher/session/session-manager.js +172 -0
  314. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  315. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  316. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  317. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  318. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  319. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  320. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  321. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  322. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  323. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  324. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  326. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  327. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  328. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  329. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  330. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  331. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  332. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  333. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  334. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  335. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  336. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  337. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  338. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  339. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  340. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  342. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  344. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  346. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  347. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  348. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  350. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  351. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  352. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  353. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  354. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  355. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  356. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  357. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  358. package/dist/infra/cipher/tools/index.d.ts +18 -0
  359. package/dist/infra/cipher/tools/index.js +19 -0
  360. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  361. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  362. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  363. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  364. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  365. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  366. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  367. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  368. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  369. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  370. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  371. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  372. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  373. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  374. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  375. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  376. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  377. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  378. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  379. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  380. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  381. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  382. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  383. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  384. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  385. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  386. package/dist/infra/config/file-config-store.js +9 -3
  387. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  388. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  389. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  390. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  391. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  392. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  393. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  394. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  395. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  396. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  397. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  398. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  399. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  400. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  401. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  402. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  403. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  404. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  405. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  406. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  407. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  408. package/dist/infra/parsers/clean/shared.js +273 -0
  409. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  410. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  411. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  412. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  413. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  414. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  415. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  416. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  417. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  418. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  419. package/dist/infra/rule/constants.d.ts +4 -0
  420. package/dist/infra/rule/constants.js +4 -0
  421. package/dist/infra/rule/rule-template-service.js +1 -1
  422. package/dist/infra/rule/rule-writer-service.js +1 -5
  423. package/dist/infra/space/http-space-service.js +2 -1
  424. package/dist/infra/team/http-team-service.js +2 -1
  425. package/dist/infra/user/http-user-service.js +2 -1
  426. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  427. package/dist/infra/watcher/file-watcher-service.js +81 -0
  428. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  429. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  430. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  431. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  432. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  433. package/dist/resources/prompts/reflection.yml +27 -0
  434. package/dist/resources/prompts/system-prompt.yml +82 -0
  435. package/dist/resources/prompts/tool-outputs.yml +30 -0
  436. package/dist/templates/README.md +6 -7
  437. package/dist/templates/sections/command-reference.md +40 -93
  438. package/dist/templates/sections/workflow.md +3 -30
  439. package/dist/utils/emoji-helpers.d.ts +38 -0
  440. package/dist/utils/emoji-helpers.js +42 -0
  441. package/dist/utils/error-handler.d.ts +51 -0
  442. package/dist/utils/error-handler.js +169 -0
  443. package/dist/utils/error-helpers.d.ts +30 -0
  444. package/dist/utils/error-helpers.js +47 -0
  445. package/dist/utils/file-helpers.d.ts +15 -0
  446. package/dist/utils/file-helpers.js +44 -0
  447. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  448. package/dist/utils/oclif-error-helpers.js +46 -0
  449. package/dist/utils/tool-display-formatter.d.ts +53 -0
  450. package/dist/utils/tool-display-formatter.js +257 -0
  451. package/oclif.manifest.json +422 -142
  452. package/package.json +29 -10
  453. package/dist/commands/add.d.ts +0 -49
  454. package/dist/commands/add.js +0 -192
  455. package/dist/commands/complete.d.ts +0 -108
  456. package/dist/commands/complete.js +0 -340
  457. package/dist/commands/retrieve.d.ts +0 -26
  458. package/dist/commands/retrieve.js +0 -101
  459. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  460. package/dist/core/domain/entities/curator-output.js +0 -23
  461. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  462. package/dist/core/domain/entities/delta-batch.js +0 -52
  463. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  464. package/dist/core/domain/entities/delta-operation.js +0 -50
  465. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  466. package/dist/core/domain/entities/executor-output.js +0 -33
  467. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  468. package/dist/core/domain/entities/reflector-output.js +0 -44
  469. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  470. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  471. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  472. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  473. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  474. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  475. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  476. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  477. package/dist/infra/ace/ace-file-utils.js +0 -83
  478. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  479. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  480. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  481. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  482. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  483. package/dist/infra/ace/file-delta-store.js +0 -26
  484. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  485. package/dist/infra/ace/file-executor-output-store.js +0 -26
  486. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  487. package/dist/infra/ace/file-playbook-store.js +0 -107
  488. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  489. package/dist/infra/ace/file-reflection-store.js +0 -55
  490. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  491. package/dist/infra/playbook/file-playbook-service.js +0 -132
  492. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  493. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  494. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  495. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  496. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  497. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  498. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Default Policy Rules for Autonomous Execution.
3
+ *
4
+ * These rules define the default behavior for tool execution in autonomous mode.
5
+ * All tools are ALLOWED by default since the agent runs without user approval.
6
+ *
7
+ * DENY rules are only for truly dangerous operations that should never run,
8
+ * such as destructive commands that could harm the system.
9
+ */
10
+ /**
11
+ * Default policy rules for autonomous execution.
12
+ *
13
+ * Rule evaluation order:
14
+ * 1. DENY rules for dangerous operations (evaluated first via conditions)
15
+ * 2. ALLOW rules for all known tool categories
16
+ * 3. Default ALLOW for any unlisted tools
17
+ */
18
+ export const DEFAULT_POLICY_RULES = [
19
+ // ============================================
20
+ // DENY rules for dangerous operations
21
+ // ============================================
22
+ /**
23
+ * Deny destructive root filesystem deletion.
24
+ * Matches: rm -rf / , rm -r / , rm -f /
25
+ */
26
+ {
27
+ condition(_, args) {
28
+ const command = String(args.command || '');
29
+ // Match rm with -r or -f flags targeting root /
30
+ // Negative lookahead (?!\w) ensures / is not followed by word chars
31
+ return /rm\s+(-[rf]+\s+)+\/(?!\w)/.test(command);
32
+ },
33
+ decision: 'DENY',
34
+ name: 'deny-rm-rf-root',
35
+ reason: 'Destructive root filesystem deletion not allowed',
36
+ toolPattern: 'bash_exec',
37
+ },
38
+ /**
39
+ * Deny format commands on disk devices.
40
+ */
41
+ {
42
+ condition(_, args) {
43
+ const command = String(args.command || '');
44
+ return /mkfs\.|format\s+[cdefg]:/i.test(command);
45
+ },
46
+ decision: 'DENY',
47
+ name: 'deny-format-disk',
48
+ reason: 'Disk formatting not allowed',
49
+ toolPattern: 'bash_exec',
50
+ },
51
+ /**
52
+ * Deny dd commands that could overwrite disks.
53
+ */
54
+ {
55
+ condition(_, args) {
56
+ const command = String(args.command || '');
57
+ return /dd\s+.*of=\/dev\/(sd[a-z]|hd[a-z]|nvme|disk)/i.test(command);
58
+ },
59
+ decision: 'DENY',
60
+ name: 'deny-dd-disk',
61
+ reason: 'Direct disk write with dd not allowed',
62
+ toolPattern: 'bash_exec',
63
+ },
64
+ // ============================================
65
+ // ALLOW rules for tool categories
66
+ // ============================================
67
+ /**
68
+ * Allow all read operations (safe by default).
69
+ */
70
+ {
71
+ decision: 'ALLOW',
72
+ name: 'allow-read-tools',
73
+ reason: 'Read operations are safe',
74
+ toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history|find_knowledge_topics)$/,
75
+ },
76
+ /**
77
+ * Allow all write operations (autonomous mode).
78
+ */
79
+ {
80
+ decision: 'ALLOW',
81
+ name: 'allow-write-tools',
82
+ reason: 'Write operations allowed in autonomous mode',
83
+ toolPattern: /^(write_file|edit_file|write_memory|edit_memory|delete_memory|create_knowledge_topic)$/,
84
+ },
85
+ /**
86
+ * Allow bash execution (autonomous mode, with DENY rules above as safety net).
87
+ */
88
+ {
89
+ decision: 'ALLOW',
90
+ name: 'allow-bash-tools',
91
+ reason: 'Shell execution allowed in autonomous mode',
92
+ toolPattern: /^(bash_exec|bash_output|kill_process)$/,
93
+ },
94
+ /**
95
+ * Allow discovery/exploration tools.
96
+ */
97
+ {
98
+ decision: 'ALLOW',
99
+ name: 'allow-discovery-tools',
100
+ reason: 'Discovery operations are safe',
101
+ toolPattern: /^(detect_domains)$/,
102
+ },
103
+ // ============================================
104
+ // Catch-all ALLOW for any other tools
105
+ // ============================================
106
+ /**
107
+ * Allow all other tools by default.
108
+ * This ensures new tools work without explicit rules.
109
+ */
110
+ {
111
+ decision: 'ALLOW',
112
+ name: 'allow-all-default',
113
+ reason: 'Default allow for autonomous mode',
114
+ toolPattern: '*',
115
+ },
116
+ ];
117
+ /**
118
+ * Create a copy of the default rules.
119
+ * Useful when you want to modify rules without affecting the defaults.
120
+ *
121
+ * @returns A new array with copies of the default rules
122
+ */
123
+ export function createDefaultPolicyRules() {
124
+ return DEFAULT_POLICY_RULES.map((rule) => ({ ...rule }));
125
+ }
@@ -0,0 +1,12 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { IProcessService } from '../../../../core/interfaces/cipher/i-process-service.js';
3
+ /**
4
+ * Create bash_exec tool.
5
+ *
6
+ * Executes shell commands with security validation and approval for dangerous commands.
7
+ * Supports both foreground (wait for completion) and background (return immediately) execution.
8
+ *
9
+ * @param processService - Process service for command execution
10
+ * @returns bash_exec tool instance
11
+ */
12
+ export declare function createBashExecTool(processService: IProcessService): Tool;
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for bash_exec tool.
5
+ */
6
+ const BashExecInputSchema = z
7
+ .object({
8
+ /**
9
+ * Shell command to execute.
10
+ */
11
+ command: z.string().describe('Shell command to execute'),
12
+ /**
13
+ * Working directory for command execution (relative to configured base directory).
14
+ */
15
+ cwd: z.string().optional().describe('Working directory for command execution'),
16
+ /**
17
+ * Human-readable description of what the command does (5-10 words).
18
+ */
19
+ description: z.string().optional().describe('Description of what the command does (5-10 words)'),
20
+ /**
21
+ * Execute command in background (returns immediately with process handle).
22
+ */
23
+ runInBackground: z
24
+ .boolean()
25
+ .optional()
26
+ .default(false)
27
+ .describe('Execute command in background'),
28
+ /**
29
+ * Timeout in milliseconds (max: 600000).
30
+ */
31
+ timeout: z
32
+ .number()
33
+ .int()
34
+ .positive()
35
+ .max(600_000)
36
+ .optional()
37
+ .default(120_000)
38
+ .describe('Timeout in milliseconds'),
39
+ })
40
+ .strict();
41
+ /**
42
+ * Create bash_exec tool.
43
+ *
44
+ * Executes shell commands with security validation and approval for dangerous commands.
45
+ * Supports both foreground (wait for completion) and background (return immediately) execution.
46
+ *
47
+ * @param processService - Process service for command execution
48
+ * @returns bash_exec tool instance
49
+ */
50
+ export function createBashExecTool(processService) {
51
+ return {
52
+ description: `Execute a shell command and return its output.
53
+
54
+ If there is a memory about suggested commands, read that first.
55
+
56
+ **IMPORTANT:** Do not use this tool to start any process that is not intended to terminate quickly, or requires user interaction.
57
+
58
+ Examples of inappropriate use:
59
+ - Long-running processes (e.g. servers) that are not intended to terminate quickly
60
+ - Processes that require user interaction`,
61
+ async execute(input, _context) {
62
+ const { command, cwd, description, runInBackground, timeout } = input;
63
+ // Execute command via process service
64
+ const result = await processService.executeCommand(command, {
65
+ cwd,
66
+ description,
67
+ runInBackground,
68
+ timeout,
69
+ });
70
+ // Return based on execution mode
71
+ if ('stdout' in result) {
72
+ // Foreground execution result
73
+ return {
74
+ duration: result.duration,
75
+ exitCode: result.exitCode,
76
+ stderr: result.stderr,
77
+ stdout: result.stdout,
78
+ };
79
+ }
80
+ // Background execution handle
81
+ return {
82
+ command: result.command,
83
+ description: result.description,
84
+ message: `Process started in background. Use bash_output with processId="${result.processId}" to retrieve output.`,
85
+ pid: result.pid,
86
+ processId: result.processId,
87
+ startedAt: result.startedAt.toISOString(),
88
+ };
89
+ },
90
+ id: ToolName.BASH_EXEC,
91
+ inputSchema: BashExecInputSchema,
92
+ };
93
+ }
@@ -0,0 +1,12 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { IProcessService } from '../../../../core/interfaces/cipher/i-process-service.js';
3
+ /**
4
+ * Create bash_output tool.
5
+ *
6
+ * Retrieves output from a background process started by bash_exec.
7
+ * Reading output clears the buffer (destructive read), so output is only returned once.
8
+ *
9
+ * @param processService - Process service for retrieving output
10
+ * @returns bash_output tool instance
11
+ */
12
+ export declare function createBashOutputTool(processService: IProcessService): Tool;
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for bash_output tool.
5
+ */
6
+ const BashOutputInputSchema = z
7
+ .object({
8
+ /**
9
+ * Unique process identifier from bash_exec.
10
+ */
11
+ processId: z.string().describe('Unique process identifier from bash_exec'),
12
+ })
13
+ .strict();
14
+ /**
15
+ * Create bash_output tool.
16
+ *
17
+ * Retrieves output from a background process started by bash_exec.
18
+ * Reading output clears the buffer (destructive read), so output is only returned once.
19
+ *
20
+ * @param processService - Process service for retrieving output
21
+ * @returns bash_output tool instance
22
+ */
23
+ export function createBashOutputTool(processService) {
24
+ return {
25
+ description: `Retrieve output from a background process started by bash_exec.
26
+
27
+ Returns new output since last read (incremental). Reading output clears the buffer, so output is returned only once. Shows process status (running/completed/failed) and includes exit code and duration when completed.
28
+
29
+ **IMPORTANT:** Output is truncated if it exceeds buffer limit (default 1MB). Process is automatically cleaned up 1 hour after completion.`,
30
+ async execute(input, _context) {
31
+ const { processId } = input;
32
+ // Get output from process service
33
+ const output = await processService.getProcessOutput(processId);
34
+ // Return output with status
35
+ return {
36
+ duration: output.duration,
37
+ exitCode: output.exitCode,
38
+ processId,
39
+ status: output.status,
40
+ stderr: output.stderr,
41
+ stdout: output.stdout,
42
+ };
43
+ },
44
+ id: ToolName.BASH_OUTPUT,
45
+ inputSchema: BashOutputInputSchema,
46
+ };
47
+ }
@@ -0,0 +1,11 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ /**
3
+ * Creates the create knowledge topic tool.
4
+ *
5
+ * Creates organized knowledge topics within domain folders, where each topic and subtopic
6
+ * has its own folder containing a context.md file with relevant snippets. This tool should
7
+ * be used after detecting domains to organize the extracted knowledge into a structured hierarchy.
8
+ *
9
+ * @returns Configured create knowledge topic tool
10
+ */
11
+ export declare function createCreateKnowledgeTopicTool(): Tool;
@@ -0,0 +1,142 @@
1
+ import { join } from 'node:path';
2
+ import { z } from 'zod';
3
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
4
+ import { DirectoryManager } from '../../../../core/domain/knowledge/directory-manager.js';
5
+ import { MarkdownWriter } from '../../../../core/domain/knowledge/markdown-writer.js';
6
+ import { sanitizeFolderName } from '../../../../utils/file-helpers.js';
7
+ const CreateKnowledgeTopicInputSchema = z.object({
8
+ // Base path for knowledge storage
9
+ basePath: z.string().default('.brv/context-tree'),
10
+ domains: z.array(z.string()).describe('Array of domain names'),
11
+ // Manual topics (optional)
12
+ topics: z
13
+ .array(z.object({
14
+ domain: z.string().describe('Domain category name from predefined list'),
15
+ name: z.string().describe('Topic name'),
16
+ relations: z
17
+ .array(z.string())
18
+ .optional()
19
+ .describe('Related topics using @domain/topic or @domain/topic/subtopic notation'),
20
+ snippets: z.array(z.string()).describe('Code/text snippets'),
21
+ subtopics: z
22
+ .array(z.object({
23
+ name: z.string().describe('Subtopic name'),
24
+ relations: z
25
+ .array(z.string())
26
+ .optional()
27
+ .describe('Related topics using @domain/topic or @domain/topic/subtopic notation'),
28
+ snippets: z.array(z.string()).describe('Code/text snippets'),
29
+ }))
30
+ .describe('Array of subtopics'),
31
+ }))
32
+ .describe('Array of topics for each domain'),
33
+ });
34
+ /**
35
+ * Execute function for create knowledge topic tool
36
+ */
37
+ async function executeCreateKnowledgeTopic(input, _context) {
38
+ const { basePath, topics } = input;
39
+ // Ensure base knowledge structure exists
40
+ await DirectoryManager.ensureKnowledgeStructure(basePath);
41
+ const created = [];
42
+ const updated = [];
43
+ // Process each topic sequentially (domains/topics must be created in order)
44
+ /* eslint-disable no-await-in-loop -- Sequential processing required for domain/topic hierarchy */
45
+ for (const topicData of topics) {
46
+ const { domain, name: topicName, relations, snippets, subtopics: subtopicData } = topicData;
47
+ // Create or update domain folder
48
+ const domainPath = join(basePath, sanitizeFolderName(domain));
49
+ const domainResult = await DirectoryManager.createOrUpdateDomain(domainPath);
50
+ // Create or update topic folder
51
+ const topicPath = join(domainPath, sanitizeFolderName(topicName));
52
+ const topicResult = await DirectoryManager.createOrUpdateTopic(topicPath);
53
+ // Generate and write topic context.md
54
+ const topicContextContent = MarkdownWriter.generateContext({
55
+ name: topicName,
56
+ relations,
57
+ snippets,
58
+ });
59
+ const topicContextPath = join(topicPath, 'context.md');
60
+ await DirectoryManager.writeFileAtomic(topicContextPath, topicContextContent);
61
+ // Process subtopics in parallel
62
+ const subtopicResults = await Promise.all(subtopicData.map(async (subtopic) => {
63
+ // Create subtopic folder
64
+ const subtopicPath = join(topicPath, sanitizeFolderName(subtopic.name));
65
+ const subtopicResult = await DirectoryManager.createOrUpdateTopic(subtopicPath);
66
+ // Generate and write subtopic context.md
67
+ const subtopicContextContent = MarkdownWriter.generateContext({
68
+ name: subtopic.name,
69
+ relations: subtopic.relations,
70
+ snippets: subtopic.snippets,
71
+ });
72
+ const subtopicContextPath = join(subtopicPath, 'context.md');
73
+ await DirectoryManager.writeFileAtomic(subtopicContextPath, subtopicContextContent);
74
+ return {
75
+ existed: !subtopicResult.created,
76
+ name: subtopic.name,
77
+ };
78
+ }));
79
+ // Separate created vs updated subtopics
80
+ const createdSubtopics = subtopicResults.filter((r) => !r.existed).map((r) => r.name);
81
+ const updatedSubtopics = subtopicResults.filter((r) => r.existed).map((r) => r.name);
82
+ // Track what was created vs updated
83
+ if (domainResult.created || topicResult.created) {
84
+ created.push({
85
+ domain,
86
+ subtopics: createdSubtopics,
87
+ topic: topicName,
88
+ });
89
+ }
90
+ else {
91
+ updated.push({
92
+ domain,
93
+ subtopics: updatedSubtopics,
94
+ topic: topicName,
95
+ });
96
+ }
97
+ }
98
+ /* eslint-enable no-await-in-loop */
99
+ return {
100
+ created,
101
+ updated,
102
+ };
103
+ }
104
+ /**
105
+ * Creates the create knowledge topic tool.
106
+ *
107
+ * Creates organized knowledge topics within domain folders, where each topic and subtopic
108
+ * has its own folder containing a context.md file with relevant snippets. This tool should
109
+ * be used after detecting domains to organize the extracted knowledge into a structured hierarchy.
110
+ *
111
+ * @returns Configured create knowledge topic tool
112
+ */
113
+ export function createCreateKnowledgeTopicTool() {
114
+ return {
115
+ description: `Create organized knowledge topics within domain folders. This tool structures knowledge by creating topic and subtopic folders, each containing a context.md file with relevant snippets and optional relations.
116
+
117
+ Use this tool after detecting domains to organize extracted knowledge into a hierarchical structure:
118
+ - Domain folders (e.g., .brv/context-tree/domain-name/)
119
+ - Topic folders (e.g., .brv/context-tree/domain-name/topic-name/)
120
+ - Topic context.md files (e.g., .brv/context-tree/domain-name/topic-name/context.md)
121
+ - Subtopic folders (e.g., .brv/context-tree/domain-name/topic-name/subtopic-name/)
122
+ - Subtopic context.md files (e.g., .brv/context-tree/domain-name/topic-name/subtopic-name/context.md)
123
+
124
+ Each topic should include:
125
+ 1. A clear topic name
126
+ 2. Relevant code/text snippets that demonstrate the knowledge
127
+ 3. Optional relations to other topics using @domain/topic or @domain/topic/subtopic notation
128
+ 4. Subtopics (optional) that break down the topic into smaller pieces
129
+
130
+ Relations enhance knowledge discovery by linking related contexts. Example:
131
+ - relations: ['code_style/error-handling', 'structure/api-endpoints/validation']
132
+
133
+ The tool automatically:
134
+ - Creates the base knowledge structure if it doesn't exist
135
+ - Creates topic and subtopic folders as needed
136
+ - Generates context.md files with snippets and relations
137
+ - Handles existing topics gracefully (updates instead of recreating)`,
138
+ execute: executeCreateKnowledgeTopic,
139
+ id: ToolName.CREATE_KNOWLEDGE_TOPIC,
140
+ inputSchema: CreateKnowledgeTopicInputSchema,
141
+ };
142
+ }
@@ -0,0 +1,12 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { MemoryManager } from '../../memory/memory-manager.js';
3
+ /**
4
+ * Delete memory tool.
5
+ *
6
+ * Removes a memory from the scratch pad. Also deletes any blob attachments
7
+ * associated with the memory. Use this to clean up outdated or unnecessary context.
8
+ *
9
+ * @param memoryManager - Memory manager service dependency
10
+ * @returns Configured delete memory tool
11
+ */
12
+ export declare function createDeleteMemoryTool(memoryManager: MemoryManager): Tool;
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for delete memory tool.
5
+ */
6
+ const DeleteMemoryInputSchema = z
7
+ .object({
8
+ id: z.string().min(1).describe('Unique identifier of the memory to delete'),
9
+ })
10
+ .strict();
11
+ /**
12
+ * Delete memory tool.
13
+ *
14
+ * Removes a memory from the scratch pad. Also deletes any blob attachments
15
+ * associated with the memory. Use this to clean up outdated or unnecessary context.
16
+ *
17
+ * @param memoryManager - Memory manager service dependency
18
+ * @returns Configured delete memory tool
19
+ */
20
+ export function createDeleteMemoryTool(memoryManager) {
21
+ return {
22
+ description: 'Delete a memory by ID. Removes the memory and all associated attachments from the scratch pad. Use this to clean up outdated context.',
23
+ async execute(input, _context) {
24
+ const { id } = input;
25
+ // Delete memory
26
+ await memoryManager.delete(id);
27
+ // Return confirmation
28
+ return {
29
+ deleted: true,
30
+ id,
31
+ message: `Memory ${id} has been deleted successfully`,
32
+ };
33
+ },
34
+ id: ToolName.DELETE_MEMORY,
35
+ inputSchema: DeleteMemoryInputSchema,
36
+ };
37
+ }
@@ -0,0 +1,7 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ /**
3
+ * Creates the detect domains tool.
4
+ *
5
+ * @returns Configured detect domains tool
6
+ */
7
+ export declare function createDetectDomainsTool(): Tool;
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ import { CONTEXT_TREE_DOMAINS } from '../../../../config/context-tree-domains.js';
3
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
4
+ /**
5
+ * Predefined domain category names for validation reference
6
+ */
7
+ const PREDEFINED_DOMAIN_NAMES = CONTEXT_TREE_DOMAINS.map((domain) => domain.name);
8
+ /**
9
+ * Domain category for knowledge classification.
10
+ */
11
+ const DomainCategory = z
12
+ .string()
13
+ .min(1)
14
+ .describe(`Domain category name. Must be one of the predefined categories: ${PREDEFINED_DOMAIN_NAMES.join(', ')}`);
15
+ /**
16
+ * Text segment schema - represents a portion of the input data related to a domain
17
+ */
18
+ const TextSegmentSchema = z
19
+ .string()
20
+ .min(1)
21
+ .describe('A segment of text from the input data that relates to this domain category');
22
+ /**
23
+ * Input schema for detect domains tool
24
+ */
25
+ const DetectDomainsInputSchema = z
26
+ .object({
27
+ /** Detected domains with metadata and related text segments */
28
+ domains: z
29
+ .array(z.object({
30
+ category: DomainCategory.describe('Domain category name from predefined list'),
31
+ textSegments: z
32
+ .array(TextSegmentSchema)
33
+ .min(1)
34
+ .describe('Array of text segments from the input data that relate to this domain. Each segment should be a meaningful excerpt that demonstrates why this domain is relevant.'),
35
+ }))
36
+ .describe('Array of detected domains with their related text segments from the input data'),
37
+ });
38
+ /**
39
+ * Execute function for detect domains tool with typed input
40
+ */
41
+ async function executeDetectDomains(input, _context) {
42
+ const { domains } = input;
43
+ return {
44
+ domains,
45
+ };
46
+ }
47
+ /**
48
+ * Creates the detect domains tool.
49
+ *
50
+ * @returns Configured detect domains tool
51
+ */
52
+ export function createDetectDomainsTool() {
53
+ const domainDescriptions = CONTEXT_TREE_DOMAINS.map((domain) => ` - ${domain.name}: ${domain.description}`).join('\n');
54
+ return {
55
+ description: `Use this tool to analyze input data and detect which predefined knowledge domains are present. For each detected domain, you must also extract the specific text segments from the input data that relate to that domain.
56
+
57
+ This tool should be the first tool to call when you want to understand new data, unless you already know what you are looking for.
58
+
59
+ Predefined domain categories:
60
+ ${domainDescriptions}
61
+
62
+ For each domain you detect:
63
+ 1. Identify the domain category (must be one of the predefined categories above)
64
+ 2. Extract relevant text segments from the input data that demonstrate why this domain is relevant
65
+ 3. Each text segment should be a meaningful excerpt (not just keywords) that shows the connection to the domain
66
+ 4. Only include domains that are actually present in the data - do not include domains just because they exist in the predefined list
67
+
68
+ The text segments will be used later to create organized knowledge topics, so they should be substantial enough to provide context.`,
69
+ execute: executeDetectDomains,
70
+ id: ToolName.DETECT_DOMAINS,
71
+ inputSchema: DetectDomainsInputSchema,
72
+ };
73
+ }
@@ -0,0 +1,13 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { IFileSystem } from '../../../../core/interfaces/cipher/i-file-system.js';
3
+ /**
4
+ * Creates the edit file tool.
5
+ *
6
+ * Edits a file by replacing text.
7
+ * By default, requires oldString to be unique (only one occurrence).
8
+ * Set replaceAll to true to replace all occurrences.
9
+ *
10
+ * @param fileSystemService - File system service dependency
11
+ * @returns Configured edit file tool
12
+ */
13
+ export declare function createEditFileTool(fileSystemService: IFileSystem): Tool;
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for edit file tool.
5
+ */
6
+ const EditFileInputSchema = z
7
+ .object({
8
+ filePath: z.string().describe('Absolute path to the file to edit'),
9
+ newString: z.string().describe('Replacement text'),
10
+ oldString: z.string().describe('Text to replace (must be unique unless replaceAll is true)'),
11
+ replaceAll: z
12
+ .boolean()
13
+ .optional()
14
+ .default(false)
15
+ .describe('Replace all occurrences (default: false, requires unique match)'),
16
+ })
17
+ .strict();
18
+ /**
19
+ * Creates the edit file tool.
20
+ *
21
+ * Edits a file by replacing text.
22
+ * By default, requires oldString to be unique (only one occurrence).
23
+ * Set replaceAll to true to replace all occurrences.
24
+ *
25
+ * @param fileSystemService - File system service dependency
26
+ * @returns Configured edit file tool
27
+ */
28
+ export function createEditFileTool(fileSystemService) {
29
+ return {
30
+ description: 'Edit a file by replacing text. By default requires unique match (set replaceAll=true for multiple replacements).',
31
+ async execute(input, _context) {
32
+ const { filePath, newString, oldString, replaceAll } = input;
33
+ // Call file system service
34
+ const result = await fileSystemService.editFile(filePath, {
35
+ newString,
36
+ oldString,
37
+ replaceAll,
38
+ }, {});
39
+ // Return formatted result
40
+ return {
41
+ bytesWritten: result.bytesWritten,
42
+ path: result.path,
43
+ replacements: result.replacements,
44
+ success: result.success,
45
+ };
46
+ },
47
+ id: ToolName.EDIT_FILE,
48
+ inputSchema: EditFileInputSchema,
49
+ };
50
+ }
@@ -0,0 +1,13 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { MemoryManager } from '../../memory/memory-manager.js';
3
+ /**
4
+ * Creates the edit memory tool.
5
+ *
6
+ * Updates an existing memory's content, tags, or pinned status. Metadata is merged
7
+ * while content and tags are replaced if provided. Use this to refine or update
8
+ * context in the scratch pad.
9
+ *
10
+ * @param memoryManager - Memory manager service dependency
11
+ * @returns Configured edit memory tool
12
+ */
13
+ export declare function createEditMemoryTool(memoryManager: MemoryManager): Tool;