byterover-cli 0.4.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  49. package/dist/core/domain/errors/connection-error.js +54 -0
  50. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  51. package/dist/core/domain/errors/core-process-error.js +43 -0
  52. package/dist/core/domain/errors/task-error.d.ts +64 -0
  53. package/dist/core/domain/errors/task-error.js +116 -0
  54. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  55. package/dist/core/domain/errors/transport-error.js +114 -0
  56. package/dist/core/domain/instance/index.d.ts +1 -0
  57. package/dist/core/domain/instance/index.js +1 -0
  58. package/dist/core/domain/instance/types.d.ts +57 -0
  59. package/dist/core/domain/instance/types.js +72 -0
  60. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  61. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  62. package/dist/core/domain/transport/index.d.ts +2 -0
  63. package/dist/core/domain/transport/index.js +2 -0
  64. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  65. package/dist/core/domain/transport/schemas.js +554 -0
  66. package/dist/core/domain/transport/types.d.ts +67 -0
  67. package/dist/core/domain/transport/types.js +7 -0
  68. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  69. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  70. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  71. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  72. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  73. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  74. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  75. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  76. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  77. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  79. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  80. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  81. package/dist/core/interfaces/cipher/index.js +11 -0
  82. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  83. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  84. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  85. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  86. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  87. package/dist/core/interfaces/cipher/message-types.js +6 -0
  88. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  89. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  90. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  91. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  92. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  93. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  94. package/dist/core/interfaces/executor/index.d.ts +2 -0
  95. package/dist/core/interfaces/executor/index.js +2 -0
  96. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  97. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  98. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  99. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  100. package/dist/core/interfaces/instance/index.d.ts +2 -0
  101. package/dist/core/interfaces/instance/index.js +2 -0
  102. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  103. package/dist/core/interfaces/noop-implementations.js +62 -0
  104. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  105. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  106. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  107. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  108. package/dist/core/interfaces/transport/index.d.ts +2 -0
  109. package/dist/core/interfaces/transport/index.js +2 -0
  110. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  111. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  112. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  113. package/dist/infra/cipher/agent/agent-error.js +79 -0
  114. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  115. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  116. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  117. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  118. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  119. package/dist/infra/cipher/agent/base-agent.js +240 -0
  120. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  121. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  122. package/dist/infra/cipher/agent/index.d.ts +22 -0
  123. package/dist/infra/cipher/agent/index.js +24 -0
  124. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  125. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  126. package/dist/infra/cipher/agent/types.d.ts +35 -0
  127. package/dist/infra/cipher/agent/types.js +1 -0
  128. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  129. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  130. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  131. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  132. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  133. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  134. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  135. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  136. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  137. package/dist/infra/cipher/consumer/index.js +2 -1
  138. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  139. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  140. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  141. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  142. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  143. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  144. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  145. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  146. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  147. package/dist/infra/cipher/interactive-loop.js +41 -33
  148. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  149. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  150. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  151. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  152. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  153. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  154. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  155. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  156. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  157. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  158. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  159. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  160. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  161. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  162. package/dist/infra/cipher/llm/context/utils.js +17 -4
  163. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  164. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  165. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  166. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  167. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  168. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  169. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  170. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  171. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  172. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  173. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  174. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  175. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  176. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  177. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  178. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  179. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  180. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  181. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  182. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  183. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  184. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  185. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  186. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  187. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  188. package/dist/infra/cipher/process/command-validator.js +75 -0
  189. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  190. package/dist/infra/cipher/process/path-utils.js +94 -0
  191. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  192. package/dist/infra/cipher/process/process-service.js +98 -17
  193. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  194. package/dist/infra/cipher/session/chat-session.js +163 -13
  195. package/dist/infra/cipher/session/index.d.ts +1 -0
  196. package/dist/infra/cipher/session/index.js +2 -0
  197. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  198. package/dist/infra/cipher/session/message-queue.js +90 -0
  199. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  200. package/dist/infra/cipher/session/session-manager.js +254 -7
  201. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  202. package/dist/infra/cipher/session/session-status.js +184 -0
  203. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  204. package/dist/infra/cipher/session/title-generator.js +31 -0
  205. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  206. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  207. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  208. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  209. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  210. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  211. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  212. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  213. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  214. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  215. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  216. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  217. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  218. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  219. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  220. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  221. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  222. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  223. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  224. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  225. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  226. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  227. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  228. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  229. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  230. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  231. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  232. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  233. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  234. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  235. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  236. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  237. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  238. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  239. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  240. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  241. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  242. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  243. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  244. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  245. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  246. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  247. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  249. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  250. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  251. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  252. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  253. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  254. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  255. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  256. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  257. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  258. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  259. package/dist/infra/cipher/tools/index.d.ts +1 -1
  260. package/dist/infra/cipher/tools/index.js +1 -1
  261. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  262. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  263. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  264. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  265. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  266. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  267. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  268. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  269. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  270. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  271. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  272. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  273. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  274. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  275. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  276. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  277. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  278. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  279. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  280. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  281. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  282. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  283. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  284. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  285. package/dist/infra/context-tree/path-utils.js +7 -0
  286. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  287. package/dist/infra/core/executors/curate-executor.js +123 -0
  288. package/dist/infra/core/executors/index.d.ts +2 -0
  289. package/dist/infra/core/executors/index.js +2 -0
  290. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  291. package/dist/infra/core/executors/query-executor.js +51 -0
  292. package/dist/infra/core/task-processor.d.ts +81 -0
  293. package/dist/infra/core/task-processor.js +115 -0
  294. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  295. package/dist/infra/instance/file-instance-discovery.js +84 -0
  296. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  297. package/dist/infra/instance/file-instance-manager.js +123 -0
  298. package/dist/infra/instance/index.d.ts +3 -0
  299. package/dist/infra/instance/index.js +3 -0
  300. package/dist/infra/instance/process-utils.d.ts +14 -0
  301. package/dist/infra/instance/process-utils.js +39 -0
  302. package/dist/infra/process/agent-worker.d.ts +20 -0
  303. package/dist/infra/process/agent-worker.js +602 -0
  304. package/dist/infra/process/index.d.ts +12 -0
  305. package/dist/infra/process/index.js +11 -0
  306. package/dist/infra/process/ipc-types.d.ts +55 -0
  307. package/dist/infra/process/ipc-types.js +12 -0
  308. package/dist/infra/process/process-manager.d.ts +154 -0
  309. package/dist/infra/process/process-manager.js +471 -0
  310. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  311. package/dist/infra/process/task-queue-manager.js +226 -0
  312. package/dist/infra/process/transport-handlers.d.ts +124 -0
  313. package/dist/infra/process/transport-handlers.js +348 -0
  314. package/dist/infra/process/transport-worker.d.ts +20 -0
  315. package/dist/infra/process/transport-worker.js +168 -0
  316. package/dist/infra/repl/commands/curate-command.js +0 -5
  317. package/dist/infra/repl/commands/query-command.js +0 -3
  318. package/dist/infra/repl/repl-startup.d.ts +4 -0
  319. package/dist/infra/repl/repl-startup.js +8 -1
  320. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  321. package/dist/infra/repl/transport-client-helper.js +96 -0
  322. package/dist/infra/transport/index.d.ts +4 -0
  323. package/dist/infra/transport/index.js +4 -0
  324. package/dist/infra/transport/port-utils.d.ts +42 -0
  325. package/dist/infra/transport/port-utils.js +84 -0
  326. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  327. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  328. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  329. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  330. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  331. package/dist/infra/transport/transport-client-factory.js +168 -0
  332. package/dist/infra/transport/transport-factory.d.ts +33 -0
  333. package/dist/infra/transport/transport-factory.js +59 -0
  334. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  335. package/dist/infra/usecase/curate-use-case.js +71 -262
  336. package/dist/infra/usecase/init-use-case.js +3 -2
  337. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  338. package/dist/infra/usecase/query-use-case.js +250 -326
  339. package/dist/infra/usecase/status-use-case.js +1 -1
  340. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  341. package/dist/resources/prompts/explore.yml +78 -0
  342. package/dist/resources/prompts/plan.yml +114 -0
  343. package/dist/resources/prompts/reflection.yml +1 -1
  344. package/dist/resources/prompts/system-prompt.yml +15 -8
  345. package/dist/resources/prompts/tool-outputs.yml +0 -5
  346. package/dist/resources/tools/bash_exec.txt +98 -0
  347. package/dist/resources/tools/bash_output.txt +40 -0
  348. package/dist/resources/tools/batch.txt +28 -0
  349. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  350. package/dist/resources/tools/curate.txt +22 -0
  351. package/dist/resources/tools/delete_memory.txt +1 -0
  352. package/dist/resources/tools/detect_domains.txt +11 -0
  353. package/dist/resources/tools/edit_file.txt +1 -0
  354. package/dist/resources/tools/edit_memory.txt +1 -0
  355. package/dist/resources/tools/glob_files.txt +20 -0
  356. package/dist/resources/tools/grep_content.txt +18 -0
  357. package/dist/resources/tools/kill_process.txt +16 -0
  358. package/dist/resources/tools/list_directory.txt +16 -0
  359. package/dist/resources/tools/list_memories.txt +1 -0
  360. package/dist/resources/tools/read_file.txt +31 -0
  361. package/dist/resources/tools/read_memory.txt +1 -0
  362. package/dist/resources/tools/read_todos.txt +17 -0
  363. package/dist/resources/tools/search_history.txt +1 -0
  364. package/dist/resources/tools/task.txt +23 -0
  365. package/dist/resources/tools/write_file.txt +1 -0
  366. package/dist/resources/tools/write_memory.txt +1 -0
  367. package/dist/resources/tools/write_todos.txt +29 -0
  368. package/dist/tui/app.js +9 -13
  369. package/dist/tui/components/command-details.d.ts +14 -0
  370. package/dist/tui/components/command-details.js +35 -0
  371. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  372. package/dist/tui/components/execution/execution-changes.js +19 -4
  373. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  374. package/dist/tui/components/execution/execution-content.js +26 -13
  375. package/dist/tui/components/execution/execution-input.js +3 -3
  376. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  377. package/dist/tui/components/execution/execution-progress.js +8 -6
  378. package/dist/tui/components/execution/log-item.d.ts +3 -4
  379. package/dist/tui/components/execution/log-item.js +2 -5
  380. package/dist/tui/components/footer.js +9 -4
  381. package/dist/tui/components/header.d.ts +3 -3
  382. package/dist/tui/components/header.js +5 -3
  383. package/dist/tui/components/index.d.ts +1 -0
  384. package/dist/tui/components/index.js +1 -0
  385. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  386. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  387. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  388. package/dist/tui/components/scrollable-list.js +12 -10
  389. package/dist/tui/components/suggestions.js +39 -41
  390. package/dist/tui/components/tab-bar.d.ts +2 -1
  391. package/dist/tui/components/tab-bar.js +3 -4
  392. package/dist/tui/constants.d.ts +0 -5
  393. package/dist/tui/constants.js +0 -5
  394. package/dist/tui/contexts/auth-context.js +9 -2
  395. package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
  396. package/dist/tui/contexts/index.d.ts +6 -1
  397. package/dist/tui/contexts/index.js +6 -1
  398. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  399. package/dist/tui/contexts/onboarding-context.js +9 -9
  400. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  401. package/dist/tui/contexts/tasks-context.js +218 -0
  402. package/dist/tui/contexts/transport-context.d.ts +29 -0
  403. package/dist/tui/contexts/transport-context.js +82 -0
  404. package/dist/tui/hooks/index.d.ts +10 -6
  405. package/dist/tui/hooks/index.js +7 -6
  406. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  407. package/dist/tui/hooks/use-activity-logs.js +87 -34
  408. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  409. package/dist/tui/hooks/use-auth-polling.js +104 -0
  410. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  411. package/dist/tui/hooks/use-slash-completion.js +1 -1
  412. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  413. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  414. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  415. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  416. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  417. package/dist/tui/hooks/use-ui-heights.js +88 -0
  418. package/dist/tui/providers/app-providers.js +2 -6
  419. package/dist/tui/types/commands.d.ts +0 -26
  420. package/dist/tui/types/index.d.ts +1 -1
  421. package/dist/tui/types/ui.d.ts +9 -4
  422. package/dist/tui/utils/line.d.ts +11 -0
  423. package/dist/tui/utils/line.js +16 -0
  424. package/dist/tui/utils/log.d.ts +27 -0
  425. package/dist/tui/utils/log.js +114 -0
  426. package/dist/tui/views/command-view.d.ts +7 -0
  427. package/dist/tui/views/command-view.js +103 -80
  428. package/dist/tui/views/login-view.js +7 -4
  429. package/dist/tui/views/logs-view.d.ts +13 -0
  430. package/dist/tui/views/logs-view.js +27 -52
  431. package/dist/utils/connection-error-handler.d.ts +16 -0
  432. package/dist/utils/connection-error-handler.js +49 -0
  433. package/dist/utils/crash-log.d.ts +14 -0
  434. package/dist/utils/crash-log.js +19 -0
  435. package/dist/utils/file-helpers.d.ts +14 -0
  436. package/dist/utils/file-helpers.js +21 -0
  437. package/dist/utils/global-logs-path.d.ts +11 -0
  438. package/dist/utils/global-logs-path.js +37 -0
  439. package/dist/utils/process-logger.d.ts +53 -0
  440. package/dist/utils/process-logger.js +253 -0
  441. package/dist/utils/sandbox-detector.d.ts +31 -0
  442. package/dist/utils/sandbox-detector.js +122 -0
  443. package/oclif.manifest.json +10 -198
  444. package/package.json +5 -1
  445. package/dist/commands/cipher-agent/run.d.ts +0 -142
  446. package/dist/commands/cipher-agent/run.js +0 -555
  447. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  448. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  449. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  450. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  451. package/dist/commands/foo.d.ts +0 -14
  452. package/dist/commands/foo.js +0 -66
  453. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  454. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  455. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  456. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  457. package/dist/infra/cipher/cipher-agent.js +0 -317
  458. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  459. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  460. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  461. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  462. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  463. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  464. package/dist/tui/contexts/consumer.d.ts +0 -31
  465. package/dist/tui/contexts/consumer.js +0 -56
  466. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  467. package/dist/tui/hooks/use-consumer.js +0 -50
  468. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  469. package/dist/tui/hooks/use-queue-polling.js +0 -90
  470. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  471. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  472. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  473. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  474. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Crash Log - Re-exports from unified process-logger.
3
+ *
4
+ * @deprecated Use crashLog from process-logger.ts directly.
5
+ * This file is kept for backwards compatibility.
6
+ */
7
+ /**
8
+ * @deprecated Use crashLog from process-logger.ts
9
+ */
10
+ export declare function writeCrashLog(error: Error | string, context?: string): Promise<string>;
11
+ /**
12
+ * @deprecated Use getSessionLogPath from process-logger.ts
13
+ */
14
+ export declare function getLogsDir(): string;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Crash Log - Re-exports from unified process-logger.
3
+ *
4
+ * @deprecated Use crashLog from process-logger.ts directly.
5
+ * This file is kept for backwards compatibility.
6
+ */
7
+ import { crashLog, getSessionLogPath } from './process-logger.js';
8
+ /**
9
+ * @deprecated Use crashLog from process-logger.ts
10
+ */
11
+ export async function writeCrashLog(error, context) {
12
+ return crashLog(error, context);
13
+ }
14
+ /**
15
+ * @deprecated Use getSessionLogPath from process-logger.ts
16
+ */
17
+ export function getLogsDir() {
18
+ return getSessionLogPath();
19
+ }
@@ -19,6 +19,20 @@ export declare function clearDirectory(dirPath: string): Promise<number>;
19
19
  * @returns The sanitized folder path
20
20
  */
21
21
  export declare function sanitizeFolderName(folderName: string): string;
22
+ /**
23
+ * Converts a string to lowercase snake_case for file/folder naming.
24
+ * Replaces spaces and special characters with underscores, converts to lowercase.
25
+ * @param name - The name to convert
26
+ * @returns The snake_case version of the name
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * toSnakeCase('Best Practices') // => 'best_practices'
31
+ * toSnakeCase('Error-Handling') // => 'error_handling'
32
+ * toSnakeCase('QuickSort Optimizations') // => 'quicksort_optimizations'
33
+ * ```
34
+ */
35
+ export declare function toSnakeCase(name: string): string;
22
36
  /**
23
37
  * Lists all immediate children (files and directories) of the given directory,
24
38
  * and, for each child folder, shows its own immediate children.
@@ -52,6 +52,27 @@ export async function clearDirectory(dirPath) {
52
52
  export function sanitizeFolderName(folderName) {
53
53
  return folderName.replaceAll(/[^\w\-./]/g, '-');
54
54
  }
55
+ /**
56
+ * Converts a string to lowercase snake_case for file/folder naming.
57
+ * Replaces spaces and special characters with underscores, converts to lowercase.
58
+ * @param name - The name to convert
59
+ * @returns The snake_case version of the name
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * toSnakeCase('Best Practices') // => 'best_practices'
64
+ * toSnakeCase('Error-Handling') // => 'error_handling'
65
+ * toSnakeCase('QuickSort Optimizations') // => 'quicksort_optimizations'
66
+ * ```
67
+ */
68
+ export function toSnakeCase(name) {
69
+ return name
70
+ .toLowerCase()
71
+ .trim()
72
+ .replaceAll(/[^\w]+/g, '_')
73
+ .replaceAll(/_{2,}/g, '_')
74
+ .replaceAll(/^_|_$/g, '');
75
+ }
55
76
  /**
56
77
  * Lists all immediate children (files and directories) of the given directory,
57
78
  * and, for each child folder, shows its own immediate children.
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns the global logs directory path following platform conventions:
3
+ * - Windows: %LOCALAPPDATA%/brv/logs
4
+ * - macOS: ~/Library/Logs/brv
5
+ * - Linux: $XDG_STATE_HOME/brv/logs (defaults to ~/.local/state/brv/logs)
6
+ *
7
+ * Falls back to temp directory if any system call fails.
8
+ *
9
+ * @returns Absolute path to the global logs directory
10
+ */
11
+ export declare function getGlobalLogsDir(): string;
@@ -0,0 +1,37 @@
1
+ import { homedir, platform, tmpdir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Returns the global logs directory path following platform conventions:
5
+ * - Windows: %LOCALAPPDATA%/brv/logs
6
+ * - macOS: ~/Library/Logs/brv
7
+ * - Linux: $XDG_STATE_HOME/brv/logs (defaults to ~/.local/state/brv/logs)
8
+ *
9
+ * Falls back to temp directory if any system call fails.
10
+ *
11
+ * @returns Absolute path to the global logs directory
12
+ */
13
+ export function getGlobalLogsDir() {
14
+ try {
15
+ const currentPlatform = platform();
16
+ if (currentPlatform === 'win32') {
17
+ const localAppData = process.env.LOCALAPPDATA;
18
+ if (localAppData) {
19
+ return join(localAppData, 'brv', 'logs');
20
+ }
21
+ return join(homedir(), 'AppData', 'Local', 'brv', 'logs');
22
+ }
23
+ if (currentPlatform === 'darwin') {
24
+ return join(homedir(), 'Library', 'Logs', 'brv');
25
+ }
26
+ // Linux: XDG_STATE_HOME/brv/logs
27
+ const xdgStateHome = process.env.XDG_STATE_HOME;
28
+ if (xdgStateHome) {
29
+ return join(xdgStateHome, 'brv', 'logs');
30
+ }
31
+ return join(homedir(), '.local', 'state', 'brv', 'logs');
32
+ }
33
+ catch {
34
+ // Fallback to temp directory if any system call fails
35
+ return join(tmpdir(), 'brv', 'logs');
36
+ }
37
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Unified Process Logger - Single log file per session.
3
+ *
4
+ * Logs are stored following platform conventions:
5
+ * - Windows: %LOCALAPPDATA%/brv/logs/brv-{timestamp}.log
6
+ * - macOS: ~/Library/Logs/brv/brv-{timestamp}.log
7
+ * - Linux: $XDG_STATE_HOME/brv/logs/brv-{timestamp}.log
8
+ *
9
+ * Each session creates a new log file with timestamp.
10
+ */
11
+ /**
12
+ * Initialize session log - creates a new log file for this session.
13
+ * Should be called once when the main process starts.
14
+ */
15
+ export declare function initSessionLog(): void;
16
+ /**
17
+ * Write a log entry to the log file.
18
+ * Uses synchronous append for reliability in process shutdown scenarios.
19
+ */
20
+ export declare function processLog(message: string): void;
21
+ /**
22
+ * Log with [Transport] prefix.
23
+ */
24
+ export declare function transportLog(message: string): void;
25
+ /**
26
+ * Log with [Agent] prefix.
27
+ */
28
+ export declare function agentLog(message: string): void;
29
+ /**
30
+ * Log with [ProcessManager] prefix.
31
+ */
32
+ export declare function processManagerLog(message: string): void;
33
+ /**
34
+ * Log a transport event (for TUI monitoring).
35
+ */
36
+ export declare function eventLog(eventName: string, data?: unknown): void;
37
+ /**
38
+ * Log an error with full details.
39
+ */
40
+ export declare function errorLog(error: Error | string, context?: string): void;
41
+ /**
42
+ * Log a crash with full environment details.
43
+ * Everything goes to the session log file.
44
+ * Never throws - always returns a log path (even if logging failed).
45
+ *
46
+ * @returns The path to the log file (for user feedback)
47
+ */
48
+ export declare function crashLog(error: Error | string, contextStr?: string): string;
49
+ /**
50
+ * Get the path to the current session's log file.
51
+ * Never throws - returns fallback path if session path unavailable.
52
+ */
53
+ export declare function getSessionLogPath(): string;
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Unified Process Logger - Single log file per session.
3
+ *
4
+ * Logs are stored following platform conventions:
5
+ * - Windows: %LOCALAPPDATA%/brv/logs/brv-{timestamp}.log
6
+ * - macOS: ~/Library/Logs/brv/brv-{timestamp}.log
7
+ * - Linux: $XDG_STATE_HOME/brv/logs/brv-{timestamp}.log
8
+ *
9
+ * Each session creates a new log file with timestamp.
10
+ */
11
+ import { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { getGlobalLogsDir } from './global-logs-path.js';
14
+ /** Current session's log file path (set on init) */
15
+ let sessionLogPath;
16
+ /**
17
+ * Get the logs directory path.
18
+ */
19
+ function getLogsDir() {
20
+ return getGlobalLogsDir();
21
+ }
22
+ /**
23
+ * Ensure logs directory exists.
24
+ * Silently ignores errors to prevent crashes.
25
+ */
26
+ function ensureLogDir() {
27
+ try {
28
+ const logsDir = getLogsDir();
29
+ if (!existsSync(logsDir)) {
30
+ mkdirSync(logsDir, { recursive: true });
31
+ }
32
+ }
33
+ catch {
34
+ // Silently ignore - directory creation may fail due to permissions
35
+ // Logging will fail gracefully later when trying to write
36
+ }
37
+ }
38
+ /** Max age for log files in milliseconds (30 days) */
39
+ const LOG_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1000;
40
+ /**
41
+ * Clean up log files older than 30 days.
42
+ * Runs silently - errors are ignored to not affect the main process.
43
+ */
44
+ function cleanupOldLogs() {
45
+ try {
46
+ const logsDir = getLogsDir();
47
+ if (!existsSync(logsDir))
48
+ return;
49
+ const now = Date.now();
50
+ const files = readdirSync(logsDir);
51
+ for (const file of files) {
52
+ if (!file.endsWith('.log'))
53
+ continue;
54
+ const filePath = join(logsDir, file);
55
+ const stats = statSync(filePath);
56
+ const age = now - stats.mtimeMs;
57
+ if (age > LOG_MAX_AGE_MS) {
58
+ unlinkSync(filePath);
59
+ }
60
+ }
61
+ }
62
+ catch {
63
+ // Silently ignore - don't crash the process
64
+ }
65
+ }
66
+ /**
67
+ * Format timestamp for log entries.
68
+ */
69
+ function formatTimestamp() {
70
+ const now = new Date();
71
+ return now.toISOString().replace('T', ' ').slice(0, 23);
72
+ }
73
+ /**
74
+ * Generate session log filename with timestamp.
75
+ */
76
+ function generateSessionLogFilename() {
77
+ const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-').slice(0, 19);
78
+ return `brv-${timestamp}.log`;
79
+ }
80
+ /**
81
+ * Get current session's log file path.
82
+ * Uses BRV_SESSION_LOG env var if set (for child processes),
83
+ * otherwise creates new session file.
84
+ */
85
+ function getLogPath() {
86
+ if (!sessionLogPath) {
87
+ // Check if parent process set the log path
88
+ const envLogPath = process.env.BRV_SESSION_LOG;
89
+ if (envLogPath) {
90
+ sessionLogPath = envLogPath;
91
+ }
92
+ else {
93
+ // Try to create log directory, but don't crash if it fails
94
+ // getLogsDir() has its own fallback to tmpdir() via getGlobalLogsDir()
95
+ try {
96
+ ensureLogDir();
97
+ }
98
+ catch {
99
+ // Directory creation failed - subsequent writes will also fail silently
100
+ // This prevents crash when getSessionLogPath() is called from process-manager
101
+ }
102
+ sessionLogPath = join(getLogsDir(), generateSessionLogFilename());
103
+ }
104
+ }
105
+ return sessionLogPath;
106
+ }
107
+ /**
108
+ * Initialize session log - creates a new log file for this session.
109
+ * Should be called once when the main process starts.
110
+ */
111
+ export function initSessionLog() {
112
+ if (sessionLogPath)
113
+ return;
114
+ try {
115
+ ensureLogDir();
116
+ cleanupOldLogs();
117
+ sessionLogPath = join(getLogsDir(), generateSessionLogFilename());
118
+ const timestamp = formatTimestamp();
119
+ const header = [
120
+ '='.repeat(70),
121
+ `BRV Session Log - Started: ${timestamp}`,
122
+ `CWD: ${process.cwd()}`,
123
+ `Node: ${process.version} | Platform: ${process.platform} | PID: ${process.pid}`,
124
+ '='.repeat(70),
125
+ '',
126
+ ].join('\n');
127
+ writeFileSync(sessionLogPath, header);
128
+ }
129
+ catch {
130
+ // Silently ignore - don't crash the process
131
+ }
132
+ }
133
+ /**
134
+ * Write a log entry to the log file.
135
+ * Uses synchronous append for reliability in process shutdown scenarios.
136
+ */
137
+ export function processLog(message) {
138
+ try {
139
+ ensureLogDir();
140
+ const timestamp = formatTimestamp();
141
+ const logLine = `${timestamp} ${message}\n`;
142
+ appendFileSync(getLogPath(), logLine);
143
+ }
144
+ catch {
145
+ // Silently ignore log failures - don't crash the process
146
+ }
147
+ }
148
+ /**
149
+ * Log with [Transport] prefix.
150
+ */
151
+ export function transportLog(message) {
152
+ processLog(`[Transport] ${message}`);
153
+ }
154
+ /**
155
+ * Log with [Agent] prefix.
156
+ */
157
+ export function agentLog(message) {
158
+ processLog(`[Agent] ${message}`);
159
+ }
160
+ /**
161
+ * Log with [ProcessManager] prefix.
162
+ */
163
+ export function processManagerLog(message) {
164
+ processLog(`[ProcessManager] ${message}`);
165
+ }
166
+ /**
167
+ * Log a transport event (for TUI monitoring).
168
+ */
169
+ export function eventLog(eventName, data) {
170
+ const dataStr = data ? ` ${JSON.stringify(data)}` : '';
171
+ processLog(`[Event] ${eventName}${dataStr}`);
172
+ }
173
+ /**
174
+ * Log an error with full details.
175
+ */
176
+ export function errorLog(error, context) {
177
+ const errorMessage = error instanceof Error ? error.message : error;
178
+ const errorStack = error instanceof Error ? error.stack : undefined;
179
+ const contextStr = context ? ` (${context})` : '';
180
+ processLog(`[ERROR]${contextStr} ${errorMessage}`);
181
+ if (errorStack) {
182
+ const indentedStack = errorStack
183
+ .split('\n')
184
+ .slice(1)
185
+ .map((line) => ` ${line}`)
186
+ .join('\n');
187
+ processLog(indentedStack);
188
+ }
189
+ }
190
+ /**
191
+ * Log a crash with full environment details.
192
+ * Everything goes to the session log file.
193
+ * Never throws - always returns a log path (even if logging failed).
194
+ *
195
+ * @returns The path to the log file (for user feedback)
196
+ */
197
+ export function crashLog(error, contextStr = 'Unknown') {
198
+ let logPath;
199
+ try {
200
+ const errorMessage = error instanceof Error ? error.message : error;
201
+ const errorStack = error instanceof Error ? error.stack : undefined;
202
+ const timestamp = formatTimestamp();
203
+ logPath = getLogPath();
204
+ ensureLogDir();
205
+ const crashContent = [
206
+ '',
207
+ '!'.repeat(70),
208
+ `CRASH at ${timestamp}`,
209
+ '!'.repeat(70),
210
+ '',
211
+ `Context: ${contextStr}`,
212
+ `Message: ${errorMessage}`,
213
+ '',
214
+ 'Stack Trace:',
215
+ errorStack ?? '(No stack trace available)',
216
+ '',
217
+ 'Environment:',
218
+ ` Node.js: ${process.version}`,
219
+ ` Platform: ${process.platform}`,
220
+ ` Arch: ${process.arch}`,
221
+ ` CWD: ${process.cwd()}`,
222
+ ` PID: ${process.pid}`,
223
+ '',
224
+ 'Memory Usage:',
225
+ JSON.stringify(process.memoryUsage(), null, 2)
226
+ .split('\n')
227
+ .map((line) => ` ${line}`)
228
+ .join('\n'),
229
+ '',
230
+ '!'.repeat(70),
231
+ '',
232
+ ].join('\n');
233
+ appendFileSync(logPath, crashContent);
234
+ }
235
+ catch {
236
+ // If we can't write or get path, return a fallback path for user feedback
237
+ logPath = logPath || join(getGlobalLogsDir(), 'brv-crash.log');
238
+ }
239
+ return logPath;
240
+ }
241
+ /**
242
+ * Get the path to the current session's log file.
243
+ * Never throws - returns fallback path if session path unavailable.
244
+ */
245
+ export function getSessionLogPath() {
246
+ try {
247
+ return getLogPath();
248
+ }
249
+ catch {
250
+ // Fallback to a predictable path if getLogPath fails
251
+ return join(getGlobalLogsDir(), 'brv-session.log');
252
+ }
253
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Detects if the current process is running in a sandboxed environment
3
+ * (e.g., Cursor AI agent, VSCode extension, Claude Code, Codex, etc.)
4
+ *
5
+ * Sandboxed environments typically have restricted network access and
6
+ * may set specific environment variables or have characteristic error patterns.
7
+ */
8
+ export declare function isSandboxEnvironment(): boolean;
9
+ /**
10
+ * Detects if an error is specifically a sandbox network restriction error.
11
+ *
12
+ * Sandbox network errors have characteristic patterns:
13
+ * - WebSocket connection failures with "network" or "websocket error"
14
+ * - XHR poll errors (Socket.IO fallback blocked)
15
+ * - Connection refused errors that occur immediately (sandbox blocks before connection)
16
+ *
17
+ * This is more specific than general network errors which might be:
18
+ * - Actual network connectivity issues
19
+ * - Firewall blocks
20
+ * - Server not running
21
+ * - CORS origin errors (though with CORS origin = '*', this shouldn't happen)
22
+ *
23
+ * Note: With CORS origin configured as '*', CORS errors are impossible.
24
+ * When connection fails in sandbox, it's almost certainly due to network permission,
25
+ * not origin restrictions.
26
+ */
27
+ export declare function isSandboxNetworkError(error: Error | string): boolean;
28
+ /**
29
+ * Gets a user-friendly description of the detected sandbox environment.
30
+ */
31
+ export declare function getSandboxEnvironmentName(): string;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Detects if the current process is running in a sandboxed environment
3
+ * (e.g., Cursor AI agent, VSCode extension, Claude Code, Codex, etc.)
4
+ *
5
+ * Sandboxed environments typically have restricted network access and
6
+ * may set specific environment variables or have characteristic error patterns.
7
+ */
8
+ export function isSandboxEnvironment() {
9
+ // Check for IDE-specific environment variables
10
+ const { env } = process;
11
+ // Cursor IDE
12
+ if (env.CURSOR_AGENT || env.CURSOR_SESSION_ID) {
13
+ return true;
14
+ }
15
+ // VS Code / GitHub Copilot
16
+ if (env.VSCODE_INJECTION || env.VSCODE_PID || env.VSCODE_IPC_HOOK) {
17
+ return true;
18
+ }
19
+ // Claude Code
20
+ if (env.CLAUDE_AGENT || env.CLAUDE_SESSION) {
21
+ return true;
22
+ }
23
+ // Codex
24
+ if (env.CODEX_AGENT || env.CODEX_SESSION) {
25
+ return true;
26
+ }
27
+ // Windsurf
28
+ if (env.WINDSURF_AGENT || env.WINDSURF_SESSION) {
29
+ return true;
30
+ }
31
+ // Check for common sandbox indicators
32
+ // Sandboxed terminals often have restricted stdin/stdout
33
+ if (!process.stdin.isTTY && !process.stdout.isTTY) {
34
+ // This alone isn't enough, but combined with error patterns it helps
35
+ // We'll rely more on error message patterns for detection
36
+ }
37
+ return false;
38
+ }
39
+ /**
40
+ * Detects if an error is specifically a sandbox network restriction error.
41
+ *
42
+ * Sandbox network errors have characteristic patterns:
43
+ * - WebSocket connection failures with "network" or "websocket error"
44
+ * - XHR poll errors (Socket.IO fallback blocked)
45
+ * - Connection refused errors that occur immediately (sandbox blocks before connection)
46
+ *
47
+ * This is more specific than general network errors which might be:
48
+ * - Actual network connectivity issues
49
+ * - Firewall blocks
50
+ * - Server not running
51
+ * - CORS origin errors (though with CORS origin = '*', this shouldn't happen)
52
+ *
53
+ * Note: With CORS origin configured as '*', CORS errors are impossible.
54
+ * When connection fails in sandbox, it's almost certainly due to network permission,
55
+ * not origin restrictions.
56
+ */
57
+ export function isSandboxNetworkError(error) {
58
+ const errorMessage = typeof error === 'string' ? error : error.message;
59
+ const lowerMessage = errorMessage.toLowerCase();
60
+ // First, check if it's a CORS/origin error (unlikely with origin = '*', but check anyway)
61
+ const isCorsError = lowerMessage.includes('cors') ||
62
+ lowerMessage.includes('origin') ||
63
+ (lowerMessage.includes('forbidden') && lowerMessage.includes('origin'));
64
+ // If it's a CORS error, it's NOT a sandbox network permission error
65
+ // (though with origin = '*', CORS errors shouldn't occur)
66
+ if (isCorsError) {
67
+ return false;
68
+ }
69
+ // Specific sandbox network permission error patterns
70
+ const sandboxPatterns = [
71
+ // WebSocket errors that indicate sandbox blocking
72
+ 'websocket error',
73
+ 'xhr poll error',
74
+ // Network errors that occur immediately (sandbox blocks before connection)
75
+ 'network',
76
+ // Connection refused that happens immediately (sandbox blocks)
77
+ 'econnrefused',
78
+ ];
79
+ // Check if error matches sandbox patterns
80
+ const matchesSandboxPattern = sandboxPatterns.some((pattern) => lowerMessage.includes(pattern));
81
+ // Additional check: if it's a connection error but instance is likely running
82
+ // (we can't know for sure, but sandbox errors are usually immediate failures)
83
+ const isConnectionError = lowerMessage.includes('connection') || lowerMessage.includes('connect');
84
+ // Only consider it a sandbox network permission error if:
85
+ // 1. Matches sandbox patterns AND
86
+ // 2. Is a connection-related error AND
87
+ // 3. We're in a sandbox environment (or error pattern strongly suggests it)
88
+ // 4. NOT a CORS error (already checked above)
89
+ if (matchesSandboxPattern && isConnectionError) {
90
+ // Prefer environment detection, but if error pattern is very specific, trust it
91
+ if (isSandboxEnvironment()) {
92
+ return true;
93
+ }
94
+ // Very specific sandbox error patterns that we can trust even without env detection
95
+ if (lowerMessage.includes('websocket error') || lowerMessage.includes('xhr poll error')) {
96
+ return true;
97
+ }
98
+ }
99
+ return false;
100
+ }
101
+ /**
102
+ * Gets a user-friendly description of the detected sandbox environment.
103
+ */
104
+ export function getSandboxEnvironmentName() {
105
+ const { env } = process;
106
+ if (env.CURSOR_AGENT || env.CURSOR_SESSION_ID) {
107
+ return 'Cursor';
108
+ }
109
+ if (env.VSCODE_INJECTION || env.VSCODE_PID || env.VSCODE_IPC_HOOK) {
110
+ return 'VS Code / GitHub Copilot';
111
+ }
112
+ if (env.CLAUDE_AGENT || env.CLAUDE_SESSION) {
113
+ return 'Claude Code';
114
+ }
115
+ if (env.CODEX_AGENT || env.CODEX_SESSION) {
116
+ return 'Codex';
117
+ }
118
+ if (env.WINDSURF_AGENT || env.WINDSURF_SESSION) {
119
+ return 'Windsurf';
120
+ }
121
+ return 'IDE sandbox';
122
+ }