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,209 @@
1
+ import { ToolError, ToolErrorType, ToolErrorUtils } from '../../../core/domain/cipher/tools/tool-error.js';
2
+ /**
3
+ * Tool Manager for CipherAgent
4
+ *
5
+ * Provides a clean interface for tool discovery and execution.
6
+ * Wraps ToolProvider with caching for improved performance.
7
+ *
8
+ * Features:
9
+ * - Optional scheduler integration for policy-based execution
10
+ * - Tool caching for performance
11
+ * - Structured error handling with classification
12
+ *
13
+ * When a scheduler is provided, tool execution flows through:
14
+ * 1. Policy check (ALLOW/DENY)
15
+ * 2. Execution (if allowed)
16
+ *
17
+ * Without a scheduler, tools execute directly via the provider.
18
+ */
19
+ export class ToolManager {
20
+ /**
21
+ * Read-only tools allowed for query operations
22
+ */
23
+ static QUERY_TOOL_NAMES = [
24
+ 'find_knowledge_topics',
25
+ 'read_file',
26
+ 'grep_content',
27
+ 'glob_files',
28
+ ];
29
+ cacheValid = false;
30
+ scheduler;
31
+ toolProvider;
32
+ toolsCache = {};
33
+ /**
34
+ * Creates a new tool manager
35
+ *
36
+ * @param toolProvider - Tool provider instance
37
+ * @param scheduler - Optional tool scheduler for policy-based execution
38
+ */
39
+ constructor(toolProvider, scheduler) {
40
+ this.toolProvider = toolProvider;
41
+ this.scheduler = scheduler;
42
+ }
43
+ /**
44
+ * Execute a tool by name with structured error handling.
45
+ *
46
+ * Returns a structured result that includes success status, content,
47
+ * error classification, and metadata. This enables better error handling
48
+ * and provides actionable feedback to the LLM.
49
+ *
50
+ * When a scheduler is configured, execution flows through:
51
+ * 1. Policy check (ALLOW/DENY)
52
+ * 2. Execution (if allowed)
53
+ *
54
+ * Without a scheduler, tools execute directly via the provider.
55
+ *
56
+ * @param toolName - Name of the tool to execute
57
+ * @param args - Tool arguments (validated by provider)
58
+ * @param sessionId - Optional session ID for context
59
+ * @returns Structured tool execution result
60
+ */
61
+ async executeTool(toolName, args, sessionId) {
62
+ const startTime = Date.now();
63
+ try {
64
+ // Check if tool exists before execution
65
+ if (!this.hasTool(toolName)) {
66
+ throw new ToolError(`Tool '${toolName}' not found`, ToolErrorType.TOOL_NOT_FOUND, toolName, { context: { availableTools: this.getToolNames() } });
67
+ }
68
+ // Execute tool via scheduler (with policy check) or directly via provider
69
+ const result = this.scheduler
70
+ ? await this.scheduler.execute(toolName, args, { sessionId: sessionId ?? 'default' })
71
+ : await this.toolProvider.executeTool(toolName, args, sessionId);
72
+ const durationMs = Date.now() - startTime;
73
+ // Return success result
74
+ return ToolErrorUtils.createSuccess(result, { durationMs });
75
+ }
76
+ catch (error) {
77
+ const durationMs = Date.now() - startTime;
78
+ // Classify error
79
+ const toolError = ToolErrorUtils.classify(error, toolName);
80
+ // Return error result
81
+ return ToolErrorUtils.createErrorResult(toolError, { durationMs });
82
+ }
83
+ }
84
+ /**
85
+ * Get all available tools in JSON Schema format.
86
+ * Results are cached for performance.
87
+ *
88
+ * @returns Tool set with JSON Schema definitions for LLM
89
+ */
90
+ getAllTools() {
91
+ // Return cached tools if valid
92
+ if (this.cacheValid) {
93
+ return this.toolsCache;
94
+ }
95
+ // Rebuild cache
96
+ this.toolsCache = this.toolProvider.getAllTools();
97
+ this.cacheValid = true;
98
+ return this.toolsCache;
99
+ }
100
+ /**
101
+ * Get all available tool markers from registered tools.
102
+ *
103
+ * @returns Set of tool marker strings
104
+ */
105
+ getAvailableMarkers() {
106
+ return this.toolProvider.getAvailableMarkers();
107
+ }
108
+ /**
109
+ * Get the count of registered tools.
110
+ *
111
+ * @returns Number of available tools
112
+ */
113
+ getToolCount() {
114
+ return this.toolProvider.getToolCount();
115
+ }
116
+ /**
117
+ * Get names of all registered tools.
118
+ *
119
+ * @returns Array of tool names
120
+ */
121
+ getToolNames() {
122
+ return this.toolProvider.getToolNames();
123
+ }
124
+ /**
125
+ * Get filtered tool names based on command type.
126
+ * For 'query' command, returns only read-only discovery tools.
127
+ * For other commands, returns all tools.
128
+ *
129
+ * @param commandType - The command type ('add', 'query', etc.)
130
+ * @returns Array of filtered tool names
131
+ */
132
+ getToolNamesForCommand(commandType) {
133
+ if (commandType === 'query') {
134
+ // For query: only allow read-only tools
135
+ return [...ToolManager.QUERY_TOOL_NAMES].filter((name) => this.hasTool(name));
136
+ }
137
+ // For all other commands: return all tools
138
+ return this.getToolNames();
139
+ }
140
+ /**
141
+ * Get tool names that have a specific marker.
142
+ *
143
+ * @param marker - The tool marker to filter by
144
+ * @returns Array of tool names with the specified marker
145
+ */
146
+ getToolsByMarker(marker) {
147
+ return this.toolProvider.getToolsByMarker(marker);
148
+ }
149
+ /**
150
+ * Get filtered tools based on command type.
151
+ * For 'query' command, returns only read-only discovery tools.
152
+ * For other commands, returns all tools.
153
+ *
154
+ * @param commandType - The command type ('add', 'query', etc.)
155
+ * @returns Filtered tool set with JSON Schema definitions
156
+ */
157
+ getToolsForCommand(commandType) {
158
+ const allTools = this.getAllTools();
159
+ if (commandType === 'query') {
160
+ // For query: only allow read-only tools
161
+ const filteredTools = {};
162
+ for (const toolName of ToolManager.QUERY_TOOL_NAMES) {
163
+ if (allTools[toolName]) {
164
+ filteredTools[toolName] = allTools[toolName];
165
+ }
166
+ }
167
+ return filteredTools;
168
+ }
169
+ // For all other commands: return all tools
170
+ return allTools;
171
+ }
172
+ /**
173
+ * Check if a tool exists.
174
+ *
175
+ * @param toolName - Name of the tool
176
+ * @returns True if the tool exists
177
+ */
178
+ hasTool(toolName) {
179
+ return this.toolProvider.hasTool(toolName);
180
+ }
181
+ /**
182
+ * Initialize the tool manager.
183
+ * Registers all available tools and invalidates cache.
184
+ */
185
+ async initialize() {
186
+ await this.toolProvider.initialize();
187
+ this.invalidateCache();
188
+ }
189
+ /**
190
+ * Refresh tool discovery.
191
+ * Invalidates the tool cache, forcing a rebuild on next getAllTools() call.
192
+ *
193
+ * Useful when:
194
+ * - Adding/removing tools dynamically (future)
195
+ * - MCP servers connect/disconnect (future)
196
+ * - Manual cache clearing needed
197
+ */
198
+ refresh() {
199
+ this.invalidateCache();
200
+ }
201
+ /**
202
+ * Invalidates the tool cache.
203
+ * Next call to getAllTools() will rebuild the cache.
204
+ */
205
+ invalidateCache() {
206
+ this.cacheValid = false;
207
+ this.toolsCache = {};
208
+ }
209
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Tool markers for semantic classification of tools.
3
+ *
4
+ * Tool markers enable:
5
+ * - Smart filtering based on operational mode (planning, execution, etc.)
6
+ * - Conditional prompt sections based on available capabilities
7
+ * - Context tree building workflows
8
+ */
9
+ /**
10
+ * Enum of available tool markers
11
+ */
12
+ export declare enum ToolMarker {
13
+ /**
14
+ * Tools for building context trees and organizing conversation/project information
15
+ * Examples: segment_conversation, search_history
16
+ */
17
+ ContextBuilding = "ToolMarkerContextBuilding",
18
+ /**
19
+ * Core tools that are always needed for basic operation
20
+ * Examples: read_file, glob_files, grep_content
21
+ */
22
+ Core = "ToolMarkerCore",
23
+ /**
24
+ * Tools for discovering and exploring codebase structure
25
+ * Examples: glob_files, grep_content, read_file
26
+ */
27
+ Discovery = "ToolMarkerDiscovery",
28
+ /**
29
+ * Tools that execute external commands/processes
30
+ * Examples: bash_exec, bash_output, kill_process
31
+ */
32
+ Execution = "ToolMarkerExecution",
33
+ /**
34
+ * Tools that modify files
35
+ * Examples: write_file, edit_file
36
+ */
37
+ Modification = "ToolMarkerModification",
38
+ /**
39
+ * Optional tools that are not needed for basic operations
40
+ * Examples: bash_output, kill_process, segment_conversation
41
+ */
42
+ Optional = "ToolMarkerOptional",
43
+ /**
44
+ * Tools for planning and task management
45
+ * Examples: write_todos
46
+ */
47
+ Planning = "ToolMarkerPlanning"
48
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Tool markers for semantic classification of tools.
3
+ *
4
+ * Tool markers enable:
5
+ * - Smart filtering based on operational mode (planning, execution, etc.)
6
+ * - Conditional prompt sections based on available capabilities
7
+ * - Context tree building workflows
8
+ */
9
+ /**
10
+ * Enum of available tool markers
11
+ */
12
+ export var ToolMarker;
13
+ (function (ToolMarker) {
14
+ /**
15
+ * Tools for building context trees and organizing conversation/project information
16
+ * Examples: segment_conversation, search_history
17
+ */
18
+ ToolMarker["ContextBuilding"] = "ToolMarkerContextBuilding";
19
+ /**
20
+ * Core tools that are always needed for basic operation
21
+ * Examples: read_file, glob_files, grep_content
22
+ */
23
+ ToolMarker["Core"] = "ToolMarkerCore";
24
+ /**
25
+ * Tools for discovering and exploring codebase structure
26
+ * Examples: glob_files, grep_content, read_file
27
+ */
28
+ ToolMarker["Discovery"] = "ToolMarkerDiscovery";
29
+ /**
30
+ * Tools that execute external commands/processes
31
+ * Examples: bash_exec, bash_output, kill_process
32
+ */
33
+ ToolMarker["Execution"] = "ToolMarkerExecution";
34
+ /**
35
+ * Tools that modify files
36
+ * Examples: write_file, edit_file
37
+ */
38
+ ToolMarker["Modification"] = "ToolMarkerModification";
39
+ /**
40
+ * Optional tools that are not needed for basic operations
41
+ * Examples: bash_output, kill_process, segment_conversation
42
+ */
43
+ ToolMarker["Optional"] = "ToolMarkerOptional";
44
+ /**
45
+ * Tools for planning and task management
46
+ * Examples: write_todos
47
+ */
48
+ ToolMarker["Planning"] = "ToolMarkerPlanning";
49
+ })(ToolMarker || (ToolMarker = {}));
@@ -0,0 +1,77 @@
1
+ import type { ToolSet } from '../../../core/domain/cipher/tools/types.js';
2
+ import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
3
+ import type { SimplePromptFactory } from '../system-prompt/simple-prompt-factory.js';
4
+ import type { ToolServices } from './tool-registry.js';
5
+ import { ToolMarker } from './tool-markers.js';
6
+ /**
7
+ * Tool provider implementation.
8
+ * Manages tool lifecycle: registration, validation, and execution.
9
+ *
10
+ * Uses builder/invocation pattern for two-phase tool execution:
11
+ * 1. Validation phase (via builder)
12
+ * 2. Execution phase (via invocation)
13
+ */
14
+ export declare class ToolProvider implements IToolProvider {
15
+ private initialized;
16
+ private invocationBuilder?;
17
+ private readonly promptFactory?;
18
+ private readonly services;
19
+ private readonly toolMarkers;
20
+ private readonly tools;
21
+ /**
22
+ * Creates a new tool provider
23
+ * @param services - Services available to tools
24
+ * @param promptFactory - Optional prompt factory for tool output guidance
25
+ */
26
+ constructor(services: ToolServices, promptFactory?: SimplePromptFactory);
27
+ /**
28
+ * Execute a tool with the given arguments using builder/invocation pattern.
29
+ *
30
+ * Two-phase execution:
31
+ * 1. Build Phase: Validate and create invocation
32
+ * 2. Execute Phase: Run the validated invocation
33
+ *
34
+ * @param toolName - Name of the tool to execute
35
+ * @param args - Tool arguments
36
+ * @param sessionId - Optional session ID for context
37
+ * @returns Tool execution result
38
+ * @throws ToolNotFoundError if tool doesn't exist
39
+ * @throws ToolValidationError if input validation fails
40
+ * @throws ToolExecutionError if execution fails
41
+ */
42
+ executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<unknown>;
43
+ /**
44
+ * Get all registered tools in JSON Schema format.
45
+ */
46
+ getAllTools(): ToolSet;
47
+ /**
48
+ * Get all available tool markers from registered tools.
49
+ */
50
+ getAvailableMarkers(): Set<string>;
51
+ /**
52
+ * Get the count of registered tools.
53
+ */
54
+ getToolCount(): number;
55
+ /**
56
+ * Get names of all registered tools.
57
+ */
58
+ getToolNames(): string[];
59
+ /**
60
+ * Get tool names that have a specific marker.
61
+ */
62
+ getToolsByMarker(marker: ToolMarker): string[];
63
+ /**
64
+ * Check if a tool exists.
65
+ */
66
+ hasTool(toolName: string): boolean;
67
+ /**
68
+ * Initialize the tool provider.
69
+ * Registers all tools whose required services are available.
70
+ */
71
+ initialize(): Promise<void>;
72
+ /**
73
+ * Ensures the provider is initialized.
74
+ * @throws ToolProviderNotInitializedError if not initialized
75
+ */
76
+ private ensureInitialized;
77
+ }
@@ -0,0 +1,196 @@
1
+ import { ZodError } from 'zod';
2
+ import { ToolExecutionError, ToolNotFoundError, ToolProviderNotInitializedError, ToolValidationError, } from '../../../core/domain/cipher/errors/tool-error.js';
3
+ import { ToolInvocationBuilder } from './tool-invocation.js';
4
+ import { TOOL_REGISTRY } from './tool-registry.js';
5
+ import { convertZodToJsonSchema } from './utils/schema-converter.js';
6
+ /**
7
+ * Tool provider implementation.
8
+ * Manages tool lifecycle: registration, validation, and execution.
9
+ *
10
+ * Uses builder/invocation pattern for two-phase tool execution:
11
+ * 1. Validation phase (via builder)
12
+ * 2. Execution phase (via invocation)
13
+ */
14
+ export class ToolProvider {
15
+ initialized = false;
16
+ invocationBuilder;
17
+ promptFactory;
18
+ services;
19
+ toolMarkers = new Set();
20
+ tools = new Map();
21
+ /**
22
+ * Creates a new tool provider
23
+ * @param services - Services available to tools
24
+ * @param promptFactory - Optional prompt factory for tool output guidance
25
+ */
26
+ constructor(services, promptFactory) {
27
+ this.services = services;
28
+ this.promptFactory = promptFactory;
29
+ }
30
+ /**
31
+ * Execute a tool with the given arguments using builder/invocation pattern.
32
+ *
33
+ * Two-phase execution:
34
+ * 1. Build Phase: Validate and create invocation
35
+ * 2. Execute Phase: Run the validated invocation
36
+ *
37
+ * @param toolName - Name of the tool to execute
38
+ * @param args - Tool arguments
39
+ * @param sessionId - Optional session ID for context
40
+ * @returns Tool execution result
41
+ * @throws ToolNotFoundError if tool doesn't exist
42
+ * @throws ToolValidationError if input validation fails
43
+ * @throws ToolExecutionError if execution fails
44
+ */
45
+ async executeTool(toolName, args, sessionId) {
46
+ this.ensureInitialized();
47
+ if (!this.invocationBuilder) {
48
+ throw new ToolProviderNotInitializedError();
49
+ }
50
+ try {
51
+ // Phase 1: Build and validate invocation
52
+ const context = { sessionId };
53
+ const invocation = this.invocationBuilder.build(`tool_call_${Date.now()}`, // Generate unique ID
54
+ toolName, args, context);
55
+ // Phase 2: Execute validated invocation
56
+ const executionResult = await invocation.execute();
57
+ // Handle execution result
58
+ if (!executionResult.result) {
59
+ // Execution failed
60
+ if (executionResult.error) {
61
+ throw new ToolExecutionError(toolName, executionResult.error.message, sessionId);
62
+ }
63
+ throw new ToolExecutionError(toolName, 'Unknown execution error', sessionId);
64
+ }
65
+ // Check if this tool has output guidance configured
66
+ const registryEntry = TOOL_REGISTRY[toolName];
67
+ if (registryEntry?.outputGuidance && this.promptFactory) {
68
+ const guidance = this.promptFactory.getToolOutputGuidance(registryEntry.outputGuidance);
69
+ if (guidance) {
70
+ // Return structured result with guidance
71
+ return {
72
+ guidance,
73
+ result: executionResult.result,
74
+ };
75
+ }
76
+ }
77
+ // Return result without guidance
78
+ return executionResult.result;
79
+ }
80
+ catch (error) {
81
+ // Handle validation errors from builder
82
+ if (error instanceof ZodError) {
83
+ const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`).join('; ');
84
+ throw new ToolValidationError(toolName, errorMessages);
85
+ }
86
+ // Re-throw known errors
87
+ if (error instanceof ToolNotFoundError ||
88
+ error instanceof ToolValidationError ||
89
+ error instanceof ToolExecutionError) {
90
+ throw error;
91
+ }
92
+ // Handle other execution errors
93
+ if (error instanceof Error) {
94
+ throw new ToolExecutionError(toolName, error.message, sessionId);
95
+ }
96
+ // Unknown error type
97
+ throw new ToolExecutionError(toolName, String(error), sessionId);
98
+ }
99
+ }
100
+ /**
101
+ * Get all registered tools in JSON Schema format.
102
+ */
103
+ getAllTools() {
104
+ this.ensureInitialized();
105
+ const toolSet = {};
106
+ for (const [toolName, tool] of this.tools.entries()) {
107
+ toolSet[toolName] = {
108
+ description: tool.description,
109
+ name: toolName,
110
+ parameters: convertZodToJsonSchema(tool.inputSchema),
111
+ };
112
+ }
113
+ return toolSet;
114
+ }
115
+ /**
116
+ * Get all available tool markers from registered tools.
117
+ */
118
+ getAvailableMarkers() {
119
+ this.ensureInitialized();
120
+ return new Set(this.toolMarkers);
121
+ }
122
+ /**
123
+ * Get the count of registered tools.
124
+ */
125
+ getToolCount() {
126
+ this.ensureInitialized();
127
+ return this.tools.size;
128
+ }
129
+ /**
130
+ * Get names of all registered tools.
131
+ */
132
+ getToolNames() {
133
+ this.ensureInitialized();
134
+ return [...this.tools.keys()];
135
+ }
136
+ /**
137
+ * Get tool names that have a specific marker.
138
+ */
139
+ getToolsByMarker(marker) {
140
+ this.ensureInitialized();
141
+ const toolNames = [];
142
+ for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
143
+ if (entry.markers.includes(marker) && this.tools.has(toolName)) {
144
+ toolNames.push(toolName);
145
+ }
146
+ }
147
+ return toolNames;
148
+ }
149
+ /**
150
+ * Check if a tool exists.
151
+ */
152
+ hasTool(toolName) {
153
+ this.ensureInitialized();
154
+ return this.tools.has(toolName);
155
+ }
156
+ /**
157
+ * Initialize the tool provider.
158
+ * Registers all tools whose required services are available.
159
+ */
160
+ async initialize() {
161
+ if (this.initialized) {
162
+ return;
163
+ }
164
+ // Register tools from registry
165
+ for (const [toolName, entry] of Object.entries(TOOL_REGISTRY)) {
166
+ // Check if all required services are available
167
+ const allServicesAvailable = entry.requiredServices.every((serviceName) => this.services[serviceName] !== undefined);
168
+ if (allServicesAvailable) {
169
+ try {
170
+ const tool = entry.factory(this.services);
171
+ this.tools.set(toolName, tool);
172
+ // Collect markers from registered tools
173
+ for (const marker of entry.markers) {
174
+ this.toolMarkers.add(marker);
175
+ }
176
+ }
177
+ catch (error) {
178
+ // Log error but don't fail initialization
179
+ console.error(`Failed to register tool ${toolName}:`, error);
180
+ }
181
+ }
182
+ }
183
+ // Initialize invocation builder with registered tools
184
+ this.invocationBuilder = new ToolInvocationBuilder(this.tools);
185
+ this.initialized = true;
186
+ }
187
+ /**
188
+ * Ensures the provider is initialized.
189
+ * @throws ToolProviderNotInitializedError if not initialized
190
+ */
191
+ ensureInitialized() {
192
+ if (!this.initialized) {
193
+ throw new ToolProviderNotInitializedError();
194
+ }
195
+ }
196
+ }
@@ -0,0 +1,52 @@
1
+ import type { KnownTool } from '../../../core/domain/cipher/tools/constants.js';
2
+ import type { Tool } from '../../../core/domain/cipher/tools/types.js';
3
+ import type { IFileSystem } from '../../../core/interfaces/cipher/i-file-system.js';
4
+ import type { IProcessService } from '../../../core/interfaces/cipher/i-process-service.js';
5
+ import type { MemoryManager } from '../memory/memory-manager.js';
6
+ import { ToolMarker } from './tool-markers.js';
7
+ /**
8
+ * Service dependencies available to tools.
9
+ * Tools declare which services they need via requiredServices.
10
+ */
11
+ export interface ToolServices {
12
+ /** File system service for file operations */
13
+ fileSystemService?: IFileSystem;
14
+ /** Memory manager for agent memory operations */
15
+ memoryManager?: MemoryManager;
16
+ /** Process service for command execution */
17
+ processService?: IProcessService;
18
+ }
19
+ /**
20
+ * Tool factory function type.
21
+ * Creates a tool instance given the required services.
22
+ */
23
+ export type ToolFactory = (services: ToolServices) => Tool;
24
+ /**
25
+ * Registry entry for a tool.
26
+ * Defines the factory, required services, semantic markers, and optional output guidance for each tool.
27
+ */
28
+ export interface ToolRegistryEntry {
29
+ /** Factory function to create the tool */
30
+ factory: ToolFactory;
31
+ /** Semantic markers for this tool (enables smart filtering and conditional prompts) */
32
+ markers: readonly ToolMarker[];
33
+ /**
34
+ * Optional output guidance prompt key.
35
+ * If specified, the ToolProvider will append guidance from tool-outputs.yml
36
+ * after tool execution to help the LLM understand next steps.
37
+ * Example: 'write_memory' will load the 'write_memory_output' prompt.
38
+ */
39
+ outputGuidance?: string;
40
+ /** Services required by this tool */
41
+ requiredServices: readonly (keyof ToolServices)[];
42
+ }
43
+ /**
44
+ * Central registry of all tools.
45
+ * Maps tool names to their factory functions and required services.
46
+ *
47
+ * To add a new tool:
48
+ * 1. Add tool name to ToolName constants
49
+ * 2. Create tool implementation file
50
+ * 3. Add entry to this registry
51
+ */
52
+ export declare const TOOL_REGISTRY: Record<KnownTool, ToolRegistryEntry>;