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,137 @@
1
+ /**
2
+ * Session Status Manager
3
+ *
4
+ * Manages ephemeral session lifecycle states following the OpenCode pattern.
5
+ * Tracks whether sessions are idle, busy, retrying, or waiting for permission.
6
+ *
7
+ * This is in-memory state only - does not persist across restarts.
8
+ * Status changes are published via the event bus for UI consumption.
9
+ */
10
+ import type { SessionStatusType } from '../../../core/domain/cipher/agent-events/types.js';
11
+ import type { SessionEventBus } from '../events/event-emitter.js';
12
+ /**
13
+ * Session Status Manager.
14
+ *
15
+ * Provides centralized tracking of session lifecycle states.
16
+ * Each session can be in one of four states:
17
+ * - idle: Ready to accept new messages
18
+ * - busy: Currently executing a request
19
+ * - retry: Waiting to retry after a transient error
20
+ * - waiting_permission: Waiting for user permission (e.g., tool confirmation)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const statusManager = new SessionStatusManager()
25
+ *
26
+ * // Get current status
27
+ * const status = statusManager.get('session-123')
28
+ * if (status.type === 'idle') {
29
+ * // Session is ready
30
+ * }
31
+ *
32
+ * // Update status
33
+ * statusManager.set('session-123', { type: 'busy' }, eventBus)
34
+ *
35
+ * // Clear status when session is disposed
36
+ * statusManager.remove('session-123')
37
+ * ```
38
+ */
39
+ export declare class SessionStatusManager {
40
+ private readonly status;
41
+ /**
42
+ * Get the current status of a session.
43
+ * Returns 'idle' if no status has been set.
44
+ *
45
+ * @param sessionId - The session ID to get status for
46
+ * @returns Current session status
47
+ */
48
+ get(sessionId: string): SessionStatusType;
49
+ /**
50
+ * Get all session statuses.
51
+ * Useful for debugging or admin interfaces.
52
+ *
53
+ * @returns Map of session IDs to their statuses
54
+ */
55
+ getAll(): ReadonlyMap<string, SessionStatusType>;
56
+ /**
57
+ * Check if a session is busy (executing or retrying).
58
+ *
59
+ * @param sessionId - The session ID to check
60
+ * @returns True if the session is busy or retrying
61
+ */
62
+ isBusy(sessionId: string): boolean;
63
+ /**
64
+ * Check if a session is idle and ready for new messages.
65
+ *
66
+ * @param sessionId - The session ID to check
67
+ * @returns True if the session is idle
68
+ */
69
+ isIdle(sessionId: string): boolean;
70
+ /**
71
+ * Remove a session's status.
72
+ * Call this when a session is disposed.
73
+ *
74
+ * @param sessionId - The session ID to remove
75
+ */
76
+ remove(sessionId: string): void;
77
+ /**
78
+ * Set the status of a session and emit a status change event.
79
+ *
80
+ * @param sessionId - The session ID to update
81
+ * @param newStatus - The new status to set
82
+ * @param eventBus - Optional event bus to emit status change event
83
+ */
84
+ set(sessionId: string, newStatus: SessionStatusType, eventBus?: SessionEventBus): void;
85
+ /**
86
+ * Transition a session to busy state.
87
+ * Convenience method for the common case.
88
+ *
89
+ * @param sessionId - The session ID to update
90
+ * @param eventBus - Optional event bus to emit status change event
91
+ */
92
+ setBusy(sessionId: string, eventBus?: SessionEventBus): void;
93
+ /**
94
+ * Transition a session to idle state.
95
+ * Convenience method for the common case.
96
+ *
97
+ * @param sessionId - The session ID to update
98
+ * @param eventBus - Optional event bus to emit status change event
99
+ */
100
+ setIdle(sessionId: string, eventBus?: SessionEventBus): void;
101
+ /**
102
+ * Transition a session to retry state.
103
+ *
104
+ * @param sessionId - The session ID to update
105
+ * @param options - Retry options
106
+ * @param options.attempt - Current retry attempt number
107
+ * @param options.message - Human-readable retry message
108
+ * @param options.nextRetryAt - Timestamp when next retry will occur
109
+ * @param eventBus - Optional event bus to emit status change event
110
+ */
111
+ setRetry(sessionId: string, options: {
112
+ attempt: number;
113
+ message: string;
114
+ nextRetryAt: number;
115
+ }, eventBus?: SessionEventBus): void;
116
+ /**
117
+ * Transition a session to waiting_permission state.
118
+ *
119
+ * @param sessionId - The session ID to update
120
+ * @param toolName - Name of the tool waiting for permission
121
+ * @param eventBus - Optional event bus to emit status change event
122
+ */
123
+ setWaitingPermission(sessionId: string, toolName: string, eventBus?: SessionEventBus): void;
124
+ /**
125
+ * Compare two session statuses for equality.
126
+ *
127
+ * @param a - First status (may be undefined)
128
+ * @param b - Second status
129
+ * @returns True if statuses are equal
130
+ */
131
+ private statusEquals;
132
+ }
133
+ /**
134
+ * Singleton instance of the session status manager.
135
+ * Use this for global session status tracking.
136
+ */
137
+ export declare const sessionStatusManager: SessionStatusManager;
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Session Status Manager
3
+ *
4
+ * Manages ephemeral session lifecycle states following the OpenCode pattern.
5
+ * Tracks whether sessions are idle, busy, retrying, or waiting for permission.
6
+ *
7
+ * This is in-memory state only - does not persist across restarts.
8
+ * Status changes are published via the event bus for UI consumption.
9
+ */
10
+ /**
11
+ * Session Status Manager.
12
+ *
13
+ * Provides centralized tracking of session lifecycle states.
14
+ * Each session can be in one of four states:
15
+ * - idle: Ready to accept new messages
16
+ * - busy: Currently executing a request
17
+ * - retry: Waiting to retry after a transient error
18
+ * - waiting_permission: Waiting for user permission (e.g., tool confirmation)
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const statusManager = new SessionStatusManager()
23
+ *
24
+ * // Get current status
25
+ * const status = statusManager.get('session-123')
26
+ * if (status.type === 'idle') {
27
+ * // Session is ready
28
+ * }
29
+ *
30
+ * // Update status
31
+ * statusManager.set('session-123', { type: 'busy' }, eventBus)
32
+ *
33
+ * // Clear status when session is disposed
34
+ * statusManager.remove('session-123')
35
+ * ```
36
+ */
37
+ export class SessionStatusManager {
38
+ status = new Map();
39
+ /**
40
+ * Get the current status of a session.
41
+ * Returns 'idle' if no status has been set.
42
+ *
43
+ * @param sessionId - The session ID to get status for
44
+ * @returns Current session status
45
+ */
46
+ get(sessionId) {
47
+ return this.status.get(sessionId) ?? { type: 'idle' };
48
+ }
49
+ /**
50
+ * Get all session statuses.
51
+ * Useful for debugging or admin interfaces.
52
+ *
53
+ * @returns Map of session IDs to their statuses
54
+ */
55
+ getAll() {
56
+ return this.status;
57
+ }
58
+ /**
59
+ * Check if a session is busy (executing or retrying).
60
+ *
61
+ * @param sessionId - The session ID to check
62
+ * @returns True if the session is busy or retrying
63
+ */
64
+ isBusy(sessionId) {
65
+ const status = this.get(sessionId);
66
+ return status.type === 'busy' || status.type === 'retry';
67
+ }
68
+ /**
69
+ * Check if a session is idle and ready for new messages.
70
+ *
71
+ * @param sessionId - The session ID to check
72
+ * @returns True if the session is idle
73
+ */
74
+ isIdle(sessionId) {
75
+ return this.get(sessionId).type === 'idle';
76
+ }
77
+ /**
78
+ * Remove a session's status.
79
+ * Call this when a session is disposed.
80
+ *
81
+ * @param sessionId - The session ID to remove
82
+ */
83
+ remove(sessionId) {
84
+ this.status.delete(sessionId);
85
+ }
86
+ /**
87
+ * Set the status of a session and emit a status change event.
88
+ *
89
+ * @param sessionId - The session ID to update
90
+ * @param newStatus - The new status to set
91
+ * @param eventBus - Optional event bus to emit status change event
92
+ */
93
+ set(sessionId, newStatus, eventBus) {
94
+ const oldStatus = this.status.get(sessionId);
95
+ // Only update and emit if status actually changed
96
+ if (!this.statusEquals(oldStatus, newStatus)) {
97
+ this.status.set(sessionId, newStatus);
98
+ // Emit status change event if event bus provided
99
+ if (eventBus) {
100
+ eventBus.emit('session:statusChanged', {
101
+ status: newStatus,
102
+ });
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Transition a session to busy state.
108
+ * Convenience method for the common case.
109
+ *
110
+ * @param sessionId - The session ID to update
111
+ * @param eventBus - Optional event bus to emit status change event
112
+ */
113
+ setBusy(sessionId, eventBus) {
114
+ this.set(sessionId, { type: 'busy' }, eventBus);
115
+ }
116
+ /**
117
+ * Transition a session to idle state.
118
+ * Convenience method for the common case.
119
+ *
120
+ * @param sessionId - The session ID to update
121
+ * @param eventBus - Optional event bus to emit status change event
122
+ */
123
+ setIdle(sessionId, eventBus) {
124
+ this.set(sessionId, { type: 'idle' }, eventBus);
125
+ }
126
+ /**
127
+ * Transition a session to retry state.
128
+ *
129
+ * @param sessionId - The session ID to update
130
+ * @param options - Retry options
131
+ * @param options.attempt - Current retry attempt number
132
+ * @param options.message - Human-readable retry message
133
+ * @param options.nextRetryAt - Timestamp when next retry will occur
134
+ * @param eventBus - Optional event bus to emit status change event
135
+ */
136
+ setRetry(sessionId, options, eventBus) {
137
+ this.set(sessionId, { attempt: options.attempt, message: options.message, nextRetryAt: options.nextRetryAt, type: 'retry' }, eventBus);
138
+ }
139
+ /**
140
+ * Transition a session to waiting_permission state.
141
+ *
142
+ * @param sessionId - The session ID to update
143
+ * @param toolName - Name of the tool waiting for permission
144
+ * @param eventBus - Optional event bus to emit status change event
145
+ */
146
+ setWaitingPermission(sessionId, toolName, eventBus) {
147
+ this.set(sessionId, { toolName, type: 'waiting_permission' }, eventBus);
148
+ }
149
+ /**
150
+ * Compare two session statuses for equality.
151
+ *
152
+ * @param a - First status (may be undefined)
153
+ * @param b - Second status
154
+ * @returns True if statuses are equal
155
+ */
156
+ statusEquals(a, b) {
157
+ if (!a)
158
+ return false;
159
+ if (a.type !== b.type)
160
+ return false;
161
+ switch (a.type) {
162
+ case 'busy': {
163
+ return true;
164
+ }
165
+ case 'idle': {
166
+ return true;
167
+ }
168
+ case 'retry': {
169
+ return (b.type === 'retry' && a.attempt === b.attempt && a.message === b.message && a.nextRetryAt === b.nextRetryAt);
170
+ }
171
+ case 'waiting_permission': {
172
+ return b.type === 'waiting_permission' && a.toolName === b.toolName;
173
+ }
174
+ default: {
175
+ return false;
176
+ }
177
+ }
178
+ }
179
+ }
180
+ /**
181
+ * Singleton instance of the session status manager.
182
+ * Use this for global session status tracking.
183
+ */
184
+ export const sessionStatusManager = new SessionStatusManager();
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generate a session title from the first user message.
3
+ * Uses heuristic extraction (no LLM call to avoid latency).
4
+ *
5
+ * @param firstMessage - The first user message in the conversation
6
+ * @returns A concise title for the session
7
+ */
8
+ export declare function generateSessionTitle(firstMessage: string): string;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Generate a session title from the first user message.
3
+ * Uses heuristic extraction (no LLM call to avoid latency).
4
+ *
5
+ * @param firstMessage - The first user message in the conversation
6
+ * @returns A concise title for the session
7
+ */
8
+ export function generateSessionTitle(firstMessage) {
9
+ // Remove markdown, code blocks, etc.
10
+ const cleaned = firstMessage
11
+ .replaceAll(/```[\s\S]*?```/g, '') // Remove code blocks
12
+ .replaceAll(/`[^`]+`/g, '') // Remove inline code
13
+ .replaceAll(/\[([^\]]+)\]\([^)]+\)/g, '$1') // Extract link text
14
+ .replaceAll(/[#*_~]/g, '') // Remove markdown formatting chars
15
+ .trim();
16
+ // If nothing left after cleaning, use a generic title
17
+ if (!cleaned) {
18
+ return 'New conversation';
19
+ }
20
+ // Extract first sentence or meaningful chunk
21
+ const firstSentence = cleaned.split(/[.!?\n]/)[0]?.trim() || cleaned;
22
+ // Truncate to reasonable length
23
+ const maxLength = 50;
24
+ if (firstSentence.length <= maxLength) {
25
+ return firstSentence;
26
+ }
27
+ // Truncate at word boundary
28
+ const truncated = firstSentence.slice(0, maxLength);
29
+ const lastSpace = truncated.lastIndexOf(' ');
30
+ return (lastSpace > 20 ? truncated.slice(0, lastSpace) : truncated) + '...';
31
+ }
@@ -1,6 +1,21 @@
1
- import type { CompactionResult, LoadMessagesResult, PruneToolOutputsOptions, SessionRecord, StoredMessage, StoredMessageWithParts, StreamMessagesOptions } from '../../../core/domain/cipher/storage/message-storage-types.js';
1
+ import type { CompactionResult, LoadMessagesResult, PruneToolOutputsOptions, SessionRecord, StoredMessage, StoredMessageWithParts, StoredPart, StoredToolState, StreamMessagesOptions } from '../../../core/domain/cipher/storage/message-storage-types.js';
2
2
  import type { IKeyStorage } from '../../../core/interfaces/cipher/i-key-storage.js';
3
- import type { InternalMessage } from '../../../core/interfaces/cipher/message-types.js';
3
+ import type { AttachmentPart, InternalMessage } from '../../../core/interfaces/cipher/message-types.js';
4
+ /**
5
+ * Options for creating a tool part.
6
+ */
7
+ export interface CreateToolPartOptions {
8
+ /** Unique identifier for this tool call */
9
+ callId: string;
10
+ /** Parsed input arguments */
11
+ input: Record<string, unknown>;
12
+ /** ID of the message to add the tool part to */
13
+ messageId: string;
14
+ /** Session ID for validation */
15
+ sessionId: string;
16
+ /** Name of the tool being called */
17
+ toolName: string;
18
+ }
4
19
  /**
5
20
  * Service for granular message and part storage.
6
21
  *
@@ -18,6 +33,21 @@ import type { InternalMessage } from '../../../core/interfaces/cipher/message-ty
18
33
  export declare class MessageStorageService {
19
34
  private readonly keyStorage;
20
35
  constructor(keyStorage: IKeyStorage);
36
+ /**
37
+ * Add attachments to a completed tool part.
38
+ *
39
+ * @param messageId - ID of the message containing the part
40
+ * @param partId - ID of the tool part
41
+ * @param attachments - Attachments to add
42
+ */
43
+ addToolPartAttachments(messageId: string, partId: string, attachments: AttachmentPart[]): Promise<void>;
44
+ /**
45
+ * Create a tool part in pending state and add it to a message.
46
+ *
47
+ * @param options - Options for creating the tool part
48
+ * @returns The created StoredPart
49
+ */
50
+ createToolPart(options: CreateToolPartOptions): Promise<StoredPart>;
21
51
  /**
22
52
  * Delete a session and all its messages and parts.
23
53
  */
@@ -26,6 +56,14 @@ export declare class MessageStorageService {
26
56
  * Get the session record, if it exists.
27
57
  */
28
58
  getSession(sessionId: string): Promise<SessionRecord | undefined>;
59
+ /**
60
+ * Get a tool part by call ID from a message.
61
+ *
62
+ * @param messageId - ID of the message
63
+ * @param callId - Call ID of the tool part
64
+ * @returns The tool part if found
65
+ */
66
+ getToolPartByCallId(messageId: string, callId: string): Promise<StoredPart | undefined>;
29
67
  /**
30
68
  * Check if a session exists in granular format.
31
69
  */
@@ -49,6 +87,9 @@ export declare class MessageStorageService {
49
87
  /**
50
88
  * Prune old tool outputs by marking them as compacted.
51
89
  * Keeps the most recent tool outputs up to the specified token limit.
90
+ *
91
+ * Turn-based protection: Protects tool outputs in the most recent N user turns.
92
+ * Minimum threshold: Only executes if the minimum token threshold can be saved.
52
93
  */
53
94
  pruneToolOutputs(options: PruneToolOutputsOptions): Promise<CompactionResult>;
54
95
  /**
@@ -80,6 +121,20 @@ export declare class MessageStorageService {
80
121
  * Convert loaded messages back to InternalMessage format.
81
122
  */
82
123
  toInternalMessages(messages: StoredMessageWithParts[]): InternalMessage[];
124
+ /**
125
+ * Update a tool part's state.
126
+ * Used for transitioning through pending → running → completed/error.
127
+ *
128
+ * @param messageId - ID of the message containing the part
129
+ * @param partId - ID of the tool part to update
130
+ * @param update - Partial tool state update
131
+ */
132
+ updateToolPartState(messageId: string, partId: string, update: Partial<StoredToolState>): Promise<void>;
133
+ /**
134
+ * Convert a StoredPart to a MessagePart for reconstruction.
135
+ * Returns the converted part and optionally tool output content.
136
+ */
137
+ private convertStoredPartToMessagePart;
83
138
  /**
84
139
  * Extract parts from an InternalMessage.
85
140
  */
@@ -101,6 +156,14 @@ export declare class MessageStorageService {
101
156
  */
102
157
  private serializeImageContent;
103
158
  private sessionKey;
159
+ /**
160
+ * Convert a stored part with tool state to a ToolPart.
161
+ */
162
+ private storedPartToToolPart;
163
+ /**
164
+ * Convert a ToolPart to a StoredPart.
165
+ */
166
+ private toolPartToStoredPart;
104
167
  }
105
168
  /**
106
169
  * Factory function to create MessageStorageService.