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
@@ -7,11 +7,11 @@ export declare const AGENT_EVENT_NAMES: readonly ["cipher:conversationReset", "c
7
7
  * Session-level event names for LLM service operations.
8
8
  * These events are emitted at the session level and do not include sessionId in payloads.
9
9
  */
10
- export declare const SESSION_EVENT_NAMES: readonly ["llmservice:chunk", "llmservice:error", "llmservice:outputTruncated", "llmservice:response", "llmservice:thinking", "llmservice:thought", "llmservice:toolCall", "llmservice:toolResult", "llmservice:unsupportedInput", "llmservice:warning"];
10
+ export declare const SESSION_EVENT_NAMES: readonly ["llmservice:chunk", "llmservice:contextCompressed", "llmservice:contextOverflow", "llmservice:contextPruned", "llmservice:doomLoopDetected", "llmservice:error", "llmservice:outputTruncated", "llmservice:response", "llmservice:thinking", "llmservice:thought", "llmservice:toolCall", "llmservice:toolMetadata", "llmservice:toolResult", "llmservice:unsupportedInput", "llmservice:warning", "message:dequeued", "message:queued", "run:complete", "session:statusChanged", "step:finished", "step:started"];
11
11
  /**
12
12
  * All event names (union of agent and session events).
13
13
  */
14
- export declare const EVENT_NAMES: readonly ["cipher:conversationReset", "cipher:executionStarted", "cipher:executionTerminated", "cipher:log", "cipher:stateChanged", "cipher:stateReset", "cipher:ui", "llmservice:chunk", "llmservice:error", "llmservice:outputTruncated", "llmservice:response", "llmservice:thinking", "llmservice:thought", "llmservice:toolCall", "llmservice:toolResult", "llmservice:unsupportedInput", "llmservice:warning"];
14
+ export declare const EVENT_NAMES: readonly ["cipher:conversationReset", "cipher:executionStarted", "cipher:executionTerminated", "cipher:log", "cipher:stateChanged", "cipher:stateReset", "cipher:ui", "llmservice:chunk", "llmservice:contextCompressed", "llmservice:contextOverflow", "llmservice:contextPruned", "llmservice:doomLoopDetected", "llmservice:error", "llmservice:outputTruncated", "llmservice:response", "llmservice:thinking", "llmservice:thought", "llmservice:toolCall", "llmservice:toolMetadata", "llmservice:toolResult", "llmservice:unsupportedInput", "llmservice:warning", "message:dequeued", "message:queued", "run:complete", "session:statusChanged", "step:finished", "step:started"];
15
15
  /**
16
16
  * Union type of all agent event names.
17
17
  */
@@ -156,36 +156,105 @@ export interface AgentEventMap {
156
156
  * @property {string} content - Content of the chunk
157
157
  * @property {boolean} [isComplete] - Whether this is the final chunk
158
158
  * @property {string} sessionId - ID of the session
159
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
159
160
  * @property {'reasoning' | 'text'} type - Type of chunk (text or reasoning)
160
161
  */
161
162
  'llmservice:chunk': {
162
163
  content: string;
163
164
  isComplete?: boolean;
164
165
  sessionId: string;
166
+ taskId?: string;
165
167
  type: 'reasoning' | 'text';
166
168
  };
169
+ /**
170
+ * Emitted when conversation context is compressed via summarization.
171
+ * @property {number} compressedTokens - Token count after compression
172
+ * @property {number} originalTokens - Token count before compression
173
+ * @property {string} sessionId - ID of the session
174
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
175
+ * @property {'middle_removal' | 'oldest_removal' | 'summary'} strategy - Compression strategy used
176
+ */
177
+ 'llmservice:contextCompressed': {
178
+ compressedTokens: number;
179
+ originalTokens: number;
180
+ sessionId: string;
181
+ strategy: 'middle_removal' | 'oldest_removal' | 'summary';
182
+ taskId?: string;
183
+ };
184
+ /**
185
+ * Emitted when context is approaching the token limit.
186
+ * @property {number} currentTokens - Current token count
187
+ * @property {number} maxTokens - Maximum allowed tokens
188
+ * @property {string} sessionId - ID of the session
189
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
190
+ * @property {number} utilizationPercent - Percentage of context used (0-100)
191
+ */
192
+ 'llmservice:contextOverflow': {
193
+ currentTokens: number;
194
+ maxTokens: number;
195
+ sessionId: string;
196
+ taskId?: string;
197
+ utilizationPercent: number;
198
+ };
199
+ /**
200
+ * Emitted when old tool outputs are pruned to save context space.
201
+ * @property {number} pruneCount - Number of tool outputs pruned
202
+ * @property {'manual' | 'overflow'} reason - Why pruning was triggered
203
+ * @property {string} sessionId - ID of the session
204
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
205
+ * @property {number} tokensSaved - Estimated tokens saved
206
+ */
207
+ 'llmservice:contextPruned': {
208
+ pruneCount: number;
209
+ reason: 'manual' | 'overflow';
210
+ sessionId: string;
211
+ taskId?: string;
212
+ tokensSaved: number;
213
+ };
214
+ /**
215
+ * Emitted when a doom loop is detected (repeated identical tool calls).
216
+ * The tool call is automatically rejected to prevent infinite loops.
217
+ * @property {Record<string, unknown>} args - Arguments that were repeated
218
+ * @property {'exact_repeat' | 'oscillation'} loopType - Type of loop detected
219
+ * @property {number} repeatCount - Number of times the pattern repeated
220
+ * @property {string} sessionId - ID of the session
221
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
222
+ * @property {string} toolName - Name of the tool involved in the loop
223
+ */
224
+ 'llmservice:doomLoopDetected': {
225
+ args: Record<string, unknown>;
226
+ loopType: 'exact_repeat' | 'oscillation';
227
+ repeatCount: number;
228
+ sessionId: string;
229
+ taskId?: string;
230
+ toolName: string;
231
+ };
167
232
  /**
168
233
  * Emitted when an error occurs during LLM service operation.
169
234
  * @property {string} [code] - Error code (optional)
170
235
  * @property {string} error - Error message
171
236
  * @property {string} sessionId - ID of the session
237
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
172
238
  */
173
239
  'llmservice:error': {
174
240
  code?: string;
175
241
  error: string;
176
242
  sessionId: string;
243
+ taskId?: string;
177
244
  };
178
245
  /**
179
246
  * Emitted when tool output is truncated due to size.
180
247
  * @property {number} originalLength - Original output length before truncation
181
248
  * @property {string} savedToFile - Path to file where full output was saved
182
249
  * @property {string} sessionId - ID of the session
250
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
183
251
  * @property {string} toolName - Name of the tool that produced the output
184
252
  */
185
253
  'llmservice:outputTruncated': {
186
254
  originalLength: number;
187
255
  savedToFile: string;
188
256
  sessionId: string;
257
+ taskId?: string;
189
258
  toolName: string;
190
259
  };
191
260
  /**
@@ -196,6 +265,7 @@ export interface AgentEventMap {
196
265
  * @property {string} [provider] - LLM provider name
197
266
  * @property {string} [reasoning] - Internal reasoning (if available)
198
267
  * @property {string} sessionId - ID of the session
268
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
199
269
  * @property {TokenUsage} [tokenUsage] - Token usage statistics
200
270
  */
201
271
  'llmservice:response': {
@@ -205,33 +275,40 @@ export interface AgentEventMap {
205
275
  provider?: string;
206
276
  reasoning?: string;
207
277
  sessionId: string;
278
+ taskId?: string;
208
279
  tokenUsage?: TokenUsage;
209
280
  };
210
281
  /**
211
282
  * Emitted when LLM service starts thinking/processing.
212
283
  * @property {string} sessionId - ID of the session
284
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
213
285
  */
214
286
  'llmservice:thinking': {
215
287
  sessionId: string;
288
+ taskId?: string;
216
289
  };
217
290
  /**
218
291
  * Emitted when LLM generates a thought (Gemini models only).
219
292
  * @property {string} description - Detailed thought description
220
293
  * @property {string} sessionId - ID of the session
294
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
221
295
  * @property {string} subject - Brief thought subject
222
296
  */
223
297
  'llmservice:thought': {
224
298
  description: string;
225
299
  sessionId: string;
226
300
  subject: string;
301
+ taskId?: string;
227
302
  };
228
303
  /**
229
304
  * Emitted when the todo list is updated via write_todos tool.
230
305
  * @property {string} sessionId - ID of the session
306
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
231
307
  * @property {Array<{content: string, status: string, activeForm: string}>} todos - Updated todo list
232
308
  */
233
309
  'llmservice:todoUpdated': {
234
310
  sessionId: string;
311
+ taskId?: string;
235
312
  todos: Array<{
236
313
  activeForm: string;
237
314
  content: string;
@@ -243,12 +320,33 @@ export interface AgentEventMap {
243
320
  * @property {Record<string, unknown>} args - Arguments for the tool
244
321
  * @property {string} [callId] - Unique identifier for this tool call
245
322
  * @property {string} sessionId - ID of the session
323
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
246
324
  * @property {string} toolName - Name of the tool to execute
247
325
  */
248
326
  'llmservice:toolCall': {
249
327
  args: Record<string, unknown>;
250
328
  callId?: string;
251
329
  sessionId: string;
330
+ taskId?: string;
331
+ toolName: string;
332
+ };
333
+ /**
334
+ * Emitted when a tool streams metadata updates during execution.
335
+ * Allows tools to push real-time updates (e.g., bash output streaming).
336
+ * @property {string} callId - Tool call identifier
337
+ * @property {string} [description] - Human-readable status description
338
+ * @property {Record<string, unknown>} metadata - The metadata update
339
+ * @property {string} [output] - Streamed output content
340
+ * @property {number} [progress] - Progress indicator (0-100)
341
+ * @property {string} sessionId - ID of the session
342
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
343
+ * @property {string} toolName - Name of the tool streaming metadata
344
+ */
345
+ 'llmservice:toolMetadata': {
346
+ callId: string;
347
+ metadata: Record<string, unknown>;
348
+ sessionId: string;
349
+ taskId?: string;
252
350
  toolName: string;
253
351
  };
254
352
  /**
@@ -259,6 +357,7 @@ export interface AgentEventMap {
259
357
  * @property {Record<string, unknown>} [metadata] - Execution metadata (duration, tokens, etc.)
260
358
  * @property {unknown} [result] - Tool execution result
261
359
  * @property {string} sessionId - ID of the session
360
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
262
361
  * @property {boolean} success - Whether execution succeeded
263
362
  * @property {string} toolName - Name of the executed tool
264
363
  */
@@ -270,16 +369,19 @@ export interface AgentEventMap {
270
369
  result?: unknown;
271
370
  sessionId: string;
272
371
  success: boolean;
372
+ taskId?: string;
273
373
  toolName: string;
274
374
  };
275
375
  /**
276
376
  * Emitted when LLM receives unsupported input.
277
377
  * @property {string} reason - Reason why input is unsupported
278
378
  * @property {string} sessionId - ID of the session
379
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
279
380
  */
280
381
  'llmservice:unsupportedInput': {
281
382
  reason: string;
282
383
  sessionId: string;
384
+ taskId?: string;
283
385
  };
284
386
  /**
285
387
  * Emitted when LLM service encounters a warning (e.g., max iterations reached).
@@ -287,12 +389,103 @@ export interface AgentEventMap {
287
389
  * @property {string} [model] - Model identifier
288
390
  * @property {string} [provider] - LLM provider name
289
391
  * @property {string} sessionId - ID of the session
392
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
290
393
  */
291
394
  'llmservice:warning': {
292
395
  message: string;
293
396
  model?: string;
294
397
  provider?: string;
295
398
  sessionId: string;
399
+ taskId?: string;
400
+ };
401
+ /**
402
+ * Emitted when queued messages are dequeued for processing.
403
+ * @property {number} count - Number of messages that were dequeued
404
+ * @property {string} sessionId - ID of the session
405
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
406
+ */
407
+ 'message:dequeued': {
408
+ count: number;
409
+ sessionId: string;
410
+ taskId?: string;
411
+ };
412
+ /**
413
+ * Emitted when a message is queued because session is busy.
414
+ * @property {object} message - The queued message
415
+ * @property {string} message.id - Unique identifier for the queued message
416
+ * @property {string} message.content - Message text content
417
+ * @property {number} message.queuedAt - Timestamp when queued
418
+ * @property {number} position - Position in the queue (1-based)
419
+ * @property {string} sessionId - ID of the session
420
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
421
+ */
422
+ 'message:queued': {
423
+ message: {
424
+ content: string;
425
+ id: string;
426
+ queuedAt: number;
427
+ };
428
+ position: number;
429
+ sessionId: string;
430
+ taskId?: string;
431
+ };
432
+ /**
433
+ * Emitted when a session run completes (streaming API lifecycle event).
434
+ * @property {number} durationMs - Execution duration in milliseconds
435
+ * @property {Error} [error] - Error if terminated due to error
436
+ * @property {'cancelled' | 'error' | 'max-iterations' | 'stop' | 'timeout'} finishReason - Why execution terminated
437
+ * @property {string} sessionId - ID of the session
438
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
439
+ * @property {number} stepCount - Number of agentic steps completed
440
+ */
441
+ 'run:complete': {
442
+ durationMs: number;
443
+ error?: Error;
444
+ finishReason: 'cancelled' | 'error' | 'max-iterations' | 'stop' | 'timeout';
445
+ sessionId: string;
446
+ stepCount: number;
447
+ taskId?: string;
448
+ };
449
+ /**
450
+ * Emitted when session status changes.
451
+ * Tracks the lifecycle state of a session (idle, busy, retry, waiting).
452
+ * @property {string} sessionId - ID of the session
453
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
454
+ * @property {SessionStatusType} status - The new session status
455
+ */
456
+ 'session:statusChanged': {
457
+ sessionId: string;
458
+ status: SessionStatusType;
459
+ taskId?: string;
460
+ };
461
+ /**
462
+ * Emitted when an execution step finishes.
463
+ * Provides per-step cost and token tracking.
464
+ * @property {number} cost - Cost in dollars for this step
465
+ * @property {'max_tokens' | 'stop' | 'tool_calls'} finishReason - Why step finished
466
+ * @property {string} sessionId - ID of the session
467
+ * @property {number} stepIndex - Step index (0-based)
468
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
469
+ * @property {StepTokenUsage} tokens - Token usage for this step
470
+ */
471
+ 'step:finished': {
472
+ cost: number;
473
+ finishReason: 'max_tokens' | 'stop' | 'tool_calls';
474
+ sessionId: string;
475
+ stepIndex: number;
476
+ taskId?: string;
477
+ tokens: StepTokenUsage;
478
+ };
479
+ /**
480
+ * Emitted when an execution step starts.
481
+ * @property {string} sessionId - ID of the session
482
+ * @property {number} stepIndex - Step index (0-based)
483
+ * @property {string} [taskId] - Optional task ID for concurrent task isolation
484
+ */
485
+ 'step:started': {
486
+ sessionId: string;
487
+ stepIndex: number;
488
+ taskId?: string;
296
489
  };
297
490
  }
298
491
  /**
@@ -311,6 +504,53 @@ export interface SessionEventMap {
311
504
  isComplete?: boolean;
312
505
  type: 'reasoning' | 'text';
313
506
  };
507
+ /**
508
+ * Emitted when conversation context is compressed via summarization.
509
+ * @property {number} compressedTokens - Token count after compression
510
+ * @property {number} originalTokens - Token count before compression
511
+ * @property {'middle_removal' | 'oldest_removal' | 'summary'} strategy - Compression strategy used
512
+ */
513
+ 'llmservice:contextCompressed': {
514
+ compressedTokens: number;
515
+ originalTokens: number;
516
+ strategy: 'middle_removal' | 'oldest_removal' | 'summary';
517
+ };
518
+ /**
519
+ * Emitted when context is approaching the token limit.
520
+ * @property {number} currentTokens - Current token count
521
+ * @property {number} maxTokens - Maximum allowed tokens
522
+ * @property {number} utilizationPercent - Percentage of context used (0-100)
523
+ */
524
+ 'llmservice:contextOverflow': {
525
+ currentTokens: number;
526
+ maxTokens: number;
527
+ utilizationPercent: number;
528
+ };
529
+ /**
530
+ * Emitted when old tool outputs are pruned to save context space.
531
+ * @property {number} pruneCount - Number of tool outputs pruned
532
+ * @property {'manual' | 'overflow'} reason - Why pruning was triggered
533
+ * @property {number} tokensSaved - Estimated tokens saved
534
+ */
535
+ 'llmservice:contextPruned': {
536
+ pruneCount: number;
537
+ reason: 'manual' | 'overflow';
538
+ tokensSaved: number;
539
+ };
540
+ /**
541
+ * Emitted when a doom loop is detected (repeated identical tool calls).
542
+ * The tool call is automatically rejected to prevent infinite loops.
543
+ * @property {Record<string, unknown>} args - Arguments that were repeated
544
+ * @property {'exact_repeat' | 'oscillation'} loopType - Type of loop detected
545
+ * @property {number} repeatCount - Number of times the pattern repeated
546
+ * @property {string} toolName - Name of the tool involved in the loop
547
+ */
548
+ 'llmservice:doomLoopDetected': {
549
+ args: Record<string, unknown>;
550
+ loopType: 'exact_repeat' | 'oscillation';
551
+ repeatCount: number;
552
+ toolName: string;
553
+ };
314
554
  /**
315
555
  * Emitted when an error occurs during LLM service operation.
316
556
  * @property {string} [code] - Error code (optional)
@@ -372,6 +612,18 @@ export interface SessionEventMap {
372
612
  callId?: string;
373
613
  toolName: string;
374
614
  };
615
+ /**
616
+ * Emitted when a tool streams metadata updates during execution.
617
+ * Allows tools to push real-time updates (e.g., bash output streaming).
618
+ * @property {string} callId - Tool call identifier
619
+ * @property {Record<string, unknown>} metadata - The metadata update
620
+ * @property {string} toolName - Name of the tool streaming metadata
621
+ */
622
+ 'llmservice:toolMetadata': {
623
+ callId: string;
624
+ metadata: Record<string, unknown>;
625
+ toolName: string;
626
+ };
375
627
  /**
376
628
  * Emitted when a tool execution completes.
377
629
  * @property {string} [callId] - Tool call identifier
@@ -409,7 +661,108 @@ export interface SessionEventMap {
409
661
  model?: string;
410
662
  provider?: string;
411
663
  };
664
+ /**
665
+ * Emitted when queued messages are dequeued for processing.
666
+ * @property {number} count - Number of messages that were dequeued
667
+ */
668
+ 'message:dequeued': {
669
+ count: number;
670
+ };
671
+ /**
672
+ * Emitted when a message is queued because session is busy.
673
+ * @property {object} message - The queued message
674
+ * @property {string} message.id - Unique identifier for the queued message
675
+ * @property {string} message.content - Message text content
676
+ * @property {number} message.queuedAt - Timestamp when queued
677
+ * @property {number} position - Position in the queue (1-based)
678
+ */
679
+ 'message:queued': {
680
+ message: {
681
+ content: string;
682
+ id: string;
683
+ queuedAt: number;
684
+ };
685
+ position: number;
686
+ };
687
+ /**
688
+ * Emitted when a session run completes (streaming API lifecycle event).
689
+ * @property {number} durationMs - Execution duration in milliseconds
690
+ * @property {Error} [error] - Error if terminated due to error
691
+ * @property {'cancelled' | 'error' | 'max-iterations' | 'stop' | 'timeout'} finishReason - Why execution terminated
692
+ * @property {number} stepCount - Number of agentic steps completed
693
+ */
694
+ 'run:complete': {
695
+ durationMs: number;
696
+ error?: Error;
697
+ finishReason: 'cancelled' | 'error' | 'max-iterations' | 'stop' | 'timeout';
698
+ stepCount: number;
699
+ };
700
+ /**
701
+ * Emitted when session status changes.
702
+ * Tracks the lifecycle state of a session (idle, busy, retry, waiting).
703
+ * @property {SessionStatusType} status - The new session status
704
+ */
705
+ 'session:statusChanged': {
706
+ status: SessionStatusType;
707
+ };
708
+ /**
709
+ * Emitted when an execution step finishes.
710
+ * Provides per-step cost and token tracking.
711
+ * @property {number} cost - Cost in dollars for this step
712
+ * @property {'max_tokens' | 'stop' | 'tool_calls'} finishReason - Why step finished
713
+ * @property {number} stepIndex - Step index (0-based)
714
+ * @property {StepTokenUsage} tokens - Token usage for this step
715
+ */
716
+ 'step:finished': {
717
+ cost: number;
718
+ finishReason: 'max_tokens' | 'stop' | 'tool_calls';
719
+ stepIndex: number;
720
+ tokens: StepTokenUsage;
721
+ };
722
+ /**
723
+ * Emitted when an execution step starts.
724
+ * @property {number} stepIndex - Step index (0-based)
725
+ */
726
+ 'step:started': {
727
+ stepIndex: number;
728
+ };
412
729
  }
730
+ /**
731
+ * Token usage for a single execution step.
732
+ */
733
+ export interface StepTokenUsage {
734
+ /** Cache tokens (read/write) */
735
+ cache?: {
736
+ read: number;
737
+ write: number;
738
+ };
739
+ /** Input tokens consumed */
740
+ input: number;
741
+ /** Output tokens generated */
742
+ output: number;
743
+ /** Reasoning tokens (if extended thinking enabled) */
744
+ reasoning?: number;
745
+ }
746
+ /**
747
+ * Session status type representing lifecycle states.
748
+ * - busy: Session is currently executing a request
749
+ * - idle: Session is ready to accept new messages
750
+ * - retry: Session is waiting to retry after a transient error
751
+ * - waiting_permission: Session is waiting for user permission (e.g., tool confirmation)
752
+ */
753
+ export type SessionStatusType = {
754
+ attempt: number;
755
+ message: string;
756
+ nextRetryAt: number;
757
+ type: 'retry';
758
+ } | {
759
+ toolName: string;
760
+ type: 'waiting_permission';
761
+ } | {
762
+ type: 'busy';
763
+ } | {
764
+ type: 'idle';
765
+ };
413
766
  /**
414
767
  * Prevent unused variable warnings for compile-time checks.
415
768
  */
@@ -17,15 +17,26 @@ export const AGENT_EVENT_NAMES = [
17
17
  */
18
18
  export const SESSION_EVENT_NAMES = [
19
19
  'llmservice:chunk',
20
+ 'llmservice:contextCompressed',
21
+ 'llmservice:contextOverflow',
22
+ 'llmservice:contextPruned',
23
+ 'llmservice:doomLoopDetected',
20
24
  'llmservice:error',
21
25
  'llmservice:outputTruncated',
22
26
  'llmservice:response',
23
27
  'llmservice:thinking',
24
28
  'llmservice:thought',
25
29
  'llmservice:toolCall',
30
+ 'llmservice:toolMetadata',
26
31
  'llmservice:toolResult',
27
32
  'llmservice:unsupportedInput',
28
33
  'llmservice:warning',
34
+ 'message:dequeued',
35
+ 'message:queued',
36
+ 'run:complete',
37
+ 'session:statusChanged',
38
+ 'step:finished',
39
+ 'step:started',
29
40
  ];
30
41
  /**
31
42
  * All event names (union of agent and session events).
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Error Normalizer
3
+ *
4
+ * Converts various error types into a unified, normalized format.
5
+ * Following the OpenCode pattern of MessageV2.fromError() for consistent
6
+ * error handling across providers.
7
+ *
8
+ * Key features:
9
+ * - Discriminated union for error types
10
+ * - Provider-agnostic error representation
11
+ * - Retryable error detection
12
+ * - Consistent error structure for UI consumption
13
+ */
14
+ /**
15
+ * Normalized error types following OpenCode pattern.
16
+ * Discriminated by the `type` field for easy pattern matching.
17
+ */
18
+ export type NormalizedError = NormalizedAbortedError | NormalizedApiError | NormalizedAuthError | NormalizedConfigError | NormalizedOutputLengthError | NormalizedRateLimitError | NormalizedToolError | NormalizedUnknownError;
19
+ /**
20
+ * Authentication/authorization error.
21
+ */
22
+ export interface NormalizedAuthError {
23
+ /** Error message */
24
+ message: string;
25
+ /** Provider that rejected auth */
26
+ providerId: string;
27
+ type: 'auth';
28
+ }
29
+ /**
30
+ * API call error (network, server errors, etc.).
31
+ */
32
+ export interface NormalizedApiError {
33
+ /** Whether this error can be retried */
34
+ isRetryable: boolean;
35
+ /** Error message */
36
+ message: string;
37
+ /** Model that was being used */
38
+ model?: string;
39
+ /** Provider that returned the error */
40
+ providerId?: string;
41
+ /** HTTP status code if available */
42
+ statusCode?: number;
43
+ type: 'api';
44
+ }
45
+ /**
46
+ * Request was aborted/cancelled.
47
+ */
48
+ export interface NormalizedAbortedError {
49
+ /** Error message */
50
+ message: string;
51
+ type: 'aborted';
52
+ }
53
+ /**
54
+ * Output length exceeded (max tokens).
55
+ */
56
+ export interface NormalizedOutputLengthError {
57
+ /** Maximum tokens that were allowed */
58
+ maxTokens?: number;
59
+ /** Error message */
60
+ message: string;
61
+ type: 'output_length';
62
+ }
63
+ /**
64
+ * Rate limit exceeded.
65
+ */
66
+ export interface NormalizedRateLimitError {
67
+ /** Error message */
68
+ message: string;
69
+ /** Provider that rate limited */
70
+ providerId: string;
71
+ /** When to retry (seconds) */
72
+ retryAfter?: number;
73
+ type: 'rate_limit';
74
+ }
75
+ /**
76
+ * Tool execution error.
77
+ */
78
+ export interface NormalizedToolError {
79
+ /** Error message */
80
+ message: string;
81
+ /** Name of the tool that failed */
82
+ toolName: string;
83
+ type: 'tool';
84
+ }
85
+ /**
86
+ * Configuration error.
87
+ */
88
+ export interface NormalizedConfigError {
89
+ /** Configuration key that's problematic */
90
+ configKey: string;
91
+ /** Error message */
92
+ message: string;
93
+ /** Provider if applicable */
94
+ providerId?: string;
95
+ type: 'config';
96
+ }
97
+ /**
98
+ * Unknown/unclassified error.
99
+ */
100
+ export interface NormalizedUnknownError {
101
+ /** Error message */
102
+ message: string;
103
+ /** Original error if available */
104
+ originalError?: Error;
105
+ type: 'unknown';
106
+ }
107
+ /**
108
+ * Context for error normalization.
109
+ */
110
+ export interface ErrorContext {
111
+ /** Model being used */
112
+ model?: string;
113
+ /** Provider being used */
114
+ providerId?: string;
115
+ /** Session ID if applicable */
116
+ sessionId?: string;
117
+ }
118
+ /**
119
+ * Normalize any error into a consistent format.
120
+ *
121
+ * This function handles all known error types and converts them
122
+ * to a unified NormalizedError format for consistent handling.
123
+ *
124
+ * @param error - The error to normalize
125
+ * @param context - Optional context about the operation
126
+ * @returns Normalized error with consistent structure
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * try {
131
+ * await llm.generate(prompt)
132
+ * } catch (error) {
133
+ * const normalized = normalizeError(error, { providerId: 'claude' })
134
+ *
135
+ * switch (normalized.type) {
136
+ * case 'rate_limit':
137
+ * await sleep(normalized.retryAfter * 1000)
138
+ * break
139
+ * case 'auth':
140
+ * showLoginPrompt()
141
+ * break
142
+ * default:
143
+ * logError(normalized.message)
144
+ * }
145
+ * }
146
+ * ```
147
+ */
148
+ export declare function normalizeError(error: unknown, context?: ErrorContext): NormalizedError;
149
+ /**
150
+ * Check if a normalized error is retryable.
151
+ */
152
+ export declare function isNormalizedErrorRetryable(error: NormalizedError): boolean;
153
+ /**
154
+ * Get a user-friendly message for a normalized error.
155
+ */
156
+ export declare function getErrorDisplayMessage(error: NormalizedError): string;