byterover-cli 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +48 -3
  18. package/dist/commands/init.js +242 -70
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/pull.d.ts +33 -0
  21. package/dist/commands/pull.js +115 -0
  22. package/dist/commands/push.d.ts +13 -13
  23. package/dist/commands/push.js +81 -101
  24. package/dist/commands/query.d.ts +63 -0
  25. package/dist/commands/query.js +349 -0
  26. package/dist/commands/space/list.d.ts +5 -2
  27. package/dist/commands/space/list.js +60 -56
  28. package/dist/commands/space/switch.d.ts +16 -0
  29. package/dist/commands/space/switch.js +102 -53
  30. package/dist/commands/status.d.ts +5 -2
  31. package/dist/commands/status.js +43 -33
  32. package/dist/commands/watch.d.ts +23 -0
  33. package/dist/commands/watch.js +171 -0
  34. package/dist/config/auth.config.js +14 -2
  35. package/dist/config/context-tree-domains.d.ts +12 -0
  36. package/dist/config/context-tree-domains.js +29 -0
  37. package/dist/config/environment.d.ts +6 -0
  38. package/dist/config/environment.js +9 -2
  39. package/dist/constants.d.ts +5 -0
  40. package/dist/constants.js +6 -0
  41. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  42. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  43. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  44. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  45. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  46. package/dist/core/domain/cipher/agent/index.js +7 -0
  47. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  48. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  50. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  51. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  52. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  53. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  54. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  55. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  56. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  57. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  58. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  59. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  60. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  61. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  62. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  63. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  64. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  65. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  66. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  67. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  68. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  69. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  70. package/dist/core/domain/cipher/memory/types.js +4 -0
  71. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  72. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  73. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  74. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  75. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  76. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  77. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  78. package/dist/core/domain/cipher/todos/index.js +4 -0
  79. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  80. package/dist/core/domain/cipher/todos/types.js +5 -0
  81. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  82. package/dist/core/domain/cipher/tools/constants.js +24 -0
  83. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  84. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  85. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  86. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  87. package/dist/core/domain/entities/brv-config.js +115 -17
  88. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  89. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  90. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  91. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  92. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  93. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  94. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  95. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  96. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  97. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  98. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  99. package/dist/core/domain/entities/context-tree-index.js +27 -0
  100. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  101. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  102. package/dist/core/domain/entities/event.d.ts +1 -1
  103. package/dist/core/domain/entities/event.js +3 -1
  104. package/dist/core/domain/entities/parser.d.ts +567 -0
  105. package/dist/core/domain/entities/parser.js +10 -0
  106. package/dist/core/domain/entities/playbook.d.ts +2 -23
  107. package/dist/core/domain/entities/playbook.js +2 -70
  108. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  109. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  110. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  111. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  112. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  113. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  114. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  115. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  116. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  117. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  118. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  119. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  120. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  121. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  122. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  123. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  124. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  125. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  128. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  129. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  130. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  131. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  132. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  133. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  134. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  135. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  136. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  137. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  139. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  140. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  141. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  142. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  143. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  144. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  145. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  146. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  147. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  148. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  149. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  150. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  151. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  153. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  155. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  156. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  157. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  158. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  159. package/dist/core/interfaces/cipher/message-types.js +5 -0
  160. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  161. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  162. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  163. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  164. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  165. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  166. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  167. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  168. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  169. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  171. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  173. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  174. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  175. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  176. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  177. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  178. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  179. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  180. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  181. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  182. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  183. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  184. package/dist/hooks/error/clean-errors.d.ts +7 -0
  185. package/dist/hooks/error/clean-errors.js +50 -0
  186. package/dist/hooks/init/welcome.js +72 -1
  187. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  188. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  189. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  190. package/dist/infra/cipher/agent-service-factory.js +212 -0
  191. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  192. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  193. package/dist/infra/cipher/blob/index.d.ts +10 -0
  194. package/dist/infra/cipher/blob/index.js +12 -0
  195. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  196. package/dist/infra/cipher/blob/migrations.js +148 -0
  197. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  198. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  199. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  200. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  201. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  202. package/dist/infra/cipher/cipher-agent.js +317 -0
  203. package/dist/infra/cipher/command-parser.d.ts +23 -0
  204. package/dist/infra/cipher/command-parser.js +85 -0
  205. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  206. package/dist/infra/cipher/display/todo-display.js +129 -0
  207. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  208. package/dist/infra/cipher/events/event-emitter.js +158 -0
  209. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  210. package/dist/infra/cipher/exit-codes.js +58 -0
  211. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  212. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  213. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  214. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  215. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  216. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  217. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  218. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  219. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  220. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  221. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  222. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  223. package/dist/infra/cipher/interactive-commands.js +198 -0
  224. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  225. package/dist/infra/cipher/interactive-loop.js +352 -0
  226. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  227. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  228. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  229. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  230. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  231. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  232. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  233. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  234. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  235. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  236. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  237. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  238. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  239. package/dist/infra/cipher/llm/context/index.js +2 -0
  240. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  241. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  242. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  243. package/dist/infra/cipher/llm/context/utils.js +89 -0
  244. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  245. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  246. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  247. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  248. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  249. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  250. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  251. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  252. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  253. package/dist/infra/cipher/llm/generators/index.js +13 -0
  254. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  255. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  256. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  257. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  258. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  259. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  260. package/dist/infra/cipher/llm/index.d.ts +9 -0
  261. package/dist/infra/cipher/llm/index.js +13 -0
  262. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  263. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  264. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  265. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  266. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  267. package/dist/infra/cipher/llm/response-validator.js +157 -0
  268. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  269. package/dist/infra/cipher/llm/retry/index.js +10 -0
  270. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  271. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  272. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  273. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  274. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  275. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  276. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  277. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  278. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  279. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  280. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  281. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  282. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  283. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  284. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  285. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  286. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  287. package/dist/infra/cipher/logger/console-logger.js +63 -0
  288. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  289. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  290. package/dist/infra/cipher/memory/index.d.ts +6 -0
  291. package/dist/infra/cipher/memory/index.js +7 -0
  292. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  293. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  294. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  295. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  296. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  297. package/dist/infra/cipher/process/command-validator.js +266 -0
  298. package/dist/infra/cipher/process/index.d.ts +8 -0
  299. package/dist/infra/cipher/process/index.js +8 -0
  300. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  301. package/dist/infra/cipher/process/process-service.js +439 -0
  302. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  303. package/dist/infra/cipher/session/chat-session.js +165 -0
  304. package/dist/infra/cipher/session/index.d.ts +6 -0
  305. package/dist/infra/cipher/session/index.js +5 -0
  306. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  307. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  308. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  309. package/dist/infra/cipher/session/session-manager.js +172 -0
  310. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  311. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  312. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  313. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  314. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  315. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  316. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  317. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  318. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  319. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  320. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  321. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  322. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  323. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  324. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  326. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  327. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  328. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  329. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  330. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  331. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  332. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  333. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  334. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  335. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  336. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  337. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  338. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  339. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  340. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  342. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  344. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  346. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  347. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  348. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  350. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  351. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  352. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  353. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  354. package/dist/infra/cipher/tools/index.d.ts +18 -0
  355. package/dist/infra/cipher/tools/index.js +19 -0
  356. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  357. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  358. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  359. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  360. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  361. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  362. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  363. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  364. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  365. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  366. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  367. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  368. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  369. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  370. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  371. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  372. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  373. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  374. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  375. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  376. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  377. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  378. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  379. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  380. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  381. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  382. package/dist/infra/config/file-config-store.js +9 -3
  383. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  384. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  385. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  386. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  387. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  388. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  389. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  390. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  391. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  392. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  393. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  394. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  395. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  396. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  397. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  398. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  399. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  400. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  401. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  402. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  403. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  404. package/dist/infra/parsers/clean/shared.js +273 -0
  405. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  406. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  407. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  408. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  409. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  410. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  411. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  412. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  413. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  414. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  415. package/dist/infra/space/http-space-service.js +2 -1
  416. package/dist/infra/team/http-team-service.js +2 -1
  417. package/dist/infra/user/http-user-service.js +2 -1
  418. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  419. package/dist/infra/watcher/file-watcher-service.js +81 -0
  420. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  421. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  422. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  423. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  424. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  425. package/dist/resources/prompts/reflection.yml +27 -0
  426. package/dist/resources/prompts/system-prompt.yml +82 -0
  427. package/dist/resources/prompts/tool-outputs.yml +30 -0
  428. package/dist/templates/README.md +6 -7
  429. package/dist/templates/sections/command-reference.md +40 -111
  430. package/dist/templates/sections/workflow.md +3 -30
  431. package/dist/utils/emoji-helpers.d.ts +38 -0
  432. package/dist/utils/emoji-helpers.js +42 -0
  433. package/dist/utils/error-handler.d.ts +51 -0
  434. package/dist/utils/error-handler.js +169 -0
  435. package/dist/utils/error-helpers.d.ts +30 -0
  436. package/dist/utils/error-helpers.js +47 -0
  437. package/dist/utils/file-helpers.d.ts +15 -0
  438. package/dist/utils/file-helpers.js +44 -0
  439. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  440. package/dist/utils/oclif-error-helpers.js +46 -0
  441. package/dist/utils/tool-display-formatter.d.ts +53 -0
  442. package/dist/utils/tool-display-formatter.js +257 -0
  443. package/oclif.manifest.json +381 -141
  444. package/package.json +27 -6
  445. package/dist/commands/add.d.ts +0 -49
  446. package/dist/commands/add.js +0 -192
  447. package/dist/commands/complete.d.ts +0 -108
  448. package/dist/commands/complete.js +0 -340
  449. package/dist/commands/retrieve.d.ts +0 -26
  450. package/dist/commands/retrieve.js +0 -101
  451. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  452. package/dist/core/domain/entities/curator-output.js +0 -23
  453. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  454. package/dist/core/domain/entities/delta-batch.js +0 -52
  455. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  456. package/dist/core/domain/entities/delta-operation.js +0 -50
  457. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  458. package/dist/core/domain/entities/executor-output.js +0 -33
  459. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  460. package/dist/core/domain/entities/reflector-output.js +0 -44
  461. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  462. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  463. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  464. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  465. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  466. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  467. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  468. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  469. package/dist/infra/ace/ace-file-utils.js +0 -83
  470. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  471. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  472. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  473. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  474. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  475. package/dist/infra/ace/file-delta-store.js +0 -26
  476. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  477. package/dist/infra/ace/file-executor-output-store.js +0 -26
  478. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  479. package/dist/infra/ace/file-playbook-store.js +0 -107
  480. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  481. package/dist/infra/ace/file-reflection-store.js +0 -55
  482. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  483. package/dist/infra/playbook/file-playbook-service.js +0 -132
  484. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  485. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  486. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  487. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  488. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  489. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  490. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for edit memory tool.
5
+ */
6
+ const EditMemoryInputSchema = z
7
+ .object({
8
+ content: z
9
+ .string()
10
+ .min(1, 'Memory content cannot be empty')
11
+ .max(10_000, 'Memory content cannot exceed 10,000 characters')
12
+ .optional()
13
+ .describe('Updated content for the memory'),
14
+ id: z.string().min(1).describe('Unique identifier of the memory to edit'),
15
+ pinned: z.boolean().optional().describe('Updated pinned status'),
16
+ })
17
+ .strict();
18
+ /**
19
+ * Creates the edit memory tool.
20
+ *
21
+ * Updates an existing memory's content, tags, or pinned status. Metadata is merged
22
+ * while content and tags are replaced if provided. Use this to refine or update
23
+ * context in the scratch pad.
24
+ *
25
+ * @param memoryManager - Memory manager service dependency
26
+ * @returns Configured edit memory tool
27
+ */
28
+ export function createEditMemoryTool(memoryManager) {
29
+ return {
30
+ description: 'Edit an existing memory. Update content, tags, or pinned status. Use this to refine or update previously stored context.',
31
+ async execute(input, _context) {
32
+ const { content, id, pinned } = input;
33
+ // Build update input
34
+ const updateInput = {};
35
+ if (content !== undefined) {
36
+ updateInput.content = content;
37
+ }
38
+ if (pinned !== undefined) {
39
+ updateInput.metadata = { pinned };
40
+ }
41
+ // Update memory
42
+ const updatedMemory = await memoryManager.update(id, updateInput);
43
+ // Return formatted result
44
+ return {
45
+ content: updatedMemory.content,
46
+ id: updatedMemory.id,
47
+ updatedAt: new Date(updatedMemory.updatedAt).toISOString(),
48
+ };
49
+ },
50
+ id: ToolName.EDIT_MEMORY,
51
+ inputSchema: EditMemoryInputSchema,
52
+ };
53
+ }
@@ -0,0 +1,7 @@
1
+ import type { Tool } from '../../../../core/domain/cipher/tools/types.js';
2
+ /**
3
+ * Factory function to create the find knowledge topics tool.
4
+ *
5
+ * @returns Configured Tool instance
6
+ */
7
+ export declare function createFindKnowledgeTopicsTool(): Tool;
@@ -0,0 +1,421 @@
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 { parseRelations } from '../../../../core/domain/knowledge/relation-parser.js';
6
+ /**
7
+ * Input schema for finding knowledge topics.
8
+ * Supports pattern matching, scoping, depth control, and pagination.
9
+ */
10
+ const FindKnowledgeTopicsInputSchema = z.object({
11
+ basePath: z
12
+ .string()
13
+ .default('.brv/context-tree')
14
+ .describe('Base path to context tree structure'),
15
+ // Scoping
16
+ domain: z
17
+ .string()
18
+ .optional()
19
+ .describe('Restrict search to specific domain (exact match)'),
20
+ // Search filters (substring matching)
21
+ domainPattern: z
22
+ .string()
23
+ .optional()
24
+ .describe('Domain name pattern for substring matching'),
25
+ // Relation traversal
26
+ followRelations: z
27
+ .boolean()
28
+ .default(false)
29
+ .describe('Automatically fetch related topics referenced in Relations section'),
30
+ includeContent: z
31
+ .boolean()
32
+ .default(false)
33
+ .describe('Include content preview from context.md files'),
34
+ // Depth control
35
+ includeSubtopics: z
36
+ .boolean()
37
+ .default(false)
38
+ .describe('Include subtopic details in results'),
39
+ // Pagination
40
+ limit: z
41
+ .number()
42
+ .int()
43
+ .positive()
44
+ .optional()
45
+ .describe('Maximum number of results to return'),
46
+ offset: z
47
+ .number()
48
+ .int()
49
+ .nonnegative()
50
+ .default(0)
51
+ .describe('Number of results to skip'),
52
+ relationDepth: z
53
+ .number()
54
+ .int()
55
+ .positive()
56
+ .default(1)
57
+ .describe('How many levels deep to follow relations (default: 1, max: 3)'),
58
+ subtopicPattern: z
59
+ .string()
60
+ .optional()
61
+ .describe('Subtopic name pattern for substring matching'),
62
+ topicPattern: z
63
+ .string()
64
+ .optional()
65
+ .describe('Topic name pattern for substring matching'),
66
+ });
67
+ /**
68
+ * Read content preview from a file, truncating to 500 characters if needed.
69
+ */
70
+ async function readContentPreview(filePath) {
71
+ try {
72
+ const content = await DirectoryManager.readFile(filePath);
73
+ return content.length > 500 ? content.slice(0, 500) + '...' : content;
74
+ }
75
+ catch {
76
+ return '[Content unavailable]';
77
+ }
78
+ }
79
+ /**
80
+ * Read and parse relations from a context.md file.
81
+ */
82
+ async function readRelations(filePath) {
83
+ try {
84
+ const content = await DirectoryManager.readFile(filePath);
85
+ return parseRelations(content);
86
+ }
87
+ catch {
88
+ return [];
89
+ }
90
+ }
91
+ /**
92
+ * Process a single subtopic file and return its entry.
93
+ */
94
+ async function processSubtopicFile(params) {
95
+ const { domainName, includeContent, subtopicFile, subtopicPattern, topicName, topicPath } = params;
96
+ const subtopicRelativePath = subtopicFile.replace(topicPath, '').replace(/^\//, '');
97
+ const subtopicParts = subtopicRelativePath.split('/');
98
+ // Check if this is a subtopic context.md (not the topic's own context.md)
99
+ if (subtopicParts.length <= 1 || subtopicParts.at(-1) !== 'context.md') {
100
+ return null;
101
+ }
102
+ const subtopicName = subtopicParts[0];
103
+ // Apply subtopic pattern filter if specified (case-insensitive)
104
+ if (subtopicPattern && !subtopicName.toLowerCase().includes(subtopicPattern.toLowerCase())) {
105
+ return null;
106
+ }
107
+ const subtopicEntry = {
108
+ name: subtopicName,
109
+ path: `${domainName}/${topicName}/${subtopicName}`,
110
+ };
111
+ // Include subtopic content preview if requested
112
+ if (includeContent) {
113
+ subtopicEntry.contentPreview = await readContentPreview(subtopicFile);
114
+ }
115
+ // Always parse relations to enable relation traversal
116
+ const relations = await readRelations(subtopicFile);
117
+ if (relations.length > 0) {
118
+ subtopicEntry.relations = relations;
119
+ }
120
+ return subtopicEntry;
121
+ }
122
+ /**
123
+ * Collect all subtopics for a given topic.
124
+ */
125
+ async function collectSubtopics(params) {
126
+ const { basePath, domainName, includeContent, subtopicPattern, topicName } = params;
127
+ const topicPath = join(basePath, domainName, topicName);
128
+ const subtopicFiles = await DirectoryManager.listMarkdownFiles(topicPath);
129
+ const subtopics = [];
130
+ for (const subtopicFile of subtopicFiles) {
131
+ // eslint-disable-next-line no-await-in-loop
132
+ const subtopicEntry = await processSubtopicFile({
133
+ domainName,
134
+ includeContent,
135
+ subtopicFile,
136
+ subtopicPattern,
137
+ topicName,
138
+ topicPath,
139
+ });
140
+ if (subtopicEntry) {
141
+ subtopics.push(subtopicEntry);
142
+ }
143
+ }
144
+ return subtopics;
145
+ }
146
+ /**
147
+ * Check if a topic matches the filter criteria.
148
+ */
149
+ function matchesFilters(params) {
150
+ const { domain, domainName, domainPattern, topicName, topicPattern } = params;
151
+ // Normalize all strings to lowercase for case-insensitive matching
152
+ const normalizedDomainName = domainName.toLowerCase();
153
+ const normalizedTopicName = topicName.toLowerCase();
154
+ // Apply domain scoping filter (exact match, case-insensitive)
155
+ if (domain && normalizedDomainName !== domain.toLowerCase())
156
+ return false;
157
+ // Apply pattern filters (substring matching, case-insensitive)
158
+ if (domainPattern && !normalizedDomainName.includes(domainPattern.toLowerCase()))
159
+ return false;
160
+ if (topicPattern && !normalizedTopicName.includes(topicPattern.toLowerCase()))
161
+ return false;
162
+ return true;
163
+ }
164
+ /**
165
+ * Collect relations from subtopics.
166
+ */
167
+ function collectSubtopicRelations(subtopics) {
168
+ const relations = [];
169
+ for (const subtopic of subtopics) {
170
+ if (subtopic.relations) {
171
+ relations.push(...subtopic.relations);
172
+ }
173
+ }
174
+ return relations;
175
+ }
176
+ /**
177
+ * Collect all relation paths from a set of results.
178
+ */
179
+ function collectAllRelations(results) {
180
+ const allRelations = new Set();
181
+ for (const result of results) {
182
+ if (result.relations) {
183
+ for (const rel of result.relations)
184
+ allRelations.add(rel);
185
+ }
186
+ if (result.subtopics) {
187
+ const subtopicRelations = collectSubtopicRelations(result.subtopics);
188
+ for (const rel of subtopicRelations)
189
+ allRelations.add(rel);
190
+ }
191
+ }
192
+ return allRelations;
193
+ }
194
+ /**
195
+ * Fetch related topics by following relation references.
196
+ * Recursively traverses relations up to the specified depth.
197
+ */
198
+ async function fetchRelatedTopics(params) {
199
+ const { basePath, currentDepth, includeContent, maxDepth, relationPaths, seenPaths } = params;
200
+ if (currentDepth > maxDepth || relationPaths.length === 0) {
201
+ return [];
202
+ }
203
+ const relatedTopics = [];
204
+ for (const relationPath of relationPaths) {
205
+ // Avoid circular references
206
+ if (seenPaths.has(relationPath))
207
+ continue;
208
+ seenPaths.add(relationPath);
209
+ const parts = relationPath.split('/');
210
+ if (parts.length < 2 || parts.length > 3)
211
+ continue;
212
+ const [domainName, topicName] = parts;
213
+ const contextPath = join(basePath, ...parts, 'context.md');
214
+ try {
215
+ // eslint-disable-next-line no-await-in-loop
216
+ const fileExists = await DirectoryManager.fileExists(contextPath);
217
+ if (!fileExists)
218
+ continue;
219
+ const entry = {
220
+ domain: domainName,
221
+ path: relationPath,
222
+ topic: topicName,
223
+ };
224
+ // Include content preview if requested
225
+ if (includeContent) {
226
+ // eslint-disable-next-line no-await-in-loop
227
+ entry.contentPreview = await readContentPreview(contextPath);
228
+ }
229
+ // Parse relations from this topic
230
+ // eslint-disable-next-line no-await-in-loop
231
+ const nestedRelations = await readRelations(contextPath);
232
+ if (nestedRelations.length > 0) {
233
+ entry.relations = nestedRelations;
234
+ // Recursively fetch nested relations if depth allows
235
+ if (currentDepth < maxDepth) {
236
+ // eslint-disable-next-line no-await-in-loop
237
+ const nestedTopics = await fetchRelatedTopics({
238
+ basePath,
239
+ currentDepth: currentDepth + 1,
240
+ includeContent,
241
+ maxDepth,
242
+ relationPaths: nestedRelations,
243
+ seenPaths,
244
+ });
245
+ relatedTopics.push(...nestedTopics);
246
+ }
247
+ }
248
+ relatedTopics.push(entry);
249
+ }
250
+ catch {
251
+ // Skip missing or invalid relations
252
+ continue;
253
+ }
254
+ }
255
+ return relatedTopics;
256
+ }
257
+ /**
258
+ * Execute the find knowledge topics operation.
259
+ * Searches the context tree structure and applies filters.
260
+ *
261
+ * @param input - Validated input parameters
262
+ * @param _context - Tool execution context (unused)
263
+ * @returns Structured results with total count and paginated data
264
+ */
265
+ async function executeFindKnowledgeTopics(input, _context) {
266
+ const { basePath, domain, domainPattern, followRelations, includeContent, includeSubtopics, limit, offset, relationDepth, subtopicPattern, topicPattern, } = input;
267
+ const results = [];
268
+ const seenTopics = new Set(); // Track unique topic paths to avoid duplicates
269
+ try {
270
+ // List all markdown files in the context tree
271
+ const mdFiles = await DirectoryManager.listMarkdownFiles(basePath);
272
+ // Process each markdown file
273
+ for (const filePath of mdFiles) {
274
+ // Extract relative path from base
275
+ const relativePath = filePath.replace(basePath, '').replace(/^\//, '');
276
+ const parts = relativePath.split('/');
277
+ // Context tree structure: domain/topic/context.md or domain/topic/subtopic/context.md
278
+ if (parts.length < 2)
279
+ continue; // Need at least domain/file
280
+ const [domainName, topicName, ...rest] = parts;
281
+ const isSubtopic = rest.length > 1; // Has subtopic folder
282
+ // Skip if not a context.md file (only process context files)
283
+ const fileName = parts.at(-1);
284
+ if (fileName !== 'context.md')
285
+ continue;
286
+ // Handle subtopic pattern filtering (case-insensitive)
287
+ if (isSubtopic) {
288
+ const subtopicName = rest[0];
289
+ if (subtopicPattern && !subtopicName.toLowerCase().includes(subtopicPattern.toLowerCase()))
290
+ continue;
291
+ // Skip subtopics for now - we'll collect them when processing their parent topic
292
+ continue;
293
+ }
294
+ // Apply filters
295
+ if (!matchesFilters({
296
+ domain,
297
+ domainName,
298
+ domainPattern,
299
+ topicName,
300
+ topicPattern,
301
+ })) {
302
+ continue;
303
+ }
304
+ // Create unique key for this topic to avoid duplicates
305
+ const topicKey = `${domainName}/${topicName}`;
306
+ if (seenTopics.has(topicKey))
307
+ continue;
308
+ seenTopics.add(topicKey);
309
+ // Build result entry for this topic
310
+ const entry = {
311
+ domain: domainName,
312
+ path: `${domainName}/${topicName}`,
313
+ topic: topicName,
314
+ };
315
+ // Include content preview if requested
316
+ if (includeContent) {
317
+ // eslint-disable-next-line no-await-in-loop
318
+ entry.contentPreview = await readContentPreview(filePath);
319
+ }
320
+ // Always parse relations to enable relation traversal
321
+ // eslint-disable-next-line no-await-in-loop
322
+ const topicRelations = await readRelations(filePath);
323
+ if (topicRelations.length > 0) {
324
+ entry.relations = topicRelations;
325
+ }
326
+ // Include subtopics if requested
327
+ if (includeSubtopics) {
328
+ // eslint-disable-next-line no-await-in-loop
329
+ const subtopics = await collectSubtopics({
330
+ basePath,
331
+ domainName,
332
+ includeContent,
333
+ subtopicPattern,
334
+ topicName,
335
+ });
336
+ if (subtopics.length > 0) {
337
+ entry.subtopics = subtopics;
338
+ }
339
+ }
340
+ results.push(entry);
341
+ }
342
+ // Apply pagination
343
+ const total = results.length;
344
+ const effectiveOffset = offset ?? 0;
345
+ const paginatedResults = limit
346
+ ? results.slice(effectiveOffset, effectiveOffset + limit)
347
+ : results.slice(effectiveOffset);
348
+ // Follow relations if requested
349
+ if (followRelations && paginatedResults.length > 0) {
350
+ const maxDepth = Math.min(relationDepth ?? 1, 3); // Cap at 3 to prevent excessive traversal
351
+ const allRelations = collectAllRelations(paginatedResults);
352
+ // Fetch related topics recursively
353
+ if (allRelations.size > 0) {
354
+ const relatedTopics = await fetchRelatedTopics({
355
+ basePath,
356
+ currentDepth: 1,
357
+ includeContent,
358
+ maxDepth,
359
+ relationPaths: [...allRelations],
360
+ seenPaths: seenTopics, // Reuse seenTopics to avoid duplicates
361
+ });
362
+ // Append related topics to results
363
+ paginatedResults.push(...relatedTopics);
364
+ }
365
+ }
366
+ return {
367
+ results: paginatedResults,
368
+ total,
369
+ };
370
+ }
371
+ catch {
372
+ // If base path doesn't exist or other errors, return empty results
373
+ return {
374
+ results: [],
375
+ total: 0,
376
+ };
377
+ }
378
+ }
379
+ /**
380
+ * Factory function to create the find knowledge topics tool.
381
+ *
382
+ * @returns Configured Tool instance
383
+ */
384
+ export function createFindKnowledgeTopicsTool() {
385
+ return {
386
+ description: `Search and filter knowledge topics in the context tree structure with relation support.
387
+
388
+ This tool helps discover what knowledge has been stored and navigate the domain/topic hierarchy. It works similarly to find_symbol but for knowledge organization, with the ability to follow relations between topics.
389
+
390
+ **Use cases:**
391
+ - Discover what knowledge topics exist in a domain
392
+ - Find topics matching specific patterns
393
+ - Navigate the knowledge hierarchy via relations
394
+ - Retrieve context for specific areas
395
+ - Check what has been documented
396
+ - Follow related topics for comprehensive context
397
+
398
+ **Search capabilities:**
399
+ - Pattern matching on domain, topic, and subtopic names (substring matching)
400
+ - Scope searches to specific domains (exact match)
401
+ - Optional subtopic inclusion (depth control)
402
+ - Optional content preview (500 character limit)
403
+ - Pagination for large result sets
404
+ - Relation traversal (automatically fetch related topics up to 3 levels deep)
405
+
406
+ **Examples:**
407
+ - Find all topics in "testing" domain: {domain: "testing"}
408
+ - Find topics about "eslint": {topicPattern: "eslint"}
409
+ - Find subtopics with "config": {subtopicPattern: "config", includeSubtopics: true}
410
+ - Get content previews: {domain: "architecture", includeContent: true}
411
+ - Follow relations: {topicPattern: "auth", followRelations: true, relationDepth: 2}
412
+ - Paginate results: {limit: 10, offset: 0}
413
+
414
+ **Returns:**
415
+ - total: Total number of matching topics (before relation traversal)
416
+ - results: Array of topic entries with domain, topic name, path, optional relations, subtopics, and content`,
417
+ execute: executeFindKnowledgeTopics,
418
+ id: ToolName.FIND_KNOWLEDGE_TOPICS,
419
+ inputSchema: FindKnowledgeTopicsInputSchema,
420
+ };
421
+ }
@@ -0,0 +1,18 @@
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 glob files tool.
5
+ *
6
+ * Finds files matching a glob pattern.
7
+ * Supports standard glob syntax with ** for recursive matching.
8
+ *
9
+ * Features:
10
+ * - Case sensitivity control
11
+ * - Gitignore filtering (respects .gitignore rules by default)
12
+ * - Smart sorting: recently modified files (within 24h) appear first
13
+ * - Handles file names containing glob special characters
14
+ *
15
+ * @param fileSystemService - File system service dependency
16
+ * @returns Configured glob files tool
17
+ */
18
+ export declare function createGlobFilesTool(fileSystemService: IFileSystem): Tool;
@@ -0,0 +1,70 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for glob files tool.
5
+ */
6
+ const GlobFilesInputSchema = z
7
+ .object({
8
+ caseSensitive: z
9
+ .boolean()
10
+ .optional()
11
+ .default(true)
12
+ .describe('Case-sensitive pattern matching (default: true)'),
13
+ maxResults: z
14
+ .number()
15
+ .int()
16
+ .positive()
17
+ .optional()
18
+ .default(1000)
19
+ .describe('Maximum number of results to return (default: 1000)'),
20
+ path: z.string().optional().describe('Base directory to search from (defaults to working directory)'),
21
+ pattern: z.string().describe('Glob pattern to match files (e.g., "**/*.ts", "src/**/*.js")')
22
+ })
23
+ .strict();
24
+ /**
25
+ * Creates the glob files tool.
26
+ *
27
+ * Finds files matching a glob pattern.
28
+ * Supports standard glob syntax with ** for recursive matching.
29
+ *
30
+ * Features:
31
+ * - Case sensitivity control
32
+ * - Gitignore filtering (respects .gitignore rules by default)
33
+ * - Smart sorting: recently modified files (within 24h) appear first
34
+ * - Handles file names containing glob special characters
35
+ *
36
+ * @param fileSystemService - File system service dependency
37
+ * @returns Configured glob files tool
38
+ */
39
+ export function createGlobFilesTool(fileSystemService) {
40
+ return {
41
+ description: 'Find files matching a glob pattern. Supports ** for recursive matching (e.g., "**/*.ts" finds all TypeScript files)',
42
+ async execute(input, _context) {
43
+ const { caseSensitive, maxResults, path, pattern } = input;
44
+ // Call file system service with new options
45
+ const result = await fileSystemService.globFiles(pattern, {
46
+ caseSensitive,
47
+ cwd: path,
48
+ includeMetadata: true,
49
+ maxResults,
50
+ respectGitignore: true,
51
+ });
52
+ // Format file metadata
53
+ const files = result.files.map((file) => ({
54
+ modified: file.modified.toISOString(),
55
+ path: file.path,
56
+ size: file.size,
57
+ }));
58
+ // Return formatted result with message for LLM context
59
+ return {
60
+ files,
61
+ ignoredCount: result.ignoredCount,
62
+ message: result.message,
63
+ totalFound: result.totalFound,
64
+ truncated: result.truncated,
65
+ };
66
+ },
67
+ id: ToolName.GLOB_FILES,
68
+ inputSchema: GlobFilesInputSchema,
69
+ };
70
+ }
@@ -0,0 +1,12 @@
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 grep content tool.
5
+ *
6
+ * Searches file contents for a regex pattern.
7
+ * Can filter files with glob patterns and include context lines.
8
+ *
9
+ * @param fileSystemService - File system service dependency
10
+ * @returns Configured grep content tool
11
+ */
12
+ export declare function createGrepContentTool(fileSystemService: IFileSystem): Tool;
@@ -0,0 +1,77 @@
1
+ import { z } from 'zod';
2
+ import { ToolName } from '../../../../core/domain/cipher/tools/constants.js';
3
+ /**
4
+ * Input schema for grep content tool.
5
+ */
6
+ const GrepContentInputSchema = z
7
+ .object({
8
+ caseInsensitive: z
9
+ .boolean()
10
+ .optional()
11
+ .default(false)
12
+ .describe('Perform case-insensitive search (default: false)'),
13
+ contextLines: z
14
+ .number()
15
+ .int()
16
+ .min(0)
17
+ .optional()
18
+ .default(0)
19
+ .describe('Number of context lines to include before and after each match (default: 0)'),
20
+ glob: z.string().optional().describe('Glob pattern to filter files (e.g., "*.ts", "**/*.js")'),
21
+ maxResults: z
22
+ .number()
23
+ .int()
24
+ .positive()
25
+ .optional()
26
+ .default(100)
27
+ .describe('Maximum number of results to return (default: 100)'),
28
+ path: z.string().optional().describe('Directory to search in (defaults to working directory)'),
29
+ pattern: z.string().describe('Regular expression pattern to search for'),
30
+ })
31
+ .strict();
32
+ /**
33
+ * Creates the grep content tool.
34
+ *
35
+ * Searches file contents for a regex pattern.
36
+ * Can filter files with glob patterns and include context lines.
37
+ *
38
+ * @param fileSystemService - File system service dependency
39
+ * @returns Configured grep content tool
40
+ */
41
+ export function createGrepContentTool(fileSystemService) {
42
+ return {
43
+ description: 'Search file contents for a regex pattern. Can filter files with glob patterns and include context lines around matches.',
44
+ async execute(input, _context) {
45
+ const { caseInsensitive, contextLines, glob, maxResults, path, pattern } = input;
46
+ // Call file system service
47
+ const result = await fileSystemService.searchContent(pattern, {
48
+ caseInsensitive,
49
+ contextLines,
50
+ cwd: path,
51
+ globPattern: glob,
52
+ maxResults,
53
+ });
54
+ // Format matches
55
+ const matches = result.matches.map((match) => ({
56
+ context: match.context
57
+ ? {
58
+ after: match.context.after,
59
+ before: match.context.before,
60
+ }
61
+ : undefined,
62
+ file: match.file,
63
+ line: match.line,
64
+ lineNumber: match.lineNumber,
65
+ }));
66
+ // Return formatted result
67
+ return {
68
+ filesSearched: result.filesSearched,
69
+ matches,
70
+ totalMatches: result.totalMatches,
71
+ truncated: result.truncated,
72
+ };
73
+ },
74
+ id: ToolName.GREP_CONTENT,
75
+ inputSchema: GrepContentInputSchema,
76
+ };
77
+ }
@@ -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 kill_process tool.
5
+ *
6
+ * Terminates a background process started by bash_exec.
7
+ * Uses graceful shutdown (SIGTERM) with escalation to SIGKILL after 5 seconds.
8
+ *
9
+ * @param processService - Process service for killing processes
10
+ * @returns kill_process tool instance
11
+ */
12
+ export declare function createKillProcessTool(processService: IProcessService): Tool;