byterover-cli 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/entities/event.d.ts +1 -1
  49. package/dist/core/domain/entities/event.js +3 -1
  50. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  51. package/dist/core/domain/errors/connection-error.js +54 -0
  52. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  53. package/dist/core/domain/errors/core-process-error.js +43 -0
  54. package/dist/core/domain/errors/task-error.d.ts +64 -0
  55. package/dist/core/domain/errors/task-error.js +116 -0
  56. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  57. package/dist/core/domain/errors/transport-error.js +114 -0
  58. package/dist/core/domain/instance/index.d.ts +1 -0
  59. package/dist/core/domain/instance/index.js +1 -0
  60. package/dist/core/domain/instance/types.d.ts +57 -0
  61. package/dist/core/domain/instance/types.js +72 -0
  62. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  63. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  64. package/dist/core/domain/transport/index.d.ts +2 -0
  65. package/dist/core/domain/transport/index.js +2 -0
  66. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  67. package/dist/core/domain/transport/schemas.js +554 -0
  68. package/dist/core/domain/transport/types.d.ts +67 -0
  69. package/dist/core/domain/transport/types.js +7 -0
  70. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  71. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  72. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  73. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  74. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  75. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  76. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  77. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  79. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  80. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  81. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  82. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  83. package/dist/core/interfaces/cipher/index.js +11 -0
  84. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  85. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  86. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  87. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  88. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  89. package/dist/core/interfaces/cipher/message-types.js +6 -0
  90. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  91. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  92. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  93. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  94. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  95. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  96. package/dist/core/interfaces/executor/index.d.ts +2 -0
  97. package/dist/core/interfaces/executor/index.js +2 -0
  98. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  99. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  100. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  101. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  102. package/dist/core/interfaces/instance/index.d.ts +2 -0
  103. package/dist/core/interfaces/instance/index.js +2 -0
  104. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  105. package/dist/core/interfaces/noop-implementations.js +62 -0
  106. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  107. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  108. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  109. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  110. package/dist/core/interfaces/transport/index.d.ts +2 -0
  111. package/dist/core/interfaces/transport/index.js +2 -0
  112. package/dist/hooks/init/welcome.js +9 -24
  113. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  114. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  115. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  116. package/dist/infra/cipher/agent/agent-error.js +79 -0
  117. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  118. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  119. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  120. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  121. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  122. package/dist/infra/cipher/agent/base-agent.js +240 -0
  123. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  124. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  125. package/dist/infra/cipher/agent/index.d.ts +22 -0
  126. package/dist/infra/cipher/agent/index.js +24 -0
  127. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  128. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  129. package/dist/infra/cipher/agent/types.d.ts +35 -0
  130. package/dist/infra/cipher/agent/types.js +1 -0
  131. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  132. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  133. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  134. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  135. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  136. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  137. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  138. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  139. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  140. package/dist/infra/cipher/consumer/index.js +2 -1
  141. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  142. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  143. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  144. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  145. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  146. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  147. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  148. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  149. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  150. package/dist/infra/cipher/interactive-loop.js +41 -33
  151. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  152. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  153. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  154. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  155. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  156. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  157. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  158. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  159. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  160. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  161. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  162. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  163. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  164. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  165. package/dist/infra/cipher/llm/context/utils.js +17 -4
  166. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  167. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  168. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  169. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  170. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  171. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  172. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  173. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  174. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  175. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  176. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  177. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  178. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  179. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  180. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  181. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  182. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  183. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  184. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  185. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  186. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  187. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  188. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  189. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  190. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  191. package/dist/infra/cipher/process/command-validator.js +75 -0
  192. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  193. package/dist/infra/cipher/process/path-utils.js +94 -0
  194. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  195. package/dist/infra/cipher/process/process-service.js +98 -17
  196. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  197. package/dist/infra/cipher/session/chat-session.js +163 -13
  198. package/dist/infra/cipher/session/index.d.ts +1 -0
  199. package/dist/infra/cipher/session/index.js +2 -0
  200. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  201. package/dist/infra/cipher/session/message-queue.js +90 -0
  202. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  203. package/dist/infra/cipher/session/session-manager.js +254 -7
  204. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  205. package/dist/infra/cipher/session/session-status.js +184 -0
  206. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  207. package/dist/infra/cipher/session/title-generator.js +31 -0
  208. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  209. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  210. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  211. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  212. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  213. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  214. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  215. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  216. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  217. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  218. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  219. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  220. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  221. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  222. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  223. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  224. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  225. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  226. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  227. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  228. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  229. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  230. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  231. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  232. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  233. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  234. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  235. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  236. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  237. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  238. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  239. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  240. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  241. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  242. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  243. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  244. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  245. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  246. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  247. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  249. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  250. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  251. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  252. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  253. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  254. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  255. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  256. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  257. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  258. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  259. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  260. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  261. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  262. package/dist/infra/cipher/tools/index.d.ts +1 -1
  263. package/dist/infra/cipher/tools/index.js +1 -1
  264. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  265. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  266. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  267. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  268. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  269. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  270. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  271. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  272. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  273. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  274. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  275. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  276. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  277. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  278. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  279. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  280. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  281. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  282. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  283. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  284. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  285. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  286. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  287. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  288. package/dist/infra/context-tree/path-utils.js +7 -0
  289. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  290. package/dist/infra/core/executors/curate-executor.js +123 -0
  291. package/dist/infra/core/executors/index.d.ts +2 -0
  292. package/dist/infra/core/executors/index.js +2 -0
  293. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  294. package/dist/infra/core/executors/query-executor.js +51 -0
  295. package/dist/infra/core/task-processor.d.ts +81 -0
  296. package/dist/infra/core/task-processor.js +115 -0
  297. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  298. package/dist/infra/instance/file-instance-discovery.js +84 -0
  299. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  300. package/dist/infra/instance/file-instance-manager.js +123 -0
  301. package/dist/infra/instance/index.d.ts +3 -0
  302. package/dist/infra/instance/index.js +3 -0
  303. package/dist/infra/instance/process-utils.d.ts +14 -0
  304. package/dist/infra/instance/process-utils.js +39 -0
  305. package/dist/infra/process/agent-worker.d.ts +20 -0
  306. package/dist/infra/process/agent-worker.js +602 -0
  307. package/dist/infra/process/index.d.ts +12 -0
  308. package/dist/infra/process/index.js +11 -0
  309. package/dist/infra/process/ipc-types.d.ts +55 -0
  310. package/dist/infra/process/ipc-types.js +12 -0
  311. package/dist/infra/process/process-manager.d.ts +154 -0
  312. package/dist/infra/process/process-manager.js +471 -0
  313. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  314. package/dist/infra/process/task-queue-manager.js +226 -0
  315. package/dist/infra/process/transport-handlers.d.ts +124 -0
  316. package/dist/infra/process/transport-handlers.js +348 -0
  317. package/dist/infra/process/transport-worker.d.ts +20 -0
  318. package/dist/infra/process/transport-worker.js +168 -0
  319. package/dist/infra/repl/commands/curate-command.js +0 -5
  320. package/dist/infra/repl/commands/query-command.js +0 -3
  321. package/dist/infra/repl/repl-startup.d.ts +4 -0
  322. package/dist/infra/repl/repl-startup.js +10 -1
  323. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  324. package/dist/infra/repl/transport-client-helper.js +96 -0
  325. package/dist/infra/transport/index.d.ts +4 -0
  326. package/dist/infra/transport/index.js +4 -0
  327. package/dist/infra/transport/port-utils.d.ts +42 -0
  328. package/dist/infra/transport/port-utils.js +84 -0
  329. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  330. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  331. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  332. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  333. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  334. package/dist/infra/transport/transport-client-factory.js +168 -0
  335. package/dist/infra/transport/transport-factory.d.ts +33 -0
  336. package/dist/infra/transport/transport-factory.js +59 -0
  337. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  338. package/dist/infra/usecase/curate-use-case.js +73 -259
  339. package/dist/infra/usecase/init-use-case.js +19 -8
  340. package/dist/infra/usecase/login-use-case.js +9 -3
  341. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  342. package/dist/infra/usecase/query-use-case.js +251 -326
  343. package/dist/infra/usecase/status-use-case.js +1 -1
  344. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  345. package/dist/resources/prompts/explore.yml +78 -0
  346. package/dist/resources/prompts/plan.yml +114 -0
  347. package/dist/resources/prompts/reflection.yml +1 -1
  348. package/dist/resources/prompts/system-prompt.yml +15 -8
  349. package/dist/resources/prompts/tool-outputs.yml +0 -5
  350. package/dist/resources/tools/bash_exec.txt +98 -0
  351. package/dist/resources/tools/bash_output.txt +40 -0
  352. package/dist/resources/tools/batch.txt +28 -0
  353. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  354. package/dist/resources/tools/curate.txt +22 -0
  355. package/dist/resources/tools/delete_memory.txt +1 -0
  356. package/dist/resources/tools/detect_domains.txt +11 -0
  357. package/dist/resources/tools/edit_file.txt +1 -0
  358. package/dist/resources/tools/edit_memory.txt +1 -0
  359. package/dist/resources/tools/glob_files.txt +20 -0
  360. package/dist/resources/tools/grep_content.txt +18 -0
  361. package/dist/resources/tools/kill_process.txt +16 -0
  362. package/dist/resources/tools/list_directory.txt +16 -0
  363. package/dist/resources/tools/list_memories.txt +1 -0
  364. package/dist/resources/tools/read_file.txt +31 -0
  365. package/dist/resources/tools/read_memory.txt +1 -0
  366. package/dist/resources/tools/read_todos.txt +17 -0
  367. package/dist/resources/tools/search_history.txt +1 -0
  368. package/dist/resources/tools/task.txt +23 -0
  369. package/dist/resources/tools/write_file.txt +1 -0
  370. package/dist/resources/tools/write_memory.txt +1 -0
  371. package/dist/resources/tools/write_todos.txt +29 -0
  372. package/dist/tui/app.js +9 -13
  373. package/dist/tui/components/command-details.d.ts +14 -0
  374. package/dist/tui/components/command-details.js +35 -0
  375. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  376. package/dist/tui/components/execution/execution-changes.js +19 -4
  377. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  378. package/dist/tui/components/execution/execution-content.js +26 -13
  379. package/dist/tui/components/execution/execution-input.js +3 -3
  380. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  381. package/dist/tui/components/execution/execution-progress.js +8 -6
  382. package/dist/tui/components/execution/log-item.d.ts +3 -4
  383. package/dist/tui/components/execution/log-item.js +2 -5
  384. package/dist/tui/components/footer.js +9 -4
  385. package/dist/tui/components/header.d.ts +3 -3
  386. package/dist/tui/components/header.js +5 -3
  387. package/dist/tui/components/index.d.ts +1 -0
  388. package/dist/tui/components/index.js +1 -0
  389. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  390. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  391. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  392. package/dist/tui/components/scrollable-list.js +12 -10
  393. package/dist/tui/components/suggestions.js +39 -41
  394. package/dist/tui/components/tab-bar.d.ts +2 -1
  395. package/dist/tui/components/tab-bar.js +3 -4
  396. package/dist/tui/constants.d.ts +0 -5
  397. package/dist/tui/constants.js +0 -5
  398. package/dist/tui/contexts/auth-context.js +9 -2
  399. package/dist/tui/contexts/{use-commands.js → commands-context.js} +6 -5
  400. package/dist/tui/contexts/index.d.ts +6 -1
  401. package/dist/tui/contexts/index.js +6 -1
  402. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  403. package/dist/tui/contexts/onboarding-context.js +9 -9
  404. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  405. package/dist/tui/contexts/tasks-context.js +218 -0
  406. package/dist/tui/contexts/transport-context.d.ts +29 -0
  407. package/dist/tui/contexts/transport-context.js +82 -0
  408. package/dist/tui/hooks/index.d.ts +10 -6
  409. package/dist/tui/hooks/index.js +7 -6
  410. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  411. package/dist/tui/hooks/use-activity-logs.js +87 -34
  412. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  413. package/dist/tui/hooks/use-auth-polling.js +104 -0
  414. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  415. package/dist/tui/hooks/use-slash-completion.js +1 -1
  416. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  417. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  418. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  419. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  420. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  421. package/dist/tui/hooks/use-ui-heights.js +88 -0
  422. package/dist/tui/providers/app-providers.js +2 -6
  423. package/dist/tui/types/commands.d.ts +0 -26
  424. package/dist/tui/types/index.d.ts +1 -1
  425. package/dist/tui/types/ui.d.ts +9 -4
  426. package/dist/tui/utils/line.d.ts +11 -0
  427. package/dist/tui/utils/line.js +16 -0
  428. package/dist/tui/utils/log.d.ts +27 -0
  429. package/dist/tui/utils/log.js +114 -0
  430. package/dist/tui/views/command-view.d.ts +7 -0
  431. package/dist/tui/views/command-view.js +103 -80
  432. package/dist/tui/views/login-view.js +7 -4
  433. package/dist/tui/views/logs-view.d.ts +13 -0
  434. package/dist/tui/views/logs-view.js +27 -52
  435. package/dist/utils/connection-error-handler.d.ts +16 -0
  436. package/dist/utils/connection-error-handler.js +49 -0
  437. package/dist/utils/crash-log.d.ts +14 -0
  438. package/dist/utils/crash-log.js +19 -0
  439. package/dist/utils/file-helpers.d.ts +14 -0
  440. package/dist/utils/file-helpers.js +21 -0
  441. package/dist/utils/global-logs-path.d.ts +11 -0
  442. package/dist/utils/global-logs-path.js +37 -0
  443. package/dist/utils/process-logger.d.ts +53 -0
  444. package/dist/utils/process-logger.js +253 -0
  445. package/dist/utils/sandbox-detector.d.ts +31 -0
  446. package/dist/utils/sandbox-detector.js +122 -0
  447. package/oclif.manifest.json +10 -198
  448. package/package.json +5 -1
  449. package/dist/commands/cipher-agent/run.d.ts +0 -142
  450. package/dist/commands/cipher-agent/run.js +0 -555
  451. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  452. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  453. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  454. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  455. package/dist/commands/foo.d.ts +0 -14
  456. package/dist/commands/foo.js +0 -66
  457. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  458. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  459. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  460. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  461. package/dist/infra/cipher/cipher-agent.js +0 -317
  462. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  463. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  464. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  465. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  466. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  467. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  468. package/dist/tui/contexts/consumer.d.ts +0 -31
  469. package/dist/tui/contexts/consumer.js +0 -56
  470. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  471. package/dist/tui/hooks/use-consumer.js +0 -50
  472. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  473. package/dist/tui/hooks/use-queue-polling.js +0 -90
  474. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  475. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  476. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  477. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  478. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Enhanced Compaction Strategy
3
+ *
4
+ * Extends the ReactiveOverflowStrategy with additional features from OpenCode:
5
+ * - Creates CompactionPart to track compaction metadata
6
+ * - Preserves last 2 conversation turns (configurable)
7
+ * - Only compacts if saving > 20K tokens (configurable)
8
+ * - Emits compaction events for observability
9
+ *
10
+ * This is a wrapper that adds these features on top of the existing
11
+ * ReactiveOverflowStrategy for backward compatibility.
12
+ */
13
+ import { ReactiveOverflowStrategy } from './reactive-overflow.js';
14
+ /**
15
+ * Default configuration values.
16
+ */
17
+ const ENHANCED_DEFAULTS = {
18
+ minTokenSavings: 20_000,
19
+ preserveTurns: 2,
20
+ };
21
+ /**
22
+ * Enhanced Compaction Strategy.
23
+ *
24
+ * Wraps ReactiveOverflowStrategy with additional OpenCode-style features:
25
+ * - Token savings threshold
26
+ * - CompactionPart creation
27
+ * - Event emission
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const strategy = new EnhancedCompactionStrategy({
32
+ * llmProvider: myLlmProvider,
33
+ * eventBus: sessionEventBus,
34
+ * minTokenSavings: 20000,
35
+ * preserveTurns: 2,
36
+ * })
37
+ *
38
+ * const compactedHistory = await strategy.compress(history, maxTokens, tokenizer)
39
+ * ```
40
+ */
41
+ export class EnhancedCompactionStrategy {
42
+ baseStrategy;
43
+ eventBus;
44
+ /** Track the last compaction result for observability */
45
+ lastCompactionResult;
46
+ minTokenSavings;
47
+ preserveTurns;
48
+ constructor(options) {
49
+ // Create base strategy with configured preserve turns
50
+ this.baseStrategy = new ReactiveOverflowStrategy({
51
+ ...options,
52
+ preserveLastNTurns: options.preserveTurns ?? ENHANCED_DEFAULTS.preserveTurns,
53
+ });
54
+ this.eventBus = options.eventBus;
55
+ this.minTokenSavings = options.minTokenSavings ?? ENHANCED_DEFAULTS.minTokenSavings;
56
+ this.preserveTurns = options.preserveTurns ?? ENHANCED_DEFAULTS.preserveTurns;
57
+ }
58
+ /**
59
+ * Compress history with enhanced features.
60
+ */
61
+ async compress(history, maxHistoryTokens, tokenizer) {
62
+ // Calculate tokens before compression
63
+ const tokensBefore = this.countTokens(history, tokenizer);
64
+ // Check if compression is needed at all
65
+ if (tokensBefore <= maxHistoryTokens) {
66
+ return history;
67
+ }
68
+ // Apply base compression strategy
69
+ const compressedHistory = await this.baseStrategy.compress(history, maxHistoryTokens, tokenizer);
70
+ // Calculate tokens after compression
71
+ const tokensAfter = this.countTokens(compressedHistory, tokenizer);
72
+ const tokensSaved = tokensBefore - tokensAfter;
73
+ // Check minimum savings threshold
74
+ if (tokensSaved < this.minTokenSavings) {
75
+ // Not enough savings, return original (let other strategies handle it)
76
+ return history;
77
+ }
78
+ // Find compacted message IDs (messages that were removed or summarized)
79
+ const compactedMessageIds = this.findCompactedMessageIds(history, compressedHistory);
80
+ // Create compaction result for tracking
81
+ this.lastCompactionResult = {
82
+ compactedAt: Date.now(),
83
+ compactedMessageIds,
84
+ messageCountAfter: compressedHistory.length,
85
+ messageCountBefore: history.length,
86
+ tokensAfter,
87
+ tokensBefore,
88
+ tokensSaved,
89
+ };
90
+ // Emit compaction event if event bus provided
91
+ if (this.eventBus) {
92
+ this.eventBus.emit('llmservice:contextCompressed', {
93
+ compressedTokens: tokensAfter,
94
+ originalTokens: tokensBefore,
95
+ strategy: 'summary',
96
+ });
97
+ }
98
+ return compressedHistory;
99
+ }
100
+ /**
101
+ * Create a CompactionPart for the given compaction result.
102
+ * Can be used to insert into message parts for tracking.
103
+ */
104
+ createCompactionPart(summary) {
105
+ if (!this.lastCompactionResult) {
106
+ return undefined;
107
+ }
108
+ return {
109
+ compactedMessageIds: this.lastCompactionResult.compactedMessageIds,
110
+ id: `compaction-${Date.now()}`,
111
+ summary,
112
+ timestamp: this.lastCompactionResult.compactedAt,
113
+ tokensSaved: this.lastCompactionResult.tokensSaved,
114
+ type: 'compaction',
115
+ };
116
+ }
117
+ /**
118
+ * Get the last compaction result for observability.
119
+ */
120
+ getLastCompactionResult() {
121
+ return this.lastCompactionResult;
122
+ }
123
+ getName() {
124
+ return 'EnhancedCompaction';
125
+ }
126
+ /**
127
+ * Count total tokens in history.
128
+ */
129
+ countTokens(history, tokenizer) {
130
+ let total = 0;
131
+ for (const message of history) {
132
+ // Role overhead
133
+ total += 4;
134
+ if (typeof message.content === 'string') {
135
+ total += tokenizer.countTokens(message.content);
136
+ }
137
+ else if (Array.isArray(message.content)) {
138
+ for (const part of message.content) {
139
+ total +=
140
+ part.type === 'text' || part.type === 'reasoning'
141
+ ? tokenizer.countTokens(part.text)
142
+ : 100; // Estimate for non-text parts
143
+ }
144
+ }
145
+ // Tool calls overhead
146
+ if (message.toolCalls) {
147
+ for (const call of message.toolCalls) {
148
+ total += tokenizer.countTokens(call.function.name);
149
+ total += tokenizer.countTokens(call.function.arguments);
150
+ }
151
+ }
152
+ }
153
+ return total;
154
+ }
155
+ /**
156
+ * Find message IDs that were compacted (removed or summarized).
157
+ * Since messages don't have IDs, we use indices as pseudo-IDs.
158
+ */
159
+ findCompactedMessageIds(original, compressed) {
160
+ const compactedIds = [];
161
+ const compressedCount = compressed.filter((m) => !m.metadata?.isSummary).length;
162
+ // Messages from index 0 to (original.length - compressedCount) were compacted
163
+ const compactedCount = original.length - compressedCount;
164
+ for (let i = 0; i < compactedCount; i++) {
165
+ compactedIds.push(`msg-${i}`);
166
+ }
167
+ return compactedIds;
168
+ }
169
+ }
170
+ /**
171
+ * Create an EnhancedCompactionStrategy instance.
172
+ */
173
+ export function createEnhancedCompactionStrategy(options) {
174
+ return new EnhancedCompactionStrategy(options);
175
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Filter compacted messages utility.
3
+ *
4
+ * This module provides read-time filtering of message history based on
5
+ * compression metadata. When a summary message exists (with metadata.isSummary === true),
6
+ * messages before it are filtered out since they've been summarized.
7
+ *
8
+ * Key design principles:
9
+ * - Full history preserved in storage (audit trail)
10
+ * - Filtering happens at read-time, not storage-time
11
+ * - Summary message marks the boundary
12
+ *
13
+ * Based on dexto's filterCompacted() pattern.
14
+ */
15
+ import type { InternalMessage } from '../../../../../core/interfaces/cipher/message-types.js';
16
+ /**
17
+ * Filter history to exclude messages before the most recent summary.
18
+ *
19
+ * When a summary message exists (metadata.isSummary === true), this function
20
+ * returns only the summary message and everything after it. This implements
21
+ * read-time compression where old messages are logically hidden but physically
22
+ * preserved in storage.
23
+ *
24
+ * @param history - Full message history to filter
25
+ * @returns Filtered history with old messages excluded
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // Before filtering: [msg1, msg2, msg3, summaryMsg, msg4, msg5]
30
+ * // After filtering: [summaryMsg, msg4, msg5]
31
+ *
32
+ * const filtered = filterCompacted(history);
33
+ * ```
34
+ */
35
+ export declare function filterCompacted(history: readonly InternalMessage[]): InternalMessage[];
36
+ /**
37
+ * Check if history contains a summary message.
38
+ *
39
+ * Useful for determining if filtering would have any effect.
40
+ *
41
+ * @param history - Message history to check
42
+ * @returns true if history contains a summary message
43
+ */
44
+ export declare function hasSummaryMessage(history: readonly InternalMessage[]): boolean;
45
+ /**
46
+ * Find the summary message in history.
47
+ *
48
+ * @param history - Message history to search
49
+ * @returns The summary message or undefined if not found
50
+ */
51
+ export declare function findSummaryMessage(history: readonly InternalMessage[]): InternalMessage | undefined;
52
+ /**
53
+ * Get the count of messages that would be filtered out.
54
+ *
55
+ * @param history - Message history to analyze
56
+ * @returns Number of messages before the summary that would be filtered
57
+ */
58
+ export declare function getFilteredMessageCount(history: readonly InternalMessage[]): number;
59
+ /**
60
+ * Get summary statistics about compression state.
61
+ *
62
+ * @param history - Message history to analyze
63
+ * @returns Statistics about the compression state
64
+ */
65
+ export declare function getCompressionStats(history: readonly InternalMessage[]): {
66
+ /** When compression occurred (from summary metadata) */
67
+ compactedAt?: number;
68
+ /** Whether history has been compressed */
69
+ hasCompression: boolean;
70
+ /** Number of messages hidden by compression */
71
+ hiddenMessageCount: number;
72
+ /** Number of messages that were summarized (from summary metadata) */
73
+ summarizedMessageCount: number;
74
+ /** Number of messages currently visible (after filtering) */
75
+ visibleMessageCount: number;
76
+ };
77
+ /**
78
+ * Check if a message is a summary message.
79
+ *
80
+ * @param message - Message to check
81
+ * @returns true if the message is a summary
82
+ */
83
+ export declare function isSummaryMessage(message: InternalMessage): boolean;
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Filter compacted messages utility.
3
+ *
4
+ * This module provides read-time filtering of message history based on
5
+ * compression metadata. When a summary message exists (with metadata.isSummary === true),
6
+ * messages before it are filtered out since they've been summarized.
7
+ *
8
+ * Key design principles:
9
+ * - Full history preserved in storage (audit trail)
10
+ * - Filtering happens at read-time, not storage-time
11
+ * - Summary message marks the boundary
12
+ *
13
+ * Based on dexto's filterCompacted() pattern.
14
+ */
15
+ /**
16
+ * Filter history to exclude messages before the most recent summary.
17
+ *
18
+ * When a summary message exists (metadata.isSummary === true), this function
19
+ * returns only the summary message and everything after it. This implements
20
+ * read-time compression where old messages are logically hidden but physically
21
+ * preserved in storage.
22
+ *
23
+ * @param history - Full message history to filter
24
+ * @returns Filtered history with old messages excluded
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // Before filtering: [msg1, msg2, msg3, summaryMsg, msg4, msg5]
29
+ * // After filtering: [summaryMsg, msg4, msg5]
30
+ *
31
+ * const filtered = filterCompacted(history);
32
+ * ```
33
+ */
34
+ export function filterCompacted(history) {
35
+ if (!history || history.length === 0) {
36
+ return [];
37
+ }
38
+ // Find the most recent summary message (search backwards for efficiency)
39
+ let summaryIndex = -1;
40
+ for (let i = history.length - 1; i >= 0; i--) {
41
+ const msg = history[i];
42
+ if (msg?.metadata?.isSummary === true) {
43
+ summaryIndex = i;
44
+ break;
45
+ }
46
+ }
47
+ // If no summary found, return full history
48
+ if (summaryIndex === -1) {
49
+ return [...history];
50
+ }
51
+ // Return summary + everything after it
52
+ return history.slice(summaryIndex);
53
+ }
54
+ /**
55
+ * Check if history contains a summary message.
56
+ *
57
+ * Useful for determining if filtering would have any effect.
58
+ *
59
+ * @param history - Message history to check
60
+ * @returns true if history contains a summary message
61
+ */
62
+ export function hasSummaryMessage(history) {
63
+ if (!history || history.length === 0)
64
+ return false;
65
+ return history.some((msg) => msg?.metadata?.isSummary === true);
66
+ }
67
+ /**
68
+ * Find the summary message in history.
69
+ *
70
+ * @param history - Message history to search
71
+ * @returns The summary message or undefined if not found
72
+ */
73
+ export function findSummaryMessage(history) {
74
+ if (!history || history.length === 0)
75
+ return undefined;
76
+ // Search backwards to find the most recent summary
77
+ for (let i = history.length - 1; i >= 0; i--) {
78
+ const msg = history[i];
79
+ if (msg?.metadata?.isSummary === true) {
80
+ return msg;
81
+ }
82
+ }
83
+ return undefined;
84
+ }
85
+ /**
86
+ * Get the count of messages that would be filtered out.
87
+ *
88
+ * @param history - Message history to analyze
89
+ * @returns Number of messages before the summary that would be filtered
90
+ */
91
+ export function getFilteredMessageCount(history) {
92
+ if (!history || history.length === 0)
93
+ return 0;
94
+ // Find summary index
95
+ let summaryIndex = -1;
96
+ for (let i = history.length - 1; i >= 0; i--) {
97
+ if (history[i]?.metadata?.isSummary === true) {
98
+ summaryIndex = i;
99
+ break;
100
+ }
101
+ }
102
+ // No summary = nothing filtered
103
+ if (summaryIndex === -1)
104
+ return 0;
105
+ // Count messages before the summary
106
+ return summaryIndex;
107
+ }
108
+ /**
109
+ * Get summary statistics about compression state.
110
+ *
111
+ * @param history - Message history to analyze
112
+ * @returns Statistics about the compression state
113
+ */
114
+ export function getCompressionStats(history) {
115
+ if (!history || history.length === 0) {
116
+ return {
117
+ hasCompression: false,
118
+ hiddenMessageCount: 0,
119
+ summarizedMessageCount: 0,
120
+ visibleMessageCount: 0,
121
+ };
122
+ }
123
+ const summaryMessage = findSummaryMessage(history);
124
+ if (!summaryMessage) {
125
+ return {
126
+ hasCompression: false,
127
+ hiddenMessageCount: 0,
128
+ summarizedMessageCount: 0,
129
+ visibleMessageCount: history.length,
130
+ };
131
+ }
132
+ const filtered = filterCompacted(history);
133
+ const hiddenCount = history.length - filtered.length;
134
+ return {
135
+ compactedAt: summaryMessage.metadata?.compactedAt,
136
+ hasCompression: true,
137
+ hiddenMessageCount: hiddenCount,
138
+ summarizedMessageCount: summaryMessage.metadata?.summarizedMessageCount || hiddenCount,
139
+ visibleMessageCount: filtered.length,
140
+ };
141
+ }
142
+ /**
143
+ * Check if a message is a summary message.
144
+ *
145
+ * @param message - Message to check
146
+ * @returns true if the message is a summary
147
+ */
148
+ export function isSummaryMessage(message) {
149
+ return message?.metadata?.isSummary === true;
150
+ }
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * Context compression strategies module
3
3
  */
4
+ export { createEnhancedCompactionStrategy, EnhancedCompactionStrategy } from './enhanced-compaction.js';
5
+ export type { CompactionResult, EnhancedCompactionOptions } from './enhanced-compaction.js';
6
+ export { filterCompacted, findSummaryMessage, getCompressionStats, getFilteredMessageCount, hasSummaryMessage, isSummaryMessage, } from './filter-compacted.js';
4
7
  export { MiddleRemovalStrategy } from './middle-removal.js';
5
8
  export { OldestRemovalStrategy } from './oldest-removal.js';
9
+ export { createReactiveOverflowStrategy, ReactiveOverflowStrategy } from './reactive-overflow.js';
10
+ export type { ReactiveOverflowOptions } from './reactive-overflow.js';
6
11
  export type { CompressionStrategyOptions, ICompressionStrategy } from './types.js';
@@ -1,5 +1,11 @@
1
1
  /**
2
2
  * Context compression strategies module
3
3
  */
4
+ // Compression strategies (alphabetical order)
5
+ export { createEnhancedCompactionStrategy, EnhancedCompactionStrategy } from './enhanced-compaction.js';
6
+ // Filter utilities
7
+ export { filterCompacted, findSummaryMessage, getCompressionStats, getFilteredMessageCount, hasSummaryMessage, isSummaryMessage, } from './filter-compacted.js';
8
+ // More compression strategies
4
9
  export { MiddleRemovalStrategy } from './middle-removal.js';
5
10
  export { OldestRemovalStrategy } from './oldest-removal.js';
11
+ export { createReactiveOverflowStrategy, ReactiveOverflowStrategy } from './reactive-overflow.js';
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Reactive Overflow compression strategy.
3
+ *
4
+ * This strategy uses an LLM to generate intelligent summaries of older messages
5
+ * when the context window overflows. Unlike simple truncation strategies, it
6
+ * preserves the semantic meaning of the conversation.
7
+ *
8
+ * Algorithm:
9
+ * 1. Check if overflow (currentTokens > maxHistoryTokens)
10
+ * 2. Select oldest non-system messages to summarize
11
+ * 3. Generate LLM summary of selected messages
12
+ * 4. Return: systemMessages + summaryMessage + remainingMessages
13
+ * 5. Summary message has metadata.isSummary = true
14
+ *
15
+ * Key design principles:
16
+ * - Uses same model as conversation (per user configuration)
17
+ * - Summary message marks compaction boundary
18
+ * - filterCompacted() excludes old messages at read-time
19
+ * - Full history preserved in storage for audit
20
+ *
21
+ */
22
+ import type { ILlmProvider } from '../../../../../core/interfaces/cipher/i-llm-provider.js';
23
+ import type { ITokenizer } from '../../../../../core/interfaces/cipher/i-tokenizer.js';
24
+ import type { InternalMessage } from '../../../../../core/interfaces/cipher/message-types.js';
25
+ import type { ICompressionStrategy } from './types.js';
26
+ /**
27
+ * Options for the ReactiveOverflowStrategy.
28
+ */
29
+ export interface ReactiveOverflowOptions {
30
+ /** LLM provider for generating summaries */
31
+ llmProvider: ILlmProvider;
32
+ /**
33
+ * Minimum messages to consider for summarization.
34
+ * If fewer messages are available, compression is skipped.
35
+ * Default: 10
36
+ */
37
+ minMessagesToSummarize?: number;
38
+ /**
39
+ * Model to use for summarization.
40
+ * Default: uses same model as conversation (passed via generate params)
41
+ */
42
+ model?: string;
43
+ /**
44
+ * Number of recent turns to always preserve (not summarize).
45
+ * Default: 2
46
+ */
47
+ preserveLastNTurns?: number;
48
+ /**
49
+ * Target token count for the summary.
50
+ * Default: 2000
51
+ */
52
+ summaryTargetTokens?: number;
53
+ }
54
+ /**
55
+ * Reactive Overflow compression strategy.
56
+ *
57
+ * Uses an LLM to generate intelligent summaries when context overflows.
58
+ */
59
+ export declare class ReactiveOverflowStrategy implements ICompressionStrategy {
60
+ private readonly llmProvider;
61
+ private readonly minMessagesToSummarize;
62
+ private readonly model?;
63
+ private readonly preserveLastNTurns;
64
+ private readonly summaryTargetTokens;
65
+ constructor(options: ReactiveOverflowOptions);
66
+ compress(history: InternalMessage[], maxHistoryTokens: number, tokenizer: ITokenizer): Promise<InternalMessage[]>;
67
+ getName(): string;
68
+ /**
69
+ * Count tokens in message history.
70
+ */
71
+ private countHistoryTokens;
72
+ /**
73
+ * Count tokens in a single message.
74
+ */
75
+ private countMessageTokens;
76
+ /**
77
+ * Extract text content from a message.
78
+ */
79
+ private extractTextContent;
80
+ /**
81
+ * Find turn boundaries in message history.
82
+ *
83
+ * A turn boundary is the index where a user message starts.
84
+ * Returns indices of all user messages.
85
+ */
86
+ private findTurnBoundaries;
87
+ /**
88
+ * Format messages for the summary prompt.
89
+ */
90
+ private formatMessagesForSummary;
91
+ /**
92
+ * Format role for display.
93
+ */
94
+ private formatRole;
95
+ /**
96
+ * Generate a fallback summary without LLM.
97
+ */
98
+ private generateFallbackSummary;
99
+ /**
100
+ * Generate a summary of messages using the LLM.
101
+ */
102
+ private generateSummary;
103
+ }
104
+ /**
105
+ * Create a ReactiveOverflowStrategy instance.
106
+ */
107
+ export declare function createReactiveOverflowStrategy(options: ReactiveOverflowOptions): ReactiveOverflowStrategy;