whale-code 6.5.11 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. package/dist/cli/chat/ChatApp.js +7 -11
  2. package/dist/cli/chat/ChatApp.js.map +1 -1
  3. package/dist/cli/chat/ChatInput.js +7 -3
  4. package/dist/cli/chat/ChatInput.js.map +1 -1
  5. package/dist/cli/chat/MessageList.js +5 -6
  6. package/dist/cli/chat/MessageList.js.map +1 -1
  7. package/dist/cli/chat/StatusBar.d.ts +2 -2
  8. package/dist/cli/chat/StatusBar.js +90 -160
  9. package/dist/cli/chat/StatusBar.js.map +1 -1
  10. package/dist/cli/chat/components/LiveArea.js +78 -115
  11. package/dist/cli/chat/components/LiveArea.js.map +1 -1
  12. package/dist/cli/chat/components/StaticMessages.js +60 -79
  13. package/dist/cli/chat/components/StaticMessages.js.map +1 -1
  14. package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
  15. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
  16. package/dist/cli/chat/store.d.ts +12 -0
  17. package/dist/cli/chat/store.js +19 -0
  18. package/dist/cli/chat/store.js.map +1 -1
  19. package/dist/cli/services/agent-loop-tools.js +10 -1
  20. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  21. package/dist/cli/services/cli-agent-loop.js +3 -2
  22. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  23. package/dist/cli/services/config-store.js +4 -3
  24. package/dist/cli/services/config-store.js.map +1 -1
  25. package/dist/cli/services/memory-manager.js +2 -2
  26. package/dist/cli/services/memory-manager.js.map +1 -1
  27. package/dist/cli/services/permission-modes.js +14 -10
  28. package/dist/cli/services/permission-modes.js.map +1 -1
  29. package/dist/cli/services/session-client.js +2 -1
  30. package/dist/cli/services/session-client.js.map +1 -1
  31. package/dist/cli/services/session-persistence.js +14 -6
  32. package/dist/cli/services/session-persistence.js.map +1 -1
  33. package/dist/cli/shared/SpinnerSlot.js +4 -1
  34. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  35. package/dist/server/handlers/browser-lifecycle.js +10 -0
  36. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  37. package/dist/server/handlers/browser.js +16 -1
  38. package/dist/server/handlers/browser.js.map +1 -1
  39. package/dist/server/handlers/campaigns.js +11 -0
  40. package/dist/server/handlers/campaigns.js.map +1 -1
  41. package/dist/server/handlers/catalog-products.js +19 -5
  42. package/dist/server/handlers/catalog-products.js.map +1 -1
  43. package/dist/server/handlers/catalog.js +42 -8
  44. package/dist/server/handlers/catalog.js.map +1 -1
  45. package/dist/server/handlers/clickhouse.js +4 -4
  46. package/dist/server/handlers/clickhouse.js.map +1 -1
  47. package/dist/server/handlers/comms-email.js +70 -8
  48. package/dist/server/handlers/comms-email.js.map +1 -1
  49. package/dist/server/handlers/comms.js +63 -21
  50. package/dist/server/handlers/comms.js.map +1 -1
  51. package/dist/server/handlers/coupons.js +141 -77
  52. package/dist/server/handlers/coupons.js.map +1 -1
  53. package/dist/server/handlers/google-ads.js +280 -8
  54. package/dist/server/handlers/google-ads.js.map +1 -1
  55. package/dist/server/handlers/remove-bg.d.ts +33 -0
  56. package/dist/server/handlers/remove-bg.js +698 -44
  57. package/dist/server/handlers/remove-bg.js.map +1 -1
  58. package/dist/server/handlers/supply-chain.js +93 -1
  59. package/dist/server/handlers/supply-chain.js.map +1 -1
  60. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  61. package/dist/server/handlers/workflow-steps-types.js +7 -1
  62. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  63. package/dist/server/handlers/workflow-steps.js +1 -1
  64. package/dist/server/handlers/workflow-steps.js.map +1 -1
  65. package/dist/server/index.js +122 -29
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/server/lib/agent-loop-turn.js +33 -3
  68. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  69. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  70. package/dist/server/lib/agent-loop-types.js +14 -2
  71. package/dist/server/lib/agent-loop-types.js.map +1 -1
  72. package/dist/server/lib/clickhouse-client.js +4 -2
  73. package/dist/server/lib/clickhouse-client.js.map +1 -1
  74. package/dist/server/lib/code-worker.js +4 -1
  75. package/dist/server/lib/code-worker.js.map +1 -1
  76. package/dist/server/providers/anthropic.js +103 -33
  77. package/dist/server/providers/anthropic.js.map +1 -1
  78. package/dist/server/server-chat.js +2 -2
  79. package/dist/server/server-chat.js.map +1 -1
  80. package/dist/server/server-helpers.d.ts +8 -1
  81. package/dist/server/server-helpers.js +17 -3
  82. package/dist/server/server-helpers.js.map +1 -1
  83. package/dist/server/server-persist.js +34 -21
  84. package/dist/server/server-persist.js.map +1 -1
  85. package/dist/server/server-rate-limit.d.ts +0 -1
  86. package/dist/server/server-rate-limit.js +5 -5
  87. package/dist/server/server-rate-limit.js.map +1 -1
  88. package/dist/server/server-routes-approvals.js +2 -2
  89. package/dist/server/server-routes-approvals.js.map +1 -1
  90. package/dist/server/server-routes-auth.js +2 -2
  91. package/dist/server/server-routes-auth.js.map +1 -1
  92. package/dist/server/server-routes-events.js +2 -2
  93. package/dist/server/server-routes-events.js.map +1 -1
  94. package/dist/server/server-routes-public.js +4 -4
  95. package/dist/server/server-routes-public.js.map +1 -1
  96. package/dist/server/server-routes-webchat.js +3 -3
  97. package/dist/server/server-routes-webchat.js.map +1 -1
  98. package/dist/server/server-store-circuit-breaker.js +1 -1
  99. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  100. package/dist/server/tool-router.js +7 -4
  101. package/dist/server/tool-router.js.map +1 -1
  102. package/dist/server/validation.js +11 -0
  103. package/dist/server/validation.js.map +1 -1
  104. package/dist/shared/api-client.js +38 -11
  105. package/dist/shared/api-client.js.map +1 -1
  106. package/package.json +12 -10
  107. package/vendor/ink/build/ink.js +68 -24
  108. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  109. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  110. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  111. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  112. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  113. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  114. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  115. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  116. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  117. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  118. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  119. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  120. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  121. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  122. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  123. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  124. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  125. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  126. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  127. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  128. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  129. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  130. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  131. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  132. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  133. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  137. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  138. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  139. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  140. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  141. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  142. package/dist/cli/__tests__/print-mode.test.js +0 -273
  143. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  144. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  145. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  146. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  147. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  148. package/dist/cli/chat/NodeManager.d.ts +0 -30
  149. package/dist/cli/chat/NodeManager.js +0 -66
  150. package/dist/cli/chat/NodeManager.js.map +0 -1
  151. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  152. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  153. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  154. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  155. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  156. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  157. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  158. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  159. package/dist/cli/commands/__tests__/init.test.js +0 -214
  160. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  161. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  162. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  163. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  164. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  165. package/dist/cli/commands/imsg-watcher.js +0 -230
  166. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  167. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  168. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  169. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  170. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  171. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  172. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  173. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  174. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  175. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  176. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  177. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  178. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  179. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  180. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  181. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  182. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  183. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  184. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  185. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  186. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  187. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  188. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  189. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  190. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  191. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  192. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  193. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  194. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  195. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  196. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  197. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  198. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  199. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  200. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  201. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  202. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  203. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  204. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  205. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  206. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  207. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  208. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  209. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  210. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  211. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  212. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  213. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  214. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  215. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  216. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  217. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  218. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  219. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  220. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  221. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  222. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  223. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  224. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  225. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  226. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  227. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  228. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  229. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  230. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  231. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  232. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  233. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  234. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  235. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  236. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  237. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  238. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  239. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  240. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  241. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  242. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  243. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  244. package/dist/cli/services/background-agents.d.ts +0 -26
  245. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  246. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  247. package/dist/cli/services/config-modules-model.test.js +0 -133
  248. package/dist/cli/services/config-modules-permission.test.js +0 -85
  249. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  250. package/dist/cli/services/config-modules-session.test.js +0 -297
  251. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  252. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  253. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  254. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  255. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  256. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  257. package/dist/cli/services/format-server-response-values.test.js +0 -247
  258. package/dist/cli/services/hooks-runners.test.js +0 -184
  259. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  260. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  261. package/dist/cli/services/hooks.test.js +0 -233
  262. package/dist/cli/services/ink-incremental.d.ts +0 -19
  263. package/dist/cli/services/ink-incremental.js +0 -59
  264. package/dist/cli/services/ink-incremental.js.map +0 -1
  265. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  266. package/dist/cli/services/ink-resize-fix.js +0 -76
  267. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  268. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  269. package/dist/cli/services/ink-sync-output.js +0 -16
  270. package/dist/cli/services/ink-sync-output.js.map +0 -1
  271. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  272. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  273. package/dist/cli/services/local-tools-files.test.js +0 -256
  274. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  275. package/dist/cli/services/model-router.test.js +0 -245
  276. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  277. package/dist/cli/services/rewind.test.js +0 -175
  278. package/dist/cli/services/sandbox.test.js +0 -198
  279. package/dist/cli/services/subagent-execution.d.ts +0 -12
  280. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  281. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  282. package/dist/cli/services/teammate-loop.js +0 -557
  283. package/dist/cli/services/teammate-loop.js.map +0 -1
  284. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  285. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  286. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  287. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  288. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  289. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  290. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  291. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  292. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  293. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  294. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  295. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  296. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  297. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  298. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  299. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  300. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  301. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  302. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  303. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  304. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  305. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  306. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  307. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  309. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  310. package/dist/cli/shared/SharedTick.d.ts +0 -10
  311. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  312. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  313. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  314. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  315. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  316. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  317. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  318. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  319. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  320. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  321. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  322. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  323. package/dist/local-agent/__tests__/executor.test.js +0 -235
  324. package/dist/local-agent/__tests__/index.test.js +0 -139
  325. package/dist/node/__tests__/cli-channels.test.js +0 -293
  326. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  327. package/dist/node/__tests__/cli-config.test.js +0 -215
  328. package/dist/node/__tests__/config.test.js +0 -292
  329. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  330. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  331. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  332. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  333. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  334. package/dist/node/adapters/__tests__/base.test.js +0 -286
  335. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  336. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  337. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  338. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  339. package/dist/node/adapters/__tests__/email.test.js +0 -290
  340. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  341. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  342. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  343. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  344. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  345. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  346. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  347. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  348. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  349. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  350. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  351. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  352. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  353. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  354. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  355. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  356. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  357. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  358. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  359. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  360. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  361. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  362. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  363. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  364. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  365. package/dist/server/__tests__/strip-base64.test.js +0 -256
  366. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  367. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  368. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  369. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  370. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  371. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  372. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  373. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  374. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  375. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  376. package/dist/server/__tests__/validation-misc.test.js +0 -243
  377. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  378. package/dist/server/__tests__/worker.test.js +0 -265
  379. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  380. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  381. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  382. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  383. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  384. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  385. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  386. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  387. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  388. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  389. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  390. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  391. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  392. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  393. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  394. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  395. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  396. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  397. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  398. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  399. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  400. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  401. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  402. package/dist/server/handlers/analytics.test.js +0 -280
  403. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  404. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  405. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  406. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  407. package/dist/server/handlers/api-docs-examples.js +0 -221
  408. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  409. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  410. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  411. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  412. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  413. package/dist/server/handlers/api-docs-sections.js +0 -293
  414. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  415. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  416. package/dist/server/handlers/api-keys.test.js +0 -161
  417. package/dist/server/handlers/billing-routes.test.js +0 -123
  418. package/dist/server/handlers/billing.test.js +0 -215
  419. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  420. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  421. package/dist/server/handlers/browser-actions.test.js +0 -190
  422. package/dist/server/handlers/browser-validation.test.js +0 -257
  423. package/dist/server/handlers/catalog.test.js +0 -297
  424. package/dist/server/handlers/comms.test.js +0 -289
  425. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  426. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  427. package/dist/server/handlers/creations-advanced.test.js +0 -171
  428. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  429. package/dist/server/handlers/creations-crud.test.js +0 -260
  430. package/dist/server/handlers/creations-mutations.test.js +0 -197
  431. package/dist/server/handlers/crm.test.js +0 -179
  432. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  433. package/dist/server/handlers/discovery-scan.test.js +0 -233
  434. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  435. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  436. package/dist/server/handlers/embeddings-search.test.js +0 -221
  437. package/dist/server/handlers/embeddings.test.js +0 -137
  438. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  439. package/dist/server/handlers/enrichment-breach.js +0 -266
  440. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  441. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  442. package/dist/server/handlers/enrichment-data.js +0 -145
  443. package/dist/server/handlers/enrichment-data.js.map +0 -1
  444. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  445. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  446. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  447. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  448. package/dist/server/handlers/enrichment-writes.js +0 -226
  449. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  450. package/dist/server/handlers/image-gen.test.js +0 -205
  451. package/dist/server/handlers/inventory.test.js +0 -380
  452. package/dist/server/handlers/kali-background.test.js +0 -222
  453. package/dist/server/handlers/kali-errors.test.js +0 -92
  454. package/dist/server/handlers/kali-validation.test.js +0 -234
  455. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  456. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  457. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  458. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  459. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  460. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  461. package/dist/server/handlers/local-agent.test.js +0 -198
  462. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  463. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  464. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  465. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  466. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  467. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  468. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  469. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  470. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  471. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  472. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  473. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  474. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  475. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  476. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  477. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  478. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  479. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  480. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  481. package/dist/server/handlers/nodes-channels.test.js +0 -413
  482. package/dist/server/handlers/nodes-events.test.js +0 -131
  483. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  484. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  485. package/dist/server/handlers/nodes-messages.test.js +0 -211
  486. package/dist/server/handlers/nodes-register.test.js +0 -277
  487. package/dist/server/handlers/nodes.test.js +0 -353
  488. package/dist/server/handlers/operations.test.js +0 -136
  489. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  490. package/dist/server/handlers/platform-websearch.test.js +0 -160
  491. package/dist/server/handlers/storefront.test.js +0 -329
  492. package/dist/server/handlers/supply-chain.test.js +0 -347
  493. package/dist/server/handlers/transcription.test.js +0 -118
  494. package/dist/server/handlers/video-gen-veo.js +0 -114
  495. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  496. package/dist/server/handlers/video-gen.test.js +0 -146
  497. package/dist/server/handlers/voice.test.js +0 -153
  498. package/dist/server/handlers/workflow-steps.test.js +0 -330
  499. package/dist/server/handlers/workflows-extras.test.js +0 -65
  500. package/dist/server/handlers/workflows.part2.test.js +0 -170
  501. package/dist/server/handlers/workflows.test.js +0 -281
  502. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  503. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  504. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  505. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  506. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  507. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  508. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  509. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  510. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  511. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  512. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  513. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  514. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  515. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  516. package/dist/server/lib/__tests__/otel.test.js +0 -146
  517. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  518. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  519. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  520. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  521. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  522. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  523. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  524. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  525. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  526. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  527. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  528. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  529. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  530. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  531. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  532. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  533. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  534. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  535. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  536. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  537. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  538. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  539. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  540. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  541. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  542. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  543. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  544. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  545. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  546. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  547. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  548. package/dist/server/lib/__tests__/utils.test.js +0 -322
  549. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  550. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  551. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  552. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  553. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  554. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  555. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  556. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  557. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  558. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  559. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  560. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  561. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  562. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  563. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  564. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  565. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  566. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  567. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  568. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  569. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  570. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  571. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  572. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  573. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  574. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  575. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  576. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  577. package/dist/server/providers/__tests__/registry.test.js +0 -183
  578. package/dist/server/providers/__tests__/shared.test.js +0 -297
  579. package/dist/shared/agent-core-config.test.js +0 -132
  580. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  581. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  582. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  583. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  584. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  585. package/dist/shared/agent-core-pricing.test.js +0 -191
  586. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  587. package/dist/shared/api-client-build-request.test.js +0 -228
  588. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  589. package/dist/shared/api-client-build.test.js +0 -223
  590. package/dist/shared/api-client-config.d.ts +0 -21
  591. package/dist/shared/api-client-helpers.d.ts +0 -57
  592. package/dist/shared/api-client-helpers.test.js +0 -261
  593. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  594. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  595. package/dist/shared/api-client-proxy.d.ts +0 -26
  596. package/dist/shared/api-client-proxy.test.js +0 -255
  597. package/dist/shared/api-client-retry.test.js +0 -307
  598. package/dist/shared/api-client-system-trimming.test.js +0 -261
  599. package/dist/shared/api-client-trimming.d.ts +0 -36
  600. package/dist/shared/api-client.test.js +0 -228
  601. package/dist/shared/compaction-thinking.test.js +0 -315
  602. package/dist/shared/compaction-trimming.test.js +0 -223
  603. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  604. package/dist/shared/sse-parser-collect.test.js +0 -252
  605. package/dist/shared/sse-parser-e2e.test.js +0 -558
  606. package/dist/shared/sse-parser-parse.test.js +0 -253
  607. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  608. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  609. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  610. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  611. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  612. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  613. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -36,7 +36,7 @@ import { StaticMessages } from "./components/StaticMessages.js";
36
36
  import { LiveArea } from "./components/LiveArea.js";
37
37
  import { OverlayRouter } from "./components/OverlayRouter.js";
38
38
  import { subscribeElapsed } from "./hooks/useElapsedClock.js";
39
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
39
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
40
40
  const PKG_NAME = "whale-code";
41
41
  const __filename = fileURLToPath(import.meta.url);
42
42
  const __dirname = dirname(__filename);
@@ -221,8 +221,6 @@ export function ChatApp() {
221
221
  if (error) {
222
222
  return /*#__PURE__*/_jsxs(Box, {
223
223
  flexDirection: "column",
224
- paddingLeft: 1,
225
- paddingRight: 1,
226
224
  children: [/*#__PURE__*/_jsx(WhaleBanner, {}), /*#__PURE__*/_jsx(Text, {
227
225
  children: " "
228
226
  }), /*#__PURE__*/_jsxs(Text, {
@@ -234,8 +232,6 @@ export function ChatApp() {
234
232
  if (!ready) {
235
233
  return /*#__PURE__*/_jsx(Box, {
236
234
  flexDirection: "column",
237
- paddingLeft: 1,
238
- paddingRight: 1,
239
235
  children: /*#__PURE__*/_jsx(Text, {
240
236
  color: colors.tertiary,
241
237
  children: "loading..."
@@ -245,20 +241,20 @@ export function ChatApp() {
245
241
  const hasOverlay = overlay.type !== "none";
246
242
  return /*#__PURE__*/_jsxs(Box, {
247
243
  flexDirection: "column",
248
- paddingLeft: 1,
249
- paddingRight: 1,
250
244
  children: [/*#__PURE__*/_jsx(StaticMessages, {}), !hasOverlay && /*#__PURE__*/_jsx(LiveArea, {
251
245
  expandBinding: kb.toggle_expand
252
246
  }), /*#__PURE__*/_jsx(OverlayRouter, {
253
247
  handlers: overlayHandlers
254
- }), messages.length > 0 && !isStreaming && !hasOverlay && /*#__PURE__*/_jsx(Text, {
255
- children: " "
256
- }), !hasOverlay && /*#__PURE__*/_jsxs(_Fragment, {
248
+ }), messages.length > 0 && !isStreaming && !hasOverlay && /*#__PURE__*/_jsx(Box, {
249
+ height: 1
250
+ }), /*#__PURE__*/_jsxs(Box, {
251
+ flexDirection: "column",
252
+ display: hasOverlay ? "none" : "flex",
257
253
  children: [/*#__PURE__*/_jsx(ChatInput, {
258
254
  onSubmit: handleSend,
259
255
  onCommand: handleCommand,
260
256
  disabled: isStreaming,
261
- overlayActive: false,
257
+ overlayActive: hasOverlay,
262
258
  agentName: "whale code",
263
259
  onInterrupt: () => abortRef.current?.abort()
264
260
  }), /*#__PURE__*/_jsx(StatusBar, {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatApp.js","names":["useEffect","useRef","Box","Text","useApp","useInput","canUseAgent","getServerToolCount","getModelShortName","getPermissionMode","mcpClientManager","interactiveEvents","resolvePlanApproval","colors","symbols","initTheme","WhaleBanner","loadKeybindings","matchesBinding","loadConfig","updateConfig","RewindManager","ChatInput","StatusBar","createRequire","fileURLToPath","dirname","join","initChatStore","useChatStore","useSlashCommands","useAgentLoop","buildOverlayHandlers","StaticMessages","LiveArea","OverlayRouter","subscribeElapsed","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","PKG_NAME","__filename","import","meta","url","__dirname","PKG_VERSION","version","ChatApp","exit","storeRef","store","current","isStreaming","s","overlay","messages","ready","error","currentModel","thinkingEnabled","serverToolsAvailable","toolsExpanded","lastContentUpdateRef","Date","now","rewindManagerRef","turnIndexRef","conversationRef","abortRef","accTextRef","thinkingChunksRef","thinkingDoneRef","getState","thinkingPref","thinking_enabled","setThinkingEnabled","check","setError","reason","config","email","setUserLabel","store_name","setReady","then","count","setServerToolsAvailable","connectAll","catch","handlePlanExited","data","content","planContent","addMessage","role","text","arrowRight","planFile","setOverlay","type","on","disconnectAll","off","startTime","setStreamElapsed","Math","floor","dismissOverlay","action","kb","input","key","abort","cancel_stream","toggle_expand","setToolsExpanded","toggle_thinking","next","sendRef","handleCommand","handleStoreSelect","handleStoreCancel","handleNodeSelect","handleNodeCancel","handleSessionSelect","handleMemoryDelete","rewindCheckpointCount","getCheckpointCount","sendMessage","handleSend","setCheckpoints","getCheckpoints","overlayHandlers","slashHandlers","flexDirection","paddingLeft","paddingRight","children","color","tertiary","hasOverlay","expandBinding","handlers","length","onSubmit","onCommand","disabled","overlayActive","agentName","onInterrupt","permissionMode","model","serverTools"],"sources":["../../../src/cli/chat/ChatApp.tsx"],"sourcesContent":["/**\n * ChatApp — whale code CLI (thin orchestrator)\n *\n * Initializes the Zustand store, wires events, delegates rendering to:\n * StaticMessages — <Static> area with header + committed messages\n * LiveArea — streaming indicator, active tools, subagents\n * OverlayRouter — overlay dispatch with crash isolation\n *\n * All state lives in the store — zero prop drilling.\n */\n\nimport { useEffect, useRef } from \"react\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n canUseAgent, getServerToolCount, getModelShortName,\n getPermissionMode, mcpClientManager,\n} from \"../services/agent-loop.js\";\nimport { interactiveEvents, resolvePlanApproval } from \"../services/interactive-tools.js\";\nimport { colors, symbols } from \"../shared/Theme.js\";\nimport { initTheme } from \"../shared/theme-manager.js\";\nimport { WhaleBanner } from \"../shared/WhaleBanner.js\";\nimport { loadKeybindings, matchesBinding } from \"../services/keybinding-manager.js\";\nimport { loadConfig, updateConfig } from \"../services/config-store.js\";\nimport { RewindManager } from \"../services/rewind.js\";\nimport { ChatInput } from \"./ChatInput.js\";\nimport { StatusBar } from \"./StatusBar.js\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join } from \"path\";\n\n// Zustand store\nimport { initChatStore, useChatStore, getChatStore } from \"./store.js\";\n\n// Hooks and components\nimport { useSlashCommands } from \"./hooks/useSlashCommands.js\";\nimport { useAgentLoop } from \"./hooks/useAgentLoop.js\";\nimport { buildOverlayHandlers } from \"./hooks/useOverlayHandlers.js\";\nimport { StaticMessages } from \"./components/StaticMessages.js\";\nimport { LiveArea } from \"./components/LiveArea.js\";\nimport { OverlayRouter } from \"./components/OverlayRouter.js\";\nimport { subscribeElapsed } from \"./hooks/useElapsedClock.js\";\n\nconst PKG_NAME = \"whale-code\";\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst PKG_VERSION: string = createRequire(import.meta.url)(join(__dirname, \"..\", \"..\", \"..\", \"package.json\")).version;\n\n// Re-export for any remaining consumers\nexport type { OverlayState } from \"./store.js\";\n\n// ── Component ──\n\nexport function ChatApp() {\n const { exit } = useApp();\n\n // Initialize store once\n const storeRef = useRef(initChatStore(getModelShortName()));\n const store = storeRef.current;\n\n // State selectors\n const isStreaming = useChatStore(s => s.isStreaming);\n const overlay = useChatStore(s => s.overlay);\n const messages = useChatStore(s => s.messages);\n const ready = useChatStore(s => s.ready);\n const error = useChatStore(s => s.error);\n const currentModel = useChatStore(s => s.currentModel);\n const thinkingEnabled = useChatStore(s => s.thinkingEnabled);\n const serverToolsAvailable = useChatStore(s => s.serverToolsAvailable);\n const toolsExpanded = useChatStore(s => s.toolsExpanded);\n\n // Refs\n const lastContentUpdateRef = useRef(Date.now());\n const rewindManagerRef = useRef(new RewindManager());\n const turnIndexRef = useRef(0);\n const conversationRef = useRef<Anthropic.MessageParam[]>([]);\n const abortRef = useRef<AbortController | null>(null);\n const accTextRef = useRef(\"\");\n const thinkingChunksRef = useRef(0);\n const thinkingDoneRef = useRef(false);\n\n // ── Init ──\n useEffect(() => {\n initTheme();\n const s = store.getState();\n try {\n const thinkingPref = loadConfig().thinking_enabled;\n if (thinkingPref != null) s.setThinkingEnabled(thinkingPref);\n } catch { /* use default */ }\n\n const check = canUseAgent();\n if (!check.ready) {\n s.setError(check.reason || \"Run 'whale login' to authenticate.\");\n } else {\n const config = loadConfig();\n if (config.email) s.setUserLabel(config.store_name || config.email);\n s.setReady(true);\n getServerToolCount().then((count) => store.getState().setServerToolsAvailable(count));\n mcpClientManager.connectAll().catch(() => {});\n }\n\n const handlePlanExited = (data: { planFile: string; planContent: string }) => {\n const content = data.planContent || \"(empty plan)\";\n store.getState().addMessage({\n role: \"assistant\",\n text: ` ${symbols.arrowRight} Plan Review — ${data.planFile}\\n\\n${content}`,\n });\n store.getState().setOverlay({ type: \"planApproval\", planContent: data.planContent || \"\", planFile: data.planFile });\n };\n interactiveEvents.on(\"planModeExited\", handlePlanExited);\n\n return () => {\n mcpClientManager.disconnectAll().catch(() => {});\n interactiveEvents.off(\"planModeExited\", handlePlanExited);\n };\n }, []);\n\n // Streaming elapsed timer\n useEffect(() => {\n if (isStreaming) {\n const startTime = Date.now();\n store.getState().setStreamElapsed(0);\n return subscribeElapsed(() => {\n store.getState().setStreamElapsed(Math.floor((Date.now() - startTime) / 1000));\n });\n } else {\n store.getState().setStreamElapsed(0);\n }\n }, [isStreaming]);\n\n // Dismiss plan overlay if stream ends\n useEffect(() => {\n if (!isStreaming && overlay.type === \"planApproval\") {\n store.getState().dismissOverlay();\n resolvePlanApproval({ action: \"cancel\" });\n }\n }, [isStreaming, overlay]);\n\n // ── Keys ──\n const kb = loadKeybindings();\n\n useInput((input, key) => {\n if (matchesBinding(kb.exit, input, key)) {\n if (abortRef.current) abortRef.current.abort();\n exit();\n }\n if (matchesBinding(kb.cancel_stream, input, key) && isStreaming && abortRef.current && overlay.type !== \"planApproval\") {\n abortRef.current.abort();\n }\n if (matchesBinding(kb.toggle_expand, input, key)) {\n const s = store.getState();\n s.setToolsExpanded(!s.toolsExpanded);\n }\n if (matchesBinding(kb.toggle_thinking, input, key)) {\n const s = store.getState();\n const next = !s.thinkingEnabled;\n s.setThinkingEnabled(next);\n try { updateConfig({ thinking_enabled: next }); } catch { /* best effort */ }\n s.addMessage({ role: \"assistant\", text: ` Thinking: ${next ? \"on\" : \"off\"}` });\n }\n });\n\n // ── Hooks ──\n const sendRef = useRef<(text: string) => void>(() => {});\n const {\n handleCommand, handleStoreSelect, handleStoreCancel, handleNodeSelect, handleNodeCancel,\n handleSessionSelect, handleMemoryDelete,\n } = useSlashCommands({\n exit, conversationRef,\n rewindCheckpointCount: rewindManagerRef.current.getCheckpointCount(),\n PKG_NAME, PKG_VERSION,\n sendMessage: (text) => sendRef.current(text),\n });\n\n const { handleSend } = useAgentLoop({\n conversationRef, abortRef,\n accTextRef, lastContentUpdateRef, thinkingChunksRef, thinkingDoneRef,\n rewindManagerRef, turnIndexRef,\n });\n sendRef.current = handleSend;\n\n // Sync checkpoints to store\n useEffect(() => {\n store.getState().setCheckpoints(rewindManagerRef.current.getCheckpoints());\n }, [messages]);\n\n const overlayHandlers = buildOverlayHandlers({\n rewindManagerRef, conversationRef, turnIndexRef,\n slashHandlers: {\n handleStoreSelect, handleStoreCancel,\n handleNodeSelect, handleNodeCancel,\n handleSessionSelect, handleMemoryDelete,\n },\n });\n\n // ── Render ──\n\n if (error) {\n return (\n <Box flexDirection=\"column\" paddingLeft={1} paddingRight={1}>\n <WhaleBanner />\n <Text>{\" \"}</Text>\n <Text color={colors.error}> {error}</Text>\n </Box>\n );\n }\n\n if (!ready) {\n return (\n <Box flexDirection=\"column\" paddingLeft={1} paddingRight={1}>\n <Text color={colors.tertiary}>loading...</Text>\n </Box>\n );\n }\n\n const hasOverlay = overlay.type !== \"none\";\n\n return (\n <Box flexDirection=\"column\" paddingLeft={1} paddingRight={1}>\n <StaticMessages />\n\n {!hasOverlay && <LiveArea expandBinding={kb.toggle_expand} />}\n\n <OverlayRouter handlers={overlayHandlers} />\n\n {messages.length > 0 && !isStreaming && !hasOverlay && <Text>{\" \"}</Text>}\n\n {!hasOverlay && (\n <>\n <ChatInput\n onSubmit={handleSend}\n onCommand={handleCommand}\n disabled={isStreaming}\n overlayActive={false}\n agentName=\"whale code\"\n onInterrupt={() => abortRef.current?.abort()}\n />\n <StatusBar\n permissionMode={getPermissionMode()}\n model={currentModel}\n thinkingEnabled={thinkingEnabled}\n serverTools={serverToolsAvailable}\n isStreaming={isStreaming}\n toolsExpanded={toolsExpanded}\n />\n </>\n )}\n </Box>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ChatApp.js","names":["useEffect","useRef","Box","Text","useApp","useInput","canUseAgent","getServerToolCount","getModelShortName","getPermissionMode","mcpClientManager","interactiveEvents","resolvePlanApproval","colors","symbols","initTheme","WhaleBanner","loadKeybindings","matchesBinding","loadConfig","updateConfig","RewindManager","ChatInput","StatusBar","createRequire","fileURLToPath","dirname","join","initChatStore","useChatStore","useSlashCommands","useAgentLoop","buildOverlayHandlers","StaticMessages","LiveArea","OverlayRouter","subscribeElapsed","jsx","_jsx","jsxs","_jsxs","PKG_NAME","__filename","import","meta","url","__dirname","PKG_VERSION","version","ChatApp","exit","storeRef","store","current","isStreaming","s","overlay","messages","ready","error","currentModel","thinkingEnabled","serverToolsAvailable","toolsExpanded","lastContentUpdateRef","Date","now","rewindManagerRef","turnIndexRef","conversationRef","abortRef","accTextRef","thinkingChunksRef","thinkingDoneRef","getState","thinkingPref","thinking_enabled","setThinkingEnabled","check","setError","reason","config","email","setUserLabel","store_name","setReady","then","count","setServerToolsAvailable","connectAll","catch","handlePlanExited","data","content","planContent","addMessage","role","text","arrowRight","planFile","setOverlay","type","on","disconnectAll","off","startTime","setStreamElapsed","Math","floor","dismissOverlay","action","kb","input","key","abort","cancel_stream","toggle_expand","setToolsExpanded","toggle_thinking","next","sendRef","handleCommand","handleStoreSelect","handleStoreCancel","handleNodeSelect","handleNodeCancel","handleSessionSelect","handleMemoryDelete","rewindCheckpointCount","getCheckpointCount","sendMessage","handleSend","setCheckpoints","getCheckpoints","overlayHandlers","slashHandlers","flexDirection","children","color","tertiary","hasOverlay","expandBinding","handlers","length","height","display","onSubmit","onCommand","disabled","overlayActive","agentName","onInterrupt","permissionMode","model","serverTools"],"sources":["../../../src/cli/chat/ChatApp.tsx"],"sourcesContent":["/**\n * ChatApp — whale code CLI (thin orchestrator)\n *\n * Initializes the Zustand store, wires events, delegates rendering to:\n * StaticMessages — <Static> area with header + committed messages\n * LiveArea — streaming indicator, active tools, subagents\n * OverlayRouter — overlay dispatch with crash isolation\n *\n * All state lives in the store — zero prop drilling.\n */\n\nimport { useEffect, useRef } from \"react\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport {\n canUseAgent, getServerToolCount, getModelShortName,\n getPermissionMode, mcpClientManager,\n} from \"../services/agent-loop.js\";\nimport { interactiveEvents, resolvePlanApproval } from \"../services/interactive-tools.js\";\nimport { colors, symbols } from \"../shared/Theme.js\";\nimport { initTheme } from \"../shared/theme-manager.js\";\nimport { WhaleBanner } from \"../shared/WhaleBanner.js\";\nimport { loadKeybindings, matchesBinding } from \"../services/keybinding-manager.js\";\nimport { loadConfig, updateConfig } from \"../services/config-store.js\";\nimport { RewindManager } from \"../services/rewind.js\";\nimport { ChatInput } from \"./ChatInput.js\";\nimport { StatusBar } from \"./StatusBar.js\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join } from \"path\";\n\n// Zustand store\nimport { initChatStore, useChatStore, getChatStore } from \"./store.js\";\n\n// Hooks and components\nimport { useSlashCommands } from \"./hooks/useSlashCommands.js\";\nimport { useAgentLoop } from \"./hooks/useAgentLoop.js\";\nimport { buildOverlayHandlers } from \"./hooks/useOverlayHandlers.js\";\nimport { StaticMessages } from \"./components/StaticMessages.js\";\nimport { LiveArea } from \"./components/LiveArea.js\";\nimport { OverlayRouter } from \"./components/OverlayRouter.js\";\nimport { subscribeElapsed } from \"./hooks/useElapsedClock.js\";\n\nconst PKG_NAME = \"whale-code\";\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst PKG_VERSION: string = createRequire(import.meta.url)(join(__dirname, \"..\", \"..\", \"..\", \"package.json\")).version;\n\n// Re-export for any remaining consumers\nexport type { OverlayState } from \"./store.js\";\n\n// ── Component ──\n\nexport function ChatApp() {\n const { exit } = useApp();\n\n // Initialize store once\n const storeRef = useRef(initChatStore(getModelShortName()));\n const store = storeRef.current;\n\n // State selectors\n const isStreaming = useChatStore(s => s.isStreaming);\n const overlay = useChatStore(s => s.overlay);\n const messages = useChatStore(s => s.messages);\n const ready = useChatStore(s => s.ready);\n const error = useChatStore(s => s.error);\n const currentModel = useChatStore(s => s.currentModel);\n const thinkingEnabled = useChatStore(s => s.thinkingEnabled);\n const serverToolsAvailable = useChatStore(s => s.serverToolsAvailable);\n const toolsExpanded = useChatStore(s => s.toolsExpanded);\n\n // Refs\n const lastContentUpdateRef = useRef(Date.now());\n const rewindManagerRef = useRef(new RewindManager());\n const turnIndexRef = useRef(0);\n const conversationRef = useRef<Anthropic.MessageParam[]>([]);\n const abortRef = useRef<AbortController | null>(null);\n const accTextRef = useRef(\"\");\n const thinkingChunksRef = useRef(0);\n const thinkingDoneRef = useRef(false);\n\n // ── Init ──\n useEffect(() => {\n initTheme();\n const s = store.getState();\n try {\n const thinkingPref = loadConfig().thinking_enabled;\n if (thinkingPref != null) s.setThinkingEnabled(thinkingPref);\n } catch { /* use default */ }\n\n const check = canUseAgent();\n if (!check.ready) {\n s.setError(check.reason || \"Run 'whale login' to authenticate.\");\n } else {\n const config = loadConfig();\n if (config.email) s.setUserLabel(config.store_name || config.email);\n s.setReady(true);\n getServerToolCount().then((count) => store.getState().setServerToolsAvailable(count));\n mcpClientManager.connectAll().catch(() => {});\n }\n\n const handlePlanExited = (data: { planFile: string; planContent: string }) => {\n const content = data.planContent || \"(empty plan)\";\n store.getState().addMessage({\n role: \"assistant\",\n text: ` ${symbols.arrowRight} Plan Review — ${data.planFile}\\n\\n${content}`,\n });\n store.getState().setOverlay({ type: \"planApproval\", planContent: data.planContent || \"\", planFile: data.planFile });\n };\n interactiveEvents.on(\"planModeExited\", handlePlanExited);\n\n return () => {\n mcpClientManager.disconnectAll().catch(() => {});\n interactiveEvents.off(\"planModeExited\", handlePlanExited);\n };\n }, []);\n\n // Streaming elapsed timer\n useEffect(() => {\n if (isStreaming) {\n const startTime = Date.now();\n store.getState().setStreamElapsed(0);\n return subscribeElapsed(() => {\n store.getState().setStreamElapsed(Math.floor((Date.now() - startTime) / 1000));\n });\n } else {\n store.getState().setStreamElapsed(0);\n }\n }, [isStreaming]);\n\n // Dismiss plan overlay if stream ends\n useEffect(() => {\n if (!isStreaming && overlay.type === \"planApproval\") {\n store.getState().dismissOverlay();\n resolvePlanApproval({ action: \"cancel\" });\n }\n }, [isStreaming, overlay]);\n\n // ── Keys ──\n const kb = loadKeybindings();\n\n useInput((input, key) => {\n if (matchesBinding(kb.exit, input, key)) {\n if (abortRef.current) abortRef.current.abort();\n exit();\n }\n if (matchesBinding(kb.cancel_stream, input, key) && isStreaming && abortRef.current && overlay.type !== \"planApproval\") {\n abortRef.current.abort();\n }\n if (matchesBinding(kb.toggle_expand, input, key)) {\n const s = store.getState();\n s.setToolsExpanded(!s.toolsExpanded);\n }\n if (matchesBinding(kb.toggle_thinking, input, key)) {\n const s = store.getState();\n const next = !s.thinkingEnabled;\n s.setThinkingEnabled(next);\n try { updateConfig({ thinking_enabled: next }); } catch { /* best effort */ }\n s.addMessage({ role: \"assistant\", text: ` Thinking: ${next ? \"on\" : \"off\"}` });\n }\n });\n\n // ── Hooks ──\n const sendRef = useRef<(text: string) => void>(() => {});\n const {\n handleCommand, handleStoreSelect, handleStoreCancel, handleNodeSelect, handleNodeCancel,\n handleSessionSelect, handleMemoryDelete,\n } = useSlashCommands({\n exit, conversationRef,\n rewindCheckpointCount: rewindManagerRef.current.getCheckpointCount(),\n PKG_NAME, PKG_VERSION,\n sendMessage: (text) => sendRef.current(text),\n });\n\n const { handleSend } = useAgentLoop({\n conversationRef, abortRef,\n accTextRef, lastContentUpdateRef, thinkingChunksRef, thinkingDoneRef,\n rewindManagerRef, turnIndexRef,\n });\n sendRef.current = handleSend;\n\n // Sync checkpoints to store\n useEffect(() => {\n store.getState().setCheckpoints(rewindManagerRef.current.getCheckpoints());\n }, [messages]);\n\n const overlayHandlers = buildOverlayHandlers({\n rewindManagerRef, conversationRef, turnIndexRef,\n slashHandlers: {\n handleStoreSelect, handleStoreCancel,\n handleNodeSelect, handleNodeCancel,\n handleSessionSelect, handleMemoryDelete,\n },\n });\n\n // ── Render ──\n\n if (error) {\n return (\n <Box flexDirection=\"column\">\n <WhaleBanner />\n <Text>{\" \"}</Text>\n <Text color={colors.error}> {error}</Text>\n </Box>\n );\n }\n\n if (!ready) {\n return (\n <Box flexDirection=\"column\">\n <Text color={colors.tertiary}>loading...</Text>\n </Box>\n );\n }\n\n const hasOverlay = overlay.type !== \"none\";\n\n return (\n <Box flexDirection=\"column\">\n <StaticMessages />\n\n {!hasOverlay && <LiveArea expandBinding={kb.toggle_expand} />}\n\n <OverlayRouter handlers={overlayHandlers} />\n\n {messages.length > 0 && !isStreaming && !hasOverlay && <Box height={1} />}\n\n {/* Always mounted so input state (text, cursor, history) survives overlay open/close.\n overlayActive detaches the stdin listener so keystrokes go to the overlay instead. */}\n <Box flexDirection=\"column\" display={hasOverlay ? \"none\" : \"flex\"}>\n <ChatInput\n onSubmit={handleSend}\n onCommand={handleCommand}\n disabled={isStreaming}\n overlayActive={hasOverlay}\n agentName=\"whale code\"\n onInterrupt={() => abortRef.current?.abort()}\n />\n <StatusBar\n permissionMode={getPermissionMode()}\n model={currentModel}\n thinkingEnabled={thinkingEnabled}\n serverTools={serverToolsAvailable}\n isStreaming={isStreaming}\n toolsExpanded={toolsExpanded}\n />\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,7 +26,7 @@ import { SlashMenu, SLASH_COMMANDS as _SLASH_COMMANDS, getFilteredSelectableCoun
26
26
  // ── Types ──
27
27
 
28
28
  // Re-export for consumers (e.g. useSlashCommands)
29
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
29
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
30
30
  export const SLASH_COMMANDS = _SLASH_COMMANDS;
31
31
 
32
32
  // ── Constants ──
@@ -936,8 +936,12 @@ export function ChatInput({
936
936
 
937
937
  // Disabled — dimmed but visible input (accept typing to queue)
938
938
  if (disabled) {
939
- // No input and not queued — render empty (eliminates dot line but keeps component mounted)
940
- if (!displayValue.trim() && !queued) return /*#__PURE__*/_jsx(_Fragment, {});
939
+ // No input and not queued — render a zero-height placeholder instead of
940
+ // an empty fragment. An empty <></> leaves a phantom line in Ink's layout
941
+ // that ghosts as a duplicate input bar when streaming ends.
942
+ if (!displayValue.trim() && !queued) return /*#__PURE__*/_jsx(Box, {
943
+ height: 0
944
+ });
941
945
  const disabledLines = displayValue.split("\n");
942
946
  const {
943
947
  line: dCursorLine,
@@ -1 +1 @@
1
- {"version":3,"file":"ChatInput.js","names":["useState","useEffect","useRef","Box","Text","useStdin","readFileSync","existsSync","statSync","basename","extname","colors","loadKeybindings","bindingToControlChar","SlashMenu","SLASH_COMMANDS","_SLASH_COMMANDS","getFilteredSelectableCount","getCommandAtIndex","getCategoryCount","getCategoryCommandCount","getCategoryCommand","getCategoryLabel","getCategoryColor","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","IMAGE_EXTENSIONS","MAX_IMAGE_SIZE","MAX_DISPLAY_LINES","CONTEXT_TYPES","CONTEXT_COLORS","product","brand","customer","purple","order","success","inventory","warning","media","pink","document","info","location","parseWhaleContext","text","trimmed","trim","startsWith","endsWith","obj","JSON","parse","id","type","includes","title","sourceApp","contextToBlock","ctx","lines","push","subtitle","data","key","value","Object","entries","sort","a","b","localeCompare","join","isImagePath","p","normalizePath","ext","toLowerCase","raw","decodeURIComponent","replace","isFilePath","isFile","loadImage","filePath","mediaType","stat","size","path","name","base64","toString","getCursorLineCol","cursor","pos","split","i","length","line","col","ChatInput","onSubmit","onCommand","disabled","overlayActive","agentName","onInterrupt","stdin","inputRef","displayValue","setDisplayValue","displayCursor","setDisplayCursor","onSubmitRef","onCommandRef","onInterruptRef","disabledRef","current","queued","setQueued","queuedRef","submittingRef","prevDisabledRef","handleSubmit","menuMode","setMenuMode","menuModeRef","menuFilter","setMenuFilter","menuFilterRef","menuIndex","setMenuIndex","menuIndexRef","images","setImages","imagesRef","files","setFiles","filesRef","contextItems","setContextItems","contextItemsRef","selectedCategory","setSelectedCategory","selectedCategoryRef","setSelectedCategorySync","val","historyRef","historyIndexRef","savedInputRef","MAX_HISTORY","isPasting","pasteBuffer","pastedText","setPastedText","pastedTextRef","setMenuModeSync","setMenuFilterSync","setMenuIndexSync","process","stdout","write","update","processPaste","clean","some","c","prev","map","l","filter","Boolean","every","newImages","img","newFiles","pasteLines","cur","newValue","slice","typed","paste","imgs","fls","ctxs","contextPrefix","filePrefix","f","body","fullText","shift","undefined","setTimeout","onData","str","_kb","exitChar","exit","expandChar","toggle_expand","thinkingChar","toggle_thinking","Math","min","max","curLine","curCol","targetLine","targetCol","newCursor","charCodeAt","codePoints","hasFilter","inCategory","cmd","count","catIdx","clear_line","delete_word","before","match","len","home","newIdx","hist","on","off","disabledLines","dCursorLine","dCursorCol","flexDirection","children","color","quaternary","wrap","dim","inverse","isCursorOnLine","marginLeft","promptLine","bold","catLabel","catColor","tertiary","hint","selectedIndex","cursorLine","cursorCol","isTruncated","visibleLines","secondary","indigo","isRealLine"],"sources":["../../../src/cli/chat/ChatInput.tsx"],"sourcesContent":["/**\n * ChatInput — Custom input with bracketed paste + image attachments\n *\n * Replaces ink-text-input with raw stdin handling to fix:\n * - Paste losing content on enter (newlines in paste triggered submit)\n * - Multi-line paste mangled/unformatted\n * - No drag-drop image support\n *\n * Features:\n * - Bracketed paste mode — clean multi-line paste\n * - Drag-drop images — detects image file paths, attaches as chips\n * - Image chips above input like Claude Code: [image1.png] [image2.jpg]\n * - Backspace on empty input removes last image\n * - Slash command menu preserved\n * - Multi-line input with ⎸ continuation markers\n */\n\nimport { useState, useEffect, useRef } from \"react\";\nimport { Box, Text, useStdin } from \"ink\";\nimport { readFileSync, existsSync, statSync } from \"fs\";\nimport { basename, extname } from \"path\";\nimport { colors } from \"../shared/Theme.js\";\nimport { loadKeybindings, bindingToControlChar } from \"../services/keybinding-manager.js\";\nimport { SlashMenu, SLASH_COMMANDS as _SLASH_COMMANDS, getFilteredSelectableCount, getCommandAtIndex, getCategoryCount, getCategoryCommandCount, getCategoryCommand, getCategoryLabel, getCategoryColor } from \"./SlashMenu.js\";\n\n// ── Types ──\n\nexport interface ImageAttachment {\n path: string;\n name: string;\n base64: string;\n mediaType: string;\n}\n\nexport interface FileAttachment {\n path: string;\n name: string;\n}\n\nexport interface ContextAttachment {\n id: string;\n type: string;\n title: string;\n subtitle?: string;\n icon: string;\n sourceApp: string;\n data: Record<string, unknown>;\n timestamp: string;\n}\n\n// Re-export for consumers (e.g. useSlashCommands)\nexport type { SlashCommand } from \"./SlashMenu.js\";\nexport const SLASH_COMMANDS = _SLASH_COMMANDS;\n\n// ── Constants ──\n\nconst IMAGE_EXTENSIONS: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n};\n\nconst MAX_IMAGE_SIZE = 20 * 1024 * 1024; // 20MB\nconst MAX_DISPLAY_LINES = 8;\n\n// ── Helpers ──\n\nconst CONTEXT_TYPES = [\"product\", \"customer\", \"order\", \"inventory\", \"media\", \"document\", \"location\"];\nconst CONTEXT_COLORS: Record<string, string> = {\n product: colors.brand, customer: colors.purple, order: colors.success,\n inventory: colors.warning, media: colors.pink, document: colors.info, location: \"yellow\",\n};\n\n/** Detect if pasted text is a valid WhaleContextItem JSON object */\nfunction parseWhaleContext(text: string): ContextAttachment | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return null;\n try {\n const obj = JSON.parse(trimmed);\n if (obj && typeof obj.id === \"string\" && typeof obj.type === \"string\" &&\n CONTEXT_TYPES.includes(obj.type) && typeof obj.title === \"string\" &&\n typeof obj.sourceApp === \"string\") {\n return obj as ContextAttachment;\n }\n } catch { /* not JSON */ }\n return null;\n}\n\n/** Format a context attachment into an XML context block for AI prompt */\nfunction contextToBlock(ctx: ContextAttachment): string {\n const lines: string[] = [];\n lines.push(`<context type=\"${ctx.type}\" source=\"${ctx.sourceApp}\">`);\n lines.push(` ${ctx.title}`);\n if (ctx.subtitle) lines.push(` ${ctx.subtitle}`);\n if (ctx.data) {\n for (const [key, value] of Object.entries(ctx.data).sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${key}: ${value}`);\n }\n }\n lines.push(\"</context>\");\n return lines.join(\"\\n\");\n}\n\nfunction isImagePath(text: string): boolean {\n const p = normalizePath(text);\n if (!p || p.includes(\"\\n\")) return false;\n const ext = extname(p).toLowerCase();\n return ext in IMAGE_EXTENSIONS && existsSync(p);\n}\n\n/** Normalize a terminal-pasted path (handles escapes, file:// URLs, quotes) */\nfunction normalizePath(raw: string): string {\n let p = raw.trim();\n // Strip file:// URL prefix + percent-decode\n if (p.startsWith(\"file://\")) {\n p = decodeURIComponent(p.replace(/^file:\\/\\//, \"\"));\n }\n // Strip surrounding quotes\n p = p.replace(/^['\"]|['\"]$/g, \"\");\n // Unescape backslash-escaped characters (spaces, parens, etc.)\n p = p.replace(/\\\\(.)/g, \"$1\");\n return p;\n}\n\nfunction isFilePath(text: string): boolean {\n const p = normalizePath(text);\n if (!p || p.includes(\"\\n\")) return false;\n // Skip image paths — handled separately\n const ext = extname(p).toLowerCase();\n if (ext in IMAGE_EXTENSIONS) return false;\n try { return existsSync(p) && statSync(p).isFile(); } catch { return false; }\n}\n\nfunction loadImage(filePath: string): ImageAttachment | null {\n try {\n const p = normalizePath(filePath);\n const ext = extname(p).toLowerCase();\n const mediaType = IMAGE_EXTENSIONS[ext];\n if (!mediaType) return null;\n const stat = statSync(p);\n if (stat.size > MAX_IMAGE_SIZE) return null;\n const data = readFileSync(p);\n return { path: p, name: basename(p), base64: data.toString(\"base64\"), mediaType };\n } catch {\n return null;\n }\n}\n\nfunction getCursorLineCol(text: string, cursor: number): { line: number; col: number } {\n let pos = 0;\n const lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n if (cursor <= pos + lines[i].length) {\n return { line: i, col: cursor - pos };\n }\n pos += lines[i].length + 1;\n }\n return { line: lines.length - 1, col: lines[lines.length - 1].length };\n}\n\n// ── Props ──\n\ninterface ChatInputProps {\n onSubmit: (message: string, images?: ImageAttachment[]) => void;\n onCommand: (command: string) => void;\n disabled: boolean;\n overlayActive?: boolean;\n agentName?: string;\n onInterrupt?: () => void;\n}\n\n// ── Component ──\n\nexport function ChatInput({ onSubmit, onCommand, disabled, overlayActive, agentName, onInterrupt }: ChatInputProps) {\n const { stdin } = useStdin();\n\n // Input state — ref for synchronous handler access, state for render\n const inputRef = useRef({ value: \"\", cursor: 0 });\n const [displayValue, setDisplayValue] = useState(\"\");\n const [displayCursor, setDisplayCursor] = useState(0);\n\n // Stable refs for callbacks — prevents stale closures in stdin handler\n const onSubmitRef = useRef(onSubmit);\n const onCommandRef = useRef(onCommand);\n const onInterruptRef = useRef(onInterrupt);\n const disabledRef = useRef(disabled);\n useEffect(() => { onSubmitRef.current = onSubmit; }, [onSubmit]);\n useEffect(() => { onCommandRef.current = onCommand; }, [onCommand]);\n useEffect(() => { onInterruptRef.current = onInterrupt; }, [onInterrupt]);\n useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n // Queued message — typed during streaming, auto-submitted when streaming ends\n const [queued, setQueued] = useState(false);\n const queuedRef = useRef(false);\n\n // Guard against double-submission (BUG-1 fix)\n const submittingRef = useRef(false);\n\n // Auto-submit queued input when streaming ends (disabled goes from true → false)\n const prevDisabledRef = useRef(disabled);\n useEffect(() => {\n if (prevDisabledRef.current && !disabled && queuedRef.current) {\n // Streaming just ended and we have queued input — submit it\n queuedRef.current = false;\n setQueued(false);\n handleSubmit();\n }\n prevDisabledRef.current = disabled;\n }, [disabled]);\n\n // Mode & attachments\n const [menuMode, setMenuMode] = useState(false);\n const menuModeRef = useRef(false);\n const [menuFilter, setMenuFilter] = useState(\"\");\n const menuFilterRef = useRef(\"\");\n const [menuIndex, setMenuIndex] = useState(0);\n const menuIndexRef = useRef(0);\n const [images, setImages] = useState<ImageAttachment[]>([]);\n const imagesRef = useRef<ImageAttachment[]>([]);\n const [files, setFiles] = useState<FileAttachment[]>([]);\n const filesRef = useRef<FileAttachment[]>([]);\n const [contextItems, setContextItems] = useState<ContextAttachment[]>([]);\n const contextItemsRef = useRef<ContextAttachment[]>([]);\n\n // Two-level menu: null = Level 1 (categories), number = Level 2 (drilled into that category)\n const [selectedCategory, setSelectedCategory] = useState<number | null>(null);\n const selectedCategoryRef = useRef<number | null>(null);\n function setSelectedCategorySync(val: number | null) {\n selectedCategoryRef.current = val;\n setSelectedCategory(val);\n }\n\n // Input history (up/down arrow recall)\n const historyRef = useRef<string[]>([]);\n const historyIndexRef = useRef(-1);\n const savedInputRef = useRef(\"\");\n const MAX_HISTORY = 50;\n\n // Paste tracking\n const isPasting = useRef(false);\n const pasteBuffer = useRef(\"\");\n\n // Multi-line paste — stored separately, displayed as chip\n const [pastedText, setPastedText] = useState<string | null>(null);\n const pastedTextRef = useRef<string | null>(null);\n\n // Sync refs\n useEffect(() => { imagesRef.current = images; }, [images]);\n useEffect(() => { filesRef.current = files; }, [files]);\n useEffect(() => { contextItemsRef.current = contextItems; }, [contextItems]);\n useEffect(() => { pastedTextRef.current = pastedText; }, [pastedText]);\n // ── Sync helpers: update ref THEN state (fixes race conditions) ──\n function setMenuModeSync(val: boolean) {\n menuModeRef.current = val;\n setMenuMode(val);\n }\n function setMenuFilterSync(val: string) {\n menuFilterRef.current = val;\n setMenuFilter(val);\n }\n function setMenuIndexSync(val: number) {\n menuIndexRef.current = val;\n setMenuIndex(val);\n }\n\n // ── Enable bracketed paste mode ──\n useEffect(() => {\n process.stdout.write(\"\\x1b[?2004h\");\n return () => { process.stdout.write(\"\\x1b[?2004l\"); };\n }, []);\n\n // ── Update helper ──\n function update(value: string, cursor: number) {\n inputRef.current = { value, cursor };\n setDisplayValue(value);\n setDisplayCursor(cursor);\n }\n\n // ── Process paste content ──\n function processPaste(text: string) {\n const clean = text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n // Check for WhaleContext JSON → attach as context chip\n const ctx = parseWhaleContext(clean);\n if (ctx) {\n // Avoid duplicates\n if (!contextItemsRef.current.some(c => c.id === ctx.id)) {\n setContextItems(prev => [...prev, ctx]);\n }\n return;\n }\n\n // Check if ALL non-empty lines are image paths → attach them\n const lines = clean.split(\"\\n\").map(l => l.trim()).filter(Boolean);\n if (lines.length > 0 && lines.every(l => isImagePath(l))) {\n const newImages: ImageAttachment[] = [];\n for (const line of lines) {\n const img = loadImage(line);\n if (img) newImages.push(img);\n }\n if (newImages.length > 0) {\n setImages(prev => [...prev, ...newImages]);\n return;\n }\n }\n\n // Check for non-image file paths → attach as file chips\n if (lines.length > 0 && lines.length <= 4 && lines.every(l => isFilePath(l))) {\n const newFiles: FileAttachment[] = lines.map(l => {\n const p = normalizePath(l);\n return { path: p, name: basename(p) };\n });\n setFiles(prev => [...prev, ...newFiles]);\n return;\n }\n\n // Slash command pasted directly (must look like /word, not an absolute path)\n if (clean.startsWith(\"/\") && !clean.includes(\"\\n\") && !clean.includes(\"/\", 1) && inputRef.current.value === \"\") {\n onCommandRef.current(clean.trim());\n update(\"\", 0);\n return;\n }\n\n // Multi-line paste → store as chip, don't spam input\n const pasteLines = clean.split(\"\\n\");\n if (pasteLines.length >= 4) {\n setPastedText(clean);\n return;\n }\n\n // Short paste — insert inline as before\n const { value: val, cursor: cur } = inputRef.current;\n const newValue = val.slice(0, cur) + clean + val.slice(cur);\n update(newValue, cur + clean.length);\n }\n\n // ── Handle submit ──\n function handleSubmit() {\n // Prevent double-submission from queued auto-submit racing with manual submit\n if (submittingRef.current) {\n return;\n }\n submittingRef.current = true;\n\n const typed = inputRef.current.value.trim();\n const paste = pastedTextRef.current;\n const imgs = imagesRef.current;\n const fls = filesRef.current;\n const ctxs = contextItemsRef.current;\n\n if (!typed && !paste && imgs.length === 0 && fls.length === 0 && ctxs.length === 0) {\n submittingRef.current = false;\n return;\n }\n\n // Slash command — must start with / and NOT contain a second /\n // (prevents file paths like /Users/whale/file.txt from being misidentified)\n if (typed.startsWith(\"/\") && !typed.includes(\"/\", 1) && !paste && imgs.length === 0 && fls.length === 0 && ctxs.length === 0) {\n update(\"\", 0);\n submittingRef.current = false;\n onCommandRef.current(typed);\n return;\n }\n\n // Build context blocks prefix\n const contextPrefix = ctxs.length > 0\n ? ctxs.map(c => contextToBlock(c)).join(\"\\n\\n\") + \"\\n\\n\"\n : \"\";\n\n // Build file context prefix\n const filePrefix = fls.length > 0\n ? fls.map(f => f.path).join(\"\\n\") + \"\\n\\n\"\n : \"\";\n\n // Combine context + file prefix + typed text + pasted content\n const body = paste\n ? (typed ? `${typed}\\n\\n${paste}` : paste)\n : (typed || (ctxs.length > 0 ? \"Tell me about this\" : \"\"));\n const fullText = contextPrefix + filePrefix + body;\n\n // Record in history\n if (fullText.trim()) {\n historyRef.current.push(fullText.trim());\n if (historyRef.current.length > MAX_HISTORY) historyRef.current.shift();\n }\n historyIndexRef.current = -1;\n\n onSubmitRef.current(fullText, imgs.length > 0 ? imgs : undefined);\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setContextItems([]);\n setPastedText(null);\n\n // Release guard after state is cleared (next tick ensures no re-entry)\n setTimeout(() => { submittingRef.current = false; }, 0);\n }\n\n // ── Raw stdin handler (handles both normal input and menu mode) ──\n useEffect(() => {\n if (!stdin) return;\n\n // When an overlay with its own useInput is active (PlanApproval, etc.),\n // detach our data listener entirely so Ink's readable handler can deliver\n // keystrokes to the overlay's useInput hooks.\n if (overlayActive) return;\n\n const onData = (data: Buffer) => {\n const str = data.toString(\"utf-8\");\n\n // ══════════════════════════════════════════════\n // DISABLED MODE — accept typing, block commands, handle Esc\n // ══════════════════════════════════════════════\n if (disabledRef.current) {\n // Escape → interrupt streaming\n if (str === \"\\x1b\") {\n onInterruptRef.current?.();\n return;\n }\n\n // Control chars handled by ChatApp (exit, expand, thinking toggle)\n const _kb = loadKeybindings();\n const exitChar = bindingToControlChar(_kb.exit);\n const expandChar = bindingToControlChar(_kb.toggle_expand);\n const thinkingChar = bindingToControlChar(_kb.toggle_thinking);\n if (str === exitChar || str === expandChar || str === thinkingChar) return;\n\n // Arrow keys — cursor movement within buffer while disabled\n if (str.startsWith(\"\\x1b[\")) {\n const { value: val, cursor: cur } = inputRef.current;\n if (str === \"\\x1b[C\") { // Right\n update(val, Math.min(cur + 1, val.length));\n } else if (str === \"\\x1b[D\") { // Left\n update(val, Math.max(cur - 1, 0));\n } else if (str === \"\\x1b[A\" || str === \"\\x1b[B\") { // Up/Down\n const lines = val.split(\"\\n\");\n if (lines.length > 1) {\n const { line: curLine, col: curCol } = getCursorLineCol(val, cur);\n const targetLine = str === \"\\x1b[A\"\n ? Math.max(0, curLine - 1)\n : Math.min(lines.length - 1, curLine + 1);\n if (targetLine !== curLine) {\n const targetCol = Math.min(curCol, lines[targetLine].length);\n let newCursor = 0;\n for (let i = 0; i < targetLine; i++) newCursor += lines[i].length + 1;\n newCursor += targetCol;\n update(val, newCursor);\n }\n }\n } else if (str === \"\\x1b[H\" || str === \"\\x1b[1~\") { // Home\n update(val, 0);\n } else if (str === \"\\x1b[F\" || str === \"\\x1b[4~\") { // End\n update(val, val.length);\n }\n return;\n }\n\n // Bracketed paste while disabled — accept into buffer\n if (str.includes(\"\\x1b[200~\")) {\n isPasting.current = true;\n let text = str.replace(/\\x1b\\[200~/g, \"\").replace(/\\x1b\\[201~/g, \"\");\n pasteBuffer.current += text;\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n }\n return;\n }\n if (isPasting.current) {\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n pasteBuffer.current += str.replace(/\\x1b\\[201~/g, \"\");\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n } else {\n pasteBuffer.current += str;\n }\n return;\n }\n\n // Enter → queue the current input for auto-submit\n if (str === \"\\r\" || str === \"\\n\") {\n const typed = inputRef.current.value.trim();\n if (typed) {\n queuedRef.current = true;\n setQueued(true);\n }\n return;\n }\n\n // Backspace\n if (str === \"\\x7f\" || str === \"\\b\") {\n const { value: val, cursor: cur } = inputRef.current;\n if (cur > 0) {\n update(val.slice(0, cur - 1) + val.slice(cur), cur - 1);\n // Un-queue if editing\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n }\n return;\n }\n\n // Slash — block menu mode while streaming\n if (str === \"/\" && inputRef.current.value === \"\") return;\n\n // Printable char — type into buffer\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + 1);\n // Un-queue if editing after queuing\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n return;\n }\n\n // Multi-character non-escape (unbracketted paste)\n if (str.length > 1 && !str.startsWith(\"\\x1b\")) {\n const codePoints = [...str];\n if (codePoints.length === 1) {\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + str.length);\n } else {\n processPaste(str);\n }\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n return;\n }\n\n return;\n }\n\n // ══════════════════════════════════════════════\n // MENU MODE — two-level navigation\n // ══════════════════════════════════════════════\n if (menuModeRef.current) {\n const hasFilter = menuFilterRef.current.length > 0;\n const inCategory = selectedCategoryRef.current !== null;\n\n // Escape or Ctrl+C → dismiss menu entirely\n if (str === \"\\x1b\" || str === \"\\x03\") {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n return;\n }\n\n // Tab → no-op\n if (str === \"\\t\") return;\n\n // ── Filter mode (has filter text) ──\n if (hasFilter) {\n if (str === \"\\r\" || str === \"\\n\") {\n const cmd = getCommandAtIndex(menuFilterRef.current, menuIndexRef.current);\n if (cmd) {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n onCommandRef.current(cmd.name);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n const count = getFilteredSelectableCount(menuFilterRef.current);\n setMenuIndexSync(Math.min(count - 1, menuIndexRef.current + 1));\n return;\n }\n if (str === \"\\x7f\" || str === \"\\b\") {\n const f = menuFilterRef.current;\n if (f.length > 1) {\n setMenuFilterSync(f.slice(0, -1));\n setMenuIndexSync(0);\n } else {\n // Clearing filter → back to Level 1\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n }\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setMenuFilterSync(menuFilterRef.current + str);\n setMenuIndexSync(0);\n return;\n }\n return;\n }\n\n // ── Level 2: inside a category ──\n if (inCategory) {\n const catIdx = selectedCategoryRef.current!;\n if (str === \"\\r\" || str === \"\\n\") {\n const cmd = getCategoryCommand(catIdx, menuIndexRef.current);\n if (cmd) {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n onCommandRef.current(cmd.name);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n const count = getCategoryCommandCount(catIdx);\n setMenuIndexSync(Math.min(count - 1, menuIndexRef.current + 1));\n return;\n }\n // Left arrow or Backspace → back to Level 1\n if (str === \"\\x1b[D\" || str === \"\\x7f\" || str === \"\\b\") {\n setMenuIndexSync(catIdx); // restore highlight to the category we were in\n setSelectedCategorySync(null);\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n // Printable → switch to filter mode\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setSelectedCategorySync(null);\n setMenuFilterSync(str);\n setMenuIndexSync(0);\n return;\n }\n return;\n }\n\n // ── Level 1: category list ──\n if (str === \"\\r\" || str === \"\\n\" || str === \"\\x1b[C\") {\n // Enter or Right → drill into selected category\n const catIdx = menuIndexRef.current;\n if (catIdx >= 0 && catIdx < getCategoryCount()) {\n setSelectedCategorySync(catIdx);\n setMenuIndexSync(0);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n setMenuIndexSync(Math.min(getCategoryCount() - 1, menuIndexRef.current + 1));\n return;\n }\n if (str === \"\\x7f\" || str === \"\\b\") {\n // Backspace on Level 1 → dismiss menu\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n // Printable → switch to filter mode\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setMenuFilterSync(str);\n setMenuIndexSync(0);\n return;\n }\n\n return;\n }\n\n // ══════════════════════════════════════════════\n // NORMAL INPUT MODE\n // ══════════════════════════════════════════════\n\n // ── Bracketed paste detection ──\n if (str.includes(\"\\x1b[200~\")) {\n isPasting.current = true;\n let text = str.replace(/\\x1b\\[200~/g, \"\").replace(/\\x1b\\[201~/g, \"\");\n pasteBuffer.current += text;\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n }\n return;\n }\n\n if (isPasting.current) {\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n pasteBuffer.current += str.replace(/\\x1b\\[201~/g, \"\");\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n } else {\n pasteBuffer.current += str;\n }\n return;\n }\n\n // ── Control chars handled by ChatApp (keybinding-aware) ──\n const _kb = loadKeybindings();\n const exitChar = bindingToControlChar(_kb.exit);\n const expandChar = bindingToControlChar(_kb.toggle_expand);\n const thinkingChar = bindingToControlChar(_kb.toggle_thinking);\n if (str === exitChar || str === expandChar || str === thinkingChar) return;\n\n // ── Enter ──\n if (str === \"\\r\" || str === \"\\n\") {\n handleSubmit();\n return;\n }\n\n // ── Tab ── (no-op in input)\n if (str === \"\\t\") return;\n\n // ── Backspace ──\n if (str === \"\\x7f\" || str === \"\\b\") {\n const { value: val, cursor: cur } = inputRef.current;\n if (cur > 0) {\n update(val.slice(0, cur - 1) + val.slice(cur), cur - 1);\n } else if (val === \"\") {\n // Empty input + backspace → remove paste chip, then context, then files, then images\n if (pastedTextRef.current) {\n setPastedText(null);\n } else if (contextItemsRef.current.length > 0) {\n setContextItems(prev => prev.slice(0, -1));\n } else if (filesRef.current.length > 0) {\n setFiles(prev => prev.slice(0, -1));\n } else if (imagesRef.current.length > 0) {\n setImages(prev => prev.slice(0, -1));\n }\n }\n return;\n }\n\n // ── Clear line (default: Ctrl+U) ──\n if (str === bindingToControlChar(_kb.clear_line)) {\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setPastedText(null);\n return;\n }\n\n // ── Delete word (default: Ctrl+W) ──\n if (str === bindingToControlChar(_kb.delete_word)) {\n const { value: val, cursor: cur } = inputRef.current;\n const before = val.slice(0, cur);\n const match = before.match(/\\S+\\s*$/);\n if (match) {\n const len = match[0].length;\n update(val.slice(0, cur - len) + val.slice(cur), cur - len);\n }\n return;\n }\n\n // ── Home (default: Ctrl+A) ──\n if (str === bindingToControlChar(_kb.home)) {\n update(inputRef.current.value, 0);\n return;\n }\n\n // ── Escape sequences ──\n if (str.startsWith(\"\\x1b[\")) {\n const { value: val, cursor: cur } = inputRef.current;\n\n if (str === \"\\x1b[C\") { // Right\n update(val, Math.min(cur + 1, val.length));\n } else if (str === \"\\x1b[D\") { // Left\n update(val, Math.max(cur - 1, 0));\n } else if (str === \"\\x1b[H\" || str === \"\\x1b[1~\") { // Home\n update(val, 0);\n } else if (str === \"\\x1b[F\" || str === \"\\x1b[4~\") { // End\n update(val, val.length);\n } else if (str === \"\\x1b[3~\") { // Delete\n if (cur < val.length) {\n update(val.slice(0, cur) + val.slice(cur + 1), cur);\n }\n } else if (str === \"\\x1b[A\" || str === \"\\x1b[B\") { // Up/Down\n const lines = val.split(\"\\n\");\n if (lines.length > 1) {\n // Multi-line: navigate lines\n const { line: curLine, col: curCol } = getCursorLineCol(val, cur);\n const targetLine = str === \"\\x1b[A\"\n ? Math.max(0, curLine - 1)\n : Math.min(lines.length - 1, curLine + 1);\n if (targetLine !== curLine) {\n const targetCol = Math.min(curCol, lines[targetLine].length);\n let newCursor = 0;\n for (let i = 0; i < targetLine; i++) newCursor += lines[i].length + 1;\n newCursor += targetCol;\n update(val, newCursor);\n }\n } else if (str === \"\\x1b[A\") {\n // Up arrow — history recall\n if (historyRef.current.length === 0) { /* no history */ }\n else {\n if (historyIndexRef.current === -1) savedInputRef.current = val;\n const newIdx = Math.min(historyIndexRef.current + 1, historyRef.current.length - 1);\n historyIndexRef.current = newIdx;\n const hist = historyRef.current[historyRef.current.length - 1 - newIdx];\n update(hist, hist.length);\n }\n } else {\n // Down arrow — forward in history\n if (historyIndexRef.current <= -1) { /* already at current */ }\n else {\n const newIdx = historyIndexRef.current - 1;\n historyIndexRef.current = newIdx;\n if (newIdx < 0) {\n update(savedInputRef.current, savedInputRef.current.length);\n } else {\n const hist = historyRef.current[historyRef.current.length - 1 - newIdx];\n update(hist, hist.length);\n }\n }\n }\n }\n // Ignore unrecognized escape sequences\n return;\n }\n\n // ── Standalone escape — clear input if non-empty ──\n if (str === \"\\x1b\") {\n const { value } = inputRef.current;\n if (value || filesRef.current.length > 0) {\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setPastedText(null);\n }\n return;\n }\n\n // ── Multi-character non-escape = paste without brackets ──\n if (str.length > 1 && !str.startsWith(\"\\x1b\")) {\n const codePoints = [...str];\n if (codePoints.length === 1) {\n // Single code point (emoji etc.)\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + str.length);\n } else {\n processPaste(str);\n }\n return;\n }\n\n // ── Single printable character ──\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n const { value: val, cursor: cur } = inputRef.current;\n\n // Slash menu trigger\n if (str === \"/\" && val === \"\") {\n setMenuModeSync(true);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n return;\n }\n\n update(val.slice(0, cur) + str + val.slice(cur), cur + 1);\n }\n };\n\n stdin.on(\"data\", onData);\n return () => { stdin.off(\"data\", onData); };\n }, [stdin, overlayActive]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // ── Render ──\n\n // Disabled — dimmed but visible input (accept typing to queue)\n if (disabled) {\n // No input and not queued — render empty (eliminates dot line but keeps component mounted)\n if (!displayValue.trim() && !queued) return <></>;\n\n const disabledLines = displayValue.split(\"\\n\");\n const { line: dCursorLine, col: dCursorCol } = displayValue\n ? getCursorLineCol(displayValue, displayCursor)\n : { line: 0, col: 0 };\n\n return (\n <Box flexDirection=\"column\">\n\n {/* Single-line disabled */}\n {disabledLines.length <= 1 ? (\n <Box>\n <Text color={colors.quaternary}>{\"· \"}</Text>\n {!displayValue ? (\n <Text color={colors.quaternary} wrap=\"truncate\">\n {queued ? \"queued — will send when done\" : \" \"}\n </Text>\n ) : (\n <Box>\n <Text color={colors.dim}>\n {displayValue.slice(0, displayCursor)}\n <Text inverse>{displayCursor < displayValue.length ? displayValue[displayCursor] : \" \"}</Text>\n {displayCursor < displayValue.length ? displayValue.slice(displayCursor + 1) : \"\"}\n </Text>\n {queued && <Text color={colors.warning}> [queued]</Text>}\n </Box>\n )}\n </Box>\n ) : (\n /* Multi-line disabled */\n <Box flexDirection=\"column\">\n {disabledLines.map((line, i) => {\n const isCursorOnLine = i === dCursorLine;\n return (\n <Box key={i}>\n <Text color={colors.quaternary}>{i === 0 ? \"· \" : \"⎸ \"}</Text>\n {isCursorOnLine ? (\n <Text color={colors.dim}>\n {line.slice(0, dCursorCol)}\n <Text inverse>{dCursorCol < line.length ? line[dCursorCol] : \" \"}</Text>\n {dCursorCol < line.length ? line.slice(dCursorCol + 1) : \"\"}\n </Text>\n ) : (\n <Text color={colors.dim}>{line}</Text>\n )}\n </Box>\n );\n })}\n {queued && (\n <Box marginLeft={2}>\n <Text color={colors.warning}>[queued]</Text>\n </Box>\n )}\n </Box>\n )}\n </Box>\n );\n }\n\n // Slash command menu — two-level categorized via SlashMenu component\n if (menuMode) {\n // Prompt line varies by level\n let promptLine: React.ReactNode;\n if (menuFilter) {\n // Filter mode\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text>\n {menuFilter}\n <Text inverse>{\" \"}</Text>\n </Text>\n </Box>\n );\n } else if (selectedCategory !== null) {\n // Level 2: show category name\n const catLabel = getCategoryLabel(selectedCategory);\n const catColor = getCategoryColor(selectedCategory);\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text color={catColor} bold>{catLabel}</Text>\n <Text color={colors.tertiary}>{\" > \"}</Text>\n <Text inverse>{\" \"}</Text>\n </Box>\n );\n } else {\n // Level 1\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text>\n <Text inverse>{\" \"}</Text>\n <Text color={colors.dim}> type to filter</Text>\n </Text>\n </Box>\n );\n }\n\n // Hint line varies by level\n const hint = selectedCategory !== null && !menuFilter\n ? \" \\u2190 back esc dismiss\"\n : \" esc to dismiss\";\n\n return (\n <Box flexDirection=\"column\">\n\n {promptLine}\n <SlashMenu filter={menuFilter} selectedIndex={menuIndex} selectedCategory={selectedCategory} />\n <Text color={colors.quaternary}>{hint}</Text>\n </Box>\n );\n }\n\n // ── Normal input rendering ──\n\n const lines = displayValue.split(\"\\n\");\n const { line: cursorLine, col: cursorCol } = displayValue\n ? getCursorLineCol(displayValue, displayCursor)\n : { line: 0, col: 0 };\n\n // Truncate display for very long pastes\n const isTruncated = lines.length > MAX_DISPLAY_LINES;\n const visibleLines = isTruncated\n ? [...lines.slice(0, MAX_DISPLAY_LINES - 1), `… ${lines.length - MAX_DISPLAY_LINES + 1} more lines`]\n : lines;\n\n return (\n <Box flexDirection=\"column\">\n {/* Attachment chips — context + images + files + pasted text */}\n {(images.length > 0 || files.length > 0 || contextItems.length > 0 || pastedText) && (\n <Box>\n <Text> </Text>\n {contextItems.map((ctx, i) => (\n <Text key={`ctx-${i}`}>\n <Text color={CONTEXT_COLORS[ctx.type] || \"cyan\"}>[</Text>\n <Text color={colors.secondary}>{ctx.type}: {ctx.title}</Text>\n <Text color={CONTEXT_COLORS[ctx.type] || \"cyan\"}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {images.map((img, i) => (\n <Text key={`img-${i}`}>\n <Text color={colors.indigo}>[</Text>\n <Text color={colors.secondary}>{img.name}</Text>\n <Text color={colors.indigo}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {files.map((f, i) => (\n <Text key={`file-${i}`}>\n <Text color={colors.purple}>[</Text>\n <Text color={colors.secondary}>{f.name}</Text>\n <Text color={colors.purple}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {pastedText && (\n <Text>\n <Text color={colors.indigo}>[</Text>\n <Text color={colors.secondary}>pasted {pastedText.split(\"\\n\").length} lines</Text>\n <Text color={colors.indigo}>]</Text>\n </Text>\n )}\n </Box>\n )}\n\n {/* Single-line input */}\n {lines.length <= 1 ? (\n <Box>\n <Text color={colors.brand} bold>{\"❯ \"}</Text>\n {!displayValue ? (\n <Text wrap=\"truncate\">\n <Text inverse> </Text>\n <Text color={colors.dim}>{`Message ${agentName || \"whale\"}, or type / for commands`}</Text>\n </Text>\n ) : (\n <Text>\n {displayValue.slice(0, displayCursor)}\n <Text inverse>{displayCursor < displayValue.length ? displayValue[displayCursor] : \" \"}</Text>\n {displayCursor < displayValue.length ? displayValue.slice(displayCursor + 1) : \"\"}\n </Text>\n )}\n </Box>\n ) : (\n /* Multi-line input */\n <Box flexDirection=\"column\">\n {visibleLines.map((line, i) => {\n const isRealLine = !isTruncated || i < MAX_DISPLAY_LINES - 1;\n const isCursorOnLine = isRealLine && i === cursorLine;\n\n return (\n <Box key={i}>\n <Text color={colors.brand} bold>{i === 0 ? \"❯ \" : \"⎸ \"}</Text>\n {isCursorOnLine ? (\n <Text>\n {line.slice(0, cursorCol)}\n <Text inverse>{cursorCol < line.length ? line[cursorCol] : \" \"}</Text>\n {cursorCol < line.length ? line.slice(cursorCol + 1) : \"\"}\n </Text>\n ) : (\n <Text color={isRealLine ? undefined : colors.tertiary}>{line}</Text>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n </Box>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACnD,SAASC,GAAG,EAAEC,IAAI,EAAEC,QAAQ,QAAQ,KAAK;AACzC,SAASC,YAAY,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,IAAI;AACvD,SAASC,QAAQ,EAAEC,OAAO,QAAQ,MAAM;AACxC,SAASC,MAAM,QAAQ,oBAAoB;AAC3C,SAASC,eAAe,EAAEC,oBAAoB,QAAQ,mCAAmC;AACzF,SAASC,SAAS,EAAEC,cAAc,IAAIC,eAAe,EAAEC,0BAA0B,EAAEC,iBAAiB,EAAEC,gBAAgB,EAAEC,uBAAuB,EAAEC,kBAAkB,EAAEC,gBAAgB,EAAEC,gBAAgB,QAAQ,gBAAgB;;AAE/N;;AAyBA;AAAA,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEA,OAAO,MAAMd,cAAc,GAAGC,eAAe;;AAE7C;;AAEA,MAAMc,gBAAwC,GAAG;EAC/C,MAAM,EAAE,WAAW;EACnB,MAAM,EAAE,YAAY;EACpB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,WAAW;EACnB,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACzC,MAAMC,iBAAiB,GAAG,CAAC;;AAE3B;;AAEA,MAAMC,aAAa,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;AACpG,MAAMC,cAAsC,GAAG;EAC7CC,OAAO,EAAExB,MAAM,CAACyB,KAAK;EAAEC,QAAQ,EAAE1B,MAAM,CAAC2B,MAAM;EAAEC,KAAK,EAAE5B,MAAM,CAAC6B,OAAO;EACrEC,SAAS,EAAE9B,MAAM,CAAC+B,OAAO;EAAEC,KAAK,EAAEhC,MAAM,CAACiC,IAAI;EAAEC,QAAQ,EAAElC,MAAM,CAACmC,IAAI;EAAEC,QAAQ,EAAE;AAClF,CAAC;;AAED;AACA,SAASC,iBAAiBA,CAACC,IAAY,EAA4B;EACjE,MAAMC,OAAO,GAAGD,IAAI,CAACE,IAAI,CAAC,CAAC;EAC3B,IAAI,CAACD,OAAO,CAACE,UAAU,CAAC,GAAG,CAAC,IAAI,CAACF,OAAO,CAACG,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;EACnE,IAAI;IACF,MAAMC,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACN,OAAO,CAAC;IAC/B,IAAII,GAAG,IAAI,OAAOA,GAAG,CAACG,EAAE,KAAK,QAAQ,IAAI,OAAOH,GAAG,CAACI,IAAI,KAAK,QAAQ,IACjEzB,aAAa,CAAC0B,QAAQ,CAACL,GAAG,CAACI,IAAI,CAAC,IAAI,OAAOJ,GAAG,CAACM,KAAK,KAAK,QAAQ,IACjE,OAAON,GAAG,CAACO,SAAS,KAAK,QAAQ,EAAE;MACrC,OAAOP,GAAG;IACZ;EACF,CAAC,CAAC,MAAM,CAAE;EACV,OAAO,IAAI;AACb;;AAEA;AACA,SAASQ,cAAcA,CAACC,GAAsB,EAAU;EACtD,MAAMC,KAAe,GAAG,EAAE;EAC1BA,KAAK,CAACC,IAAI,CAAC,kBAAkBF,GAAG,CAACL,IAAI,aAAaK,GAAG,CAACF,SAAS,IAAI,CAAC;EACpEG,KAAK,CAACC,IAAI,CAAC,KAAKF,GAAG,CAACH,KAAK,EAAE,CAAC;EAC5B,IAAIG,GAAG,CAACG,QAAQ,EAAEF,KAAK,CAACC,IAAI,CAAC,KAAKF,GAAG,CAACG,QAAQ,EAAE,CAAC;EACjD,IAAIH,GAAG,CAACI,IAAI,EAAE;IACZ,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACR,GAAG,CAACI,IAAI,CAAC,CAACK,IAAI,CAAC,CAAC,CAACC,CAAC,CAAC,EAAE,CAACC,CAAC,CAAC,KAAKD,CAAC,CAACE,aAAa,CAACD,CAAC,CAAC,CAAC,EAAE;MAC1FV,KAAK,CAACC,IAAI,CAAC,KAAKG,GAAG,KAAKC,KAAK,EAAE,CAAC;IAClC;EACF;EACAL,KAAK,CAACC,IAAI,CAAC,YAAY,CAAC;EACxB,OAAOD,KAAK,CAACY,IAAI,CAAC,IAAI,CAAC;AACzB;AAEA,SAASC,WAAWA,CAAC5B,IAAY,EAAW;EAC1C,MAAM6B,CAAC,GAAGC,aAAa,CAAC9B,IAAI,CAAC;EAC7B,IAAI,CAAC6B,CAAC,IAAIA,CAAC,CAACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;EACxC,MAAMqB,GAAG,GAAGtE,OAAO,CAACoE,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC;EACpC,OAAOD,GAAG,IAAIlD,gBAAgB,IAAIvB,UAAU,CAACuE,CAAC,CAAC;AACjD;;AAEA;AACA,SAASC,aAAaA,CAACG,GAAW,EAAU;EAC1C,IAAIJ,CAAC,GAAGI,GAAG,CAAC/B,IAAI,CAAC,CAAC;EAClB;EACA,IAAI2B,CAAC,CAAC1B,UAAU,CAAC,SAAS,CAAC,EAAE;IAC3B0B,CAAC,GAAGK,kBAAkB,CAACL,CAAC,CAACM,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;EACrD;EACA;EACAN,CAAC,GAAGA,CAAC,CAACM,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;EACjC;EACAN,CAAC,GAAGA,CAAC,CAACM,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;EAC7B,OAAON,CAAC;AACV;AAEA,SAASO,UAAUA,CAACpC,IAAY,EAAW;EACzC,MAAM6B,CAAC,GAAGC,aAAa,CAAC9B,IAAI,CAAC;EAC7B,IAAI,CAAC6B,CAAC,IAAIA,CAAC,CAACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;EACxC;EACA,MAAMqB,GAAG,GAAGtE,OAAO,CAACoE,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC;EACpC,IAAID,GAAG,IAAIlD,gBAAgB,EAAE,OAAO,KAAK;EACzC,IAAI;IAAE,OAAOvB,UAAU,CAACuE,CAAC,CAAC,IAAItE,QAAQ,CAACsE,CAAC,CAAC,CAACQ,MAAM,CAAC,CAAC;EAAE,CAAC,CAAC,MAAM;IAAE,OAAO,KAAK;EAAE;AAC9E;AAEA,SAASC,SAASA,CAACC,QAAgB,EAA0B;EAC3D,IAAI;IACF,MAAMV,CAAC,GAAGC,aAAa,CAACS,QAAQ,CAAC;IACjC,MAAMR,GAAG,GAAGtE,OAAO,CAACoE,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC;IACpC,MAAMQ,SAAS,GAAG3D,gBAAgB,CAACkD,GAAG,CAAC;IACvC,IAAI,CAACS,SAAS,EAAE,OAAO,IAAI;IAC3B,MAAMC,IAAI,GAAGlF,QAAQ,CAACsE,CAAC,CAAC;IACxB,IAAIY,IAAI,CAACC,IAAI,GAAG5D,cAAc,EAAE,OAAO,IAAI;IAC3C,MAAMoC,IAAI,GAAG7D,YAAY,CAACwE,CAAC,CAAC;IAC5B,OAAO;MAAEc,IAAI,EAAEd,CAAC;MAAEe,IAAI,EAAEpF,QAAQ,CAACqE,CAAC,CAAC;MAAEgB,MAAM,EAAE3B,IAAI,CAAC4B,QAAQ,CAAC,QAAQ,CAAC;MAAEN;IAAU,CAAC;EACnF,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,SAASO,gBAAgBA,CAAC/C,IAAY,EAAEgD,MAAc,EAAiC;EACrF,IAAIC,GAAG,GAAG,CAAC;EACX,MAAMlC,KAAK,GAAGf,IAAI,CAACkD,KAAK,CAAC,IAAI,CAAC;EAC9B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpC,KAAK,CAACqC,MAAM,EAAED,CAAC,EAAE,EAAE;IACrC,IAAIH,MAAM,IAAIC,GAAG,GAAGlC,KAAK,CAACoC,CAAC,CAAC,CAACC,MAAM,EAAE;MACnC,OAAO;QAAEC,IAAI,EAAEF,CAAC;QAAEG,GAAG,EAAEN,MAAM,GAAGC;MAAI,CAAC;IACvC;IACAA,GAAG,IAAIlC,KAAK,CAACoC,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC;EAC5B;EACA,OAAO;IAAEC,IAAI,EAAEtC,KAAK,CAACqC,MAAM,GAAG,CAAC;IAAEE,GAAG,EAAEvC,KAAK,CAACA,KAAK,CAACqC,MAAM,GAAG,CAAC,CAAC,CAACA;EAAO,CAAC;AACxE;;AAEA;;AAWA;;AAEA,OAAO,SAASG,SAASA,CAAC;EAAEC,QAAQ;EAAEC,SAAS;EAAEC,QAAQ;EAAEC,aAAa;EAAEC,SAAS;EAAEC;AAA4B,CAAC,EAAE;EAClH,MAAM;IAAEC;EAAM,CAAC,GAAG1G,QAAQ,CAAC,CAAC;;EAE5B;EACA,MAAM2G,QAAQ,GAAG9G,MAAM,CAAC;IAAEmE,KAAK,EAAE,EAAE;IAAE4B,MAAM,EAAE;EAAE,CAAC,CAAC;EACjD,MAAM,CAACgB,YAAY,EAAEC,eAAe,CAAC,GAAGlH,QAAQ,CAAC,EAAE,CAAC;EACpD,MAAM,CAACmH,aAAa,EAAEC,gBAAgB,CAAC,GAAGpH,QAAQ,CAAC,CAAC,CAAC;;EAErD;EACA,MAAMqH,WAAW,GAAGnH,MAAM,CAACuG,QAAQ,CAAC;EACpC,MAAMa,YAAY,GAAGpH,MAAM,CAACwG,SAAS,CAAC;EACtC,MAAMa,cAAc,GAAGrH,MAAM,CAAC4G,WAAW,CAAC;EAC1C,MAAMU,WAAW,GAAGtH,MAAM,CAACyG,QAAQ,CAAC;EACpC1G,SAAS,CAAC,MAAM;IAAEoH,WAAW,CAACI,OAAO,GAAGhB,QAAQ;EAAE,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAChExG,SAAS,CAAC,MAAM;IAAEqH,YAAY,CAACG,OAAO,GAAGf,SAAS;EAAE,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EACnEzG,SAAS,CAAC,MAAM;IAAEsH,cAAc,CAACE,OAAO,GAAGX,WAAW;EAAE,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EACzE7G,SAAS,CAAC,MAAM;IAAEuH,WAAW,CAACC,OAAO,GAAGd,QAAQ;EAAE,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;;EAEhE;EACA,MAAM,CAACe,MAAM,EAAEC,SAAS,CAAC,GAAG3H,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAM4H,SAAS,GAAG1H,MAAM,CAAC,KAAK,CAAC;;EAE/B;EACA,MAAM2H,aAAa,GAAG3H,MAAM,CAAC,KAAK,CAAC;;EAEnC;EACA,MAAM4H,eAAe,GAAG5H,MAAM,CAACyG,QAAQ,CAAC;EACxC1G,SAAS,CAAC,MAAM;IACd,IAAI6H,eAAe,CAACL,OAAO,IAAI,CAACd,QAAQ,IAAIiB,SAAS,CAACH,OAAO,EAAE;MAC7D;MACAG,SAAS,CAACH,OAAO,GAAG,KAAK;MACzBE,SAAS,CAAC,KAAK,CAAC;MAChBI,YAAY,CAAC,CAAC;IAChB;IACAD,eAAe,CAACL,OAAO,GAAGd,QAAQ;EACpC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;;EAEd;EACA,MAAM,CAACqB,QAAQ,EAAEC,WAAW,CAAC,GAAGjI,QAAQ,CAAC,KAAK,CAAC;EAC/C,MAAMkI,WAAW,GAAGhI,MAAM,CAAC,KAAK,CAAC;EACjC,MAAM,CAACiI,UAAU,EAAEC,aAAa,CAAC,GAAGpI,QAAQ,CAAC,EAAE,CAAC;EAChD,MAAMqI,aAAa,GAAGnI,MAAM,CAAC,EAAE,CAAC;EAChC,MAAM,CAACoI,SAAS,EAAEC,YAAY,CAAC,GAAGvI,QAAQ,CAAC,CAAC,CAAC;EAC7C,MAAMwI,YAAY,GAAGtI,MAAM,CAAC,CAAC,CAAC;EAC9B,MAAM,CAACuI,MAAM,EAAEC,SAAS,CAAC,GAAG1I,QAAQ,CAAoB,EAAE,CAAC;EAC3D,MAAM2I,SAAS,GAAGzI,MAAM,CAAoB,EAAE,CAAC;EAC/C,MAAM,CAAC0I,KAAK,EAAEC,QAAQ,CAAC,GAAG7I,QAAQ,CAAmB,EAAE,CAAC;EACxD,MAAM8I,QAAQ,GAAG5I,MAAM,CAAmB,EAAE,CAAC;EAC7C,MAAM,CAAC6I,YAAY,EAAEC,eAAe,CAAC,GAAGhJ,QAAQ,CAAsB,EAAE,CAAC;EACzE,MAAMiJ,eAAe,GAAG/I,MAAM,CAAsB,EAAE,CAAC;;EAEvD;EACA,MAAM,CAACgJ,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGnJ,QAAQ,CAAgB,IAAI,CAAC;EAC7E,MAAMoJ,mBAAmB,GAAGlJ,MAAM,CAAgB,IAAI,CAAC;EACvD,SAASmJ,uBAAuBA,CAACC,GAAkB,EAAE;IACnDF,mBAAmB,CAAC3B,OAAO,GAAG6B,GAAG;IACjCH,mBAAmB,CAACG,GAAG,CAAC;EAC1B;;EAEA;EACA,MAAMC,UAAU,GAAGrJ,MAAM,CAAW,EAAE,CAAC;EACvC,MAAMsJ,eAAe,GAAGtJ,MAAM,CAAC,CAAC,CAAC,CAAC;EAClC,MAAMuJ,aAAa,GAAGvJ,MAAM,CAAC,EAAE,CAAC;EAChC,MAAMwJ,WAAW,GAAG,EAAE;;EAEtB;EACA,MAAMC,SAAS,GAAGzJ,MAAM,CAAC,KAAK,CAAC;EAC/B,MAAM0J,WAAW,GAAG1J,MAAM,CAAC,EAAE,CAAC;;EAE9B;EACA,MAAM,CAAC2J,UAAU,EAAEC,aAAa,CAAC,GAAG9J,QAAQ,CAAgB,IAAI,CAAC;EACjE,MAAM+J,aAAa,GAAG7J,MAAM,CAAgB,IAAI,CAAC;;EAEjD;EACAD,SAAS,CAAC,MAAM;IAAE0I,SAAS,CAAClB,OAAO,GAAGgB,MAAM;EAAE,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAC1DxI,SAAS,CAAC,MAAM;IAAE6I,QAAQ,CAACrB,OAAO,GAAGmB,KAAK;EAAE,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EACvD3I,SAAS,CAAC,MAAM;IAAEgJ,eAAe,CAACxB,OAAO,GAAGsB,YAAY;EAAE,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;EAC5E9I,SAAS,CAAC,MAAM;IAAE8J,aAAa,CAACtC,OAAO,GAAGoC,UAAU;EAAE,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EACtE;EACA,SAASG,eAAeA,CAACV,KAAY,EAAE;IACrCpB,WAAW,CAACT,OAAO,GAAG6B,KAAG;IACzBrB,WAAW,CAACqB,KAAG,CAAC;EAClB;EACA,SAASW,iBAAiBA,CAACX,KAAW,EAAE;IACtCjB,aAAa,CAACZ,OAAO,GAAG6B,KAAG;IAC3BlB,aAAa,CAACkB,KAAG,CAAC;EACpB;EACA,SAASY,gBAAgBA,CAACZ,KAAW,EAAE;IACrCd,YAAY,CAACf,OAAO,GAAG6B,KAAG;IAC1Bf,YAAY,CAACe,KAAG,CAAC;EACnB;;EAEA;EACArJ,SAAS,CAAC,MAAM;IACdkK,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC;IACnC,OAAO,MAAM;MAAEF,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC;IAAE,CAAC;EACvD,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,SAASC,MAAMA,CAACjG,KAAa,EAAE4B,MAAc,EAAE;IAC7Ce,QAAQ,CAACS,OAAO,GAAG;MAAEpD,KAAK;MAAE4B;IAAO,CAAC;IACpCiB,eAAe,CAAC7C,KAAK,CAAC;IACtB+C,gBAAgB,CAACnB,MAAM,CAAC;EAC1B;;EAEA;EACA,SAASsE,YAAYA,CAACtH,IAAY,EAAE;IAClC,MAAMuH,KAAK,GAAGvH,IAAI,CAACmC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAACA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;;IAE9D;IACA,MAAMrB,GAAG,GAAGf,iBAAiB,CAACwH,KAAK,CAAC;IACpC,IAAIzG,GAAG,EAAE;MACP;MACA,IAAI,CAACkF,eAAe,CAACxB,OAAO,CAACgD,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACjH,EAAE,KAAKM,GAAG,CAACN,EAAE,CAAC,EAAE;QACvDuF,eAAe,CAAC2B,IAAI,IAAI,CAAC,GAAGA,IAAI,EAAE5G,GAAG,CAAC,CAAC;MACzC;MACA;IACF;;IAEA;IACA,MAAMC,KAAK,GAAGwG,KAAK,CAACrE,KAAK,CAAC,IAAI,CAAC,CAACyE,GAAG,CAACC,CAAC,IAAIA,CAAC,CAAC1H,IAAI,CAAC,CAAC,CAAC,CAAC2H,MAAM,CAACC,OAAO,CAAC;IAClE,IAAI/G,KAAK,CAACqC,MAAM,GAAG,CAAC,IAAIrC,KAAK,CAACgH,KAAK,CAACH,GAAC,IAAIhG,WAAW,CAACgG,GAAC,CAAC,CAAC,EAAE;MACxD,MAAMI,SAA4B,GAAG,EAAE;MACvC,KAAK,MAAM3E,IAAI,IAAItC,KAAK,EAAE;QACxB,MAAMkH,GAAG,GAAG3F,SAAS,CAACe,IAAI,CAAC;QAC3B,IAAI4E,GAAG,EAAED,SAAS,CAAChH,IAAI,CAACiH,GAAG,CAAC;MAC9B;MACA,IAAID,SAAS,CAAC5E,MAAM,GAAG,CAAC,EAAE;QACxBqC,SAAS,CAACiC,MAAI,IAAI,CAAC,GAAGA,MAAI,EAAE,GAAGM,SAAS,CAAC,CAAC;QAC1C;MACF;IACF;;IAEA;IACA,IAAIjH,KAAK,CAACqC,MAAM,GAAG,CAAC,IAAIrC,KAAK,CAACqC,MAAM,IAAI,CAAC,IAAIrC,KAAK,CAACgH,KAAK,CAACH,GAAC,IAAIxF,UAAU,CAACwF,GAAC,CAAC,CAAC,EAAE;MAC5E,MAAMM,QAA0B,GAAGnH,KAAK,CAAC4G,GAAG,CAACC,GAAC,IAAI;QAChD,MAAM/F,CAAC,GAAGC,aAAa,CAAC8F,GAAC,CAAC;QAC1B,OAAO;UAAEjF,IAAI,EAAEd,CAAC;UAAEe,IAAI,EAAEpF,QAAQ,CAACqE,CAAC;QAAE,CAAC;MACvC,CAAC,CAAC;MACF+D,QAAQ,CAAC8B,MAAI,IAAI,CAAC,GAAGA,MAAI,EAAE,GAAGQ,QAAQ,CAAC,CAAC;MACxC;IACF;;IAEA;IACA,IAAIX,KAAK,CAACpH,UAAU,CAAC,GAAG,CAAC,IAAI,CAACoH,KAAK,CAAC7G,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC6G,KAAK,CAAC7G,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIqD,QAAQ,CAACS,OAAO,CAACpD,KAAK,KAAK,EAAE,EAAE;MAC9GiD,YAAY,CAACG,OAAO,CAAC+C,KAAK,CAACrH,IAAI,CAAC,CAAC,CAAC;MAClCmH,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;MACb;IACF;;IAEA;IACA,MAAMc,UAAU,GAAGZ,KAAK,CAACrE,KAAK,CAAC,IAAI,CAAC;IACpC,IAAIiF,UAAU,CAAC/E,MAAM,IAAI,CAAC,EAAE;MAC1ByD,aAAa,CAACU,KAAK,CAAC;MACpB;IACF;;IAEA;IACA,MAAM;MAAEnG,KAAK,EAAEiF,KAAG;MAAErD,MAAM,EAAEoF;IAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;IACpD,MAAM6D,QAAQ,GAAGhC,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,GAAG,CAAC,GAAGb,KAAK,GAAGlB,KAAG,CAACiC,KAAK,CAACF,GAAG,CAAC;IAC3Df,MAAM,CAACgB,QAAQ,EAAED,GAAG,GAAGb,KAAK,CAACnE,MAAM,CAAC;EACtC;;EAEA;EACA,SAAS0B,YAAYA,CAAA,EAAG;IACtB;IACA,IAAIF,aAAa,CAACJ,OAAO,EAAE;MACzB;IACF;IACAI,aAAa,CAACJ,OAAO,GAAG,IAAI;IAE5B,MAAM+D,KAAK,GAAGxE,QAAQ,CAACS,OAAO,CAACpD,KAAK,CAAClB,IAAI,CAAC,CAAC;IAC3C,MAAMsI,KAAK,GAAG1B,aAAa,CAACtC,OAAO;IACnC,MAAMiE,IAAI,GAAG/C,SAAS,CAAClB,OAAO;IAC9B,MAAMkE,GAAG,GAAG7C,QAAQ,CAACrB,OAAO;IAC5B,MAAMmE,IAAI,GAAG3C,eAAe,CAACxB,OAAO;IAEpC,IAAI,CAAC+D,KAAK,IAAI,CAACC,KAAK,IAAIC,IAAI,CAACrF,MAAM,KAAK,CAAC,IAAIsF,GAAG,CAACtF,MAAM,KAAK,CAAC,IAAIuF,IAAI,CAACvF,MAAM,KAAK,CAAC,EAAE;MAClFwB,aAAa,CAACJ,OAAO,GAAG,KAAK;MAC7B;IACF;;IAEA;IACA;IACA,IAAI+D,KAAK,CAACpI,UAAU,CAAC,GAAG,CAAC,IAAI,CAACoI,KAAK,CAAC7H,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC8H,KAAK,IAAIC,IAAI,CAACrF,MAAM,KAAK,CAAC,IAAIsF,GAAG,CAACtF,MAAM,KAAK,CAAC,IAAIuF,IAAI,CAACvF,MAAM,KAAK,CAAC,EAAE;MAC5HiE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;MACbzC,aAAa,CAACJ,OAAO,GAAG,KAAK;MAC7BH,YAAY,CAACG,OAAO,CAAC+D,KAAK,CAAC;MAC3B;IACF;;IAEA;IACA,MAAMK,aAAa,GAAGD,IAAI,CAACvF,MAAM,GAAG,CAAC,GACjCuF,IAAI,CAAChB,GAAG,CAACF,GAAC,IAAI5G,cAAc,CAAC4G,GAAC,CAAC,CAAC,CAAC9F,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,GACtD,EAAE;;IAEN;IACA,MAAMkH,UAAU,GAAGH,GAAG,CAACtF,MAAM,GAAG,CAAC,GAC7BsF,GAAG,CAACf,GAAG,CAACmB,CAAC,IAAIA,CAAC,CAACnG,IAAI,CAAC,CAAChB,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GACxC,EAAE;;IAEN;IACA,MAAMoH,IAAI,GAAGP,KAAK,GACbD,KAAK,GAAG,GAAGA,KAAK,OAAOC,KAAK,EAAE,GAAGA,KAAK,GACtCD,KAAK,KAAKI,IAAI,CAACvF,MAAM,GAAG,CAAC,GAAG,oBAAoB,GAAG,EAAE,CAAE;IAC5D,MAAM4F,QAAQ,GAAGJ,aAAa,GAAGC,UAAU,GAAGE,IAAI;;IAElD;IACA,IAAIC,QAAQ,CAAC9I,IAAI,CAAC,CAAC,EAAE;MACnBoG,UAAU,CAAC9B,OAAO,CAACxD,IAAI,CAACgI,QAAQ,CAAC9I,IAAI,CAAC,CAAC,CAAC;MACxC,IAAIoG,UAAU,CAAC9B,OAAO,CAACpB,MAAM,GAAGqD,WAAW,EAAEH,UAAU,CAAC9B,OAAO,CAACyE,KAAK,CAAC,CAAC;IACzE;IACA1C,eAAe,CAAC/B,OAAO,GAAG,CAAC,CAAC;IAE5BJ,WAAW,CAACI,OAAO,CAACwE,QAAQ,EAAEP,IAAI,CAACrF,MAAM,GAAG,CAAC,GAAGqF,IAAI,GAAGS,SAAS,CAAC;IACjE7B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACb5B,SAAS,CAAC,EAAE,CAAC;IACbG,QAAQ,CAAC,EAAE,CAAC;IACZG,eAAe,CAAC,EAAE,CAAC;IACnBc,aAAa,CAAC,IAAI,CAAC;;IAEnB;IACAsC,UAAU,CAAC,MAAM;MAAEvE,aAAa,CAACJ,OAAO,GAAG,KAAK;IAAE,CAAC,EAAE,CAAC,CAAC;EACzD;;EAEA;EACAxH,SAAS,CAAC,MAAM;IACd,IAAI,CAAC8G,KAAK,EAAE;;IAEZ;IACA;IACA;IACA,IAAIH,aAAa,EAAE;IAEnB,MAAMyF,MAAM,GAAIlI,IAAY,IAAK;MAC/B,MAAMmI,GAAG,GAAGnI,IAAI,CAAC4B,QAAQ,CAAC,OAAO,CAAC;;MAElC;MACA;MACA;MACA,IAAIyB,WAAW,CAACC,OAAO,EAAE;QACvB;QACA,IAAI6E,GAAG,KAAK,MAAM,EAAE;UAClB/E,cAAc,CAACE,OAAO,GAAG,CAAC;UAC1B;QACF;;QAEA;QACA,MAAM8E,GAAG,GAAG3L,eAAe,CAAC,CAAC;QAC7B,MAAM4L,QAAQ,GAAG3L,oBAAoB,CAAC0L,GAAG,CAACE,IAAI,CAAC;QAC/C,MAAMC,UAAU,GAAG7L,oBAAoB,CAAC0L,GAAG,CAACI,aAAa,CAAC;QAC1D,MAAMC,YAAY,GAAG/L,oBAAoB,CAAC0L,GAAG,CAACM,eAAe,CAAC;QAC9D,IAAIP,GAAG,KAAKE,QAAQ,IAAIF,GAAG,KAAKI,UAAU,IAAIJ,GAAG,KAAKM,YAAY,EAAE;;QAEpE;QACA,IAAIN,GAAG,CAAClJ,UAAU,CAAC,OAAO,CAAC,EAAE;UAC3B,MAAM;YAAEiB,KAAK,EAAEiF,KAAG;YAAErD,MAAM,EAAEoF;UAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;UACpD,IAAI6E,GAAG,KAAK,QAAQ,EAAE;YAAE;YACtBhC,MAAM,CAAChB,KAAG,EAAEwD,IAAI,CAACC,GAAG,CAAC1B,KAAG,GAAG,CAAC,EAAE/B,KAAG,CAACjD,MAAM,CAAC,CAAC;UAC5C,CAAC,MAAM,IAAIiG,GAAG,KAAK,QAAQ,EAAE;YAAE;YAC7BhC,MAAM,CAAChB,KAAG,EAAEwD,IAAI,CAACE,GAAG,CAAC3B,KAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;UACnC,CAAC,MAAM,IAAIiB,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,QAAQ,EAAE;YAAE;YACjD,MAAMtI,OAAK,GAAGsF,KAAG,CAACnD,KAAK,CAAC,IAAI,CAAC;YAC7B,IAAInC,OAAK,CAACqC,MAAM,GAAG,CAAC,EAAE;cACpB,MAAM;gBAAEC,IAAI,EAAE2G,OAAO;gBAAE1G,GAAG,EAAE2G;cAAO,CAAC,GAAGlH,gBAAgB,CAACsD,KAAG,EAAE+B,KAAG,CAAC;cACjE,MAAM8B,UAAU,GAAGb,GAAG,KAAK,QAAQ,GAC/BQ,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEC,OAAO,GAAG,CAAC,CAAC,GACxBH,IAAI,CAACC,GAAG,CAAC/I,OAAK,CAACqC,MAAM,GAAG,CAAC,EAAE4G,OAAO,GAAG,CAAC,CAAC;cAC3C,IAAIE,UAAU,KAAKF,OAAO,EAAE;gBAC1B,MAAMG,SAAS,GAAGN,IAAI,CAACC,GAAG,CAACG,MAAM,EAAElJ,OAAK,CAACmJ,UAAU,CAAC,CAAC9G,MAAM,CAAC;gBAC5D,IAAIgH,SAAS,GAAG,CAAC;gBACjB,KAAK,IAAIjH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+G,UAAU,EAAE/G,CAAC,EAAE,EAAEiH,SAAS,IAAIrJ,OAAK,CAACoC,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC;gBACrEgH,SAAS,IAAID,SAAS;gBACtB9C,MAAM,CAAChB,KAAG,EAAE+D,SAAS,CAAC;cACxB;YACF;UACF,CAAC,MAAM,IAAIf,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,SAAS,EAAE;YAAE;YAClDhC,MAAM,CAAChB,KAAG,EAAE,CAAC,CAAC;UAChB,CAAC,MAAM,IAAIgD,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,SAAS,EAAE;YAAE;YAClDhC,MAAM,CAAChB,KAAG,EAAEA,KAAG,CAACjD,MAAM,CAAC;UACzB;UACA;QACF;;QAEA;QACA,IAAIiG,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;UAC7BgG,SAAS,CAAClC,OAAO,GAAG,IAAI;UACxB,IAAIxE,MAAI,GAAGqJ,GAAG,CAAClH,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;UACpEwE,WAAW,CAACnC,OAAO,IAAIxE,MAAI;UAC3B,IAAIqJ,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC7BgG,SAAS,CAAClC,OAAO,GAAG,KAAK;YACzB,MAAMgE,OAAK,GAAG7B,WAAW,CAACnC,OAAO;YACjCmC,WAAW,CAACnC,OAAO,GAAG,EAAE;YACxB8C,YAAY,CAACkB,OAAK,CAAC;UACrB;UACA;QACF;QACA,IAAI9B,SAAS,CAAClC,OAAO,EAAE;UACrB,IAAI6E,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;YAC7BgG,SAAS,CAAClC,OAAO,GAAG,KAAK;YACzBmC,WAAW,CAACnC,OAAO,IAAI6E,GAAG,CAAClH,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YACrD,MAAMqG,OAAK,GAAG7B,WAAW,CAACnC,OAAO;YACjCmC,WAAW,CAACnC,OAAO,GAAG,EAAE;YACxB8C,YAAY,CAACkB,OAAK,CAAC;UACrB,CAAC,MAAM;YACL7B,WAAW,CAACnC,OAAO,IAAI6E,GAAG;UAC5B;UACA;QACF;;QAEA;QACA,IAAIA,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,IAAI,EAAE;UAChC,MAAMd,OAAK,GAAGxE,QAAQ,CAACS,OAAO,CAACpD,KAAK,CAAClB,IAAI,CAAC,CAAC;UAC3C,IAAIqI,OAAK,EAAE;YACT5D,SAAS,CAACH,OAAO,GAAG,IAAI;YACxBE,SAAS,CAAC,IAAI,CAAC;UACjB;UACA;QACF;;QAEA;QACA,IAAI2E,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,IAAI,EAAE;UAClC,MAAM;YAAEjI,KAAK,EAAEiF,KAAG;YAAErD,MAAM,EAAEoF;UAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;UACpD,IAAI4D,KAAG,GAAG,CAAC,EAAE;YACXf,MAAM,CAAChB,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,GAAG,CAAC,CAAC,GAAG/B,KAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAG,CAAC,CAAC;YACvD;YACA,IAAIzD,SAAS,CAACH,OAAO,EAAE;cAAEG,SAAS,CAACH,OAAO,GAAG,KAAK;cAAEE,SAAS,CAAC,KAAK,CAAC;YAAE;UACxE;UACA;QACF;;QAEA;QACA,IAAI2E,GAAG,KAAK,GAAG,IAAItF,QAAQ,CAACS,OAAO,CAACpD,KAAK,KAAK,EAAE,EAAE;;QAElD;QACA,IAAIiI,GAAG,CAACjG,MAAM,KAAK,CAAC,IAAIiG,GAAG,CAACgB,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;UACjD,MAAM;YAAEjJ,KAAK,EAAEiF,KAAG;YAAErD,MAAM,EAAEoF;UAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;UACpD6C,MAAM,CAAChB,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC,GAAGiB,GAAG,GAAGhD,KAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAG,CAAC,CAAC;UACzD;UACA,IAAIzD,SAAS,CAACH,OAAO,EAAE;YAAEG,SAAS,CAACH,OAAO,GAAG,KAAK;YAAEE,SAAS,CAAC,KAAK,CAAC;UAAE;UACtE;QACF;;QAEA;QACA,IAAI2E,GAAG,CAACjG,MAAM,GAAG,CAAC,IAAI,CAACiG,GAAG,CAAClJ,UAAU,CAAC,MAAM,CAAC,EAAE;UAC7C,MAAMmK,UAAU,GAAG,CAAC,GAAGjB,GAAG,CAAC;UAC3B,IAAIiB,UAAU,CAAClH,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM;cAAEhC,KAAK,EAAEiF,KAAG;cAAErD,MAAM,EAAEoF;YAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;YACpD6C,MAAM,CAAChB,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC,GAAGiB,GAAG,GAAGhD,KAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAGiB,GAAG,CAACjG,MAAM,CAAC;UACpE,CAAC,MAAM;YACLkE,YAAY,CAAC+B,GAAG,CAAC;UACnB;UACA,IAAI1E,SAAS,CAACH,OAAO,EAAE;YAAEG,SAAS,CAACH,OAAO,GAAG,KAAK;YAAEE,SAAS,CAAC,KAAK,CAAC;UAAE;UACtE;QACF;QAEA;MACF;;MAEA;MACA;MACA;MACA,IAAIO,WAAW,CAACT,OAAO,EAAE;QACvB,MAAM+F,SAAS,GAAGnF,aAAa,CAACZ,OAAO,CAACpB,MAAM,GAAG,CAAC;QAClD,MAAMoH,UAAU,GAAGrE,mBAAmB,CAAC3B,OAAO,KAAK,IAAI;;QAEvD;QACA,IAAI6E,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,MAAM,EAAE;UACpCtC,eAAe,CAAC,KAAK,CAAC;UACtBC,iBAAiB,CAAC,EAAE,CAAC;UACrBC,gBAAgB,CAAC,CAAC,CAAC;UACnBb,uBAAuB,CAAC,IAAI,CAAC;UAC7BiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;UACb;QACF;;QAEA;QACA,IAAIgC,GAAG,KAAK,IAAI,EAAE;;QAElB;QACA,IAAIkB,SAAS,EAAE;UACb,IAAIlB,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,IAAI,EAAE;YAChC,MAAMoB,GAAG,GAAGxM,iBAAiB,CAACmH,aAAa,CAACZ,OAAO,EAAEe,YAAY,CAACf,OAAO,CAAC;YAC1E,IAAIiG,GAAG,EAAE;cACP1D,eAAe,CAAC,KAAK,CAAC;cACtBC,iBAAiB,CAAC,EAAE,CAAC;cACrBC,gBAAgB,CAAC,CAAC,CAAC;cACnBb,uBAAuB,CAAC,IAAI,CAAC;cAC7BiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;cACbhD,YAAY,CAACG,OAAO,CAACiG,GAAG,CAAC7H,IAAI,CAAC;YAChC;YACA;UACF;UACA,IAAIyG,GAAG,KAAK,QAAQ,EAAE;YACpBpC,gBAAgB,CAAC4C,IAAI,CAACE,GAAG,CAAC,CAAC,EAAExE,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;YACvD;UACF;UACA,IAAI6E,GAAG,KAAK,QAAQ,EAAE;YACpB,MAAMqB,KAAK,GAAG1M,0BAA0B,CAACoH,aAAa,CAACZ,OAAO,CAAC;YAC/DyC,gBAAgB,CAAC4C,IAAI,CAACC,GAAG,CAACY,KAAK,GAAG,CAAC,EAAEnF,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;YAC/D;UACF;UACA,IAAI6E,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,IAAI,EAAE;YAClC,MAAMP,GAAC,GAAG1D,aAAa,CAACZ,OAAO;YAC/B,IAAIsE,GAAC,CAAC1F,MAAM,GAAG,CAAC,EAAE;cAChB4D,iBAAiB,CAAC8B,GAAC,CAACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;cACjCrB,gBAAgB,CAAC,CAAC,CAAC;YACrB,CAAC,MAAM;cACL;cACAD,iBAAiB,CAAC,EAAE,CAAC;cACrBC,gBAAgB,CAAC,CAAC,CAAC;cACnBb,uBAAuB,CAAC,IAAI,CAAC;YAC/B;YACA;UACF;UACA,IAAIiD,GAAG,CAAClJ,UAAU,CAAC,MAAM,CAAC,EAAE;UAC5B,IAAIkJ,GAAG,CAACjG,MAAM,KAAK,CAAC,IAAIiG,GAAG,CAACgB,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;YACjDrD,iBAAiB,CAAC5B,aAAa,CAACZ,OAAO,GAAG6E,GAAG,CAAC;YAC9CpC,gBAAgB,CAAC,CAAC,CAAC;YACnB;UACF;UACA;QACF;;QAEA;QACA,IAAIuD,UAAU,EAAE;UACd,MAAMG,MAAM,GAAGxE,mBAAmB,CAAC3B,OAAQ;UAC3C,IAAI6E,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,IAAI,EAAE;YAChC,MAAMoB,KAAG,GAAGrM,kBAAkB,CAACuM,MAAM,EAAEpF,YAAY,CAACf,OAAO,CAAC;YAC5D,IAAIiG,KAAG,EAAE;cACP1D,eAAe,CAAC,KAAK,CAAC;cACtBC,iBAAiB,CAAC,EAAE,CAAC;cACrBC,gBAAgB,CAAC,CAAC,CAAC;cACnBb,uBAAuB,CAAC,IAAI,CAAC;cAC7BiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;cACbhD,YAAY,CAACG,OAAO,CAACiG,KAAG,CAAC7H,IAAI,CAAC;YAChC;YACA;UACF;UACA,IAAIyG,GAAG,KAAK,QAAQ,EAAE;YACpBpC,gBAAgB,CAAC4C,IAAI,CAACE,GAAG,CAAC,CAAC,EAAExE,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;YACvD;UACF;UACA,IAAI6E,GAAG,KAAK,QAAQ,EAAE;YACpB,MAAMqB,OAAK,GAAGvM,uBAAuB,CAACwM,MAAM,CAAC;YAC7C1D,gBAAgB,CAAC4C,IAAI,CAACC,GAAG,CAACY,OAAK,GAAG,CAAC,EAAEnF,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;YAC/D;UACF;UACA;UACA,IAAI6E,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,IAAI,EAAE;YACtDpC,gBAAgB,CAAC0D,MAAM,CAAC,CAAC,CAAC;YAC1BvE,uBAAuB,CAAC,IAAI,CAAC;YAC7B;UACF;UACA,IAAIiD,GAAG,CAAClJ,UAAU,CAAC,MAAM,CAAC,EAAE;UAC5B;UACA,IAAIkJ,GAAG,CAACjG,MAAM,KAAK,CAAC,IAAIiG,GAAG,CAACgB,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;YACjDjE,uBAAuB,CAAC,IAAI,CAAC;YAC7BY,iBAAiB,CAACqC,GAAG,CAAC;YACtBpC,gBAAgB,CAAC,CAAC,CAAC;YACnB;UACF;UACA;QACF;;QAEA;QACA,IAAIoC,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,QAAQ,EAAE;UACpD;UACA,MAAMsB,QAAM,GAAGpF,YAAY,CAACf,OAAO;UACnC,IAAImG,QAAM,IAAI,CAAC,IAAIA,QAAM,GAAGzM,gBAAgB,CAAC,CAAC,EAAE;YAC9CkI,uBAAuB,CAACuE,QAAM,CAAC;YAC/B1D,gBAAgB,CAAC,CAAC,CAAC;UACrB;UACA;QACF;QACA,IAAIoC,GAAG,KAAK,QAAQ,EAAE;UACpBpC,gBAAgB,CAAC4C,IAAI,CAACE,GAAG,CAAC,CAAC,EAAExE,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;UACvD;QACF;QACA,IAAI6E,GAAG,KAAK,QAAQ,EAAE;UACpBpC,gBAAgB,CAAC4C,IAAI,CAACC,GAAG,CAAC5L,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAEqH,YAAY,CAACf,OAAO,GAAG,CAAC,CAAC,CAAC;UAC5E;QACF;QACA,IAAI6E,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,IAAI,EAAE;UAClC;UACAtC,eAAe,CAAC,KAAK,CAAC;UACtBC,iBAAiB,CAAC,EAAE,CAAC;UACrBC,gBAAgB,CAAC,CAAC,CAAC;UACnBb,uBAAuB,CAAC,IAAI,CAAC;UAC7BiB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;UACb;QACF;QACA,IAAIgC,GAAG,CAAClJ,UAAU,CAAC,MAAM,CAAC,EAAE;QAC5B;QACA,IAAIkJ,GAAG,CAACjG,MAAM,KAAK,CAAC,IAAIiG,GAAG,CAACgB,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;UACjDrD,iBAAiB,CAACqC,GAAG,CAAC;UACtBpC,gBAAgB,CAAC,CAAC,CAAC;UACnB;QACF;QAEA;MACF;;MAEA;MACA;MACA;;MAEA;MACA,IAAIoC,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC7BgG,SAAS,CAAClC,OAAO,GAAG,IAAI;QACxB,IAAIxE,MAAI,GAAGqJ,GAAG,CAAClH,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACpEwE,WAAW,CAACnC,OAAO,IAAIxE,MAAI;QAC3B,IAAIqJ,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;UAC7BgG,SAAS,CAAClC,OAAO,GAAG,KAAK;UACzB,MAAMgE,OAAK,GAAG7B,WAAW,CAACnC,OAAO;UACjCmC,WAAW,CAACnC,OAAO,GAAG,EAAE;UACxB8C,YAAY,CAACkB,OAAK,CAAC;QACrB;QACA;MACF;MAEA,IAAI9B,SAAS,CAAClC,OAAO,EAAE;QACrB,IAAI6E,GAAG,CAAC3I,QAAQ,CAAC,WAAW,CAAC,EAAE;UAC7BgG,SAAS,CAAClC,OAAO,GAAG,KAAK;UACzBmC,WAAW,CAACnC,OAAO,IAAI6E,GAAG,CAAClH,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;UACrD,MAAMqG,OAAK,GAAG7B,WAAW,CAACnC,OAAO;UACjCmC,WAAW,CAACnC,OAAO,GAAG,EAAE;UACxB8C,YAAY,CAACkB,OAAK,CAAC;QACrB,CAAC,MAAM;UACL7B,WAAW,CAACnC,OAAO,IAAI6E,GAAG;QAC5B;QACA;MACF;;MAEA;MACA,MAAMC,KAAG,GAAG3L,eAAe,CAAC,CAAC;MAC7B,MAAM4L,UAAQ,GAAG3L,oBAAoB,CAAC0L,KAAG,CAACE,IAAI,CAAC;MAC/C,MAAMC,YAAU,GAAG7L,oBAAoB,CAAC0L,KAAG,CAACI,aAAa,CAAC;MAC1D,MAAMC,cAAY,GAAG/L,oBAAoB,CAAC0L,KAAG,CAACM,eAAe,CAAC;MAC9D,IAAIP,GAAG,KAAKE,UAAQ,IAAIF,GAAG,KAAKI,YAAU,IAAIJ,GAAG,KAAKM,cAAY,EAAE;;MAEpE;MACA,IAAIN,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,IAAI,EAAE;QAChCvE,YAAY,CAAC,CAAC;QACd;MACF;;MAEA;MACA,IAAIuE,GAAG,KAAK,IAAI,EAAE;;MAElB;MACA,IAAIA,GAAG,KAAK,MAAM,IAAIA,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM;UAAEjI,KAAK,EAAEiF,KAAG;UAAErD,MAAM,EAAEoF;QAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;QACpD,IAAI4D,KAAG,GAAG,CAAC,EAAE;UACXf,MAAM,CAAChB,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,GAAG,CAAC,CAAC,GAAG/B,KAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAG,CAAC,CAAC;QACzD,CAAC,MAAM,IAAI/B,KAAG,KAAK,EAAE,EAAE;UACrB;UACA,IAAIS,aAAa,CAACtC,OAAO,EAAE;YACzBqC,aAAa,CAAC,IAAI,CAAC;UACrB,CAAC,MAAM,IAAIb,eAAe,CAACxB,OAAO,CAACpB,MAAM,GAAG,CAAC,EAAE;YAC7C2C,eAAe,CAAC2B,MAAI,IAAIA,MAAI,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;UAC5C,CAAC,MAAM,IAAIzC,QAAQ,CAACrB,OAAO,CAACpB,MAAM,GAAG,CAAC,EAAE;YACtCwC,QAAQ,CAAC8B,MAAI,IAAIA,MAAI,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;UACrC,CAAC,MAAM,IAAI5C,SAAS,CAAClB,OAAO,CAACpB,MAAM,GAAG,CAAC,EAAE;YACvCqC,SAAS,CAACiC,MAAI,IAAIA,MAAI,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;UACtC;QACF;QACA;MACF;;MAEA;MACA,IAAIe,GAAG,KAAKzL,oBAAoB,CAAC0L,KAAG,CAACsB,UAAU,CAAC,EAAE;QAChDvD,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACb5B,SAAS,CAAC,EAAE,CAAC;QACbG,QAAQ,CAAC,EAAE,CAAC;QACZiB,aAAa,CAAC,IAAI,CAAC;QACnB;MACF;;MAEA;MACA,IAAIwC,GAAG,KAAKzL,oBAAoB,CAAC0L,KAAG,CAACuB,WAAW,CAAC,EAAE;QACjD,MAAM;UAAEzJ,KAAK,EAAEiF,KAAG;UAAErD,MAAM,EAAEoF;QAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;QACpD,MAAMsG,MAAM,GAAGzE,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC;QAChC,MAAM2C,KAAK,GAAGD,MAAM,CAACC,KAAK,CAAC,SAAS,CAAC;QACrC,IAAIA,KAAK,EAAE;UACT,MAAMC,GAAG,GAAGD,KAAK,CAAC,CAAC,CAAC,CAAC3H,MAAM;UAC3BiE,MAAM,CAAChB,KAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,GAAG4C,GAAG,CAAC,GAAG3E,KAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAG4C,GAAG,CAAC;QAC7D;QACA;MACF;;MAEA;MACA,IAAI3B,GAAG,KAAKzL,oBAAoB,CAAC0L,KAAG,CAAC2B,IAAI,CAAC,EAAE;QAC1C5D,MAAM,CAACtD,QAAQ,CAACS,OAAO,CAACpD,KAAK,EAAE,CAAC,CAAC;QACjC;MACF;;MAEA;MACA,IAAIiI,GAAG,CAAClJ,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM;UAAEiB,KAAK,EAAEiF,MAAG;UAAErD,MAAM,EAAEoF;QAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;QAEpD,IAAI6E,GAAG,KAAK,QAAQ,EAAE;UAAE;UACtBhC,MAAM,CAAChB,MAAG,EAAEwD,IAAI,CAACC,GAAG,CAAC1B,KAAG,GAAG,CAAC,EAAE/B,MAAG,CAACjD,MAAM,CAAC,CAAC;QAC5C,CAAC,MAAM,IAAIiG,GAAG,KAAK,QAAQ,EAAE;UAAE;UAC7BhC,MAAM,CAAChB,MAAG,EAAEwD,IAAI,CAACE,GAAG,CAAC3B,KAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,MAAM,IAAIiB,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,SAAS,EAAE;UAAE;UAClDhC,MAAM,CAAChB,MAAG,EAAE,CAAC,CAAC;QAChB,CAAC,MAAM,IAAIgD,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,SAAS,EAAE;UAAE;UAClDhC,MAAM,CAAChB,MAAG,EAAEA,MAAG,CAACjD,MAAM,CAAC;QACzB,CAAC,MAAM,IAAIiG,GAAG,KAAK,SAAS,EAAE;UAAE;UAC9B,IAAIjB,KAAG,GAAG/B,MAAG,CAACjD,MAAM,EAAE;YACpBiE,MAAM,CAAChB,MAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC,GAAG/B,MAAG,CAACiC,KAAK,CAACF,KAAG,GAAG,CAAC,CAAC,EAAEA,KAAG,CAAC;UACrD;QACF,CAAC,MAAM,IAAIiB,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,QAAQ,EAAE;UAAE;UACjD,MAAMtI,OAAK,GAAGsF,MAAG,CAACnD,KAAK,CAAC,IAAI,CAAC;UAC7B,IAAInC,OAAK,CAACqC,MAAM,GAAG,CAAC,EAAE;YACpB;YACA,MAAM;cAAEC,IAAI,EAAE2G,SAAO;cAAE1G,GAAG,EAAE2G;YAAO,CAAC,GAAGlH,gBAAgB,CAACsD,MAAG,EAAE+B,KAAG,CAAC;YACjE,MAAM8B,YAAU,GAAGb,GAAG,KAAK,QAAQ,GAC/BQ,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEC,SAAO,GAAG,CAAC,CAAC,GACxBH,IAAI,CAACC,GAAG,CAAC/I,OAAK,CAACqC,MAAM,GAAG,CAAC,EAAE4G,SAAO,GAAG,CAAC,CAAC;YAC3C,IAAIE,YAAU,KAAKF,SAAO,EAAE;cAC1B,MAAMG,WAAS,GAAGN,IAAI,CAACC,GAAG,CAACG,QAAM,EAAElJ,OAAK,CAACmJ,YAAU,CAAC,CAAC9G,MAAM,CAAC;cAC5D,IAAIgH,WAAS,GAAG,CAAC;cACjB,KAAK,IAAIjH,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG+G,YAAU,EAAE/G,GAAC,EAAE,EAAEiH,WAAS,IAAIrJ,OAAK,CAACoC,GAAC,CAAC,CAACC,MAAM,GAAG,CAAC;cACrEgH,WAAS,IAAID,WAAS;cACtB9C,MAAM,CAAChB,MAAG,EAAE+D,WAAS,CAAC;YACxB;UACF,CAAC,MAAM,IAAIf,GAAG,KAAK,QAAQ,EAAE;YAC3B;YACA,IAAI/C,UAAU,CAAC9B,OAAO,CAACpB,MAAM,KAAK,CAAC,EAAE,CAAE,iBAAkB,MACpD;cACH,IAAImD,eAAe,CAAC/B,OAAO,KAAK,CAAC,CAAC,EAAEgC,aAAa,CAAChC,OAAO,GAAG6B,MAAG;cAC/D,MAAM6E,MAAM,GAAGrB,IAAI,CAACC,GAAG,CAACvD,eAAe,CAAC/B,OAAO,GAAG,CAAC,EAAE8B,UAAU,CAAC9B,OAAO,CAACpB,MAAM,GAAG,CAAC,CAAC;cACnFmD,eAAe,CAAC/B,OAAO,GAAG0G,MAAM;cAChC,MAAMC,IAAI,GAAG7E,UAAU,CAAC9B,OAAO,CAAC8B,UAAU,CAAC9B,OAAO,CAACpB,MAAM,GAAG,CAAC,GAAG8H,MAAM,CAAC;cACvE7D,MAAM,CAAC8D,IAAI,EAAEA,IAAI,CAAC/H,MAAM,CAAC;YAC3B;UACF,CAAC,MAAM;YACL;YACA,IAAImD,eAAe,CAAC/B,OAAO,IAAI,CAAC,CAAC,EAAE,CAAE,yBAA0B,MAC1D;cACH,MAAM0G,QAAM,GAAG3E,eAAe,CAAC/B,OAAO,GAAG,CAAC;cAC1C+B,eAAe,CAAC/B,OAAO,GAAG0G,QAAM;cAChC,IAAIA,QAAM,GAAG,CAAC,EAAE;gBACd7D,MAAM,CAACb,aAAa,CAAChC,OAAO,EAAEgC,aAAa,CAAChC,OAAO,CAACpB,MAAM,CAAC;cAC7D,CAAC,MAAM;gBACL,MAAM+H,MAAI,GAAG7E,UAAU,CAAC9B,OAAO,CAAC8B,UAAU,CAAC9B,OAAO,CAACpB,MAAM,GAAG,CAAC,GAAG8H,QAAM,CAAC;gBACvE7D,MAAM,CAAC8D,MAAI,EAAEA,MAAI,CAAC/H,MAAM,CAAC;cAC3B;YACF;UACF;QACF;QACA;QACA;MACF;;MAEA;MACA,IAAIiG,GAAG,KAAK,MAAM,EAAE;QAClB,MAAM;UAAEjI,KAAK,EAALA;QAAM,CAAC,GAAG2C,QAAQ,CAACS,OAAO;QAClC,IAAIpD,OAAK,IAAIyE,QAAQ,CAACrB,OAAO,CAACpB,MAAM,GAAG,CAAC,EAAE;UACxCiE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;UACb5B,SAAS,CAAC,EAAE,CAAC;UACbG,QAAQ,CAAC,EAAE,CAAC;UACZiB,aAAa,CAAC,IAAI,CAAC;QACrB;QACA;MACF;;MAEA;MACA,IAAIwC,GAAG,CAACjG,MAAM,GAAG,CAAC,IAAI,CAACiG,GAAG,CAAClJ,UAAU,CAAC,MAAM,CAAC,EAAE;QAC7C,MAAMmK,YAAU,GAAG,CAAC,GAAGjB,GAAG,CAAC;QAC3B,IAAIiB,YAAU,CAAClH,MAAM,KAAK,CAAC,EAAE;UAC3B;UACA,MAAM;YAAEhC,KAAK,EAAEiF,MAAG;YAAErD,MAAM,EAAEoF;UAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;UACpD6C,MAAM,CAAChB,MAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC,GAAGiB,GAAG,GAAGhD,MAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAGiB,GAAG,CAACjG,MAAM,CAAC;QACpE,CAAC,MAAM;UACLkE,YAAY,CAAC+B,GAAG,CAAC;QACnB;QACA;MACF;;MAEA;MACA,IAAIA,GAAG,CAACjG,MAAM,KAAK,CAAC,IAAIiG,GAAG,CAACgB,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QACjD,MAAM;UAAEjJ,KAAK,EAAEiF,MAAG;UAAErD,MAAM,EAAEoF;QAAI,CAAC,GAAGrE,QAAQ,CAACS,OAAO;;QAEpD;QACA,IAAI6E,GAAG,KAAK,GAAG,IAAIhD,MAAG,KAAK,EAAE,EAAE;UAC7BU,eAAe,CAAC,IAAI,CAAC;UACrBC,iBAAiB,CAAC,EAAE,CAAC;UACrBC,gBAAgB,CAAC,CAAC,CAAC;UACnB;QACF;QAEAI,MAAM,CAAChB,MAAG,CAACiC,KAAK,CAAC,CAAC,EAAEF,KAAG,CAAC,GAAGiB,GAAG,GAAGhD,MAAG,CAACiC,KAAK,CAACF,KAAG,CAAC,EAAEA,KAAG,GAAG,CAAC,CAAC;MAC3D;IACF,CAAC;IAEDtE,KAAK,CAACsH,EAAE,CAAC,MAAM,EAAEhC,MAAM,CAAC;IACxB,OAAO,MAAM;MAAEtF,KAAK,CAACuH,GAAG,CAAC,MAAM,EAAEjC,MAAM,CAAC;IAAE,CAAC;EAC7C,CAAC,EAAE,CAACtF,KAAK,EAAEH,aAAa,CAAC,CAAC,CAAC,CAAC;;EAE5B;;EAEA;EACA,IAAID,QAAQ,EAAE;IACZ;IACA,IAAI,CAACM,YAAY,CAAC9D,IAAI,CAAC,CAAC,IAAI,CAACuE,MAAM,EAAE,oBAAO/F,IAAA,CAAAF,SAAA,IAAI,CAAC;IAEjD,MAAM8M,aAAa,GAAGtH,YAAY,CAACd,KAAK,CAAC,IAAI,CAAC;IAC9C,MAAM;MAAEG,IAAI,EAAEkI,WAAW;MAAEjI,GAAG,EAAEkI;IAAW,CAAC,GAAGxH,YAAY,GACvDjB,gBAAgB,CAACiB,YAAY,EAAEE,aAAa,CAAC,GAC7C;MAAEb,IAAI,EAAE,CAAC;MAAEC,GAAG,EAAE;IAAE,CAAC;IAEvB,oBACE5E,IAAA,CAACxB,GAAG;MAACuO,aAAa,EAAC,QAAQ;MAAAC,QAAA,EAGxBJ,aAAa,CAAClI,MAAM,IAAI,CAAC,gBACxBxE,KAAA,CAAC1B,GAAG;QAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACkO,UAAW;UAAAF,QAAA,EAAE;QAAI,CAAO,CAAC,EAC5C,CAAC1H,YAAY,gBACZtF,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACkO,UAAW;UAACC,IAAI,EAAC,UAAU;UAAAH,QAAA,EAC5CjH,MAAM,GAAG,8BAA8B,GAAG;QAAG,CAC1C,CAAC,gBAEP7F,KAAA,CAAC1B,GAAG;UAAAwO,QAAA,gBACF9M,KAAA,CAACzB,IAAI;YAACwO,KAAK,EAAEjO,MAAM,CAACoO,GAAI;YAAAJ,QAAA,GACrB1H,YAAY,CAACsE,KAAK,CAAC,CAAC,EAAEpE,aAAa,CAAC,eACrCxF,IAAA,CAACvB,IAAI;cAAC4O,OAAO;cAAAL,QAAA,EAAExH,aAAa,GAAGF,YAAY,CAACZ,MAAM,GAAGY,YAAY,CAACE,aAAa,CAAC,GAAG;YAAG,CAAO,CAAC,EAC7FA,aAAa,GAAGF,YAAY,CAACZ,MAAM,GAAGY,YAAY,CAACsE,KAAK,CAACpE,aAAa,GAAG,CAAC,CAAC,GAAG,EAAE;UAAA,CAC7E,CAAC,EACNO,MAAM,iBAAI/F,IAAA,CAACvB,IAAI;YAACwO,KAAK,EAAEjO,MAAM,CAAC+B,OAAQ;YAAAiM,QAAA,EAAC;UAAS,CAAM,CAAC;QAAA,CACrD,CACN;MAAA,CACE,CAAC;MAAA;MAEN;MACA9M,KAAA,CAAC1B,GAAG;QAACuO,aAAa,EAAC,QAAQ;QAAAC,QAAA,GACxBJ,aAAa,CAAC3D,GAAG,CAAC,CAACtE,MAAI,EAAEF,GAAC,KAAK;UAC9B,MAAM6I,cAAc,GAAG7I,GAAC,KAAKoI,WAAW;UACxC,oBACE3M,KAAA,CAAC1B,GAAG;YAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;cAACwO,KAAK,EAAEjO,MAAM,CAACkO,UAAW;cAAAF,QAAA,EAAEvI,GAAC,KAAK,CAAC,GAAG,IAAI,GAAG;YAAI,CAAO,CAAC,EAC7D6I,cAAc,gBACbpN,KAAA,CAACzB,IAAI;cAACwO,KAAK,EAAEjO,MAAM,CAACoO,GAAI;cAAAJ,QAAA,GACrBrI,MAAI,CAACiF,KAAK,CAAC,CAAC,EAAEkD,UAAU,CAAC,eAC1B9M,IAAA,CAACvB,IAAI;gBAAC4O,OAAO;gBAAAL,QAAA,EAAEF,UAAU,GAAGnI,MAAI,CAACD,MAAM,GAAGC,MAAI,CAACmI,UAAU,CAAC,GAAG;cAAG,CAAO,CAAC,EACvEA,UAAU,GAAGnI,MAAI,CAACD,MAAM,GAAGC,MAAI,CAACiF,KAAK,CAACkD,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE;YAAA,CACvD,CAAC,gBAEP9M,IAAA,CAACvB,IAAI;cAACwO,KAAK,EAAEjO,MAAM,CAACoO,GAAI;cAAAJ,QAAA,EAAErI;YAAI,CAAO,CACtC;UAAA,GAVOF,GAWL,CAAC;QAEV,CAAC,CAAC,EACDsB,MAAM,iBACL/F,IAAA,CAACxB,GAAG;UAAC+O,UAAU,EAAE,CAAE;UAAAP,QAAA,eACjBhN,IAAA,CAACvB,IAAI;YAACwO,KAAK,EAAEjO,MAAM,CAAC+B,OAAQ;YAAAiM,QAAA,EAAC;UAAQ,CAAM;QAAC,CACzC,CACN;MAAA,CACE;IACN,CACE,CAAC;EAEV;;EAEA;EACA,IAAI3G,QAAQ,EAAE;IACZ;IACA,IAAImH,UAA2B;IAC/B,IAAIhH,UAAU,EAAE;MACd;MACAgH,UAAU,gBACRtN,KAAA,CAAC1B,GAAG;QAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACyB,KAAM;UAACgN,IAAI;UAAAT,QAAA,EAAE;QAAI,CAAO,CAAC,eAC7C9M,KAAA,CAACzB,IAAI;UAAAuO,QAAA,GACFxG,UAAU,eACXxG,IAAA,CAACvB,IAAI;YAAC4O,OAAO;YAAAL,QAAA,EAAE;UAAG,CAAO,CAAC;QAAA,CACtB,CAAC;MAAA,CACJ,CACN;IACH,CAAC,MAAM,IAAIzF,gBAAgB,KAAK,IAAI,EAAE;MACpC;MACA,MAAMmG,QAAQ,GAAG/N,gBAAgB,CAAC4H,gBAAgB,CAAC;MACnD,MAAMoG,QAAQ,GAAG/N,gBAAgB,CAAC2H,gBAAgB,CAAC;MACnDiG,UAAU,gBACRtN,KAAA,CAAC1B,GAAG;QAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACyB,KAAM;UAACgN,IAAI;UAAAT,QAAA,EAAE;QAAI,CAAO,CAAC,eAC7ChN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEU,QAAS;UAACF,IAAI;UAAAT,QAAA,EAAEU;QAAQ,CAAO,CAAC,eAC7C1N,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAAC4O,QAAS;UAAAZ,QAAA,EAAE;QAAK,CAAO,CAAC,eAC5ChN,IAAA,CAACvB,IAAI;UAAC4O,OAAO;UAAAL,QAAA,EAAE;QAAG,CAAO,CAAC;MAAA,CACvB,CACN;IACH,CAAC,MAAM;MACL;MACAQ,UAAU,gBACRtN,KAAA,CAAC1B,GAAG;QAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACyB,KAAM;UAACgN,IAAI;UAAAT,QAAA,EAAE;QAAI,CAAO,CAAC,eAC7C9M,KAAA,CAACzB,IAAI;UAAAuO,QAAA,gBACHhN,IAAA,CAACvB,IAAI;YAAC4O,OAAO;YAAAL,QAAA,EAAE;UAAG,CAAO,CAAC,eAC1BhN,IAAA,CAACvB,IAAI;YAACwO,KAAK,EAAEjO,MAAM,CAACoO,GAAI;YAAAJ,QAAA,EAAC;UAAe,CAAM,CAAC;QAAA,CAC3C,CAAC;MAAA,CACJ,CACN;IACH;;IAEA;IACA,MAAMa,IAAI,GAAGtG,gBAAgB,KAAK,IAAI,IAAI,CAACf,UAAU,GACjD,4BAA4B,GAC5B,kBAAkB;IAEtB,oBACEtG,KAAA,CAAC1B,GAAG;MAACuO,aAAa,EAAC,QAAQ;MAAAC,QAAA,GAExBQ,UAAU,eACXxN,IAAA,CAACb,SAAS;QAACgK,MAAM,EAAE3C,UAAW;QAACsH,aAAa,EAAEnH,SAAU;QAACY,gBAAgB,EAAEA;MAAiB,CAAE,CAAC,eAC/FvH,IAAA,CAACvB,IAAI;QAACwO,KAAK,EAAEjO,MAAM,CAACkO,UAAW;QAAAF,QAAA,EAAEa;MAAI,CAAO,CAAC;IAAA,CAC1C,CAAC;EAEV;;EAEA;;EAEA,MAAMxL,OAAK,GAAGiD,YAAY,CAACd,KAAK,CAAC,IAAI,CAAC;EACtC,MAAM;IAAEG,IAAI,EAAEoJ,UAAU;IAAEnJ,GAAG,EAAEoJ;EAAU,CAAC,GAAG1I,YAAY,GACrDjB,gBAAgB,CAACiB,YAAY,EAAEE,aAAa,CAAC,GAC7C;IAAEb,IAAI,EAAE,CAAC;IAAEC,GAAG,EAAE;EAAE,CAAC;;EAEvB;EACA,MAAMqJ,WAAW,GAAG5L,OAAK,CAACqC,MAAM,GAAGrE,iBAAiB;EACpD,MAAM6N,YAAY,GAAGD,WAAW,GAC5B,CAAC,GAAG5L,OAAK,CAACuH,KAAK,CAAC,CAAC,EAAEvJ,iBAAiB,GAAG,CAAC,CAAC,EAAE,KAAKgC,OAAK,CAACqC,MAAM,GAAGrE,iBAAiB,GAAG,CAAC,aAAa,CAAC,GAClGgC,OAAK;EAET,oBACEnC,KAAA,CAAC1B,GAAG;IAACuO,aAAa,EAAC,QAAQ;IAAAC,QAAA,GAExB,CAAClG,MAAM,CAACpC,MAAM,GAAG,CAAC,IAAIuC,KAAK,CAACvC,MAAM,GAAG,CAAC,IAAI0C,YAAY,CAAC1C,MAAM,GAAG,CAAC,IAAIwD,UAAU,kBAC9EhI,KAAA,CAAC1B,GAAG;MAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;QAAAuO,QAAA,EAAC;MAAE,CAAM,CAAC,EACd5F,YAAY,CAAC6B,GAAG,CAAC,CAAC7G,KAAG,EAAEqC,GAAC,kBACvBvE,KAAA,CAACzB,IAAI;QAAAuO,QAAA,gBACHhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAE1M,cAAc,CAAC6B,KAAG,CAACL,IAAI,CAAC,IAAI,MAAO;UAAAiL,QAAA,EAAC;QAAC,CAAM,CAAC,eACzD9M,KAAA,CAACzB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACmP,SAAU;UAAAnB,QAAA,GAAE5K,KAAG,CAACL,IAAI,EAAC,IAAE,EAACK,KAAG,CAACH,KAAK;QAAA,CAAO,CAAC,eAC7DjC,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAE1M,cAAc,CAAC6B,KAAG,CAACL,IAAI,CAAC,IAAI,MAAO;UAAAiL,QAAA,EAAC;QAAC,CAAM,CAAC,eACzDhN,IAAA,CAACvB,IAAI;UAAAuO,QAAA,EAAC;QAAC,CAAM,CAAC;MAAA,GAJL,OAAOvI,GAAC,EAKb,CACP,CAAC,EACDqC,MAAM,CAACmC,GAAG,CAAC,CAACM,KAAG,EAAE9E,GAAC,kBACjBvE,KAAA,CAACzB,IAAI;QAAAuO,QAAA,gBACHhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACoP,MAAO;UAAApB,QAAA,EAAC;QAAC,CAAM,CAAC,eACpChN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACmP,SAAU;UAAAnB,QAAA,EAAEzD,KAAG,CAACrF;QAAI,CAAO,CAAC,eAChDlE,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACoP,MAAO;UAAApB,QAAA,EAAC;QAAC,CAAM,CAAC,eACpChN,IAAA,CAACvB,IAAI;UAAAuO,QAAA,EAAC;QAAC,CAAM,CAAC;MAAA,GAJL,OAAOvI,GAAC,EAKb,CACP,CAAC,EACDwC,KAAK,CAACgC,GAAG,CAAC,CAACmB,GAAC,EAAE3F,GAAC,kBACdvE,KAAA,CAACzB,IAAI;QAAAuO,QAAA,gBACHhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAAC2B,MAAO;UAAAqM,QAAA,EAAC;QAAC,CAAM,CAAC,eACpChN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACmP,SAAU;UAAAnB,QAAA,EAAE5C,GAAC,CAAClG;QAAI,CAAO,CAAC,eAC9ClE,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAAC2B,MAAO;UAAAqM,QAAA,EAAC;QAAC,CAAM,CAAC,eACpChN,IAAA,CAACvB,IAAI;UAAAuO,QAAA,EAAC;QAAC,CAAM,CAAC;MAAA,GAJL,QAAQvI,GAAC,EAKd,CACP,CAAC,EACDyD,UAAU,iBACThI,KAAA,CAACzB,IAAI;QAAAuO,QAAA,gBACHhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACoP,MAAO;UAAApB,QAAA,EAAC;QAAC,CAAM,CAAC,eACpC9M,KAAA,CAACzB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACmP,SAAU;UAAAnB,QAAA,GAAC,SAAO,EAAC9E,UAAU,CAAC1D,KAAK,CAAC,IAAI,CAAC,CAACE,MAAM,EAAC,QAAM;QAAA,CAAM,CAAC,eAClF1E,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACoP,MAAO;UAAApB,QAAA,EAAC;QAAC,CAAM,CAAC;MAAA,CAChC,CACP;IAAA,CACE,CACN,EAGA3K,OAAK,CAACqC,MAAM,IAAI,CAAC,gBAChBxE,KAAA,CAAC1B,GAAG;MAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;QAACwO,KAAK,EAAEjO,MAAM,CAACyB,KAAM;QAACgN,IAAI;QAAAT,QAAA,EAAE;MAAI,CAAO,CAAC,EAC5C,CAAC1H,YAAY,gBACZpF,KAAA,CAACzB,IAAI;QAAC0O,IAAI,EAAC,UAAU;QAAAH,QAAA,gBACnBhN,IAAA,CAACvB,IAAI;UAAC4O,OAAO;UAAAL,QAAA,EAAC;QAAC,CAAM,CAAC,eACtBhN,IAAA,CAACvB,IAAI;UAACwO,KAAK,EAAEjO,MAAM,CAACoO,GAAI;UAAAJ,QAAA,EAAE,WAAW9H,SAAS,IAAI,OAAO;QAA0B,CAAO,CAAC;MAAA,CACvF,CAAC,gBAEPhF,KAAA,CAACzB,IAAI;QAAAuO,QAAA,GACF1H,YAAY,CAACsE,KAAK,CAAC,CAAC,EAAEpE,aAAa,CAAC,eACrCxF,IAAA,CAACvB,IAAI;UAAC4O,OAAO;UAAAL,QAAA,EAAExH,aAAa,GAAGF,YAAY,CAACZ,MAAM,GAAGY,YAAY,CAACE,aAAa,CAAC,GAAG;QAAG,CAAO,CAAC,EAC7FA,aAAa,GAAGF,YAAY,CAACZ,MAAM,GAAGY,YAAY,CAACsE,KAAK,CAACpE,aAAa,GAAG,CAAC,CAAC,GAAG,EAAE;MAAA,CAC7E,CACP;IAAA,CACE,CAAC;IAAA;IAEN;IACAxF,IAAA,CAACxB,GAAG;MAACuO,aAAa,EAAC,QAAQ;MAAAC,QAAA,EACxBkB,YAAY,CAACjF,GAAG,CAAC,CAACtE,MAAI,EAAEF,GAAC,KAAK;QAC7B,MAAM4J,UAAU,GAAG,CAACJ,WAAW,IAAIxJ,GAAC,GAAGpE,iBAAiB,GAAG,CAAC;QAC5D,MAAMiN,gBAAc,GAAGe,UAAU,IAAI5J,GAAC,KAAKsJ,UAAU;QAErD,oBACE7N,KAAA,CAAC1B,GAAG;UAAAwO,QAAA,gBACFhN,IAAA,CAACvB,IAAI;YAACwO,KAAK,EAAEjO,MAAM,CAACyB,KAAM;YAACgN,IAAI;YAAAT,QAAA,EAAEvI,GAAC,KAAK,CAAC,GAAG,IAAI,GAAG;UAAI,CAAO,CAAC,EAC7D6I,gBAAc,gBACbpN,KAAA,CAACzB,IAAI;YAAAuO,QAAA,GACFrI,MAAI,CAACiF,KAAK,CAAC,CAAC,EAAEoE,SAAS,CAAC,eACzBhO,IAAA,CAACvB,IAAI;cAAC4O,OAAO;cAAAL,QAAA,EAAEgB,SAAS,GAAGrJ,MAAI,CAACD,MAAM,GAAGC,MAAI,CAACqJ,SAAS,CAAC,GAAG;YAAG,CAAO,CAAC,EACrEA,SAAS,GAAGrJ,MAAI,CAACD,MAAM,GAAGC,MAAI,CAACiF,KAAK,CAACoE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE;UAAA,CACrD,CAAC,gBAEPhO,IAAA,CAACvB,IAAI;YAACwO,KAAK,EAAEoB,UAAU,GAAG7D,SAAS,GAAGxL,MAAM,CAAC4O,QAAS;YAAAZ,QAAA,EAAErI;UAAI,CAAO,CACpE;QAAA,GAVOF,GAWL,CAAC;MAEV,CAAC;IAAC,CACC,CACN;EAAA,CACE,CAAC;AAEV","ignoreList":[]}
1
+ {"version":3,"file":"ChatInput.js","names":["useState","useEffect","useRef","Box","Text","useStdin","readFileSync","existsSync","statSync","basename","extname","colors","loadKeybindings","bindingToControlChar","SlashMenu","SLASH_COMMANDS","_SLASH_COMMANDS","getFilteredSelectableCount","getCommandAtIndex","getCategoryCount","getCategoryCommandCount","getCategoryCommand","getCategoryLabel","getCategoryColor","jsx","_jsx","jsxs","_jsxs","IMAGE_EXTENSIONS","MAX_IMAGE_SIZE","MAX_DISPLAY_LINES","CONTEXT_TYPES","CONTEXT_COLORS","product","brand","customer","purple","order","success","inventory","warning","media","pink","document","info","location","parseWhaleContext","text","trimmed","trim","startsWith","endsWith","obj","JSON","parse","id","type","includes","title","sourceApp","contextToBlock","ctx","lines","push","subtitle","data","key","value","Object","entries","sort","a","b","localeCompare","join","isImagePath","p","normalizePath","ext","toLowerCase","raw","decodeURIComponent","replace","isFilePath","isFile","loadImage","filePath","mediaType","stat","size","path","name","base64","toString","getCursorLineCol","cursor","pos","split","i","length","line","col","ChatInput","onSubmit","onCommand","disabled","overlayActive","agentName","onInterrupt","stdin","inputRef","displayValue","setDisplayValue","displayCursor","setDisplayCursor","onSubmitRef","onCommandRef","onInterruptRef","disabledRef","current","queued","setQueued","queuedRef","submittingRef","prevDisabledRef","handleSubmit","menuMode","setMenuMode","menuModeRef","menuFilter","setMenuFilter","menuFilterRef","menuIndex","setMenuIndex","menuIndexRef","images","setImages","imagesRef","files","setFiles","filesRef","contextItems","setContextItems","contextItemsRef","selectedCategory","setSelectedCategory","selectedCategoryRef","setSelectedCategorySync","val","historyRef","historyIndexRef","savedInputRef","MAX_HISTORY","isPasting","pasteBuffer","pastedText","setPastedText","pastedTextRef","setMenuModeSync","setMenuFilterSync","setMenuIndexSync","process","stdout","write","update","processPaste","clean","some","c","prev","map","l","filter","Boolean","every","newImages","img","newFiles","pasteLines","cur","newValue","slice","typed","paste","imgs","fls","ctxs","contextPrefix","filePrefix","f","body","fullText","shift","undefined","setTimeout","onData","str","_kb","exitChar","exit","expandChar","toggle_expand","thinkingChar","toggle_thinking","Math","min","max","curLine","curCol","targetLine","targetCol","newCursor","charCodeAt","codePoints","hasFilter","inCategory","cmd","count","catIdx","clear_line","delete_word","before","match","len","home","newIdx","hist","on","off","height","disabledLines","dCursorLine","dCursorCol","flexDirection","children","color","quaternary","wrap","dim","inverse","isCursorOnLine","marginLeft","promptLine","bold","catLabel","catColor","tertiary","hint","selectedIndex","cursorLine","cursorCol","isTruncated","visibleLines","secondary","indigo","isRealLine"],"sources":["../../../src/cli/chat/ChatInput.tsx"],"sourcesContent":["/**\n * ChatInput — Custom input with bracketed paste + image attachments\n *\n * Replaces ink-text-input with raw stdin handling to fix:\n * - Paste losing content on enter (newlines in paste triggered submit)\n * - Multi-line paste mangled/unformatted\n * - No drag-drop image support\n *\n * Features:\n * - Bracketed paste mode — clean multi-line paste\n * - Drag-drop images — detects image file paths, attaches as chips\n * - Image chips above input like Claude Code: [image1.png] [image2.jpg]\n * - Backspace on empty input removes last image\n * - Slash command menu preserved\n * - Multi-line input with ⎸ continuation markers\n */\n\nimport { useState, useEffect, useRef } from \"react\";\nimport { Box, Text, useStdin } from \"ink\";\nimport { readFileSync, existsSync, statSync } from \"fs\";\nimport { basename, extname } from \"path\";\nimport { colors } from \"../shared/Theme.js\";\nimport { loadKeybindings, bindingToControlChar } from \"../services/keybinding-manager.js\";\nimport { SlashMenu, SLASH_COMMANDS as _SLASH_COMMANDS, getFilteredSelectableCount, getCommandAtIndex, getCategoryCount, getCategoryCommandCount, getCategoryCommand, getCategoryLabel, getCategoryColor } from \"./SlashMenu.js\";\n\n// ── Types ──\n\nexport interface ImageAttachment {\n path: string;\n name: string;\n base64: string;\n mediaType: string;\n}\n\nexport interface FileAttachment {\n path: string;\n name: string;\n}\n\nexport interface ContextAttachment {\n id: string;\n type: string;\n title: string;\n subtitle?: string;\n icon: string;\n sourceApp: string;\n data: Record<string, unknown>;\n timestamp: string;\n}\n\n// Re-export for consumers (e.g. useSlashCommands)\nexport type { SlashCommand } from \"./SlashMenu.js\";\nexport const SLASH_COMMANDS = _SLASH_COMMANDS;\n\n// ── Constants ──\n\nconst IMAGE_EXTENSIONS: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n};\n\nconst MAX_IMAGE_SIZE = 20 * 1024 * 1024; // 20MB\nconst MAX_DISPLAY_LINES = 8;\n\n// ── Helpers ──\n\nconst CONTEXT_TYPES = [\"product\", \"customer\", \"order\", \"inventory\", \"media\", \"document\", \"location\"];\nconst CONTEXT_COLORS: Record<string, string> = {\n product: colors.brand, customer: colors.purple, order: colors.success,\n inventory: colors.warning, media: colors.pink, document: colors.info, location: \"yellow\",\n};\n\n/** Detect if pasted text is a valid WhaleContextItem JSON object */\nfunction parseWhaleContext(text: string): ContextAttachment | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return null;\n try {\n const obj = JSON.parse(trimmed);\n if (obj && typeof obj.id === \"string\" && typeof obj.type === \"string\" &&\n CONTEXT_TYPES.includes(obj.type) && typeof obj.title === \"string\" &&\n typeof obj.sourceApp === \"string\") {\n return obj as ContextAttachment;\n }\n } catch { /* not JSON */ }\n return null;\n}\n\n/** Format a context attachment into an XML context block for AI prompt */\nfunction contextToBlock(ctx: ContextAttachment): string {\n const lines: string[] = [];\n lines.push(`<context type=\"${ctx.type}\" source=\"${ctx.sourceApp}\">`);\n lines.push(` ${ctx.title}`);\n if (ctx.subtitle) lines.push(` ${ctx.subtitle}`);\n if (ctx.data) {\n for (const [key, value] of Object.entries(ctx.data).sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${key}: ${value}`);\n }\n }\n lines.push(\"</context>\");\n return lines.join(\"\\n\");\n}\n\nfunction isImagePath(text: string): boolean {\n const p = normalizePath(text);\n if (!p || p.includes(\"\\n\")) return false;\n const ext = extname(p).toLowerCase();\n return ext in IMAGE_EXTENSIONS && existsSync(p);\n}\n\n/** Normalize a terminal-pasted path (handles escapes, file:// URLs, quotes) */\nfunction normalizePath(raw: string): string {\n let p = raw.trim();\n // Strip file:// URL prefix + percent-decode\n if (p.startsWith(\"file://\")) {\n p = decodeURIComponent(p.replace(/^file:\\/\\//, \"\"));\n }\n // Strip surrounding quotes\n p = p.replace(/^['\"]|['\"]$/g, \"\");\n // Unescape backslash-escaped characters (spaces, parens, etc.)\n p = p.replace(/\\\\(.)/g, \"$1\");\n return p;\n}\n\nfunction isFilePath(text: string): boolean {\n const p = normalizePath(text);\n if (!p || p.includes(\"\\n\")) return false;\n // Skip image paths — handled separately\n const ext = extname(p).toLowerCase();\n if (ext in IMAGE_EXTENSIONS) return false;\n try { return existsSync(p) && statSync(p).isFile(); } catch { return false; }\n}\n\nfunction loadImage(filePath: string): ImageAttachment | null {\n try {\n const p = normalizePath(filePath);\n const ext = extname(p).toLowerCase();\n const mediaType = IMAGE_EXTENSIONS[ext];\n if (!mediaType) return null;\n const stat = statSync(p);\n if (stat.size > MAX_IMAGE_SIZE) return null;\n const data = readFileSync(p);\n return { path: p, name: basename(p), base64: data.toString(\"base64\"), mediaType };\n } catch {\n return null;\n }\n}\n\nfunction getCursorLineCol(text: string, cursor: number): { line: number; col: number } {\n let pos = 0;\n const lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n if (cursor <= pos + lines[i].length) {\n return { line: i, col: cursor - pos };\n }\n pos += lines[i].length + 1;\n }\n return { line: lines.length - 1, col: lines[lines.length - 1].length };\n}\n\n// ── Props ──\n\ninterface ChatInputProps {\n onSubmit: (message: string, images?: ImageAttachment[]) => void;\n onCommand: (command: string) => void;\n disabled: boolean;\n overlayActive?: boolean;\n agentName?: string;\n onInterrupt?: () => void;\n}\n\n// ── Component ──\n\nexport function ChatInput({ onSubmit, onCommand, disabled, overlayActive, agentName, onInterrupt }: ChatInputProps) {\n const { stdin } = useStdin();\n\n // Input state — ref for synchronous handler access, state for render\n const inputRef = useRef({ value: \"\", cursor: 0 });\n const [displayValue, setDisplayValue] = useState(\"\");\n const [displayCursor, setDisplayCursor] = useState(0);\n\n // Stable refs for callbacks — prevents stale closures in stdin handler\n const onSubmitRef = useRef(onSubmit);\n const onCommandRef = useRef(onCommand);\n const onInterruptRef = useRef(onInterrupt);\n const disabledRef = useRef(disabled);\n useEffect(() => { onSubmitRef.current = onSubmit; }, [onSubmit]);\n useEffect(() => { onCommandRef.current = onCommand; }, [onCommand]);\n useEffect(() => { onInterruptRef.current = onInterrupt; }, [onInterrupt]);\n useEffect(() => { disabledRef.current = disabled; }, [disabled]);\n\n // Queued message — typed during streaming, auto-submitted when streaming ends\n const [queued, setQueued] = useState(false);\n const queuedRef = useRef(false);\n\n // Guard against double-submission (BUG-1 fix)\n const submittingRef = useRef(false);\n\n // Auto-submit queued input when streaming ends (disabled goes from true → false)\n const prevDisabledRef = useRef(disabled);\n useEffect(() => {\n if (prevDisabledRef.current && !disabled && queuedRef.current) {\n // Streaming just ended and we have queued input — submit it\n queuedRef.current = false;\n setQueued(false);\n handleSubmit();\n }\n prevDisabledRef.current = disabled;\n }, [disabled]);\n\n // Mode & attachments\n const [menuMode, setMenuMode] = useState(false);\n const menuModeRef = useRef(false);\n const [menuFilter, setMenuFilter] = useState(\"\");\n const menuFilterRef = useRef(\"\");\n const [menuIndex, setMenuIndex] = useState(0);\n const menuIndexRef = useRef(0);\n const [images, setImages] = useState<ImageAttachment[]>([]);\n const imagesRef = useRef<ImageAttachment[]>([]);\n const [files, setFiles] = useState<FileAttachment[]>([]);\n const filesRef = useRef<FileAttachment[]>([]);\n const [contextItems, setContextItems] = useState<ContextAttachment[]>([]);\n const contextItemsRef = useRef<ContextAttachment[]>([]);\n\n // Two-level menu: null = Level 1 (categories), number = Level 2 (drilled into that category)\n const [selectedCategory, setSelectedCategory] = useState<number | null>(null);\n const selectedCategoryRef = useRef<number | null>(null);\n function setSelectedCategorySync(val: number | null) {\n selectedCategoryRef.current = val;\n setSelectedCategory(val);\n }\n\n // Input history (up/down arrow recall)\n const historyRef = useRef<string[]>([]);\n const historyIndexRef = useRef(-1);\n const savedInputRef = useRef(\"\");\n const MAX_HISTORY = 50;\n\n // Paste tracking\n const isPasting = useRef(false);\n const pasteBuffer = useRef(\"\");\n\n // Multi-line paste — stored separately, displayed as chip\n const [pastedText, setPastedText] = useState<string | null>(null);\n const pastedTextRef = useRef<string | null>(null);\n\n // Sync refs\n useEffect(() => { imagesRef.current = images; }, [images]);\n useEffect(() => { filesRef.current = files; }, [files]);\n useEffect(() => { contextItemsRef.current = contextItems; }, [contextItems]);\n useEffect(() => { pastedTextRef.current = pastedText; }, [pastedText]);\n // ── Sync helpers: update ref THEN state (fixes race conditions) ──\n function setMenuModeSync(val: boolean) {\n menuModeRef.current = val;\n setMenuMode(val);\n }\n function setMenuFilterSync(val: string) {\n menuFilterRef.current = val;\n setMenuFilter(val);\n }\n function setMenuIndexSync(val: number) {\n menuIndexRef.current = val;\n setMenuIndex(val);\n }\n\n // ── Enable bracketed paste mode ──\n useEffect(() => {\n process.stdout.write(\"\\x1b[?2004h\");\n return () => { process.stdout.write(\"\\x1b[?2004l\"); };\n }, []);\n\n // ── Update helper ──\n function update(value: string, cursor: number) {\n inputRef.current = { value, cursor };\n setDisplayValue(value);\n setDisplayCursor(cursor);\n }\n\n // ── Process paste content ──\n function processPaste(text: string) {\n const clean = text.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n // Check for WhaleContext JSON → attach as context chip\n const ctx = parseWhaleContext(clean);\n if (ctx) {\n // Avoid duplicates\n if (!contextItemsRef.current.some(c => c.id === ctx.id)) {\n setContextItems(prev => [...prev, ctx]);\n }\n return;\n }\n\n // Check if ALL non-empty lines are image paths → attach them\n const lines = clean.split(\"\\n\").map(l => l.trim()).filter(Boolean);\n if (lines.length > 0 && lines.every(l => isImagePath(l))) {\n const newImages: ImageAttachment[] = [];\n for (const line of lines) {\n const img = loadImage(line);\n if (img) newImages.push(img);\n }\n if (newImages.length > 0) {\n setImages(prev => [...prev, ...newImages]);\n return;\n }\n }\n\n // Check for non-image file paths → attach as file chips\n if (lines.length > 0 && lines.length <= 4 && lines.every(l => isFilePath(l))) {\n const newFiles: FileAttachment[] = lines.map(l => {\n const p = normalizePath(l);\n return { path: p, name: basename(p) };\n });\n setFiles(prev => [...prev, ...newFiles]);\n return;\n }\n\n // Slash command pasted directly (must look like /word, not an absolute path)\n if (clean.startsWith(\"/\") && !clean.includes(\"\\n\") && !clean.includes(\"/\", 1) && inputRef.current.value === \"\") {\n onCommandRef.current(clean.trim());\n update(\"\", 0);\n return;\n }\n\n // Multi-line paste → store as chip, don't spam input\n const pasteLines = clean.split(\"\\n\");\n if (pasteLines.length >= 4) {\n setPastedText(clean);\n return;\n }\n\n // Short paste — insert inline as before\n const { value: val, cursor: cur } = inputRef.current;\n const newValue = val.slice(0, cur) + clean + val.slice(cur);\n update(newValue, cur + clean.length);\n }\n\n // ── Handle submit ──\n function handleSubmit() {\n // Prevent double-submission from queued auto-submit racing with manual submit\n if (submittingRef.current) {\n return;\n }\n submittingRef.current = true;\n\n const typed = inputRef.current.value.trim();\n const paste = pastedTextRef.current;\n const imgs = imagesRef.current;\n const fls = filesRef.current;\n const ctxs = contextItemsRef.current;\n\n if (!typed && !paste && imgs.length === 0 && fls.length === 0 && ctxs.length === 0) {\n submittingRef.current = false;\n return;\n }\n\n // Slash command — must start with / and NOT contain a second /\n // (prevents file paths like /Users/whale/file.txt from being misidentified)\n if (typed.startsWith(\"/\") && !typed.includes(\"/\", 1) && !paste && imgs.length === 0 && fls.length === 0 && ctxs.length === 0) {\n update(\"\", 0);\n submittingRef.current = false;\n onCommandRef.current(typed);\n return;\n }\n\n // Build context blocks prefix\n const contextPrefix = ctxs.length > 0\n ? ctxs.map(c => contextToBlock(c)).join(\"\\n\\n\") + \"\\n\\n\"\n : \"\";\n\n // Build file context prefix\n const filePrefix = fls.length > 0\n ? fls.map(f => f.path).join(\"\\n\") + \"\\n\\n\"\n : \"\";\n\n // Combine context + file prefix + typed text + pasted content\n const body = paste\n ? (typed ? `${typed}\\n\\n${paste}` : paste)\n : (typed || (ctxs.length > 0 ? \"Tell me about this\" : \"\"));\n const fullText = contextPrefix + filePrefix + body;\n\n // Record in history\n if (fullText.trim()) {\n historyRef.current.push(fullText.trim());\n if (historyRef.current.length > MAX_HISTORY) historyRef.current.shift();\n }\n historyIndexRef.current = -1;\n\n onSubmitRef.current(fullText, imgs.length > 0 ? imgs : undefined);\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setContextItems([]);\n setPastedText(null);\n\n // Release guard after state is cleared (next tick ensures no re-entry)\n setTimeout(() => { submittingRef.current = false; }, 0);\n }\n\n // ── Raw stdin handler (handles both normal input and menu mode) ──\n useEffect(() => {\n if (!stdin) return;\n\n // When an overlay with its own useInput is active (PlanApproval, etc.),\n // detach our data listener entirely so Ink's readable handler can deliver\n // keystrokes to the overlay's useInput hooks.\n if (overlayActive) return;\n\n const onData = (data: Buffer) => {\n const str = data.toString(\"utf-8\");\n\n // ══════════════════════════════════════════════\n // DISABLED MODE — accept typing, block commands, handle Esc\n // ══════════════════════════════════════════════\n if (disabledRef.current) {\n // Escape → interrupt streaming\n if (str === \"\\x1b\") {\n onInterruptRef.current?.();\n return;\n }\n\n // Control chars handled by ChatApp (exit, expand, thinking toggle)\n const _kb = loadKeybindings();\n const exitChar = bindingToControlChar(_kb.exit);\n const expandChar = bindingToControlChar(_kb.toggle_expand);\n const thinkingChar = bindingToControlChar(_kb.toggle_thinking);\n if (str === exitChar || str === expandChar || str === thinkingChar) return;\n\n // Arrow keys — cursor movement within buffer while disabled\n if (str.startsWith(\"\\x1b[\")) {\n const { value: val, cursor: cur } = inputRef.current;\n if (str === \"\\x1b[C\") { // Right\n update(val, Math.min(cur + 1, val.length));\n } else if (str === \"\\x1b[D\") { // Left\n update(val, Math.max(cur - 1, 0));\n } else if (str === \"\\x1b[A\" || str === \"\\x1b[B\") { // Up/Down\n const lines = val.split(\"\\n\");\n if (lines.length > 1) {\n const { line: curLine, col: curCol } = getCursorLineCol(val, cur);\n const targetLine = str === \"\\x1b[A\"\n ? Math.max(0, curLine - 1)\n : Math.min(lines.length - 1, curLine + 1);\n if (targetLine !== curLine) {\n const targetCol = Math.min(curCol, lines[targetLine].length);\n let newCursor = 0;\n for (let i = 0; i < targetLine; i++) newCursor += lines[i].length + 1;\n newCursor += targetCol;\n update(val, newCursor);\n }\n }\n } else if (str === \"\\x1b[H\" || str === \"\\x1b[1~\") { // Home\n update(val, 0);\n } else if (str === \"\\x1b[F\" || str === \"\\x1b[4~\") { // End\n update(val, val.length);\n }\n return;\n }\n\n // Bracketed paste while disabled — accept into buffer\n if (str.includes(\"\\x1b[200~\")) {\n isPasting.current = true;\n let text = str.replace(/\\x1b\\[200~/g, \"\").replace(/\\x1b\\[201~/g, \"\");\n pasteBuffer.current += text;\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n }\n return;\n }\n if (isPasting.current) {\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n pasteBuffer.current += str.replace(/\\x1b\\[201~/g, \"\");\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n } else {\n pasteBuffer.current += str;\n }\n return;\n }\n\n // Enter → queue the current input for auto-submit\n if (str === \"\\r\" || str === \"\\n\") {\n const typed = inputRef.current.value.trim();\n if (typed) {\n queuedRef.current = true;\n setQueued(true);\n }\n return;\n }\n\n // Backspace\n if (str === \"\\x7f\" || str === \"\\b\") {\n const { value: val, cursor: cur } = inputRef.current;\n if (cur > 0) {\n update(val.slice(0, cur - 1) + val.slice(cur), cur - 1);\n // Un-queue if editing\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n }\n return;\n }\n\n // Slash — block menu mode while streaming\n if (str === \"/\" && inputRef.current.value === \"\") return;\n\n // Printable char — type into buffer\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + 1);\n // Un-queue if editing after queuing\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n return;\n }\n\n // Multi-character non-escape (unbracketted paste)\n if (str.length > 1 && !str.startsWith(\"\\x1b\")) {\n const codePoints = [...str];\n if (codePoints.length === 1) {\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + str.length);\n } else {\n processPaste(str);\n }\n if (queuedRef.current) { queuedRef.current = false; setQueued(false); }\n return;\n }\n\n return;\n }\n\n // ══════════════════════════════════════════════\n // MENU MODE — two-level navigation\n // ══════════════════════════════════════════════\n if (menuModeRef.current) {\n const hasFilter = menuFilterRef.current.length > 0;\n const inCategory = selectedCategoryRef.current !== null;\n\n // Escape or Ctrl+C → dismiss menu entirely\n if (str === \"\\x1b\" || str === \"\\x03\") {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n return;\n }\n\n // Tab → no-op\n if (str === \"\\t\") return;\n\n // ── Filter mode (has filter text) ──\n if (hasFilter) {\n if (str === \"\\r\" || str === \"\\n\") {\n const cmd = getCommandAtIndex(menuFilterRef.current, menuIndexRef.current);\n if (cmd) {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n onCommandRef.current(cmd.name);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n const count = getFilteredSelectableCount(menuFilterRef.current);\n setMenuIndexSync(Math.min(count - 1, menuIndexRef.current + 1));\n return;\n }\n if (str === \"\\x7f\" || str === \"\\b\") {\n const f = menuFilterRef.current;\n if (f.length > 1) {\n setMenuFilterSync(f.slice(0, -1));\n setMenuIndexSync(0);\n } else {\n // Clearing filter → back to Level 1\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n }\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setMenuFilterSync(menuFilterRef.current + str);\n setMenuIndexSync(0);\n return;\n }\n return;\n }\n\n // ── Level 2: inside a category ──\n if (inCategory) {\n const catIdx = selectedCategoryRef.current!;\n if (str === \"\\r\" || str === \"\\n\") {\n const cmd = getCategoryCommand(catIdx, menuIndexRef.current);\n if (cmd) {\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n onCommandRef.current(cmd.name);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n const count = getCategoryCommandCount(catIdx);\n setMenuIndexSync(Math.min(count - 1, menuIndexRef.current + 1));\n return;\n }\n // Left arrow or Backspace → back to Level 1\n if (str === \"\\x1b[D\" || str === \"\\x7f\" || str === \"\\b\") {\n setMenuIndexSync(catIdx); // restore highlight to the category we were in\n setSelectedCategorySync(null);\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n // Printable → switch to filter mode\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setSelectedCategorySync(null);\n setMenuFilterSync(str);\n setMenuIndexSync(0);\n return;\n }\n return;\n }\n\n // ── Level 1: category list ──\n if (str === \"\\r\" || str === \"\\n\" || str === \"\\x1b[C\") {\n // Enter or Right → drill into selected category\n const catIdx = menuIndexRef.current;\n if (catIdx >= 0 && catIdx < getCategoryCount()) {\n setSelectedCategorySync(catIdx);\n setMenuIndexSync(0);\n }\n return;\n }\n if (str === \"\\x1b[A\") {\n setMenuIndexSync(Math.max(0, menuIndexRef.current - 1));\n return;\n }\n if (str === \"\\x1b[B\") {\n setMenuIndexSync(Math.min(getCategoryCount() - 1, menuIndexRef.current + 1));\n return;\n }\n if (str === \"\\x7f\" || str === \"\\b\") {\n // Backspace on Level 1 → dismiss menu\n setMenuModeSync(false);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n setSelectedCategorySync(null);\n update(\"\", 0);\n return;\n }\n if (str.startsWith(\"\\x1b\")) return;\n // Printable → switch to filter mode\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n setMenuFilterSync(str);\n setMenuIndexSync(0);\n return;\n }\n\n return;\n }\n\n // ══════════════════════════════════════════════\n // NORMAL INPUT MODE\n // ══════════════════════════════════════════════\n\n // ── Bracketed paste detection ──\n if (str.includes(\"\\x1b[200~\")) {\n isPasting.current = true;\n let text = str.replace(/\\x1b\\[200~/g, \"\").replace(/\\x1b\\[201~/g, \"\");\n pasteBuffer.current += text;\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n }\n return;\n }\n\n if (isPasting.current) {\n if (str.includes(\"\\x1b[201~\")) {\n isPasting.current = false;\n pasteBuffer.current += str.replace(/\\x1b\\[201~/g, \"\");\n const paste = pasteBuffer.current;\n pasteBuffer.current = \"\";\n processPaste(paste);\n } else {\n pasteBuffer.current += str;\n }\n return;\n }\n\n // ── Control chars handled by ChatApp (keybinding-aware) ──\n const _kb = loadKeybindings();\n const exitChar = bindingToControlChar(_kb.exit);\n const expandChar = bindingToControlChar(_kb.toggle_expand);\n const thinkingChar = bindingToControlChar(_kb.toggle_thinking);\n if (str === exitChar || str === expandChar || str === thinkingChar) return;\n\n // ── Enter ──\n if (str === \"\\r\" || str === \"\\n\") {\n handleSubmit();\n return;\n }\n\n // ── Tab ── (no-op in input)\n if (str === \"\\t\") return;\n\n // ── Backspace ──\n if (str === \"\\x7f\" || str === \"\\b\") {\n const { value: val, cursor: cur } = inputRef.current;\n if (cur > 0) {\n update(val.slice(0, cur - 1) + val.slice(cur), cur - 1);\n } else if (val === \"\") {\n // Empty input + backspace → remove paste chip, then context, then files, then images\n if (pastedTextRef.current) {\n setPastedText(null);\n } else if (contextItemsRef.current.length > 0) {\n setContextItems(prev => prev.slice(0, -1));\n } else if (filesRef.current.length > 0) {\n setFiles(prev => prev.slice(0, -1));\n } else if (imagesRef.current.length > 0) {\n setImages(prev => prev.slice(0, -1));\n }\n }\n return;\n }\n\n // ── Clear line (default: Ctrl+U) ──\n if (str === bindingToControlChar(_kb.clear_line)) {\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setPastedText(null);\n return;\n }\n\n // ── Delete word (default: Ctrl+W) ──\n if (str === bindingToControlChar(_kb.delete_word)) {\n const { value: val, cursor: cur } = inputRef.current;\n const before = val.slice(0, cur);\n const match = before.match(/\\S+\\s*$/);\n if (match) {\n const len = match[0].length;\n update(val.slice(0, cur - len) + val.slice(cur), cur - len);\n }\n return;\n }\n\n // ── Home (default: Ctrl+A) ──\n if (str === bindingToControlChar(_kb.home)) {\n update(inputRef.current.value, 0);\n return;\n }\n\n // ── Escape sequences ──\n if (str.startsWith(\"\\x1b[\")) {\n const { value: val, cursor: cur } = inputRef.current;\n\n if (str === \"\\x1b[C\") { // Right\n update(val, Math.min(cur + 1, val.length));\n } else if (str === \"\\x1b[D\") { // Left\n update(val, Math.max(cur - 1, 0));\n } else if (str === \"\\x1b[H\" || str === \"\\x1b[1~\") { // Home\n update(val, 0);\n } else if (str === \"\\x1b[F\" || str === \"\\x1b[4~\") { // End\n update(val, val.length);\n } else if (str === \"\\x1b[3~\") { // Delete\n if (cur < val.length) {\n update(val.slice(0, cur) + val.slice(cur + 1), cur);\n }\n } else if (str === \"\\x1b[A\" || str === \"\\x1b[B\") { // Up/Down\n const lines = val.split(\"\\n\");\n if (lines.length > 1) {\n // Multi-line: navigate lines\n const { line: curLine, col: curCol } = getCursorLineCol(val, cur);\n const targetLine = str === \"\\x1b[A\"\n ? Math.max(0, curLine - 1)\n : Math.min(lines.length - 1, curLine + 1);\n if (targetLine !== curLine) {\n const targetCol = Math.min(curCol, lines[targetLine].length);\n let newCursor = 0;\n for (let i = 0; i < targetLine; i++) newCursor += lines[i].length + 1;\n newCursor += targetCol;\n update(val, newCursor);\n }\n } else if (str === \"\\x1b[A\") {\n // Up arrow — history recall\n if (historyRef.current.length === 0) { /* no history */ }\n else {\n if (historyIndexRef.current === -1) savedInputRef.current = val;\n const newIdx = Math.min(historyIndexRef.current + 1, historyRef.current.length - 1);\n historyIndexRef.current = newIdx;\n const hist = historyRef.current[historyRef.current.length - 1 - newIdx];\n update(hist, hist.length);\n }\n } else {\n // Down arrow — forward in history\n if (historyIndexRef.current <= -1) { /* already at current */ }\n else {\n const newIdx = historyIndexRef.current - 1;\n historyIndexRef.current = newIdx;\n if (newIdx < 0) {\n update(savedInputRef.current, savedInputRef.current.length);\n } else {\n const hist = historyRef.current[historyRef.current.length - 1 - newIdx];\n update(hist, hist.length);\n }\n }\n }\n }\n // Ignore unrecognized escape sequences\n return;\n }\n\n // ── Standalone escape — clear input if non-empty ──\n if (str === \"\\x1b\") {\n const { value } = inputRef.current;\n if (value || filesRef.current.length > 0) {\n update(\"\", 0);\n setImages([]);\n setFiles([]);\n setPastedText(null);\n }\n return;\n }\n\n // ── Multi-character non-escape = paste without brackets ──\n if (str.length > 1 && !str.startsWith(\"\\x1b\")) {\n const codePoints = [...str];\n if (codePoints.length === 1) {\n // Single code point (emoji etc.)\n const { value: val, cursor: cur } = inputRef.current;\n update(val.slice(0, cur) + str + val.slice(cur), cur + str.length);\n } else {\n processPaste(str);\n }\n return;\n }\n\n // ── Single printable character ──\n if (str.length === 1 && str.charCodeAt(0) >= 0x20) {\n const { value: val, cursor: cur } = inputRef.current;\n\n // Slash menu trigger\n if (str === \"/\" && val === \"\") {\n setMenuModeSync(true);\n setMenuFilterSync(\"\");\n setMenuIndexSync(0);\n return;\n }\n\n update(val.slice(0, cur) + str + val.slice(cur), cur + 1);\n }\n };\n\n stdin.on(\"data\", onData);\n return () => { stdin.off(\"data\", onData); };\n }, [stdin, overlayActive]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // ── Render ──\n\n // Disabled — dimmed but visible input (accept typing to queue)\n if (disabled) {\n // No input and not queued — render a zero-height placeholder instead of\n // an empty fragment. An empty <></> leaves a phantom line in Ink's layout\n // that ghosts as a duplicate input bar when streaming ends.\n if (!displayValue.trim() && !queued) return <Box height={0} />;\n\n const disabledLines = displayValue.split(\"\\n\");\n const { line: dCursorLine, col: dCursorCol } = displayValue\n ? getCursorLineCol(displayValue, displayCursor)\n : { line: 0, col: 0 };\n\n return (\n <Box flexDirection=\"column\">\n\n {/* Single-line disabled */}\n {disabledLines.length <= 1 ? (\n <Box>\n <Text color={colors.quaternary}>{\"· \"}</Text>\n {!displayValue ? (\n <Text color={colors.quaternary} wrap=\"truncate\">\n {queued ? \"queued — will send when done\" : \" \"}\n </Text>\n ) : (\n <Box>\n <Text color={colors.dim}>\n {displayValue.slice(0, displayCursor)}\n <Text inverse>{displayCursor < displayValue.length ? displayValue[displayCursor] : \" \"}</Text>\n {displayCursor < displayValue.length ? displayValue.slice(displayCursor + 1) : \"\"}\n </Text>\n {queued && <Text color={colors.warning}> [queued]</Text>}\n </Box>\n )}\n </Box>\n ) : (\n /* Multi-line disabled */\n <Box flexDirection=\"column\">\n {disabledLines.map((line, i) => {\n const isCursorOnLine = i === dCursorLine;\n return (\n <Box key={i}>\n <Text color={colors.quaternary}>{i === 0 ? \"· \" : \"⎸ \"}</Text>\n {isCursorOnLine ? (\n <Text color={colors.dim}>\n {line.slice(0, dCursorCol)}\n <Text inverse>{dCursorCol < line.length ? line[dCursorCol] : \" \"}</Text>\n {dCursorCol < line.length ? line.slice(dCursorCol + 1) : \"\"}\n </Text>\n ) : (\n <Text color={colors.dim}>{line}</Text>\n )}\n </Box>\n );\n })}\n {queued && (\n <Box marginLeft={2}>\n <Text color={colors.warning}>[queued]</Text>\n </Box>\n )}\n </Box>\n )}\n </Box>\n );\n }\n\n // Slash command menu — two-level categorized via SlashMenu component\n if (menuMode) {\n // Prompt line varies by level\n let promptLine: React.ReactNode;\n if (menuFilter) {\n // Filter mode\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text>\n {menuFilter}\n <Text inverse>{\" \"}</Text>\n </Text>\n </Box>\n );\n } else if (selectedCategory !== null) {\n // Level 2: show category name\n const catLabel = getCategoryLabel(selectedCategory);\n const catColor = getCategoryColor(selectedCategory);\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text color={catColor} bold>{catLabel}</Text>\n <Text color={colors.tertiary}>{\" > \"}</Text>\n <Text inverse>{\" \"}</Text>\n </Box>\n );\n } else {\n // Level 1\n promptLine = (\n <Box>\n <Text color={colors.brand} bold>{\"/ \"}</Text>\n <Text>\n <Text inverse>{\" \"}</Text>\n <Text color={colors.dim}> type to filter</Text>\n </Text>\n </Box>\n );\n }\n\n // Hint line varies by level\n const hint = selectedCategory !== null && !menuFilter\n ? \" \\u2190 back esc dismiss\"\n : \" esc to dismiss\";\n\n return (\n <Box flexDirection=\"column\">\n\n {promptLine}\n <SlashMenu filter={menuFilter} selectedIndex={menuIndex} selectedCategory={selectedCategory} />\n <Text color={colors.quaternary}>{hint}</Text>\n </Box>\n );\n }\n\n // ── Normal input rendering ──\n\n const lines = displayValue.split(\"\\n\");\n const { line: cursorLine, col: cursorCol } = displayValue\n ? getCursorLineCol(displayValue, displayCursor)\n : { line: 0, col: 0 };\n\n // Truncate display for very long pastes\n const isTruncated = lines.length > MAX_DISPLAY_LINES;\n const visibleLines = isTruncated\n ? [...lines.slice(0, MAX_DISPLAY_LINES - 1), `… ${lines.length - MAX_DISPLAY_LINES + 1} more lines`]\n : lines;\n\n return (\n <Box flexDirection=\"column\">\n {/* Attachment chips — context + images + files + pasted text */}\n {(images.length > 0 || files.length > 0 || contextItems.length > 0 || pastedText) && (\n <Box>\n <Text> </Text>\n {contextItems.map((ctx, i) => (\n <Text key={`ctx-${i}`}>\n <Text color={CONTEXT_COLORS[ctx.type] || \"cyan\"}>[</Text>\n <Text color={colors.secondary}>{ctx.type}: {ctx.title}</Text>\n <Text color={CONTEXT_COLORS[ctx.type] || \"cyan\"}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {images.map((img, i) => (\n <Text key={`img-${i}`}>\n <Text color={colors.indigo}>[</Text>\n <Text color={colors.secondary}>{img.name}</Text>\n <Text color={colors.indigo}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {files.map((f, i) => (\n <Text key={`file-${i}`}>\n <Text color={colors.purple}>[</Text>\n <Text color={colors.secondary}>{f.name}</Text>\n <Text color={colors.purple}>]</Text>\n <Text> </Text>\n </Text>\n ))}\n {pastedText && (\n <Text>\n <Text color={colors.indigo}>[</Text>\n <Text color={colors.secondary}>pasted {pastedText.split(\"\\n\").length} lines</Text>\n <Text color={colors.indigo}>]</Text>\n </Text>\n )}\n </Box>\n )}\n\n {/* Single-line input */}\n {lines.length <= 1 ? (\n <Box>\n <Text color={colors.brand} bold>{\"❯ \"}</Text>\n {!displayValue ? (\n <Text wrap=\"truncate\">\n <Text inverse> </Text>\n <Text color={colors.dim}>{`Message ${agentName || \"whale\"}, or type / for commands`}</Text>\n </Text>\n ) : (\n <Text>\n {displayValue.slice(0, displayCursor)}\n <Text inverse>{displayCursor < displayValue.length ? displayValue[displayCursor] : \" \"}</Text>\n {displayCursor < displayValue.length ? displayValue.slice(displayCursor + 1) : \"\"}\n </Text>\n )}\n </Box>\n ) : (\n /* Multi-line input */\n <Box flexDirection=\"column\">\n {visibleLines.map((line, i) => {\n const isRealLine = !isTruncated || i < MAX_DISPLAY_LINES - 1;\n const isCursorOnLine = isRealLine && i === cursorLine;\n\n return (\n <Box key={i}>\n <Text color={colors.brand} bold>{i === 0 ? \"❯ \" : \"⎸ \"}</Text>\n {isCursorOnLine ? (\n <Text>\n {line.slice(0, cursorCol)}\n <Text inverse>{cursorCol < line.length ? line[cursorCol] : \" \"}</Text>\n {cursorCol < line.length ? line.slice(cursorCol + 1) : \"\"}\n </Text>\n ) : (\n <Text color={isRealLine ? undefined : colors.tertiary}>{line}</Text>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n </Box>\n );\n}\n"],"mappings":"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","ignoreList":[]}