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,256 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { SystemPromptError } from '../../../core/domain/cipher/errors/system-prompt-error.js';
5
+ import { EnvironmentContextOptionsSchema } from './schemas.js';
6
+ /**
7
+ * Patterns to exclude from file tree.
8
+ */
9
+ const EXCLUDE_PATTERNS = [
10
+ 'node_modules',
11
+ '.git',
12
+ '.brv',
13
+ 'dist',
14
+ 'build',
15
+ '.next',
16
+ 'coverage',
17
+ '.DS_Store',
18
+ '.env',
19
+ '.env.local',
20
+ '__pycache__',
21
+ '.pytest_cache',
22
+ '.venv',
23
+ 'venv',
24
+ '.idea',
25
+ '.vscode',
26
+ '*.log',
27
+ '.turbo',
28
+ '.cache',
29
+ ];
30
+ /**
31
+ * Builds environment context for system prompts.
32
+ *
33
+ * Gathers information about:
34
+ * - Working directory
35
+ * - Git repository status
36
+ * - Platform and OS version
37
+ * - Project file tree
38
+ * - .brv directory structure
39
+ */
40
+ export class EnvironmentContextBuilder {
41
+ /**
42
+ * Build the complete environment context.
43
+ *
44
+ * @param options - Configuration options
45
+ * @returns Environment context object
46
+ */
47
+ async build(options) {
48
+ // Validate options with Zod schema
49
+ const parseResult = EnvironmentContextOptionsSchema.safeParse(options);
50
+ if (!parseResult.success) {
51
+ const errorMessages = parseResult.error.errors
52
+ .map((err) => `${err.path.join('.')}: ${err.message}`)
53
+ .join('; ');
54
+ throw SystemPromptError.configInvalid(errorMessages, parseResult.error.errors);
55
+ }
56
+ const validatedOptions = parseResult.data;
57
+ const { includeBrvStructure = true, includeFileTree = true, maxFileTreeDepth = 3, maxFileTreeEntries = 100, workingDirectory, } = validatedOptions;
58
+ const isGitRepository = this.detectGitRepository(workingDirectory);
59
+ let fileTree = '';
60
+ if (includeFileTree) {
61
+ fileTree = this.buildFileTree(workingDirectory, maxFileTreeDepth, maxFileTreeEntries);
62
+ }
63
+ let brvStructure = '';
64
+ if (includeBrvStructure) {
65
+ brvStructure = this.buildBrvStructure(workingDirectory);
66
+ }
67
+ return {
68
+ brvStructure,
69
+ fileTree,
70
+ isGitRepository,
71
+ nodeVersion: process.version,
72
+ osVersion: os.release(),
73
+ platform: os.platform(),
74
+ workingDirectory,
75
+ };
76
+ }
77
+ /**
78
+ * Build an explanation of the .brv directory structure.
79
+ *
80
+ * @param dir - Working directory path
81
+ * @returns Formatted .brv structure explanation
82
+ */
83
+ buildBrvStructure(dir) {
84
+ const brvDir = path.join(dir, '.brv');
85
+ if (!fs.existsSync(brvDir)) {
86
+ return '<brv-structure>\nByteRover not initialized (.brv directory not found)\n</brv-structure>';
87
+ }
88
+ // Build actual structure by reading the directory
89
+ const structure = ['<brv-structure>', '.brv/'];
90
+ try {
91
+ const entries = fs.readdirSync(brvDir, { withFileTypes: true });
92
+ for (const entry of entries) {
93
+ if (entry.isDirectory()) {
94
+ const description = this.getBrvDirectoryDescription(entry.name);
95
+ structure.push(` ${entry.name}/ ${description}`);
96
+ }
97
+ else {
98
+ const description = this.getBrvFileDescription(entry.name);
99
+ structure.push(` ${entry.name} ${description}`);
100
+ }
101
+ }
102
+ }
103
+ catch {
104
+ structure.push(' (unable to read directory contents)');
105
+ }
106
+ structure.push('</brv-structure>');
107
+ return structure.join('\n');
108
+ }
109
+ /**
110
+ * Build a formatted file tree of the project.
111
+ *
112
+ * @param dir - Root directory to start from
113
+ * @param maxDepth - Maximum traversal depth
114
+ * @param maxEntries - Maximum number of entries to include
115
+ * @returns Formatted file tree string
116
+ */
117
+ buildFileTree(dir, maxDepth, maxEntries) {
118
+ const entriesCount = { value: 0 };
119
+ const truncatedCount = { value: 0 };
120
+ const lines = ['<files>'];
121
+ this.traverseDirectory({
122
+ currentDepth: 0,
123
+ dir,
124
+ entriesCount,
125
+ lines,
126
+ maxDepth,
127
+ maxEntries,
128
+ truncatedCount,
129
+ });
130
+ if (truncatedCount.value > 0) {
131
+ lines.push(`[${truncatedCount.value} entries truncated]`);
132
+ }
133
+ lines.push('</files>');
134
+ return lines.join('\n');
135
+ }
136
+ /**
137
+ * Check if a directory is a git repository.
138
+ *
139
+ * @param dir - Directory path to check
140
+ * @returns True if the directory contains a .git folder
141
+ */
142
+ detectGitRepository(dir) {
143
+ try {
144
+ const gitDir = path.join(dir, '.git');
145
+ return fs.existsSync(gitDir);
146
+ }
147
+ catch {
148
+ return false;
149
+ }
150
+ }
151
+ /**
152
+ * Get description for a .brv directory.
153
+ *
154
+ * @param name - Directory name
155
+ * @returns Description string
156
+ */
157
+ getBrvDirectoryDescription(name) {
158
+ const descriptions = {
159
+ blobs: '# Storage for conversation history',
160
+ 'context-tree': '# Semantic knowledge organized by domain',
161
+ logs: '# Debug logs for troubleshooting',
162
+ };
163
+ return descriptions[name] ?? '';
164
+ }
165
+ /**
166
+ * Get description for a .brv file.
167
+ *
168
+ * @param name - File name
169
+ * @returns Description string
170
+ */
171
+ getBrvFileDescription(name) {
172
+ const descriptions = {
173
+ 'config.json': '# Project configuration',
174
+ };
175
+ return descriptions[name] ?? '';
176
+ }
177
+ /**
178
+ * Check if a file or directory should be excluded from the tree.
179
+ *
180
+ * @param name - File or directory name
181
+ * @returns True if should be excluded
182
+ */
183
+ shouldExclude(name) {
184
+ for (const pattern of EXCLUDE_PATTERNS) {
185
+ if (pattern.startsWith('*')) {
186
+ // Wildcard pattern (e.g., *.log)
187
+ const extension = pattern.slice(1);
188
+ if (name.endsWith(extension)) {
189
+ return true;
190
+ }
191
+ }
192
+ else if (name === pattern) {
193
+ return true;
194
+ }
195
+ }
196
+ return false;
197
+ }
198
+ /**
199
+ * Recursively traverse a directory and build tree lines.
200
+ *
201
+ * @param options - Traversal options
202
+ * @param options.dir - Current directory path
203
+ * @param options.maxDepth - Maximum depth to traverse
204
+ * @param options.maxEntries - Maximum entries to include
205
+ * @param options.currentDepth - Current traversal depth
206
+ * @param options.entriesCount - Counter for entries added (mutable object with value property)
207
+ * @param options.truncatedCount - Counter for truncated entries (mutable object with value property)
208
+ * @param options.lines - Array to append lines to
209
+ */
210
+ traverseDirectory(options) {
211
+ const { currentDepth, dir, entriesCount, lines, maxDepth, maxEntries, truncatedCount } = options;
212
+ if (currentDepth >= maxDepth) {
213
+ return;
214
+ }
215
+ let entries;
216
+ try {
217
+ entries = fs.readdirSync(dir, { withFileTypes: true });
218
+ }
219
+ catch {
220
+ return;
221
+ }
222
+ // Filter and sort: directories first, then alphabetically
223
+ const filteredEntries = entries
224
+ .filter((entry) => !this.shouldExclude(entry.name))
225
+ .sort((a, b) => {
226
+ if (a.isDirectory() && !b.isDirectory())
227
+ return -1;
228
+ if (!a.isDirectory() && b.isDirectory())
229
+ return 1;
230
+ return a.name.localeCompare(b.name);
231
+ });
232
+ const indent = ' '.repeat(currentDepth);
233
+ for (const entry of filteredEntries) {
234
+ if (entriesCount.value >= maxEntries) {
235
+ truncatedCount.value += filteredEntries.length - filteredEntries.indexOf(entry);
236
+ break;
237
+ }
238
+ entriesCount.value++;
239
+ if (entry.isDirectory()) {
240
+ lines.push(`${indent}${entry.name}/`);
241
+ this.traverseDirectory({
242
+ currentDepth: currentDepth + 1,
243
+ dir: path.join(dir, entry.name),
244
+ entriesCount,
245
+ lines,
246
+ maxDepth,
247
+ maxEntries,
248
+ truncatedCount,
249
+ });
250
+ }
251
+ else {
252
+ lines.push(`${indent}${entry.name}`);
253
+ }
254
+ }
255
+ }
256
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Cache entry for a prompt configuration.
3
+ */
4
+ export interface PromptCacheEntry<T> {
5
+ /** Cached content */
6
+ content: T;
7
+ /** Timestamp when this entry was loaded */
8
+ loadedAt: number;
9
+ /** File modification time in milliseconds when cached */
10
+ mtimeMs: number;
11
+ }
12
+ /**
13
+ * Options for configuring the prompt cache.
14
+ */
15
+ export interface PromptCacheOptions {
16
+ /** Maximum number of entries to store (default: 100) */
17
+ maxSize?: number;
18
+ /** TTL in milliseconds, 0 means no TTL (default: 0) */
19
+ ttlMs?: number;
20
+ /** Whether to validate file mtime on cache hit (default: true) */
21
+ validateMtime?: boolean;
22
+ }
23
+ /**
24
+ * Prompt cache with file modification time and TTL validation.
25
+ *
26
+ * Features:
27
+ * - Validates cached entries against file modification time
28
+ * - Optional TTL-based expiration
29
+ * - LRU-style eviction when max size is reached
30
+ */
31
+ export declare class PromptCache<T> {
32
+ private readonly cache;
33
+ private readonly maxSize;
34
+ private readonly ttlMs;
35
+ private readonly validateMtime;
36
+ /**
37
+ * Creates a new prompt cache.
38
+ *
39
+ * @param options - Cache configuration options
40
+ */
41
+ constructor(options?: PromptCacheOptions);
42
+ /**
43
+ * Clear all cached entries.
44
+ */
45
+ clear(): void;
46
+ /**
47
+ * Get a cached entry if valid.
48
+ *
49
+ * Returns undefined if:
50
+ * - Entry doesn't exist
51
+ * - TTL has expired
52
+ * - File has been modified (mtime validation enabled)
53
+ *
54
+ * @param filepath - Absolute path to the file
55
+ * @returns Cached content or undefined if not valid
56
+ */
57
+ get(filepath: string): T | undefined;
58
+ /**
59
+ * Get cache statistics.
60
+ *
61
+ * @returns Object with size and maxSize
62
+ */
63
+ getStats(): {
64
+ maxSize: number;
65
+ size: number;
66
+ };
67
+ /**
68
+ * Check if an entry exists and is valid.
69
+ *
70
+ * @param filepath - Absolute path to the file
71
+ * @returns True if a valid entry exists
72
+ */
73
+ has(filepath: string): boolean;
74
+ /**
75
+ * Invalidate a specific cache entry.
76
+ *
77
+ * @param filepath - Absolute path to the file
78
+ * @returns True if an entry was removed
79
+ */
80
+ invalidate(filepath: string): boolean;
81
+ /**
82
+ * Get all cached filepaths.
83
+ *
84
+ * @returns Array of cached filepaths
85
+ */
86
+ keys(): string[];
87
+ /**
88
+ * Store content in the cache.
89
+ *
90
+ * If the cache is at max capacity, the oldest entry is evicted.
91
+ *
92
+ * @param filepath - Absolute path to the file
93
+ * @param content - Content to cache
94
+ */
95
+ set(filepath: string, content: T): void;
96
+ /**
97
+ * Find the oldest cache entry by loadedAt timestamp.
98
+ *
99
+ * @returns Filepath of the oldest entry, or undefined if cache is empty
100
+ */
101
+ private findOldestEntry;
102
+ }
@@ -0,0 +1,156 @@
1
+ import fs from 'node:fs';
2
+ /**
3
+ * Prompt cache with file modification time and TTL validation.
4
+ *
5
+ * Features:
6
+ * - Validates cached entries against file modification time
7
+ * - Optional TTL-based expiration
8
+ * - LRU-style eviction when max size is reached
9
+ */
10
+ export class PromptCache {
11
+ cache = new Map();
12
+ maxSize;
13
+ ttlMs;
14
+ validateMtime;
15
+ /**
16
+ * Creates a new prompt cache.
17
+ *
18
+ * @param options - Cache configuration options
19
+ */
20
+ constructor(options = {}) {
21
+ this.maxSize = options.maxSize ?? 100;
22
+ this.ttlMs = options.ttlMs ?? 0;
23
+ this.validateMtime = options.validateMtime ?? true;
24
+ }
25
+ /**
26
+ * Clear all cached entries.
27
+ */
28
+ clear() {
29
+ this.cache.clear();
30
+ }
31
+ /**
32
+ * Get a cached entry if valid.
33
+ *
34
+ * Returns undefined if:
35
+ * - Entry doesn't exist
36
+ * - TTL has expired
37
+ * - File has been modified (mtime validation enabled)
38
+ *
39
+ * @param filepath - Absolute path to the file
40
+ * @returns Cached content or undefined if not valid
41
+ */
42
+ get(filepath) {
43
+ const entry = this.cache.get(filepath);
44
+ if (!entry) {
45
+ return undefined;
46
+ }
47
+ // Check TTL
48
+ if (this.ttlMs > 0) {
49
+ const age = Date.now() - entry.loadedAt;
50
+ if (age > this.ttlMs) {
51
+ this.cache.delete(filepath);
52
+ return undefined;
53
+ }
54
+ }
55
+ // Check file modification time
56
+ if (this.validateMtime) {
57
+ try {
58
+ const stats = fs.statSync(filepath);
59
+ if (stats.mtimeMs > entry.mtimeMs) {
60
+ this.cache.delete(filepath);
61
+ return undefined;
62
+ }
63
+ }
64
+ catch {
65
+ // File doesn't exist or can't be accessed, invalidate cache
66
+ this.cache.delete(filepath);
67
+ return undefined;
68
+ }
69
+ }
70
+ return entry.content;
71
+ }
72
+ /**
73
+ * Get cache statistics.
74
+ *
75
+ * @returns Object with size and maxSize
76
+ */
77
+ getStats() {
78
+ return {
79
+ maxSize: this.maxSize,
80
+ size: this.cache.size,
81
+ };
82
+ }
83
+ /**
84
+ * Check if an entry exists and is valid.
85
+ *
86
+ * @param filepath - Absolute path to the file
87
+ * @returns True if a valid entry exists
88
+ */
89
+ has(filepath) {
90
+ return this.get(filepath) !== undefined;
91
+ }
92
+ /**
93
+ * Invalidate a specific cache entry.
94
+ *
95
+ * @param filepath - Absolute path to the file
96
+ * @returns True if an entry was removed
97
+ */
98
+ invalidate(filepath) {
99
+ return this.cache.delete(filepath);
100
+ }
101
+ /**
102
+ * Get all cached filepaths.
103
+ *
104
+ * @returns Array of cached filepaths
105
+ */
106
+ keys() {
107
+ return [...this.cache.keys()];
108
+ }
109
+ /**
110
+ * Store content in the cache.
111
+ *
112
+ * If the cache is at max capacity, the oldest entry is evicted.
113
+ *
114
+ * @param filepath - Absolute path to the file
115
+ * @param content - Content to cache
116
+ */
117
+ set(filepath, content) {
118
+ // Evict oldest entry if at max size
119
+ if (this.cache.size >= this.maxSize && !this.cache.has(filepath)) {
120
+ const oldest = this.findOldestEntry();
121
+ if (oldest) {
122
+ this.cache.delete(oldest);
123
+ }
124
+ }
125
+ // Get file mtime
126
+ let mtimeMs = Date.now();
127
+ try {
128
+ const stats = fs.statSync(filepath);
129
+ mtimeMs = stats.mtimeMs;
130
+ }
131
+ catch {
132
+ // Use current time if file doesn't exist
133
+ }
134
+ this.cache.set(filepath, {
135
+ content,
136
+ loadedAt: Date.now(),
137
+ mtimeMs,
138
+ });
139
+ }
140
+ /**
141
+ * Find the oldest cache entry by loadedAt timestamp.
142
+ *
143
+ * @returns Filepath of the oldest entry, or undefined if cache is empty
144
+ */
145
+ findOldestEntry() {
146
+ let oldestPath;
147
+ let oldestTime = Number.POSITIVE_INFINITY;
148
+ for (const [filepath, entry] of this.cache.entries()) {
149
+ if (entry.loadedAt < oldestTime) {
150
+ oldestTime = entry.loadedAt;
151
+ oldestPath = filepath;
152
+ }
153
+ }
154
+ return oldestPath;
155
+ }
156
+ }
@@ -0,0 +1,151 @@
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 declare const PromptConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
10
+ description: z.ZodOptional<z.ZodString>;
11
+ excludedTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
+ prompt: z.ZodOptional<z.ZodString>;
13
+ prompts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
14
+ }, "strict", z.ZodTypeAny, {
15
+ prompt?: string | undefined;
16
+ description?: string | undefined;
17
+ excludedTools?: string[] | undefined;
18
+ prompts?: Record<string, string> | undefined;
19
+ }, {
20
+ prompt?: string | undefined;
21
+ description?: string | undefined;
22
+ excludedTools?: string[] | undefined;
23
+ prompts?: Record<string, string> | undefined;
24
+ }>, {
25
+ prompt?: string | undefined;
26
+ description?: string | undefined;
27
+ excludedTools?: string[] | undefined;
28
+ prompts?: Record<string, string> | undefined;
29
+ }, {
30
+ prompt?: string | undefined;
31
+ description?: string | undefined;
32
+ excludedTools?: string[] | undefined;
33
+ prompts?: Record<string, string> | undefined;
34
+ }>, {
35
+ prompt?: string | undefined;
36
+ description?: string | undefined;
37
+ excludedTools?: string[] | undefined;
38
+ prompts?: Record<string, string> | undefined;
39
+ }, unknown>;
40
+ /**
41
+ * Validated prompt configuration type.
42
+ */
43
+ export type ValidatedPromptConfig = z.infer<typeof PromptConfigSchema>;
44
+ /**
45
+ * Schema for conversation metadata.
46
+ */
47
+ export declare const ConversationMetadataSchema: z.ZodObject<{
48
+ conversationId: z.ZodOptional<z.ZodString>;
49
+ title: z.ZodOptional<z.ZodString>;
50
+ }, "strict", z.ZodTypeAny, {
51
+ title?: string | undefined;
52
+ conversationId?: string | undefined;
53
+ }, {
54
+ title?: string | undefined;
55
+ conversationId?: string | undefined;
56
+ }>;
57
+ /**
58
+ * Schema for build context passed to system prompt builder.
59
+ *
60
+ * Contains runtime information needed to construct the system prompt.
61
+ */
62
+ export declare const BuildContextSchema: z.ZodObject<{
63
+ availableMarkers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
64
+ availableTools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
65
+ commandType: z.ZodOptional<z.ZodEnum<["curate", "query"]>>;
66
+ conversationMetadata: z.ZodOptional<z.ZodObject<{
67
+ conversationId: z.ZodOptional<z.ZodString>;
68
+ title: z.ZodOptional<z.ZodString>;
69
+ }, "strict", z.ZodTypeAny, {
70
+ title?: string | undefined;
71
+ conversationId?: string | undefined;
72
+ }, {
73
+ title?: string | undefined;
74
+ conversationId?: string | undefined;
75
+ }>>;
76
+ environmentContext: z.ZodOptional<z.ZodAny>;
77
+ fileReferenceInstructions: z.ZodOptional<z.ZodString>;
78
+ memoryManager: z.ZodOptional<z.ZodAny>;
79
+ }, "strict", z.ZodTypeAny, {
80
+ availableMarkers?: Record<string, string> | undefined;
81
+ availableTools?: string[] | undefined;
82
+ commandType?: "curate" | "query" | undefined;
83
+ conversationMetadata?: {
84
+ title?: string | undefined;
85
+ conversationId?: string | undefined;
86
+ } | undefined;
87
+ environmentContext?: any;
88
+ fileReferenceInstructions?: string | undefined;
89
+ memoryManager?: any;
90
+ }, {
91
+ availableMarkers?: Record<string, string> | undefined;
92
+ availableTools?: string[] | undefined;
93
+ commandType?: "curate" | "query" | undefined;
94
+ conversationMetadata?: {
95
+ title?: string | undefined;
96
+ conversationId?: string | undefined;
97
+ } | undefined;
98
+ environmentContext?: any;
99
+ fileReferenceInstructions?: string | undefined;
100
+ memoryManager?: any;
101
+ }>;
102
+ /**
103
+ * Validated build context type.
104
+ */
105
+ export type ValidatedBuildContext = z.infer<typeof BuildContextSchema>;
106
+ /**
107
+ * Schema for environment context builder options.
108
+ */
109
+ export declare const EnvironmentContextOptionsSchema: z.ZodObject<{
110
+ includeBrvStructure: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
111
+ includeFileTree: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
112
+ maxFileTreeDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
113
+ maxFileTreeEntries: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
114
+ workingDirectory: z.ZodString;
115
+ }, "strict", z.ZodTypeAny, {
116
+ workingDirectory: string;
117
+ includeBrvStructure: boolean;
118
+ includeFileTree: boolean;
119
+ maxFileTreeDepth: number;
120
+ maxFileTreeEntries: number;
121
+ }, {
122
+ workingDirectory: string;
123
+ includeBrvStructure?: boolean | undefined;
124
+ includeFileTree?: boolean | undefined;
125
+ maxFileTreeDepth?: number | undefined;
126
+ maxFileTreeEntries?: number | undefined;
127
+ }>;
128
+ /**
129
+ * Validated environment context options type.
130
+ */
131
+ export type ValidatedEnvironmentContextOptions = z.infer<typeof EnvironmentContextOptionsSchema>;
132
+ /**
133
+ * Schema for reflection prompt context.
134
+ */
135
+ export declare const ReflectionContextSchema: z.ZodObject<{
136
+ currentIteration: z.ZodOptional<z.ZodNumber>;
137
+ maxIterations: z.ZodOptional<z.ZodNumber>;
138
+ type: z.ZodEnum<["completion_check", "final_iteration", "mid_point_check", "near_max_iterations"]>;
139
+ }, "strict", z.ZodTypeAny, {
140
+ type: "completion_check" | "final_iteration" | "mid_point_check" | "near_max_iterations";
141
+ maxIterations?: number | undefined;
142
+ currentIteration?: number | undefined;
143
+ }, {
144
+ type: "completion_check" | "final_iteration" | "mid_point_check" | "near_max_iterations";
145
+ maxIterations?: number | undefined;
146
+ currentIteration?: number | undefined;
147
+ }>;
148
+ /**
149
+ * Validated reflection context type.
150
+ */
151
+ export type ValidatedReflectionContext = z.infer<typeof ReflectionContextSchema>;