byterover-cli 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) 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/entities/event.d.ts +1 -1
  49. package/dist/core/domain/entities/event.js +3 -1
  50. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  51. package/dist/core/domain/errors/connection-error.js +54 -0
  52. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  53. package/dist/core/domain/errors/core-process-error.js +43 -0
  54. package/dist/core/domain/errors/task-error.d.ts +64 -0
  55. package/dist/core/domain/errors/task-error.js +116 -0
  56. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  57. package/dist/core/domain/errors/transport-error.js +114 -0
  58. package/dist/core/domain/instance/index.d.ts +1 -0
  59. package/dist/core/domain/instance/index.js +1 -0
  60. package/dist/core/domain/instance/types.d.ts +57 -0
  61. package/dist/core/domain/instance/types.js +72 -0
  62. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  63. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  64. package/dist/core/domain/transport/index.d.ts +2 -0
  65. package/dist/core/domain/transport/index.js +2 -0
  66. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  67. package/dist/core/domain/transport/schemas.js +554 -0
  68. package/dist/core/domain/transport/types.d.ts +67 -0
  69. package/dist/core/domain/transport/types.js +7 -0
  70. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  71. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  72. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  73. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  74. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  75. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  76. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  77. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  79. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  80. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  81. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  82. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  83. package/dist/core/interfaces/cipher/index.js +11 -0
  84. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  85. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  86. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  87. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  88. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  89. package/dist/core/interfaces/cipher/message-types.js +6 -0
  90. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  91. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  92. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  93. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  94. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  95. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  96. package/dist/core/interfaces/executor/index.d.ts +2 -0
  97. package/dist/core/interfaces/executor/index.js +2 -0
  98. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  99. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  100. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  101. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  102. package/dist/core/interfaces/instance/index.d.ts +2 -0
  103. package/dist/core/interfaces/instance/index.js +2 -0
  104. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  105. package/dist/core/interfaces/noop-implementations.js +62 -0
  106. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  107. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  108. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  109. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  110. package/dist/core/interfaces/transport/index.d.ts +2 -0
  111. package/dist/core/interfaces/transport/index.js +2 -0
  112. package/dist/hooks/init/welcome.js +9 -24
  113. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  114. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  115. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  116. package/dist/infra/cipher/agent/agent-error.js +79 -0
  117. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  118. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  119. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  120. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  121. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  122. package/dist/infra/cipher/agent/base-agent.js +240 -0
  123. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  124. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  125. package/dist/infra/cipher/agent/index.d.ts +22 -0
  126. package/dist/infra/cipher/agent/index.js +24 -0
  127. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  128. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  129. package/dist/infra/cipher/agent/types.d.ts +35 -0
  130. package/dist/infra/cipher/agent/types.js +1 -0
  131. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  132. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  133. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  134. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  135. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  136. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  137. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  138. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  139. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  140. package/dist/infra/cipher/consumer/index.js +2 -1
  141. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  142. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  143. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  144. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  145. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  146. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  147. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  148. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  149. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  150. package/dist/infra/cipher/interactive-loop.js +41 -33
  151. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  152. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  153. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  154. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  155. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  156. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  157. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  158. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  159. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  160. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  161. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  162. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  163. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  164. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  165. package/dist/infra/cipher/llm/context/utils.js +17 -4
  166. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  167. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  168. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  169. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  170. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  171. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  172. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  173. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  174. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  175. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  176. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  177. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  178. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  179. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  180. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  181. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  182. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  183. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  184. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  185. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  186. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  187. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  188. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  189. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  190. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  191. package/dist/infra/cipher/process/command-validator.js +75 -0
  192. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  193. package/dist/infra/cipher/process/path-utils.js +94 -0
  194. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  195. package/dist/infra/cipher/process/process-service.js +98 -17
  196. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  197. package/dist/infra/cipher/session/chat-session.js +163 -13
  198. package/dist/infra/cipher/session/index.d.ts +1 -0
  199. package/dist/infra/cipher/session/index.js +2 -0
  200. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  201. package/dist/infra/cipher/session/message-queue.js +90 -0
  202. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  203. package/dist/infra/cipher/session/session-manager.js +254 -7
  204. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  205. package/dist/infra/cipher/session/session-status.js +184 -0
  206. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  207. package/dist/infra/cipher/session/title-generator.js +31 -0
  208. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  209. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  210. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  211. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  212. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  213. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  214. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  215. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  216. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  217. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  218. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  219. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  220. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  221. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  222. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  223. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  224. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  225. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  226. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  227. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  228. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  229. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  230. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  231. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  232. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  233. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  234. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  235. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  236. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  237. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  238. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  239. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  240. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  241. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  242. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  243. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  244. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  245. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  246. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  247. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  249. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  250. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  251. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  252. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  253. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  254. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  255. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  256. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  257. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  258. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  259. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  260. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  261. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  262. package/dist/infra/cipher/tools/index.d.ts +1 -1
  263. package/dist/infra/cipher/tools/index.js +1 -1
  264. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  265. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  266. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  267. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  268. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  269. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  270. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  271. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  272. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  273. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  274. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  275. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  276. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  277. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  278. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  279. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  280. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  281. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  282. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  283. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  284. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  285. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  286. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  287. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  288. package/dist/infra/context-tree/path-utils.js +7 -0
  289. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  290. package/dist/infra/core/executors/curate-executor.js +123 -0
  291. package/dist/infra/core/executors/index.d.ts +2 -0
  292. package/dist/infra/core/executors/index.js +2 -0
  293. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  294. package/dist/infra/core/executors/query-executor.js +51 -0
  295. package/dist/infra/core/task-processor.d.ts +81 -0
  296. package/dist/infra/core/task-processor.js +115 -0
  297. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  298. package/dist/infra/instance/file-instance-discovery.js +84 -0
  299. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  300. package/dist/infra/instance/file-instance-manager.js +123 -0
  301. package/dist/infra/instance/index.d.ts +3 -0
  302. package/dist/infra/instance/index.js +3 -0
  303. package/dist/infra/instance/process-utils.d.ts +14 -0
  304. package/dist/infra/instance/process-utils.js +39 -0
  305. package/dist/infra/process/agent-worker.d.ts +20 -0
  306. package/dist/infra/process/agent-worker.js +602 -0
  307. package/dist/infra/process/index.d.ts +12 -0
  308. package/dist/infra/process/index.js +11 -0
  309. package/dist/infra/process/ipc-types.d.ts +55 -0
  310. package/dist/infra/process/ipc-types.js +12 -0
  311. package/dist/infra/process/process-manager.d.ts +154 -0
  312. package/dist/infra/process/process-manager.js +471 -0
  313. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  314. package/dist/infra/process/task-queue-manager.js +226 -0
  315. package/dist/infra/process/transport-handlers.d.ts +124 -0
  316. package/dist/infra/process/transport-handlers.js +348 -0
  317. package/dist/infra/process/transport-worker.d.ts +20 -0
  318. package/dist/infra/process/transport-worker.js +168 -0
  319. package/dist/infra/repl/commands/curate-command.js +0 -5
  320. package/dist/infra/repl/commands/query-command.js +0 -3
  321. package/dist/infra/repl/repl-startup.d.ts +4 -0
  322. package/dist/infra/repl/repl-startup.js +10 -1
  323. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  324. package/dist/infra/repl/transport-client-helper.js +96 -0
  325. package/dist/infra/transport/index.d.ts +4 -0
  326. package/dist/infra/transport/index.js +4 -0
  327. package/dist/infra/transport/port-utils.d.ts +42 -0
  328. package/dist/infra/transport/port-utils.js +84 -0
  329. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  330. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  331. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  332. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  333. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  334. package/dist/infra/transport/transport-client-factory.js +168 -0
  335. package/dist/infra/transport/transport-factory.d.ts +33 -0
  336. package/dist/infra/transport/transport-factory.js +59 -0
  337. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  338. package/dist/infra/usecase/curate-use-case.js +73 -259
  339. package/dist/infra/usecase/init-use-case.js +19 -8
  340. package/dist/infra/usecase/login-use-case.js +9 -3
  341. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  342. package/dist/infra/usecase/query-use-case.js +251 -326
  343. package/dist/infra/usecase/status-use-case.js +1 -1
  344. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  345. package/dist/resources/prompts/explore.yml +78 -0
  346. package/dist/resources/prompts/plan.yml +114 -0
  347. package/dist/resources/prompts/reflection.yml +1 -1
  348. package/dist/resources/prompts/system-prompt.yml +15 -8
  349. package/dist/resources/prompts/tool-outputs.yml +0 -5
  350. package/dist/resources/tools/bash_exec.txt +98 -0
  351. package/dist/resources/tools/bash_output.txt +40 -0
  352. package/dist/resources/tools/batch.txt +28 -0
  353. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  354. package/dist/resources/tools/curate.txt +22 -0
  355. package/dist/resources/tools/delete_memory.txt +1 -0
  356. package/dist/resources/tools/detect_domains.txt +11 -0
  357. package/dist/resources/tools/edit_file.txt +1 -0
  358. package/dist/resources/tools/edit_memory.txt +1 -0
  359. package/dist/resources/tools/glob_files.txt +20 -0
  360. package/dist/resources/tools/grep_content.txt +18 -0
  361. package/dist/resources/tools/kill_process.txt +16 -0
  362. package/dist/resources/tools/list_directory.txt +16 -0
  363. package/dist/resources/tools/list_memories.txt +1 -0
  364. package/dist/resources/tools/read_file.txt +31 -0
  365. package/dist/resources/tools/read_memory.txt +1 -0
  366. package/dist/resources/tools/read_todos.txt +17 -0
  367. package/dist/resources/tools/search_history.txt +1 -0
  368. package/dist/resources/tools/task.txt +23 -0
  369. package/dist/resources/tools/write_file.txt +1 -0
  370. package/dist/resources/tools/write_memory.txt +1 -0
  371. package/dist/resources/tools/write_todos.txt +29 -0
  372. package/dist/tui/app.js +9 -13
  373. package/dist/tui/components/command-details.d.ts +14 -0
  374. package/dist/tui/components/command-details.js +35 -0
  375. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  376. package/dist/tui/components/execution/execution-changes.js +19 -4
  377. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  378. package/dist/tui/components/execution/execution-content.js +26 -13
  379. package/dist/tui/components/execution/execution-input.js +3 -3
  380. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  381. package/dist/tui/components/execution/execution-progress.js +8 -6
  382. package/dist/tui/components/execution/log-item.d.ts +3 -4
  383. package/dist/tui/components/execution/log-item.js +2 -5
  384. package/dist/tui/components/footer.js +9 -4
  385. package/dist/tui/components/header.d.ts +3 -3
  386. package/dist/tui/components/header.js +5 -3
  387. package/dist/tui/components/index.d.ts +1 -0
  388. package/dist/tui/components/index.js +1 -0
  389. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  390. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  391. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  392. package/dist/tui/components/scrollable-list.js +12 -10
  393. package/dist/tui/components/suggestions.js +39 -41
  394. package/dist/tui/components/tab-bar.d.ts +2 -1
  395. package/dist/tui/components/tab-bar.js +3 -4
  396. package/dist/tui/constants.d.ts +0 -5
  397. package/dist/tui/constants.js +0 -5
  398. package/dist/tui/contexts/auth-context.js +9 -2
  399. package/dist/tui/contexts/{use-commands.js → commands-context.js} +6 -5
  400. package/dist/tui/contexts/index.d.ts +6 -1
  401. package/dist/tui/contexts/index.js +6 -1
  402. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  403. package/dist/tui/contexts/onboarding-context.js +9 -9
  404. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  405. package/dist/tui/contexts/tasks-context.js +218 -0
  406. package/dist/tui/contexts/transport-context.d.ts +29 -0
  407. package/dist/tui/contexts/transport-context.js +82 -0
  408. package/dist/tui/hooks/index.d.ts +10 -6
  409. package/dist/tui/hooks/index.js +7 -6
  410. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  411. package/dist/tui/hooks/use-activity-logs.js +87 -34
  412. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  413. package/dist/tui/hooks/use-auth-polling.js +104 -0
  414. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  415. package/dist/tui/hooks/use-slash-completion.js +1 -1
  416. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  417. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  418. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  419. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  420. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  421. package/dist/tui/hooks/use-ui-heights.js +88 -0
  422. package/dist/tui/providers/app-providers.js +2 -6
  423. package/dist/tui/types/commands.d.ts +0 -26
  424. package/dist/tui/types/index.d.ts +1 -1
  425. package/dist/tui/types/ui.d.ts +9 -4
  426. package/dist/tui/utils/line.d.ts +11 -0
  427. package/dist/tui/utils/line.js +16 -0
  428. package/dist/tui/utils/log.d.ts +27 -0
  429. package/dist/tui/utils/log.js +114 -0
  430. package/dist/tui/views/command-view.d.ts +7 -0
  431. package/dist/tui/views/command-view.js +103 -80
  432. package/dist/tui/views/login-view.js +7 -4
  433. package/dist/tui/views/logs-view.d.ts +13 -0
  434. package/dist/tui/views/logs-view.js +27 -52
  435. package/dist/utils/connection-error-handler.d.ts +16 -0
  436. package/dist/utils/connection-error-handler.js +49 -0
  437. package/dist/utils/crash-log.d.ts +14 -0
  438. package/dist/utils/crash-log.js +19 -0
  439. package/dist/utils/file-helpers.d.ts +14 -0
  440. package/dist/utils/file-helpers.js +21 -0
  441. package/dist/utils/global-logs-path.d.ts +11 -0
  442. package/dist/utils/global-logs-path.js +37 -0
  443. package/dist/utils/process-logger.d.ts +53 -0
  444. package/dist/utils/process-logger.js +253 -0
  445. package/dist/utils/sandbox-detector.d.ts +31 -0
  446. package/dist/utils/sandbox-detector.js +122 -0
  447. package/oclif.manifest.json +10 -198
  448. package/package.json +5 -1
  449. package/dist/commands/cipher-agent/run.d.ts +0 -142
  450. package/dist/commands/cipher-agent/run.js +0 -555
  451. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  452. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  453. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  454. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  455. package/dist/commands/foo.d.ts +0 -14
  456. package/dist/commands/foo.js +0 -66
  457. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  458. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  459. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  460. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  461. package/dist/infra/cipher/cipher-agent.js +0 -317
  462. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  463. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  464. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  465. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  466. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  467. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  468. package/dist/tui/contexts/consumer.d.ts +0 -31
  469. package/dist/tui/contexts/consumer.js +0 -56
  470. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  471. package/dist/tui/hooks/use-consumer.js +0 -50
  472. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  473. package/dist/tui/hooks/use-queue-polling.js +0 -90
  474. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  475. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  476. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  477. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  478. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for prompt configuration loaded from YAML files.
4
+ *
5
+ * Either 'prompt' (single template) or 'prompts' (named templates) is required.
6
+ *
7
+ * Handles mapping from YAML snake_case (excluded_tools) to TypeScript camelCase (excludedTools).
8
+ */
9
+ export const PromptConfigSchema = z
10
+ .preprocess((data) => {
11
+ if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
12
+ const processed = { ...data };
13
+ // Map excluded_tools (YAML) to excludedTools (TypeScript)
14
+ if ('excluded_tools' in processed && !('excludedTools' in processed)) {
15
+ processed.excludedTools = processed.excluded_tools;
16
+ delete processed.excluded_tools;
17
+ }
18
+ return processed;
19
+ }
20
+ return data;
21
+ }, z
22
+ .object({
23
+ description: z.string().optional().describe('Human-readable description of this prompt'),
24
+ excludedTools: z.array(z.string()).optional().describe('Tools to exclude from this prompt mode'),
25
+ prompt: z.string().optional().describe('Main prompt template content'),
26
+ prompts: z.record(z.string()).optional().describe('Named prompt templates (e.g., for reflection types)'),
27
+ })
28
+ .strict()
29
+ .refine((data) => data.prompt !== undefined || data.prompts !== undefined, {
30
+ message: "Either 'prompt' or 'prompts' field is required",
31
+ })
32
+ .describe('Prompt configuration loaded from YAML'));
33
+ /**
34
+ * Schema for conversation metadata.
35
+ */
36
+ export const ConversationMetadataSchema = z
37
+ .object({
38
+ conversationId: z.string().optional().describe('Unique identifier for the conversation'),
39
+ title: z.string().optional().describe('Title or topic of the conversation'),
40
+ })
41
+ .strict();
42
+ /**
43
+ * Schema for build context passed to system prompt builder.
44
+ *
45
+ * Contains runtime information needed to construct the system prompt.
46
+ */
47
+ export const BuildContextSchema = z
48
+ .object({
49
+ availableMarkers: z.record(z.string()).optional().describe('Available markers and their descriptions'),
50
+ availableTools: z.array(z.string()).optional().describe('List of available tool names'),
51
+ commandType: z.enum(['curate', 'query']).optional().describe('Type of command being executed'),
52
+ conversationMetadata: ConversationMetadataSchema.optional().describe('Metadata about the current conversation'),
53
+ environmentContext: z.any().optional().describe('Environment context object (validated separately)'),
54
+ fileReferenceInstructions: z.string().optional().describe('Instructions for file reference handling'),
55
+ memoryManager: z.any().optional().describe('Memory manager instance (runtime dependency)'),
56
+ })
57
+ .strict()
58
+ .describe('Runtime context for building system prompts');
59
+ /**
60
+ * Schema for environment context builder options.
61
+ */
62
+ export const EnvironmentContextOptionsSchema = z
63
+ .object({
64
+ includeBrvStructure: z
65
+ .boolean()
66
+ .optional()
67
+ .default(true)
68
+ .describe('Whether to include .brv directory structure explanation'),
69
+ includeFileTree: z.boolean().optional().default(true).describe('Whether to include project file tree'),
70
+ maxFileTreeDepth: z.number().int().positive().optional().default(3).describe('Maximum depth for file tree traversal'),
71
+ maxFileTreeEntries: z
72
+ .number()
73
+ .int()
74
+ .positive()
75
+ .optional()
76
+ .default(100)
77
+ .describe('Maximum number of entries in file tree'),
78
+ workingDirectory: z.string().min(1).describe('Absolute path to the working directory'),
79
+ })
80
+ .strict()
81
+ .describe('Options for building environment context');
82
+ /**
83
+ * Schema for reflection prompt context.
84
+ */
85
+ export const ReflectionContextSchema = z
86
+ .object({
87
+ currentIteration: z.number().int().positive().optional().describe('Current iteration number'),
88
+ maxIterations: z.number().int().positive().optional().describe('Maximum iterations allowed'),
89
+ type: z
90
+ .enum(['completion_check', 'final_iteration', 'mid_point_check', 'near_max_iterations'])
91
+ .describe('Type of reflection prompt to build'),
92
+ })
93
+ .strict()
94
+ .describe('Context for building reflection prompts');
@@ -0,0 +1,136 @@
1
+ import type { ContributorContext, SystemPromptContributor } from '../../../core/domain/cipher/system-prompt/types.js';
2
+ import type { ValidatedContributorConfig } from './contributor-schemas.js';
3
+ /**
4
+ * Reflection prompt type for iteration-based prompts.
5
+ */
6
+ export type ReflectionType = 'completion_check' | 'final_iteration' | 'mid_point_check' | 'near_max_iterations';
7
+ /**
8
+ * Context for building reflection prompts.
9
+ */
10
+ export interface ReflectionContext {
11
+ /** Current iteration number (required for near_max_iterations and mid_point_check) */
12
+ currentIteration?: number;
13
+ /** Maximum iterations allowed (required for near_max_iterations and mid_point_check) */
14
+ maxIterations?: number;
15
+ /** Type of reflection prompt to build */
16
+ type: ReflectionType;
17
+ }
18
+ /**
19
+ * Options for SystemPromptManager configuration.
20
+ */
21
+ export interface SystemPromptManagerOptions {
22
+ /** Base path for file contributors (defaults to current directory) */
23
+ basePath?: string;
24
+ /** Whether to validate contributor configs with Zod (default: true) */
25
+ validateConfig?: boolean;
26
+ }
27
+ /**
28
+ * SystemPromptManager orchestrates contributor-based prompt composition.
29
+ *
30
+ * Features:
31
+ * - Registers and manages multiple contributors
32
+ * - Builds prompts in parallel for performance
33
+ * - Validates contributor configurations with Zod
34
+ * - Sorts contributors by priority
35
+ */
36
+ export declare class SystemPromptManager {
37
+ private readonly basePath;
38
+ private contributors;
39
+ private readonly validateConfig;
40
+ /**
41
+ * Creates a new SystemPromptManager.
42
+ *
43
+ * @param options - Configuration options
44
+ */
45
+ constructor(options?: SystemPromptManagerOptions);
46
+ /**
47
+ * Build the complete system prompt using all contributors in parallel.
48
+ *
49
+ * Contributors are executed concurrently and their outputs are
50
+ * concatenated in priority order.
51
+ *
52
+ * @param context - Runtime context with dependencies
53
+ * @returns Complete system prompt string
54
+ */
55
+ build(context: ContributorContext): Promise<string>;
56
+ /**
57
+ * Build a system prompt specifically for an agent.
58
+ *
59
+ * This method builds the prompt by:
60
+ * 1. Getting the agent configuration from the registry
61
+ * 2. Loading the agent's prompt (from promptFile or inline prompt)
62
+ * 3. Combining it with base contributors (datetime, environment, etc.)
63
+ *
64
+ * @param agentName - Name of the agent (e.g., 'plan', 'query', 'curate')
65
+ * @param context - Runtime context with dependencies
66
+ * @returns Complete system prompt for the agent
67
+ */
68
+ buildForAgent(agentName: string, context: ContributorContext): Promise<string>;
69
+ /**
70
+ * Build a reflection prompt for completion checking.
71
+ *
72
+ * @param context - Context with iteration information
73
+ * @returns Formatted reflection prompt
74
+ */
75
+ buildReflectionPrompt(context: ReflectionContext): string;
76
+ /**
77
+ * Clear all registered contributors.
78
+ */
79
+ clearContributors(): void;
80
+ /**
81
+ * Get the list of registered contributors.
82
+ *
83
+ * @returns Array of contributors (copy)
84
+ */
85
+ getContributors(): SystemPromptContributor[];
86
+ /**
87
+ * Get tool-specific output guidance for a tool.
88
+ *
89
+ * @param toolName - The name of the tool (e.g., 'write_memory')
90
+ * @returns The guidance text if available, null otherwise
91
+ */
92
+ getToolOutputGuidance(toolName: string): null | string;
93
+ /**
94
+ * Register a single contributor directly.
95
+ *
96
+ * @param contributor - Contributor instance to register
97
+ */
98
+ registerContributor(contributor: SystemPromptContributor): void;
99
+ /**
100
+ * Register contributors from configuration objects.
101
+ *
102
+ * Validates configs with Zod if validateConfig is enabled,
103
+ * creates contributor instances, and sorts by priority.
104
+ *
105
+ * @param configs - Array of contributor configuration objects
106
+ */
107
+ registerContributors(configs: ValidatedContributorConfig[]): void;
108
+ /**
109
+ * Create a contributor instance from configuration.
110
+ *
111
+ * @param config - Validated contributor configuration
112
+ * @returns Contributor instance
113
+ */
114
+ private createContributor;
115
+ /**
116
+ * Load and parse a YAML file from the base path.
117
+ *
118
+ * @param filename - Relative filename to load
119
+ * @returns Parsed YAML content
120
+ */
121
+ private loadYamlFile;
122
+ /**
123
+ * Render a template string with variable substitution.
124
+ *
125
+ * Uses simple {{variable}} syntax.
126
+ *
127
+ * @param template - Template string with {{variable}} placeholders
128
+ * @param variables - Variables to substitute
129
+ * @returns Rendered string
130
+ */
131
+ private renderTemplate;
132
+ /**
133
+ * Sort contributors by priority (lower = first).
134
+ */
135
+ private sortContributors;
136
+ }
@@ -0,0 +1,307 @@
1
+ import { load as loadYaml } from 'js-yaml';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { getAgentRegistry } from '../../../core/domain/cipher/agent/agent-registry.js';
6
+ import { SystemPromptError } from '../../../core/domain/cipher/errors/system-prompt-error.js';
7
+ import { ContributorConfigSchema } from './contributor-schemas.js';
8
+ import { AgentPromptContributor, DateTimeContributor, EnvironmentContributor, FileContributor, MemoryContributor, StaticContributor, } from './contributors/index.js';
9
+ /**
10
+ * SystemPromptManager orchestrates contributor-based prompt composition.
11
+ *
12
+ * Features:
13
+ * - Registers and manages multiple contributors
14
+ * - Builds prompts in parallel for performance
15
+ * - Validates contributor configurations with Zod
16
+ * - Sorts contributors by priority
17
+ */
18
+ export class SystemPromptManager {
19
+ basePath;
20
+ contributors = [];
21
+ validateConfig;
22
+ /**
23
+ * Creates a new SystemPromptManager.
24
+ *
25
+ * @param options - Configuration options
26
+ */
27
+ constructor(options = {}) {
28
+ this.basePath = options.basePath ?? '';
29
+ this.validateConfig = options.validateConfig ?? true;
30
+ }
31
+ /**
32
+ * Build the complete system prompt using all contributors in parallel.
33
+ *
34
+ * Contributors are executed concurrently and their outputs are
35
+ * concatenated in priority order.
36
+ *
37
+ * @param context - Runtime context with dependencies
38
+ * @returns Complete system prompt string
39
+ */
40
+ async build(context) {
41
+ if (this.contributors.length === 0) {
42
+ return '';
43
+ }
44
+ // Execute all contributors in parallel
45
+ const results = await Promise.all(this.contributors.map(async (contributor) => {
46
+ try {
47
+ const content = await contributor.getContent(context);
48
+ return { content, error: null, id: contributor.id };
49
+ }
50
+ catch (error) {
51
+ return {
52
+ content: '',
53
+ error: error instanceof Error ? error.message : String(error),
54
+ id: contributor.id,
55
+ };
56
+ }
57
+ }));
58
+ // Check for errors
59
+ const errors = results.filter((r) => r.error !== null);
60
+ if (errors.length > 0) {
61
+ const firstError = errors[0];
62
+ throw SystemPromptError.contributorExecutionFailed(firstError.id, firstError.error);
63
+ }
64
+ // Combine content from all contributors
65
+ return results
66
+ .map((r) => r.content)
67
+ .filter(Boolean)
68
+ .join('\n\n');
69
+ }
70
+ /**
71
+ * Build a system prompt specifically for an agent.
72
+ *
73
+ * This method builds the prompt by:
74
+ * 1. Getting the agent configuration from the registry
75
+ * 2. Loading the agent's prompt (from promptFile or inline prompt)
76
+ * 3. Combining it with base contributors (datetime, environment, etc.)
77
+ *
78
+ * @param agentName - Name of the agent (e.g., 'plan', 'query', 'curate')
79
+ * @param context - Runtime context with dependencies
80
+ * @returns Complete system prompt for the agent
81
+ */
82
+ async buildForAgent(agentName, context) {
83
+ const registry = getAgentRegistry();
84
+ const agent = registry.get(agentName);
85
+ if (!agent) {
86
+ // Unknown agent - fall back to default build
87
+ return this.build(context);
88
+ }
89
+ // Create agent prompt contributor
90
+ const agentContributor = new AgentPromptContributor('agent', 5, {
91
+ basePath: this.basePath,
92
+ cache: true,
93
+ });
94
+ // Build context with agent name for the contributor
95
+ const agentContext = {
96
+ ...context,
97
+ agentName,
98
+ };
99
+ // Get agent-specific prompt
100
+ const agentPrompt = await agentContributor.getContent(agentContext);
101
+ // If agent has no custom prompt, use default build
102
+ if (!agentPrompt) {
103
+ return this.build(context);
104
+ }
105
+ // Build base prompt from existing contributors
106
+ const basePrompt = await this.build(context);
107
+ // Combine: agent prompt takes precedence, then base prompt
108
+ // Agent prompt comes first as it defines the agent's role
109
+ if (basePrompt) {
110
+ return `${agentPrompt}\n\n${basePrompt}`;
111
+ }
112
+ return agentPrompt;
113
+ }
114
+ /**
115
+ * Build a reflection prompt for completion checking.
116
+ *
117
+ * @param context - Context with iteration information
118
+ * @returns Formatted reflection prompt
119
+ */
120
+ buildReflectionPrompt(context) {
121
+ const reflectionConfig = this.loadYamlFile('reflection.yml');
122
+ if (!reflectionConfig.prompts) {
123
+ throw SystemPromptError.configMissingField('prompts', 'reflection.yml');
124
+ }
125
+ const template = reflectionConfig.prompts[context.type];
126
+ if (!template) {
127
+ throw SystemPromptError.configMissingField(`prompts.${context.type}`, 'reflection.yml');
128
+ }
129
+ if (context.type === 'near_max_iterations' && context.currentIteration && context.maxIterations) {
130
+ /* eslint-disable camelcase */
131
+ return this.renderTemplate(template, {
132
+ current_iteration: context.currentIteration.toString(),
133
+ max_iterations: context.maxIterations.toString(),
134
+ });
135
+ /* eslint-enable camelcase */
136
+ }
137
+ if (context.type === 'mid_point_check' && context.currentIteration && context.maxIterations) {
138
+ const remaining = context.maxIterations - context.currentIteration;
139
+ /* eslint-disable camelcase */
140
+ return this.renderTemplate(template, {
141
+ current_iteration: context.currentIteration.toString(),
142
+ remaining_iterations: remaining.toString(),
143
+ });
144
+ /* eslint-enable camelcase */
145
+ }
146
+ return template;
147
+ }
148
+ /**
149
+ * Clear all registered contributors.
150
+ */
151
+ clearContributors() {
152
+ this.contributors = [];
153
+ }
154
+ /**
155
+ * Get the list of registered contributors.
156
+ *
157
+ * @returns Array of contributors (copy)
158
+ */
159
+ getContributors() {
160
+ return [...this.contributors];
161
+ }
162
+ /**
163
+ * Get tool-specific output guidance for a tool.
164
+ *
165
+ * @param toolName - The name of the tool (e.g., 'write_memory')
166
+ * @returns The guidance text if available, null otherwise
167
+ */
168
+ getToolOutputGuidance(toolName) {
169
+ try {
170
+ const toolOutputsConfig = this.loadYamlFile('tool-outputs.yml');
171
+ if (toolOutputsConfig.prompts) {
172
+ const promptKey = `${toolName}_output`;
173
+ const guidance = toolOutputsConfig.prompts[promptKey];
174
+ if (guidance) {
175
+ return guidance;
176
+ }
177
+ }
178
+ return null;
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ /**
185
+ * Register a single contributor directly.
186
+ *
187
+ * @param contributor - Contributor instance to register
188
+ */
189
+ registerContributor(contributor) {
190
+ this.contributors.push(contributor);
191
+ this.sortContributors();
192
+ }
193
+ /**
194
+ * Register contributors from configuration objects.
195
+ *
196
+ * Validates configs with Zod if validateConfig is enabled,
197
+ * creates contributor instances, and sorts by priority.
198
+ *
199
+ * @param configs - Array of contributor configuration objects
200
+ */
201
+ registerContributors(configs) {
202
+ for (const config of configs) {
203
+ // Validate config if enabled
204
+ if (this.validateConfig) {
205
+ const parseResult = ContributorConfigSchema.safeParse(config);
206
+ if (!parseResult.success) {
207
+ const errorMessages = parseResult.error.errors
208
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
209
+ .join('; ');
210
+ throw SystemPromptError.configInvalid(errorMessages, parseResult.error.errors);
211
+ }
212
+ }
213
+ // Skip disabled contributors
214
+ if (config.enabled === false) {
215
+ continue;
216
+ }
217
+ const contributor = this.createContributor(config);
218
+ this.contributors.push(contributor);
219
+ }
220
+ this.sortContributors();
221
+ }
222
+ /**
223
+ * Create a contributor instance from configuration.
224
+ *
225
+ * @param config - Validated contributor configuration
226
+ * @returns Contributor instance
227
+ */
228
+ createContributor(config) {
229
+ switch (config.type) {
230
+ case 'dateTime': {
231
+ return new DateTimeContributor(config.id, config.priority);
232
+ }
233
+ case 'environment': {
234
+ return new EnvironmentContributor(config.id, config.priority);
235
+ }
236
+ case 'file': {
237
+ return new FileContributor(config.id, config.priority, config.filepath, {
238
+ basePath: this.basePath,
239
+ cache: config.options?.cache,
240
+ validateMtime: config.options?.validateMtime,
241
+ });
242
+ }
243
+ case 'memory': {
244
+ return new MemoryContributor(config.id, config.priority, {
245
+ includeTags: config.options?.includeTags,
246
+ limit: config.options?.limit,
247
+ pinnedOnly: config.options?.pinnedOnly,
248
+ });
249
+ }
250
+ case 'static': {
251
+ return new StaticContributor(config.id, config.priority, config.content);
252
+ }
253
+ default: {
254
+ // Exhaustive check - TypeScript will error if we miss a case
255
+ const _exhaustive = config;
256
+ throw SystemPromptError.contributorInvalidConfig(_exhaustive);
257
+ }
258
+ }
259
+ }
260
+ /**
261
+ * Load and parse a YAML file from the base path.
262
+ *
263
+ * @param filename - Relative filename to load
264
+ * @returns Parsed YAML content
265
+ */
266
+ loadYamlFile(filename) {
267
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
268
+ const defaultBasePath = path.join(currentDir, '../../../resources/prompts');
269
+ const basePath = this.basePath || defaultBasePath;
270
+ const fullPath = path.join(basePath, filename);
271
+ if (!fs.existsSync(fullPath)) {
272
+ throw SystemPromptError.fileNotFound(fullPath);
273
+ }
274
+ let yamlContent;
275
+ try {
276
+ yamlContent = fs.readFileSync(fullPath, 'utf8');
277
+ }
278
+ catch (error) {
279
+ const reason = error instanceof Error ? error.message : String(error);
280
+ throw SystemPromptError.fileReadFailed(fullPath, reason);
281
+ }
282
+ return loadYaml(yamlContent);
283
+ }
284
+ /**
285
+ * Render a template string with variable substitution.
286
+ *
287
+ * Uses simple {{variable}} syntax.
288
+ *
289
+ * @param template - Template string with {{variable}} placeholders
290
+ * @param variables - Variables to substitute
291
+ * @returns Rendered string
292
+ */
293
+ renderTemplate(template, variables) {
294
+ let result = template;
295
+ for (const [key, value] of Object.entries(variables)) {
296
+ const regex = new RegExp(`{{\\s*${key}\\s*}}`, 'g');
297
+ result = result.replaceAll(regex, value ?? '');
298
+ }
299
+ return result;
300
+ }
301
+ /**
302
+ * Sort contributors by priority (lower = first).
303
+ */
304
+ sortContributors() {
305
+ this.contributors.sort((a, b) => a.priority - b.priority);
306
+ }
307
+ }
@@ -0,0 +1,26 @@
1
+ import type { Todo } from '../../../core/domain/cipher/todos/types.js';
2
+ import type { ITodoStorage } from '../../../core/interfaces/cipher/i-todo-storage.js';
3
+ /**
4
+ * In-memory implementation of todo storage.
5
+ *
6
+ * Stores todos per session in a Map. Data is lost when process restarts.
7
+ * Use a persistent implementation if you need todos to survive restarts.
8
+ */
9
+ export declare class TodoStorageService implements ITodoStorage {
10
+ private storage;
11
+ /**
12
+ * Get todos for a specific session.
13
+ *
14
+ * @param sessionId - Unique session identifier
15
+ * @returns Promise that resolves to array of todos, empty array if not found
16
+ */
17
+ get(sessionId: string): Promise<Todo[]>;
18
+ /**
19
+ * Update (replace) todos for a specific session.
20
+ *
21
+ * @param sessionId - Unique session identifier
22
+ * @param todos - Array of todos to store
23
+ * @returns Promise that resolves when todos are saved
24
+ */
25
+ update(sessionId: string, todos: Todo[]): Promise<void>;
26
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * In-memory implementation of todo storage.
3
+ *
4
+ * Stores todos per session in a Map. Data is lost when process restarts.
5
+ * Use a persistent implementation if you need todos to survive restarts.
6
+ */
7
+ export class TodoStorageService {
8
+ storage = new Map();
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
+ async get(sessionId) {
16
+ return this.storage.get(sessionId) ?? [];
17
+ }
18
+ /**
19
+ * Update (replace) todos for a specific session.
20
+ *
21
+ * @param sessionId - Unique session identifier
22
+ * @param todos - Array of todos to store
23
+ * @returns Promise that resolves when todos are saved
24
+ */
25
+ async update(sessionId, todos) {
26
+ this.storage.set(sessionId, todos);
27
+ }
28
+ }
@@ -91,7 +91,11 @@ export class CoreToolScheduler {
91
91
  this.updateStatus(execution, 'executing');
92
92
  execution.startedAt = new Date();
93
93
  try {
94
- const result = await this.toolProvider.executeTool(toolName, args, context.sessionId);
94
+ // Pass full context (including taskId) to toolProvider for subagent billing
95
+ const result = await this.toolProvider.executeTool(toolName, args, context.sessionId, {
96
+ sessionId: context.sessionId,
97
+ taskId: context.taskId,
98
+ });
95
99
  this.updateStatus(execution, 'completed');
96
100
  execution.result = result;
97
101
  execution.completedAt = new Date();
@@ -71,7 +71,7 @@ export const DEFAULT_POLICY_RULES = [
71
71
  decision: 'ALLOW',
72
72
  name: 'allow-read-tools',
73
73
  reason: 'Read operations are safe',
74
- toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history|find_knowledge_topics)$/,
74
+ toolPattern: /^(read_file|glob_files|grep_content|list_memories|read_memory|search_history)$/,
75
75
  },
76
76
  /**
77
77
  * Allow all write operations (autonomous mode).
@@ -5,6 +5,7 @@ import type { IProcessService } from '../../../../core/interfaces/cipher/i-proce
5
5
  *
6
6
  * Executes shell commands with security validation and approval for dangerous commands.
7
7
  * Supports both foreground (wait for completion) and background (return immediately) execution.
8
+ * When a metadata callback is provided, streams output updates in real-time.
8
9
  *
9
10
  * @param processService - Process service for command execution
10
11
  * @returns bash_exec tool instance