byterover-cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/README.md +56 -56
  2. package/bin/dev.js +1 -1
  3. package/dist/commands/cipher-agent/run.d.ts +111 -0
  4. package/dist/commands/cipher-agent/run.js +493 -0
  5. package/dist/commands/cipher-agent/set-prompt.d.ts +14 -0
  6. package/dist/commands/cipher-agent/set-prompt.js +53 -0
  7. package/dist/commands/cipher-agent/show-prompt.d.ts +11 -0
  8. package/dist/commands/cipher-agent/show-prompt.js +48 -0
  9. package/dist/commands/clear.d.ts +6 -0
  10. package/dist/commands/clear.js +36 -15
  11. package/dist/commands/curate.d.ts +74 -0
  12. package/dist/commands/curate.js +396 -0
  13. package/dist/commands/foo.d.ts +12 -0
  14. package/dist/commands/foo.js +61 -0
  15. package/dist/commands/gen-rules.d.ts +3 -0
  16. package/dist/commands/gen-rules.js +39 -20
  17. package/dist/commands/init.d.ts +53 -2
  18. package/dist/commands/init.js +279 -66
  19. package/dist/commands/login.js +9 -4
  20. package/dist/commands/logout.d.ts +16 -0
  21. package/dist/commands/logout.js +61 -0
  22. package/dist/commands/pull.d.ts +33 -0
  23. package/dist/commands/pull.js +115 -0
  24. package/dist/commands/push.d.ts +13 -13
  25. package/dist/commands/push.js +81 -101
  26. package/dist/commands/query.d.ts +63 -0
  27. package/dist/commands/query.js +349 -0
  28. package/dist/commands/space/list.d.ts +5 -2
  29. package/dist/commands/space/list.js +60 -56
  30. package/dist/commands/space/switch.d.ts +16 -0
  31. package/dist/commands/space/switch.js +102 -53
  32. package/dist/commands/status.d.ts +5 -2
  33. package/dist/commands/status.js +43 -33
  34. package/dist/commands/watch.d.ts +23 -0
  35. package/dist/commands/watch.js +171 -0
  36. package/dist/config/auth.config.js +14 -2
  37. package/dist/config/context-tree-domains.d.ts +12 -0
  38. package/dist/config/context-tree-domains.js +29 -0
  39. package/dist/config/environment.d.ts +6 -0
  40. package/dist/config/environment.js +9 -2
  41. package/dist/constants.d.ts +5 -0
  42. package/dist/constants.js +6 -0
  43. package/dist/core/domain/cipher/agent/agent-state-machine.d.ts +128 -0
  44. package/dist/core/domain/cipher/agent/agent-state-machine.js +183 -0
  45. package/dist/core/domain/cipher/agent/agent-state.d.ts +77 -0
  46. package/dist/core/domain/cipher/agent/agent-state.js +59 -0
  47. package/dist/core/domain/cipher/agent/index.d.ts +7 -0
  48. package/dist/core/domain/cipher/agent/index.js +7 -0
  49. package/dist/core/domain/cipher/agent-events/index.d.ts +8 -0
  50. package/dist/core/domain/cipher/agent-events/index.js +7 -0
  51. package/dist/core/domain/cipher/agent-events/types.d.ts +419 -0
  52. package/dist/core/domain/cipher/agent-events/types.js +42 -0
  53. package/dist/core/domain/cipher/blob/types.d.ts +108 -0
  54. package/dist/core/domain/cipher/errors/blob-error.d.ts +36 -0
  55. package/dist/core/domain/cipher/errors/blob-error.js +68 -0
  56. package/dist/core/domain/cipher/errors/file-system-error.d.ts +211 -0
  57. package/dist/core/domain/cipher/errors/file-system-error.js +291 -0
  58. package/dist/core/domain/cipher/errors/llm-error.d.ts +120 -0
  59. package/dist/core/domain/cipher/errors/llm-error.js +161 -0
  60. package/dist/core/domain/cipher/errors/memory-error.d.ts +35 -0
  61. package/dist/core/domain/cipher/errors/memory-error.js +62 -0
  62. package/dist/core/domain/cipher/errors/process-error-code.d.ts +97 -0
  63. package/dist/core/domain/cipher/errors/process-error-code.js +98 -0
  64. package/dist/core/domain/cipher/errors/process-error.d.ts +135 -0
  65. package/dist/core/domain/cipher/errors/process-error.js +173 -0
  66. package/dist/core/domain/cipher/errors/session-error.d.ts +56 -0
  67. package/dist/core/domain/cipher/errors/session-error.js +74 -0
  68. package/dist/core/domain/cipher/errors/tool-error.d.ts +57 -0
  69. package/dist/core/domain/cipher/errors/tool-error.js +81 -0
  70. package/dist/core/domain/cipher/file-system/types.d.ts +203 -0
  71. package/dist/core/domain/cipher/memory/types.d.ts +102 -0
  72. package/dist/core/domain/cipher/memory/types.js +4 -0
  73. package/dist/core/domain/cipher/parsed-interaction.d.ts +47 -0
  74. package/dist/core/domain/cipher/parsed-interaction.js +25 -0
  75. package/dist/core/domain/cipher/process/types.d.ts +286 -0
  76. package/dist/core/domain/cipher/session/types.d.ts +54 -0
  77. package/dist/core/domain/cipher/storage/history-types.d.ts +38 -0
  78. package/dist/core/domain/cipher/system-prompt/types.d.ts +131 -0
  79. package/dist/core/domain/cipher/todos/index.d.ts +4 -0
  80. package/dist/core/domain/cipher/todos/index.js +4 -0
  81. package/dist/core/domain/cipher/todos/types.d.ts +57 -0
  82. package/dist/core/domain/cipher/todos/types.js +5 -0
  83. package/dist/core/domain/cipher/tools/constants.d.ts +28 -0
  84. package/dist/core/domain/cipher/tools/constants.js +24 -0
  85. package/dist/core/domain/cipher/tools/tool-error.d.ts +183 -0
  86. package/dist/core/domain/cipher/tools/tool-error.js +246 -0
  87. package/dist/core/domain/cipher/tools/types.d.ts +145 -0
  88. package/dist/core/domain/entities/brv-config.d.ts +42 -6
  89. package/dist/core/domain/entities/brv-config.js +115 -17
  90. package/dist/core/domain/entities/cogit-push-context.d.ts +38 -0
  91. package/dist/core/domain/entities/cogit-push-context.js +91 -0
  92. package/dist/core/domain/entities/cogit-push-response.d.ts +20 -0
  93. package/dist/core/domain/entities/cogit-push-response.js +31 -0
  94. package/dist/core/domain/entities/cogit-snapshot-author.d.ts +24 -0
  95. package/dist/core/domain/entities/cogit-snapshot-author.js +39 -0
  96. package/dist/core/domain/entities/cogit-snapshot-file.d.ts +34 -0
  97. package/dist/core/domain/entities/cogit-snapshot-file.js +59 -0
  98. package/dist/core/domain/entities/cogit-snapshot.d.ts +31 -0
  99. package/dist/core/domain/entities/cogit-snapshot.js +58 -0
  100. package/dist/core/domain/entities/context-tree-index.d.ts +26 -0
  101. package/dist/core/domain/entities/context-tree-index.js +27 -0
  102. package/dist/core/domain/entities/context-tree-snapshot.d.ts +56 -0
  103. package/dist/core/domain/entities/context-tree-snapshot.js +83 -0
  104. package/dist/core/domain/entities/event.d.ts +1 -1
  105. package/dist/core/domain/entities/event.js +4 -1
  106. package/dist/core/domain/entities/parser.d.ts +567 -0
  107. package/dist/core/domain/entities/parser.js +10 -0
  108. package/dist/core/domain/entities/playbook.d.ts +2 -23
  109. package/dist/core/domain/entities/playbook.js +2 -70
  110. package/dist/core/domain/errors/brv-config-version-error.d.ts +16 -0
  111. package/dist/core/domain/errors/brv-config-version-error.js +21 -0
  112. package/dist/core/domain/knowledge/directory-manager.d.ts +80 -0
  113. package/dist/core/domain/knowledge/directory-manager.js +145 -0
  114. package/dist/core/domain/knowledge/markdown-writer.d.ts +18 -0
  115. package/dist/core/domain/knowledge/markdown-writer.js +18 -0
  116. package/dist/core/domain/knowledge/relation-parser.d.ts +90 -0
  117. package/dist/core/domain/knowledge/relation-parser.js +131 -0
  118. package/dist/core/interfaces/cipher/cipher-services.d.ts +71 -0
  119. package/dist/core/interfaces/cipher/cipher-services.js +1 -0
  120. package/dist/core/interfaces/cipher/i-blob-storage.d.ts +78 -0
  121. package/dist/core/interfaces/cipher/i-blob-storage.js +1 -0
  122. package/dist/core/interfaces/cipher/i-chat-session.d.ts +62 -0
  123. package/dist/core/interfaces/cipher/i-chat-session.js +1 -0
  124. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +88 -0
  125. package/dist/core/interfaces/cipher/i-cipher-agent.js +1 -0
  126. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.d.ts +20 -0
  127. package/dist/core/interfaces/cipher/i-coding-agent-log-parser.js +1 -0
  128. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.d.ts +31 -0
  129. package/dist/core/interfaces/cipher/i-coding-agent-log-watcher.js +1 -0
  130. package/dist/core/interfaces/cipher/i-content-generator.d.ts +120 -0
  131. package/dist/core/interfaces/cipher/i-content-generator.js +12 -0
  132. package/dist/core/interfaces/cipher/i-event-emitter.d.ts +76 -0
  133. package/dist/core/interfaces/cipher/i-event-emitter.js +1 -0
  134. package/dist/core/interfaces/cipher/i-file-system.d.ts +68 -0
  135. package/dist/core/interfaces/cipher/i-file-system.js +1 -0
  136. package/dist/core/interfaces/cipher/i-history-storage.d.ts +53 -0
  137. package/dist/core/interfaces/cipher/i-history-storage.js +1 -0
  138. package/dist/core/interfaces/cipher/i-llm-provider.d.ts +14 -0
  139. package/dist/core/interfaces/cipher/i-llm-provider.js +1 -0
  140. package/dist/core/interfaces/cipher/i-llm-service.d.ts +62 -0
  141. package/dist/core/interfaces/cipher/i-llm-service.js +1 -0
  142. package/dist/core/interfaces/cipher/i-logger.d.ts +78 -0
  143. package/dist/core/interfaces/cipher/i-logger.js +28 -0
  144. package/dist/core/interfaces/cipher/i-message-formatter.d.ts +44 -0
  145. package/dist/core/interfaces/cipher/i-message-formatter.js +1 -0
  146. package/dist/core/interfaces/cipher/i-policy-engine.d.ts +102 -0
  147. package/dist/core/interfaces/cipher/i-policy-engine.js +9 -0
  148. package/dist/core/interfaces/cipher/i-process-service.d.ts +65 -0
  149. package/dist/core/interfaces/cipher/i-process-service.js +1 -0
  150. package/dist/core/interfaces/cipher/i-system-prompt-contributor.d.ts +25 -0
  151. package/dist/core/interfaces/cipher/i-system-prompt-contributor.js +1 -0
  152. package/dist/core/interfaces/cipher/i-tokenizer.d.ts +15 -0
  153. package/dist/core/interfaces/cipher/i-tokenizer.js +1 -0
  154. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +64 -0
  155. package/dist/core/interfaces/cipher/i-tool-provider.js +1 -0
  156. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +103 -0
  157. package/dist/core/interfaces/cipher/i-tool-scheduler.js +11 -0
  158. package/dist/core/interfaces/cipher/llm-types.d.ts +46 -0
  159. package/dist/core/interfaces/cipher/llm-types.js +5 -0
  160. package/dist/core/interfaces/cipher/message-types.d.ts +118 -0
  161. package/dist/core/interfaces/cipher/message-types.js +5 -0
  162. package/dist/core/interfaces/cipher/tokenizer-types.d.ts +11 -0
  163. package/dist/core/interfaces/cipher/tokenizer-types.js +14 -0
  164. package/dist/core/interfaces/i-cogit-pull-service.d.ts +24 -0
  165. package/dist/core/interfaces/i-cogit-pull-service.js +1 -0
  166. package/dist/core/interfaces/i-cogit-push-service.d.ts +27 -0
  167. package/dist/core/interfaces/i-cogit-push-service.js +1 -0
  168. package/dist/core/interfaces/i-context-file-reader.d.ts +32 -0
  169. package/dist/core/interfaces/i-context-file-reader.js +1 -0
  170. package/dist/core/interfaces/i-context-tree-service.d.ts +21 -0
  171. package/dist/core/interfaces/i-context-tree-service.js +1 -0
  172. package/dist/core/interfaces/i-context-tree-snapshot-service.d.ts +36 -0
  173. package/dist/core/interfaces/i-context-tree-snapshot-service.js +1 -0
  174. package/dist/core/interfaces/i-context-tree-writer-service.d.ts +32 -0
  175. package/dist/core/interfaces/i-context-tree-writer-service.js +1 -0
  176. package/dist/core/interfaces/i-file-watcher-service.d.ts +41 -0
  177. package/dist/core/interfaces/i-file-watcher-service.js +1 -0
  178. package/dist/core/interfaces/i-rule-template-service.d.ts +0 -4
  179. package/dist/core/interfaces/i-rule-template-service.js +1 -4
  180. package/dist/core/interfaces/parser/i-clean-parser-service.d.ts +18 -0
  181. package/dist/core/interfaces/parser/i-clean-parser-service.js +1 -0
  182. package/dist/core/interfaces/parser/i-raw-parser-service.d.ts +17 -0
  183. package/dist/core/interfaces/parser/i-raw-parser-service.js +1 -0
  184. package/dist/core/interfaces/parser/i-session-normalizer.d.ts +56 -0
  185. package/dist/core/interfaces/parser/i-session-normalizer.js +1 -0
  186. package/dist/hooks/command_not_found/handle-invalid-commands.d.ts +7 -0
  187. package/dist/hooks/command_not_found/handle-invalid-commands.js +32 -0
  188. package/dist/hooks/error/clean-errors.d.ts +7 -0
  189. package/dist/hooks/error/clean-errors.js +50 -0
  190. package/dist/hooks/init/welcome.js +72 -1
  191. package/dist/hooks/prerun/validate-brv-config-version.d.ts +28 -0
  192. package/dist/hooks/prerun/validate-brv-config-version.js +43 -0
  193. package/dist/infra/cipher/agent-service-factory.d.ts +86 -0
  194. package/dist/infra/cipher/agent-service-factory.js +212 -0
  195. package/dist/infra/cipher/blob/blob-storage-factory.d.ts +13 -0
  196. package/dist/infra/cipher/blob/blob-storage-factory.js +14 -0
  197. package/dist/infra/cipher/blob/index.d.ts +10 -0
  198. package/dist/infra/cipher/blob/index.js +12 -0
  199. package/dist/infra/cipher/blob/migrations.d.ts +63 -0
  200. package/dist/infra/cipher/blob/migrations.js +148 -0
  201. package/dist/infra/cipher/blob/sqlite-blob-storage.d.ts +82 -0
  202. package/dist/infra/cipher/blob/sqlite-blob-storage.js +307 -0
  203. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +63 -0
  204. package/dist/infra/cipher/cipher-agent-state-manager.js +108 -0
  205. package/dist/infra/cipher/cipher-agent.d.ts +182 -0
  206. package/dist/infra/cipher/cipher-agent.js +317 -0
  207. package/dist/infra/cipher/command-parser.d.ts +23 -0
  208. package/dist/infra/cipher/command-parser.js +85 -0
  209. package/dist/infra/cipher/display/todo-display.d.ts +23 -0
  210. package/dist/infra/cipher/display/todo-display.js +129 -0
  211. package/dist/infra/cipher/events/event-emitter.d.ts +137 -0
  212. package/dist/infra/cipher/events/event-emitter.js +158 -0
  213. package/dist/infra/cipher/exit-codes.d.ts +44 -0
  214. package/dist/infra/cipher/exit-codes.js +58 -0
  215. package/dist/infra/cipher/file-system/file-system-service.d.ts +105 -0
  216. package/dist/infra/cipher/file-system/file-system-service.js +641 -0
  217. package/dist/infra/cipher/file-system/gitignore-filter.d.ts +77 -0
  218. package/dist/infra/cipher/file-system/gitignore-filter.js +120 -0
  219. package/dist/infra/cipher/file-system/glob-utils.d.ts +60 -0
  220. package/dist/infra/cipher/file-system/glob-utils.js +120 -0
  221. package/dist/infra/cipher/file-system/path-validator.d.ts +69 -0
  222. package/dist/infra/cipher/file-system/path-validator.js +184 -0
  223. package/dist/infra/cipher/grpc/internal-llm-grpc-service.d.ts +149 -0
  224. package/dist/infra/cipher/grpc/internal-llm-grpc-service.js +364 -0
  225. package/dist/infra/cipher/grpc/internal-llm-grpc.proto +94 -0
  226. package/dist/infra/cipher/interactive-commands.d.ts +16 -0
  227. package/dist/infra/cipher/interactive-commands.js +198 -0
  228. package/dist/infra/cipher/interactive-loop.d.ts +24 -0
  229. package/dist/infra/cipher/interactive-loop.js +352 -0
  230. package/dist/infra/cipher/llm/context/async-mutex.d.ts +59 -0
  231. package/dist/infra/cipher/llm/context/async-mutex.js +92 -0
  232. package/dist/infra/cipher/llm/context/compression/index.d.ts +6 -0
  233. package/dist/infra/cipher/llm/context/compression/index.js +5 -0
  234. package/dist/infra/cipher/llm/context/compression/middle-removal.d.ts +40 -0
  235. package/dist/infra/cipher/llm/context/compression/middle-removal.js +76 -0
  236. package/dist/infra/cipher/llm/context/compression/oldest-removal.d.ts +38 -0
  237. package/dist/infra/cipher/llm/context/compression/oldest-removal.js +53 -0
  238. package/dist/infra/cipher/llm/context/compression/types.d.ts +36 -0
  239. package/dist/infra/cipher/llm/context/compression/types.js +1 -0
  240. package/dist/infra/cipher/llm/context/context-manager.d.ts +234 -0
  241. package/dist/infra/cipher/llm/context/context-manager.js +419 -0
  242. package/dist/infra/cipher/llm/context/index.d.ts +2 -0
  243. package/dist/infra/cipher/llm/context/index.js +2 -0
  244. package/dist/infra/cipher/llm/context/loop-detector.d.ts +125 -0
  245. package/dist/infra/cipher/llm/context/loop-detector.js +194 -0
  246. package/dist/infra/cipher/llm/context/utils.d.ts +17 -0
  247. package/dist/infra/cipher/llm/context/utils.js +89 -0
  248. package/dist/infra/cipher/llm/formatters/claude-formatter.d.ts +54 -0
  249. package/dist/infra/cipher/llm/formatters/claude-formatter.js +182 -0
  250. package/dist/infra/cipher/llm/formatters/gemini-formatter.d.ts +69 -0
  251. package/dist/infra/cipher/llm/formatters/gemini-formatter.js +253 -0
  252. package/dist/infra/cipher/llm/formatters/openrouter-formatter.d.ts +47 -0
  253. package/dist/infra/cipher/llm/formatters/openrouter-formatter.js +238 -0
  254. package/dist/infra/cipher/llm/generators/byterover-content-generator.d.ts +92 -0
  255. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +211 -0
  256. package/dist/infra/cipher/llm/generators/index.d.ts +13 -0
  257. package/dist/infra/cipher/llm/generators/index.js +13 -0
  258. package/dist/infra/cipher/llm/generators/logging-content-generator.d.ts +104 -0
  259. package/dist/infra/cipher/llm/generators/logging-content-generator.js +182 -0
  260. package/dist/infra/cipher/llm/generators/openrouter-content-generator.d.ts +93 -0
  261. package/dist/infra/cipher/llm/generators/openrouter-content-generator.js +254 -0
  262. package/dist/infra/cipher/llm/generators/retryable-content-generator.d.ts +90 -0
  263. package/dist/infra/cipher/llm/generators/retryable-content-generator.js +157 -0
  264. package/dist/infra/cipher/llm/index.d.ts +9 -0
  265. package/dist/infra/cipher/llm/index.js +13 -0
  266. package/dist/infra/cipher/llm/internal-llm-service.d.ts +308 -0
  267. package/dist/infra/cipher/llm/internal-llm-service.js +724 -0
  268. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +183 -0
  269. package/dist/infra/cipher/llm/openrouter-llm-service.js +386 -0
  270. package/dist/infra/cipher/llm/response-validator.d.ts +89 -0
  271. package/dist/infra/cipher/llm/response-validator.js +157 -0
  272. package/dist/infra/cipher/llm/retry/index.d.ts +10 -0
  273. package/dist/infra/cipher/llm/retry/index.js +10 -0
  274. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +74 -0
  275. package/dist/infra/cipher/llm/retry/retry-policy.js +146 -0
  276. package/dist/infra/cipher/llm/retry/retry-with-backoff.d.ts +113 -0
  277. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +247 -0
  278. package/dist/infra/cipher/llm/thought-parser.d.ts +145 -0
  279. package/dist/infra/cipher/llm/thought-parser.js +190 -0
  280. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +47 -0
  281. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +55 -0
  282. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.d.ts +31 -0
  283. package/dist/infra/cipher/llm/tokenizers/default-tokenizer.js +38 -0
  284. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +37 -0
  285. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +45 -0
  286. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +29 -0
  287. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +37 -0
  288. package/dist/infra/cipher/llm/tool-output-processor.d.ts +117 -0
  289. package/dist/infra/cipher/llm/tool-output-processor.js +153 -0
  290. package/dist/infra/cipher/logger/console-logger.d.ts +42 -0
  291. package/dist/infra/cipher/logger/console-logger.js +63 -0
  292. package/dist/infra/cipher/logger/event-based-logger.d.ts +54 -0
  293. package/dist/infra/cipher/logger/event-based-logger.js +92 -0
  294. package/dist/infra/cipher/memory/index.d.ts +6 -0
  295. package/dist/infra/cipher/memory/index.js +7 -0
  296. package/dist/infra/cipher/memory/memory-manager.d.ts +136 -0
  297. package/dist/infra/cipher/memory/memory-manager.js +523 -0
  298. package/dist/infra/cipher/parsers/coding-agent-log-parser.d.ts +24 -0
  299. package/dist/infra/cipher/parsers/coding-agent-log-parser.js +51 -0
  300. package/dist/infra/cipher/process/command-validator.d.ts +59 -0
  301. package/dist/infra/cipher/process/command-validator.js +266 -0
  302. package/dist/infra/cipher/process/index.d.ts +8 -0
  303. package/dist/infra/cipher/process/index.js +8 -0
  304. package/dist/infra/cipher/process/process-service.d.ts +95 -0
  305. package/dist/infra/cipher/process/process-service.js +439 -0
  306. package/dist/infra/cipher/session/chat-session.d.ts +80 -0
  307. package/dist/infra/cipher/session/chat-session.js +165 -0
  308. package/dist/infra/cipher/session/index.d.ts +6 -0
  309. package/dist/infra/cipher/session/index.js +5 -0
  310. package/dist/infra/cipher/session/session-event-forwarder.d.ts +37 -0
  311. package/dist/infra/cipher/session/session-event-forwarder.js +83 -0
  312. package/dist/infra/cipher/session/session-manager.d.ts +109 -0
  313. package/dist/infra/cipher/session/session-manager.js +172 -0
  314. package/dist/infra/cipher/storage/blob-history-storage.d.ts +76 -0
  315. package/dist/infra/cipher/storage/blob-history-storage.js +178 -0
  316. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +105 -0
  317. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +290 -0
  318. package/dist/infra/cipher/tools/core-tool-scheduler.d.ts +99 -0
  319. package/dist/infra/cipher/tools/core-tool-scheduler.js +161 -0
  320. package/dist/infra/cipher/tools/default-policy-rules.d.ts +26 -0
  321. package/dist/infra/cipher/tools/default-policy-rules.js +125 -0
  322. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +12 -0
  323. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +93 -0
  324. package/dist/infra/cipher/tools/implementations/bash-output-tool.d.ts +12 -0
  325. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +47 -0
  326. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.d.ts +11 -0
  327. package/dist/infra/cipher/tools/implementations/create-knowledge-topic-tool.js +142 -0
  328. package/dist/infra/cipher/tools/implementations/delete-memory-tool.d.ts +12 -0
  329. package/dist/infra/cipher/tools/implementations/delete-memory-tool.js +37 -0
  330. package/dist/infra/cipher/tools/implementations/detect-domains-tool.d.ts +7 -0
  331. package/dist/infra/cipher/tools/implementations/detect-domains-tool.js +73 -0
  332. package/dist/infra/cipher/tools/implementations/edit-file-tool.d.ts +13 -0
  333. package/dist/infra/cipher/tools/implementations/edit-file-tool.js +50 -0
  334. package/dist/infra/cipher/tools/implementations/edit-memory-tool.d.ts +13 -0
  335. package/dist/infra/cipher/tools/implementations/edit-memory-tool.js +53 -0
  336. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +7 -0
  337. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +421 -0
  338. package/dist/infra/cipher/tools/implementations/glob-files-tool.d.ts +18 -0
  339. package/dist/infra/cipher/tools/implementations/glob-files-tool.js +70 -0
  340. package/dist/infra/cipher/tools/implementations/grep-content-tool.d.ts +12 -0
  341. package/dist/infra/cipher/tools/implementations/grep-content-tool.js +77 -0
  342. package/dist/infra/cipher/tools/implementations/kill-process-tool.d.ts +12 -0
  343. package/dist/infra/cipher/tools/implementations/kill-process-tool.js +55 -0
  344. package/dist/infra/cipher/tools/implementations/list-memories-tool.d.ts +12 -0
  345. package/dist/infra/cipher/tools/implementations/list-memories-tool.js +63 -0
  346. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +12 -0
  347. package/dist/infra/cipher/tools/implementations/read-file-tool.js +54 -0
  348. package/dist/infra/cipher/tools/implementations/read-memory-tool.d.ts +12 -0
  349. package/dist/infra/cipher/tools/implementations/read-memory-tool.js +39 -0
  350. package/dist/infra/cipher/tools/implementations/search-history-tool.d.ts +10 -0
  351. package/dist/infra/cipher/tools/implementations/search-history-tool.js +36 -0
  352. package/dist/infra/cipher/tools/implementations/write-file-tool.d.ts +12 -0
  353. package/dist/infra/cipher/tools/implementations/write-file-tool.js +52 -0
  354. package/dist/infra/cipher/tools/implementations/write-memory-tool.d.ts +13 -0
  355. package/dist/infra/cipher/tools/implementations/write-memory-tool.js +52 -0
  356. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +10 -0
  357. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +165 -0
  358. package/dist/infra/cipher/tools/index.d.ts +18 -0
  359. package/dist/infra/cipher/tools/index.js +19 -0
  360. package/dist/infra/cipher/tools/policy-engine.d.ts +80 -0
  361. package/dist/infra/cipher/tools/policy-engine.js +110 -0
  362. package/dist/infra/cipher/tools/tool-invocation-queue.d.ts +191 -0
  363. package/dist/infra/cipher/tools/tool-invocation-queue.js +254 -0
  364. package/dist/infra/cipher/tools/tool-invocation.d.ts +216 -0
  365. package/dist/infra/cipher/tools/tool-invocation.js +294 -0
  366. package/dist/infra/cipher/tools/tool-manager.d.ts +135 -0
  367. package/dist/infra/cipher/tools/tool-manager.js +209 -0
  368. package/dist/infra/cipher/tools/tool-markers.d.ts +48 -0
  369. package/dist/infra/cipher/tools/tool-markers.js +49 -0
  370. package/dist/infra/cipher/tools/tool-provider.d.ts +77 -0
  371. package/dist/infra/cipher/tools/tool-provider.js +196 -0
  372. package/dist/infra/cipher/tools/tool-registry.d.ts +52 -0
  373. package/dist/infra/cipher/tools/tool-registry.js +144 -0
  374. package/dist/infra/cipher/tools/utils/schema-converter.d.ts +10 -0
  375. package/dist/infra/cipher/tools/utils/schema-converter.js +29 -0
  376. package/dist/infra/cipher/validation/workspace-validator.d.ts +19 -0
  377. package/dist/infra/cipher/validation/workspace-validator.js +37 -0
  378. package/dist/infra/cipher/watcher/coding-agent-log-watcher.d.ts +14 -0
  379. package/dist/infra/cipher/watcher/coding-agent-log-watcher.js +55 -0
  380. package/dist/infra/cogit/context-tree-to-push-context-mapper.d.ts +21 -0
  381. package/dist/infra/cogit/context-tree-to-push-context-mapper.js +32 -0
  382. package/dist/infra/cogit/http-cogit-pull-service.d.ts +15 -0
  383. package/dist/infra/cogit/http-cogit-pull-service.js +30 -0
  384. package/dist/infra/cogit/http-cogit-push-service.d.ts +17 -0
  385. package/dist/infra/cogit/http-cogit-push-service.js +104 -0
  386. package/dist/infra/config/file-config-store.js +9 -3
  387. package/dist/infra/context-tree/file-context-file-reader.d.ts +14 -0
  388. package/dist/infra/context-tree/file-context-file-reader.js +46 -0
  389. package/dist/infra/context-tree/file-context-tree-service.d.ts +14 -0
  390. package/dist/infra/context-tree/file-context-tree-service.js +46 -0
  391. package/dist/infra/context-tree/file-context-tree-snapshot-service.d.ts +34 -0
  392. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +117 -0
  393. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +22 -0
  394. package/dist/infra/context-tree/file-context-tree-writer-service.js +61 -0
  395. package/dist/infra/memory/http-memory-retrieval-service.js +2 -1
  396. package/dist/infra/memory/http-memory-storage-service.js +4 -3
  397. package/dist/infra/parsers/clean/clean-claude-service.d.ts +111 -0
  398. package/dist/infra/parsers/clean/clean-claude-service.js +271 -0
  399. package/dist/infra/parsers/clean/clean-codex-service.d.ts +231 -0
  400. package/dist/infra/parsers/clean/clean-codex-service.js +534 -0
  401. package/dist/infra/parsers/clean/clean-copilot-service.d.ts +255 -0
  402. package/dist/infra/parsers/clean/clean-copilot-service.js +729 -0
  403. package/dist/infra/parsers/clean/clean-cursor-service.d.ts +161 -0
  404. package/dist/infra/parsers/clean/clean-cursor-service.js +432 -0
  405. package/dist/infra/parsers/clean/clean-parser-service-factory.d.ts +54 -0
  406. package/dist/infra/parsers/clean/clean-parser-service-factory.js +80 -0
  407. package/dist/infra/parsers/clean/shared.d.ts +84 -0
  408. package/dist/infra/parsers/clean/shared.js +273 -0
  409. package/dist/infra/parsers/raw/raw-claude-service.d.ts +195 -0
  410. package/dist/infra/parsers/raw/raw-claude-service.js +548 -0
  411. package/dist/infra/parsers/raw/raw-codex-service.d.ts +313 -0
  412. package/dist/infra/parsers/raw/raw-codex-service.js +782 -0
  413. package/dist/infra/parsers/raw/raw-copilot-service.d.ts +196 -0
  414. package/dist/infra/parsers/raw/raw-copilot-service.js +558 -0
  415. package/dist/infra/parsers/raw/raw-cursor-service.d.ts +316 -0
  416. package/dist/infra/parsers/raw/raw-cursor-service.js +818 -0
  417. package/dist/infra/parsers/raw/raw-parser-service-factory.d.ts +54 -0
  418. package/dist/infra/parsers/raw/raw-parser-service-factory.js +81 -0
  419. package/dist/infra/rule/constants.d.ts +4 -0
  420. package/dist/infra/rule/constants.js +4 -0
  421. package/dist/infra/rule/rule-template-service.js +1 -1
  422. package/dist/infra/rule/rule-writer-service.js +1 -5
  423. package/dist/infra/space/http-space-service.js +2 -1
  424. package/dist/infra/team/http-team-service.js +2 -1
  425. package/dist/infra/user/http-user-service.js +2 -1
  426. package/dist/infra/watcher/file-watcher-service.d.ts +10 -0
  427. package/dist/infra/watcher/file-watcher-service.js +81 -0
  428. package/dist/infra/workspace/workspace-detector-service.d.ts +60 -0
  429. package/dist/infra/workspace/workspace-detector-service.js +165 -0
  430. package/dist/resources/prompts/curate-context-tree-curation.yml +48 -0
  431. package/dist/resources/prompts/modes/autonomous.yml +9 -0
  432. package/dist/resources/prompts/query-context-tree-retrieval.yml +49 -0
  433. package/dist/resources/prompts/reflection.yml +27 -0
  434. package/dist/resources/prompts/system-prompt.yml +82 -0
  435. package/dist/resources/prompts/tool-outputs.yml +30 -0
  436. package/dist/templates/README.md +6 -7
  437. package/dist/templates/sections/command-reference.md +40 -93
  438. package/dist/templates/sections/workflow.md +3 -30
  439. package/dist/utils/emoji-helpers.d.ts +38 -0
  440. package/dist/utils/emoji-helpers.js +42 -0
  441. package/dist/utils/error-handler.d.ts +51 -0
  442. package/dist/utils/error-handler.js +169 -0
  443. package/dist/utils/error-helpers.d.ts +30 -0
  444. package/dist/utils/error-helpers.js +47 -0
  445. package/dist/utils/file-helpers.d.ts +15 -0
  446. package/dist/utils/file-helpers.js +44 -0
  447. package/dist/utils/oclif-error-helpers.d.ts +40 -0
  448. package/dist/utils/oclif-error-helpers.js +46 -0
  449. package/dist/utils/tool-display-formatter.d.ts +53 -0
  450. package/dist/utils/tool-display-formatter.js +257 -0
  451. package/oclif.manifest.json +422 -142
  452. package/package.json +29 -10
  453. package/dist/commands/add.d.ts +0 -49
  454. package/dist/commands/add.js +0 -192
  455. package/dist/commands/complete.d.ts +0 -108
  456. package/dist/commands/complete.js +0 -340
  457. package/dist/commands/retrieve.d.ts +0 -26
  458. package/dist/commands/retrieve.js +0 -101
  459. package/dist/core/domain/entities/curator-output.d.ts +0 -14
  460. package/dist/core/domain/entities/curator-output.js +0 -23
  461. package/dist/core/domain/entities/delta-batch.d.ts +0 -30
  462. package/dist/core/domain/entities/delta-batch.js +0 -52
  463. package/dist/core/domain/entities/delta-operation.d.ts +0 -31
  464. package/dist/core/domain/entities/delta-operation.js +0 -50
  465. package/dist/core/domain/entities/executor-output.d.ts +0 -27
  466. package/dist/core/domain/entities/executor-output.js +0 -33
  467. package/dist/core/domain/entities/reflector-output.d.ts +0 -38
  468. package/dist/core/domain/entities/reflector-output.js +0 -44
  469. package/dist/core/interfaces/i-ace-prompt-builder.d.ts +0 -48
  470. package/dist/core/interfaces/i-bullet-content-store.d.ts +0 -36
  471. package/dist/core/interfaces/i-delta-store.d.ts +0 -15
  472. package/dist/core/interfaces/i-executor-output-store.d.ts +0 -14
  473. package/dist/core/interfaces/i-playbook-service.d.ts +0 -69
  474. package/dist/core/interfaces/i-playbook-store.d.ts +0 -38
  475. package/dist/core/interfaces/i-reflection-store.d.ts +0 -21
  476. package/dist/infra/ace/ace-file-utils.d.ts +0 -46
  477. package/dist/infra/ace/ace-file-utils.js +0 -83
  478. package/dist/infra/ace/ace-prompt-templates.d.ts +0 -13
  479. package/dist/infra/ace/ace-prompt-templates.js +0 -177
  480. package/dist/infra/ace/file-bullet-content-store.d.ts +0 -27
  481. package/dist/infra/ace/file-bullet-content-store.js +0 -89
  482. package/dist/infra/ace/file-delta-store.d.ts +0 -9
  483. package/dist/infra/ace/file-delta-store.js +0 -26
  484. package/dist/infra/ace/file-executor-output-store.d.ts +0 -9
  485. package/dist/infra/ace/file-executor-output-store.js +0 -26
  486. package/dist/infra/ace/file-playbook-store.d.ts +0 -29
  487. package/dist/infra/ace/file-playbook-store.js +0 -107
  488. package/dist/infra/ace/file-reflection-store.d.ts +0 -10
  489. package/dist/infra/ace/file-reflection-store.js +0 -55
  490. package/dist/infra/playbook/file-playbook-service.d.ts +0 -42
  491. package/dist/infra/playbook/file-playbook-service.js +0 -132
  492. /package/dist/core/{interfaces/i-ace-prompt-builder.js → domain/cipher/blob/types.js} +0 -0
  493. /package/dist/core/{interfaces/i-bullet-content-store.js → domain/cipher/file-system/types.js} +0 -0
  494. /package/dist/core/{interfaces/i-delta-store.js → domain/cipher/process/types.js} +0 -0
  495. /package/dist/core/{interfaces/i-executor-output-store.js → domain/cipher/session/types.js} +0 -0
  496. /package/dist/core/{interfaces/i-playbook-service.js → domain/cipher/storage/history-types.js} +0 -0
  497. /package/dist/core/{interfaces/i-playbook-store.js → domain/cipher/system-prompt/types.js} +0 -0
  498. /package/dist/core/{interfaces/i-reflection-store.js → domain/cipher/tools/types.js} +0 -0
@@ -0,0 +1,105 @@
1
+ import type { MemoryManager } from '../memory/memory-manager.js';
2
+ /**
3
+ * Simple prompt configuration loaded from YAML
4
+ */
5
+ export interface PromptConfig {
6
+ description?: string;
7
+ excluded_tools?: string[];
8
+ prompt: string;
9
+ prompts?: Record<string, string>;
10
+ }
11
+ /**
12
+ * Context for building system prompts
13
+ */
14
+ export interface BuildContext {
15
+ availableMarkers?: Record<string, string>;
16
+ availableTools?: string[];
17
+ commandType?: 'curate' | 'query';
18
+ conversationMetadata?: {
19
+ conversationId?: string;
20
+ title?: string;
21
+ };
22
+ memoryManager?: MemoryManager;
23
+ mode?: 'autonomous' | 'default' | 'query';
24
+ }
25
+ /**
26
+ * Simple prompt factory following Serena's design pattern.
27
+ *
28
+ * Key features:
29
+ * - Loads simple YAML files with `prompt` field
30
+ * - Uses basic {{variable}} template syntax
31
+ * - No complex contributor pattern
32
+ * - Direct concatenation of base + modes + dynamic content
33
+ */
34
+ export declare class SimplePromptFactory {
35
+ private readonly basePath;
36
+ private readonly cache;
37
+ private readonly verbose;
38
+ /**
39
+ * Creates a new simple prompt factory
40
+ *
41
+ * @param basePath - Base path for prompt files (defaults to dist/resources/prompts)
42
+ * @param verbose - Enable verbose debug output
43
+ */
44
+ constructor(basePath?: string, verbose?: boolean);
45
+ /**
46
+ * Build a reflection prompt for completion checking.
47
+ *
48
+ * @param context - Context with iteration information
49
+ * @param context.type - Type of reflection prompt to build
50
+ * @param context.currentIteration - Current iteration number (required for near_max_iterations and mid_point_check)
51
+ * @param context.maxIterations - Maximum iterations allowed (required for near_max_iterations and mid_point_check)
52
+ * @returns Formatted reflection prompt
53
+ */
54
+ buildReflectionPrompt(context: {
55
+ currentIteration?: number;
56
+ maxIterations?: number;
57
+ type: 'completion_check' | 'final_iteration' | 'mid_point_check' | 'near_max_iterations';
58
+ }): string;
59
+ /**
60
+ * Build the complete system prompt
61
+ *
62
+ * @param context - Runtime context with tools, markers, modes, etc.
63
+ * @returns Complete system prompt string
64
+ */
65
+ buildSystemPrompt(context?: BuildContext): Promise<string>;
66
+ /**
67
+ * Get tool-specific output guidance for a tool
68
+ *
69
+ * @param toolName - The name of the tool (e.g., 'write_memory')
70
+ * @returns The guidance text if available, null otherwise
71
+ */
72
+ getToolOutputGuidance(toolName: string): null | string;
73
+ /**
74
+ * Discover companion prompt files for a given mode.
75
+ * Looks for files matching the pattern: {mode}-*.yml
76
+ *
77
+ * @param mode - The mode name (e.g., 'autonomous', 'query')
78
+ * @returns Array of relative file paths to companion prompts
79
+ */
80
+ private discoverCompanionPrompts;
81
+ /**
82
+ * Format memories for inclusion in system prompt
83
+ *
84
+ * @param memoryManager - Memory manager instance
85
+ * @returns Formatted memories string
86
+ */
87
+ private formatMemories;
88
+ /**
89
+ * Load a prompt YAML file
90
+ *
91
+ * @param filepath - Relative path from basePath
92
+ * @returns Parsed prompt configuration
93
+ */
94
+ private loadPrompt;
95
+ /**
96
+ * Render a template string with variable substitution
97
+ *
98
+ * Uses simple {{variable}} syntax (same as current PromptRenderer.render())
99
+ *
100
+ * @param template - Template string with {{variable}} placeholders
101
+ * @param variables - Variables to substitute
102
+ * @returns Rendered string
103
+ */
104
+ private renderTemplate;
105
+ }
@@ -0,0 +1,290 @@
1
+ import { load as loadYaml } from 'js-yaml';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { listDirectoryChildren } from '../../../utils/file-helpers.js';
6
+ /**
7
+ * Simple prompt factory following Serena's design pattern.
8
+ *
9
+ * Key features:
10
+ * - Loads simple YAML files with `prompt` field
11
+ * - Uses basic {{variable}} template syntax
12
+ * - No complex contributor pattern
13
+ * - Direct concatenation of base + modes + dynamic content
14
+ */
15
+ export class SimplePromptFactory {
16
+ basePath;
17
+ cache = new Map();
18
+ verbose;
19
+ /**
20
+ * Creates a new simple prompt factory
21
+ *
22
+ * @param basePath - Base path for prompt files (defaults to dist/resources/prompts)
23
+ * @param verbose - Enable verbose debug output
24
+ */
25
+ constructor(basePath, verbose = false) {
26
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
27
+ // When compiled: dist/infra/cipher/system-prompt/simple-prompt-factory.js
28
+ // Resources are at: dist/resources/prompts/
29
+ // So we need to go up 3 levels: ../../../resources/prompts
30
+ this.basePath = basePath ?? path.join(currentDir, '../../../resources/prompts');
31
+ this.verbose = verbose;
32
+ }
33
+ /**
34
+ * Build a reflection prompt for completion checking.
35
+ *
36
+ * @param context - Context with iteration information
37
+ * @param context.type - Type of reflection prompt to build
38
+ * @param context.currentIteration - Current iteration number (required for near_max_iterations and mid_point_check)
39
+ * @param context.maxIterations - Maximum iterations allowed (required for near_max_iterations and mid_point_check)
40
+ * @returns Formatted reflection prompt
41
+ */
42
+ buildReflectionPrompt(context) {
43
+ const reflectionConfig = this.loadPrompt('reflection.yml');
44
+ if (!reflectionConfig.prompts) {
45
+ throw new Error('Invalid reflection.yml file: missing prompts section');
46
+ }
47
+ const template = reflectionConfig.prompts[context.type];
48
+ if (!template) {
49
+ throw new Error(`Reflection prompt type '${context.type}' not found in reflection.yml`);
50
+ }
51
+ if (context.type === 'near_max_iterations' && context.currentIteration && context.maxIterations) {
52
+ /* eslint-disable camelcase */
53
+ return this.renderTemplate(template, {
54
+ current_iteration: context.currentIteration.toString(),
55
+ max_iterations: context.maxIterations.toString(),
56
+ });
57
+ /* eslint-enable camelcase */
58
+ }
59
+ if (context.type === 'mid_point_check' && context.currentIteration && context.maxIterations) {
60
+ const remaining = context.maxIterations - context.currentIteration;
61
+ /* eslint-disable camelcase */
62
+ return this.renderTemplate(template, {
63
+ current_iteration: context.currentIteration.toString(),
64
+ remaining_iterations: remaining.toString(),
65
+ });
66
+ /* eslint-enable camelcase */
67
+ }
68
+ return template;
69
+ }
70
+ /**
71
+ * Build the complete system prompt
72
+ *
73
+ * @param context - Runtime context with tools, markers, modes, etc.
74
+ * @returns Complete system prompt string
75
+ */
76
+ async buildSystemPrompt(context = {}) {
77
+ if (this.verbose) {
78
+ console.log('[PromptDebug:SimpleFactory] Building system prompt');
79
+ console.log('[PromptDebug:SimpleFactory] Context:', JSON.stringify({
80
+ availableMarkers: Object.keys(context.availableMarkers ?? {}).length,
81
+ availableTools: context.availableTools?.length,
82
+ mode: context.mode,
83
+ }, null, 2));
84
+ }
85
+ // 1. Load base prompt
86
+ const basePrompt = this.loadPrompt('system-prompt.yml');
87
+ // 2. Get memories if available
88
+ const memories = context.memoryManager ? await this.formatMemories(context.memoryManager) : '';
89
+ // 3. Prepare template variables
90
+ // Note: Variable names use snake_case to match template placeholders ({{available_tools}}, etc.)
91
+ /* eslint-disable camelcase */
92
+ const vars = {
93
+ available_markers: Object.keys(context.availableMarkers ?? {}).join(', '),
94
+ available_tools: context.availableTools?.join(', ') ?? '',
95
+ datetime: `<dateTime>Current date and time: ${new Date().toISOString()}</dateTime>`,
96
+ memories,
97
+ };
98
+ /* eslint-enable camelcase */
99
+ // 4. Render base prompt
100
+ let finalPrompt = this.renderTemplate(basePrompt.prompt, vars);
101
+ // 5. Append mode-specific prompts if specified (convention-based loading)
102
+ if (context.mode && context.mode !== 'default') {
103
+ // Load main mode prompt: modes/{mode}.yml
104
+ try {
105
+ const modePrompt = this.loadPrompt(`modes/${context.mode}.yml`);
106
+ finalPrompt = finalPrompt + '\n\n' + modePrompt.prompt;
107
+ if (this.verbose) {
108
+ console.log(`[PromptDebug:SimpleFactory] Loaded mode prompt: modes/${context.mode}.yml`);
109
+ }
110
+ }
111
+ catch {
112
+ if (this.verbose) {
113
+ console.log(`[PromptDebug:SimpleFactory] No mode prompt found: modes/${context.mode}.yml`);
114
+ }
115
+ }
116
+ // Load companion prompts: {commandType}-*.yml or {mode}-*.yml
117
+ // Priority: commandType > mode for companion discovery
118
+ const discoveryKey = context.commandType || context.mode;
119
+ const companionPrompts = this.discoverCompanionPrompts(discoveryKey);
120
+ const contextTree = listDirectoryChildren('.brv/context-tree');
121
+ const contextTreeString = JSON.stringify(contextTree, undefined, 2);
122
+ finalPrompt = finalPrompt + '\n\n' + contextTreeString;
123
+ if (this.verbose) {
124
+ console.log(`[PromptDebug:SimpleFactory] Discovering companion prompts with key: ${discoveryKey}`);
125
+ }
126
+ for (const companionPath of companionPrompts) {
127
+ try {
128
+ const companionPrompt = this.loadPrompt(companionPath);
129
+ finalPrompt = finalPrompt + '\n\n' + companionPrompt.prompt;
130
+ if (this.verbose) {
131
+ console.log(`[PromptDebug:SimpleFactory] Loaded companion prompt: ${companionPath}`);
132
+ }
133
+ }
134
+ catch {
135
+ if (this.verbose) {
136
+ console.log(`[PromptDebug:SimpleFactory] Failed to load companion prompt: ${companionPath}`);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ if (this.verbose) {
142
+ console.log(`[PromptDebug:SimpleFactory] Final prompt: ${finalPrompt.length} chars`);
143
+ console.log(`[PromptDebug:SimpleFactory] Preview (first 200): ${finalPrompt.slice(0, 200)}`);
144
+ console.log(`[PromptDebug:SimpleFactory] Preview (last 200): ${finalPrompt.slice(-200)}`);
145
+ }
146
+ return finalPrompt;
147
+ }
148
+ /**
149
+ * Get tool-specific output guidance for a tool
150
+ *
151
+ * @param toolName - The name of the tool (e.g., 'write_memory')
152
+ * @returns The guidance text if available, null otherwise
153
+ */
154
+ getToolOutputGuidance(toolName) {
155
+ try {
156
+ // Load tool-outputs.yml
157
+ const toolOutputsConfig = this.loadPrompt('tool-outputs.yml');
158
+ // Check if prompts section exists and has the requested prompt
159
+ if (toolOutputsConfig.prompts) {
160
+ const promptKey = `${toolName}_output`;
161
+ const guidance = toolOutputsConfig.prompts[promptKey];
162
+ if (guidance) {
163
+ if (this.verbose) {
164
+ console.log(`[PromptDebug:SimpleFactory] Found tool guidance for: ${toolName}`);
165
+ }
166
+ return guidance;
167
+ }
168
+ }
169
+ if (this.verbose) {
170
+ console.log(`[PromptDebug:SimpleFactory] No tool guidance found for: ${toolName}`);
171
+ }
172
+ return null;
173
+ }
174
+ catch (error) {
175
+ // If tool-outputs.yml doesn't exist or can't be loaded, return null
176
+ if (this.verbose) {
177
+ console.log(`[PromptDebug:SimpleFactory] Error loading tool guidance: ${error}`);
178
+ }
179
+ return null;
180
+ }
181
+ }
182
+ /**
183
+ * Discover companion prompt files for a given mode.
184
+ * Looks for files matching the pattern: {mode}-*.yml
185
+ *
186
+ * @param mode - The mode name (e.g., 'autonomous', 'query')
187
+ * @returns Array of relative file paths to companion prompts
188
+ */
189
+ discoverCompanionPrompts(mode) {
190
+ const companionPrompts = [];
191
+ try {
192
+ // Read all files in the prompts directory
193
+ const files = fs.readdirSync(this.basePath);
194
+ // Filter files matching {mode}-*.yml pattern
195
+ const pattern = new RegExp(`^${mode}-.*\\.yml$`);
196
+ const matchingFiles = files.filter((file) => pattern.test(file));
197
+ // Add matching files to result
198
+ for (const file of matchingFiles) {
199
+ companionPrompts.push(file);
200
+ }
201
+ if (this.verbose && companionPrompts.length > 0) {
202
+ console.log(`[PromptDebug:SimpleFactory] Found ${companionPrompts.length} companion prompts for mode '${mode}':`, companionPrompts);
203
+ }
204
+ }
205
+ catch (error) {
206
+ if (this.verbose) {
207
+ console.log(`[PromptDebug:SimpleFactory] Error discovering companion prompts: ${error}`);
208
+ }
209
+ }
210
+ return companionPrompts;
211
+ }
212
+ /**
213
+ * Format memories for inclusion in system prompt
214
+ *
215
+ * @param memoryManager - Memory manager instance
216
+ * @returns Formatted memories string
217
+ */
218
+ async formatMemories(memoryManager) {
219
+ try {
220
+ const memories = await memoryManager.list({ limit: 20 });
221
+ if (!memories || memories.length === 0) {
222
+ return '';
223
+ }
224
+ const items = memories.map((memory) => {
225
+ const tags = memory.tags && memory.tags.length > 0 ? ` [${memory.tags.join(', ')}]` : '';
226
+ return `- ${memory.content}${tags}`;
227
+ });
228
+ return `\n# Agent Memories\n${items.join('\n')}\n`;
229
+ }
230
+ catch {
231
+ return '';
232
+ }
233
+ }
234
+ /**
235
+ * Load a prompt YAML file
236
+ *
237
+ * @param filepath - Relative path from basePath
238
+ * @returns Parsed prompt configuration
239
+ */
240
+ loadPrompt(filepath) {
241
+ // Check cache
242
+ if (this.cache.has(filepath)) {
243
+ if (this.verbose) {
244
+ console.log(`[PromptDebug:SimpleFactory] Cache hit: ${filepath}`);
245
+ }
246
+ return this.cache.get(filepath);
247
+ }
248
+ // Load from file
249
+ const fullPath = path.join(this.basePath, filepath);
250
+ if (this.verbose) {
251
+ console.log(`[PromptDebug:SimpleFactory] Loading: ${fullPath}`);
252
+ }
253
+ if (!fs.existsSync(fullPath)) {
254
+ throw new Error(`Prompt file not found: ${fullPath}`);
255
+ }
256
+ const yamlContent = fs.readFileSync(fullPath, 'utf8');
257
+ const config = loadYaml(yamlContent);
258
+ // Allow files with either 'prompt' (for regular prompts) or 'prompts' (for tool-outputs.yml)
259
+ if (!config.prompt && !config.prompts) {
260
+ throw new Error(`Invalid prompt file (missing 'prompt' or 'prompts' field): ${filepath}`);
261
+ }
262
+ if (this.verbose) {
263
+ console.log(`[PromptDebug:SimpleFactory] Loaded: ${yamlContent.length} bytes`);
264
+ }
265
+ // Cache the config
266
+ this.cache.set(filepath, config);
267
+ return config;
268
+ }
269
+ /**
270
+ * Render a template string with variable substitution
271
+ *
272
+ * Uses simple {{variable}} syntax (same as current PromptRenderer.render())
273
+ *
274
+ * @param template - Template string with {{variable}} placeholders
275
+ * @param variables - Variables to substitute
276
+ * @returns Rendered string
277
+ */
278
+ renderTemplate(template, variables) {
279
+ if (this.verbose && Object.keys(variables).length > 0) {
280
+ console.log(`[PromptDebug:SimpleFactory] Substituting variables:`, Object.keys(variables));
281
+ }
282
+ let result = template;
283
+ // Replace {{variable}} with values
284
+ for (const [key, value] of Object.entries(variables)) {
285
+ const regex = new RegExp(`{{\\s*${key}\\s*}}`, 'g');
286
+ result = result.replaceAll(regex, value ?? '');
287
+ }
288
+ return result;
289
+ }
290
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Core Tool Scheduler Implementation.
3
+ *
4
+ * Orchestrates tool execution with:
5
+ * 1. Policy checking (ALLOW/DENY)
6
+ * 2. State tracking (pending → executing → completed/failed/denied)
7
+ * 3. Execution history for debugging/auditing
8
+ *
9
+ * Based on gemini-cli's CoreToolScheduler pattern, simplified for autonomous mode.
10
+ */
11
+ import type { IPolicyEngine, PolicyEvaluationResult } from '../../../core/interfaces/cipher/i-policy-engine.js';
12
+ import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
13
+ import type { IToolScheduler, ScheduledToolExecution, ToolSchedulerContext } from '../../../core/interfaces/cipher/i-tool-scheduler.js';
14
+ import type { SessionEventBus } from '../events/event-emitter.js';
15
+ /**
16
+ * Configuration options for CoreToolScheduler.
17
+ */
18
+ export interface CoreToolSchedulerConfig {
19
+ /**
20
+ * Maximum number of executions to keep in history.
21
+ * Older executions are removed when this limit is exceeded.
22
+ * @default 100
23
+ */
24
+ maxHistorySize?: number;
25
+ /**
26
+ * Whether to log state changes to console.
27
+ * @default false
28
+ */
29
+ verbose?: boolean;
30
+ }
31
+ /**
32
+ * Error thrown when a tool is denied by policy.
33
+ */
34
+ export declare class ToolDeniedError extends Error {
35
+ readonly policyResult: PolicyEvaluationResult;
36
+ readonly toolName: string;
37
+ constructor(toolName: string, policyResult: PolicyEvaluationResult);
38
+ }
39
+ /**
40
+ * Core Tool Scheduler implementation.
41
+ *
42
+ * Coordinates tool execution by:
43
+ * 1. Checking policy rules before execution
44
+ * 2. Tracking execution state transitions
45
+ * 3. Maintaining execution history for debugging
46
+ */
47
+ export declare class CoreToolScheduler implements IToolScheduler {
48
+ private readonly config;
49
+ private readonly eventBus?;
50
+ private history;
51
+ private readonly policyEngine;
52
+ private readonly toolProvider;
53
+ /**
54
+ * Create a new CoreToolScheduler.
55
+ *
56
+ * @param toolProvider - Provider for tool execution
57
+ * @param policyEngine - Engine for policy decisions
58
+ * @param eventBus - Optional event bus for emitting events
59
+ * @param config - Configuration options
60
+ */
61
+ constructor(toolProvider: IToolProvider, policyEngine: IPolicyEngine, eventBus?: SessionEventBus, config?: CoreToolSchedulerConfig);
62
+ /**
63
+ * Clear execution history.
64
+ */
65
+ clearHistory(): void;
66
+ /**
67
+ * Schedule and execute a tool call.
68
+ *
69
+ * @param toolName - Name of the tool to execute
70
+ * @param args - Arguments for the tool
71
+ * @param context - Execution context with session info
72
+ * @returns Tool execution result
73
+ * @throws ToolDeniedError if tool is denied by policy
74
+ * @throws Error if execution fails
75
+ */
76
+ execute(toolName: string, args: Record<string, unknown>, context: ToolSchedulerContext): Promise<unknown>;
77
+ /**
78
+ * Get execution history.
79
+ *
80
+ * @returns Read-only array of scheduled executions
81
+ */
82
+ getHistory(): readonly ScheduledToolExecution[];
83
+ /**
84
+ * Add an execution to history, maintaining max size.
85
+ */
86
+ private addToHistory;
87
+ /**
88
+ * Create a new execution record.
89
+ */
90
+ private createExecution;
91
+ /**
92
+ * Emit policy check event.
93
+ */
94
+ private emitPolicyChecked;
95
+ /**
96
+ * Update execution status and emit event.
97
+ */
98
+ private updateStatus;
99
+ }
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Core Tool Scheduler Implementation.
3
+ *
4
+ * Orchestrates tool execution with:
5
+ * 1. Policy checking (ALLOW/DENY)
6
+ * 2. State tracking (pending → executing → completed/failed/denied)
7
+ * 3. Execution history for debugging/auditing
8
+ *
9
+ * Based on gemini-cli's CoreToolScheduler pattern, simplified for autonomous mode.
10
+ */
11
+ import { randomUUID } from 'node:crypto';
12
+ /**
13
+ * Error thrown when a tool is denied by policy.
14
+ */
15
+ export class ToolDeniedError extends Error {
16
+ policyResult;
17
+ toolName;
18
+ constructor(toolName, policyResult) {
19
+ super(`Tool '${toolName}' denied by policy: ${policyResult.reason ?? 'No reason provided'}`);
20
+ this.name = 'ToolDeniedError';
21
+ this.toolName = toolName;
22
+ this.policyResult = policyResult;
23
+ // Maintain proper stack trace
24
+ if (Error.captureStackTrace) {
25
+ Error.captureStackTrace(this, ToolDeniedError);
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * Core Tool Scheduler implementation.
31
+ *
32
+ * Coordinates tool execution by:
33
+ * 1. Checking policy rules before execution
34
+ * 2. Tracking execution state transitions
35
+ * 3. Maintaining execution history for debugging
36
+ */
37
+ export class CoreToolScheduler {
38
+ config;
39
+ eventBus;
40
+ history = [];
41
+ policyEngine;
42
+ toolProvider;
43
+ /**
44
+ * Create a new CoreToolScheduler.
45
+ *
46
+ * @param toolProvider - Provider for tool execution
47
+ * @param policyEngine - Engine for policy decisions
48
+ * @param eventBus - Optional event bus for emitting events
49
+ * @param config - Configuration options
50
+ */
51
+ constructor(toolProvider, policyEngine, eventBus, config = {}) {
52
+ this.toolProvider = toolProvider;
53
+ this.policyEngine = policyEngine;
54
+ this.eventBus = eventBus;
55
+ this.config = {
56
+ maxHistorySize: config.maxHistorySize ?? 100,
57
+ verbose: config.verbose ?? false,
58
+ };
59
+ }
60
+ /**
61
+ * Clear execution history.
62
+ */
63
+ clearHistory() {
64
+ this.history = [];
65
+ }
66
+ /**
67
+ * Schedule and execute a tool call.
68
+ *
69
+ * @param toolName - Name of the tool to execute
70
+ * @param args - Arguments for the tool
71
+ * @param context - Execution context with session info
72
+ * @returns Tool execution result
73
+ * @throws ToolDeniedError if tool is denied by policy
74
+ * @throws Error if execution fails
75
+ */
76
+ async execute(toolName, args, context) {
77
+ // Create execution record
78
+ const execution = this.createExecution(toolName, args);
79
+ // Step 1: Policy check
80
+ const policyResult = this.policyEngine.evaluate(toolName, args);
81
+ execution.policyResult = policyResult;
82
+ this.emitPolicyChecked(execution, policyResult);
83
+ if (policyResult.decision === 'DENY') {
84
+ this.updateStatus(execution, 'denied');
85
+ execution.completedAt = new Date();
86
+ const error = new ToolDeniedError(toolName, policyResult);
87
+ execution.error = error;
88
+ throw error;
89
+ }
90
+ // Step 2: Execute
91
+ this.updateStatus(execution, 'executing');
92
+ execution.startedAt = new Date();
93
+ try {
94
+ const result = await this.toolProvider.executeTool(toolName, args, context.sessionId);
95
+ this.updateStatus(execution, 'completed');
96
+ execution.result = result;
97
+ execution.completedAt = new Date();
98
+ return result;
99
+ }
100
+ catch (error) {
101
+ this.updateStatus(execution, 'failed');
102
+ execution.error = error instanceof Error ? error : new Error(String(error));
103
+ execution.completedAt = new Date();
104
+ throw error;
105
+ }
106
+ }
107
+ /**
108
+ * Get execution history.
109
+ *
110
+ * @returns Read-only array of scheduled executions
111
+ */
112
+ getHistory() {
113
+ return this.history;
114
+ }
115
+ /**
116
+ * Add an execution to history, maintaining max size.
117
+ */
118
+ addToHistory(execution) {
119
+ this.history.push(execution);
120
+ if (this.history.length > this.config.maxHistorySize) {
121
+ this.history.shift();
122
+ }
123
+ }
124
+ /**
125
+ * Create a new execution record.
126
+ */
127
+ createExecution(toolName, args) {
128
+ const execution = {
129
+ args,
130
+ id: randomUUID(),
131
+ status: 'pending',
132
+ toolName,
133
+ };
134
+ this.addToHistory(execution);
135
+ return execution;
136
+ }
137
+ /**
138
+ * Emit policy check event.
139
+ */
140
+ emitPolicyChecked(execution, result) {
141
+ if (this.config.verbose) {
142
+ console.debug(`[ToolScheduler] Policy check for '${execution.toolName}': ${result.decision}` +
143
+ (result.reason ? ` (${result.reason})` : ''));
144
+ }
145
+ // Emit warning for denied tools
146
+ if (this.eventBus && result.decision === 'DENY') {
147
+ this.eventBus.emit('llmservice:warning', {
148
+ message: `Tool '${execution.toolName}' denied by policy: ${result.reason ?? 'No reason provided'}`,
149
+ });
150
+ }
151
+ }
152
+ /**
153
+ * Update execution status and emit event.
154
+ */
155
+ updateStatus(execution, status) {
156
+ execution.status = status;
157
+ if (this.config.verbose) {
158
+ console.debug(`[ToolScheduler] ${execution.toolName}: ${status}`);
159
+ }
160
+ }
161
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Default Policy Rules for Autonomous Execution.
3
+ *
4
+ * These rules define the default behavior for tool execution in autonomous mode.
5
+ * All tools are ALLOWED by default since the agent runs without user approval.
6
+ *
7
+ * DENY rules are only for truly dangerous operations that should never run,
8
+ * such as destructive commands that could harm the system.
9
+ */
10
+ import type { PolicyRule } from '../../../core/interfaces/cipher/i-policy-engine.js';
11
+ /**
12
+ * Default policy rules for autonomous execution.
13
+ *
14
+ * Rule evaluation order:
15
+ * 1. DENY rules for dangerous operations (evaluated first via conditions)
16
+ * 2. ALLOW rules for all known tool categories
17
+ * 3. Default ALLOW for any unlisted tools
18
+ */
19
+ export declare const DEFAULT_POLICY_RULES: PolicyRule[];
20
+ /**
21
+ * Create a copy of the default rules.
22
+ * Useful when you want to modify rules without affecting the defaults.
23
+ *
24
+ * @returns A new array with copies of the default rules
25
+ */
26
+ export declare function createDefaultPolicyRules(): PolicyRule[];