byterover-cli 0.4.1 → 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 (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,115 @@
1
+ import { NoOpLogger } from '../../core/interfaces/cipher/i-logger.js';
2
+ /**
3
+ * TaskProcessor - Coordinates task execution with injected executors.
4
+ *
5
+ * Architecture:
6
+ * - TaskProcessor receives single agent reference via setAgent()
7
+ * - TaskProcessor passes agent to Executor.executeWithAgent()
8
+ * - Executor handles execution (validation, prompt building)
9
+ * - Event streaming handled by agent-worker (subscribes to agentEventBus)
10
+ *
11
+ * Flow: agent-worker → TaskProcessor.process() → Executor.executeWithAgent()
12
+ */
13
+ export class TaskProcessor {
14
+ /**
15
+ * Single CipherAgent reference from agent-worker.
16
+ */
17
+ agent;
18
+ curateExecutor;
19
+ logger;
20
+ queryExecutor;
21
+ /** Track running tasks for cancellation */
22
+ runningTasks = new Map();
23
+ constructor(config) {
24
+ this.logger = config.logger ?? new NoOpLogger();
25
+ this.curateExecutor = config.curateExecutor;
26
+ this.queryExecutor = config.queryExecutor;
27
+ }
28
+ /**
29
+ * Cancel a running task.
30
+ */
31
+ cancel(taskId) {
32
+ const task = this.runningTasks.get(taskId);
33
+ if (task) {
34
+ task.abort();
35
+ this.runningTasks.delete(taskId);
36
+ return true;
37
+ }
38
+ return false;
39
+ }
40
+ /**
41
+ * Check if a task is running.
42
+ */
43
+ isRunning(taskId) {
44
+ return this.runningTasks.has(taskId);
45
+ }
46
+ /**
47
+ * Process a task and return the result.
48
+ *
49
+ * Architecture:
50
+ * - Calls Executor.executeWithAgent() with long-lived agent
51
+ * - Returns result string
52
+ * - Event streaming handled by agent-worker (agentEventBus)
53
+ */
54
+ async process(input) {
55
+ const { taskId, type } = input;
56
+ this.logger.info('Processing task', { taskId, type });
57
+ if (!this.agent) {
58
+ throw new Error('Agent not configured. Call setAgent() first.');
59
+ }
60
+ // Track task for cancellation
61
+ let aborted = false;
62
+ const abort = () => {
63
+ aborted = true;
64
+ };
65
+ this.runningTasks.set(taskId, { abort });
66
+ try {
67
+ const result = await this.executeWithAgent(input);
68
+ if (aborted) {
69
+ throw new Error('Task cancelled');
70
+ }
71
+ this.logger.info('Task completed', { taskId });
72
+ return result;
73
+ }
74
+ finally {
75
+ this.runningTasks.delete(taskId);
76
+ }
77
+ }
78
+ /**
79
+ * Set agent reference from agent-worker.
80
+ */
81
+ setAgent(agent) {
82
+ this.agent = agent;
83
+ this.logger.debug('Agent reference set');
84
+ }
85
+ /**
86
+ * Execute task with the injected agent.
87
+ */
88
+ async executeWithAgent(input) {
89
+ const { content, taskId, type } = input;
90
+ if (!this.agent) {
91
+ throw new Error('Agent not configured');
92
+ }
93
+ this.logger.debug('Executing with agent', { taskId, type });
94
+ switch (type) {
95
+ case 'curate': {
96
+ // Agent uses its default session (Single-Session pattern)
97
+ return this.curateExecutor.executeWithAgent(this.agent, {
98
+ content,
99
+ files: input.files,
100
+ taskId,
101
+ });
102
+ }
103
+ case 'query': {
104
+ // Agent uses its default session (Single-Session pattern)
105
+ return this.queryExecutor.executeWithAgent(this.agent, { query: content, taskId });
106
+ }
107
+ }
108
+ }
109
+ }
110
+ /**
111
+ * Create a new TaskProcessor instance.
112
+ */
113
+ export function createTaskProcessor(config) {
114
+ return new TaskProcessor(config);
115
+ }
@@ -0,0 +1,31 @@
1
+ import type { DiscoveryResult, IInstanceDiscovery } from '../../core/interfaces/instance/i-instance-discovery.js';
2
+ import type { IInstanceManager } from '../../core/interfaces/instance/i-instance-manager.js';
3
+ /**
4
+ * File-based implementation of IInstanceDiscovery.
5
+ *
6
+ * Implements walk-up directory tree algorithm to find running instances.
7
+ */
8
+ export declare class FileInstanceDiscovery implements IInstanceDiscovery {
9
+ private readonly instanceManager;
10
+ constructor(instanceManager?: IInstanceManager);
11
+ /**
12
+ * Discovers a running instance starting from the given directory.
13
+ *
14
+ * Walk-up algorithm:
15
+ * 1. Start from `fromDir`
16
+ * 2. Check if .brv/instance.json exists
17
+ * 3. If yes, verify pid is alive
18
+ * 4. If no, walk up to parent directory
19
+ * 5. Repeat until root or found
20
+ */
21
+ discover(fromDir: string): Promise<DiscoveryResult>;
22
+ /**
23
+ * Finds the project root by walking up from a directory.
24
+ * Returns the directory containing .brv/ or undefined if not found.
25
+ */
26
+ findProjectRoot(fromDir: string): Promise<string | undefined>;
27
+ /**
28
+ * Checks if a directory exists.
29
+ */
30
+ private directoryExists;
31
+ }
@@ -0,0 +1,84 @@
1
+ import { access } from 'node:fs/promises';
2
+ import { dirname, join, parse } from 'node:path';
3
+ import { BRV_DIR } from '../../constants.js';
4
+ import { FileInstanceManager } from './file-instance-manager.js';
5
+ import { isProcessAlive } from './process-utils.js';
6
+ /**
7
+ * File-based implementation of IInstanceDiscovery.
8
+ *
9
+ * Implements walk-up directory tree algorithm to find running instances.
10
+ */
11
+ export class FileInstanceDiscovery {
12
+ instanceManager;
13
+ constructor(instanceManager) {
14
+ this.instanceManager = instanceManager ?? new FileInstanceManager();
15
+ }
16
+ /**
17
+ * Discovers a running instance starting from the given directory.
18
+ *
19
+ * Walk-up algorithm:
20
+ * 1. Start from `fromDir`
21
+ * 2. Check if .brv/instance.json exists
22
+ * 3. If yes, verify pid is alive
23
+ * 4. If no, walk up to parent directory
24
+ * 5. Repeat until root or found
25
+ */
26
+ async discover(fromDir) {
27
+ const projectRoot = await this.findProjectRoot(fromDir);
28
+ if (!projectRoot) {
29
+ return { found: false, reason: 'no_instance' };
30
+ }
31
+ const instance = await this.instanceManager.load(projectRoot);
32
+ if (!instance) {
33
+ return { found: false, reason: 'no_instance' };
34
+ }
35
+ // Verify PID is alive (this is the only check we need)
36
+ if (!isProcessAlive(instance.pid)) {
37
+ return { found: false, reason: 'instance_crashed' };
38
+ }
39
+ return {
40
+ found: true,
41
+ instance,
42
+ projectRoot,
43
+ };
44
+ }
45
+ /**
46
+ * Finds the project root by walking up from a directory.
47
+ * Returns the directory containing .brv/ or undefined if not found.
48
+ */
49
+ async findProjectRoot(fromDir) {
50
+ let currentDir = fromDir;
51
+ // Walk up requires sequential checks - can't parallelize tree traversal
52
+ while (true) {
53
+ const brvPath = join(currentDir, BRV_DIR);
54
+ // eslint-disable-next-line no-await-in-loop
55
+ if (await this.directoryExists(brvPath)) {
56
+ return currentDir;
57
+ }
58
+ // Get parent directory
59
+ const parentDir = dirname(currentDir);
60
+ // Check if we've reached the root
61
+ if (parentDir === currentDir) {
62
+ return undefined;
63
+ }
64
+ // Check if we've reached filesystem root (e.g., "/" or "C:\")
65
+ const parsed = parse(currentDir);
66
+ if (parsed.root === currentDir) {
67
+ return undefined;
68
+ }
69
+ currentDir = parentDir;
70
+ }
71
+ }
72
+ /**
73
+ * Checks if a directory exists.
74
+ */
75
+ async directoryExists(path) {
76
+ try {
77
+ await access(path);
78
+ return true;
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,46 @@
1
+ import type { AcquireResult, IInstanceManager } from '../../core/interfaces/instance/i-instance-manager.js';
2
+ import { InstanceInfo } from '../../core/domain/instance/types.js';
3
+ /**
4
+ * File-based implementation of IInstanceManager.
5
+ *
6
+ * Stores instance information in .brv/instance.json.
7
+ *
8
+ * NOTE: We don't store "status" - we check pid alive at runtime.
9
+ * This handles crashes gracefully without stale status.
10
+ */
11
+ export declare class FileInstanceManager implements IInstanceManager {
12
+ /**
13
+ * Attempts to acquire an instance lock.
14
+ *
15
+ * Logic:
16
+ * - No file → create new instance
17
+ * - File exists + pid alive → already running, fail
18
+ * - File exists + pid dead → stale (crashed), overwrite
19
+ *
20
+ * @param projectRoot - Root directory containing .brv/
21
+ * @param port - Port the transport server will use
22
+ */
23
+ acquire(projectRoot: string, port: number): Promise<AcquireResult>;
24
+ /**
25
+ * Loads instance info from the project root.
26
+ */
27
+ load(projectRoot: string): Promise<InstanceInfo | undefined>;
28
+ /**
29
+ * Releases the instance lock by deleting instance.json.
30
+ *
31
+ * Called during graceful shutdown.
32
+ */
33
+ release(projectRoot: string): Promise<void>;
34
+ /**
35
+ * Updates the current session ID.
36
+ */
37
+ updateSessionId(projectRoot: string, sessionId: string): Promise<void>;
38
+ /**
39
+ * Gets the path to the instance.json file.
40
+ */
41
+ private getInstanceFilePath;
42
+ /**
43
+ * Saves instance info to the project root.
44
+ */
45
+ private save;
46
+ }
@@ -0,0 +1,123 @@
1
+ import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { BRV_DIR, INSTANCE_FILE } from '../../constants.js';
4
+ import { InstanceInfo } from '../../core/domain/instance/types.js';
5
+ import { getCurrentPid, isProcessAlive } from './process-utils.js';
6
+ /**
7
+ * Type guard to validate instance.json structure.
8
+ * Ensures all required fields exist with correct types.
9
+ */
10
+ function isValidInstanceInfoJson(value) {
11
+ if (typeof value !== 'object' || value === null) {
12
+ return false;
13
+ }
14
+ const obj = value;
15
+ return (typeof obj.pid === 'number' &&
16
+ typeof obj.port === 'number' &&
17
+ typeof obj.startedAt === 'number' &&
18
+ (obj.currentSessionId === null || typeof obj.currentSessionId === 'string'));
19
+ }
20
+ /**
21
+ * File-based implementation of IInstanceManager.
22
+ *
23
+ * Stores instance information in .brv/instance.json.
24
+ *
25
+ * NOTE: We don't store "status" - we check pid alive at runtime.
26
+ * This handles crashes gracefully without stale status.
27
+ */
28
+ export class FileInstanceManager {
29
+ /**
30
+ * Attempts to acquire an instance lock.
31
+ *
32
+ * Logic:
33
+ * - No file → create new instance
34
+ * - File exists + pid alive → already running, fail
35
+ * - File exists + pid dead → stale (crashed), overwrite
36
+ *
37
+ * @param projectRoot - Root directory containing .brv/
38
+ * @param port - Port the transport server will use
39
+ */
40
+ async acquire(projectRoot, port) {
41
+ const existing = await this.load(projectRoot);
42
+ // Check if there's an existing running instance (pid alive)
43
+ if (existing && isProcessAlive(existing.pid)) {
44
+ return {
45
+ acquired: false,
46
+ existingInstance: existing,
47
+ reason: 'already_running',
48
+ };
49
+ }
50
+ // Create new instance (either no existing or stale/crashed)
51
+ const instance = InstanceInfo.create({
52
+ pid: getCurrentPid(),
53
+ port,
54
+ });
55
+ await this.save(projectRoot, instance);
56
+ return {
57
+ acquired: true,
58
+ instance,
59
+ };
60
+ }
61
+ /**
62
+ * Loads instance info from the project root.
63
+ */
64
+ async load(projectRoot) {
65
+ const filePath = this.getInstanceFilePath(projectRoot);
66
+ try {
67
+ const content = await readFile(filePath, 'utf8');
68
+ const json = JSON.parse(content);
69
+ if (!isValidInstanceInfoJson(json)) {
70
+ // Corrupted file = no valid instance
71
+ return undefined;
72
+ }
73
+ return InstanceInfo.fromJson(json);
74
+ }
75
+ catch {
76
+ // File doesn't exist, is corrupted, or unreadable = no valid instance
77
+ return undefined;
78
+ }
79
+ }
80
+ /**
81
+ * Releases the instance lock by deleting instance.json.
82
+ *
83
+ * Called during graceful shutdown.
84
+ */
85
+ async release(projectRoot) {
86
+ const filePath = this.getInstanceFilePath(projectRoot);
87
+ try {
88
+ await rm(filePath);
89
+ }
90
+ catch {
91
+ // File might not exist, ignore
92
+ }
93
+ }
94
+ /**
95
+ * Updates the current session ID.
96
+ */
97
+ async updateSessionId(projectRoot, sessionId) {
98
+ const instance = await this.load(projectRoot);
99
+ if (!instance) {
100
+ throw new Error('No instance found to update');
101
+ }
102
+ const updated = instance.withSessionId(sessionId);
103
+ await this.save(projectRoot, updated);
104
+ }
105
+ /**
106
+ * Gets the path to the instance.json file.
107
+ */
108
+ getInstanceFilePath(projectRoot) {
109
+ return join(projectRoot, BRV_DIR, INSTANCE_FILE);
110
+ }
111
+ /**
112
+ * Saves instance info to the project root.
113
+ */
114
+ async save(projectRoot, instance) {
115
+ const brvDir = join(projectRoot, BRV_DIR);
116
+ const filePath = this.getInstanceFilePath(projectRoot);
117
+ // Ensure .brv directory exists
118
+ await mkdir(brvDir, { recursive: true });
119
+ // Write instance.json with pretty formatting
120
+ const json = JSON.stringify(instance.toJson(), null, 2);
121
+ await writeFile(filePath, json, 'utf8');
122
+ }
123
+ }
@@ -0,0 +1,3 @@
1
+ export * from './file-instance-discovery.js';
2
+ export * from './file-instance-manager.js';
3
+ export * from './process-utils.js';
@@ -0,0 +1,3 @@
1
+ export * from './file-instance-discovery.js';
2
+ export * from './file-instance-manager.js';
3
+ export * from './process-utils.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Checks if a process with the given PID is alive.
3
+ *
4
+ * Uses process.kill(pid, 0) which doesn't actually send a signal,
5
+ * but throws an error if the process doesn't exist.
6
+ *
7
+ * @param pid - Process ID to check
8
+ * @returns true if process exists, false otherwise
9
+ */
10
+ export declare function isProcessAlive(pid: number): boolean;
11
+ /**
12
+ * Gets the current process ID.
13
+ */
14
+ export declare function getCurrentPid(): number;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Checks if a process with the given PID is alive.
3
+ *
4
+ * Uses process.kill(pid, 0) which doesn't actually send a signal,
5
+ * but throws an error if the process doesn't exist.
6
+ *
7
+ * @param pid - Process ID to check
8
+ * @returns true if process exists, false otherwise
9
+ */
10
+ export function isProcessAlive(pid) {
11
+ try {
12
+ // Signal 0 doesn't kill the process, just checks if it exists
13
+ process.kill(pid, 0);
14
+ return true;
15
+ }
16
+ catch (error) {
17
+ // ESRCH means "No such process"
18
+ // EPERM means "Permission denied" (process exists but we can't signal it)
19
+ if (error instanceof Error && 'code' in error) {
20
+ const { code } = error;
21
+ if (code === 'ESRCH') {
22
+ return false;
23
+ }
24
+ if (code === 'EPERM') {
25
+ // Process exists but we don't have permission to signal it
26
+ // This shouldn't happen for our own child processes, but handle it
27
+ return true;
28
+ }
29
+ }
30
+ // Unknown error, assume process doesn't exist
31
+ return false;
32
+ }
33
+ }
34
+ /**
35
+ * Gets the current process ID.
36
+ */
37
+ export function getCurrentPid() {
38
+ return process.pid;
39
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Agent Worker - Entry point for Agent Process.
3
+ *
4
+ * Architecture v0.5.0:
5
+ * - Connects to Transport as Socket.IO CLIENT
6
+ * - Contains TaskProcessor + UseCases + CipherAgent
7
+ * - Receives tasks via Socket.IO (task:execute)
8
+ * - Sends results back via Socket.IO (task:chunk, task:completed, etc.)
9
+ * - NO Socket.IO server (Transport is the only server)
10
+ *
11
+ * IPC messages:
12
+ * - Receives: 'ping', 'shutdown'
13
+ * - Sends: 'ready', 'pong', 'stopped', 'error'
14
+ *
15
+ * Socket.IO events (as client):
16
+ * - Sends: 'agent:register' (identify as Agent)
17
+ * - Receives: 'task:execute', 'task:cancel', 'shutdown'
18
+ * - Sends: 'task:started', 'task:chunk', 'task:completed', 'task:error', 'task:toolCall', 'task:toolResult'
19
+ */
20
+ export {};