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
@@ -1,20 +1,24 @@
1
1
  import { ToolName } from '../../../core/domain/cipher/tools/constants.js';
2
2
  import { createBashExecTool } from './implementations/bash-exec-tool.js';
3
3
  import { createBashOutputTool } from './implementations/bash-output-tool.js';
4
+ import { createBatchTool } from './implementations/batch-tool.js';
4
5
  import { createCreateKnowledgeTopicTool } from './implementations/create-knowledge-topic-tool.js';
5
6
  import { createCurateTool } from './implementations/curate-tool.js';
6
7
  import { createDeleteMemoryTool } from './implementations/delete-memory-tool.js';
7
- import { createDetectDomainsTool } from './implementations/detect-domains-tool.js';
8
8
  import { createEditFileTool } from './implementations/edit-file-tool.js';
9
9
  import { createEditMemoryTool } from './implementations/edit-memory-tool.js';
10
- import { createFindKnowledgeTopicsTool } from './implementations/find-knowledge-topics-tool.js';
10
+ // import {createFindKnowledgeTopicsTool} from './implementations/find-knowledge-topics-tool.js'
11
11
  import { createGlobFilesTool } from './implementations/glob-files-tool.js';
12
12
  import { createGrepContentTool } from './implementations/grep-content-tool.js';
13
13
  import { createKillProcessTool } from './implementations/kill-process-tool.js';
14
+ import { createListDirectoryTool } from './implementations/list-directory-tool.js';
14
15
  import { createListMemoriesTool } from './implementations/list-memories-tool.js';
15
16
  import { createReadFileTool } from './implementations/read-file-tool.js';
16
17
  import { createReadMemoryTool } from './implementations/read-memory-tool.js';
18
+ import { createReadTodosTool } from './implementations/read-todos-tool.js';
17
19
  import { createSearchHistoryTool } from './implementations/search-history-tool.js';
20
+ import { createSpecAnalyzeTool } from './implementations/spec-analyze-tool.js';
21
+ import { createTaskTool } from './implementations/task-tool.js';
18
22
  import { createWriteFileTool } from './implementations/write-file-tool.js';
19
23
  import { createWriteMemoryTool } from './implementations/write-memory-tool.js';
20
24
  import { createWriteTodosTool } from './implementations/write-todos-tool.js';
@@ -45,107 +49,145 @@ function getRequiredService(service, serviceName) {
45
49
  */
46
50
  export const TOOL_REGISTRY = {
47
51
  [ToolName.BASH_EXEC]: {
52
+ descriptionFile: 'bash_exec',
48
53
  factory: (services) => createBashExecTool(getRequiredService(services.processService, 'processService')),
49
54
  markers: [ToolMarker.Execution],
50
55
  requiredServices: ['processService'],
51
56
  },
52
57
  [ToolName.BASH_OUTPUT]: {
58
+ descriptionFile: 'bash_output',
53
59
  factory: (services) => createBashOutputTool(getRequiredService(services.processService, 'processService')),
54
60
  markers: [ToolMarker.Execution, ToolMarker.Optional],
55
61
  requiredServices: ['processService'],
56
62
  },
63
+ [ToolName.BATCH]: {
64
+ descriptionFile: 'batch',
65
+ factory: (services) => createBatchTool(getRequiredService(services.getToolProvider, 'getToolProvider')),
66
+ markers: [ToolMarker.Execution, ToolMarker.Core],
67
+ requiredServices: ['getToolProvider'],
68
+ },
57
69
  [ToolName.CREATE_KNOWLEDGE_TOPIC]: {
70
+ descriptionFile: 'create_knowledge_topic',
58
71
  factory: () => createCreateKnowledgeTopicTool(),
59
72
  markers: [ToolMarker.ContextBuilding],
60
73
  outputGuidance: 'create_knowledge_topic',
61
74
  requiredServices: [], // Uses DirectoryManager for file operations
62
75
  },
63
76
  [ToolName.CURATE]: {
77
+ descriptionFile: 'curate',
64
78
  factory: () => createCurateTool(),
65
79
  markers: [ToolMarker.ContextBuilding, ToolMarker.Modification],
66
80
  outputGuidance: 'curate',
67
81
  requiredServices: [], // Uses DirectoryManager and MarkdownWriter for file operations
68
82
  },
69
83
  [ToolName.DELETE_MEMORY]: {
84
+ descriptionFile: 'delete_memory',
70
85
  factory: (services) => createDeleteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
71
86
  markers: [ToolMarker.ContextBuilding],
72
87
  outputGuidance: 'delete_memory',
73
88
  requiredServices: ['memoryManager'],
74
89
  },
75
- [ToolName.DETECT_DOMAINS]: {
76
- factory: () => createDetectDomainsTool(),
77
- markers: [ToolMarker.ContextBuilding],
78
- outputGuidance: 'detect_domains',
79
- requiredServices: [], // No services required (validates LLM-detected domains)
80
- },
81
90
  [ToolName.EDIT_FILE]: {
91
+ descriptionFile: 'edit_file',
82
92
  factory: (services) => createEditFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
83
93
  markers: [ToolMarker.Modification],
84
94
  requiredServices: ['fileSystemService'],
85
95
  },
86
96
  [ToolName.EDIT_MEMORY]: {
97
+ descriptionFile: 'edit_memory',
87
98
  factory: (services) => createEditMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
88
99
  markers: [ToolMarker.ContextBuilding],
89
100
  outputGuidance: 'edit_memory',
90
101
  requiredServices: ['memoryManager'],
91
102
  },
92
- [ToolName.FIND_KNOWLEDGE_TOPICS]: {
93
- factory: () => createFindKnowledgeTopicsTool(),
94
- markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
95
- outputGuidance: 'find_knowledge_topics',
96
- requiredServices: [], // Uses DirectoryManager for file operations
97
- },
98
103
  [ToolName.GLOB_FILES]: {
104
+ descriptionFile: 'glob_files',
99
105
  factory: (services) => createGlobFilesTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
100
106
  markers: [ToolMarker.Core, ToolMarker.Discovery],
101
107
  requiredServices: ['fileSystemService'],
102
108
  },
103
109
  [ToolName.GREP_CONTENT]: {
110
+ descriptionFile: 'grep_content',
104
111
  factory: (services) => createGrepContentTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
105
112
  markers: [ToolMarker.Core, ToolMarker.Discovery],
106
113
  requiredServices: ['fileSystemService'],
107
114
  },
108
115
  [ToolName.KILL_PROCESS]: {
116
+ descriptionFile: 'kill_process',
109
117
  factory: (services) => createKillProcessTool(getRequiredService(services.processService, 'processService')),
110
118
  markers: [ToolMarker.Execution, ToolMarker.Optional],
111
119
  requiredServices: ['processService'],
112
120
  },
121
+ [ToolName.LIST_DIRECTORY]: {
122
+ descriptionFile: 'list_directory',
123
+ factory: (services) => createListDirectoryTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
124
+ markers: [ToolMarker.Discovery],
125
+ requiredServices: ['fileSystemService'],
126
+ },
113
127
  [ToolName.LIST_MEMORIES]: {
128
+ descriptionFile: 'list_memories',
114
129
  factory: (services) => createListMemoriesTool(getRequiredService(services.memoryManager, 'memoryManager')),
115
130
  markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
116
131
  outputGuidance: 'list_memories',
117
132
  requiredServices: ['memoryManager'],
118
133
  },
119
134
  [ToolName.READ_FILE]: {
135
+ descriptionFile: 'read_file',
120
136
  factory: (services) => createReadFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
121
137
  markers: [ToolMarker.Core, ToolMarker.Discovery],
122
138
  requiredServices: ['fileSystemService'],
123
139
  },
124
140
  [ToolName.READ_MEMORY]: {
141
+ descriptionFile: 'read_memory',
125
142
  factory: (services) => createReadMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
126
143
  markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
127
144
  outputGuidance: 'read_memory',
128
145
  requiredServices: ['memoryManager'],
129
146
  },
147
+ [ToolName.READ_TODOS]: {
148
+ descriptionFile: 'read_todos',
149
+ factory: (services) => createReadTodosTool(getRequiredService(services.todoStorage, 'todoStorage')),
150
+ markers: [ToolMarker.Planning, ToolMarker.Core],
151
+ requiredServices: ['todoStorage'],
152
+ },
130
153
  [ToolName.SEARCH_HISTORY]: {
154
+ descriptionFile: 'search_history',
131
155
  factory: (_services) => createSearchHistoryTool(),
132
156
  markers: [ToolMarker.ContextBuilding, ToolMarker.Discovery],
133
157
  requiredServices: [], // No services required yet (stub implementation)
134
158
  },
159
+ [ToolName.SPEC_ANALYZE]: {
160
+ descriptionFile: 'spec_analyze',
161
+ factory: () => createSpecAnalyzeTool(),
162
+ markers: [ToolMarker.ContextBuilding],
163
+ outputGuidance: 'spec_analyze',
164
+ requiredServices: [], // No services required (validates LLM-detected domains)
165
+ },
166
+ [ToolName.TASK]: {
167
+ descriptionFile: 'task',
168
+ factory: (services) => createTaskTool({
169
+ getSessionManager: getRequiredService(services.getSessionManager, 'getSessionManager'),
170
+ }),
171
+ markers: [ToolMarker.Execution, ToolMarker.Planning],
172
+ requiredServices: ['getSessionManager'],
173
+ },
135
174
  [ToolName.WRITE_FILE]: {
175
+ descriptionFile: 'write_file',
136
176
  factory: (services) => createWriteFileTool(getRequiredService(services.fileSystemService, 'fileSystemService')),
137
177
  markers: [ToolMarker.Modification],
138
178
  requiredServices: ['fileSystemService'],
139
179
  },
140
180
  [ToolName.WRITE_MEMORY]: {
181
+ descriptionFile: 'write_memory',
141
182
  factory: (services) => createWriteMemoryTool(getRequiredService(services.memoryManager, 'memoryManager')),
142
183
  markers: [ToolMarker.ContextBuilding],
143
184
  outputGuidance: 'write_memory',
144
185
  requiredServices: ['memoryManager'],
145
186
  },
146
187
  [ToolName.WRITE_TODOS]: {
147
- factory: () => createWriteTodosTool(),
188
+ descriptionFile: 'write_todos',
189
+ factory: (services) => createWriteTodosTool(getRequiredService(services.todoStorage, 'todoStorage')),
148
190
  markers: [ToolMarker.Planning, ToolMarker.Core],
149
- requiredServices: [], // No services required (stateless tool)
191
+ requiredServices: ['todoStorage'],
150
192
  },
151
193
  };
@@ -1,8 +1,9 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { readdir, readFile, stat, writeFile } from 'node:fs/promises';
3
3
  import { join, relative } from 'node:path';
4
- import { BRV_DIR, CONTEXT_FILE, CONTEXT_TREE_DIR, SNAPSHOT_FILE } from '../../constants.js';
4
+ import { BRV_DIR, CONTEXT_FILE_EXTENSION, CONTEXT_TREE_DIR, README_FILE, SNAPSHOT_FILE } from '../../constants.js';
5
5
  import { ContextTreeSnapshot, } from '../../core/domain/entities/context-tree-snapshot.js';
6
+ import { toUnixPath } from './path-utils.js';
6
7
  /**
7
8
  * File-based implementation of IContextTreeSnapshotService.
8
9
  * Tracks context tree changes using content hashing.
@@ -86,7 +87,7 @@ export class FileContextTreeSnapshotService {
86
87
  * Processes a single file and adds it to the files map.
87
88
  */
88
89
  async processFile(fullPath, rootDir, files) {
89
- const relativePath = relative(rootDir, fullPath);
90
+ const relativePath = toUnixPath(relative(rootDir, fullPath));
90
91
  const [content, fileStat] = await Promise.all([readFile(fullPath), stat(fullPath)]);
91
92
  files.set(relativePath, {
92
93
  hash: this.computeHash(content),
@@ -108,8 +109,13 @@ export class FileContextTreeSnapshotService {
108
109
  if (entry.isDirectory()) {
109
110
  tasks.push(this.scanDirectory(fullPath, rootDir, files));
110
111
  }
111
- else if (entry.isFile() && entry.name === CONTEXT_FILE) {
112
- tasks.push(this.processFile(fullPath, rootDir, files));
112
+ else if (entry.isFile() && entry.name.endsWith(CONTEXT_FILE_EXTENSION)) {
113
+ // Only ignore README.md at root level, track it in subdirectories
114
+ const isRoot = currentDir === rootDir;
115
+ const isReadmeAtRoot = entry.name === README_FILE && isRoot;
116
+ if (!isReadmeAtRoot) {
117
+ tasks.push(this.processFile(fullPath, rootDir, files));
118
+ }
113
119
  }
114
120
  }
115
121
  await Promise.all(tasks);
@@ -16,9 +16,10 @@ export declare class FileContextTreeWriterService implements IContextTreeWriterS
16
16
  constructor(dependencies: ContextTreeWriterServiceDependencies, config?: ContextTreeWriterServiceConfig);
17
17
  sync(params: SyncParams): Promise<SyncResult>;
18
18
  /**
19
- * Normalizes a file path by removing leading slashes.
20
- * Retained for backwards compatibility with legacy API responses
21
- * that may still include leading slashes in paths.
19
+ * Normalizes a file path by converting backslashes to forward slashes
20
+ * and removing leading slashes.
21
+ * Ensures cross-platform compatibility and handles legacy API responses
22
+ * that may include leading slashes or Windows-style backslashes.
22
23
  */
23
24
  private normalizePath;
24
25
  }
@@ -2,6 +2,7 @@
2
2
  import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
3
3
  import { dirname, join } from 'node:path';
4
4
  import { BRV_DIR, CONTEXT_TREE_DIR } from '../../constants.js';
5
+ import { toUnixPath } from './path-utils.js';
5
6
  /**
6
7
  * File-based implementation of IContextTreeWriterService.
7
8
  * Synchronizes context tree files based on CoGit snapshot data.
@@ -53,11 +54,12 @@ export class FileContextTreeWriterService {
53
54
  return { added, deleted, edited };
54
55
  }
55
56
  /**
56
- * Normalizes a file path by removing leading slashes.
57
- * Retained for backwards compatibility with legacy API responses
58
- * that may still include leading slashes in paths.
57
+ * Normalizes a file path by converting backslashes to forward slashes
58
+ * and removing leading slashes.
59
+ * Ensures cross-platform compatibility and handles legacy API responses
60
+ * that may include leading slashes or Windows-style backslashes.
59
61
  */
60
62
  normalizePath(path) {
61
- return path.replace(/^\/+/, '');
63
+ return toUnixPath(path).replace(/^\/+/, '');
62
64
  }
63
65
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Path utilities for context tree operations.
3
+ *
4
+ * Provides cross-platform path normalization to ensure all context tree paths
5
+ * use forward slashes regardless of the operating system.
6
+ */
7
+ export { normalizeForComparison as toUnixPath } from '../cipher/process/path-utils.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Path utilities for context tree operations.
3
+ *
4
+ * Provides cross-platform path normalization to ensure all context tree paths
5
+ * use forward slashes regardless of the operating system.
6
+ */
7
+ export { normalizeForComparison as toUnixPath } from '../cipher/process/path-utils.js';
@@ -0,0 +1,35 @@
1
+ import type { ICipherAgent } from '../../../core/interfaces/cipher/i-cipher-agent.js';
2
+ import type { CurateExecuteOptions, ICurateExecutor } from '../../../core/interfaces/executor/i-curate-executor.js';
3
+ /**
4
+ * CurateExecutor - Executes curate tasks with an injected CipherAgent.
5
+ *
6
+ * This is NOT a UseCase (which orchestrates business logic).
7
+ * It's an Executor that wraps agent.execute() with curate-specific options.
8
+ *
9
+ * Architecture:
10
+ * - TaskProcessor injects the long-lived CipherAgent
11
+ * - Event streaming is handled by agent-worker (subscribes to agentEventBus)
12
+ * - Executor focuses solely on curate execution
13
+ */
14
+ export declare class CurateExecutor implements ICurateExecutor {
15
+ /**
16
+ * Maximum number of files allowed in --files flag
17
+ */
18
+ private static readonly MAX_FILES;
19
+ /**
20
+ * Execute curate with an injected agent.
21
+ *
22
+ * @param agent - Long-lived CipherAgent (managed by caller)
23
+ * @param options - Execution options (content, file references)
24
+ * @returns Result string from agent execution
25
+ */
26
+ executeWithAgent(agent: ICipherAgent, options: CurateExecuteOptions): Promise<string>;
27
+ /**
28
+ * Process file paths from --files flag.
29
+ *
30
+ * @param filePaths - Array of file paths (relative or absolute)
31
+ * @returns Formatted instructions for the agent to read the specified files,
32
+ * or undefined if validation fails
33
+ */
34
+ private processFileReferences;
35
+ }
@@ -0,0 +1,123 @@
1
+ import { FileValidationError } from '../../../core/domain/errors/task-error.js';
2
+ import { validateFileForCurate } from '../../../utils/file-validator.js';
3
+ import { getAgentStorage } from '../../cipher/storage/agent-storage.js';
4
+ /**
5
+ * CurateExecutor - Executes curate tasks with an injected CipherAgent.
6
+ *
7
+ * This is NOT a UseCase (which orchestrates business logic).
8
+ * It's an Executor that wraps agent.execute() with curate-specific options.
9
+ *
10
+ * Architecture:
11
+ * - TaskProcessor injects the long-lived CipherAgent
12
+ * - Event streaming is handled by agent-worker (subscribes to agentEventBus)
13
+ * - Executor focuses solely on curate execution
14
+ */
15
+ export class CurateExecutor {
16
+ /**
17
+ * Maximum number of files allowed in --files flag
18
+ */
19
+ static MAX_FILES = 5;
20
+ /**
21
+ * Execute curate with an injected agent.
22
+ *
23
+ * @param agent - Long-lived CipherAgent (managed by caller)
24
+ * @param options - Execution options (content, file references)
25
+ * @returns Result string from agent execution
26
+ */
27
+ async executeWithAgent(agent, options) {
28
+ const { content, files, taskId } = options;
29
+ // Initialize storage for execution tracking
30
+ const storage = await getAgentStorage();
31
+ let executionId = null;
32
+ try {
33
+ // Process file references if provided (validation + instructions)
34
+ const fileReferenceInstructions = this.processFileReferences(files ?? []);
35
+ if (fileReferenceInstructions === undefined) {
36
+ throw new FileValidationError();
37
+ }
38
+ // Create execution with status='running'
39
+ // Save in JSON format with all fields for tracking:
40
+ // - content: the context to curate
41
+ // - files: original file paths (if provided)
42
+ // - fileReferenceInstructions: generated instructions (if files provided and valid)
43
+ const executionInput = JSON.stringify({
44
+ content,
45
+ ...(fileReferenceInstructions ? { fileReferenceInstructions } : {}),
46
+ ...(files && files.length > 0 ? { files } : {}),
47
+ });
48
+ executionId = storage.createExecution('curate', executionInput);
49
+ // Build prompt with optional file reference instructions
50
+ const prompt = fileReferenceInstructions ? `${content}\n${fileReferenceInstructions}` : content;
51
+ // Execute with curate commandType
52
+ // Agent uses its default session (created during start())
53
+ const response = await agent.execute(prompt, {
54
+ executionContext: { commandType: 'curate' },
55
+ taskId,
56
+ });
57
+ // Mark execution as completed
58
+ storage.updateExecutionStatus(executionId, 'completed', response);
59
+ // Cleanup old executions
60
+ storage.cleanupOldExecutions(100);
61
+ return response;
62
+ }
63
+ catch (error) {
64
+ // Mark execution as failed
65
+ if (executionId) {
66
+ const errorMessage = error instanceof Error ? error.message : String(error);
67
+ storage.updateExecutionStatus(executionId, 'failed', undefined, errorMessage);
68
+ }
69
+ throw error;
70
+ }
71
+ }
72
+ /**
73
+ * Process file paths from --files flag.
74
+ *
75
+ * @param filePaths - Array of file paths (relative or absolute)
76
+ * @returns Formatted instructions for the agent to read the specified files,
77
+ * or undefined if validation fails
78
+ */
79
+ processFileReferences(filePaths) {
80
+ if (!filePaths || filePaths.length === 0) {
81
+ return '';
82
+ }
83
+ // Truncate if exceeds max files
84
+ let processedPaths = filePaths;
85
+ if (filePaths.length > CurateExecutor.MAX_FILES) {
86
+ processedPaths = filePaths.slice(0, CurateExecutor.MAX_FILES);
87
+ }
88
+ // Get project root (current directory)
89
+ const projectRoot = process.cwd();
90
+ // Validate each file and collect errors
91
+ const validPaths = [];
92
+ const errors = [];
93
+ for (const filePath of processedPaths) {
94
+ const result = validateFileForCurate(filePath, projectRoot);
95
+ if (result.valid && result.normalizedPath) {
96
+ validPaths.push(result.normalizedPath);
97
+ }
98
+ else {
99
+ errors.push(result.error ?? `Invalid file: ${filePath}`);
100
+ }
101
+ }
102
+ // If there are any validation errors, return undefined
103
+ if (errors.length > 0) {
104
+ return undefined;
105
+ }
106
+ // Format instructions for the agent
107
+ const instructions = [
108
+ '\n## IMPORTANT: Critical Files to Read (--files flag)',
109
+ '',
110
+ 'The user has explicitly specified these files as critical context that MUST be read before creating knowledge topics:',
111
+ '',
112
+ ...validPaths.map((p) => `- ${p}`),
113
+ '',
114
+ '**MANDATORY INSTRUCTIONS:**',
115
+ '- You MUST use the `read_file` tool to read ALL of these files IN PARALLEL (in a single iteration) before proceeding to create knowledge topics',
116
+ '- These files contain essential context that will help you create comprehensive and accurate knowledge topics',
117
+ '- Read them in parallel to maximize efficiency - they do not depend on each other',
118
+ '- After reading all files, proceed with the normal workflow: detect domains, find existing knowledge, and create/update topics',
119
+ '',
120
+ ];
121
+ return instructions.join('\n');
122
+ }
123
+ }
@@ -0,0 +1,2 @@
1
+ export * from './curate-executor.js';
2
+ export * from './query-executor.js';
@@ -0,0 +1,2 @@
1
+ export * from './curate-executor.js';
2
+ export * from './query-executor.js';
@@ -0,0 +1,23 @@
1
+ import type { ICipherAgent } from '../../../core/interfaces/cipher/i-cipher-agent.js';
2
+ import type { IQueryExecutor, QueryExecuteOptions } from '../../../core/interfaces/executor/i-query-executor.js';
3
+ /**
4
+ * QueryExecutor - Executes query tasks with an injected CipherAgent.
5
+ *
6
+ * This is NOT a UseCase (which orchestrates business logic).
7
+ * It's an Executor that wraps agent.execute() with query-specific options.
8
+ *
9
+ * Architecture:
10
+ * - TaskProcessor injects the long-lived CipherAgent
11
+ * - Event streaming is handled by agent-worker (subscribes to agentEventBus)
12
+ * - Executor focuses solely on query execution
13
+ */
14
+ export declare class QueryExecutor implements IQueryExecutor {
15
+ /**
16
+ * Execute query with an injected agent.
17
+ *
18
+ * @param agent - Long-lived CipherAgent (managed by caller)
19
+ * @param options - Execution options (query)
20
+ * @returns Result string from agent execution
21
+ */
22
+ executeWithAgent(agent: ICipherAgent, options: QueryExecuteOptions): Promise<string>;
23
+ }
@@ -0,0 +1,51 @@
1
+ import { getAgentStorage } from '../../cipher/storage/agent-storage.js';
2
+ /**
3
+ * QueryExecutor - Executes query tasks with an injected CipherAgent.
4
+ *
5
+ * This is NOT a UseCase (which orchestrates business logic).
6
+ * It's an Executor that wraps agent.execute() with query-specific options.
7
+ *
8
+ * Architecture:
9
+ * - TaskProcessor injects the long-lived CipherAgent
10
+ * - Event streaming is handled by agent-worker (subscribes to agentEventBus)
11
+ * - Executor focuses solely on query execution
12
+ */
13
+ export class QueryExecutor {
14
+ /**
15
+ * Execute query with an injected agent.
16
+ *
17
+ * @param agent - Long-lived CipherAgent (managed by caller)
18
+ * @param options - Execution options (query)
19
+ * @returns Result string from agent execution
20
+ */
21
+ async executeWithAgent(agent, options) {
22
+ const { query, taskId } = options;
23
+ // Initialize storage for execution tracking
24
+ const storage = await getAgentStorage();
25
+ let executionId = null;
26
+ try {
27
+ // Create execution with status='running'
28
+ executionId = storage.createExecution('query', query);
29
+ // Execute with query commandType
30
+ // Agent uses its default session (created during start())
31
+ const prompt = `Search the context tree for: ${query}`;
32
+ const response = await agent.execute(prompt, {
33
+ executionContext: { commandType: 'query' },
34
+ taskId,
35
+ });
36
+ // Mark execution as completed
37
+ storage.updateExecutionStatus(executionId, 'completed', response);
38
+ // Cleanup old executions
39
+ storage.cleanupOldExecutions(100);
40
+ return response;
41
+ }
42
+ catch (error) {
43
+ // Mark execution as failed
44
+ if (executionId) {
45
+ const errorMessage = error instanceof Error ? error.message : String(error);
46
+ storage.updateExecutionStatus(executionId, 'failed', undefined, errorMessage);
47
+ }
48
+ throw error;
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,81 @@
1
+ import type { ICipherAgent } from '../../core/interfaces/cipher/i-cipher-agent.js';
2
+ import type { ILogger } from '../../core/interfaces/cipher/i-logger.js';
3
+ import type { ICurateExecutor } from '../../core/interfaces/executor/i-curate-executor.js';
4
+ import type { IQueryExecutor } from '../../core/interfaces/executor/i-query-executor.js';
5
+ /**
6
+ * Task input for processing.
7
+ * Agent uses its default session (Single-Session pattern).
8
+ */
9
+ export type TaskInput = {
10
+ /** Task content/prompt */
11
+ content: string;
12
+ /** Optional file paths for curate --files */
13
+ files?: string[];
14
+ /** Task ID */
15
+ taskId: string;
16
+ /** Task type */
17
+ type: 'curate' | 'query';
18
+ };
19
+ /**
20
+ * Configuration for TaskProcessor.
21
+ */
22
+ export type TaskProcessorConfig = {
23
+ /** Curate executor instance (injected by agent-worker) */
24
+ curateExecutor: ICurateExecutor;
25
+ /** Logger instance */
26
+ logger?: ILogger;
27
+ /** Query executor instance (injected by agent-worker) */
28
+ queryExecutor: IQueryExecutor;
29
+ };
30
+ /**
31
+ * TaskProcessor - Coordinates task execution with injected executors.
32
+ *
33
+ * Architecture:
34
+ * - TaskProcessor receives single agent reference via setAgent()
35
+ * - TaskProcessor passes agent to Executor.executeWithAgent()
36
+ * - Executor handles execution (validation, prompt building)
37
+ * - Event streaming handled by agent-worker (subscribes to agentEventBus)
38
+ *
39
+ * Flow: agent-worker → TaskProcessor.process() → Executor.executeWithAgent()
40
+ */
41
+ export declare class TaskProcessor {
42
+ /**
43
+ * Single CipherAgent reference from agent-worker.
44
+ */
45
+ private agent;
46
+ private readonly curateExecutor;
47
+ private readonly logger;
48
+ private readonly queryExecutor;
49
+ /** Track running tasks for cancellation */
50
+ private readonly runningTasks;
51
+ constructor(config: TaskProcessorConfig);
52
+ /**
53
+ * Cancel a running task.
54
+ */
55
+ cancel(taskId: string): boolean;
56
+ /**
57
+ * Check if a task is running.
58
+ */
59
+ isRunning(taskId: string): boolean;
60
+ /**
61
+ * Process a task and return the result.
62
+ *
63
+ * Architecture:
64
+ * - Calls Executor.executeWithAgent() with long-lived agent
65
+ * - Returns result string
66
+ * - Event streaming handled by agent-worker (agentEventBus)
67
+ */
68
+ process(input: TaskInput): Promise<string>;
69
+ /**
70
+ * Set agent reference from agent-worker.
71
+ */
72
+ setAgent(agent: ICipherAgent): void;
73
+ /**
74
+ * Execute task with the injected agent.
75
+ */
76
+ private executeWithAgent;
77
+ }
78
+ /**
79
+ * Create a new TaskProcessor instance.
80
+ */
81
+ export declare function createTaskProcessor(config: TaskProcessorConfig): TaskProcessor;