byterover-cli 0.4.1 → 1.0.1

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 (474) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  49. package/dist/core/domain/errors/connection-error.js +54 -0
  50. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  51. package/dist/core/domain/errors/core-process-error.js +43 -0
  52. package/dist/core/domain/errors/task-error.d.ts +64 -0
  53. package/dist/core/domain/errors/task-error.js +116 -0
  54. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  55. package/dist/core/domain/errors/transport-error.js +114 -0
  56. package/dist/core/domain/instance/index.d.ts +1 -0
  57. package/dist/core/domain/instance/index.js +1 -0
  58. package/dist/core/domain/instance/types.d.ts +57 -0
  59. package/dist/core/domain/instance/types.js +72 -0
  60. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  61. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  62. package/dist/core/domain/transport/index.d.ts +2 -0
  63. package/dist/core/domain/transport/index.js +2 -0
  64. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  65. package/dist/core/domain/transport/schemas.js +554 -0
  66. package/dist/core/domain/transport/types.d.ts +67 -0
  67. package/dist/core/domain/transport/types.js +7 -0
  68. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  69. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  70. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  71. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  72. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  73. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  74. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  75. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  76. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  77. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  79. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  80. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  81. package/dist/core/interfaces/cipher/index.js +11 -0
  82. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  83. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  84. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  85. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  86. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  87. package/dist/core/interfaces/cipher/message-types.js +6 -0
  88. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  89. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  90. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  91. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  92. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  93. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  94. package/dist/core/interfaces/executor/index.d.ts +2 -0
  95. package/dist/core/interfaces/executor/index.js +2 -0
  96. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  97. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  98. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  99. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  100. package/dist/core/interfaces/instance/index.d.ts +2 -0
  101. package/dist/core/interfaces/instance/index.js +2 -0
  102. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  103. package/dist/core/interfaces/noop-implementations.js +62 -0
  104. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  105. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  106. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  107. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  108. package/dist/core/interfaces/transport/index.d.ts +2 -0
  109. package/dist/core/interfaces/transport/index.js +2 -0
  110. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  111. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  112. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  113. package/dist/infra/cipher/agent/agent-error.js +79 -0
  114. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  115. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  116. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  117. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  118. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  119. package/dist/infra/cipher/agent/base-agent.js +240 -0
  120. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  121. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  122. package/dist/infra/cipher/agent/index.d.ts +22 -0
  123. package/dist/infra/cipher/agent/index.js +24 -0
  124. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  125. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  126. package/dist/infra/cipher/agent/types.d.ts +35 -0
  127. package/dist/infra/cipher/agent/types.js +1 -0
  128. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  129. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  130. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  131. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  132. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  133. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  134. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  135. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  136. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  137. package/dist/infra/cipher/consumer/index.js +2 -1
  138. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  139. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  140. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  141. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  142. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  143. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  144. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  145. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  146. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  147. package/dist/infra/cipher/interactive-loop.js +41 -33
  148. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  149. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  150. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  151. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  152. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  153. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  154. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  155. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  156. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  157. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  158. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  159. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  160. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  161. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  162. package/dist/infra/cipher/llm/context/utils.js +17 -4
  163. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  164. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  165. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  166. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  167. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  168. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  169. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  170. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  171. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  172. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  173. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  174. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  175. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  176. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  177. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  178. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  179. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  180. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  181. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  182. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  183. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  184. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  185. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  186. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  187. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  188. package/dist/infra/cipher/process/command-validator.js +75 -0
  189. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  190. package/dist/infra/cipher/process/path-utils.js +94 -0
  191. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  192. package/dist/infra/cipher/process/process-service.js +98 -17
  193. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  194. package/dist/infra/cipher/session/chat-session.js +163 -13
  195. package/dist/infra/cipher/session/index.d.ts +1 -0
  196. package/dist/infra/cipher/session/index.js +2 -0
  197. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  198. package/dist/infra/cipher/session/message-queue.js +90 -0
  199. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  200. package/dist/infra/cipher/session/session-manager.js +254 -7
  201. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  202. package/dist/infra/cipher/session/session-status.js +184 -0
  203. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  204. package/dist/infra/cipher/session/title-generator.js +31 -0
  205. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  206. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  207. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  208. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  209. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  210. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  211. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  212. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  213. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  214. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  215. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  216. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  217. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  218. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  219. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  220. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  221. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  222. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  223. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  224. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  225. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  226. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  227. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  228. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  229. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  230. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  231. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  232. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  233. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  234. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  235. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  236. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  237. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  238. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  239. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  240. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  241. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  242. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  243. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  244. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  245. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  246. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  247. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  249. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  250. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  251. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  252. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  253. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  254. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  255. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  256. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  257. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  258. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  259. package/dist/infra/cipher/tools/index.d.ts +1 -1
  260. package/dist/infra/cipher/tools/index.js +1 -1
  261. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  262. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  263. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  264. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  265. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  266. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  267. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  268. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  269. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  270. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  271. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  272. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  273. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  274. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  275. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  276. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  277. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  278. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  279. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  280. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  281. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  282. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  283. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  284. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  285. package/dist/infra/context-tree/path-utils.js +7 -0
  286. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  287. package/dist/infra/core/executors/curate-executor.js +123 -0
  288. package/dist/infra/core/executors/index.d.ts +2 -0
  289. package/dist/infra/core/executors/index.js +2 -0
  290. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  291. package/dist/infra/core/executors/query-executor.js +51 -0
  292. package/dist/infra/core/task-processor.d.ts +81 -0
  293. package/dist/infra/core/task-processor.js +115 -0
  294. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  295. package/dist/infra/instance/file-instance-discovery.js +84 -0
  296. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  297. package/dist/infra/instance/file-instance-manager.js +123 -0
  298. package/dist/infra/instance/index.d.ts +3 -0
  299. package/dist/infra/instance/index.js +3 -0
  300. package/dist/infra/instance/process-utils.d.ts +14 -0
  301. package/dist/infra/instance/process-utils.js +39 -0
  302. package/dist/infra/process/agent-worker.d.ts +20 -0
  303. package/dist/infra/process/agent-worker.js +602 -0
  304. package/dist/infra/process/index.d.ts +12 -0
  305. package/dist/infra/process/index.js +11 -0
  306. package/dist/infra/process/ipc-types.d.ts +55 -0
  307. package/dist/infra/process/ipc-types.js +12 -0
  308. package/dist/infra/process/process-manager.d.ts +154 -0
  309. package/dist/infra/process/process-manager.js +471 -0
  310. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  311. package/dist/infra/process/task-queue-manager.js +226 -0
  312. package/dist/infra/process/transport-handlers.d.ts +124 -0
  313. package/dist/infra/process/transport-handlers.js +348 -0
  314. package/dist/infra/process/transport-worker.d.ts +20 -0
  315. package/dist/infra/process/transport-worker.js +168 -0
  316. package/dist/infra/repl/commands/curate-command.js +0 -5
  317. package/dist/infra/repl/commands/query-command.js +0 -3
  318. package/dist/infra/repl/repl-startup.d.ts +4 -0
  319. package/dist/infra/repl/repl-startup.js +8 -1
  320. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  321. package/dist/infra/repl/transport-client-helper.js +96 -0
  322. package/dist/infra/transport/index.d.ts +4 -0
  323. package/dist/infra/transport/index.js +4 -0
  324. package/dist/infra/transport/port-utils.d.ts +42 -0
  325. package/dist/infra/transport/port-utils.js +84 -0
  326. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  327. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  328. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  329. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  330. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  331. package/dist/infra/transport/transport-client-factory.js +168 -0
  332. package/dist/infra/transport/transport-factory.d.ts +33 -0
  333. package/dist/infra/transport/transport-factory.js +59 -0
  334. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  335. package/dist/infra/usecase/curate-use-case.js +71 -262
  336. package/dist/infra/usecase/init-use-case.js +3 -2
  337. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  338. package/dist/infra/usecase/query-use-case.js +250 -326
  339. package/dist/infra/usecase/status-use-case.js +1 -1
  340. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  341. package/dist/resources/prompts/explore.yml +78 -0
  342. package/dist/resources/prompts/plan.yml +114 -0
  343. package/dist/resources/prompts/reflection.yml +1 -1
  344. package/dist/resources/prompts/system-prompt.yml +15 -8
  345. package/dist/resources/prompts/tool-outputs.yml +0 -5
  346. package/dist/resources/tools/bash_exec.txt +98 -0
  347. package/dist/resources/tools/bash_output.txt +40 -0
  348. package/dist/resources/tools/batch.txt +28 -0
  349. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  350. package/dist/resources/tools/curate.txt +22 -0
  351. package/dist/resources/tools/delete_memory.txt +1 -0
  352. package/dist/resources/tools/detect_domains.txt +11 -0
  353. package/dist/resources/tools/edit_file.txt +1 -0
  354. package/dist/resources/tools/edit_memory.txt +1 -0
  355. package/dist/resources/tools/glob_files.txt +20 -0
  356. package/dist/resources/tools/grep_content.txt +18 -0
  357. package/dist/resources/tools/kill_process.txt +16 -0
  358. package/dist/resources/tools/list_directory.txt +16 -0
  359. package/dist/resources/tools/list_memories.txt +1 -0
  360. package/dist/resources/tools/read_file.txt +31 -0
  361. package/dist/resources/tools/read_memory.txt +1 -0
  362. package/dist/resources/tools/read_todos.txt +17 -0
  363. package/dist/resources/tools/search_history.txt +1 -0
  364. package/dist/resources/tools/task.txt +23 -0
  365. package/dist/resources/tools/write_file.txt +1 -0
  366. package/dist/resources/tools/write_memory.txt +1 -0
  367. package/dist/resources/tools/write_todos.txt +29 -0
  368. package/dist/tui/app.js +9 -13
  369. package/dist/tui/components/command-details.d.ts +14 -0
  370. package/dist/tui/components/command-details.js +35 -0
  371. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  372. package/dist/tui/components/execution/execution-changes.js +19 -4
  373. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  374. package/dist/tui/components/execution/execution-content.js +26 -13
  375. package/dist/tui/components/execution/execution-input.js +3 -3
  376. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  377. package/dist/tui/components/execution/execution-progress.js +8 -6
  378. package/dist/tui/components/execution/log-item.d.ts +3 -4
  379. package/dist/tui/components/execution/log-item.js +2 -5
  380. package/dist/tui/components/footer.js +9 -4
  381. package/dist/tui/components/header.d.ts +3 -3
  382. package/dist/tui/components/header.js +5 -3
  383. package/dist/tui/components/index.d.ts +1 -0
  384. package/dist/tui/components/index.js +1 -0
  385. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  386. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  387. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  388. package/dist/tui/components/scrollable-list.js +12 -10
  389. package/dist/tui/components/suggestions.js +39 -41
  390. package/dist/tui/components/tab-bar.d.ts +2 -1
  391. package/dist/tui/components/tab-bar.js +3 -4
  392. package/dist/tui/constants.d.ts +0 -5
  393. package/dist/tui/constants.js +0 -5
  394. package/dist/tui/contexts/auth-context.js +9 -2
  395. package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
  396. package/dist/tui/contexts/index.d.ts +6 -1
  397. package/dist/tui/contexts/index.js +6 -1
  398. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  399. package/dist/tui/contexts/onboarding-context.js +9 -9
  400. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  401. package/dist/tui/contexts/tasks-context.js +218 -0
  402. package/dist/tui/contexts/transport-context.d.ts +29 -0
  403. package/dist/tui/contexts/transport-context.js +82 -0
  404. package/dist/tui/hooks/index.d.ts +10 -6
  405. package/dist/tui/hooks/index.js +7 -6
  406. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  407. package/dist/tui/hooks/use-activity-logs.js +87 -34
  408. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  409. package/dist/tui/hooks/use-auth-polling.js +104 -0
  410. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  411. package/dist/tui/hooks/use-slash-completion.js +1 -1
  412. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  413. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  414. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  415. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  416. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  417. package/dist/tui/hooks/use-ui-heights.js +88 -0
  418. package/dist/tui/providers/app-providers.js +2 -6
  419. package/dist/tui/types/commands.d.ts +0 -26
  420. package/dist/tui/types/index.d.ts +1 -1
  421. package/dist/tui/types/ui.d.ts +9 -4
  422. package/dist/tui/utils/line.d.ts +11 -0
  423. package/dist/tui/utils/line.js +16 -0
  424. package/dist/tui/utils/log.d.ts +27 -0
  425. package/dist/tui/utils/log.js +114 -0
  426. package/dist/tui/views/command-view.d.ts +7 -0
  427. package/dist/tui/views/command-view.js +103 -80
  428. package/dist/tui/views/login-view.js +7 -4
  429. package/dist/tui/views/logs-view.d.ts +13 -0
  430. package/dist/tui/views/logs-view.js +27 -52
  431. package/dist/utils/connection-error-handler.d.ts +16 -0
  432. package/dist/utils/connection-error-handler.js +49 -0
  433. package/dist/utils/crash-log.d.ts +14 -0
  434. package/dist/utils/crash-log.js +19 -0
  435. package/dist/utils/file-helpers.d.ts +14 -0
  436. package/dist/utils/file-helpers.js +21 -0
  437. package/dist/utils/global-logs-path.d.ts +11 -0
  438. package/dist/utils/global-logs-path.js +37 -0
  439. package/dist/utils/process-logger.d.ts +53 -0
  440. package/dist/utils/process-logger.js +253 -0
  441. package/dist/utils/sandbox-detector.d.ts +31 -0
  442. package/dist/utils/sandbox-detector.js +122 -0
  443. package/oclif.manifest.json +10 -198
  444. package/package.json +5 -1
  445. package/dist/commands/cipher-agent/run.d.ts +0 -142
  446. package/dist/commands/cipher-agent/run.js +0 -555
  447. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  448. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  449. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  450. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  451. package/dist/commands/foo.d.ts +0 -14
  452. package/dist/commands/foo.js +0 -66
  453. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  454. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  455. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  456. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  457. package/dist/infra/cipher/cipher-agent.js +0 -317
  458. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  459. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  460. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  461. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  462. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  463. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  464. package/dist/tui/contexts/consumer.d.ts +0 -31
  465. package/dist/tui/contexts/consumer.js +0 -56
  466. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  467. package/dist/tui/hooks/use-consumer.js +0 -50
  468. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  469. package/dist/tui/hooks/use-queue-polling.js +0 -90
  470. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  471. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  472. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  473. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  474. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,3 @@
1
+ export { LoggingPlugin } from './logging-plugin.js';
2
+ export { ToolPluginManager } from './plugin-manager.js';
3
+ export type { BeforeTriggerResult } from './plugin-manager.js';
@@ -0,0 +1,2 @@
1
+ export { LoggingPlugin } from './logging-plugin.js';
2
+ export { ToolPluginManager } from './plugin-manager.js';
@@ -0,0 +1,28 @@
1
+ import type { ToolExecutionResult } from '../../../../core/domain/cipher/tools/tool-error.js';
2
+ import type { ILogger } from '../../../../core/interfaces/cipher/i-logger.js';
3
+ import type { BeforeHookResult, IToolPlugin, ToolHookContext } from '../../../../core/interfaces/cipher/i-tool-plugin.js';
4
+ /**
5
+ * Example plugin that logs tool execution.
6
+ *
7
+ * Demonstrates how to implement the IToolPlugin interface
8
+ * for logging/auditing purposes.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const logger = createLogger('tools')
13
+ * const loggingPlugin = new LoggingPlugin(logger)
14
+ * pluginManager.register(loggingPlugin)
15
+ * ```
16
+ */
17
+ export declare class LoggingPlugin implements IToolPlugin {
18
+ readonly name = "logging";
19
+ readonly priority = 1;
20
+ private readonly logger;
21
+ constructor(logger: ILogger);
22
+ afterExecute(ctx: ToolHookContext, _args: Record<string, unknown>, result: ToolExecutionResult): void;
23
+ beforeExecute(ctx: ToolHookContext, args: Record<string, unknown>): BeforeHookResult;
24
+ /**
25
+ * Sanitize args for logging (truncate large values, redact sensitive data).
26
+ */
27
+ private sanitizeArgs;
28
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Example plugin that logs tool execution.
3
+ *
4
+ * Demonstrates how to implement the IToolPlugin interface
5
+ * for logging/auditing purposes.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const logger = createLogger('tools')
10
+ * const loggingPlugin = new LoggingPlugin(logger)
11
+ * pluginManager.register(loggingPlugin)
12
+ * ```
13
+ */
14
+ export class LoggingPlugin {
15
+ name = 'logging';
16
+ priority = 1; // Execute early to capture all events
17
+ logger;
18
+ constructor(logger) {
19
+ this.logger = logger;
20
+ }
21
+ afterExecute(ctx, _args, result) {
22
+ const duration = result.metadata?.durationMs ?? 'unknown';
23
+ if (result.success) {
24
+ this.logger.debug(`[Tool] ${ctx.toolName} completed in ${duration}ms`, {
25
+ callId: ctx.callId,
26
+ sessionId: ctx.sessionId,
27
+ });
28
+ }
29
+ else {
30
+ this.logger.warn(`[Tool] ${ctx.toolName} failed in ${duration}ms: ${result.errorMessage}`, {
31
+ callId: ctx.callId,
32
+ errorType: result.errorType,
33
+ sessionId: ctx.sessionId,
34
+ });
35
+ }
36
+ }
37
+ beforeExecute(ctx, args) {
38
+ this.logger.debug(`[Tool] ${ctx.toolName} starting`, {
39
+ args: this.sanitizeArgs(args),
40
+ callId: ctx.callId,
41
+ sessionId: ctx.sessionId,
42
+ });
43
+ return { proceed: true };
44
+ }
45
+ /**
46
+ * Sanitize args for logging (truncate large values, redact sensitive data).
47
+ */
48
+ sanitizeArgs(args) {
49
+ const sanitized = {};
50
+ const maxLength = 200;
51
+ for (const [key, value] of Object.entries(args)) {
52
+ // Redact potentially sensitive fields
53
+ if (key.toLowerCase().includes('password') || key.toLowerCase().includes('secret')) {
54
+ sanitized[key] = '[REDACTED]';
55
+ continue;
56
+ }
57
+ // Truncate long strings
58
+ if (typeof value === 'string' && value.length > maxLength) {
59
+ sanitized[key] = `${value.slice(0, maxLength)}... (${value.length} chars)`;
60
+ continue;
61
+ }
62
+ sanitized[key] = value;
63
+ }
64
+ return sanitized;
65
+ }
66
+ }
@@ -0,0 +1,81 @@
1
+ import type { ToolExecutionResult } from '../../../../core/domain/cipher/tools/tool-error.js';
2
+ import type { IToolPlugin, ToolHookContext } from '../../../../core/interfaces/cipher/i-tool-plugin.js';
3
+ /**
4
+ * Result from triggering before hooks.
5
+ */
6
+ export interface BeforeTriggerResult {
7
+ /** Modified arguments (may differ from original if plugins transformed them) */
8
+ args: Record<string, unknown>;
9
+ /** Whether to proceed with execution */
10
+ proceed: boolean;
11
+ /** Reason for blocking (if proceed is false) */
12
+ reason?: string;
13
+ }
14
+ /**
15
+ * Manages tool execution plugins.
16
+ *
17
+ * Provides a plugin system for extending tool behavior with before/after hooks.
18
+ * Plugins are executed in priority order (lower priority = earlier execution).
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const manager = new ToolPluginManager()
23
+ * manager.register(loggingPlugin)
24
+ * manager.register(validationPlugin)
25
+ *
26
+ * // Before execution
27
+ * const { proceed, args } = await manager.triggerBefore(ctx, originalArgs)
28
+ * if (!proceed) return error
29
+ *
30
+ * // Execute tool...
31
+ *
32
+ * // After execution
33
+ * await manager.triggerAfter(ctx, args, result)
34
+ * ```
35
+ */
36
+ export declare class ToolPluginManager {
37
+ private static readonly DEFAULT_PRIORITY;
38
+ private plugins;
39
+ /**
40
+ * Get all registered plugins.
41
+ * @returns Array of registered plugins in priority order
42
+ */
43
+ getPlugins(): readonly IToolPlugin[];
44
+ /**
45
+ * Register a plugin.
46
+ * Plugins are automatically sorted by priority after registration.
47
+ *
48
+ * @param plugin - Plugin to register
49
+ */
50
+ register(plugin: IToolPlugin): void;
51
+ /**
52
+ * Trigger all afterExecute hooks.
53
+ * Errors in individual plugins are caught and logged but don't propagate.
54
+ *
55
+ * @param ctx - Hook context
56
+ * @param args - Arguments that were passed to the tool
57
+ * @param result - Tool execution result
58
+ */
59
+ triggerAfter(ctx: ToolHookContext, args: Record<string, unknown>, result: ToolExecutionResult): Promise<void>;
60
+ /**
61
+ * Trigger all beforeExecute hooks in priority order.
62
+ * If any plugin returns proceed: false, execution stops and returns that result.
63
+ * Arguments can be transformed by plugins (each receives the previous plugin's output).
64
+ *
65
+ * @param ctx - Hook context
66
+ * @param args - Original arguments
67
+ * @returns Result indicating whether to proceed and final arguments
68
+ */
69
+ triggerBefore(ctx: ToolHookContext, args: Record<string, unknown>): Promise<BeforeTriggerResult>;
70
+ /**
71
+ * Unregister a plugin by name.
72
+ *
73
+ * @param name - Name of the plugin to unregister
74
+ * @returns True if a plugin was removed
75
+ */
76
+ unregister(name: string): boolean;
77
+ /**
78
+ * Sort plugins by priority (ascending).
79
+ */
80
+ private sortByPriority;
81
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Manages tool execution plugins.
3
+ *
4
+ * Provides a plugin system for extending tool behavior with before/after hooks.
5
+ * Plugins are executed in priority order (lower priority = earlier execution).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const manager = new ToolPluginManager()
10
+ * manager.register(loggingPlugin)
11
+ * manager.register(validationPlugin)
12
+ *
13
+ * // Before execution
14
+ * const { proceed, args } = await manager.triggerBefore(ctx, originalArgs)
15
+ * if (!proceed) return error
16
+ *
17
+ * // Execute tool...
18
+ *
19
+ * // After execution
20
+ * await manager.triggerAfter(ctx, args, result)
21
+ * ```
22
+ */
23
+ export class ToolPluginManager {
24
+ static DEFAULT_PRIORITY = 100;
25
+ plugins = [];
26
+ /**
27
+ * Get all registered plugins.
28
+ * @returns Array of registered plugins in priority order
29
+ */
30
+ getPlugins() {
31
+ return this.plugins;
32
+ }
33
+ /**
34
+ * Register a plugin.
35
+ * Plugins are automatically sorted by priority after registration.
36
+ *
37
+ * @param plugin - Plugin to register
38
+ */
39
+ register(plugin) {
40
+ this.plugins.push(plugin);
41
+ this.sortByPriority();
42
+ }
43
+ /**
44
+ * Trigger all afterExecute hooks.
45
+ * Errors in individual plugins are caught and logged but don't propagate.
46
+ *
47
+ * @param ctx - Hook context
48
+ * @param args - Arguments that were passed to the tool
49
+ * @param result - Tool execution result
50
+ */
51
+ async triggerAfter(ctx, args, result) {
52
+ const promises = this.plugins
53
+ .filter((plugin) => plugin.afterExecute)
54
+ .map(async (plugin) => {
55
+ try {
56
+ await plugin.afterExecute(ctx, args, result);
57
+ }
58
+ catch (error) {
59
+ console.warn(`Plugin ${plugin.name} afterExecute failed:`, error);
60
+ }
61
+ });
62
+ await Promise.all(promises);
63
+ }
64
+ /**
65
+ * Trigger all beforeExecute hooks in priority order.
66
+ * If any plugin returns proceed: false, execution stops and returns that result.
67
+ * Arguments can be transformed by plugins (each receives the previous plugin's output).
68
+ *
69
+ * @param ctx - Hook context
70
+ * @param args - Original arguments
71
+ * @returns Result indicating whether to proceed and final arguments
72
+ */
73
+ async triggerBefore(ctx, args) {
74
+ const pluginsWithBefore = this.plugins.filter((plugin) => plugin.beforeExecute);
75
+ // Sequential execution required: each plugin may modify args for the next
76
+ const processPlugin = async (index, currentArgs) => {
77
+ if (index >= pluginsWithBefore.length) {
78
+ return {
79
+ args: currentArgs,
80
+ proceed: true,
81
+ };
82
+ }
83
+ const plugin = pluginsWithBefore[index];
84
+ try {
85
+ const result = await plugin.beforeExecute(ctx, currentArgs);
86
+ if (!result.proceed) {
87
+ return {
88
+ args: currentArgs,
89
+ proceed: false,
90
+ reason: result.reason,
91
+ };
92
+ }
93
+ const nextArgs = result.args ?? currentArgs;
94
+ return processPlugin(index + 1, nextArgs);
95
+ }
96
+ catch (error) {
97
+ console.warn(`Plugin ${plugin.name} beforeExecute failed:`, error);
98
+ // Continue with next plugin on error
99
+ return processPlugin(index + 1, currentArgs);
100
+ }
101
+ };
102
+ return processPlugin(0, { ...args });
103
+ }
104
+ /**
105
+ * Unregister a plugin by name.
106
+ *
107
+ * @param name - Name of the plugin to unregister
108
+ * @returns True if a plugin was removed
109
+ */
110
+ unregister(name) {
111
+ const initialLength = this.plugins.length;
112
+ this.plugins = this.plugins.filter((p) => p.name !== name);
113
+ return this.plugins.length < initialLength;
114
+ }
115
+ /**
116
+ * Sort plugins by priority (ascending).
117
+ */
118
+ sortByPriority() {
119
+ this.plugins.sort((a, b) => (a.priority ?? ToolPluginManager.DEFAULT_PRIORITY) -
120
+ (b.priority ?? ToolPluginManager.DEFAULT_PRIORITY));
121
+ }
122
+ }
@@ -0,0 +1 @@
1
+ export { ToolMetadataHandler } from './metadata-handler.js';
@@ -0,0 +1 @@
1
+ export { ToolMetadataHandler } from './metadata-handler.js';
@@ -0,0 +1,31 @@
1
+ import type { MetadataCallback } from '../../../../core/domain/cipher/tools/types.js';
2
+ import type { SessionEventBus } from '../../events/event-emitter.js';
3
+ /**
4
+ * Handles real-time metadata streaming from tools during execution.
5
+ *
6
+ * Creates metadata callbacks that tools can use to push updates
7
+ * (e.g., streaming bash output) which are then emitted as events.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const handler = new ToolMetadataHandler(eventBus)
12
+ * const callback = handler.createCallback('call_123', 'bash_exec')
13
+ *
14
+ * // Tool can now stream updates:
15
+ * callback({ output: 'Building...\n', description: 'Running npm build' })
16
+ * callback({ output: 'Done!\n', progress: 100 })
17
+ * ```
18
+ */
19
+ export declare class ToolMetadataHandler {
20
+ private readonly eventBus;
21
+ constructor(eventBus: SessionEventBus);
22
+ /**
23
+ * Creates a metadata callback for a specific tool call.
24
+ * The callback will emit 'llmservice:toolMetadata' events when invoked.
25
+ *
26
+ * @param callId - Unique identifier for the tool call
27
+ * @param toolName - Name of the tool being executed
28
+ * @returns Callback function for the tool to push metadata updates
29
+ */
30
+ createCallback(callId: string, toolName: string): MetadataCallback;
31
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Handles real-time metadata streaming from tools during execution.
3
+ *
4
+ * Creates metadata callbacks that tools can use to push updates
5
+ * (e.g., streaming bash output) which are then emitted as events.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const handler = new ToolMetadataHandler(eventBus)
10
+ * const callback = handler.createCallback('call_123', 'bash_exec')
11
+ *
12
+ * // Tool can now stream updates:
13
+ * callback({ output: 'Building...\n', description: 'Running npm build' })
14
+ * callback({ output: 'Done!\n', progress: 100 })
15
+ * ```
16
+ */
17
+ export class ToolMetadataHandler {
18
+ eventBus;
19
+ constructor(eventBus) {
20
+ this.eventBus = eventBus;
21
+ }
22
+ /**
23
+ * Creates a metadata callback for a specific tool call.
24
+ * The callback will emit 'llmservice:toolMetadata' events when invoked.
25
+ *
26
+ * @param callId - Unique identifier for the tool call
27
+ * @param toolName - Name of the tool being executed
28
+ * @returns Callback function for the tool to push metadata updates
29
+ */
30
+ createCallback(callId, toolName) {
31
+ return (update) => {
32
+ this.eventBus.emit('llmservice:toolMetadata', {
33
+ callId,
34
+ metadata: update,
35
+ toolName,
36
+ });
37
+ };
38
+ }
39
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Loads tool descriptions from external .txt files.
3
+ *
4
+ * This service enables tool descriptions to be stored in external files
5
+ * for easier editing without code changes. It implements lazy loading
6
+ * with caching for performance, following the same pattern as SimplePromptFactory.
7
+ *
8
+ * Features:
9
+ * - Lazy loading: Descriptions are only loaded when requested
10
+ * - Caching: Loaded descriptions are cached to avoid repeated file reads
11
+ * - Fallback: Returns undefined if file not found, allowing inline fallback
12
+ * - Path resolution: Handles compiled dist vs source paths automatically
13
+ */
14
+ export declare class ToolDescriptionLoader {
15
+ private readonly basePath;
16
+ private readonly cache;
17
+ /**
18
+ * Creates a new tool description loader.
19
+ *
20
+ * @param basePath - Base path for tool description files.
21
+ * Defaults to dist/resources/tools/ relative to this file.
22
+ */
23
+ constructor(basePath?: string);
24
+ /**
25
+ * Clear the description cache.
26
+ * Useful for testing or hot-reloading descriptions.
27
+ */
28
+ clearCache(): void;
29
+ /**
30
+ * Get the base path for tool descriptions.
31
+ *
32
+ * @returns The base path being used for loading descriptions
33
+ */
34
+ getBasePath(): string;
35
+ /**
36
+ * Check if a description file exists for a tool.
37
+ *
38
+ * @param toolName - Name of the tool
39
+ * @returns True if the description file exists
40
+ */
41
+ has(toolName: string): boolean;
42
+ /**
43
+ * Load description for a tool from its .txt file.
44
+ *
45
+ * @param toolName - Name of the tool (e.g., 'bash_exec')
46
+ * @returns Description text, or undefined if file not found
47
+ */
48
+ load(toolName: string): string | undefined;
49
+ /**
50
+ * Preload descriptions for multiple tools.
51
+ * Useful for batch initialization.
52
+ *
53
+ * @param toolNames - Array of tool names to preload
54
+ * @returns Map of tool names to their descriptions (excludes not found)
55
+ */
56
+ preload(toolNames: string[]): Map<string, string>;
57
+ }
@@ -0,0 +1,108 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ /**
5
+ * Loads tool descriptions from external .txt files.
6
+ *
7
+ * This service enables tool descriptions to be stored in external files
8
+ * for easier editing without code changes. It implements lazy loading
9
+ * with caching for performance, following the same pattern as SimplePromptFactory.
10
+ *
11
+ * Features:
12
+ * - Lazy loading: Descriptions are only loaded when requested
13
+ * - Caching: Loaded descriptions are cached to avoid repeated file reads
14
+ * - Fallback: Returns undefined if file not found, allowing inline fallback
15
+ * - Path resolution: Handles compiled dist vs source paths automatically
16
+ */
17
+ export class ToolDescriptionLoader {
18
+ basePath;
19
+ cache = new Map();
20
+ /**
21
+ * Creates a new tool description loader.
22
+ *
23
+ * @param basePath - Base path for tool description files.
24
+ * Defaults to dist/resources/tools/ relative to this file.
25
+ */
26
+ constructor(basePath) {
27
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
28
+ // When compiled: dist/infra/cipher/tools/tool-description-loader.js
29
+ // Resources are at: dist/resources/tools/
30
+ // So we need to go up 3 levels: ../../../resources/tools
31
+ this.basePath = basePath ?? path.join(currentDir, '../../../resources/tools');
32
+ }
33
+ /**
34
+ * Clear the description cache.
35
+ * Useful for testing or hot-reloading descriptions.
36
+ */
37
+ clearCache() {
38
+ this.cache.clear();
39
+ }
40
+ /**
41
+ * Get the base path for tool descriptions.
42
+ *
43
+ * @returns The base path being used for loading descriptions
44
+ */
45
+ getBasePath() {
46
+ return this.basePath;
47
+ }
48
+ /**
49
+ * Check if a description file exists for a tool.
50
+ *
51
+ * @param toolName - Name of the tool
52
+ * @returns True if the description file exists
53
+ */
54
+ has(toolName) {
55
+ // Check cache first
56
+ if (this.cache.has(toolName)) {
57
+ return true;
58
+ }
59
+ // Check file system
60
+ const filePath = path.join(this.basePath, `${toolName}.txt`);
61
+ return fs.existsSync(filePath);
62
+ }
63
+ /**
64
+ * Load description for a tool from its .txt file.
65
+ *
66
+ * @param toolName - Name of the tool (e.g., 'bash_exec')
67
+ * @returns Description text, or undefined if file not found
68
+ */
69
+ load(toolName) {
70
+ // Check cache first
71
+ if (this.cache.has(toolName)) {
72
+ return this.cache.get(toolName);
73
+ }
74
+ // Build file path
75
+ const filePath = path.join(this.basePath, `${toolName}.txt`);
76
+ // Check if file exists
77
+ if (!fs.existsSync(filePath)) {
78
+ return undefined;
79
+ }
80
+ // Load and cache the description
81
+ try {
82
+ const description = fs.readFileSync(filePath, 'utf8').trim();
83
+ this.cache.set(toolName, description);
84
+ return description;
85
+ }
86
+ catch {
87
+ // Return undefined on read errors (e.g., permission issues)
88
+ return undefined;
89
+ }
90
+ }
91
+ /**
92
+ * Preload descriptions for multiple tools.
93
+ * Useful for batch initialization.
94
+ *
95
+ * @param toolNames - Array of tool names to preload
96
+ * @returns Map of tool names to their descriptions (excludes not found)
97
+ */
98
+ preload(toolNames) {
99
+ const loaded = new Map();
100
+ for (const toolName of toolNames) {
101
+ const description = this.load(toolName);
102
+ if (description !== undefined) {
103
+ loaded.set(toolName, description);
104
+ }
105
+ }
106
+ return loaded;
107
+ }
108
+ }
@@ -1,6 +1,7 @@
1
- import type { ToolSet } from '../../../core/domain/cipher/tools/types.js';
1
+ import type { ToolExecutionContext, ToolSet } from '../../../core/domain/cipher/tools/types.js';
2
2
  import type { IToolProvider } from '../../../core/interfaces/cipher/i-tool-provider.js';
3
3
  import type { IToolScheduler } from '../../../core/interfaces/cipher/i-tool-scheduler.js';
4
+ import type { ToolPluginManager } from './plugins/plugin-manager.js';
4
5
  import type { ToolMarker } from './tool-markers.js';
5
6
  import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool-error.js';
6
7
  /**
@@ -11,6 +12,7 @@ import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool
11
12
  *
12
13
  * Features:
13
14
  * - Optional scheduler integration for policy-based execution
15
+ * - Optional plugin system for before/after execution hooks
14
16
  * - Tool caching for performance
15
17
  * - Structured error handling with classification
16
18
  *
@@ -18,6 +20,11 @@ import { type ToolExecutionResult } from '../../../core/domain/cipher/tools/tool
18
20
  * 1. Policy check (ALLOW/DENY)
19
21
  * 2. Execution (if allowed)
20
22
  *
23
+ * When a plugin manager is provided, execution flows through:
24
+ * 1. Before hooks (can modify args or block execution)
25
+ * 2. Tool execution
26
+ * 3. After hooks (for logging, auditing, etc.)
27
+ *
21
28
  * Without a scheduler, tools execute directly via the provider.
22
29
  */
23
30
  export declare class ToolManager {
@@ -30,6 +37,8 @@ export declare class ToolManager {
30
37
  */
31
38
  private static readonly QUERY_TOOL_NAMES;
32
39
  private cacheValid;
40
+ private callIdCounter;
41
+ private readonly pluginManager?;
33
42
  private readonly scheduler?;
34
43
  private readonly toolProvider;
35
44
  private toolsCache;
@@ -38,8 +47,9 @@ export declare class ToolManager {
38
47
  *
39
48
  * @param toolProvider - Tool provider instance
40
49
  * @param scheduler - Optional tool scheduler for policy-based execution
50
+ * @param pluginManager - Optional plugin manager for before/after hooks
41
51
  */
42
- constructor(toolProvider: IToolProvider, scheduler?: IToolScheduler);
52
+ constructor(toolProvider: IToolProvider, scheduler?: IToolScheduler, pluginManager?: ToolPluginManager);
43
53
  /**
44
54
  * Execute a tool by name with structured error handling.
45
55
  *
@@ -47,7 +57,12 @@ export declare class ToolManager {
47
57
  * error classification, and metadata. This enables better error handling
48
58
  * and provides actionable feedback to the LLM.
49
59
  *
50
- * When a scheduler is configured, execution flows through:
60
+ * When a plugin manager is configured, execution flows through:
61
+ * 1. Before hooks (can modify args or block execution)
62
+ * 2. Tool execution (via scheduler or provider)
63
+ * 3. After hooks (for logging, auditing, etc.)
64
+ *
65
+ * When a scheduler is configured, tool execution flows through:
51
66
  * 1. Policy check (ALLOW/DENY)
52
67
  * 2. Execution (if allowed)
53
68
  *
@@ -56,9 +71,10 @@ export declare class ToolManager {
56
71
  * @param toolName - Name of the tool to execute
57
72
  * @param args - Tool arguments (validated by provider)
58
73
  * @param sessionId - Optional session ID for context
74
+ * @param context - Optional execution context (includes metadata callback for streaming)
59
75
  * @returns Structured tool execution result
60
76
  */
61
- executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<ToolExecutionResult>;
77
+ executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string, context?: ToolExecutionContext): Promise<ToolExecutionResult>;
62
78
  /**
63
79
  * Get all available tools in JSON Schema format.
64
80
  * Results are cached for performance.
@@ -101,6 +117,20 @@ export declare class ToolManager {
101
117
  * @returns Array of tool names with the specified marker
102
118
  */
103
119
  getToolsByMarker(marker: ToolMarker): string[];
120
+ /**
121
+ * Get filtered tools based on agent configuration.
122
+ * Uses the agent registry to determine which tools are enabled/disabled for the agent.
123
+ *
124
+ * Tool filtering rules from agent.tools config:
125
+ * - `{ '*': false }` - Disable all tools
126
+ * - `{ '*': false, 'tool_name': true }` - Only enable specific tools
127
+ * - `{ 'tool_name': false }` - Disable specific tools, keep others enabled
128
+ * - `{}` or undefined - All tools enabled (default)
129
+ *
130
+ * @param agentName - The agent name (e.g., 'plan', 'query', 'curate')
131
+ * @returns Filtered tool set based on agent configuration
132
+ */
133
+ getToolsForAgent(agentName: string): ToolSet;
104
134
  /**
105
135
  * Get filtered tools based on command type.
106
136
  * For 'query' command, returns only read-only discovery tools.
@@ -133,6 +163,10 @@ export declare class ToolManager {
133
163
  * - Manual cache clearing needed
134
164
  */
135
165
  refresh(): void;
166
+ /**
167
+ * Generates a unique call ID for tool execution.
168
+ */
169
+ private generateCallId;
136
170
  /**
137
171
  * Invalidates the tool cache.
138
172
  * Next call to getAllTools() will rebuild the cache.