pulseed 0.5.2 → 0.5.4

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 (824) hide show
  1. package/dist/base/state/state-manager-goal-state.d.ts +40 -0
  2. package/dist/base/state/state-manager-goal-state.d.ts.map +1 -0
  3. package/dist/base/state/state-manager-goal-state.js +235 -0
  4. package/dist/base/state/state-manager-goal-state.js.map +1 -0
  5. package/dist/base/state/state-manager.d.ts +0 -5
  6. package/dist/base/state/state-manager.d.ts.map +1 -1
  7. package/dist/base/state/state-manager.js +27 -273
  8. package/dist/base/state/state-manager.js.map +1 -1
  9. package/dist/base/types/goal-activation.d.ts +25 -0
  10. package/dist/base/types/goal-activation.d.ts.map +1 -0
  11. package/dist/base/types/goal-activation.js +9 -0
  12. package/dist/base/types/goal-activation.js.map +1 -0
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/interface/chat/chat-event-state.d.ts +10 -0
  18. package/dist/interface/chat/chat-event-state.d.ts.map +1 -1
  19. package/dist/interface/chat/chat-event-state.js +184 -9
  20. package/dist/interface/chat/chat-event-state.js.map +1 -1
  21. package/dist/interface/chat/chat-events.d.ts +3 -1
  22. package/dist/interface/chat/chat-events.d.ts.map +1 -1
  23. package/dist/interface/chat/chat-history.d.ts +129 -0
  24. package/dist/interface/chat/chat-history.d.ts.map +1 -1
  25. package/dist/interface/chat/chat-history.js +135 -0
  26. package/dist/interface/chat/chat-history.js.map +1 -1
  27. package/dist/interface/chat/chat-runner-command-helpers.d.ts +50 -0
  28. package/dist/interface/chat/chat-runner-command-helpers.d.ts.map +1 -0
  29. package/dist/interface/chat/chat-runner-command-helpers.js +189 -0
  30. package/dist/interface/chat/chat-runner-command-helpers.js.map +1 -0
  31. package/dist/interface/chat/chat-runner-commands.d.ts +76 -0
  32. package/dist/interface/chat/chat-runner-commands.d.ts.map +1 -0
  33. package/dist/interface/chat/chat-runner-commands.js +814 -0
  34. package/dist/interface/chat/chat-runner-commands.js.map +1 -0
  35. package/dist/interface/chat/chat-runner-event-bridge.d.ts +53 -0
  36. package/dist/interface/chat/chat-runner-event-bridge.d.ts.map +1 -0
  37. package/dist/interface/chat/chat-runner-event-bridge.js +311 -0
  38. package/dist/interface/chat/chat-runner-event-bridge.js.map +1 -0
  39. package/dist/interface/chat/chat-runner-routes.d.ts +67 -0
  40. package/dist/interface/chat/chat-runner-routes.d.ts.map +1 -0
  41. package/dist/interface/chat/chat-runner-routes.js +594 -0
  42. package/dist/interface/chat/chat-runner-routes.js.map +1 -0
  43. package/dist/interface/chat/chat-runner-runtime.d.ts +37 -0
  44. package/dist/interface/chat/chat-runner-runtime.d.ts.map +1 -0
  45. package/dist/interface/chat/chat-runner-runtime.js +236 -0
  46. package/dist/interface/chat/chat-runner-runtime.js.map +1 -0
  47. package/dist/interface/chat/chat-runner-state.d.ts +20 -0
  48. package/dist/interface/chat/chat-runner-state.d.ts.map +1 -0
  49. package/dist/interface/chat/chat-runner-state.js +157 -0
  50. package/dist/interface/chat/chat-runner-state.js.map +1 -0
  51. package/dist/interface/chat/chat-runner-support.d.ts +15 -0
  52. package/dist/interface/chat/chat-runner-support.d.ts.map +1 -0
  53. package/dist/interface/chat/chat-runner-support.js +116 -0
  54. package/dist/interface/chat/chat-runner-support.js.map +1 -0
  55. package/dist/interface/chat/chat-runner.d.ts +13 -133
  56. package/dist/interface/chat/chat-runner.d.ts.map +1 -1
  57. package/dist/interface/chat/chat-runner.js +242 -1974
  58. package/dist/interface/chat/chat-runner.js.map +1 -1
  59. package/dist/interface/chat/chat-session-store.d.ts +32 -0
  60. package/dist/interface/chat/chat-session-store.d.ts.map +1 -1
  61. package/dist/interface/chat/chat-session-store.js +100 -10
  62. package/dist/interface/chat/chat-session-store.js.map +1 -1
  63. package/dist/interface/chat/chat-verifier.d.ts +3 -1
  64. package/dist/interface/chat/chat-verifier.d.ts.map +1 -1
  65. package/dist/interface/chat/chat-verifier.js +2 -2
  66. package/dist/interface/chat/chat-verifier.js.map +1 -1
  67. package/dist/interface/chat/cross-platform-session.d.ts +1 -0
  68. package/dist/interface/chat/cross-platform-session.d.ts.map +1 -1
  69. package/dist/interface/chat/cross-platform-session.js +23 -2
  70. package/dist/interface/chat/cross-platform-session.js.map +1 -1
  71. package/dist/interface/chat/event-subscriber.d.ts.map +1 -1
  72. package/dist/interface/chat/event-subscriber.js +41 -0
  73. package/dist/interface/chat/event-subscriber.js.map +1 -1
  74. package/dist/interface/chat/failure-recovery.d.ts +11 -0
  75. package/dist/interface/chat/failure-recovery.d.ts.map +1 -0
  76. package/dist/interface/chat/failure-recovery.js +115 -0
  77. package/dist/interface/chat/failure-recovery.js.map +1 -0
  78. package/dist/interface/chat/ingress-router.d.ts +0 -16
  79. package/dist/interface/chat/ingress-router.d.ts.map +1 -1
  80. package/dist/interface/chat/ingress-router.js +12 -51
  81. package/dist/interface/chat/ingress-router.js.map +1 -1
  82. package/dist/interface/chat/tend-command.d.ts +8 -0
  83. package/dist/interface/chat/tend-command.d.ts.map +1 -1
  84. package/dist/interface/chat/tend-command.js +82 -4
  85. package/dist/interface/chat/tend-command.js.map +1 -1
  86. package/dist/interface/cli/cli-command-registry.d.ts.map +1 -1
  87. package/dist/interface/cli/cli-command-registry.js +4 -0
  88. package/dist/interface/cli/cli-command-registry.js.map +1 -1
  89. package/dist/interface/cli/commands/daemon-shared.d.ts +32 -0
  90. package/dist/interface/cli/commands/daemon-shared.d.ts.map +1 -0
  91. package/dist/interface/cli/commands/daemon-shared.js +120 -0
  92. package/dist/interface/cli/commands/daemon-shared.js.map +1 -0
  93. package/dist/interface/cli/commands/daemon.d.ts +2 -2
  94. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  95. package/dist/interface/cli/commands/daemon.js +4 -120
  96. package/dist/interface/cli/commands/daemon.js.map +1 -1
  97. package/dist/interface/cli/commands/runtime.d.ts +3 -0
  98. package/dist/interface/cli/commands/runtime.d.ts.map +1 -0
  99. package/dist/interface/cli/commands/runtime.js +231 -0
  100. package/dist/interface/cli/commands/runtime.js.map +1 -0
  101. package/dist/interface/cli/commands/schedule/history.d.ts.map +1 -1
  102. package/dist/interface/cli/commands/schedule/history.js +5 -1
  103. package/dist/interface/cli/commands/schedule/history.js.map +1 -1
  104. package/dist/interface/cli/commands/schedule.js +34 -4
  105. package/dist/interface/cli/commands/schedule.js.map +1 -1
  106. package/dist/interface/cli/utils.d.ts.map +1 -1
  107. package/dist/interface/cli/utils.js +4 -0
  108. package/dist/interface/cli/utils.js.map +1 -1
  109. package/dist/interface/tui/app.d.ts.map +1 -1
  110. package/dist/interface/tui/app.js +35 -1
  111. package/dist/interface/tui/app.js.map +1 -1
  112. package/dist/interface/tui/chat/scroll.d.ts +3 -0
  113. package/dist/interface/tui/chat/scroll.d.ts.map +1 -1
  114. package/dist/interface/tui/chat/scroll.js +15 -0
  115. package/dist/interface/tui/chat/scroll.js.map +1 -1
  116. package/dist/interface/tui/chat/suggestions.d.ts.map +1 -1
  117. package/dist/interface/tui/chat/suggestions.js +118 -4
  118. package/dist/interface/tui/chat/suggestions.js.map +1 -1
  119. package/dist/interface/tui/chat/types.d.ts +1 -1
  120. package/dist/interface/tui/chat/types.d.ts.map +1 -1
  121. package/dist/interface/tui/chat/viewport.d.ts.map +1 -1
  122. package/dist/interface/tui/chat/viewport.js +8 -2
  123. package/dist/interface/tui/chat/viewport.js.map +1 -1
  124. package/dist/interface/tui/chat-surface.d.ts +2 -0
  125. package/dist/interface/tui/chat-surface.d.ts.map +1 -1
  126. package/dist/interface/tui/chat-surface.js +11 -0
  127. package/dist/interface/tui/chat-surface.js.map +1 -1
  128. package/dist/interface/tui/chat.d.ts.map +1 -1
  129. package/dist/interface/tui/chat.js +15 -7
  130. package/dist/interface/tui/chat.js.map +1 -1
  131. package/dist/interface/tui/clipboard.d.ts +6 -1
  132. package/dist/interface/tui/clipboard.d.ts.map +1 -1
  133. package/dist/interface/tui/clipboard.js +24 -5
  134. package/dist/interface/tui/clipboard.js.map +1 -1
  135. package/dist/interface/tui/entry-approval.d.ts +8 -0
  136. package/dist/interface/tui/entry-approval.d.ts.map +1 -0
  137. package/dist/interface/tui/entry-approval.js +59 -0
  138. package/dist/interface/tui/entry-approval.js.map +1 -0
  139. package/dist/interface/tui/entry-daemon.d.ts +12 -0
  140. package/dist/interface/tui/entry-daemon.d.ts.map +1 -0
  141. package/dist/interface/tui/entry-daemon.js +74 -0
  142. package/dist/interface/tui/entry-daemon.js.map +1 -0
  143. package/dist/interface/tui/entry-deps.d.ts +22 -0
  144. package/dist/interface/tui/entry-deps.d.ts.map +1 -0
  145. package/dist/interface/tui/entry-deps.js +409 -0
  146. package/dist/interface/tui/entry-deps.js.map +1 -0
  147. package/dist/interface/tui/entry.d.ts +2 -4
  148. package/dist/interface/tui/entry.d.ts.map +1 -1
  149. package/dist/interface/tui/entry.js +15 -550
  150. package/dist/interface/tui/entry.js.map +1 -1
  151. package/dist/interface/tui/flicker/MouseTracking.d.ts +1 -1
  152. package/dist/interface/tui/flicker/MouseTracking.d.ts.map +1 -1
  153. package/dist/interface/tui/flicker/MouseTracking.js +8 -4
  154. package/dist/interface/tui/flicker/MouseTracking.js.map +1 -1
  155. package/dist/interface/tui/fullscreen-chat-render.d.ts +127 -0
  156. package/dist/interface/tui/fullscreen-chat-render.d.ts.map +1 -0
  157. package/dist/interface/tui/fullscreen-chat-render.js +667 -0
  158. package/dist/interface/tui/fullscreen-chat-render.js.map +1 -0
  159. package/dist/interface/tui/fullscreen-chat.d.ts +1 -29
  160. package/dist/interface/tui/fullscreen-chat.d.ts.map +1 -1
  161. package/dist/interface/tui/fullscreen-chat.js +306 -411
  162. package/dist/interface/tui/fullscreen-chat.js.map +1 -1
  163. package/dist/interface/tui/help-overlay.d.ts.map +1 -1
  164. package/dist/interface/tui/help-overlay.js +1 -1
  165. package/dist/interface/tui/help-overlay.js.map +1 -1
  166. package/dist/interface/tui/intent-recognizer.js +2 -2
  167. package/dist/interface/tui/intent-recognizer.js.map +1 -1
  168. package/dist/interface/tui/markdown-renderer.d.ts.map +1 -1
  169. package/dist/interface/tui/markdown-renderer.js +40 -12
  170. package/dist/interface/tui/markdown-renderer.js.map +1 -1
  171. package/dist/interface/tui/test-entry.js +1 -1
  172. package/dist/interface/tui/test-entry.js.map +1 -1
  173. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.d.ts.map +1 -1
  174. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js +1 -0
  175. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js.map +1 -1
  176. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.d.ts.map +1 -1
  177. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js +35 -13
  178. package/dist/orchestrator/execution/agent-loop/agent-loop-default-profile.js.map +1 -1
  179. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.d.ts.map +1 -1
  180. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.js +7 -4
  181. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.js.map +1 -1
  182. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.d.ts.map +1 -1
  183. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.js +2 -1
  184. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.js.map +1 -1
  185. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts +2 -0
  186. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts.map +1 -1
  187. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js +31 -0
  188. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js.map +1 -1
  189. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts +1 -0
  190. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts.map +1 -1
  191. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js.map +1 -1
  192. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts +1 -0
  193. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts.map +1 -1
  194. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js +42 -2
  195. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js.map +1 -1
  196. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +1 -0
  197. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts.map +1 -1
  198. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js +3 -1
  199. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js.map +1 -1
  200. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts +19 -0
  201. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts.map +1 -1
  202. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js +164 -14
  203. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js.map +1 -1
  204. package/dist/orchestrator/execution/agent-loop/index.d.ts +1 -0
  205. package/dist/orchestrator/execution/agent-loop/index.d.ts.map +1 -1
  206. package/dist/orchestrator/execution/agent-loop/index.js +1 -0
  207. package/dist/orchestrator/execution/agent-loop/index.js.map +1 -1
  208. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.d.ts +34 -0
  209. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.d.ts.map +1 -0
  210. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.js +54 -0
  211. package/dist/orchestrator/execution/agent-loop/kaggle-training-benchmark.js.map +1 -0
  212. package/dist/orchestrator/execution/reflection-generator.d.ts +1 -0
  213. package/dist/orchestrator/execution/reflection-generator.d.ts.map +1 -1
  214. package/dist/orchestrator/execution/reflection-generator.js +10 -1
  215. package/dist/orchestrator/execution/reflection-generator.js.map +1 -1
  216. package/dist/orchestrator/execution/task/task-context-enricher.d.ts +2 -0
  217. package/dist/orchestrator/execution/task/task-context-enricher.d.ts.map +1 -1
  218. package/dist/orchestrator/execution/task/task-context-enricher.js +9 -4
  219. package/dist/orchestrator/execution/task/task-context-enricher.js.map +1 -1
  220. package/dist/orchestrator/execution/task/task-execution-helpers-internal.d.ts +5 -0
  221. package/dist/orchestrator/execution/task/task-execution-helpers-internal.d.ts.map +1 -0
  222. package/dist/orchestrator/execution/task/task-execution-helpers-internal.js +6 -0
  223. package/dist/orchestrator/execution/task/task-execution-helpers-internal.js.map +1 -0
  224. package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
  225. package/dist/orchestrator/execution/task/task-generation.js +8 -3
  226. package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
  227. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts +73 -0
  228. package/dist/orchestrator/execution/task/task-lifecycle-runner.d.ts.map +1 -0
  229. package/dist/orchestrator/execution/task/task-lifecycle-runner.js +184 -0
  230. package/dist/orchestrator/execution/task/task-lifecycle-runner.js.map +1 -0
  231. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +7 -7
  232. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  233. package/dist/orchestrator/execution/task/task-lifecycle.js +37 -181
  234. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  235. package/dist/orchestrator/execution/task/task-verifier-internal.d.ts +2 -0
  236. package/dist/orchestrator/execution/task/task-verifier-internal.d.ts.map +1 -0
  237. package/dist/orchestrator/execution/task/task-verifier-internal.js +2 -0
  238. package/dist/orchestrator/execution/task/task-verifier-internal.js.map +1 -0
  239. package/dist/orchestrator/goal/goal-negotiator.d.ts.map +1 -1
  240. package/dist/orchestrator/goal/goal-negotiator.js +23 -3
  241. package/dist/orchestrator/goal/goal-negotiator.js.map +1 -1
  242. package/dist/orchestrator/loop/core-loop/contracts.d.ts +1 -0
  243. package/dist/orchestrator/loop/core-loop/contracts.d.ts.map +1 -1
  244. package/dist/orchestrator/loop/core-loop/contracts.js.map +1 -1
  245. package/dist/orchestrator/loop/core-loop/iteration-kernel-knowledge.d.ts +7 -0
  246. package/dist/orchestrator/loop/core-loop/iteration-kernel-knowledge.d.ts.map +1 -0
  247. package/dist/orchestrator/loop/core-loop/iteration-kernel-knowledge.js +43 -0
  248. package/dist/orchestrator/loop/core-loop/iteration-kernel-knowledge.js.map +1 -0
  249. package/dist/orchestrator/loop/core-loop/iteration-kernel-wait.d.ts +14 -0
  250. package/dist/orchestrator/loop/core-loop/iteration-kernel-wait.d.ts.map +1 -0
  251. package/dist/orchestrator/loop/core-loop/iteration-kernel-wait.js +41 -0
  252. package/dist/orchestrator/loop/core-loop/iteration-kernel-wait.js.map +1 -0
  253. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts +3 -2
  254. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts.map +1 -1
  255. package/dist/orchestrator/loop/core-loop/iteration-kernel.js +16 -87
  256. package/dist/orchestrator/loop/core-loop/iteration-kernel.js.map +1 -1
  257. package/dist/orchestrator/loop/core-loop/phase-policy.d.ts.map +1 -1
  258. package/dist/orchestrator/loop/core-loop/phase-policy.js +8 -5
  259. package/dist/orchestrator/loop/core-loop/phase-policy.js.map +1 -1
  260. package/dist/orchestrator/loop/core-loop/task-cycle-stall.d.ts +9 -0
  261. package/dist/orchestrator/loop/core-loop/task-cycle-stall.d.ts.map +1 -0
  262. package/dist/orchestrator/loop/core-loop/task-cycle-stall.js +297 -0
  263. package/dist/orchestrator/loop/core-loop/task-cycle-stall.js.map +1 -0
  264. package/dist/orchestrator/loop/core-loop/task-cycle-wait.d.ts +11 -0
  265. package/dist/orchestrator/loop/core-loop/task-cycle-wait.d.ts.map +1 -0
  266. package/dist/orchestrator/loop/core-loop/task-cycle-wait.js +176 -0
  267. package/dist/orchestrator/loop/core-loop/task-cycle-wait.js.map +1 -0
  268. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts +3 -15
  269. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts.map +1 -1
  270. package/dist/orchestrator/loop/core-loop/task-cycle.js +10 -444
  271. package/dist/orchestrator/loop/core-loop/task-cycle.js.map +1 -1
  272. package/dist/orchestrator/loop/core-loop.d.ts +3 -0
  273. package/dist/orchestrator/loop/core-loop.d.ts.map +1 -1
  274. package/dist/orchestrator/loop/core-loop.js +4 -0
  275. package/dist/orchestrator/loop/core-loop.js.map +1 -1
  276. package/dist/orchestrator/strategy/portfolio-manager.d.ts +3 -2
  277. package/dist/orchestrator/strategy/portfolio-manager.d.ts.map +1 -1
  278. package/dist/orchestrator/strategy/portfolio-manager.js +16 -11
  279. package/dist/orchestrator/strategy/portfolio-manager.js.map +1 -1
  280. package/dist/orchestrator/strategy/portfolio-rebalance.d.ts +1 -1
  281. package/dist/orchestrator/strategy/portfolio-rebalance.d.ts.map +1 -1
  282. package/dist/orchestrator/strategy/portfolio-rebalance.js +31 -9
  283. package/dist/orchestrator/strategy/portfolio-rebalance.js.map +1 -1
  284. package/dist/orchestrator/strategy/strategy-manager-base.d.ts +12 -2
  285. package/dist/orchestrator/strategy/strategy-manager-base.d.ts.map +1 -1
  286. package/dist/orchestrator/strategy/strategy-manager-base.js +23 -7
  287. package/dist/orchestrator/strategy/strategy-manager-base.js.map +1 -1
  288. package/dist/orchestrator/strategy/strategy-manager.d.ts +1 -11
  289. package/dist/orchestrator/strategy/strategy-manager.d.ts.map +1 -1
  290. package/dist/orchestrator/strategy/strategy-manager.js +78 -19
  291. package/dist/orchestrator/strategy/strategy-manager.js.map +1 -1
  292. package/dist/platform/code-search/candidate-normalizer.d.ts +3 -0
  293. package/dist/platform/code-search/candidate-normalizer.d.ts.map +1 -0
  294. package/dist/platform/code-search/candidate-normalizer.js +61 -0
  295. package/dist/platform/code-search/candidate-normalizer.js.map +1 -0
  296. package/dist/platform/code-search/candidate.d.ts +25 -0
  297. package/dist/platform/code-search/candidate.d.ts.map +1 -0
  298. package/dist/platform/code-search/candidate.js +61 -0
  299. package/dist/platform/code-search/candidate.js.map +1 -0
  300. package/dist/platform/code-search/contracts.d.ts +275 -0
  301. package/dist/platform/code-search/contracts.d.ts.map +1 -0
  302. package/dist/platform/code-search/contracts.js +22 -0
  303. package/dist/platform/code-search/contracts.js.map +1 -0
  304. package/dist/platform/code-search/eval/fixtures.d.ts +14 -0
  305. package/dist/platform/code-search/eval/fixtures.d.ts.map +1 -0
  306. package/dist/platform/code-search/eval/fixtures.js +24 -0
  307. package/dist/platform/code-search/eval/fixtures.js.map +1 -0
  308. package/dist/platform/code-search/eval/metrics.d.ts +10 -0
  309. package/dist/platform/code-search/eval/metrics.d.ts.map +1 -0
  310. package/dist/platform/code-search/eval/metrics.js +20 -0
  311. package/dist/platform/code-search/eval/metrics.js.map +1 -0
  312. package/dist/platform/code-search/eval/runner.d.ts +3 -0
  313. package/dist/platform/code-search/eval/runner.d.ts.map +1 -0
  314. package/dist/platform/code-search/eval/runner.js +13 -0
  315. package/dist/platform/code-search/eval/runner.js.map +1 -0
  316. package/dist/platform/code-search/fusion.d.ts +6 -0
  317. package/dist/platform/code-search/fusion.d.ts.map +1 -0
  318. package/dist/platform/code-search/fusion.js +12 -0
  319. package/dist/platform/code-search/fusion.js.map +1 -0
  320. package/dist/platform/code-search/generated-detector.d.ts +15 -0
  321. package/dist/platform/code-search/generated-detector.d.ts.map +1 -0
  322. package/dist/platform/code-search/generated-detector.js +42 -0
  323. package/dist/platform/code-search/generated-detector.js.map +1 -0
  324. package/dist/platform/code-search/indexes/call-graph.d.ts +3 -0
  325. package/dist/platform/code-search/indexes/call-graph.d.ts.map +1 -0
  326. package/dist/platform/code-search/indexes/call-graph.js +13 -0
  327. package/dist/platform/code-search/indexes/call-graph.js.map +1 -0
  328. package/dist/platform/code-search/indexes/config-index.d.ts +3 -0
  329. package/dist/platform/code-search/indexes/config-index.d.ts.map +1 -0
  330. package/dist/platform/code-search/indexes/config-index.js +7 -0
  331. package/dist/platform/code-search/indexes/config-index.js.map +1 -0
  332. package/dist/platform/code-search/indexes/file-index.d.ts +5 -0
  333. package/dist/platform/code-search/indexes/file-index.d.ts.map +1 -0
  334. package/dist/platform/code-search/indexes/file-index.js +106 -0
  335. package/dist/platform/code-search/indexes/file-index.js.map +1 -0
  336. package/dist/platform/code-search/indexes/index-store.d.ts +6 -0
  337. package/dist/platform/code-search/indexes/index-store.d.ts.map +1 -0
  338. package/dist/platform/code-search/indexes/index-store.js +14 -0
  339. package/dist/platform/code-search/indexes/index-store.js.map +1 -0
  340. package/dist/platform/code-search/indexes/indexer.d.ts +3 -0
  341. package/dist/platform/code-search/indexes/indexer.d.ts.map +1 -0
  342. package/dist/platform/code-search/indexes/indexer.js +27 -0
  343. package/dist/platform/code-search/indexes/indexer.js.map +1 -0
  344. package/dist/platform/code-search/indexes/package-graph.d.ts +3 -0
  345. package/dist/platform/code-search/indexes/package-graph.d.ts.map +1 -0
  346. package/dist/platform/code-search/indexes/package-graph.js +26 -0
  347. package/dist/platform/code-search/indexes/package-graph.js.map +1 -0
  348. package/dist/platform/code-search/indexes/repo-map-index.d.ts +3 -0
  349. package/dist/platform/code-search/indexes/repo-map-index.d.ts.map +1 -0
  350. package/dist/platform/code-search/indexes/repo-map-index.js +26 -0
  351. package/dist/platform/code-search/indexes/repo-map-index.js.map +1 -0
  352. package/dist/platform/code-search/indexes/semantic-index.d.ts +3 -0
  353. package/dist/platform/code-search/indexes/semantic-index.d.ts.map +1 -0
  354. package/dist/platform/code-search/indexes/semantic-index.js +4 -0
  355. package/dist/platform/code-search/indexes/semantic-index.js.map +1 -0
  356. package/dist/platform/code-search/indexes/symbol-index.d.ts +3 -0
  357. package/dist/platform/code-search/indexes/symbol-index.d.ts.map +1 -0
  358. package/dist/platform/code-search/indexes/symbol-index.js +84 -0
  359. package/dist/platform/code-search/indexes/symbol-index.js.map +1 -0
  360. package/dist/platform/code-search/indexes/test-index.d.ts +3 -0
  361. package/dist/platform/code-search/indexes/test-index.d.ts.map +1 -0
  362. package/dist/platform/code-search/indexes/test-index.js +22 -0
  363. package/dist/platform/code-search/indexes/test-index.js.map +1 -0
  364. package/dist/platform/code-search/orchestrator.d.ts +9 -0
  365. package/dist/platform/code-search/orchestrator.d.ts.map +1 -0
  366. package/dist/platform/code-search/orchestrator.js +81 -0
  367. package/dist/platform/code-search/orchestrator.js.map +1 -0
  368. package/dist/platform/code-search/path-policy.d.ts +6 -0
  369. package/dist/platform/code-search/path-policy.d.ts.map +1 -0
  370. package/dist/platform/code-search/path-policy.js +60 -0
  371. package/dist/platform/code-search/path-policy.js.map +1 -0
  372. package/dist/platform/code-search/progressive-reader.d.ts +8 -0
  373. package/dist/platform/code-search/progressive-reader.d.ts.map +1 -0
  374. package/dist/platform/code-search/progressive-reader.js +173 -0
  375. package/dist/platform/code-search/progressive-reader.js.map +1 -0
  376. package/dist/platform/code-search/query-planner.d.ts +4 -0
  377. package/dist/platform/code-search/query-planner.d.ts.map +1 -0
  378. package/dist/platform/code-search/query-planner.js +107 -0
  379. package/dist/platform/code-search/query-planner.js.map +1 -0
  380. package/dist/platform/code-search/reranker.d.ts +4 -0
  381. package/dist/platform/code-search/reranker.d.ts.map +1 -0
  382. package/dist/platform/code-search/reranker.js +57 -0
  383. package/dist/platform/code-search/reranker.js.map +1 -0
  384. package/dist/platform/code-search/retrievers/callgraph-retriever.d.ts +6 -0
  385. package/dist/platform/code-search/retrievers/callgraph-retriever.d.ts.map +1 -0
  386. package/dist/platform/code-search/retrievers/callgraph-retriever.js +31 -0
  387. package/dist/platform/code-search/retrievers/callgraph-retriever.js.map +1 -0
  388. package/dist/platform/code-search/retrievers/config-retriever.d.ts +6 -0
  389. package/dist/platform/code-search/retrievers/config-retriever.d.ts.map +1 -0
  390. package/dist/platform/code-search/retrievers/config-retriever.js +23 -0
  391. package/dist/platform/code-search/retrievers/config-retriever.js.map +1 -0
  392. package/dist/platform/code-search/retrievers/lexical-retriever.d.ts +6 -0
  393. package/dist/platform/code-search/retrievers/lexical-retriever.d.ts.map +1 -0
  394. package/dist/platform/code-search/retrievers/lexical-retriever.js +49 -0
  395. package/dist/platform/code-search/retrievers/lexical-retriever.js.map +1 -0
  396. package/dist/platform/code-search/retrievers/package-retriever.d.ts +6 -0
  397. package/dist/platform/code-search/retrievers/package-retriever.d.ts.map +1 -0
  398. package/dist/platform/code-search/retrievers/package-retriever.js +29 -0
  399. package/dist/platform/code-search/retrievers/package-retriever.js.map +1 -0
  400. package/dist/platform/code-search/retrievers/repo-map-retriever.d.ts +6 -0
  401. package/dist/platform/code-search/retrievers/repo-map-retriever.d.ts.map +1 -0
  402. package/dist/platform/code-search/retrievers/repo-map-retriever.js +30 -0
  403. package/dist/platform/code-search/retrievers/repo-map-retriever.js.map +1 -0
  404. package/dist/platform/code-search/retrievers/semantic-retriever.d.ts +6 -0
  405. package/dist/platform/code-search/retrievers/semantic-retriever.d.ts.map +1 -0
  406. package/dist/platform/code-search/retrievers/semantic-retriever.js +18 -0
  407. package/dist/platform/code-search/retrievers/semantic-retriever.js.map +1 -0
  408. package/dist/platform/code-search/retrievers/stacktrace-retriever.d.ts +6 -0
  409. package/dist/platform/code-search/retrievers/stacktrace-retriever.d.ts.map +1 -0
  410. package/dist/platform/code-search/retrievers/stacktrace-retriever.js +30 -0
  411. package/dist/platform/code-search/retrievers/stacktrace-retriever.js.map +1 -0
  412. package/dist/platform/code-search/retrievers/symbol-retriever.d.ts +6 -0
  413. package/dist/platform/code-search/retrievers/symbol-retriever.d.ts.map +1 -0
  414. package/dist/platform/code-search/retrievers/symbol-retriever.js +32 -0
  415. package/dist/platform/code-search/retrievers/symbol-retriever.js.map +1 -0
  416. package/dist/platform/code-search/retrievers/test-retriever.d.ts +6 -0
  417. package/dist/platform/code-search/retrievers/test-retriever.d.ts.map +1 -0
  418. package/dist/platform/code-search/retrievers/test-retriever.js +30 -0
  419. package/dist/platform/code-search/retrievers/test-retriever.js.map +1 -0
  420. package/dist/platform/code-search/session-store.d.ts +11 -0
  421. package/dist/platform/code-search/session-store.d.ts.map +1 -0
  422. package/dist/platform/code-search/session-store.js +41 -0
  423. package/dist/platform/code-search/session-store.js.map +1 -0
  424. package/dist/platform/code-search/trace.d.ts +9 -0
  425. package/dist/platform/code-search/trace.d.ts.map +1 -0
  426. package/dist/platform/code-search/trace.js +25 -0
  427. package/dist/platform/code-search/trace.js.map +1 -0
  428. package/dist/platform/code-search/verification-retrieval.d.ts +3 -0
  429. package/dist/platform/code-search/verification-retrieval.d.ts.map +1 -0
  430. package/dist/platform/code-search/verification-retrieval.js +33 -0
  431. package/dist/platform/code-search/verification-retrieval.js.map +1 -0
  432. package/dist/platform/dream/dream-consolidator/fs-metrics.d.ts +18 -0
  433. package/dist/platform/dream/dream-consolidator/fs-metrics.d.ts.map +1 -0
  434. package/dist/platform/dream/dream-consolidator/fs-metrics.js +130 -0
  435. package/dist/platform/dream/dream-consolidator/fs-metrics.js.map +1 -0
  436. package/dist/platform/dream/dream-consolidator.d.ts +4 -14
  437. package/dist/platform/dream/dream-consolidator.d.ts.map +1 -1
  438. package/dist/platform/dream/dream-consolidator.js +46 -166
  439. package/dist/platform/dream/dream-consolidator.js.map +1 -1
  440. package/dist/platform/dream/dream-soil-sync.d.ts +1 -0
  441. package/dist/platform/dream/dream-soil-sync.d.ts.map +1 -1
  442. package/dist/platform/dream/dream-soil-sync.js +8 -1
  443. package/dist/platform/dream/dream-soil-sync.js.map +1 -1
  444. package/dist/platform/dream/dream-types.d.ts +5 -0
  445. package/dist/platform/dream/dream-types.d.ts.map +1 -1
  446. package/dist/platform/dream/dream-types.js +1 -0
  447. package/dist/platform/dream/dream-types.js.map +1 -1
  448. package/dist/platform/dream/playbook-memory.d.ts +4 -4
  449. package/dist/platform/drive/stall-detector/analysis.d.ts +5 -0
  450. package/dist/platform/drive/stall-detector/analysis.d.ts.map +1 -0
  451. package/dist/platform/drive/stall-detector/analysis.js +55 -0
  452. package/dist/platform/drive/stall-detector/analysis.js.map +1 -0
  453. package/dist/platform/drive/stall-detector/repetitive.d.ts +3 -0
  454. package/dist/platform/drive/stall-detector/repetitive.d.ts.map +1 -0
  455. package/dist/platform/drive/stall-detector/repetitive.js +72 -0
  456. package/dist/platform/drive/stall-detector/repetitive.js.map +1 -0
  457. package/dist/platform/drive/stall-detector/thresholds.d.ts +10 -0
  458. package/dist/platform/drive/stall-detector/thresholds.d.ts.map +1 -0
  459. package/dist/platform/drive/stall-detector/thresholds.js +61 -0
  460. package/dist/platform/drive/stall-detector/thresholds.js.map +1 -0
  461. package/dist/platform/drive/stall-detector.d.ts +2 -20
  462. package/dist/platform/drive/stall-detector.d.ts.map +1 -1
  463. package/dist/platform/drive/stall-detector.js +9 -202
  464. package/dist/platform/drive/stall-detector.js.map +1 -1
  465. package/dist/platform/knowledge/knowledge-manager-agent-memory.d.ts +55 -0
  466. package/dist/platform/knowledge/knowledge-manager-agent-memory.d.ts.map +1 -0
  467. package/dist/platform/knowledge/knowledge-manager-agent-memory.js +232 -0
  468. package/dist/platform/knowledge/knowledge-manager-agent-memory.js.map +1 -0
  469. package/dist/platform/knowledge/knowledge-manager-internals.d.ts +10 -0
  470. package/dist/platform/knowledge/knowledge-manager-internals.d.ts.map +1 -0
  471. package/dist/platform/knowledge/knowledge-manager-internals.js +43 -0
  472. package/dist/platform/knowledge/knowledge-manager-internals.js.map +1 -0
  473. package/dist/platform/knowledge/knowledge-manager-store.d.ts +13 -0
  474. package/dist/platform/knowledge/knowledge-manager-store.d.ts.map +1 -0
  475. package/dist/platform/knowledge/knowledge-manager-store.js +67 -0
  476. package/dist/platform/knowledge/knowledge-manager-store.js.map +1 -0
  477. package/dist/platform/knowledge/knowledge-manager.d.ts +6 -2
  478. package/dist/platform/knowledge/knowledge-manager.d.ts.map +1 -1
  479. package/dist/platform/knowledge/knowledge-manager.js +43 -344
  480. package/dist/platform/knowledge/knowledge-manager.js.map +1 -1
  481. package/dist/platform/knowledge/memory/memory-lifecycle-storage.d.ts +4 -0
  482. package/dist/platform/knowledge/memory/memory-lifecycle-storage.d.ts.map +1 -0
  483. package/dist/platform/knowledge/memory/memory-lifecycle-storage.js +106 -0
  484. package/dist/platform/knowledge/memory/memory-lifecycle-storage.js.map +1 -0
  485. package/dist/platform/knowledge/memory/memory-lifecycle.d.ts.map +1 -1
  486. package/dist/platform/knowledge/memory/memory-lifecycle.js +6 -112
  487. package/dist/platform/knowledge/memory/memory-lifecycle.js.map +1 -1
  488. package/dist/platform/observation/capability-detector/prompts.d.ts +18 -0
  489. package/dist/platform/observation/capability-detector/prompts.d.ts.map +1 -0
  490. package/dist/platform/observation/capability-detector/prompts.js +80 -0
  491. package/dist/platform/observation/capability-detector/prompts.js.map +1 -0
  492. package/dist/platform/observation/capability-detector/recommendations.d.ts +5 -0
  493. package/dist/platform/observation/capability-detector/recommendations.d.ts.map +1 -0
  494. package/dist/platform/observation/capability-detector/recommendations.js +76 -0
  495. package/dist/platform/observation/capability-detector/recommendations.js.map +1 -0
  496. package/dist/platform/observation/capability-detector/types.d.ts +112 -0
  497. package/dist/platform/observation/capability-detector/types.d.ts.map +1 -0
  498. package/dist/platform/observation/capability-detector/types.js +75 -0
  499. package/dist/platform/observation/capability-detector/types.js.map +1 -0
  500. package/dist/platform/observation/capability-detector.d.ts +4 -9
  501. package/dist/platform/observation/capability-detector.d.ts.map +1 -1
  502. package/dist/platform/observation/capability-detector.js +12 -212
  503. package/dist/platform/observation/capability-detector.js.map +1 -1
  504. package/dist/platform/observation/context-provider/collector.d.ts +13 -0
  505. package/dist/platform/observation/context-provider/collector.d.ts.map +1 -0
  506. package/dist/platform/observation/context-provider/collector.js +259 -0
  507. package/dist/platform/observation/context-provider/collector.js.map +1 -0
  508. package/dist/platform/observation/context-provider/search-terms.d.ts +2 -0
  509. package/dist/platform/observation/context-provider/search-terms.d.ts.map +1 -0
  510. package/dist/platform/observation/context-provider/search-terms.js +24 -0
  511. package/dist/platform/observation/context-provider/search-terms.js.map +1 -0
  512. package/dist/platform/observation/context-provider/shared.d.ts +17 -0
  513. package/dist/platform/observation/context-provider/shared.d.ts.map +1 -0
  514. package/dist/platform/observation/context-provider/shared.js +87 -0
  515. package/dist/platform/observation/context-provider/shared.js.map +1 -0
  516. package/dist/platform/observation/context-provider.d.ts +3 -28
  517. package/dist/platform/observation/context-provider.d.ts.map +1 -1
  518. package/dist/platform/observation/context-provider.js +7 -358
  519. package/dist/platform/observation/context-provider.js.map +1 -1
  520. package/dist/platform/observation/workspace-context.d.ts.map +1 -1
  521. package/dist/platform/observation/workspace-context.js +27 -0
  522. package/dist/platform/observation/workspace-context.js.map +1 -1
  523. package/dist/platform/soil/compiled-memory-projections.d.ts +2 -0
  524. package/dist/platform/soil/compiled-memory-projections.d.ts.map +1 -1
  525. package/dist/platform/soil/compiled-memory-projections.js +59 -0
  526. package/dist/platform/soil/compiled-memory-projections.js.map +1 -1
  527. package/dist/platform/soil/contracts.d.ts +2 -2
  528. package/dist/platform/soil/retriever.d.ts +25 -0
  529. package/dist/platform/soil/retriever.d.ts.map +1 -1
  530. package/dist/platform/soil/retriever.js +94 -5
  531. package/dist/platform/soil/retriever.js.map +1 -1
  532. package/dist/platform/soil/sqlite-repository-helpers.d.ts +80 -0
  533. package/dist/platform/soil/sqlite-repository-helpers.d.ts.map +1 -0
  534. package/dist/platform/soil/sqlite-repository-helpers.js +143 -0
  535. package/dist/platform/soil/sqlite-repository-helpers.js.map +1 -0
  536. package/dist/platform/soil/sqlite-repository-search.d.ts +8 -0
  537. package/dist/platform/soil/sqlite-repository-search.d.ts.map +1 -0
  538. package/dist/platform/soil/sqlite-repository-search.js +367 -0
  539. package/dist/platform/soil/sqlite-repository-search.js.map +1 -0
  540. package/dist/platform/soil/sqlite-repository-storage.d.ts +8 -0
  541. package/dist/platform/soil/sqlite-repository-storage.d.ts.map +1 -0
  542. package/dist/platform/soil/sqlite-repository-storage.js +278 -0
  543. package/dist/platform/soil/sqlite-repository-storage.js.map +1 -0
  544. package/dist/platform/soil/sqlite-repository.d.ts +1 -4
  545. package/dist/platform/soil/sqlite-repository.d.ts.map +1 -1
  546. package/dist/platform/soil/sqlite-repository.js +26 -820
  547. package/dist/platform/soil/sqlite-repository.js.map +1 -1
  548. package/dist/runtime/daemon/client.d.ts +13 -1
  549. package/dist/runtime/daemon/client.d.ts.map +1 -1
  550. package/dist/runtime/daemon/client.js +2 -2
  551. package/dist/runtime/daemon/client.js.map +1 -1
  552. package/dist/runtime/daemon/index.d.ts +1 -1
  553. package/dist/runtime/daemon/index.d.ts.map +1 -1
  554. package/dist/runtime/daemon/index.js +1 -1
  555. package/dist/runtime/daemon/index.js.map +1 -1
  556. package/dist/runtime/daemon/maintenance.d.ts +2 -10
  557. package/dist/runtime/daemon/maintenance.d.ts.map +1 -1
  558. package/dist/runtime/daemon/maintenance.js +14 -45
  559. package/dist/runtime/daemon/maintenance.js.map +1 -1
  560. package/dist/runtime/daemon/runner-bootstrap.d.ts +25 -0
  561. package/dist/runtime/daemon/runner-bootstrap.d.ts.map +1 -0
  562. package/dist/runtime/daemon/runner-bootstrap.js +77 -0
  563. package/dist/runtime/daemon/runner-bootstrap.js.map +1 -0
  564. package/dist/runtime/daemon/runner-commands.d.ts +14 -6
  565. package/dist/runtime/daemon/runner-commands.d.ts.map +1 -1
  566. package/dist/runtime/daemon/runner-commands.js +63 -17
  567. package/dist/runtime/daemon/runner-commands.js.map +1 -1
  568. package/dist/runtime/daemon/runner-goal-cycle.d.ts.map +1 -1
  569. package/dist/runtime/daemon/runner-goal-cycle.js +3 -5
  570. package/dist/runtime/daemon/runner-goal-cycle.js.map +1 -1
  571. package/dist/runtime/daemon/runner-resident-curiosity.d.ts +12 -0
  572. package/dist/runtime/daemon/runner-resident-curiosity.d.ts.map +1 -0
  573. package/dist/runtime/daemon/runner-resident-curiosity.js +155 -0
  574. package/dist/runtime/daemon/runner-resident-curiosity.js.map +1 -0
  575. package/dist/runtime/daemon/runner-resident-dream.d.ts +20 -0
  576. package/dist/runtime/daemon/runner-resident-dream.d.ts.map +1 -0
  577. package/dist/runtime/daemon/runner-resident-dream.js +148 -0
  578. package/dist/runtime/daemon/runner-resident-dream.js.map +1 -0
  579. package/dist/runtime/daemon/runner-resident-proactive.d.ts +4 -0
  580. package/dist/runtime/daemon/runner-resident-proactive.d.ts.map +1 -0
  581. package/dist/runtime/daemon/runner-resident-proactive.js +113 -0
  582. package/dist/runtime/daemon/runner-resident-proactive.js.map +1 -0
  583. package/dist/runtime/daemon/runner-resident-shared.d.ts +40 -0
  584. package/dist/runtime/daemon/runner-resident-shared.d.ts.map +1 -0
  585. package/dist/runtime/daemon/runner-resident-shared.js +101 -0
  586. package/dist/runtime/daemon/runner-resident-shared.js.map +1 -0
  587. package/dist/runtime/daemon/runner-resident.d.ts +4 -68
  588. package/dist/runtime/daemon/runner-resident.d.ts.map +1 -1
  589. package/dist/runtime/daemon/runner-resident.js +4 -506
  590. package/dist/runtime/daemon/runner-resident.js.map +1 -1
  591. package/dist/runtime/daemon/runner-runtime.d.ts +12 -0
  592. package/dist/runtime/daemon/runner-runtime.d.ts.map +1 -0
  593. package/dist/runtime/daemon/runner-runtime.js +43 -0
  594. package/dist/runtime/daemon/runner-runtime.js.map +1 -0
  595. package/dist/runtime/daemon/runner-startup.d.ts.map +1 -1
  596. package/dist/runtime/daemon/runner-startup.js +23 -3
  597. package/dist/runtime/daemon/runner-startup.js.map +1 -1
  598. package/dist/runtime/daemon/runner.d.ts +10 -23
  599. package/dist/runtime/daemon/runner.d.ts.map +1 -1
  600. package/dist/runtime/daemon/runner.js +29 -111
  601. package/dist/runtime/daemon/runner.js.map +1 -1
  602. package/dist/runtime/daemon/runtime-root.d.ts +5 -0
  603. package/dist/runtime/daemon/runtime-root.d.ts.map +1 -0
  604. package/dist/runtime/daemon/runtime-root.js +60 -0
  605. package/dist/runtime/daemon/runtime-root.js.map +1 -0
  606. package/dist/runtime/daemon/wait-deadline-resolver.d.ts +5 -2
  607. package/dist/runtime/daemon/wait-deadline-resolver.d.ts.map +1 -1
  608. package/dist/runtime/daemon/wait-deadline-resolver.js +55 -35
  609. package/dist/runtime/daemon/wait-deadline-resolver.js.map +1 -1
  610. package/dist/runtime/event/dispatcher.d.ts +0 -2
  611. package/dist/runtime/event/dispatcher.d.ts.map +1 -1
  612. package/dist/runtime/event/dispatcher.js +0 -4
  613. package/dist/runtime/event/dispatcher.js.map +1 -1
  614. package/dist/runtime/event/server-command-handler.d.ts.map +1 -1
  615. package/dist/runtime/event/server-command-handler.js +47 -3
  616. package/dist/runtime/event/server-command-handler.js.map +1 -1
  617. package/dist/runtime/executor/goal-worker.d.ts +3 -1
  618. package/dist/runtime/executor/goal-worker.d.ts.map +1 -1
  619. package/dist/runtime/executor/goal-worker.js +3 -1
  620. package/dist/runtime/executor/goal-worker.js.map +1 -1
  621. package/dist/runtime/executor/loop-supervisor.d.ts +27 -1
  622. package/dist/runtime/executor/loop-supervisor.d.ts.map +1 -1
  623. package/dist/runtime/executor/loop-supervisor.js +218 -13
  624. package/dist/runtime/executor/loop-supervisor.js.map +1 -1
  625. package/dist/runtime/gateway/telegram-gateway-adapter.d.ts.map +1 -1
  626. package/dist/runtime/gateway/telegram-gateway-adapter.js +2 -1
  627. package/dist/runtime/gateway/telegram-gateway-adapter.js.map +1 -1
  628. package/dist/runtime/schedule/engine-cron-reflection.d.ts +31 -0
  629. package/dist/runtime/schedule/engine-cron-reflection.d.ts.map +1 -0
  630. package/dist/runtime/schedule/engine-cron-reflection.js +229 -0
  631. package/dist/runtime/schedule/engine-cron-reflection.js.map +1 -0
  632. package/dist/runtime/schedule/engine-execution.d.ts +47 -0
  633. package/dist/runtime/schedule/engine-execution.d.ts.map +1 -0
  634. package/dist/runtime/schedule/engine-execution.js +424 -0
  635. package/dist/runtime/schedule/engine-execution.js.map +1 -0
  636. package/dist/runtime/schedule/engine-heartbeat.d.ts +5 -0
  637. package/dist/runtime/schedule/engine-heartbeat.d.ts.map +1 -0
  638. package/dist/runtime/schedule/engine-heartbeat.js +104 -0
  639. package/dist/runtime/schedule/engine-heartbeat.js.map +1 -0
  640. package/dist/runtime/schedule/engine-layers.d.ts +2 -0
  641. package/dist/runtime/schedule/engine-layers.d.ts.map +1 -1
  642. package/dist/runtime/schedule/engine-layers.js +12 -228
  643. package/dist/runtime/schedule/engine-layers.js.map +1 -1
  644. package/dist/runtime/schedule/engine-mutations.d.ts +37 -0
  645. package/dist/runtime/schedule/engine-mutations.d.ts.map +1 -0
  646. package/dist/runtime/schedule/engine-mutations.js +263 -0
  647. package/dist/runtime/schedule/engine-mutations.js.map +1 -0
  648. package/dist/runtime/schedule/engine.d.ts +11 -38
  649. package/dist/runtime/schedule/engine.d.ts.map +1 -1
  650. package/dist/runtime/schedule/engine.js +65 -810
  651. package/dist/runtime/schedule/engine.js.map +1 -1
  652. package/dist/runtime/schedule/history.d.ts +16 -0
  653. package/dist/runtime/schedule/history.d.ts.map +1 -1
  654. package/dist/runtime/schedule/history.js +8 -0
  655. package/dist/runtime/schedule/history.js.map +1 -1
  656. package/dist/runtime/schedule/index.d.ts +1 -0
  657. package/dist/runtime/schedule/index.d.ts.map +1 -1
  658. package/dist/runtime/schedule/index.js +1 -0
  659. package/dist/runtime/schedule/index.js.map +1 -1
  660. package/dist/runtime/schedule/legacy-cron-migration.d.ts +9 -0
  661. package/dist/runtime/schedule/legacy-cron-migration.d.ts.map +1 -0
  662. package/dist/runtime/schedule/legacy-cron-migration.js +89 -0
  663. package/dist/runtime/schedule/legacy-cron-migration.js.map +1 -0
  664. package/dist/runtime/schedule/wait-projection.d.ts +6 -0
  665. package/dist/runtime/schedule/wait-projection.d.ts.map +1 -0
  666. package/dist/runtime/schedule/wait-projection.js +102 -0
  667. package/dist/runtime/schedule/wait-projection.js.map +1 -0
  668. package/dist/runtime/session-registry/index.d.ts +3 -0
  669. package/dist/runtime/session-registry/index.d.ts.map +1 -0
  670. package/dist/runtime/session-registry/index.js +3 -0
  671. package/dist/runtime/session-registry/index.js.map +1 -0
  672. package/dist/runtime/session-registry/registry-helpers.d.ts +34 -0
  673. package/dist/runtime/session-registry/registry-helpers.d.ts.map +1 -0
  674. package/dist/runtime/session-registry/registry-helpers.js +241 -0
  675. package/dist/runtime/session-registry/registry-helpers.js.map +1 -0
  676. package/dist/runtime/session-registry/registry.d.ts +39 -0
  677. package/dist/runtime/session-registry/registry.d.ts.map +1 -0
  678. package/dist/runtime/session-registry/registry.js +532 -0
  679. package/dist/runtime/session-registry/registry.js.map +1 -0
  680. package/dist/runtime/session-registry/types.d.ts +985 -0
  681. package/dist/runtime/session-registry/types.d.ts.map +1 -0
  682. package/dist/runtime/session-registry/types.js +108 -0
  683. package/dist/runtime/session-registry/types.js.map +1 -0
  684. package/dist/runtime/store/background-run-store.d.ts +75 -0
  685. package/dist/runtime/store/background-run-store.d.ts.map +1 -0
  686. package/dist/runtime/store/background-run-store.js +157 -0
  687. package/dist/runtime/store/background-run-store.js.map +1 -0
  688. package/dist/runtime/store/index.d.ts +2 -0
  689. package/dist/runtime/store/index.d.ts.map +1 -1
  690. package/dist/runtime/store/index.js +1 -0
  691. package/dist/runtime/store/index.js.map +1 -1
  692. package/dist/runtime/store/runtime-operation-schemas.d.ts +12 -12
  693. package/dist/runtime/store/runtime-paths.d.ts +2 -0
  694. package/dist/runtime/store/runtime-paths.d.ts.map +1 -1
  695. package/dist/runtime/store/runtime-paths.js +6 -0
  696. package/dist/runtime/store/runtime-paths.js.map +1 -1
  697. package/dist/runtime/store/runtime-schemas.d.ts +2 -2
  698. package/dist/runtime/types/daemon.d.ts +13 -0
  699. package/dist/runtime/types/daemon.d.ts.map +1 -1
  700. package/dist/runtime/types/daemon.js +3 -0
  701. package/dist/runtime/types/daemon.js.map +1 -1
  702. package/dist/runtime/types/schedule.d.ts +65 -0
  703. package/dist/runtime/types/schedule.d.ts.map +1 -1
  704. package/dist/runtime/types/schedule.js +5 -0
  705. package/dist/runtime/types/schedule.js.map +1 -1
  706. package/dist/tools/builtin/exports.d.ts +5 -0
  707. package/dist/tools/builtin/exports.d.ts.map +1 -1
  708. package/dist/tools/builtin/exports.js +5 -0
  709. package/dist/tools/builtin/exports.js.map +1 -1
  710. package/dist/tools/builtin/factory.d.ts +2 -0
  711. package/dist/tools/builtin/factory.d.ts.map +1 -1
  712. package/dist/tools/builtin/factory.js +26 -1
  713. package/dist/tools/builtin/factory.js.map +1 -1
  714. package/dist/tools/fs/FileValidationTool/protected-path-policy.d.ts +1 -0
  715. package/dist/tools/fs/FileValidationTool/protected-path-policy.d.ts.map +1 -1
  716. package/dist/tools/fs/FileValidationTool/protected-path-policy.js +17 -4
  717. package/dist/tools/fs/FileValidationTool/protected-path-policy.js.map +1 -1
  718. package/dist/tools/fs/GlobTool/GlobTool.js +2 -2
  719. package/dist/tools/fs/GlobTool/GlobTool.js.map +1 -1
  720. package/dist/tools/fs/GrepTool/GrepTool.js +2 -2
  721. package/dist/tools/fs/GrepTool/GrepTool.js.map +1 -1
  722. package/dist/tools/fs/ListDirTool/ListDirTool.js +1 -1
  723. package/dist/tools/fs/ListDirTool/ListDirTool.js.map +1 -1
  724. package/dist/tools/fs/ReadTool/ReadTool.js +2 -2
  725. package/dist/tools/fs/ReadTool/ReadTool.js.map +1 -1
  726. package/dist/tools/kaggle/KaggleExperimentTools.d.ts +395 -0
  727. package/dist/tools/kaggle/KaggleExperimentTools.d.ts.map +1 -0
  728. package/dist/tools/kaggle/KaggleExperimentTools.js +923 -0
  729. package/dist/tools/kaggle/KaggleExperimentTools.js.map +1 -0
  730. package/dist/tools/kaggle/KaggleSubmissionTools.d.ts +241 -0
  731. package/dist/tools/kaggle/KaggleSubmissionTools.d.ts.map +1 -0
  732. package/dist/tools/kaggle/KaggleSubmissionTools.js +558 -0
  733. package/dist/tools/kaggle/KaggleSubmissionTools.js.map +1 -0
  734. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.d.ts +105 -0
  735. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.d.ts.map +1 -0
  736. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js +135 -0
  737. package/dist/tools/kaggle/KaggleWorkspacePrepareTool.js.map +1 -0
  738. package/dist/tools/kaggle/index.d.ts +6 -0
  739. package/dist/tools/kaggle/index.d.ts.map +1 -0
  740. package/dist/tools/kaggle/index.js +6 -0
  741. package/dist/tools/kaggle/index.js.map +1 -0
  742. package/dist/tools/kaggle/metrics.d.ts +89 -0
  743. package/dist/tools/kaggle/metrics.d.ts.map +1 -0
  744. package/dist/tools/kaggle/metrics.js +51 -0
  745. package/dist/tools/kaggle/metrics.js.map +1 -0
  746. package/dist/tools/kaggle/paths.d.ts +15 -0
  747. package/dist/tools/kaggle/paths.d.ts.map +1 -0
  748. package/dist/tools/kaggle/paths.js +142 -0
  749. package/dist/tools/kaggle/paths.js.map +1 -0
  750. package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts +2 -2
  751. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.d.ts +801 -0
  752. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.d.ts.map +1 -0
  753. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.js +147 -0
  754. package/dist/tools/query/CodeReadContextTool/CodeReadContextTool.js.map +1 -0
  755. package/dist/tools/query/CodeReadContextTool/constants.d.ts +5 -0
  756. package/dist/tools/query/CodeReadContextTool/constants.d.ts.map +1 -0
  757. package/dist/tools/query/CodeReadContextTool/constants.js +5 -0
  758. package/dist/tools/query/CodeReadContextTool/constants.js.map +1 -0
  759. package/dist/tools/query/CodeReadContextTool/prompt.d.ts +2 -0
  760. package/dist/tools/query/CodeReadContextTool/prompt.d.ts.map +1 -0
  761. package/dist/tools/query/CodeReadContextTool/prompt.js +6 -0
  762. package/dist/tools/query/CodeReadContextTool/prompt.js.map +1 -0
  763. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.d.ts +125 -0
  764. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.d.ts.map +1 -0
  765. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.js +118 -0
  766. package/dist/tools/query/CodeSearchRepairTool/CodeSearchRepairTool.js.map +1 -0
  767. package/dist/tools/query/CodeSearchRepairTool/constants.d.ts +5 -0
  768. package/dist/tools/query/CodeSearchRepairTool/constants.d.ts.map +1 -0
  769. package/dist/tools/query/CodeSearchRepairTool/constants.js +5 -0
  770. package/dist/tools/query/CodeSearchRepairTool/constants.js.map +1 -0
  771. package/dist/tools/query/CodeSearchRepairTool/prompt.d.ts +2 -0
  772. package/dist/tools/query/CodeSearchRepairTool/prompt.d.ts.map +1 -0
  773. package/dist/tools/query/CodeSearchRepairTool/prompt.js +5 -0
  774. package/dist/tools/query/CodeSearchRepairTool/prompt.js.map +1 -0
  775. package/dist/tools/query/CodeSearchTool/CodeSearchTool.d.ts +123 -0
  776. package/dist/tools/query/CodeSearchTool/CodeSearchTool.d.ts.map +1 -0
  777. package/dist/tools/query/CodeSearchTool/CodeSearchTool.js +117 -0
  778. package/dist/tools/query/CodeSearchTool/CodeSearchTool.js.map +1 -0
  779. package/dist/tools/query/CodeSearchTool/constants.d.ts +5 -0
  780. package/dist/tools/query/CodeSearchTool/constants.d.ts.map +1 -0
  781. package/dist/tools/query/CodeSearchTool/constants.js +5 -0
  782. package/dist/tools/query/CodeSearchTool/constants.js.map +1 -0
  783. package/dist/tools/query/CodeSearchTool/prompt.d.ts +2 -0
  784. package/dist/tools/query/CodeSearchTool/prompt.d.ts.map +1 -0
  785. package/dist/tools/query/CodeSearchTool/prompt.js +6 -0
  786. package/dist/tools/query/CodeSearchTool/prompt.js.map +1 -0
  787. package/dist/tools/query/SoilQueryTool/SoilQueryTool.d.ts.map +1 -1
  788. package/dist/tools/query/SoilQueryTool/SoilQueryTool.js +43 -9
  789. package/dist/tools/query/SoilQueryTool/SoilQueryTool.js.map +1 -1
  790. package/dist/tools/query/code-search-root.d.ts +8 -0
  791. package/dist/tools/query/code-search-root.d.ts.map +1 -0
  792. package/dist/tools/query/code-search-root.js +41 -0
  793. package/dist/tools/query/code-search-root.js.map +1 -0
  794. package/dist/tools/query/runtime-session-tools.d.ts +560 -0
  795. package/dist/tools/query/runtime-session-tools.d.ts.map +1 -0
  796. package/dist/tools/query/runtime-session-tools.js +1015 -0
  797. package/dist/tools/query/runtime-session-tools.js.map +1 -0
  798. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts +821 -0
  799. package/dist/tools/runtime/LongRunningRuntimeTools.d.ts.map +1 -0
  800. package/dist/tools/runtime/LongRunningRuntimeTools.js +845 -0
  801. package/dist/tools/runtime/LongRunningRuntimeTools.js.map +1 -0
  802. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.d.ts +1 -0
  803. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.d.ts.map +1 -1
  804. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.js +11 -0
  805. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.js.map +1 -1
  806. package/dist/tools/system/ShellTool/ShellTool.d.ts.map +1 -1
  807. package/dist/tools/system/ShellTool/ShellTool.js +2 -1
  808. package/dist/tools/system/ShellTool/ShellTool.js.map +1 -1
  809. package/dist/tools/types.d.ts +2 -0
  810. package/dist/tools/types.d.ts.map +1 -1
  811. package/dist/tools/types.js.map +1 -1
  812. package/package.json +2 -1
  813. package/dist/base/types/cron.d.ts +0 -2
  814. package/dist/base/types/cron.d.ts.map +0 -1
  815. package/dist/base/types/cron.js +0 -3
  816. package/dist/base/types/cron.js.map +0 -1
  817. package/dist/runtime/cron-scheduler.d.ts +0 -13
  818. package/dist/runtime/cron-scheduler.d.ts.map +0 -1
  819. package/dist/runtime/cron-scheduler.js +0 -90
  820. package/dist/runtime/cron-scheduler.js.map +0 -1
  821. package/dist/runtime/types/cron.d.ts +0 -59
  822. package/dist/runtime/types/cron.d.ts.map +0 -1
  823. package/dist/runtime/types/cron.js +0 -13
  824. package/dist/runtime/types/cron.js.map +0 -1
@@ -1,52 +1,25 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React, { useCallback, useState } from "react";
3
+ import { spawnSync } from "child_process";
4
+ import { mkdtempSync, writeFileSync } from "fs";
5
+ import { tmpdir } from "os";
6
+ import path from "path";
3
7
  import { Box, Text, useInput } from "ink";
4
- import { getClipboardContent } from "./clipboard.js";
8
+ import { copyToClipboard, getClipboardContent } from "./clipboard.js";
5
9
  import { logTuiDebug } from "./debug-log.js";
6
- import { theme } from "./theme.js";
7
10
  import { pickSpinnerVerb } from "./spinner-verbs.js";
8
- import { buildHiddenCursorEscapeFromPosition, CARET_MARKER, PROTECTED_ROW_MARKER, setActiveCursorEscape, } from "./cursor-tracker.js";
9
- import { measureCharWidth, measureTextWidth } from "./text-width.js";
11
+ import { buildHiddenCursorEscapeFromPosition, PROTECTED_ROW_MARKER, setActiveCursorEscape, } from "./cursor-tracker.js";
10
12
  import { isBashModeInput } from "./bash-mode.js";
11
13
  import { buildChatViewport } from "./chat/viewport.js";
12
- import { getScrollRequest, normalizeTerminalInputChunk, parseMouseEvent, } from "./chat/scroll.js";
13
- import { getMatchingSuggestions } from "./chat/suggestions.js";
14
+ import { getScrollLineStep, getScrollRequest, normalizeTerminalInputChunk, parseMouseEvent, } from "./chat/scroll.js";
15
+ import { writeTrustedTuiControl } from "./terminal-output.js";
16
+ import { CURSOR_HOME, ENTER_ALT_SCREEN, ERASE_SCREEN, EXIT_ALT_SCREEN, HIDE_CURSOR, SHOW_CURSOR, } from "./flicker/dec.js";
17
+ import { buildCollapsedPasteRange, buildComposerLines, buildFullscreenChatRenderLines, buildTranscriptRenderLines, buildTranscriptRows, copySelectedInputText, extractClickableTargetAt, formatCopyToast, formatTranscript, getCursorPositionFromComposerLayout, getMouseOffsetFromComposer, getMousePositionFromBody, getSelectedBodyText, getSelectedInputText, getSuggestions, normalizeBodySelection, normalizeSelection, shouldCollapsePastedText, } from "./fullscreen-chat-render.js";
18
+ export { buildComposerLines, buildFullscreenChatRenderLines, buildTranscriptRenderLines, buildCollapsedPasteRange, copySelectedInputText, extractClickableTargetAt, formatTranscript, getSelectedBodyText, getSelectedInputText, shouldCollapsePastedText, } from "./fullscreen-chat-render.js";
14
19
  const SCROLL_LINE_STEP = 1;
15
20
  const SCROLL_ANIMATION_INTERVAL_MS = 16;
16
- const DEFAULT_PROMPT = "◉";
17
- const BASH_PROMPT = "!";
18
- const SUGGESTION_HINT = " arrows to navigate, tab/enter to select, esc to dismiss";
19
- const INPUT_MARGIN = 4;
20
- const SELECTION_BACKGROUND = theme.text;
21
- const SELECTION_FOREGROUND = "#1F2329";
22
- const FAKE_CURSOR_GLYPH = "▌";
23
21
  const PROCESSING_SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
24
22
  const PROCESSING_SPINNER_INTERVAL_MS = 80;
25
- function charWidth(ch) {
26
- return measureCharWidth(ch);
27
- }
28
- function stringWidth(text) {
29
- return measureTextWidth(text);
30
- }
31
- function trimToWidth(text, width) {
32
- if (width <= 0)
33
- return "";
34
- let out = "";
35
- let used = 0;
36
- for (const ch of text) {
37
- const next = charWidth(ch);
38
- if (used + next > width)
39
- break;
40
- out += ch;
41
- used += next;
42
- }
43
- return out;
44
- }
45
- function padToWidth(text, width) {
46
- const trimmed = trimToWidth(text, width);
47
- const padding = Math.max(0, width - stringWidth(trimmed));
48
- return trimmed + " ".repeat(padding);
49
- }
50
23
  function getPreviousOffset(text, offset) {
51
24
  if (offset <= 0)
52
25
  return 0;
@@ -89,372 +62,59 @@ function isDeleteInput(inputChar, key) {
89
62
  function summarizeKey(key) {
90
63
  return Object.fromEntries(Object.entries(key).filter(([, value]) => value === true));
91
64
  }
92
- function getPromptLabel(bashMode) {
93
- return bashMode ? BASH_PROMPT : DEFAULT_PROMPT;
94
- }
95
- function getPlaceholder(bashMode) {
96
- return bashMode ? "! for bash mode" : "/ for commands";
97
- }
98
- function formatSuggestionLabel(suggestion) {
99
- return suggestion.type === "goal"
100
- ? ` ${suggestion.name} ${suggestion.description.padEnd(20)} [goal]`
101
- : ` ${suggestion.name.padEnd(20)}${suggestion.description}`;
102
- }
103
- function normalizeSelection(selection) {
104
- if (!selection || selection.anchor === selection.focus) {
105
- return null;
106
- }
107
- return {
108
- start: Math.min(selection.anchor, selection.focus),
109
- end: Math.max(selection.anchor, selection.focus),
110
- };
111
- }
112
- function pushSegment(segments, text, style = {}) {
113
- if (text.length === 0)
114
- return;
115
- const previous = segments[segments.length - 1];
116
- if (previous &&
117
- previous.color === style.color &&
118
- previous.backgroundColor === style.backgroundColor &&
119
- previous.bold === style.bold &&
120
- previous.dim === style.dim) {
121
- previous.text += text;
122
- return;
123
- }
124
- segments.push({ text, ...style });
125
- }
126
- function buildInputRows(input, cursorOffset, contentWidth, placeholder, selection) {
127
- if (contentWidth <= 0) {
128
- return {
129
- rows: [{
130
- cells: [{
131
- text: CARET_MARKER,
132
- width: 0,
133
- offsetBefore: cursorOffset,
134
- offsetAfter: cursorOffset,
135
- }],
136
- startOffset: cursorOffset,
137
- endOffset: cursorOffset,
138
- }],
139
- };
140
- }
141
- if (input.length === 0) {
142
- const cells = [{
143
- text: CARET_MARKER,
144
- width: 0,
145
- offsetBefore: 0,
146
- offsetAfter: 0,
147
- }];
148
- for (const ch of trimToWidth(placeholder, Math.max(0, contentWidth - 1))) {
149
- cells.push({
150
- text: ch,
151
- width: charWidth(ch),
152
- offsetBefore: 0,
153
- offsetAfter: 0,
154
- placeholder: true,
155
- });
156
- }
157
- return {
158
- rows: [{
159
- cells,
160
- startOffset: 0,
161
- endOffset: 0,
162
- }],
163
- };
164
- }
165
- const rows = [];
166
- let currentCells = [];
167
- let currentWidth = 0;
168
- let rowStartOffset = 0;
169
- let rowEndOffset = 0;
170
- const pushRow = () => {
171
- rows.push({
172
- cells: currentCells,
173
- startOffset: rowStartOffset,
174
- endOffset: rowEndOffset,
175
- });
176
- currentCells = [];
177
- currentWidth = 0;
178
- };
179
- let offset = 0;
180
- while (offset <= input.length) {
181
- if (offset === cursorOffset) {
182
- if (currentWidth >= contentWidth && currentCells.length > 0) {
183
- pushRow();
184
- rowStartOffset = offset;
185
- rowEndOffset = offset;
186
- }
187
- currentCells.push({
188
- text: CARET_MARKER,
189
- width: 0,
190
- offsetBefore: offset,
191
- offsetAfter: offset,
192
- });
65
+ function openClickableTarget(target) {
66
+ if (/^https?:\/\//.test(target)) {
67
+ if (process.platform === "darwin") {
68
+ return spawnSync("open", [target], { stdio: "ignore" }).status === 0;
193
69
  }
194
- if (offset === input.length) {
195
- break;
70
+ if (process.platform === "linux") {
71
+ return spawnSync("xdg-open", [target], { stdio: "ignore" }).status === 0;
196
72
  }
197
- const codePoint = input.codePointAt(offset) ?? 0;
198
- const ch = String.fromCodePoint(codePoint);
199
- const nextOffset = offset + ch.length;
200
- if (ch === "\n") {
201
- pushRow();
202
- rowStartOffset = nextOffset;
203
- rowEndOffset = nextOffset;
204
- offset = nextOffset;
205
- continue;
206
- }
207
- const width = charWidth(ch);
208
- if (currentWidth + width > contentWidth && currentCells.length > 0) {
209
- pushRow();
210
- rowStartOffset = offset;
211
- rowEndOffset = offset;
212
- }
213
- currentCells.push({
214
- text: ch,
215
- width,
216
- offsetBefore: offset,
217
- offsetAfter: nextOffset,
218
- selected: selection !== null &&
219
- offset < selection.end &&
220
- nextOffset > selection.start,
221
- });
222
- currentWidth += width;
223
- rowEndOffset = nextOffset;
224
- offset = nextOffset;
73
+ return false;
225
74
  }
226
- rows.push({
227
- cells: currentCells,
228
- startOffset: rowStartOffset,
229
- endOffset: rowEndOffset,
230
- });
231
- return { rows };
232
- }
233
- function buildInputContentSegments(row, contentWidth, bashMode) {
234
- const segments = [];
235
- const defaultColor = bashMode ? theme.command : undefined;
236
- let usedWidth = 0;
237
- for (const cell of row.cells) {
238
- if (cell.text === CARET_MARKER) {
239
- pushSegment(segments, FAKE_CURSOR_GLYPH, {
240
- color: theme.text,
241
- bold: true,
242
- });
243
- usedWidth += 1;
244
- continue;
245
- }
246
- usedWidth += cell.width;
247
- if (cell.selected) {
248
- pushSegment(segments, cell.text, {
249
- color: SELECTION_FOREGROUND,
250
- backgroundColor: SELECTION_BACKGROUND,
251
- });
252
- continue;
253
- }
254
- pushSegment(segments, cell.text, {
255
- color: defaultColor,
256
- dim: cell.placeholder,
257
- });
75
+ const [filePart, linePart] = target.split(/:(\d+)$/);
76
+ const resolvedPath = path.resolve(process.cwd(), filePart || target);
77
+ const editor = process.env.VISUAL || process.env.EDITOR;
78
+ if (editor) {
79
+ const editorTarget = linePart ? `${resolvedPath}:${linePart}` : resolvedPath;
80
+ return spawnSync(editor, [editorTarget], { stdio: "ignore", shell: true }).status === 0;
258
81
  }
259
- if (usedWidth < contentWidth) {
260
- pushSegment(segments, " ".repeat(contentWidth - usedWidth), {
261
- color: defaultColor,
262
- });
82
+ if (process.platform === "darwin") {
83
+ return spawnSync("open", [resolvedPath], { stdio: "ignore" }).status === 0;
263
84
  }
264
- return segments;
265
- }
266
- function getCursorPositionFromComposerLayout(layout) {
267
- for (let rowIndex = 0; rowIndex < layout.rows.length; rowIndex += 1) {
268
- const row = layout.rows[rowIndex];
269
- if (!row)
270
- continue;
271
- let colOffset = 0;
272
- for (const cell of row.cells) {
273
- if (cell.text === CARET_MARKER) {
274
- return {
275
- x: layout.contentStartCol + colOffset - 1,
276
- y: layout.startLine + rowIndex - 1,
277
- };
278
- }
279
- colOffset += cell.width;
280
- }
85
+ if (process.platform === "linux") {
86
+ return spawnSync("xdg-open", [resolvedPath], { stdio: "ignore" }).status === 0;
281
87
  }
282
- return null;
88
+ return false;
283
89
  }
284
- function buildComposerLines(args) {
285
- const { cols, input, cursorOffset, bashMode, emptyHint, matches, selectedIdx, copyToast, selection, } = args;
286
- const lines = [];
287
- lines.push({
288
- key: "copy-toast",
289
- text: padToWidth(copyToast ?? "", cols),
290
- color: copyToast ? "cyan" : undefined,
291
- });
292
- const innerWidth = Math.max(1, cols - 2);
293
- const promptLabel = getPromptLabel(bashMode);
294
- const prompt = `${promptLabel} `;
295
- const promptWidth = stringWidth(prompt);
296
- const contentWidth = Math.max(1, innerWidth - INPUT_MARGIN - promptWidth);
297
- const inputRender = buildInputRows(input, cursorOffset, contentWidth, getPlaceholder(bashMode), selection);
298
- const inputRows = inputRender.rows;
299
- lines.push({
300
- key: "composer-top",
301
- text: padToWidth(`┌${"─".repeat(Math.max(0, cols - 2))}┐`, cols),
302
- color: bashMode ? theme.command : theme.border,
303
- });
304
- inputRows.forEach((row, index) => {
305
- const segments = [];
306
- const borderColor = bashMode ? theme.command : undefined;
307
- const promptColor = bashMode ? theme.command : theme.userPrompt;
308
- pushSegment(segments, "│ ", { color: borderColor });
309
- if (index === 0) {
310
- pushSegment(segments, promptLabel, { color: promptColor, bold: true });
311
- pushSegment(segments, " ", { color: promptColor, bold: true });
312
- }
313
- else {
314
- pushSegment(segments, " ".repeat(promptWidth), { color: borderColor });
315
- }
316
- segments.push(...buildInputContentSegments(row, contentWidth, bashMode));
317
- pushSegment(segments, " │", { color: borderColor });
318
- lines.push({
319
- key: `composer-row-${index}`,
320
- segments,
321
- protected: true,
322
- });
323
- });
324
- lines.push({
325
- key: "composer-bottom",
326
- text: padToWidth(`└${"─".repeat(Math.max(0, cols - 2))}┘`, cols),
327
- color: bashMode ? theme.command : theme.border,
328
- });
329
- if (bashMode) {
330
- lines.push({
331
- key: "bash-hint",
332
- text: padToWidth("! for bash mode", cols),
333
- color: theme.command,
334
- });
335
- }
336
- if (emptyHint) {
337
- lines.push({
338
- key: "empty-hint",
339
- text: padToWidth(" Type a message or /help for commands", cols),
340
- dim: true,
341
- });
342
- }
343
- if (matches.length > 0) {
344
- matches.forEach((suggestion, index) => {
345
- lines.push({
346
- key: `suggestion-${index}`,
347
- text: padToWidth(formatSuggestionLabel(suggestion), cols),
348
- color: index === selectedIdx ? theme.selected : undefined,
349
- bold: index === selectedIdx,
350
- dim: index !== selectedIdx,
351
- });
352
- });
353
- lines.push({
354
- key: "suggestion-hint",
355
- text: padToWidth(SUGGESTION_HINT, cols),
356
- dim: true,
357
- });
358
- }
359
- return {
360
- lines,
361
- inputRows,
362
- inputRowStartIndex: 2,
363
- contentStartCol: 3 + promptWidth,
364
- };
90
+ function writeTranscriptToNativeScrollback(messages) {
91
+ const transcript = formatTranscript(messages);
92
+ writeTrustedTuiControl(SHOW_CURSOR +
93
+ EXIT_ALT_SCREEN +
94
+ `\n${transcript}\n` +
95
+ ENTER_ALT_SCREEN +
96
+ ERASE_SCREEN +
97
+ CURSOR_HOME +
98
+ HIDE_CURSOR);
365
99
  }
366
- function renderMessageRow(row, cols) {
367
- if (row.kind === "spacer") {
368
- return { key: row.key, text: " ".repeat(cols) };
369
- }
370
- return {
371
- key: row.key,
372
- text: padToWidth(row.text, cols),
373
- color: row.color,
374
- backgroundColor: row.backgroundColor,
375
- bold: row.bold,
376
- dim: row.dim,
377
- };
378
- }
379
- export function buildFullscreenChatRenderLines({ availableCols, availableRows, viewport, composerLines, isProcessing, spinnerGlyph, spinnerVerb, }) {
380
- const lines = [];
381
- lines.push({
382
- key: "indicator-top",
383
- text: padToWidth(viewport.hiddenAboveRows > 0 ? `↑ ${viewport.hiddenAboveRows} earlier lines` : "", availableCols),
384
- dim: true,
385
- });
386
- const renderedRows = viewport.rows.map((row) => renderMessageRow(row, availableCols));
387
- const fillerCount = Math.max(0, viewport.maxVisibleRows - renderedRows.length);
388
- for (let index = 0; index < fillerCount; index += 1) {
389
- lines.push({ key: `filler-${index}`, text: " ".repeat(availableCols) });
390
- }
391
- lines.push(...renderedRows);
392
- lines.push({
393
- key: "indicator-bottom",
394
- text: padToWidth(viewport.hiddenBelowRows > 0 ? `↓ ${viewport.hiddenBelowRows} newer lines` : "", availableCols),
395
- dim: true,
396
- });
397
- lines.push({
398
- key: "processing",
399
- text: padToWidth(isProcessing ? `${spinnerGlyph} ${spinnerVerb}...` : "", availableCols),
400
- color: isProcessing ? theme.command : undefined,
401
- dim: !isProcessing,
402
- });
403
- lines.push(...composerLines);
404
- while (lines.length < availableRows) {
405
- lines.push({
406
- key: `tail-filler-${lines.length}`,
407
- text: " ".repeat(availableCols),
408
- });
409
- }
410
- return lines.slice(0, availableRows);
411
- }
412
- function getMouseOffsetFromComposer(layout, x, y, clampOutside) {
413
- if (layout.rows.length === 0) {
414
- return null;
415
- }
416
- let rowIndex = y - layout.startLine;
417
- if (rowIndex < 0) {
418
- if (!clampOutside)
419
- return null;
420
- rowIndex = 0;
421
- }
422
- if (rowIndex >= layout.rows.length) {
423
- if (!clampOutside)
424
- return null;
425
- rowIndex = layout.rows.length - 1;
426
- }
427
- const row = layout.rows[rowIndex];
428
- if (!row) {
429
- return null;
430
- }
431
- if (row.startOffset === row.endOffset) {
432
- return row.startOffset;
433
- }
434
- const localCol = x - layout.contentStartCol;
435
- if (localCol <= 0) {
436
- return row.startOffset;
437
- }
438
- let usedWidth = 0;
439
- for (const cell of row.cells) {
440
- if (cell.placeholder || cell.width <= 0) {
441
- continue;
442
- }
443
- const midpoint = usedWidth + cell.width / 2;
444
- if (localCol <= midpoint) {
445
- return cell.offsetBefore;
446
- }
447
- usedWidth += cell.width;
448
- if (localCol <= usedWidth) {
449
- return cell.offsetAfter;
450
- }
100
+ function openTranscriptInEditor(messages) {
101
+ const editor = process.env.VISUAL || process.env.EDITOR;
102
+ if (!editor) {
103
+ return { ok: false };
451
104
  }
452
- return row.endOffset;
105
+ const dir = mkdtempSync(path.join(tmpdir(), "pulseed-transcript-"));
106
+ const filePath = path.join(dir, "transcript.md");
107
+ writeFileSync(filePath, formatTranscript(messages), "utf8");
108
+ writeTrustedTuiControl(SHOW_CURSOR + EXIT_ALT_SCREEN);
109
+ const result = spawnSync(editor, [filePath], { stdio: "inherit", shell: true });
110
+ writeTrustedTuiControl(ENTER_ALT_SCREEN + ERASE_SCREEN + CURSOR_HOME + HIDE_CURSOR);
111
+ return result.status === 0 ? { ok: true, method: "osc52" } : { ok: false };
453
112
  }
454
113
  export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goalNames = [], availableRows, availableCols, cursorOriginX = 0, cursorOriginY = 0, }) {
455
114
  const [input, setInput] = useState("");
456
115
  const [cursorOffset, setCursorOffset] = useState(0);
457
116
  const [selection, setSelection] = useState(null);
117
+ const [collapsedPaste, setCollapsedPaste] = useState(null);
458
118
  const selectionAnchor = React.useRef(null);
459
119
  const [selectedIdx, setSelectedIdx] = useState(0);
460
120
  const justSelected = React.useRef(false);
@@ -466,6 +126,12 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
466
126
  const emptyHintTimer = React.useRef(null);
467
127
  const [scrollOffset, setScrollOffset] = React.useState(0);
468
128
  const [targetScrollOffset, setTargetScrollOffset] = React.useState(0);
129
+ const [bodySelection, setBodySelection] = React.useState(null);
130
+ const bodySelectionAnchor = React.useRef(null);
131
+ const [transcriptMode, setTranscriptMode] = React.useState(false);
132
+ const [transcriptScrollOffset, setTranscriptScrollOffset] = React.useState(0);
133
+ const [transcriptSearchQuery, setTranscriptSearchQuery] = React.useState("");
134
+ const [transcriptSearchMode, setTranscriptSearchMode] = React.useState(false);
469
135
  const [spinnerVerb, setSpinnerVerb] = React.useState(() => pickSpinnerVerb());
470
136
  const [spinnerFrameIndex, setSpinnerFrameIndex] = React.useState(0);
471
137
  React.useEffect(() => {
@@ -515,22 +181,32 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
515
181
  selectionAnchor.current = null;
516
182
  setSelection(null);
517
183
  }, []);
518
- const replaceInputRange = useCallback((start, end, replacement) => {
184
+ const clearBodySelection = useCallback(() => {
185
+ bodySelectionAnchor.current = null;
186
+ setBodySelection(null);
187
+ }, []);
188
+ const replaceInputRange = useCallback((start, end, replacement, nextCollapsedPaste = null) => {
519
189
  const next = input.slice(0, start) + replacement + input.slice(end);
520
190
  setInput(next);
521
191
  setCursorOffset(start + replacement.length);
192
+ setCollapsedPaste(nextCollapsedPaste);
522
193
  clearSelection();
523
194
  }, [clearSelection, input]);
524
- const insertText = useCallback((text) => {
195
+ const insertText = useCallback((text, options = {}) => {
525
196
  justSelected.current = false;
526
197
  const selectedRange = normalizeSelection(selection);
198
+ const start = selectedRange ? selectedRange.start : cursorOffset;
199
+ const nextCollapsedPaste = options.collapsePaste
200
+ ? buildCollapsedPasteRange(text, start)
201
+ : null;
527
202
  if (selectedRange) {
528
- replaceInputRange(selectedRange.start, selectedRange.end, text);
203
+ replaceInputRange(selectedRange.start, selectedRange.end, text, nextCollapsedPaste);
529
204
  return;
530
205
  }
531
206
  const next = input.slice(0, cursorOffset) + text + input.slice(cursorOffset);
532
207
  setInput(next);
533
208
  setCursorOffset(cursorOffset + text.length);
209
+ setCollapsedPaste(nextCollapsedPaste);
534
210
  clearSelection();
535
211
  }, [clearSelection, cursorOffset, input, replaceInputRange, selection]);
536
212
  const deleteSelection = useCallback(() => {
@@ -541,7 +217,20 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
541
217
  replaceInputRange(selectedRange.start, selectedRange.end, "");
542
218
  return true;
543
219
  }, [replaceInputRange, selection]);
544
- const matches = justSelected.current ? [] : getMatchingSuggestions(input, goalNames);
220
+ const copySelectedInput = useCallback((nextSelection) => {
221
+ const selectedText = getSelectedInputText(input, nextSelection);
222
+ if (!selectedText) {
223
+ return;
224
+ }
225
+ void copySelectedInputText(input, nextSelection).then((result) => {
226
+ if (!result.ok) {
227
+ return;
228
+ }
229
+ setCopyToast(formatCopyToast(selectedText.length, result));
230
+ setTimeout(() => setCopyToast(null), 2000);
231
+ });
232
+ }, [input]);
233
+ const matches = justSelected.current ? [] : getSuggestions(input, goalNames);
545
234
  const hasMatches = matches.length > 0;
546
235
  const bashMode = isBashModeInput(input);
547
236
  const normalizedSelection = normalizeSelection(selection);
@@ -555,10 +244,22 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
555
244
  selectedIdx,
556
245
  copyToast,
557
246
  selection: normalizedSelection,
247
+ collapsedPaste,
558
248
  });
559
249
  const messageRows = Math.max(1, availableRows - composer.lines.length - 3);
560
250
  const viewport = buildChatViewport(messages, availableCols, messageRows, scrollOffset);
561
251
  const maxScrollOffset = Math.max(0, viewport.totalRows - viewport.maxVisibleRows);
252
+ const bodySelectionRange = normalizeBodySelection(bodySelection);
253
+ const viewportFillerRows = Math.max(0, viewport.maxVisibleRows - viewport.rows.length);
254
+ const transcript = buildTranscriptRenderLines({
255
+ messages,
256
+ cols: availableCols,
257
+ rows: availableRows,
258
+ scrollOffset: transcriptScrollOffset,
259
+ searchQuery: transcriptSearchQuery,
260
+ searchMode: transcriptSearchMode,
261
+ status: copyToast,
262
+ });
562
263
  const composerLayout = {
563
264
  startLine: viewport.maxVisibleRows + 3 + composer.inputRowStartIndex + 1,
564
265
  contentStartCol: composer.contentStartCol,
@@ -583,6 +284,9 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
583
284
  setScrollOffset((prev) => Math.min(prev, maxScrollOffset));
584
285
  setTargetScrollOffset((prev) => Math.min(prev, maxScrollOffset));
585
286
  }, [maxScrollOffset]);
287
+ React.useEffect(() => {
288
+ setTranscriptScrollOffset((prev) => Math.min(prev, transcript.maxScrollOffset));
289
+ }, [transcript.maxScrollOffset]);
586
290
  React.useEffect(() => {
587
291
  if (scrollOffset === targetScrollOffset) {
588
292
  return;
@@ -601,18 +305,63 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
601
305
  }, [scrollOffset, targetScrollOffset]);
602
306
  const applyScroll = useCallback((direction, kind) => {
603
307
  setTargetScrollOffset((prev) => {
308
+ if (kind === "top")
309
+ return maxScrollOffset;
310
+ if (kind === "bottom")
311
+ return 0;
604
312
  const amount = kind === "page" ? viewport.maxVisibleRows : SCROLL_LINE_STEP;
605
- const delta = direction === "up" ? amount : -amount;
313
+ const effectiveAmount = kind === "line" ? amount * getScrollLineStep() : amount;
314
+ const delta = direction === "up" ? effectiveAmount : -effectiveAmount;
606
315
  return Math.max(0, Math.min(maxScrollOffset, prev + delta));
607
316
  });
608
317
  }, [maxScrollOffset, viewport.maxVisibleRows]);
318
+ const applyTranscriptScroll = useCallback((direction, kind) => {
319
+ setTranscriptScrollOffset((prev) => {
320
+ if (kind === "top")
321
+ return 0;
322
+ if (kind === "bottom")
323
+ return transcript.maxScrollOffset;
324
+ const pageRows = Math.max(1, availableRows - 2);
325
+ const amount = kind === "page" ? pageRows : getScrollLineStep();
326
+ const delta = direction === "up" ? -amount : amount;
327
+ return Math.max(0, Math.min(transcript.maxScrollOffset, prev + delta));
328
+ });
329
+ }, [availableRows, transcript.maxScrollOffset]);
330
+ const jumpToTranscriptMatch = useCallback((direction) => {
331
+ if (!transcriptSearchQuery)
332
+ return;
333
+ const rows = buildTranscriptRows(messages, availableCols);
334
+ const query = transcriptSearchQuery.toLowerCase();
335
+ const matches = rows
336
+ .map((row, index) => ({ row, index }))
337
+ .filter(({ row }) => row.toLowerCase().includes(query))
338
+ .map(({ index }) => index);
339
+ if (matches.length === 0)
340
+ return;
341
+ const current = direction === "next"
342
+ ? matches.find((index) => index > transcriptScrollOffset)
343
+ : [...matches].reverse().find((index) => index < transcriptScrollOffset);
344
+ setTranscriptScrollOffset(current ?? (direction === "next" ? matches[0] : matches[matches.length - 1]));
345
+ }, [availableCols, messages, transcriptScrollOffset, transcriptSearchQuery]);
346
+ useInput((inputChar, key) => {
347
+ if (transcriptMode)
348
+ return;
349
+ const scrollRequest = getScrollRequest(inputChar, key);
350
+ if (!scrollRequest)
351
+ return;
352
+ logTuiDebug("fullscreen-chat", "processing-scroll-request", {
353
+ direction: scrollRequest.direction,
354
+ kind: scrollRequest.kind,
355
+ });
356
+ applyScroll(scrollRequest.direction, scrollRequest.kind);
357
+ }, { isActive: isProcessing });
609
358
  const handleSubmit = useCallback((value) => {
610
359
  logTuiDebug("fullscreen-chat", "submit-attempt", {
611
360
  value,
612
361
  hasMatches,
613
362
  isProcessing,
614
363
  });
615
- if (hasMatches || isProcessing)
364
+ if (hasMatches)
616
365
  return;
617
366
  if (!value.trim()) {
618
367
  setEmptyHint(true);
@@ -626,6 +375,7 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
626
375
  onClear?.();
627
376
  setInput("");
628
377
  setCursorOffset(0);
378
+ setCollapsedPaste(null);
629
379
  clearSelection();
630
380
  setHistory((prev) => [...prev, trimmed]);
631
381
  setHistoryIdx(-1);
@@ -633,16 +383,102 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
633
383
  setTargetScrollOffset(0);
634
384
  return;
635
385
  }
636
- onSubmit(trimmed);
386
+ onSubmit(value);
637
387
  setInput("");
638
388
  setCursorOffset(0);
389
+ setCollapsedPaste(null);
639
390
  clearSelection();
640
- setHistory((prev) => [...prev, trimmed]);
391
+ setHistory((prev) => [...prev, value]);
641
392
  setHistoryIdx(-1);
642
393
  setScrollOffset(0);
643
394
  setTargetScrollOffset(0);
644
395
  }, [clearSelection, hasMatches, isProcessing, onClear, onSubmit]);
645
396
  useInput((inputChar, key) => {
397
+ if (key.ctrl && (inputChar === "o" || inputChar === "O")) {
398
+ setTranscriptMode((prev) => !prev);
399
+ setTranscriptSearchMode(false);
400
+ return;
401
+ }
402
+ if (transcriptMode) {
403
+ if (transcriptSearchMode) {
404
+ if (key.escape) {
405
+ setTranscriptSearchMode(false);
406
+ return;
407
+ }
408
+ if (key.return) {
409
+ setTranscriptSearchMode(false);
410
+ jumpToTranscriptMatch("next");
411
+ return;
412
+ }
413
+ if (isBackspaceInput(inputChar, key)) {
414
+ setTranscriptSearchQuery((prev) => prev.slice(0, -1));
415
+ return;
416
+ }
417
+ if (inputChar && !key.ctrl && !key.meta) {
418
+ setTranscriptSearchQuery((prev) => prev + inputChar);
419
+ }
420
+ return;
421
+ }
422
+ if (key.escape || inputChar === "q") {
423
+ setTranscriptMode(false);
424
+ return;
425
+ }
426
+ if (inputChar === "/") {
427
+ setTranscriptSearchMode(true);
428
+ setTranscriptSearchQuery("");
429
+ return;
430
+ }
431
+ if (inputChar === "n") {
432
+ jumpToTranscriptMatch("next");
433
+ return;
434
+ }
435
+ if (inputChar === "N") {
436
+ jumpToTranscriptMatch("previous");
437
+ return;
438
+ }
439
+ if (inputChar === "[") {
440
+ writeTranscriptToNativeScrollback(messages);
441
+ setCopyToast("wrote transcript to terminal scrollback");
442
+ setTimeout(() => setCopyToast(null), 2000);
443
+ return;
444
+ }
445
+ if (inputChar === "v") {
446
+ const result = openTranscriptInEditor(messages);
447
+ setCopyToast(result.ok ? "opened transcript in editor" : "set VISUAL or EDITOR to open transcript");
448
+ setTimeout(() => setCopyToast(null), 2000);
449
+ return;
450
+ }
451
+ if (inputChar === "g" || key.home) {
452
+ applyTranscriptScroll("up", "top");
453
+ return;
454
+ }
455
+ if (inputChar === "G" || key.end) {
456
+ applyTranscriptScroll("down", "bottom");
457
+ return;
458
+ }
459
+ if (inputChar === "j" || key.downArrow) {
460
+ applyTranscriptScroll("down", "line");
461
+ return;
462
+ }
463
+ if (inputChar === "k" || key.upArrow) {
464
+ applyTranscriptScroll("up", "line");
465
+ return;
466
+ }
467
+ const transcriptScrollRequest = getScrollRequest(inputChar, key);
468
+ if (transcriptScrollRequest) {
469
+ applyTranscriptScroll(transcriptScrollRequest.direction, transcriptScrollRequest.kind);
470
+ return;
471
+ }
472
+ if (inputChar === " " || (key.ctrl && inputChar === "f")) {
473
+ applyTranscriptScroll("down", "page");
474
+ return;
475
+ }
476
+ if (inputChar === "b" || (key.ctrl && inputChar === "b")) {
477
+ applyTranscriptScroll("up", "page");
478
+ return;
479
+ }
480
+ return;
481
+ }
646
482
  logTuiDebug("fullscreen-chat", "input-event", {
647
483
  inputChar,
648
484
  key: summarizeKey(key),
@@ -657,12 +493,16 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
657
493
  direction: scrollRequest.direction,
658
494
  kind: scrollRequest.kind,
659
495
  });
660
- applyScroll(scrollRequest.direction, scrollRequest.kind);
496
+ if (!isProcessing) {
497
+ applyScroll(scrollRequest.direction, scrollRequest.kind);
498
+ }
661
499
  return;
662
500
  }
663
501
  const mouseEvent = parseMouseEvent(inputChar);
664
502
  if (mouseEvent && mouseEvent.kind !== "wheel" && mouseEvent.button === "left") {
665
- const offset = getMouseOffsetFromComposer(composerLayout, mouseEvent.x, mouseEvent.y, mouseEvent.kind !== "press" && selectionAnchor.current !== null);
503
+ const localMouseX = mouseEvent.x - cursorOriginX;
504
+ const localMouseY = mouseEvent.y - cursorOriginY;
505
+ const offset = getMouseOffsetFromComposer(composerLayout, localMouseX, localMouseY, mouseEvent.kind !== "press" && selectionAnchor.current !== null);
666
506
  if (mouseEvent.kind === "release" && offset === null) {
667
507
  selectionAnchor.current = null;
668
508
  return;
@@ -681,12 +521,51 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
681
521
  const nextSelection = { anchor: selectionAnchor.current, focus: offset };
682
522
  selectionAnchor.current = null;
683
523
  setSelection(nextSelection.anchor === nextSelection.focus ? null : nextSelection);
524
+ copySelectedInput(nextSelection);
684
525
  }
685
526
  return;
686
527
  }
528
+ const bodyPosition = getMousePositionFromBody(viewport.rows, localMouseX, localMouseY, viewportFillerRows);
529
+ if (bodyPosition !== null) {
530
+ clearSelection();
531
+ if (mouseEvent.kind === "press") {
532
+ bodySelectionAnchor.current = bodyPosition;
533
+ setBodySelection({ anchor: bodyPosition, focus: bodyPosition });
534
+ return;
535
+ }
536
+ if (mouseEvent.kind === "drag" && bodySelectionAnchor.current !== null) {
537
+ setBodySelection({ anchor: bodySelectionAnchor.current, focus: bodyPosition });
538
+ return;
539
+ }
540
+ if (mouseEvent.kind === "release" && bodySelectionAnchor.current !== null) {
541
+ const nextSelection = { anchor: bodySelectionAnchor.current, focus: bodyPosition };
542
+ bodySelectionAnchor.current = null;
543
+ setBodySelection(nextSelection);
544
+ const selectedText = getSelectedBodyText(viewport.rows, nextSelection);
545
+ if (selectedText) {
546
+ void copyToClipboard(selectedText).then((result) => {
547
+ if (!result.ok)
548
+ return;
549
+ setCopyToast(formatCopyToast(selectedText.length, result));
550
+ setTimeout(() => setCopyToast(null), 2000);
551
+ });
552
+ }
553
+ else {
554
+ const row = viewport.rows[bodyPosition.rowIndex];
555
+ const target = row ? extractClickableTargetAt(row.text, bodyPosition.offset) : null;
556
+ if (target) {
557
+ const opened = openClickableTarget(target);
558
+ setCopyToast(opened ? `opened ${target}` : `could not open ${target}`);
559
+ setTimeout(() => setCopyToast(null), 2000);
560
+ }
561
+ }
562
+ return;
563
+ }
564
+ }
687
565
  }
688
566
  if (key.return && key.shift) {
689
567
  logTuiDebug("fullscreen-chat", "insert-newline", { cursorOffset });
568
+ clearBodySelection();
690
569
  insertText("\n");
691
570
  return;
692
571
  }
@@ -707,6 +586,7 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
707
586
  : selected.name;
708
587
  setInput(value);
709
588
  setCursorOffset(value.length);
589
+ setCollapsedPaste(null);
710
590
  clearSelection();
711
591
  setSelectedIdx(0);
712
592
  justSelected.current = true;
@@ -717,7 +597,9 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
717
597
  setSelectedIdx(0);
718
598
  setInput("");
719
599
  setCursorOffset(0);
600
+ setCollapsedPaste(null);
720
601
  clearSelection();
602
+ clearBodySelection();
721
603
  return;
722
604
  }
723
605
  }
@@ -770,6 +652,7 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
770
652
  const next = input.slice(0, previousOffset) + input.slice(cursorOffset);
771
653
  setInput(next);
772
654
  setCursorOffset(previousOffset);
655
+ setCollapsedPaste(null);
773
656
  logTuiDebug("fullscreen-chat", "backspace-applied", {
774
657
  previousOffset,
775
658
  next,
@@ -796,6 +679,7 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
796
679
  const nextOffset = getNextOffset(input, cursorOffset);
797
680
  const next = input.slice(0, cursorOffset) + input.slice(nextOffset);
798
681
  setInput(next);
682
+ setCollapsedPaste(null);
799
683
  logTuiDebug("fullscreen-chat", "delete-applied", {
800
684
  nextOffset,
801
685
  next,
@@ -815,12 +699,14 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
815
699
  setHistoryIdx(idx);
816
700
  setInput(history[idx]);
817
701
  setCursorOffset(history[idx].length);
702
+ setCollapsedPaste(null);
818
703
  }
819
704
  else if (historyIdx > 0) {
820
705
  const idx = historyIdx - 1;
821
706
  setHistoryIdx(idx);
822
707
  setInput(history[idx]);
823
708
  setCursorOffset(history[idx].length);
709
+ setCollapsedPaste(null);
824
710
  }
825
711
  }
826
712
  return;
@@ -832,11 +718,13 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
832
718
  setHistoryIdx(idx);
833
719
  setInput(history[idx]);
834
720
  setCursorOffset(history[idx].length);
721
+ setCollapsedPaste(null);
835
722
  }
836
723
  else {
837
724
  setHistoryIdx(-1);
838
725
  setInput(draft);
839
726
  setCursorOffset(draft.length);
727
+ setCollapsedPaste(null);
840
728
  }
841
729
  return;
842
730
  }
@@ -844,9 +732,12 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
844
732
  const clean = normalizeTerminalInputChunk(inputChar);
845
733
  if (clean.length === 0)
846
734
  return;
847
- insertText(clean);
735
+ clearBodySelection();
736
+ insertText(clean, {
737
+ collapsePaste: shouldCollapsePastedText(inputChar, clean),
738
+ });
848
739
  }
849
- }, { isActive: !isProcessing });
740
+ }, { isActive: true });
850
741
  React.useEffect(() => {
851
742
  setSelectedIdx(0);
852
743
  }, [matches.map((match) => match.name).join(",")]);
@@ -857,15 +748,19 @@ export function FullscreenChat({ messages, onSubmit, onClear, isProcessing, goal
857
748
  };
858
749
  }, []);
859
750
  const spinnerGlyph = PROCESSING_SPINNER_FRAMES[spinnerFrameIndex] ?? PROCESSING_SPINNER_FRAMES[0];
860
- const visibleLines = buildFullscreenChatRenderLines({
861
- availableCols,
862
- availableRows,
863
- viewport,
864
- composerLines: composer.lines,
865
- isProcessing,
866
- spinnerGlyph,
867
- spinnerVerb,
868
- });
751
+ const visibleLines = transcriptMode
752
+ ? transcript.lines
753
+ : buildFullscreenChatRenderLines({
754
+ availableCols,
755
+ availableRows,
756
+ viewport,
757
+ composerLines: composer.lines,
758
+ isProcessing,
759
+ spinnerGlyph,
760
+ spinnerVerb,
761
+ bodySelection: bodySelectionRange,
762
+ transcriptStatus: copyToast,
763
+ });
869
764
  return (_jsx(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: visibleLines.map((line) => (_jsx(Box, { height: 1, overflow: "hidden", children: line.segments ? (line.segments.map((segment, index) => (_jsx(Text, { color: segment.color ?? line.color, backgroundColor: segment.backgroundColor ?? line.backgroundColor, bold: segment.bold ?? line.bold, dimColor: segment.dim ?? line.dim, children: index === 0 && line.protected
870
765
  ? `${PROTECTED_ROW_MARKER}${segment.text}`
871
766
  : segment.text }, `${line.key}-${index}`)))) : (_jsx(Text, { color: line.color, backgroundColor: line.backgroundColor, bold: line.bold, dimColor: line.dim, children: line.protected