byterover-cli 0.4.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/README.md +1 -9
  2. package/dist/commands/curate.d.ts +1 -3
  3. package/dist/commands/curate.js +14 -51
  4. package/dist/commands/main.d.ts +8 -0
  5. package/dist/commands/main.js +29 -8
  6. package/dist/commands/query.d.ts +1 -3
  7. package/dist/commands/query.js +8 -35
  8. package/dist/config/context-tree-domains.d.ts +5 -0
  9. package/dist/config/context-tree-domains.js +6 -1
  10. package/dist/config/environment.js +9 -9
  11. package/dist/constants.d.ts +14 -0
  12. package/dist/constants.js +18 -0
  13. package/dist/core/domain/cipher/agent/agent-info.d.ts +199 -0
  14. package/dist/core/domain/cipher/agent/agent-info.js +143 -0
  15. package/dist/core/domain/cipher/agent/agent-registry.d.ts +96 -0
  16. package/dist/core/domain/cipher/agent/agent-registry.js +254 -0
  17. package/dist/core/domain/cipher/agent/index.d.ts +4 -1
  18. package/dist/core/domain/cipher/agent/index.js +7 -1
  19. package/dist/core/domain/cipher/agent-events/types.d.ts +355 -2
  20. package/dist/core/domain/cipher/agent-events/types.js +11 -0
  21. package/dist/core/domain/cipher/errors/error-normalizer.d.ts +156 -0
  22. package/dist/core/domain/cipher/errors/error-normalizer.js +379 -0
  23. package/dist/core/domain/cipher/errors/file-system-error.d.ts +2 -1
  24. package/dist/core/domain/cipher/errors/file-system-error.js +3 -2
  25. package/dist/core/domain/cipher/errors/system-prompt-error-codes.d.ts +79 -0
  26. package/dist/core/domain/cipher/errors/system-prompt-error-codes.js +80 -0
  27. package/dist/core/domain/cipher/errors/system-prompt-error.d.ts +114 -0
  28. package/dist/core/domain/cipher/errors/system-prompt-error.js +144 -0
  29. package/dist/core/domain/cipher/file-system/types.d.ts +57 -0
  30. package/dist/core/domain/cipher/llm/error-codes.d.ts +51 -0
  31. package/dist/core/domain/cipher/llm/error-codes.js +51 -0
  32. package/dist/core/domain/cipher/llm/index.d.ts +9 -0
  33. package/dist/core/domain/cipher/llm/index.js +13 -0
  34. package/dist/core/domain/cipher/llm/registry.d.ts +113 -0
  35. package/dist/core/domain/cipher/llm/registry.js +244 -0
  36. package/dist/core/domain/cipher/llm/schemas.d.ts +155 -0
  37. package/dist/core/domain/cipher/llm/schemas.js +151 -0
  38. package/dist/core/domain/cipher/llm/types.d.ts +121 -0
  39. package/dist/core/domain/cipher/llm/types.js +60 -0
  40. package/dist/core/domain/cipher/storage/message-storage-types.d.ts +114 -5
  41. package/dist/core/domain/cipher/streaming/types.d.ts +119 -0
  42. package/dist/core/domain/cipher/streaming/types.js +16 -0
  43. package/dist/core/domain/cipher/system-prompt/types.d.ts +44 -0
  44. package/dist/core/domain/cipher/todos/types.d.ts +34 -0
  45. package/dist/core/domain/cipher/tools/constants.d.ts +5 -2
  46. package/dist/core/domain/cipher/tools/constants.js +5 -2
  47. package/dist/core/domain/cipher/tools/types.d.ts +31 -0
  48. package/dist/core/domain/errors/connection-error.d.ts +33 -0
  49. package/dist/core/domain/errors/connection-error.js +54 -0
  50. package/dist/core/domain/errors/core-process-error.d.ts +27 -0
  51. package/dist/core/domain/errors/core-process-error.js +43 -0
  52. package/dist/core/domain/errors/task-error.d.ts +64 -0
  53. package/dist/core/domain/errors/task-error.js +116 -0
  54. package/dist/core/domain/errors/transport-error.d.ts +72 -0
  55. package/dist/core/domain/errors/transport-error.js +114 -0
  56. package/dist/core/domain/instance/index.d.ts +1 -0
  57. package/dist/core/domain/instance/index.js +1 -0
  58. package/dist/core/domain/instance/types.d.ts +57 -0
  59. package/dist/core/domain/instance/types.js +72 -0
  60. package/dist/core/domain/knowledge/directory-manager.d.ts +16 -0
  61. package/dist/core/domain/knowledge/directory-manager.js +31 -0
  62. package/dist/core/domain/transport/index.d.ts +2 -0
  63. package/dist/core/domain/transport/index.js +2 -0
  64. package/dist/core/domain/transport/schemas.d.ts +1149 -0
  65. package/dist/core/domain/transport/schemas.js +554 -0
  66. package/dist/core/domain/transport/types.d.ts +67 -0
  67. package/dist/core/domain/transport/types.js +7 -0
  68. package/dist/core/interfaces/cipher/cipher-services.d.ts +15 -3
  69. package/dist/core/interfaces/cipher/i-chat-session.d.ts +47 -5
  70. package/dist/core/interfaces/cipher/i-cipher-agent.d.ts +39 -4
  71. package/dist/core/interfaces/cipher/i-content-generator.d.ts +3 -5
  72. package/dist/core/interfaces/cipher/i-file-system.d.ts +12 -1
  73. package/dist/core/interfaces/cipher/i-llm-service.d.ts +4 -5
  74. package/dist/core/interfaces/cipher/i-todo-storage.d.ts +24 -0
  75. package/dist/core/interfaces/cipher/i-todo-storage.js +1 -0
  76. package/dist/core/interfaces/cipher/i-tool-plugin.d.ts +90 -0
  77. package/dist/core/interfaces/cipher/i-tool-plugin.js +1 -0
  78. package/dist/core/interfaces/cipher/i-tool-provider.d.ts +3 -2
  79. package/dist/core/interfaces/cipher/i-tool-scheduler.d.ts +4 -0
  80. package/dist/core/interfaces/cipher/index.d.ts +35 -0
  81. package/dist/core/interfaces/cipher/index.js +11 -0
  82. package/dist/core/interfaces/cipher/message-factory.d.ts +155 -0
  83. package/dist/core/interfaces/cipher/message-factory.js +252 -0
  84. package/dist/core/interfaces/cipher/message-type-guards.d.ts +139 -0
  85. package/dist/core/interfaces/cipher/message-type-guards.js +173 -0
  86. package/dist/core/interfaces/cipher/message-types.d.ts +279 -5
  87. package/dist/core/interfaces/cipher/message-types.js +6 -0
  88. package/dist/core/interfaces/cipher/sanitization-types.d.ts +147 -0
  89. package/dist/core/interfaces/cipher/sanitization-types.js +46 -0
  90. package/dist/core/interfaces/executor/i-curate-executor.d.ts +34 -0
  91. package/dist/core/interfaces/executor/i-curate-executor.js +1 -0
  92. package/dist/core/interfaces/executor/i-query-executor.d.ts +32 -0
  93. package/dist/core/interfaces/executor/i-query-executor.js +1 -0
  94. package/dist/core/interfaces/executor/index.d.ts +2 -0
  95. package/dist/core/interfaces/executor/index.js +2 -0
  96. package/dist/core/interfaces/instance/i-instance-discovery.d.ts +45 -0
  97. package/dist/core/interfaces/instance/i-instance-discovery.js +1 -0
  98. package/dist/core/interfaces/instance/i-instance-manager.d.ts +58 -0
  99. package/dist/core/interfaces/instance/i-instance-manager.js +1 -0
  100. package/dist/core/interfaces/instance/index.d.ts +2 -0
  101. package/dist/core/interfaces/instance/index.js +2 -0
  102. package/dist/core/interfaces/noop-implementations.d.ts +53 -0
  103. package/dist/core/interfaces/noop-implementations.js +62 -0
  104. package/dist/core/interfaces/transport/i-transport-client.d.ts +97 -0
  105. package/dist/core/interfaces/transport/i-transport-client.js +1 -0
  106. package/dist/core/interfaces/transport/i-transport-server.d.ts +93 -0
  107. package/dist/core/interfaces/transport/i-transport-server.js +1 -0
  108. package/dist/core/interfaces/transport/index.d.ts +2 -0
  109. package/dist/core/interfaces/transport/index.js +2 -0
  110. package/dist/infra/cipher/agent/agent-error-codes.d.ts +16 -0
  111. package/dist/infra/cipher/agent/agent-error-codes.js +17 -0
  112. package/dist/infra/cipher/agent/agent-error.d.ts +54 -0
  113. package/dist/infra/cipher/agent/agent-error.js +79 -0
  114. package/dist/infra/cipher/agent/agent-schemas.d.ts +264 -0
  115. package/dist/infra/cipher/agent/agent-schemas.js +97 -0
  116. package/dist/infra/cipher/agent/agent-state-manager.d.ts +140 -0
  117. package/dist/infra/cipher/agent/agent-state-manager.js +275 -0
  118. package/dist/infra/cipher/agent/base-agent.d.ts +118 -0
  119. package/dist/infra/cipher/agent/base-agent.js +240 -0
  120. package/dist/infra/cipher/agent/cipher-agent.d.ts +165 -0
  121. package/dist/infra/cipher/agent/cipher-agent.js +546 -0
  122. package/dist/infra/cipher/agent/index.d.ts +22 -0
  123. package/dist/infra/cipher/agent/index.js +24 -0
  124. package/dist/infra/cipher/agent/service-initializer.d.ts +79 -0
  125. package/dist/infra/cipher/{agent-service-factory.js → agent/service-initializer.js} +117 -68
  126. package/dist/infra/cipher/agent/types.d.ts +35 -0
  127. package/dist/infra/cipher/agent/types.js +1 -0
  128. package/dist/infra/cipher/blob/blob-reference-resolver.d.ts +107 -0
  129. package/dist/infra/cipher/blob/blob-reference-resolver.js +228 -0
  130. package/dist/infra/cipher/blob/blob-reference-utils.d.ts +117 -0
  131. package/dist/infra/cipher/blob/blob-reference-utils.js +230 -0
  132. package/dist/infra/cipher/consumer/consumer-lock.js +1 -0
  133. package/dist/infra/cipher/consumer/consumer-service.js +1 -0
  134. package/dist/infra/cipher/consumer/execution-consumer.d.ts +6 -1
  135. package/dist/infra/cipher/consumer/execution-consumer.js +54 -16
  136. package/dist/infra/cipher/consumer/index.d.ts +1 -1
  137. package/dist/infra/cipher/consumer/index.js +2 -1
  138. package/dist/infra/cipher/consumer/queue-polling-service.js +1 -0
  139. package/dist/infra/cipher/file-system/binary-utils.d.ts +43 -0
  140. package/dist/infra/cipher/file-system/binary-utils.js +164 -0
  141. package/dist/infra/cipher/file-system/context-tree-file-system-factory.d.ts +9 -0
  142. package/dist/infra/cipher/file-system/context-tree-file-system-factory.js +24 -0
  143. package/dist/infra/cipher/file-system/file-system-service.d.ts +17 -1
  144. package/dist/infra/cipher/file-system/file-system-service.js +327 -36
  145. package/dist/infra/cipher/file-system/path-validator.d.ts +32 -0
  146. package/dist/infra/cipher/file-system/path-validator.js +111 -6
  147. package/dist/infra/cipher/interactive-loop.js +41 -33
  148. package/dist/infra/cipher/llm/capability-cache.d.ts +87 -0
  149. package/dist/infra/cipher/llm/capability-cache.js +125 -0
  150. package/dist/infra/cipher/llm/context/compaction/compaction-service.d.ts +32 -0
  151. package/dist/infra/cipher/llm/context/compaction/compaction-service.js +44 -3
  152. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.d.ts +112 -0
  153. package/dist/infra/cipher/llm/context/compression/enhanced-compaction.js +175 -0
  154. package/dist/infra/cipher/llm/context/compression/filter-compacted.d.ts +83 -0
  155. package/dist/infra/cipher/llm/context/compression/filter-compacted.js +150 -0
  156. package/dist/infra/cipher/llm/context/compression/index.d.ts +5 -0
  157. package/dist/infra/cipher/llm/context/compression/index.js +6 -0
  158. package/dist/infra/cipher/llm/context/compression/reactive-overflow.d.ts +107 -0
  159. package/dist/infra/cipher/llm/context/compression/reactive-overflow.js +272 -0
  160. package/dist/infra/cipher/llm/context/context-manager.d.ts +47 -1
  161. package/dist/infra/cipher/llm/context/context-manager.js +129 -0
  162. package/dist/infra/cipher/llm/context/utils.js +17 -4
  163. package/dist/infra/cipher/llm/generators/byterover-content-generator.js +4 -2
  164. package/dist/infra/cipher/llm/internal-llm-service.d.ts +50 -17
  165. package/dist/infra/cipher/llm/internal-llm-service.js +273 -50
  166. package/dist/infra/cipher/llm/openrouter-llm-service.d.ts +6 -8
  167. package/dist/infra/cipher/llm/openrouter-llm-service.js +14 -16
  168. package/dist/infra/cipher/llm/retry/retry-policy.d.ts +1 -0
  169. package/dist/infra/cipher/llm/retry/retry-policy.js +11 -0
  170. package/dist/infra/cipher/llm/retry/retry-with-backoff.js +3 -2
  171. package/dist/infra/cipher/llm/sanitization/base64-utils.d.ts +102 -0
  172. package/dist/infra/cipher/llm/sanitization/base64-utils.js +182 -0
  173. package/dist/infra/cipher/llm/sanitization/index.d.ts +12 -0
  174. package/dist/infra/cipher/llm/sanitization/index.js +13 -0
  175. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.d.ts +74 -0
  176. package/dist/infra/cipher/llm/sanitization/tool-sanitizer.js +398 -0
  177. package/dist/infra/cipher/llm/stream-processor.d.ts +158 -0
  178. package/dist/infra/cipher/llm/stream-processor.js +276 -0
  179. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.d.ts +13 -20
  180. package/dist/infra/cipher/llm/tokenizers/claude-tokenizer.js +17 -24
  181. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.d.ts +12 -11
  182. package/dist/infra/cipher/llm/tokenizers/gemini-tokenizer.js +16 -15
  183. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.d.ts +15 -7
  184. package/dist/infra/cipher/llm/tokenizers/openrouter-tokenizer.js +22 -10
  185. package/dist/infra/cipher/llm/tool-output-processor.d.ts +51 -0
  186. package/dist/infra/cipher/llm/tool-output-processor.js +139 -0
  187. package/dist/infra/cipher/process/command-validator.d.ts +23 -0
  188. package/dist/infra/cipher/process/command-validator.js +75 -0
  189. package/dist/infra/cipher/process/path-utils.d.ts +66 -0
  190. package/dist/infra/cipher/process/path-utils.js +94 -0
  191. package/dist/infra/cipher/process/process-service.d.ts +32 -0
  192. package/dist/infra/cipher/process/process-service.js +98 -17
  193. package/dist/infra/cipher/session/chat-session.d.ts +56 -7
  194. package/dist/infra/cipher/session/chat-session.js +163 -13
  195. package/dist/infra/cipher/session/index.d.ts +1 -0
  196. package/dist/infra/cipher/session/index.js +2 -0
  197. package/dist/infra/cipher/session/message-queue.d.ts +65 -0
  198. package/dist/infra/cipher/session/message-queue.js +90 -0
  199. package/dist/infra/cipher/session/session-manager.d.ts +106 -5
  200. package/dist/infra/cipher/session/session-manager.js +254 -7
  201. package/dist/infra/cipher/session/session-status.d.ts +137 -0
  202. package/dist/infra/cipher/session/session-status.js +184 -0
  203. package/dist/infra/cipher/session/title-generator.d.ts +8 -0
  204. package/dist/infra/cipher/session/title-generator.js +31 -0
  205. package/dist/infra/cipher/storage/message-storage-service.d.ts +65 -2
  206. package/dist/infra/cipher/storage/message-storage-service.js +300 -54
  207. package/dist/infra/cipher/storage/tool-part-factory.d.ts +116 -0
  208. package/dist/infra/cipher/storage/tool-part-factory.js +197 -0
  209. package/dist/infra/cipher/system-prompt/contributor-schemas.d.ts +516 -0
  210. package/dist/infra/cipher/system-prompt/contributor-schemas.js +85 -0
  211. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.d.ts +59 -0
  212. package/dist/infra/cipher/system-prompt/contributors/agent-prompt-contributor.js +131 -0
  213. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.d.ts +54 -0
  214. package/dist/infra/cipher/system-prompt/contributors/companion-contributor.js +107 -0
  215. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.d.ts +68 -0
  216. package/dist/infra/cipher/system-prompt/contributors/context-tree-structure-contributor.js +179 -0
  217. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.d.ts +25 -0
  218. package/dist/infra/cipher/system-prompt/contributors/datetime-contributor.js +29 -0
  219. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.d.ts +25 -0
  220. package/dist/infra/cipher/system-prompt/contributors/environment-contributor.js +54 -0
  221. package/dist/infra/cipher/system-prompt/contributors/file-contributor.d.ts +60 -0
  222. package/dist/infra/cipher/system-prompt/contributors/file-contributor.js +128 -0
  223. package/dist/infra/cipher/system-prompt/contributors/index.d.ts +13 -0
  224. package/dist/infra/cipher/system-prompt/contributors/index.js +8 -0
  225. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.d.ts +40 -0
  226. package/dist/infra/cipher/system-prompt/contributors/memory-contributor.js +56 -0
  227. package/dist/infra/cipher/system-prompt/contributors/static-contributor.d.ts +26 -0
  228. package/dist/infra/cipher/system-prompt/contributors/static-contributor.js +31 -0
  229. package/dist/infra/cipher/system-prompt/environment-context-builder.d.ts +112 -0
  230. package/dist/infra/cipher/system-prompt/environment-context-builder.js +256 -0
  231. package/dist/infra/cipher/system-prompt/prompt-cache.d.ts +102 -0
  232. package/dist/infra/cipher/system-prompt/prompt-cache.js +156 -0
  233. package/dist/infra/cipher/system-prompt/schemas.d.ts +151 -0
  234. package/dist/infra/cipher/system-prompt/schemas.js +94 -0
  235. package/dist/infra/cipher/system-prompt/system-prompt-manager.d.ts +136 -0
  236. package/dist/infra/cipher/system-prompt/system-prompt-manager.js +307 -0
  237. package/dist/infra/cipher/todos/todo-storage-service.d.ts +26 -0
  238. package/dist/infra/cipher/todos/todo-storage-service.js +28 -0
  239. package/dist/infra/cipher/tools/core-tool-scheduler.js +5 -1
  240. package/dist/infra/cipher/tools/default-policy-rules.js +1 -1
  241. package/dist/infra/cipher/tools/implementations/bash-exec-tool.d.ts +1 -0
  242. package/dist/infra/cipher/tools/implementations/bash-exec-tool.js +27 -10
  243. package/dist/infra/cipher/tools/implementations/bash-output-tool.js +1 -5
  244. package/dist/infra/cipher/tools/implementations/batch-tool.d.ts +12 -0
  245. package/dist/infra/cipher/tools/implementations/batch-tool.js +142 -0
  246. package/dist/infra/cipher/tools/implementations/curate-tool.js +195 -68
  247. package/dist/infra/cipher/tools/implementations/list-directory-tool.d.ts +12 -0
  248. package/dist/infra/cipher/tools/implementations/list-directory-tool.js +52 -0
  249. package/dist/infra/cipher/tools/implementations/read-file-tool.d.ts +8 -1
  250. package/dist/infra/cipher/tools/implementations/read-file-tool.js +17 -7
  251. package/dist/infra/cipher/tools/implementations/read-todos-tool.d.ts +11 -0
  252. package/dist/infra/cipher/tools/implementations/read-todos-tool.js +39 -0
  253. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.d.ts → spec-analyze-tool.d.ts} +1 -1
  254. package/dist/infra/cipher/tools/implementations/{detect-domains-tool.js → spec-analyze-tool.js} +9 -7
  255. package/dist/infra/cipher/tools/implementations/task-tool.d.ts +34 -0
  256. package/dist/infra/cipher/tools/implementations/task-tool.js +207 -0
  257. package/dist/infra/cipher/tools/implementations/write-todos-tool.d.ts +4 -1
  258. package/dist/infra/cipher/tools/implementations/write-todos-tool.js +19 -63
  259. package/dist/infra/cipher/tools/index.d.ts +1 -1
  260. package/dist/infra/cipher/tools/index.js +1 -1
  261. package/dist/infra/cipher/tools/plugins/index.d.ts +3 -0
  262. package/dist/infra/cipher/tools/plugins/index.js +2 -0
  263. package/dist/infra/cipher/tools/plugins/logging-plugin.d.ts +28 -0
  264. package/dist/infra/cipher/tools/plugins/logging-plugin.js +66 -0
  265. package/dist/infra/cipher/tools/plugins/plugin-manager.d.ts +81 -0
  266. package/dist/infra/cipher/tools/plugins/plugin-manager.js +122 -0
  267. package/dist/infra/cipher/tools/streaming/index.d.ts +1 -0
  268. package/dist/infra/cipher/tools/streaming/index.js +1 -0
  269. package/dist/infra/cipher/tools/streaming/metadata-handler.d.ts +31 -0
  270. package/dist/infra/cipher/tools/streaming/metadata-handler.js +39 -0
  271. package/dist/infra/cipher/tools/tool-description-loader.d.ts +57 -0
  272. package/dist/infra/cipher/tools/tool-description-loader.js +108 -0
  273. package/dist/infra/cipher/tools/tool-manager.d.ts +38 -4
  274. package/dist/infra/cipher/tools/tool-manager.js +107 -11
  275. package/dist/infra/cipher/tools/tool-provider-getter.d.ts +6 -0
  276. package/dist/infra/cipher/tools/tool-provider-getter.js +1 -0
  277. package/dist/infra/cipher/tools/tool-provider.d.ts +32 -7
  278. package/dist/infra/cipher/tools/tool-provider.js +81 -25
  279. package/dist/infra/cipher/tools/tool-registry.d.ts +23 -0
  280. package/dist/infra/cipher/tools/tool-registry.js +58 -16
  281. package/dist/infra/context-tree/file-context-tree-snapshot-service.js +10 -4
  282. package/dist/infra/context-tree/file-context-tree-writer-service.d.ts +4 -3
  283. package/dist/infra/context-tree/file-context-tree-writer-service.js +6 -4
  284. package/dist/infra/context-tree/path-utils.d.ts +7 -0
  285. package/dist/infra/context-tree/path-utils.js +7 -0
  286. package/dist/infra/core/executors/curate-executor.d.ts +35 -0
  287. package/dist/infra/core/executors/curate-executor.js +123 -0
  288. package/dist/infra/core/executors/index.d.ts +2 -0
  289. package/dist/infra/core/executors/index.js +2 -0
  290. package/dist/infra/core/executors/query-executor.d.ts +23 -0
  291. package/dist/infra/core/executors/query-executor.js +51 -0
  292. package/dist/infra/core/task-processor.d.ts +81 -0
  293. package/dist/infra/core/task-processor.js +115 -0
  294. package/dist/infra/instance/file-instance-discovery.d.ts +31 -0
  295. package/dist/infra/instance/file-instance-discovery.js +84 -0
  296. package/dist/infra/instance/file-instance-manager.d.ts +46 -0
  297. package/dist/infra/instance/file-instance-manager.js +123 -0
  298. package/dist/infra/instance/index.d.ts +3 -0
  299. package/dist/infra/instance/index.js +3 -0
  300. package/dist/infra/instance/process-utils.d.ts +14 -0
  301. package/dist/infra/instance/process-utils.js +39 -0
  302. package/dist/infra/process/agent-worker.d.ts +20 -0
  303. package/dist/infra/process/agent-worker.js +602 -0
  304. package/dist/infra/process/index.d.ts +12 -0
  305. package/dist/infra/process/index.js +11 -0
  306. package/dist/infra/process/ipc-types.d.ts +55 -0
  307. package/dist/infra/process/ipc-types.js +12 -0
  308. package/dist/infra/process/process-manager.d.ts +154 -0
  309. package/dist/infra/process/process-manager.js +471 -0
  310. package/dist/infra/process/task-queue-manager.d.ts +123 -0
  311. package/dist/infra/process/task-queue-manager.js +226 -0
  312. package/dist/infra/process/transport-handlers.d.ts +124 -0
  313. package/dist/infra/process/transport-handlers.js +348 -0
  314. package/dist/infra/process/transport-worker.d.ts +20 -0
  315. package/dist/infra/process/transport-worker.js +168 -0
  316. package/dist/infra/repl/commands/curate-command.js +0 -5
  317. package/dist/infra/repl/commands/query-command.js +0 -3
  318. package/dist/infra/repl/repl-startup.d.ts +4 -0
  319. package/dist/infra/repl/repl-startup.js +8 -1
  320. package/dist/infra/repl/transport-client-helper.d.ts +9 -0
  321. package/dist/infra/repl/transport-client-helper.js +96 -0
  322. package/dist/infra/transport/index.d.ts +4 -0
  323. package/dist/infra/transport/index.js +4 -0
  324. package/dist/infra/transport/port-utils.d.ts +42 -0
  325. package/dist/infra/transport/port-utils.js +84 -0
  326. package/dist/infra/transport/socket-io-transport-client.d.ts +45 -0
  327. package/dist/infra/transport/socket-io-transport-client.js +270 -0
  328. package/dist/infra/transport/socket-io-transport-server.d.ts +35 -0
  329. package/dist/infra/transport/socket-io-transport-server.js +207 -0
  330. package/dist/infra/transport/transport-client-factory.d.ts +76 -0
  331. package/dist/infra/transport/transport-client-factory.js +168 -0
  332. package/dist/infra/transport/transport-factory.d.ts +33 -0
  333. package/dist/infra/transport/transport-factory.js +59 -0
  334. package/dist/infra/usecase/curate-use-case.d.ts +8 -55
  335. package/dist/infra/usecase/curate-use-case.js +71 -262
  336. package/dist/infra/usecase/init-use-case.js +3 -2
  337. package/dist/infra/usecase/query-use-case.d.ts +18 -45
  338. package/dist/infra/usecase/query-use-case.js +250 -326
  339. package/dist/infra/usecase/status-use-case.js +1 -1
  340. package/dist/resources/prompts/{curate-context-tree-curation.yml → curate.yml} +25 -22
  341. package/dist/resources/prompts/explore.yml +78 -0
  342. package/dist/resources/prompts/plan.yml +114 -0
  343. package/dist/resources/prompts/reflection.yml +1 -1
  344. package/dist/resources/prompts/system-prompt.yml +15 -8
  345. package/dist/resources/prompts/tool-outputs.yml +0 -5
  346. package/dist/resources/tools/bash_exec.txt +98 -0
  347. package/dist/resources/tools/bash_output.txt +40 -0
  348. package/dist/resources/tools/batch.txt +28 -0
  349. package/dist/resources/tools/create_knowledge_topic.txt +23 -0
  350. package/dist/resources/tools/curate.txt +22 -0
  351. package/dist/resources/tools/delete_memory.txt +1 -0
  352. package/dist/resources/tools/detect_domains.txt +11 -0
  353. package/dist/resources/tools/edit_file.txt +1 -0
  354. package/dist/resources/tools/edit_memory.txt +1 -0
  355. package/dist/resources/tools/glob_files.txt +20 -0
  356. package/dist/resources/tools/grep_content.txt +18 -0
  357. package/dist/resources/tools/kill_process.txt +16 -0
  358. package/dist/resources/tools/list_directory.txt +16 -0
  359. package/dist/resources/tools/list_memories.txt +1 -0
  360. package/dist/resources/tools/read_file.txt +31 -0
  361. package/dist/resources/tools/read_memory.txt +1 -0
  362. package/dist/resources/tools/read_todos.txt +17 -0
  363. package/dist/resources/tools/search_history.txt +1 -0
  364. package/dist/resources/tools/task.txt +23 -0
  365. package/dist/resources/tools/write_file.txt +1 -0
  366. package/dist/resources/tools/write_memory.txt +1 -0
  367. package/dist/resources/tools/write_todos.txt +29 -0
  368. package/dist/tui/app.js +9 -13
  369. package/dist/tui/components/command-details.d.ts +14 -0
  370. package/dist/tui/components/command-details.js +35 -0
  371. package/dist/tui/components/execution/execution-changes.d.ts +5 -0
  372. package/dist/tui/components/execution/execution-changes.js +19 -4
  373. package/dist/tui/components/execution/execution-content.d.ts +4 -2
  374. package/dist/tui/components/execution/execution-content.js +26 -13
  375. package/dist/tui/components/execution/execution-input.js +3 -3
  376. package/dist/tui/components/execution/execution-progress.d.ts +2 -2
  377. package/dist/tui/components/execution/execution-progress.js +8 -6
  378. package/dist/tui/components/execution/log-item.d.ts +3 -4
  379. package/dist/tui/components/execution/log-item.js +2 -5
  380. package/dist/tui/components/footer.js +9 -4
  381. package/dist/tui/components/header.d.ts +3 -3
  382. package/dist/tui/components/header.js +5 -3
  383. package/dist/tui/components/index.d.ts +1 -0
  384. package/dist/tui/components/index.js +1 -0
  385. package/dist/tui/components/onboarding/copyable-prompt.d.ts +5 -3
  386. package/dist/tui/components/onboarding/copyable-prompt.js +7 -8
  387. package/dist/tui/components/onboarding/onboarding-flow.js +35 -25
  388. package/dist/tui/components/scrollable-list.js +12 -10
  389. package/dist/tui/components/suggestions.js +39 -41
  390. package/dist/tui/components/tab-bar.d.ts +2 -1
  391. package/dist/tui/components/tab-bar.js +3 -4
  392. package/dist/tui/constants.d.ts +0 -5
  393. package/dist/tui/constants.js +0 -5
  394. package/dist/tui/contexts/auth-context.js +9 -2
  395. package/dist/tui/contexts/{use-commands.js → commands-context.js} +3 -3
  396. package/dist/tui/contexts/index.d.ts +6 -1
  397. package/dist/tui/contexts/index.js +6 -1
  398. package/dist/tui/contexts/onboarding-context.d.ts +1 -1
  399. package/dist/tui/contexts/onboarding-context.js +9 -9
  400. package/dist/tui/contexts/tasks-context.d.ts +84 -0
  401. package/dist/tui/contexts/tasks-context.js +218 -0
  402. package/dist/tui/contexts/transport-context.d.ts +29 -0
  403. package/dist/tui/contexts/transport-context.js +82 -0
  404. package/dist/tui/hooks/index.d.ts +10 -6
  405. package/dist/tui/hooks/index.js +7 -6
  406. package/dist/tui/hooks/use-activity-logs.d.ts +3 -11
  407. package/dist/tui/hooks/use-activity-logs.js +87 -34
  408. package/dist/tui/hooks/use-auth-polling.d.ts +24 -0
  409. package/dist/tui/hooks/use-auth-polling.js +104 -0
  410. package/dist/tui/hooks/use-slash-command-processor.js +0 -1
  411. package/dist/tui/hooks/use-slash-completion.js +1 -1
  412. package/dist/tui/hooks/use-tab-navigation.d.ts +2 -1
  413. package/dist/tui/hooks/use-tab-navigation.js +16 -7
  414. package/dist/tui/hooks/use-terminal-breakpoint.d.ts +21 -0
  415. package/dist/tui/hooks/use-terminal-breakpoint.js +38 -0
  416. package/dist/tui/hooks/use-ui-heights.d.ts +120 -0
  417. package/dist/tui/hooks/use-ui-heights.js +88 -0
  418. package/dist/tui/providers/app-providers.js +2 -6
  419. package/dist/tui/types/commands.d.ts +0 -26
  420. package/dist/tui/types/index.d.ts +1 -1
  421. package/dist/tui/types/ui.d.ts +9 -4
  422. package/dist/tui/utils/line.d.ts +11 -0
  423. package/dist/tui/utils/line.js +16 -0
  424. package/dist/tui/utils/log.d.ts +27 -0
  425. package/dist/tui/utils/log.js +114 -0
  426. package/dist/tui/views/command-view.d.ts +7 -0
  427. package/dist/tui/views/command-view.js +103 -80
  428. package/dist/tui/views/login-view.js +7 -4
  429. package/dist/tui/views/logs-view.d.ts +13 -0
  430. package/dist/tui/views/logs-view.js +27 -52
  431. package/dist/utils/connection-error-handler.d.ts +16 -0
  432. package/dist/utils/connection-error-handler.js +49 -0
  433. package/dist/utils/crash-log.d.ts +14 -0
  434. package/dist/utils/crash-log.js +19 -0
  435. package/dist/utils/file-helpers.d.ts +14 -0
  436. package/dist/utils/file-helpers.js +21 -0
  437. package/dist/utils/global-logs-path.d.ts +11 -0
  438. package/dist/utils/global-logs-path.js +37 -0
  439. package/dist/utils/process-logger.d.ts +53 -0
  440. package/dist/utils/process-logger.js +253 -0
  441. package/dist/utils/sandbox-detector.d.ts +31 -0
  442. package/dist/utils/sandbox-detector.js +122 -0
  443. package/oclif.manifest.json +10 -198
  444. package/package.json +5 -1
  445. package/dist/commands/cipher-agent/run.d.ts +0 -142
  446. package/dist/commands/cipher-agent/run.js +0 -555
  447. package/dist/commands/cipher-agent/set-prompt.d.ts +0 -16
  448. package/dist/commands/cipher-agent/set-prompt.js +0 -58
  449. package/dist/commands/cipher-agent/show-prompt.d.ts +0 -13
  450. package/dist/commands/cipher-agent/show-prompt.js +0 -53
  451. package/dist/commands/foo.d.ts +0 -14
  452. package/dist/commands/foo.js +0 -66
  453. package/dist/infra/cipher/agent-service-factory.d.ts +0 -93
  454. package/dist/infra/cipher/cipher-agent-state-manager.d.ts +0 -63
  455. package/dist/infra/cipher/cipher-agent-state-manager.js +0 -108
  456. package/dist/infra/cipher/cipher-agent.d.ts +0 -182
  457. package/dist/infra/cipher/cipher-agent.js +0 -317
  458. package/dist/infra/cipher/system-prompt/simple-prompt-factory.d.ts +0 -106
  459. package/dist/infra/cipher/system-prompt/simple-prompt-factory.js +0 -297
  460. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.d.ts +0 -7
  461. package/dist/infra/cipher/tools/implementations/find-knowledge-topics-tool.js +0 -424
  462. package/dist/resources/prompts/modes/autonomous.yml +0 -9
  463. package/dist/resources/prompts/query-context-tree-retrieval.yml +0 -48
  464. package/dist/tui/contexts/consumer.d.ts +0 -31
  465. package/dist/tui/contexts/consumer.js +0 -56
  466. package/dist/tui/hooks/use-consumer.d.ts +0 -12
  467. package/dist/tui/hooks/use-consumer.js +0 -50
  468. package/dist/tui/hooks/use-queue-polling.d.ts +0 -31
  469. package/dist/tui/hooks/use-queue-polling.js +0 -90
  470. /package/dist/tui/contexts/{use-commands.d.ts → commands-context.d.ts} +0 -0
  471. /package/dist/tui/contexts/{use-mode.d.ts → mode-context.d.ts} +0 -0
  472. /package/dist/tui/contexts/{use-mode.js → mode-context.js} +0 -0
  473. /package/dist/tui/contexts/{use-theme.d.ts → theme-context.d.ts} +0 -0
  474. /package/dist/tui/contexts/{use-theme.js → theme-context.js} +0 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Auth Polling Hook
3
+ *
4
+ * Periodically checks auth state and refreshes token when needed.
5
+ */
6
+ import { useEffect, useRef } from 'react';
7
+ import { getAuthConfig } from '../../config/auth.config.js';
8
+ import { getCurrentConfig } from '../../config/environment.js';
9
+ import { AuthToken as AuthTokenClass } from '../../core/domain/entities/auth-token.js';
10
+ import { OAuthService } from '../../infra/auth/oauth-service.js';
11
+ import { OidcDiscoveryService } from '../../infra/auth/oidc-discovery-service.js';
12
+ import { HttpUserService } from '../../infra/user/http-user-service.js';
13
+ /** Auth state polling interval in milliseconds (15 seconds) */
14
+ const AUTH_POLL_INTERVAL_MS = 15 * 1000;
15
+ /**
16
+ * Hook that polls auth state and refreshes token when needed.
17
+ *
18
+ * - Polls every 30 seconds when authorized
19
+ * - Validates token by calling user API
20
+ * - Refreshes token if validation fails
21
+ * - Clears auth state if refresh fails
22
+ */
23
+ export function useAuthPolling({ authToken, onTokenChange, tokenStore }) {
24
+ // Track if validation/refresh is in progress to prevent concurrent operations
25
+ const isProcessingRef = useRef(false);
26
+ useEffect(() => {
27
+ // Only poll when authorized
28
+ if (!authToken) {
29
+ return;
30
+ }
31
+ const checkAndRefreshAuth = async () => {
32
+ // Skip if already processing
33
+ if (isProcessingRef.current) {
34
+ return;
35
+ }
36
+ isProcessingRef.current = true;
37
+ try {
38
+ // Validate token by calling user API
39
+ const isValid = await validateToken(authToken);
40
+ if (!isValid) {
41
+ // Token invalid - attempt refresh
42
+ await refreshToken(authToken, tokenStore, onTokenChange);
43
+ }
44
+ }
45
+ finally {
46
+ isProcessingRef.current = false;
47
+ }
48
+ };
49
+ // Run immediately on mount/token change
50
+ checkAndRefreshAuth();
51
+ // Set up polling interval
52
+ const pollInterval = setInterval(checkAndRefreshAuth, AUTH_POLL_INTERVAL_MS);
53
+ return () => {
54
+ clearInterval(pollInterval);
55
+ };
56
+ }, [authToken, onTokenChange, tokenStore]);
57
+ }
58
+ /**
59
+ * Validate token by calling user API
60
+ * @returns true if token is valid, false otherwise
61
+ */
62
+ async function validateToken(authToken) {
63
+ try {
64
+ const config = getCurrentConfig();
65
+ const userService = new HttpUserService({ apiBaseUrl: config.apiBaseUrl });
66
+ // Try to get current user - if this fails, token is invalid
67
+ await userService.getCurrentUser(authToken.accessToken, authToken.sessionKey);
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /**
75
+ * Refresh the token using refresh token
76
+ */
77
+ async function refreshToken(authToken, tokenStore, onTokenChange) {
78
+ try {
79
+ const discoveryService = new OidcDiscoveryService();
80
+ const authConfig = await getAuthConfig(discoveryService);
81
+ const authService = new OAuthService(authConfig);
82
+ // Refresh the token
83
+ const newTokenData = await authService.refreshToken(authToken.refreshToken);
84
+ // Create new AuthToken with refreshed data but preserve user info
85
+ const refreshedToken = new AuthTokenClass({
86
+ accessToken: newTokenData.accessToken,
87
+ expiresAt: newTokenData.expiresAt,
88
+ refreshToken: newTokenData.refreshToken,
89
+ sessionKey: newTokenData.sessionKey,
90
+ tokenType: newTokenData.tokenType,
91
+ userEmail: authToken.userEmail,
92
+ userId: authToken.userId,
93
+ });
94
+ // Persist the new token
95
+ await tokenStore.save(refreshedToken);
96
+ // Update state
97
+ onTokenChange(refreshedToken);
98
+ }
99
+ catch {
100
+ // Refresh failed - token is invalid, force logout
101
+ await tokenStore.clear();
102
+ onTokenChange();
103
+ }
104
+ }
@@ -106,7 +106,6 @@ export function useSlashCommandProcessor(context, commands) {
106
106
  name: commandNameForContext,
107
107
  raw: input,
108
108
  },
109
- slashCommands: commands,
110
109
  };
111
110
  setIsProcessing(true);
112
111
  try {
@@ -1,7 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
- import { useCommands } from '../contexts/use-commands.js';
4
+ import { useCommands } from '../contexts/commands-context.js';
5
5
  /**
6
6
  * Generate file suggestions based on @ prefix
7
7
  * Returns files from the current working directory matching the search pattern
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * Tab Navigation Hook
3
3
  */
4
- import type { TabId } from '../types.js';
4
+ import type { Tab, TabId } from '../types.js';
5
5
  interface UseTabNavigationResult {
6
6
  activeTab: TabId;
7
7
  setActiveTab: (tab: TabId) => void;
8
+ tabs: Tab[];
8
9
  }
9
10
  export declare function useTabNavigation(): UseTabNavigationResult;
10
11
  export {};
@@ -2,26 +2,35 @@
2
2
  * Tab Navigation Hook
3
3
  */
4
4
  import { useApp, useInput } from 'ink';
5
- import { useEffect, useState } from 'react';
5
+ import { useEffect, useMemo, useState } from 'react';
6
6
  import { stopQueuePollingService } from '../../infra/cipher/consumer/queue-polling-service.js';
7
7
  import { DEFAULT_TAB, TABS } from '../constants.js';
8
- import { useMode } from '../contexts/use-mode.js';
8
+ import { useMode } from '../contexts/mode-context.js';
9
9
  import { useOnboarding } from './use-onboarding.js';
10
10
  export function useTabNavigation() {
11
11
  const { exit } = useApp();
12
12
  const { shouldShowOnboarding } = useOnboarding();
13
13
  const { mode, setMode } = useMode();
14
14
  const [activeTab, setActiveTab] = useState(DEFAULT_TAB);
15
+ // Filter tabs based on onboarding state - hide console during onboarding
16
+ const tabs = useMemo(() => (shouldShowOnboarding ? TABS.filter((t) => t.id !== 'console') : TABS), [shouldShowOnboarding]);
15
17
  // Sync mode with active tab on mount and when activeTab changes
16
18
  useEffect(() => {
17
19
  setMode(activeTab === 'activity' ? 'activity' : 'console');
18
20
  }, [activeTab, setMode]);
21
+ // Reset to activity tab if current tab is not available
22
+ useEffect(() => {
23
+ const isCurrentTabAvailable = tabs.some((t) => t.id === activeTab);
24
+ if (!isCurrentTabAvailable) {
25
+ setActiveTab(DEFAULT_TAB);
26
+ }
27
+ }, [tabs, activeTab]);
19
28
  useInput((input, key) => {
20
- // Tab: cycle through tabs (blocked during onboarding)
29
+ // Tab: cycle through available tabs (blocked during onboarding)
21
30
  if (key.tab && !shouldShowOnboarding) {
22
- const currentIndex = TABS.findIndex((t) => t.id === activeTab);
23
- const nextIndex = currentIndex >= TABS.length - 1 ? 0 : currentIndex + 1;
24
- const nextTab = TABS[nextIndex].id;
31
+ const currentIndex = tabs.findIndex((t) => t.id === activeTab);
32
+ const nextIndex = currentIndex >= tabs.length - 1 ? 0 : currentIndex + 1;
33
+ const nextTab = tabs[nextIndex].id;
25
34
  setActiveTab(nextTab);
26
35
  // Mode will be synced by useEffect
27
36
  }
@@ -31,5 +40,5 @@ export function useTabNavigation() {
31
40
  exit();
32
41
  }
33
42
  }, { isActive: mode === 'activity' || mode === 'console' });
34
- return { activeTab, setActiveTab };
43
+ return { activeTab, setActiveTab, tabs };
35
44
  }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * useTerminalBreakpoint Hook
3
+ *
4
+ * Watches terminal row count and returns current breakpoint.
5
+ */
6
+ export type TerminalBreakpoint = 'compact' | 'normal';
7
+ export interface TerminalBreakpointReturn {
8
+ breakpoint: TerminalBreakpoint;
9
+ columns: number;
10
+ rows: number;
11
+ }
12
+ /**
13
+ * Hook for determining terminal breakpoint based on row count
14
+ *
15
+ * Breakpoints:
16
+ * - compact: 0 - 23 rows (small terminal, limited space)
17
+ * - normal: >= 24 rows (standard terminal, comfortable space)
18
+ *
19
+ * @returns Current breakpoint and terminal dimensions
20
+ */
21
+ export declare function useTerminalBreakpoint(): TerminalBreakpointReturn;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * useTerminalBreakpoint Hook
3
+ *
4
+ * Watches terminal row count and returns current breakpoint.
5
+ */
6
+ import { useStdout } from 'ink';
7
+ import { useEffect, useState } from 'react';
8
+ /**
9
+ * Hook for determining terminal breakpoint based on row count
10
+ *
11
+ * Breakpoints:
12
+ * - compact: 0 - 23 rows (small terminal, limited space)
13
+ * - normal: >= 24 rows (standard terminal, comfortable space)
14
+ *
15
+ * @returns Current breakpoint and terminal dimensions
16
+ */
17
+ export function useTerminalBreakpoint() {
18
+ const { stdout } = useStdout();
19
+ const [dimensions, setDimensions] = useState({
20
+ columns: stdout?.columns ?? 80,
21
+ rows: stdout?.rows ?? 24,
22
+ });
23
+ useEffect(() => {
24
+ const handleResize = () => {
25
+ setDimensions({
26
+ columns: process.stdout.columns,
27
+ rows: process.stdout.rows,
28
+ });
29
+ };
30
+ process.stdout.on('resize', handleResize);
31
+ return () => {
32
+ process.stdout.off('resize', handleResize);
33
+ };
34
+ }, []);
35
+ const { columns, rows } = dimensions;
36
+ const breakpoint = rows >= 22 ? 'normal' : 'compact';
37
+ return { breakpoint, columns, rows };
38
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Configuration object defining all UI element heights per breakpoint
3
+ *
4
+ * Single source of truth for UI layout across different terminal sizes.
5
+ * Each breakpoint defines a complete set of height values for all UI elements.
6
+ *
7
+ * Breakpoints:
8
+ * - compact (0-23 rows): Minimal heights for small terminals
9
+ * - normal (≥24 rows): Standard heights for comfortable viewing
10
+ *
11
+ * Note: Object keys are ordered top-to-bottom according to actual UI layout.
12
+ * perfectionist/sort-objects is disabled to preserve this logical ordering.
13
+ */
14
+ declare const BREAKPOINT_HEIGHTS: {
15
+ readonly compact: {
16
+ readonly header: 2;
17
+ readonly tab: 3;
18
+ readonly messageItem: {
19
+ readonly header: 1;
20
+ readonly input: 3;
21
+ readonly maxProgressItems: 2;
22
+ readonly contentBottomMargin: 0;
23
+ readonly maxChanges: {
24
+ readonly created: 2;
25
+ readonly updated: 2;
26
+ };
27
+ readonly bottomMargin: 1;
28
+ };
29
+ readonly commandInput: 3;
30
+ readonly footer: 1;
31
+ readonly appBottomPadding: 0;
32
+ };
33
+ readonly normal: {
34
+ readonly header: 2;
35
+ readonly tab: 3;
36
+ readonly messageItem: {
37
+ readonly header: 1;
38
+ readonly input: 3;
39
+ readonly maxProgressItems: 3;
40
+ readonly contentBottomMargin: 1;
41
+ readonly maxChanges: {
42
+ readonly created: 3;
43
+ readonly updated: 3;
44
+ };
45
+ readonly bottomMargin: 1;
46
+ };
47
+ readonly commandInput: 3;
48
+ readonly footer: 1;
49
+ readonly appBottomPadding: 0;
50
+ };
51
+ };
52
+ /**
53
+ * Message item heights interface
54
+ *
55
+ * Defines height constraints for individual message item components
56
+ * in the activity logs view. These values control how much vertical
57
+ * space each part of a message can consume.
58
+ *
59
+ */
60
+ export interface MessageItemHeights {
61
+ bottomMargin: number;
62
+ contentBottomMargin: number;
63
+ header: number;
64
+ input: number;
65
+ maxChanges: {
66
+ created: number;
67
+ updated: number;
68
+ };
69
+ maxContentLines: number;
70
+ maxProgressItems: number;
71
+ }
72
+ /**
73
+ * Breakpoint configuration type derived from BREAKPOINT_HEIGHTS
74
+ *
75
+ * Single source of truth - directly represents the configuration structure.
76
+ * This type automatically infers the shape from BREAKPOINT_HEIGHTS object,
77
+ * ensuring type safety when accessing height values.
78
+ *
79
+ * Structure:
80
+ * - header: Height of header section
81
+ * - tab: Height of tab bar
82
+ * - footer: Height of footer section
83
+ * - messageItem: Nested heights for message item components
84
+ * - appBottomPadding: Bottom padding for the entire app
85
+ */
86
+ export type BreakpointConfig = typeof BREAKPOINT_HEIGHTS[keyof typeof BREAKPOINT_HEIGHTS];
87
+ /**
88
+ * Complete UI heights return type
89
+ *
90
+ * Extends BreakpointConfig with the current breakpoint name.
91
+ * Use this to access all height values directly without nested structure.
92
+ *
93
+ * @example
94
+ * const {breakpoint, header, tab, footer, messageItem, appBottomPadding} = useUIHeights()
95
+ * const totalFixed = header + tab + footer
96
+ */
97
+ export type UIHeights = BreakpointConfig & {
98
+ breakpoint: 'compact' | 'normal';
99
+ };
100
+ /**
101
+ * Hook for providing breakpoint-specific UI heights
102
+ *
103
+ * Detects the current terminal breakpoint and returns the corresponding
104
+ * height configuration from BREAKPOINT_HEIGHTS. All height values are
105
+ * returned at the top level for easy destructuring.
106
+ *
107
+ * @returns {UIHeights} Object containing:
108
+ * - breakpoint: Current breakpoint ('compact' | 'normal')
109
+ * - header: Header section height
110
+ * - tab: Tab bar height
111
+ * - footer: Footer section height
112
+ * - messageItem: Message item component heights
113
+ * - appBottomPadding: App bottom padding
114
+ *
115
+ * @example
116
+ * const {breakpoint, header, tab, footer, messageItem} = useUIHeights()
117
+ * const availableHeight = terminalRows - header - tab - footer
118
+ */
119
+ export declare function useUIHeights(): UIHeights;
120
+ export {};
@@ -0,0 +1,88 @@
1
+ /* eslint-disable perfectionist/sort-objects */
2
+ /**
3
+ * useUIHeights Hook
4
+ *
5
+ * Provides breakpoint-specific height configuration for all UI elements.
6
+ * Returns the complete configuration object from BREAKPOINT_HEIGHTS
7
+ * based on current terminal size, including header, tab, footer, messageItem,
8
+ * commandItem, and appBottomPadding values.
9
+ */
10
+ import { useTerminalBreakpoint } from './use-terminal-breakpoint.js';
11
+ /**
12
+ * Configuration object defining all UI element heights per breakpoint
13
+ *
14
+ * Single source of truth for UI layout across different terminal sizes.
15
+ * Each breakpoint defines a complete set of height values for all UI elements.
16
+ *
17
+ * Breakpoints:
18
+ * - compact (0-23 rows): Minimal heights for small terminals
19
+ * - normal (≥24 rows): Standard heights for comfortable viewing
20
+ *
21
+ * Note: Object keys are ordered top-to-bottom according to actual UI layout.
22
+ * perfectionist/sort-objects is disabled to preserve this logical ordering.
23
+ */
24
+ const BREAKPOINT_HEIGHTS = {
25
+ compact: {
26
+ header: 2,
27
+ tab: 3,
28
+ messageItem: {
29
+ header: 1,
30
+ input: 3,
31
+ maxProgressItems: 2,
32
+ contentBottomMargin: 0,
33
+ maxChanges: {
34
+ created: 2,
35
+ updated: 2,
36
+ },
37
+ bottomMargin: 1,
38
+ },
39
+ commandInput: 3,
40
+ footer: 1,
41
+ appBottomPadding: 0,
42
+ },
43
+ normal: {
44
+ header: 2,
45
+ tab: 3,
46
+ messageItem: {
47
+ header: 1,
48
+ input: 3,
49
+ maxProgressItems: 3,
50
+ contentBottomMargin: 1,
51
+ maxChanges: {
52
+ created: 3,
53
+ updated: 3,
54
+ },
55
+ bottomMargin: 1,
56
+ },
57
+ commandInput: 3,
58
+ footer: 1,
59
+ appBottomPadding: 0,
60
+ },
61
+ };
62
+ /**
63
+ * Hook for providing breakpoint-specific UI heights
64
+ *
65
+ * Detects the current terminal breakpoint and returns the corresponding
66
+ * height configuration from BREAKPOINT_HEIGHTS. All height values are
67
+ * returned at the top level for easy destructuring.
68
+ *
69
+ * @returns {UIHeights} Object containing:
70
+ * - breakpoint: Current breakpoint ('compact' | 'normal')
71
+ * - header: Header section height
72
+ * - tab: Tab bar height
73
+ * - footer: Footer section height
74
+ * - messageItem: Message item component heights
75
+ * - appBottomPadding: App bottom padding
76
+ *
77
+ * @example
78
+ * const {breakpoint, header, tab, footer, messageItem} = useUIHeights()
79
+ * const availableHeight = terminalRows - header - tab - footer
80
+ */
81
+ export function useUIHeights() {
82
+ const { breakpoint } = useTerminalBreakpoint();
83
+ const config = BREAKPOINT_HEIGHTS[breakpoint];
84
+ return {
85
+ breakpoint,
86
+ ...config,
87
+ };
88
+ }
@@ -1,9 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { AuthProvider, ConsumerProvider, ServicesProvider } from '../contexts/index.js';
3
- import { OnboardingProvider } from '../contexts/onboarding-context.js';
4
- import { CommandsProvider } from '../contexts/use-commands.js';
5
- import { ModeProvider } from '../contexts/use-mode.js';
6
- import { ThemeProvider } from '../contexts/use-theme.js';
2
+ import { AuthProvider, CommandsProvider, ModeProvider, OnboardingProvider, ServicesProvider, TasksProvider, ThemeProvider, TransportProvider, } from '../contexts/index.js';
7
3
  export function AppProviders({ children, initialAuthToken, initialBrvConfig, onboardingPreferenceStore, projectConfigStore, tokenStore, trackingService, version, }) {
8
- return (_jsx(ServicesProvider, { onboardingPreferenceStore: onboardingPreferenceStore, projectConfigStore: projectConfigStore, tokenStore: tokenStore, trackingService: trackingService, version: version, children: _jsx(AuthProvider, { initialAuthToken: initialAuthToken, initialBrvConfig: initialBrvConfig, children: _jsx(ThemeProvider, { children: _jsx(CommandsProvider, { children: _jsx(ModeProvider, { children: _jsx(ConsumerProvider, { children: _jsx(OnboardingProvider, { children: children }) }) }) }) }) }) }));
4
+ return (_jsx(ServicesProvider, { onboardingPreferenceStore: onboardingPreferenceStore, projectConfigStore: projectConfigStore, tokenStore: tokenStore, trackingService: trackingService, version: version, children: _jsx(AuthProvider, { initialAuthToken: initialAuthToken, initialBrvConfig: initialBrvConfig, children: _jsx(ThemeProvider, { children: _jsx(CommandsProvider, { children: _jsx(ModeProvider, { children: _jsx(TransportProvider, { children: _jsx(TasksProvider, { children: _jsx(OnboardingProvider, { children: children }) }) }) }) }) }) }) }));
9
5
  }
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import type React from 'react';
5
5
  import type { PromptRequest, StreamingMessage } from './index.js';
6
- import type { Message } from './messages.js';
7
6
  /**
8
7
  * Command kind indicates the source/type of command
9
8
  * Based on Gemini CLI pattern for extensibility
@@ -59,31 +58,6 @@ export interface CommandContext {
59
58
  /** Full raw input string */
60
59
  raw: string;
61
60
  };
62
- /**
63
- * All loaded slash commands (for help command, etc.)
64
- */
65
- slashCommands?: readonly SlashCommand[];
66
- /**
67
- * UI operations available to commands
68
- */
69
- ui?: {
70
- /**
71
- * Add a message to the message history
72
- */
73
- addMessage: (msg: Message) => void;
74
- /**
75
- * Clear all messages from the history
76
- */
77
- clearMessages: () => void;
78
- /**
79
- * Remove the currently displayed custom dialog
80
- */
81
- removeDialog: () => void;
82
- /**
83
- * Set processing state
84
- */
85
- setIsProcessing: (processing: boolean) => void;
86
- };
87
61
  /**
88
62
  * CLI version
89
63
  */
@@ -8,4 +8,4 @@ export type { ClearActionReturn, CommandArg, CommandContext, CommandFlag, Comman
8
8
  export type { ConfirmationRequest, CurateContextInputRequest, CurateDialogRequest, QueryDialogRequest, } from './dialogs.js';
9
9
  export type { ActivityLog, CommandMessage, Message, StreamingMessage } from './messages.js';
10
10
  export type { ConfirmPromptRequest, FileSelectorItemResult, FileSelectorMode, FileSelectorPromptRequest, InputPromptRequest, PromptChoice, PromptRequest, SearchPromptRequest, SelectPromptRequest, } from './prompts.js';
11
- export type { AuthState, ConsumerStatus, QueueStats, Tab, TabId } from './ui.js';
11
+ export type { AuthState, ConsumerStatus, Tab, TabId, TaskStats } from './ui.js';
@@ -7,8 +7,13 @@ export interface Tab {
7
7
  id: TabId;
8
8
  label: string;
9
9
  }
10
- export interface QueueStats {
11
- pending: number;
12
- processing: number;
13
- }
10
+ /**
11
+ * Statistics for task states.
12
+ */
13
+ export type TaskStats = {
14
+ /** Number of tasks in 'created' status */
15
+ created: number;
16
+ /** Number of tasks in 'started' status */
17
+ started: number;
18
+ };
14
19
  export type ConsumerStatus = 'error' | 'running' | 'starting' | 'stopped';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Line utility functions for calculating visual line counts
3
+ */
4
+ /**
5
+ * Calculate visual line count for a single line, accounting for wrapping
6
+ *
7
+ * @param line - The text line to measure
8
+ * @param maxCharsPerLine - Maximum characters per line (terminal width)
9
+ * @returns Number of visual lines this text will occupy
10
+ */
11
+ export declare function getVisualLineCount(line: string, maxCharsPerLine: number): number;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Line utility functions for calculating visual line counts
3
+ */
4
+ /**
5
+ * Calculate visual line count for a single line, accounting for wrapping
6
+ *
7
+ * @param line - The text line to measure
8
+ * @param maxCharsPerLine - Maximum characters per line (terminal width)
9
+ * @returns Number of visual lines this text will occupy
10
+ */
11
+ export function getVisualLineCount(line, maxCharsPerLine) {
12
+ if (maxCharsPerLine <= 0 || line.length === 0) {
13
+ return 1;
14
+ }
15
+ return Math.ceil(line.length / maxCharsPerLine) || 1;
16
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Log utility functions for height calculations
3
+ */
4
+ import type { MessageItemHeights } from '../hooks/index.js';
5
+ import type { ActivityLog } from '../types.js';
6
+ /**
7
+ * Calculate the actual rendered height of a log item.
8
+ * This reflects the real space the item takes up when rendered.
9
+ *
10
+ * @param log - The activity log to analyze
11
+ * @param baseHeights - Base height configuration from breakpoint (maxContentLines is optional)
12
+ * @returns Total height in lines that this log item will occupy
13
+ */
14
+ export declare function calculateActualLogHeight(log: ActivityLog, baseHeights: MessageItemHeights): number;
15
+ /**
16
+ * Calculate dynamic space usage for each part of a log
17
+ * Returns array showing how many lines each field uses
18
+ *
19
+ * @param log - The activity log to analyze
20
+ * @param scrollableHeight - Total available height for content area
21
+ * @param baseHeights - Base height configuration from breakpoint
22
+ * @returns Array of { field, lines } showing space breakdown, including calculated content lines
23
+ */
24
+ export declare function calculateLogContentLimit(log: ActivityLog, scrollableHeight: number, baseHeights: Omit<MessageItemHeights, 'maxContentLines'>): Array<{
25
+ field: string;
26
+ lines: number;
27
+ }>;