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
@@ -12,11 +12,17 @@ export interface IChatSession {
12
12
  */
13
13
  cancel(): void;
14
14
  /**
15
- * Dispose of the session and clean up resources.
15
+ * Cleanup session resources but preserve history for later restoration.
16
+ * Call this when ending a session temporarily (e.g., user navigates away).
17
+ * History remains persisted; event listeners stay for potential reactivation.
18
+ */
19
+ cleanup(): void;
20
+ /**
21
+ * Dispose of the session completely and clean up all resources.
16
22
  * Removes event listeners to prevent memory leaks.
17
- * Should be called when session is no longer needed.
23
+ * Should be called when session is permanently no longer needed.
18
24
  */
19
- dispose?(): void;
25
+ dispose(): void;
20
26
  /**
21
27
  * Get the conversation history.
22
28
  *
@@ -49,8 +55,8 @@ export interface IChatSession {
49
55
  *
50
56
  * @param input - User message content
51
57
  * @param options - Optional execution options
52
- * @param options.mode - Optional mode for system prompt ('autonomous' enables autonomous mode)
53
58
  * @param options.executionContext - Optional execution context
59
+ * @param options.taskId - Optional task ID for concurrent task isolation (included in all emitted events)
54
60
  * @returns Assistant response
55
61
  * @throws SessionCancelledError if operation is cancelled
56
62
  * @throws MaxIterationsExceededError if tool loop exceeds maximum iterations
@@ -58,6 +64,42 @@ export interface IChatSession {
58
64
  */
59
65
  run(input: string, options?: {
60
66
  executionContext?: ExecutionContext;
61
- mode?: 'autonomous' | 'default' | 'query';
67
+ taskId?: string;
62
68
  }): Promise<string>;
69
+ /**
70
+ * Send a message, queuing if the session is busy executing.
71
+ * If the session is idle, executes immediately via run().
72
+ * If the session is busy, queues the message and returns the queue position.
73
+ *
74
+ * @param input - User message content
75
+ * @param options - Optional execution options and attachments
76
+ * @param options.executionContext - Optional execution context for the LLM
77
+ * @param options.fileData - Optional file attachment
78
+ * @param options.imageData - Optional image attachment
79
+ * @returns Response string if executed, or queue info if queued
80
+ */
81
+ sendMessage(input: string, options?: {
82
+ executionContext?: ExecutionContext;
83
+ fileData?: unknown;
84
+ imageData?: unknown;
85
+ }): Promise<string | {
86
+ position: number;
87
+ queued: true;
88
+ }>;
89
+ /**
90
+ * Stream execution with real-time event emission.
91
+ * Unlike run(), this does not return a response directly - events are yielded via the agent's stream().
92
+ * Emits run:complete event when finished.
93
+ *
94
+ * @param input - User message
95
+ * @param options - Execution options with optional signal for cancellation
96
+ * @param options.executionContext - Optional execution context for the LLM
97
+ * @param options.signal - Optional AbortSignal for cancellation
98
+ * @param options.taskId - Optional task ID for concurrent task isolation (included in all emitted events)
99
+ */
100
+ streamRun(input: string, options?: {
101
+ executionContext?: ExecutionContext;
102
+ signal?: AbortSignal;
103
+ taskId?: string;
104
+ }): Promise<void>;
63
105
  }
@@ -1,5 +1,6 @@
1
1
  import type { TerminationReason } from '../../domain/cipher/agent/agent-state.js';
2
2
  import type { SessionMetadata } from '../../domain/cipher/storage/history-types.js';
3
+ import type { GenerateResponse, StreamingEvent, StreamOptions } from '../../domain/cipher/streaming/types.js';
3
4
  import type { ConversationMetadata } from '../../domain/cipher/system-prompt/types.js';
4
5
  /**
5
6
  * Execution context for the agent
@@ -7,7 +8,7 @@ import type { ConversationMetadata } from '../../domain/cipher/system-prompt/typ
7
8
  */
8
9
  export interface ExecutionContext {
9
10
  /** Command type that initiated the execution (for command-specific prompt loading) */
10
- commandType?: 'curate' | 'query';
11
+ commandType?: 'chat' | 'curate' | 'query';
11
12
  /** Metadata about the conversation (for JSON input mode) */
12
13
  conversationMetadata?: ConversationMetadata;
13
14
  /** File reference instructions for agent to read files (for curate command with --files flag) */
@@ -48,6 +49,13 @@ export interface AgentState {
48
49
  * Provides an agentic execution layer on top of the LLM service
49
50
  */
50
51
  export interface ICipherAgent {
52
+ /**
53
+ * Cancels the currently running turn for the agent's default session.
54
+ * Safe to call even if no run is in progress.
55
+ *
56
+ * @returns true if a run was in progress and was signaled to abort; false otherwise
57
+ */
58
+ cancel(): Promise<boolean>;
51
59
  /**
52
60
  * Delete a session completely (memory + history)
53
61
  * @param sessionId - Session ID to delete
@@ -55,12 +63,29 @@ export interface ICipherAgent {
55
63
  */
56
64
  deleteSession(sessionId: string): Promise<boolean>;
57
65
  /**
58
- * Execute the agent with user input
66
+ * Execute the agent with user input.
67
+ * Uses the agent's default session (created during start()).
68
+ *
59
69
  * @param input - User input string
60
- * @param sessionId - Optional session ID
70
+ * @param options - Optional execution options
71
+ * @param options.executionContext - Optional context for command-specific behavior (curate/query/chat)
72
+ * @param options.taskId - Optional task ID for event routing (required for concurrent task isolation)
61
73
  * @returns Agent response
62
74
  */
63
- execute(input: string, sessionId?: string): Promise<string>;
75
+ execute(input: string, options?: {
76
+ executionContext?: ExecutionContext;
77
+ taskId?: string;
78
+ }): Promise<string>;
79
+ /**
80
+ * Generate a complete response (waits for full completion).
81
+ * Wrapper around stream() that collects all events and returns final result.
82
+ * Uses the agent's default session (created during start()).
83
+ *
84
+ * @param input - User message
85
+ * @param options - Optional configuration (signal for cancellation, taskId for billing)
86
+ * @returns Complete response with content, usage, and tool calls
87
+ */
88
+ generate(input: string, options?: StreamOptions): Promise<GenerateResponse>;
64
89
  /**
65
90
  * Get session metadata without loading full history
66
91
  * @param sessionId - Session ID
@@ -87,4 +112,14 @@ export interface ICipherAgent {
87
112
  * Must be called before execute()
88
113
  */
89
114
  start(): Promise<void>;
115
+ /**
116
+ * Stream a response (yields events as they arrive).
117
+ * This is the recommended method for real-time streaming UI updates.
118
+ * Uses the agent's default session (created during start()).
119
+ *
120
+ * @param input - User message
121
+ * @param options - Optional configuration (signal for cancellation, taskId for billing)
122
+ * @returns AsyncIterator that yields StreamingEvent objects
123
+ */
124
+ stream(input: string, options?: StreamOptions): Promise<AsyncIterableIterator<StreamingEvent>>;
90
125
  }
@@ -33,16 +33,14 @@ export interface GenerateContentRequest {
33
33
  config: GenerationConfig;
34
34
  /** Conversation history */
35
35
  contents: InternalMessage[];
36
- /** Optional execution context (for autonomous mode, etc.) */
36
+ /** Optional execution context */
37
37
  executionContext?: ExecutionContext;
38
- /** Optional mode for system prompt ('autonomous' enables autonomous mode) */
39
- mode?: 'autonomous' | 'default' | 'query';
40
38
  /** Model identifier */
41
39
  model: string;
42
- /** Session identifier */
43
- sessionId: string;
44
40
  /** Optional system prompt */
45
41
  systemPrompt?: string;
42
+ /** Tracking task ID for backend billing metrics (random UUID per request) */
43
+ taskId: string;
46
44
  /** Available tools for function calling */
47
45
  tools?: ToolSet;
48
46
  }
@@ -1,4 +1,4 @@
1
- import type { EditFileOptions, EditOperation, EditResult, FileContent, GlobOptions, GlobResult, ReadFileOptions, SearchOptions, SearchResult, WriteFileOptions, WriteResult } from '../../domain/cipher/file-system/types.js';
1
+ import type { EditFileOptions, EditOperation, EditResult, FileContent, GlobOptions, GlobResult, ListDirectoryOptions, ListDirectoryResult, ReadFileOptions, SearchOptions, SearchResult, WriteFileOptions, WriteResult } from '../../domain/cipher/file-system/types.js';
2
2
  /**
3
3
  * Interface for file system operations.
4
4
  * Provides secure, validated access to the file system with comprehensive
@@ -32,6 +32,17 @@ export interface IFileSystem {
32
32
  * Performs setup and validation of configuration.
33
33
  */
34
34
  initialize(): Promise<void>;
35
+ /**
36
+ * List files and directories in a path.
37
+ * Returns a tree structure with default ignore patterns for build artifacts.
38
+ *
39
+ * @param dirPath - Path to directory (relative or absolute)
40
+ * @param options - List options (ignore patterns, max results)
41
+ * @returns Directory listing with tree structure
42
+ * @throws DirectoryNotFoundError if directory doesn't exist
43
+ * @throws PathNotAllowedError if path is not in allowed paths
44
+ */
45
+ listDirectory(dirPath: string, options?: ListDirectoryOptions): Promise<ListDirectoryResult>;
35
46
  /**
36
47
  * Read the contents of a file.
37
48
  *
@@ -21,23 +21,22 @@ export interface ILLMService {
21
21
  * - Returning final response
22
22
  *
23
23
  * @param textInput - User input text
24
- * @param sessionId - Session ID for tracking the conversation
25
24
  * @param options - Execution options
26
25
  * @param options.signal - Optional abort signal for cancellation
27
26
  * @param options.imageData - Optional image data
28
27
  * @param options.fileData - Optional file data
29
28
  * @param options.stream - Whether to stream the response (optional)
30
- * @param options.executionContext - Optional execution context (for autonomous mode, etc.)
31
- * @param options.mode - Optional mode for system prompt ('autonomous' enables autonomous mode)
29
+ * @param options.executionContext - Optional execution context
30
+ * @param options.taskId - Task ID from usecase for billing tracking
32
31
  * @returns Final assistant response
33
32
  */
34
- completeTask(textInput: string, sessionId: string, options?: {
33
+ completeTask(textInput: string, options?: {
35
34
  executionContext?: ExecutionContext;
36
35
  fileData?: FileData;
37
36
  imageData?: ImageData;
38
- mode?: 'autonomous' | 'default' | 'query';
39
37
  signal?: AbortSignal;
40
38
  stream?: boolean;
39
+ taskId?: string;
41
40
  }): Promise<string>;
42
41
  /**
43
42
  * Get all available tools.
@@ -0,0 +1,24 @@
1
+ import type { Todo } from '../../domain/cipher/todos/types.js';
2
+ /**
3
+ * Interface for session-based todo storage.
4
+ *
5
+ * Implementations can use different storage backends (in-memory, persistent, etc.)
6
+ * to store and retrieve todo lists per session.
7
+ */
8
+ export interface ITodoStorage {
9
+ /**
10
+ * Get todos for a specific session.
11
+ *
12
+ * @param sessionId - Unique session identifier
13
+ * @returns Promise that resolves to array of todos, empty array if not found
14
+ */
15
+ get(sessionId: string): Promise<Todo[]>;
16
+ /**
17
+ * Update (replace) todos for a specific session.
18
+ *
19
+ * @param sessionId - Unique session identifier
20
+ * @param todos - Array of todos to store
21
+ * @returns Promise that resolves when todos are saved
22
+ */
23
+ update(sessionId: string, todos: Todo[]): Promise<void>;
24
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,90 @@
1
+ import type { ToolExecutionResult } from '../../domain/cipher/tools/tool-error.js';
2
+ /**
3
+ * Context provided to plugin hooks during tool execution.
4
+ * Contains metadata about the current tool invocation.
5
+ */
6
+ export interface ToolHookContext {
7
+ /** Unique identifier for this tool call */
8
+ callId: string;
9
+ /** Session ID where the tool is being executed */
10
+ sessionId: string;
11
+ /** Name of the tool being executed */
12
+ toolName: string;
13
+ }
14
+ /**
15
+ * Result from a before-execute hook.
16
+ * Determines whether tool execution should proceed and allows argument modification.
17
+ */
18
+ export interface BeforeHookResult {
19
+ /**
20
+ * Modified arguments to use for execution.
21
+ * If provided, these replace the original arguments.
22
+ */
23
+ args?: Record<string, unknown>;
24
+ /**
25
+ * Whether to proceed with tool execution.
26
+ * If false, execution is blocked and reason should explain why.
27
+ */
28
+ proceed: boolean;
29
+ /**
30
+ * Reason for blocking execution (when proceed is false).
31
+ * Used to generate an error message for the LLM.
32
+ */
33
+ reason?: string;
34
+ }
35
+ /**
36
+ * Plugin interface for extending tool execution behavior.
37
+ *
38
+ * Plugins can intercept tool execution at two points:
39
+ * 1. beforeExecute: Called before the tool runs. Can modify args or block execution.
40
+ * 2. afterExecute: Called after the tool completes. Can log, audit, or react to results.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const loggingPlugin: IToolPlugin = {
45
+ * name: 'logging',
46
+ * priority: 1,
47
+ * beforeExecute(ctx, args) {
48
+ * console.log(`[${ctx.toolName}] Starting with args:`, args)
49
+ * return { proceed: true }
50
+ * },
51
+ * afterExecute(ctx, args, result) {
52
+ * console.log(`[${ctx.toolName}] Completed:`, result.success ? 'success' : 'error')
53
+ * }
54
+ * }
55
+ * ```
56
+ */
57
+ export interface IToolPlugin {
58
+ /**
59
+ * Called after a tool has completed execution.
60
+ * Receives the original arguments and the execution result.
61
+ *
62
+ * Use for logging, auditing, analytics, or triggering side effects.
63
+ * Errors in afterExecute are caught and logged but don't affect the result.
64
+ *
65
+ * @param ctx - Hook context with tool metadata
66
+ * @param args - Arguments that were passed to the tool
67
+ * @param result - Result from tool execution
68
+ */
69
+ afterExecute?(ctx: ToolHookContext, args: Record<string, unknown>, result: ToolExecutionResult): Promise<void> | void;
70
+ /**
71
+ * Called before a tool is executed.
72
+ * Can inspect/modify arguments or block execution entirely.
73
+ *
74
+ * @param ctx - Hook context with tool metadata
75
+ * @param args - Arguments to be passed to the tool
76
+ * @returns Result indicating whether to proceed and optionally modified args
77
+ */
78
+ beforeExecute?(ctx: ToolHookContext, args: Record<string, unknown>): BeforeHookResult | Promise<BeforeHookResult>;
79
+ /**
80
+ * Unique name for this plugin.
81
+ * Used for logging and to allow unregistering by name.
82
+ */
83
+ name: string;
84
+ /**
85
+ * Execution priority (lower = earlier).
86
+ * Plugins with lower priority numbers execute first.
87
+ * Default is 100 if not specified.
88
+ */
89
+ priority?: number;
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,5 @@
1
1
  import type { ToolMarker } from '../../../infra/cipher/tools/tool-markers.js';
2
- import type { ToolSet } from '../../domain/cipher/tools/types.js';
2
+ import type { ToolExecutionContext, ToolSet } from '../../domain/cipher/tools/types.js';
3
3
  /**
4
4
  * Interface for tool provider.
5
5
  * Manages tool registration, validation, and execution.
@@ -11,12 +11,13 @@ export interface IToolProvider {
11
11
  * @param toolName - Name of the tool to execute
12
12
  * @param args - Tool arguments (will be validated against schema)
13
13
  * @param sessionId - Optional session ID for context
14
+ * @param context - Optional execution context (includes metadata callback for streaming)
14
15
  * @returns Tool execution result
15
16
  * @throws ToolNotFoundError if tool doesn't exist
16
17
  * @throws ToolValidationError if input validation fails
17
18
  * @throws ToolExecutionError if execution fails
18
19
  */
19
- executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string): Promise<unknown>;
20
+ executeTool(toolName: string, args: Record<string, unknown>, sessionId?: string, context?: ToolExecutionContext): Promise<unknown>;
20
21
  /**
21
22
  * Get all registered tools in JSON Schema format.
22
23
  * Used to expose tools to the LLM.
@@ -62,6 +62,10 @@ export interface ToolSchedulerContext {
62
62
  * Session ID for the current session.
63
63
  */
64
64
  sessionId: string;
65
+ /**
66
+ * Task ID for billing tracking (passed from usecase to subagents).
67
+ */
68
+ taskId?: string;
65
69
  }
66
70
  /**
67
71
  * Interface for the tool scheduler.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Cipher interfaces and types.
3
+ *
4
+ * This module re-exports all cipher-related interfaces, types, and utilities.
5
+ */
6
+ export type { BlobMetadata, StoredBlob } from '../../domain/cipher/blob/types.js';
7
+ export * from './cipher-services.js';
8
+ export type { IAgentStorage } from './i-agent-storage.js';
9
+ export type { IBlobStorage } from './i-blob-storage.js';
10
+ export type { IChatSession } from './i-chat-session.js';
11
+ export type { ICipherAgent } from './i-cipher-agent.js';
12
+ export type { ICodingAgentLogParser } from './i-coding-agent-log-parser.js';
13
+ export type { ICodingAgentLogWatcher } from './i-coding-agent-log-watcher.js';
14
+ export type { IContentGenerator } from './i-content-generator.js';
15
+ export type { IEventEmitter } from './i-event-emitter.js';
16
+ export type { IFileSystem } from './i-file-system.js';
17
+ export type { IHistoryStorage } from './i-history-storage.js';
18
+ export type { IKeyStorage } from './i-key-storage.js';
19
+ export type { ILlmProvider } from './i-llm-provider.js';
20
+ export type { ILLMService } from './i-llm-service.js';
21
+ export type { ILogger } from './i-logger.js';
22
+ export type { IMessageFormatter } from './i-message-formatter.js';
23
+ export type { IPolicyEngine } from './i-policy-engine.js';
24
+ export type { IProcessService } from './i-process-service.js';
25
+ export type { ISystemPromptContributor } from './i-system-prompt-contributor.js';
26
+ export type { ITodoStorage } from './i-todo-storage.js';
27
+ export type { ITokenizer } from './i-tokenizer.js';
28
+ export type { IToolPlugin } from './i-tool-plugin.js';
29
+ export type { IToolProvider } from './i-tool-provider.js';
30
+ export type { IToolScheduler } from './i-tool-scheduler.js';
31
+ export * from './llm-types.js';
32
+ export * from './message-factory.js';
33
+ export * from './message-type-guards.js';
34
+ export * from './message-types.js';
35
+ export * from './tokenizer-types.js';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Cipher interfaces and types.
3
+ *
4
+ * This module re-exports all cipher-related interfaces, types, and utilities.
5
+ */
6
+ export * from './cipher-services.js';
7
+ export * from './llm-types.js';
8
+ export * from './message-factory.js';
9
+ export * from './message-type-guards.js';
10
+ export * from './message-types.js';
11
+ export * from './tokenizer-types.js';
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Factory functions for creating validated message parts and messages.
3
+ *
4
+ * These factories provide a consistent way to create message parts with:
5
+ * - Proper type assignment
6
+ * - Optional metadata and synthetic flags
7
+ * - Default values where appropriate
8
+ *
9
+ */
10
+ import type { FilePart, ImagePart, InternalMessage, ReasoningPart, TextPart, ToolCall, ToolPart, ToolStateCompleted, ToolStateError, ToolStatePending, ToolStateRunning } from './message-types.js';
11
+ /**
12
+ * Common options for creating message parts.
13
+ */
14
+ export interface PartOptions {
15
+ /** Part-level metadata for cache hints and custom data */
16
+ metadata?: {
17
+ [key: string]: unknown;
18
+ cacheControl?: {
19
+ type: 'ephemeral' | 'permanent';
20
+ };
21
+ };
22
+ /** Whether this is auto-generated content */
23
+ synthetic?: boolean;
24
+ }
25
+ /**
26
+ * Create a TextPart with the given text content.
27
+ */
28
+ export declare function createTextPart(text: string, options?: PartOptions): TextPart;
29
+ /**
30
+ * Create an ImagePart with the given image data.
31
+ */
32
+ export declare function createImagePart(image: ImagePart['image'], mimeType?: string, options?: PartOptions): ImagePart;
33
+ /**
34
+ * Create a FilePart with the given file data.
35
+ */
36
+ export declare function createFilePart(data: FilePart['data'], mimeType: string, filename?: string, options?: PartOptions): FilePart;
37
+ /**
38
+ * Create a ReasoningPart with the given thinking text.
39
+ */
40
+ export declare function createReasoningPart(text: string, summary?: {
41
+ description: string;
42
+ subject: string;
43
+ }, options?: PartOptions): ReasoningPart;
44
+ /**
45
+ * Create a ToolPart in pending state.
46
+ */
47
+ export declare function createToolPart(callId: string, toolName: string, input: Record<string, unknown>, options?: PartOptions): ToolPart;
48
+ /**
49
+ * Create a ToolPart in running state.
50
+ */
51
+ export declare function createRunningToolPart(callId: string, toolName: string, input: Record<string, unknown>, options?: PartOptions & {
52
+ startedAt?: number;
53
+ }): ToolPart;
54
+ /**
55
+ * Options for creating a completed tool part.
56
+ */
57
+ export interface CreateCompletedToolPartOptions extends PartOptions {
58
+ additionalOptions?: {
59
+ attachments?: ToolStateCompleted['attachments'];
60
+ compactedAt?: number;
61
+ metadata?: Record<string, unknown>;
62
+ title?: string;
63
+ };
64
+ callId: string;
65
+ input: Record<string, unknown>;
66
+ output: string;
67
+ time?: {
68
+ end: number;
69
+ start: number;
70
+ };
71
+ toolName: string;
72
+ }
73
+ /**
74
+ * Create a ToolPart in completed state.
75
+ */
76
+ export declare function createCompletedToolPart(options: CreateCompletedToolPartOptions): ToolPart;
77
+ /**
78
+ * Options for creating an error tool part.
79
+ */
80
+ export interface CreateErrorToolPartOptions extends PartOptions {
81
+ callId: string;
82
+ error: string;
83
+ input: Record<string, unknown>;
84
+ time?: {
85
+ end: number;
86
+ start: number;
87
+ };
88
+ toolName: string;
89
+ }
90
+ /**
91
+ * Create a ToolPart in error state.
92
+ */
93
+ export declare function createErrorToolPart(options: CreateErrorToolPartOptions): ToolPart;
94
+ /**
95
+ * Transition a tool state from pending to running.
96
+ */
97
+ export declare function transitionToRunning(state: ToolStatePending, startedAt?: number): ToolStateRunning;
98
+ /**
99
+ * Transition a tool state from running to completed.
100
+ */
101
+ export declare function transitionToCompleted(state: ToolStateRunning, output: string, endedAt?: number, additionalOptions?: {
102
+ attachments?: ToolStateCompleted['attachments'];
103
+ metadata?: Record<string, unknown>;
104
+ title?: string;
105
+ }): ToolStateCompleted;
106
+ /**
107
+ * Transition a tool state from running to error.
108
+ */
109
+ export declare function transitionToError(state: ToolStateRunning, error: string, endedAt?: number): ToolStateError;
110
+ /**
111
+ * Create a ToolCall from function name and arguments.
112
+ */
113
+ export declare function createToolCall(id: string, name: string, args: Record<string, unknown> | string): ToolCall;
114
+ /**
115
+ * Options for creating internal messages.
116
+ */
117
+ export interface MessageOptions {
118
+ /** Message-level metadata */
119
+ metadata?: {
120
+ [key: string]: unknown;
121
+ compactedAt?: number;
122
+ isSummary?: boolean;
123
+ summarizedMessageCount?: number;
124
+ };
125
+ }
126
+ /**
127
+ * Create a system message.
128
+ */
129
+ export declare function createSystemMessage(content: string, options?: MessageOptions): InternalMessage;
130
+ /**
131
+ * Create a user message with text content.
132
+ */
133
+ export declare function createUserMessage(content: InternalMessage['content'] | string, options?: MessageOptions): InternalMessage;
134
+ /**
135
+ * Create an assistant message with text content.
136
+ */
137
+ export declare function createAssistantMessage(content: InternalMessage['content'] | string, additionalOptions?: {
138
+ reasoning?: string;
139
+ thought?: string;
140
+ thoughtSummary?: {
141
+ description: string;
142
+ subject: string;
143
+ };
144
+ toolCalls?: ToolCall[];
145
+ }, options?: MessageOptions): InternalMessage;
146
+ /**
147
+ * Create a tool result message.
148
+ */
149
+ export declare function createToolResultMessage(content: InternalMessage['content'] | string, toolCallId: string, name: string, options?: MessageOptions): InternalMessage;
150
+ /**
151
+ * Create a summary message (used by compression strategies).
152
+ */
153
+ export declare function createSummaryMessage(summaryContent: string, summarizedMessageCount: number, options?: Omit<MessageOptions, 'metadata'> & {
154
+ additionalMetadata?: Record<string, unknown>;
155
+ }): InternalMessage;