hypervibes 0.0.0-stage → 0.4.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 (362) hide show
  1. package/.build/client/assets/_authenticated-C87LKvH0.js +1 -0
  2. package/.build/client/assets/_authenticated.account-D-nTh_fC.js +1 -0
  3. package/.build/client/assets/_authenticated.agents-HwcveLyB.js +1 -0
  4. package/.build/client/assets/_authenticated.agents._agentId-DuE8Lv62.js +1 -0
  5. package/.build/client/assets/_authenticated.agents._agentId.chart-Bb_XkvQx.js +4 -0
  6. package/.build/client/assets/_authenticated.agents._agentId.chat-ClMMKw_N.js +1 -0
  7. package/.build/client/assets/_authenticated.agents._agentId.index-DNJwBwn9.js +1 -0
  8. package/.build/client/assets/_authenticated.agents._agentId.indicators-BmVjLtRI.js +1 -0
  9. package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-CMqaaFQf.js +2 -0
  10. package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-DtgkoNV5.js +6 -0
  11. package/.build/client/assets/_authenticated.agents._agentId.memories-O-4f6a4G.js +1 -0
  12. package/.build/client/assets/_authenticated.agents._agentId.memories_._memoryRef-BUPtUcj3.js +1 -0
  13. package/.build/client/assets/_authenticated.agents._agentId.notifications-2lyhXCSk.js +1 -0
  14. package/.build/client/assets/_authenticated.agents._agentId.notifications_._notificationId-Da3ZVT4v.js +1 -0
  15. package/.build/client/assets/_authenticated.agents._agentId.settings-C5cWHoYw.js +1 -0
  16. package/.build/client/assets/_authenticated.agents._agentId.sub-agents-HwcveLyB.js +1 -0
  17. package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId-CZ4MeRy4.js +1 -0
  18. package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-dVbo5kMU.js +3 -0
  19. package/.build/client/assets/_authenticated.agents._agentId.sub-agents.index-DeWTOYJD.js +1 -0
  20. package/.build/client/assets/_authenticated.agents._agentId.sub-agents.new-D02TflCE.js +37 -0
  21. package/.build/client/assets/_authenticated.agents._agentId.transactions-D3a8Glgj.js +1 -0
  22. package/.build/client/assets/_authenticated.agents.index-CEqeDEgP.js +1 -0
  23. package/.build/client/assets/_authenticated.agents.new-DLRWK5Uk.js +1 -0
  24. package/.build/client/assets/_authenticated.providers-D0iPLXra.js +1 -0
  25. package/.build/client/assets/agent-chat-page-C5eYFgxw.js +1 -0
  26. package/.build/client/assets/agent-enablement-control-CUzOp9ce.js +1 -0
  27. package/.build/client/assets/agent-events-DC8eDZf3.js +1 -0
  28. package/.build/client/assets/agent-input-aolvZ47U.js +1 -0
  29. package/.build/client/assets/agent-notifications-page-B0mr-Zz8.js +1 -0
  30. package/.build/client/assets/agent-queries-CNMBImun.js +1 -0
  31. package/.build/client/assets/app-DjmsvbUC.css +2 -0
  32. package/.build/client/assets/artifact-content-COO4VTSZ.js +1 -0
  33. package/.build/client/assets/auth-client-K13li9H1.js +3 -0
  34. package/.build/client/assets/call-DxlGie4_.js +31 -0
  35. package/.build/client/assets/ccip-BgPlVPYP.js +1 -0
  36. package/.build/client/assets/chart-contracts-Cr5SFCbE.js +1 -0
  37. package/.build/client/assets/chart-queries-Bpvrgd0-.js +1 -0
  38. package/.build/client/assets/chat-bubble-CAJkT-vL.js +1 -0
  39. package/.build/client/assets/config-dialog-C9x9gKW9.js +1 -0
  40. package/.build/client/assets/contracts-HhAL7Tt7.js +1 -0
  41. package/.build/client/assets/createServerFn-DfZIp2Fu.js +3 -0
  42. package/.build/client/assets/custom-BeqXuIIS.js +5 -0
  43. package/.build/client/assets/decimal-B0DEG-1V.js +1 -0
  44. package/.build/client/assets/esm-BTb2nBdW.js +1 -0
  45. package/.build/client/assets/identicon-Lb9pS4O1.js +1 -0
  46. package/.build/client/assets/index-B4hvjMmI.js +10 -0
  47. package/.build/client/assets/indicator-input-fields-CtmrfVfS.js +1 -0
  48. package/.build/client/assets/indicator-queries-CzZ6u1Mh.js +1 -0
  49. package/.build/client/assets/indicator-renderer-CfccsIt2.js +1 -0
  50. package/.build/client/assets/instrument-label-BZYlWXR5.js +1 -0
  51. package/.build/client/assets/instrument-picker-DLPpryOm.js +1 -0
  52. package/.build/client/assets/journal-decimal-DBvd_Ibi.js +1 -0
  53. package/.build/client/assets/jsx-runtime-CIazjfqY.js +1 -0
  54. package/.build/client/assets/lazyRouteComponent-CJgUa7_r.js +1 -0
  55. package/.build/client/assets/lightweight-charts.production-BiBiFZSH.js +1 -0
  56. package/.build/client/assets/login-MNgYxCOY.js +3 -0
  57. package/.build/client/assets/memory-badge-BbN-DJQi.js +1 -0
  58. package/.build/client/assets/memory-contracts-Doi_Q1XJ.js +1 -0
  59. package/.build/client/assets/memory-queries-BttL580R.js +1 -0
  60. package/.build/client/assets/model-picker-YCQNNmyw.js +1 -0
  61. package/.build/client/assets/notification-queries-B12DG3aS.js +1 -0
  62. package/.build/client/assets/preload-helper-Czpn1I53.js +1 -0
  63. package/.build/client/assets/provider-logo-Ddb77aBD.js +1 -0
  64. package/.build/client/assets/provider-queries-DxPwhDOU.js +1 -0
  65. package/.build/client/assets/query-nvK_95Jo.js +1 -0
  66. package/.build/client/assets/random-uuid-DJR3ygJS.js +1 -0
  67. package/.build/client/assets/react-dom-C6bOPxes.js +1 -0
  68. package/.build/client/assets/risk-queries-D_6PHwus.js +1 -0
  69. package/.build/client/assets/run-subagent-dialog-B4yQe9T9.js +1 -0
  70. package/.build/client/assets/secp256k1-BbZnIgDP.js +1 -0
  71. package/.build/client/assets/setup-checklist-CUW-K484.js +1 -0
  72. package/.build/client/assets/sha2-hT-Q4pur.js +1 -0
  73. package/.build/client/assets/subagent-enabled-toggle-Bk5wfScg.js +1 -0
  74. package/.build/client/assets/subagent-input-TQke90I1.js +1 -0
  75. package/.build/client/assets/subagent-mutations-DfsDbmFu.js +1 -0
  76. package/.build/client/assets/subagent-queries-DVv5JCfs.js +1 -0
  77. package/.build/client/assets/subagent-run-history-D55Uh5VK.js +1 -0
  78. package/.build/client/assets/toggle-timestamp-B50FTPmA.js +1 -0
  79. package/.build/client/assets/useBaseQuery-Bxruo_mV.js +1 -0
  80. package/.build/client/assets/useMutation-DrF53EQG.js +1 -0
  81. package/.build/client/assets/useQuery-BMSU16jY.js +1 -0
  82. package/.build/client/assets/useRouter-c0I1aURm.js +1 -0
  83. package/.build/client/assets/useSelector-ERD9RroG.js +2 -0
  84. package/.build/client/assets/useSuspenseQuery-vODFwDb8.js +1 -0
  85. package/.build/client/assets/utils-Bpv4vmSW.js +1 -0
  86. package/.build/client/assets/worker-triggers-DtXyn40O.js +1 -0
  87. package/.build/server/assets/_authenticated-Bch0_2QH.js +264 -0
  88. package/.build/server/assets/_authenticated-DGV5cZYE.js +22 -0
  89. package/.build/server/assets/_authenticated.account-6qu6oQ1y.js +685 -0
  90. package/.build/server/assets/_authenticated.agents-DYDnQxli.js +5 -0
  91. package/.build/server/assets/_authenticated.agents._agentId-4HvB3mhd.js +17 -0
  92. package/.build/server/assets/_authenticated.agents._agentId-Cl608F1T.js +260 -0
  93. package/.build/server/assets/_authenticated.agents._agentId-G2jAHjma.js +15 -0
  94. package/.build/server/assets/_authenticated.agents._agentId.chart-BIA8wy73.js +2644 -0
  95. package/.build/server/assets/_authenticated.agents._agentId.chart-D4aj8Qy9.js +22 -0
  96. package/.build/server/assets/_authenticated.agents._agentId.chat-ClsVle4g.js +13 -0
  97. package/.build/server/assets/_authenticated.agents._agentId.chat-JV3FDsTp.js +18 -0
  98. package/.build/server/assets/_authenticated.agents._agentId.index-Ct4kbu2f.js +1044 -0
  99. package/.build/server/assets/_authenticated.agents._agentId.index-DJgrupvW.js +18 -0
  100. package/.build/server/assets/_authenticated.agents._agentId.indicators-DrKd0aP5.js +184 -0
  101. package/.build/server/assets/_authenticated.agents._agentId.indicators-wiVaY8fW.js +18 -0
  102. package/.build/server/assets/_authenticated.agents._agentId.indicators_._indicatorId-C4Ox2R-a.js +25 -0
  103. package/.build/server/assets/_authenticated.agents._agentId.indicators_._indicatorId-D8Q0hCW0.js +489 -0
  104. package/.build/server/assets/_authenticated.agents._agentId.memories-BUTyVLYy.js +42 -0
  105. package/.build/server/assets/_authenticated.agents._agentId.memories-E8-nSEMT.js +362 -0
  106. package/.build/server/assets/_authenticated.agents._agentId.memories_._memoryRef-C-SC6wzq.js +14 -0
  107. package/.build/server/assets/_authenticated.agents._agentId.memories_._memoryRef-ZCrdrc8C.js +490 -0
  108. package/.build/server/assets/_authenticated.agents._agentId.notifications-DQeQqTzh.js +14 -0
  109. package/.build/server/assets/_authenticated.agents._agentId.notifications-DlFyYyHh.js +16 -0
  110. package/.build/server/assets/_authenticated.agents._agentId.notifications_._notificationId-B0RosY_R.js +15 -0
  111. package/.build/server/assets/_authenticated.agents._agentId.notifications_._notificationId-C1NikQ9e.js +13 -0
  112. package/.build/server/assets/_authenticated.agents._agentId.settings-DDwjT3Ui.js +42 -0
  113. package/.build/server/assets/_authenticated.agents._agentId.settings-PEzEvOfo.js +751 -0
  114. package/.build/server/assets/_authenticated.agents._agentId.sub-agents-z34-J3Tu.js +5 -0
  115. package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId-D-6TOi1U.js +1371 -0
  116. package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId-DipzVdnr.js +13 -0
  117. package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-BZR3VLV7.js +610 -0
  118. package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-DsYJKfGm.js +12 -0
  119. package/.build/server/assets/_authenticated.agents._agentId.sub-agents.index-BF8Cuzcr.js +231 -0
  120. package/.build/server/assets/_authenticated.agents._agentId.sub-agents.index-D2x0qCnt.js +12 -0
  121. package/.build/server/assets/_authenticated.agents._agentId.sub-agents.new-CYm_vuDD.js +13 -0
  122. package/.build/server/assets/_authenticated.agents._agentId.sub-agents.new-CiVShIka.js +497 -0
  123. package/.build/server/assets/_authenticated.agents._agentId.transactions-BC_XfGqw.js +95 -0
  124. package/.build/server/assets/_authenticated.agents._agentId.transactions-WtBW3xmh.js +495 -0
  125. package/.build/server/assets/_authenticated.agents.index-C8zmu8T8.js +78 -0
  126. package/.build/server/assets/_authenticated.agents.new-Bt-tBR47.js +302 -0
  127. package/.build/server/assets/_authenticated.providers-C0pb-ujV.js +672 -0
  128. package/.build/server/assets/_tanstack-start-manifest_v-Baw5u9sk.js +354 -0
  129. package/.build/server/assets/account-XvMwzRXh.js +66 -0
  130. package/.build/server/assets/account-queries-AJJVkLAV.js +32 -0
  131. package/.build/server/assets/agent-chat-page-DChiz8KQ.js +686 -0
  132. package/.build/server/assets/agent-enablement-control-C90f0uIb.js +143 -0
  133. package/.build/server/assets/agent-events-DK9Yz5__.js +217 -0
  134. package/.build/server/assets/agent-notifications-page-BdyKAyds.js +276 -0
  135. package/.build/server/assets/agent-queries-Cmx8RiUx.js +51 -0
  136. package/.build/server/assets/agents-CZq-0mna.js +106 -0
  137. package/.build/server/assets/agents-CfjmtW7A.js +278 -0
  138. package/.build/server/assets/artifact-content-B6uHmPz7.js +35 -0
  139. package/.build/server/assets/artifacts-HtLwHs8q.js +42 -0
  140. package/.build/server/assets/auth-DTikZAVz.js +12 -0
  141. package/.build/server/assets/auth-client-Vb3O0v7P.js +1897 -0
  142. package/.build/server/assets/auth-user-DkLo8ojH.js +108 -0
  143. package/.build/server/assets/chart-queries-Bc3AfsEb.js +109 -0
  144. package/.build/server/assets/charts-C4dKuwTJ.js +130 -0
  145. package/.build/server/assets/chat-bubble-ik3itVbx.js +109 -0
  146. package/.build/server/assets/config-dialog-9gSAjwwT.js +55 -0
  147. package/.build/server/assets/contracts-CG-nZuYJ.js +155 -0
  148. package/.build/server/assets/createServerRpc-DNqhdU4z.js +12 -0
  149. package/.build/server/assets/decimal-BthtZ77w.js +97 -0
  150. package/.build/server/assets/empty-plugin-adapters-MOWBbCMw.js +5 -0
  151. package/.build/server/assets/errors-DaZqUftX.js +151 -0
  152. package/.build/server/assets/gateway-CHkruO_a.js +193 -0
  153. package/.build/server/assets/identicon-CyawcVnx.js +41 -0
  154. package/.build/server/assets/indicator-input-fields-bzuhIh6t.js +75 -0
  155. package/.build/server/assets/indicator-queries-4dY1-LXx.js +171 -0
  156. package/.build/server/assets/indicator-renderer-B2muPS-8.js +395 -0
  157. package/.build/server/assets/indicators-ENxAHN42.js +192 -0
  158. package/.build/server/assets/insight-contracts-B5rmUDfO.js +14 -0
  159. package/.build/server/assets/instrument-label-C-tTGGsD.js +40 -0
  160. package/.build/server/assets/instrument-picker-CRroLwVq.js +381 -0
  161. package/.build/server/assets/journal-9aE-um9f.js +107 -0
  162. package/.build/server/assets/journal-decimal-Bh9EL029.js +66 -0
  163. package/.build/server/assets/login-BsEFUvTX.js +125 -0
  164. package/.build/server/assets/memories-2WF2fW1G.js +100 -0
  165. package/.build/server/assets/memory-badge-DVYLTtRR.js +53 -0
  166. package/.build/server/assets/memory-contracts-DQGN2IKV.js +22 -0
  167. package/.build/server/assets/memory-queries--4RbPRrk.js +92 -0
  168. package/.build/server/assets/model-picker-CA1uYb--.js +225 -0
  169. package/.build/server/assets/notification-queries-0CJUkBt9.js +52 -0
  170. package/.build/server/assets/notifications-Cn7BiCyw.js +72 -0
  171. package/.build/server/assets/provider-logo-BRdbOr9I.js +32 -0
  172. package/.build/server/assets/provider-queries-BaZWLw8J.js +78 -0
  173. package/.build/server/assets/providers-CyoN_jgW.js +89 -0
  174. package/.build/server/assets/risk-Bqrb6hKQ.js +34 -0
  175. package/.build/server/assets/risk-queries-JQpByHT2.js +18 -0
  176. package/.build/server/assets/router-Hkr5TH_I.js +419 -0
  177. package/.build/server/assets/run-subagent-dialog-C7iUOZa-.js +59 -0
  178. package/.build/server/assets/setup-DqMlwgNr.js +30 -0
  179. package/.build/server/assets/setup-checklist-BICTmBo2.js +60 -0
  180. package/.build/server/assets/start-C-GPoWRt.js +4 -0
  181. package/.build/server/assets/subagent-enabled-toggle-Djte00oo.js +22 -0
  182. package/.build/server/assets/subagent-input-BHQKs2cW.js +57 -0
  183. package/.build/server/assets/subagent-mutations-dUo3B_SG.js +32 -0
  184. package/.build/server/assets/subagent-queries-sAwBjFxC.js +146 -0
  185. package/.build/server/assets/subagent-run-history-C_xmucO-.js +186 -0
  186. package/.build/server/assets/subagents-CIoilC66.js +180 -0
  187. package/.build/server/assets/toggle-timestamp-CToUVn67.js +28 -0
  188. package/.build/server/assets/trading-contracts-zWq1Hxnb.js +26 -0
  189. package/.build/server/assets/validation-BX-krL0i.js +33 -0
  190. package/.build/server/assets/worker-triggers-CJF5HWzR.js +51 -0
  191. package/.build/server/server.js +7501 -0
  192. package/LICENSE +661 -0
  193. package/README.md +145 -2
  194. package/bin/hypervibes.js +24 -0
  195. package/dist/agents/agent-enablement.js +10 -0
  196. package/dist/agents/agent-input.js +38 -0
  197. package/dist/agents/agent-service.js +1004 -0
  198. package/dist/agents/cancel-task-scope.js +52 -0
  199. package/dist/agents/candle-intervals.js +1 -0
  200. package/dist/agents/default-subagents.js +36 -0
  201. package/dist/agents/execution-context-contracts.js +1 -0
  202. package/dist/agents/execution-context.js +206 -0
  203. package/dist/agents/execution-warnings.js +33 -0
  204. package/dist/agents/orchestrator-insights.js +14 -0
  205. package/dist/agents/run-inspection.js +99 -0
  206. package/dist/agents/subagent-dashboard.js +1 -0
  207. package/dist/agents/subagent-extension.js +156 -0
  208. package/dist/agents/subagent-history.js +5 -0
  209. package/dist/agents/subagent-input.js +73 -0
  210. package/dist/agents/subagent-service.js +1177 -0
  211. package/dist/agents/subagent-templates.js +20 -0
  212. package/dist/agents/template-manifest.js +34 -0
  213. package/dist/agents/templates/basic-analysis.json +40 -0
  214. package/dist/agents/templates/basic-review.json +48 -0
  215. package/dist/agents/templates/basic-trading.json +45 -0
  216. package/dist/agents/templates/indicator-developer.json +16 -0
  217. package/dist/agents/time-guidance.js +29 -0
  218. package/dist/agents/worker-events.js +18 -0
  219. package/dist/agents/worker-inbox.js +28 -0
  220. package/dist/agents/worker-triggers.js +23 -0
  221. package/dist/auth-options.js +98 -0
  222. package/dist/auth-user.js +15 -0
  223. package/dist/auth.js +28 -0
  224. package/dist/cache/svg-logo-cache.js +155 -0
  225. package/dist/canonical.js +13 -0
  226. package/dist/charts/chart-service.js +236 -0
  227. package/dist/charts/contracts.js +118 -0
  228. package/dist/charts/durable-extension.js +27 -0
  229. package/dist/charts/trading-contracts.js +14 -0
  230. package/dist/config.js +85 -0
  231. package/dist/db/agent-schema.js +26 -0
  232. package/dist/db/auth-schema.js +122 -0
  233. package/dist/db/database.js +31 -0
  234. package/dist/db/exchange-schema.js +23 -0
  235. package/dist/db/gateway-schema.js +24 -0
  236. package/dist/db/indicator-schema.js +19 -0
  237. package/dist/db/migrations/20261015221717_auth/migration.sql +62 -0
  238. package/dist/db/migrations/20261015231224_agents/migration.sql +35 -0
  239. package/dist/db/migrations/20261016040641_provider_connections/migration.sql +19 -0
  240. package/dist/db/migrations/20261016061831_trade_journal/migration.sql +48 -0
  241. package/dist/db/migrations/20261016080320_order_execution/migration.sql +62 -0
  242. package/dist/db/migrations/20261016181110_subagents/migration.sql +51 -0
  243. package/dist/db/migrations/20261017222959_research_artifacts/migration.sql +37 -0
  244. package/dist/db/migrations/20261018061531_memories_and_insights/migration.sql +162 -0
  245. package/dist/db/migrations/20261020091156_worker_event_inbox/migration.sql +54 -0
  246. package/dist/db/migrations/20261021051229_chart_workspace/migration.sql +33 -0
  247. package/dist/db/migrations/20261021222116_gateways/migration.sql +15 -0
  248. package/dist/db/migrations/20261022015813_pine_indicators/migration.sql +43 -0
  249. package/dist/db/migrations/20261022101559_notifications/migration.sql +51 -0
  250. package/dist/db/migrations.js +12 -0
  251. package/dist/db/order-provenance-schema.js +17 -0
  252. package/dist/db/order-schema.js +32 -0
  253. package/dist/db/profile-lock.js +12 -0
  254. package/dist/db/provider-schema.js +16 -0
  255. package/dist/db/shared-database.js +128 -0
  256. package/dist/db/subagent-schema.js +79 -0
  257. package/dist/gateway/bridge-service.js +223 -0
  258. package/dist/gateway/gateway-store.js +77 -0
  259. package/dist/gateway/handlers.js +122 -0
  260. package/dist/gateway/telegram/connector.js +115 -0
  261. package/dist/gateway/telegram/transport.js +96 -0
  262. package/dist/hyperliquid/account-info.js +117 -0
  263. package/dist/hyperliquid/account-status.js +64 -0
  264. package/dist/hyperliquid/agent-dashboard.js +56 -0
  265. package/dist/hyperliquid/chart-contracts.js +9 -0
  266. package/dist/hyperliquid/constants.js +25 -0
  267. package/dist/hyperliquid/crypto.js +29 -0
  268. package/dist/hyperliquid/currency-logo.js +7 -0
  269. package/dist/hyperliquid/decimal.js +98 -0
  270. package/dist/hyperliquid/durable-extension.js +39 -0
  271. package/dist/hyperliquid/errors.js +8 -0
  272. package/dist/hyperliquid/exchange.js +118 -0
  273. package/dist/hyperliquid/journal-decimal.js +48 -0
  274. package/dist/hyperliquid/journal-model.js +167 -0
  275. package/dist/hyperliquid/journal-service.js +648 -0
  276. package/dist/hyperliquid/live-dashboard.js +245 -0
  277. package/dist/hyperliquid/logo-cache.js +27 -0
  278. package/dist/hyperliquid/market-charts.js +242 -0
  279. package/dist/hyperliquid/market-snapshot.js +45 -0
  280. package/dist/hyperliquid/orders/order-contracts.js +42 -0
  281. package/dist/hyperliquid/orders/order-math.js +89 -0
  282. package/dist/hyperliquid/orders/order-outcomes.js +74 -0
  283. package/dist/hyperliquid/orders/order-prepare.js +109 -0
  284. package/dist/hyperliquid/orders/order-service.js +432 -0
  285. package/dist/hyperliquid/orders/order-store.js +134 -0
  286. package/dist/hyperliquid/orders/order-tools.js +40 -0
  287. package/dist/hyperliquid/orders/protection.js +35 -0
  288. package/dist/hyperliquid/orders/risk-settings.js +44 -0
  289. package/dist/hyperliquid/orders/trade-admission.js +117 -0
  290. package/dist/hyperliquid/orders/trade-planning.js +60 -0
  291. package/dist/hyperliquid/service.js +529 -0
  292. package/dist/hyperliquid/shared-feeds.js +40 -0
  293. package/dist/hyperliquid/signing.js +89 -0
  294. package/dist/indicators/builtin-catalog.js +59 -0
  295. package/dist/indicators/builtins/adx.pine +22 -0
  296. package/dist/indicators/builtins/atr.pine +11 -0
  297. package/dist/indicators/builtins/bollinger.pine +10 -0
  298. package/dist/indicators/builtins/ema.pine +5 -0
  299. package/dist/indicators/builtins/macd.pine +18 -0
  300. package/dist/indicators/builtins/rsi.pine +18 -0
  301. package/dist/indicators/builtins/sma.pine +5 -0
  302. package/dist/indicators/candle-window.js +36 -0
  303. package/dist/indicators/chart-contracts.js +64 -0
  304. package/dist/indicators/contracts.js +14 -0
  305. package/dist/indicators/durable-extension.js +32 -0
  306. package/dist/indicators/indicator-service.js +300 -0
  307. package/dist/indicators/indicator-store.js +137 -0
  308. package/dist/indicators/normalize.js +149 -0
  309. package/dist/indicators/result-schema.js +79 -0
  310. package/dist/indicators/runtime-wrapper.js +52 -0
  311. package/dist/indicators/runtime.js +201 -0
  312. package/dist/indicators/validation.js +124 -0
  313. package/dist/indicators/worker-queue.js +48 -0
  314. package/dist/initialize-config.js +160 -0
  315. package/dist/main.js +59 -0
  316. package/dist/memory/decision-audit.js +47 -0
  317. package/dist/memory/durable-extension.js +40 -0
  318. package/dist/memory/execution-audit.js +83 -0
  319. package/dist/memory/insight-contracts.js +33 -0
  320. package/dist/memory/insight-service.js +117 -0
  321. package/dist/memory/memory-contracts.js +113 -0
  322. package/dist/memory/memory-service.js +179 -0
  323. package/dist/memory/operations.js +46 -0
  324. package/dist/memory/tool-schemas.js +44 -0
  325. package/dist/memory/validation.js +42 -0
  326. package/dist/notifications/contracts.js +1 -0
  327. package/dist/notifications/delivery.js +11 -0
  328. package/dist/notifications/durable-extension.js +20 -0
  329. package/dist/notifications/notification-service.js +324 -0
  330. package/dist/providers/credential-store.js +86 -0
  331. package/dist/providers/ollama-cloud.js +148 -0
  332. package/dist/providers/provider-logo-url.js +18 -0
  333. package/dist/providers/provider-logo.js +31 -0
  334. package/dist/providers/provider-service.js +295 -0
  335. package/dist/research/artifacts.js +151 -0
  336. package/dist/research/call-queue.js +43 -0
  337. package/dist/research/contracts.js +37 -0
  338. package/dist/research/evidence.js +43 -0
  339. package/dist/research/journal.js +30 -0
  340. package/dist/research/research-service.js +191 -0
  341. package/dist/research/tool-activity.js +49 -0
  342. package/dist/research/tool-response.js +25 -0
  343. package/dist/runtime.js +145 -0
  344. package/dist/web/agent-events.js +418 -0
  345. package/dist/web/app.js +206 -0
  346. package/dist/web/artifact-downloads.js +23 -0
  347. package/dist/web/middleware.js +25 -0
  348. package/dist/web/random-uuid.js +14 -0
  349. package/dist/web/start.js +56 -0
  350. package/package.json +93 -3
  351. package/scripts/check-node.mjs +24 -0
  352. package/static/android-chrome-192x192.png +0 -0
  353. package/static/android-chrome-512x512.png +0 -0
  354. package/static/apple-touch-icon.png +0 -0
  355. package/static/favicon-16x16.png +0 -0
  356. package/static/favicon-32x32.png +0 -0
  357. package/static/favicon.ico +0 -0
  358. package/static/github.svg +3 -0
  359. package/static/hypervibes.png +0 -0
  360. package/static/logo.png +0 -0
  361. package/static/site.webmanifest +1 -0
  362. package/static/telegram.svg +1 -0
@@ -0,0 +1,686 @@
1
+ import { S as stopAgentChat, b as sendAgentMessage, o as compactAgentChat, v as resetAgentChat, y as retryAgent } from "./agents-CZq-0mna.js";
2
+ import { r as agentHistoryQueryOptions } from "./agent-queries-Cmx8RiUx.js";
3
+ import { f as randomUuid } from "./contracts-CG-nZuYJ.js";
4
+ import { t as subagentMutations } from "./subagent-mutations-dUo3B_SG.js";
5
+ import { t as ProviderLogo } from "./provider-logo-BRdbOr9I.js";
6
+ import { a as modelKey, t as ModelDialog } from "./model-picker-CA1uYb--.js";
7
+ import { r as ToolCall, t as ChatBubble } from "./chat-bubble-ik3itVbx.js";
8
+ import { t as ArtifactContent } from "./artifact-content-B6uHmPz7.js";
9
+ import { i as useAgentEventsStatus, r as useAgentEvent } from "./agent-events-DK9Yz5__.js";
10
+ import { useEffect, useEffectEvent, useId, useLayoutEffect, useRef, useState } from "react";
11
+ import { Link } from "@tanstack/react-router";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
14
+ //#region src/components/use-agent-chat.ts
15
+ /** Each mounted chat/settings page owns its stream and closes it on navigation. */
16
+ function useAgentChat(initial) {
17
+ const client = useQueryClient();
18
+ const historyId = useId();
19
+ const [chat, setChat] = useState(initial);
20
+ const [connectionError, setConnectionError] = useState("");
21
+ /** Transcript older than the streamed tail, oldest first. */
22
+ const [older, setOlder] = useState([]);
23
+ const [historyLoading, setHistoryLoading] = useState(false);
24
+ const [historyDone, setHistoryDone] = useState(false);
25
+ /** Exclusive upper entry ID for the next history page. */
26
+ const before = useRef(void 0);
27
+ const chatRef = useRef(chat);
28
+ const olderRef = useRef(older);
29
+ const loadingRef = useRef(false);
30
+ const doneRef = useRef(false);
31
+ const lastReset = useRef(initial.messages.find((entry) => entry.marker === "reset")?.id);
32
+ const historyVersion = useRef(0);
33
+ const id = initial.agent.id;
34
+ const { interrupted, controlMessage, streamErrors } = useAgentEventsStatus();
35
+ useAgentEvent("chat", (event) => {
36
+ const next = JSON.parse(event.data);
37
+ const reset = next.messages.find((entry) => entry.marker === "reset")?.id;
38
+ if (reset && reset !== lastReset.current) {
39
+ lastReset.current = reset;
40
+ historyVersion.current++;
41
+ before.current = void 0;
42
+ olderRef.current = [];
43
+ loadingRef.current = false;
44
+ doneRef.current = false;
45
+ setOlder([]);
46
+ setHistoryDone(false);
47
+ setHistoryLoading(false);
48
+ }
49
+ chatRef.current = next;
50
+ setChat(next);
51
+ setConnectionError("");
52
+ });
53
+ useEffect(() => {
54
+ const topicError = streamErrors["chat"];
55
+ if (topicError) setConnectionError(topicError);
56
+ else if (interrupted) setConnectionError(controlMessage || "Connection interrupted. Reconnecting…");
57
+ }, [
58
+ interrupted,
59
+ controlMessage,
60
+ streamErrors
61
+ ]);
62
+ useEffect(() => {
63
+ chatRef.current = chat;
64
+ }, [chat]);
65
+ useEffect(() => () => {
66
+ historyVersion.current++;
67
+ }, [id]);
68
+ /** Prepends one page of transcript older than everything currently shown; returns whether a page was fetched. */
69
+ async function loadOlder() {
70
+ if (loadingRef.current || doneRef.current) return false;
71
+ loadingRef.current = true;
72
+ setHistoryLoading(true);
73
+ const version = historyVersion.current;
74
+ try {
75
+ const result = await client.fetchQuery(agentHistoryQueryOptions(id, before.current, `${historyId}:${version}`));
76
+ if (version !== historyVersion.current) return false;
77
+ const known = new Set([...chatRef.current.messages, ...olderRef.current].map((entry) => entry.id));
78
+ const fresh = result.messages.filter((entry) => !known.has(entry.id));
79
+ if (fresh.length) {
80
+ olderRef.current = [...fresh, ...olderRef.current];
81
+ setOlder(olderRef.current);
82
+ }
83
+ before.current = result.before;
84
+ doneRef.current = !result.more;
85
+ setHistoryDone(!result.more);
86
+ setConnectionError("");
87
+ return true;
88
+ } catch {
89
+ if (version === historyVersion.current) setConnectionError("Unable to load earlier messages. Please try again.");
90
+ return false;
91
+ } finally {
92
+ if (version === historyVersion.current) {
93
+ loadingRef.current = false;
94
+ setHistoryLoading(false);
95
+ }
96
+ }
97
+ }
98
+ return {
99
+ chat,
100
+ messages: [...older, ...chat.messages],
101
+ connectionError,
102
+ historyLoading,
103
+ historyDone,
104
+ loadOlder
105
+ };
106
+ }
107
+ //#endregion
108
+ //#region src/components/agent-chat-page.tsx
109
+ var compactNumber = new Intl.NumberFormat("en", {
110
+ notation: "compact",
111
+ maximumFractionDigits: 1
112
+ });
113
+ function money(value) {
114
+ return value > 0 && value < .01 ? `$${value.toFixed(4)}` : `$${value.toFixed(2)}`;
115
+ }
116
+ function ChartContextBadge({ chart }) {
117
+ return /* @__PURE__ */ jsxs("p", {
118
+ className: "mb-2 rounded-lg border border-violet-900/70 bg-violet-950/20 px-3 py-2 text-xs text-violet-200",
119
+ title: `Layout: ${chart.name} · Snapshot ${chart.snapshotId}`,
120
+ children: [
121
+ "Chart · ",
122
+ chart.name,
123
+ " · ",
124
+ chart.coin,
125
+ "-PERP · ",
126
+ chart.interval,
127
+ chart.image ? " · Image attached" : "",
128
+ chart.selectedDrawingId ? " · Selected object attached" : "",
129
+ /* @__PURE__ */ jsxs("span", {
130
+ className: "ml-2 text-zinc-500",
131
+ children: [new Date(chart.capturedAt).toISOString().replace("T", " ").slice(0, 19), " UTC"]
132
+ })
133
+ ]
134
+ });
135
+ }
136
+ function ChatMessage({ entry, agentId }) {
137
+ if (entry.role === "tool") return entry.tool ? /* @__PURE__ */ jsx(ToolCall, { tool: entry.tool }) : null;
138
+ if (entry.role === "system") return /* @__PURE__ */ jsxs("div", {
139
+ role: "presentation",
140
+ className: "flex items-center gap-3 py-1",
141
+ children: [
142
+ /* @__PURE__ */ jsx("span", { className: "h-px flex-1 bg-zinc-800" }),
143
+ /* @__PURE__ */ jsx("span", {
144
+ className: "text-xs text-zinc-500",
145
+ children: entry.text
146
+ }),
147
+ /* @__PURE__ */ jsx("span", { className: "h-px flex-1 bg-zinc-800" })
148
+ ]
149
+ });
150
+ return /* @__PURE__ */ jsxs(ChatBubble, {
151
+ role: entry.role,
152
+ children: [
153
+ /* @__PURE__ */ jsx("h2", {
154
+ className: "mb-2 text-xs font-semibold uppercase tracking-wide text-zinc-400",
155
+ children: entry.role === "user" ? "You" : "Assistant"
156
+ }),
157
+ entry.chart && /* @__PURE__ */ jsx(ChartContextBadge, { chart: entry.chart }),
158
+ entry.failed ? /* @__PURE__ */ jsx("p", {
159
+ className: "whitespace-pre-wrap break-words text-sm text-red-300",
160
+ children: entry.text
161
+ }) : /* @__PURE__ */ jsx(ArtifactContent, {
162
+ agentId,
163
+ content: entry.text
164
+ })
165
+ ]
166
+ });
167
+ }
168
+ function ResetContextDialog({ onCancel, onConfirm, disabled }) {
169
+ const dialog = useRef(null);
170
+ const titleId = useId();
171
+ useEffect(() => {
172
+ const element = dialog.current;
173
+ element.showModal();
174
+ return () => element.close();
175
+ }, []);
176
+ return /* @__PURE__ */ jsxs("dialog", {
177
+ ref: dialog,
178
+ "aria-labelledby": titleId,
179
+ "aria-describedby": `${titleId}-description`,
180
+ onCancel: (event) => {
181
+ event.preventDefault();
182
+ onCancel();
183
+ },
184
+ className: "m-auto w-[calc(100%_-_2rem)] max-w-md rounded-2xl border border-zinc-800 bg-[#0d0d10] p-6 text-zinc-100 shadow-2xl backdrop:bg-black/70 backdrop:backdrop-blur-sm",
185
+ children: [
186
+ /* @__PURE__ */ jsx("h3", {
187
+ id: titleId,
188
+ className: "text-lg font-semibold text-white",
189
+ children: "Reset context?"
190
+ }),
191
+ /* @__PURE__ */ jsx("p", {
192
+ id: `${titleId}-description`,
193
+ className: "mt-2 text-sm leading-6 text-zinc-400",
194
+ children: "The model will start fresh. Earlier messages remain available. Accounts, orders, and agent configuration are unchanged."
195
+ }),
196
+ /* @__PURE__ */ jsxs("div", {
197
+ className: "mt-6 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end",
198
+ children: [/* @__PURE__ */ jsx("button", {
199
+ type: "button",
200
+ autoFocus: true,
201
+ onClick: onCancel,
202
+ className: "cursor-pointer rounded-full border border-zinc-800 px-4 py-2 text-sm font-medium text-zinc-300 hover:border-zinc-700 hover:text-white",
203
+ children: "Cancel"
204
+ }), /* @__PURE__ */ jsx("button", {
205
+ type: "button",
206
+ disabled,
207
+ onClick: onConfirm,
208
+ className: "cursor-pointer rounded-full bg-violet-600 px-4 py-2 text-sm font-medium text-white hover:bg-violet-500 disabled:cursor-not-allowed disabled:opacity-50",
209
+ children: "Reset context"
210
+ })]
211
+ })
212
+ ]
213
+ });
214
+ }
215
+ function AgentChatPage({ initial, choices, embedded = false, visible = true, chartContext }) {
216
+ const { chat, messages, connectionError, historyLoading, historyDone, loadOlder } = useAgentChat(initial);
217
+ const [message, setMessage] = useState("");
218
+ const client = useQueryClient();
219
+ const mutation = useMutation({
220
+ mutationFn: (operation) => operation(),
221
+ onMutate: () => {
222
+ setNotice("");
223
+ }
224
+ });
225
+ const pending = mutation.isPending;
226
+ const error = mutation.error?.message;
227
+ /** Transient outcome of a background action, such as a declined compaction. */
228
+ const [notice, setNotice] = useState("");
229
+ const [resetOpen, setResetOpen] = useState(false);
230
+ const [jump, setJump] = useState(false);
231
+ const [modelOpen, setModelOpen] = useState(false);
232
+ const request = useRef(null);
233
+ const [includeImage, setIncludeImage] = useState(false);
234
+ const inFlight = useRef(false);
235
+ const scroll = useRef(null);
236
+ const stick = useRef(true);
237
+ /** Scroll offset to restore after an older history page is prepended. */
238
+ const restore = useRef(null);
239
+ const id = initial.agent.id;
240
+ useEffect(() => {
241
+ try {
242
+ setIncludeImage(localStorage.getItem(`hypervibes:chart-image:${id}`) === "true");
243
+ } catch {}
244
+ }, [id]);
245
+ useLayoutEffect(() => {
246
+ const element = scroll.current;
247
+ if (!element) return;
248
+ if (restore.current) {
249
+ element.scrollTop = restore.current.top + element.scrollHeight - restore.current.height;
250
+ restore.current = null;
251
+ } else if (stick.current) element.scrollTop = element.scrollHeight;
252
+ }, [
253
+ messages.length,
254
+ chat.messages,
255
+ chat.partial,
256
+ visible
257
+ ]);
258
+ useEffect(() => {
259
+ const element = scroll.current;
260
+ if (element) element.scrollTop = element.scrollHeight;
261
+ }, [id]);
262
+ useEffect(() => {
263
+ if (notice && chat.messages.some((entry) => entry.marker === "compaction")) setNotice("");
264
+ }, [chat.messages, notice]);
265
+ async function run(operation) {
266
+ if (inFlight.current) return;
267
+ inFlight.current = true;
268
+ try {
269
+ await mutation.mutateAsync(operation);
270
+ } catch {} finally {
271
+ inFlight.current = false;
272
+ }
273
+ }
274
+ /** The composer keeps focus through sends so chatting stays hands-on-keyboard. */
275
+ const composer = useRef(null);
276
+ async function action(kind) {
277
+ await run(async () => {
278
+ if (kind === "compact") {
279
+ const result = await compactAgentChat({ data: { id } });
280
+ if (result.message) setNotice(result.message);
281
+ return;
282
+ }
283
+ if (kind === "retry") {
284
+ await retryAgent({ data: { id } });
285
+ await Promise.all([client.invalidateQueries({ queryKey: ["agents"] }), client.invalidateQueries({ queryKey: ["agent", id] })]);
286
+ return;
287
+ }
288
+ if (kind === "stop") {
289
+ await stopAgentChat({ data: { id } });
290
+ return;
291
+ }
292
+ if (kind === "reset") {
293
+ await resetAgentChat({ data: { id } });
294
+ return;
295
+ }
296
+ if (request.current?.message !== message) request.current = {
297
+ message,
298
+ id: randomUuid()
299
+ };
300
+ const outgoing = request.current;
301
+ if (chartContext && !outgoing.chart) outgoing.chart = await chartContext.capture(includeImage && chat.supportsImages === true);
302
+ await sendAgentMessage({ data: {
303
+ id,
304
+ message: outgoing.message,
305
+ requestId: outgoing.id,
306
+ ...outgoing.chart ? { chart: outgoing.chart } : {}
307
+ } });
308
+ setMessage((current) => current === outgoing.message ? "" : current);
309
+ if (request.current === outgoing) request.current = null;
310
+ });
311
+ if (kind === "send" || kind === "retry" || kind === "reset") composer.current?.focus();
312
+ }
313
+ const onEscape = useEffectEvent((event) => {
314
+ if (!visible || event.key !== "Escape" || event.repeat || event.isComposing || event.defaultPrevented || !chat.busy || pending || document.querySelector("dialog[open]")) return;
315
+ event.preventDefault();
316
+ action("stop");
317
+ });
318
+ useEffect(() => {
319
+ document.addEventListener("keydown", onEscape);
320
+ return () => document.removeEventListener("keydown", onEscape);
321
+ }, []);
322
+ function send() {
323
+ action("send");
324
+ }
325
+ function onComposerKey(event) {
326
+ if (event.key === "Enter" && !event.shiftKey && !event.nativeEvent.isComposing) {
327
+ event.preventDefault();
328
+ if (!disabled && message.trim()) send();
329
+ }
330
+ }
331
+ async function onLoadOlder() {
332
+ const element = scroll.current;
333
+ const marker = element ? {
334
+ height: element.scrollHeight,
335
+ top: element.scrollTop
336
+ } : null;
337
+ if (await loadOlder() && marker) restore.current = marker;
338
+ }
339
+ function onScroll() {
340
+ const element = scroll.current;
341
+ if (!element) return;
342
+ const atBottom = element.scrollHeight - element.scrollTop - element.clientHeight < 80;
343
+ stick.current = atBottom;
344
+ setJump(!atBottom);
345
+ if (element.scrollTop < 400) onLoadOlder();
346
+ }
347
+ function jumpToLatest() {
348
+ const element = scroll.current;
349
+ if (element) element.scrollTop = element.scrollHeight;
350
+ }
351
+ /** The orchestrator's model is the `main:` orchestrator section; the backend rejects edits while it is working. */
352
+ async function changeModel(value, thinkingLevel) {
353
+ const choice = choices.find((entry) => modelKey(entry) === value);
354
+ if (!choice) throw new Error("Select an available model.");
355
+ await mutation.mutateAsync(async () => {
356
+ await subagentMutations(client, id).saveSection({
357
+ id: `main:${id}`,
358
+ section: "model",
359
+ settings: {
360
+ provider: choice.provider,
361
+ modelId: choice.modelId,
362
+ thinkingLevel
363
+ }
364
+ });
365
+ setModelOpen(false);
366
+ });
367
+ }
368
+ useEffect(() => {
369
+ if (!modelOpen) return;
370
+ return () => {
371
+ composer.current?.focus();
372
+ };
373
+ }, [modelOpen]);
374
+ const busy = chat.busy;
375
+ const modelBusy = busy || chat.queuedMessages.length > 0;
376
+ const selectedModel = choices.find((choice) => modelKey(choice) === modelKey(chat.model));
377
+ const percentage = chat.context ? Math.min(100, Math.round(chat.context.tokens / chat.context.window * 100)) : void 0;
378
+ const disabled = pending || !chat.agent.enabled || !chat.configured || chat.agent.state !== "ready" || chartContext?.disabled === true;
379
+ return /* @__PURE__ */ jsxs("section", {
380
+ "aria-label": "Chat",
381
+ className: `flex min-h-0 w-full flex-col overflow-hidden rounded-2xl border border-zinc-800 bg-[#0d0d10] ${embedded ? "h-full" : "h-[calc(100dvh-4.5rem)] sm:h-[calc(100dvh-5rem)]"}`,
382
+ children: [
383
+ !embedded && /* @__PURE__ */ jsxs("header", {
384
+ className: "flex flex-wrap items-center gap-x-4 gap-y-2 border-b border-zinc-800 px-4 py-2 sm:px-6",
385
+ children: [
386
+ /* @__PURE__ */ jsxs("div", {
387
+ className: "min-w-0 flex-1",
388
+ children: [/* @__PURE__ */ jsx("h2", {
389
+ className: "text-sm font-medium text-white",
390
+ children: "Main conversation"
391
+ }), /* @__PURE__ */ jsxs("button", {
392
+ type: "button",
393
+ disabled: modelBusy,
394
+ onClick: () => setModelOpen(true),
395
+ "aria-haspopup": "dialog",
396
+ "aria-label": "Choose model",
397
+ title: modelBusy ? "Stop or finish queued work before changing the model" : "Change the model",
398
+ className: "mt-0.5 flex min-w-0 max-w-full cursor-pointer items-center gap-2 rounded-lg px-1.5 py-0.5 text-xs text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200 disabled:cursor-not-allowed disabled:opacity-50",
399
+ children: [selectedModel && /* @__PURE__ */ jsx(ProviderLogo, {
400
+ provider: selectedModel.provider,
401
+ className: "h-5 w-5 shrink-0 rounded-sm border border-zinc-800 bg-white p-0.5"
402
+ }), /* @__PURE__ */ jsxs("span", {
403
+ className: "min-w-0 truncate",
404
+ children: [selectedModel ? selectedModel.name : `${chat.model.provider}/${chat.model.modelId}`, chat.thinkingLevel !== void 0 && /* @__PURE__ */ jsxs("span", {
405
+ className: "text-zinc-500",
406
+ children: [" · Thinking: ", chat.thinkingLevel || "Default"]
407
+ })]
408
+ })]
409
+ })]
410
+ }),
411
+ /* @__PURE__ */ jsxs("div", {
412
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-zinc-400",
413
+ children: [chat.context && /* @__PURE__ */ jsxs("span", {
414
+ className: "flex items-center gap-2",
415
+ title: "Estimated context usage of the next request",
416
+ children: [
417
+ /* @__PURE__ */ jsx("span", {
418
+ className: "h-1.5 w-20 overflow-hidden rounded-full bg-zinc-800",
419
+ children: /* @__PURE__ */ jsx("span", {
420
+ className: `block h-full rounded-full ${percentage >= 80 ? "bg-amber-400" : "bg-violet-500"}`,
421
+ style: { width: `${percentage}%` }
422
+ })
423
+ }),
424
+ compactNumber.format(chat.context.tokens),
425
+ " / ",
426
+ compactNumber.format(chat.context.window),
427
+ " tokens"
428
+ ]
429
+ }), /* @__PURE__ */ jsxs("span", {
430
+ title: "Lifetime conversation usage, including before context resets",
431
+ children: [
432
+ "Total usage: ",
433
+ compactNumber.format(chat.usage.input),
434
+ " in · ",
435
+ compactNumber.format(chat.usage.output),
436
+ " out",
437
+ chat.usage.cost > 0 ? ` · ${money(chat.usage.cost)}` : ""
438
+ ]
439
+ })]
440
+ }),
441
+ /* @__PURE__ */ jsxs("div", {
442
+ className: "flex items-center gap-2",
443
+ children: [/* @__PURE__ */ jsx("button", {
444
+ type: "button",
445
+ disabled: disabled || chat.compacting,
446
+ onClick: () => {
447
+ action("compact");
448
+ },
449
+ className: "cursor-pointer rounded-lg border border-zinc-700 px-3 py-1.5 text-xs text-zinc-300 hover:bg-zinc-800 hover:text-white disabled:cursor-not-allowed disabled:opacity-50",
450
+ children: chat.compacting ? "Compacting…" : "Compact"
451
+ }), /* @__PURE__ */ jsx("button", {
452
+ type: "button",
453
+ disabled,
454
+ onClick: () => setResetOpen(true),
455
+ "aria-haspopup": "dialog",
456
+ className: "cursor-pointer rounded-lg border border-zinc-700 px-3 py-1.5 text-xs text-zinc-300 hover:bg-zinc-800 hover:text-white disabled:cursor-not-allowed disabled:opacity-50",
457
+ children: "Reset context"
458
+ })]
459
+ })
460
+ ]
461
+ }),
462
+ resetOpen && /* @__PURE__ */ jsx(ResetContextDialog, {
463
+ disabled,
464
+ onCancel: () => setResetOpen(false),
465
+ onConfirm: () => {
466
+ setResetOpen(false);
467
+ action("reset");
468
+ }
469
+ }),
470
+ modelOpen && /* @__PURE__ */ jsx(ModelDialog, {
471
+ choices,
472
+ value: modelKey(chat.model),
473
+ thinkingLevel: chat.thinkingLevel,
474
+ onCancel: () => setModelOpen(false),
475
+ onApply: changeModel
476
+ }),
477
+ !chat.agent.enabled && /* @__PURE__ */ jsx("p", {
478
+ role: "status",
479
+ className: "border-b border-zinc-800 px-4 py-2 text-sm text-amber-200",
480
+ children: "Agent disabled. Enable it to chat or run workers. Exchange orders and positions remain unchanged."
481
+ }),
482
+ !chat.configured && /* @__PURE__ */ jsxs("p", {
483
+ role: "status",
484
+ className: "border-b border-zinc-800 px-4 py-2 text-sm text-amber-200 sm:px-6",
485
+ children: ["Reconnect this Agent’s provider or select an available model. ", /* @__PURE__ */ jsx("a", {
486
+ href: "/providers",
487
+ className: "cursor-pointer underline",
488
+ children: "Manage providers"
489
+ })]
490
+ }),
491
+ chat.agent.state !== "ready" && /* @__PURE__ */ jsxs("div", {
492
+ role: "status",
493
+ className: "border-b border-zinc-800 px-4 py-3 sm:px-6",
494
+ children: [/* @__PURE__ */ jsx("p", { children: chat.agent.error ?? (chat.agent.state === "stopping" || chat.agent.state === "stopped" ? "Deletion pending. This agent will not resume execution." : "Initializing Agent…") }), chat.agent.state === "stopping" || chat.agent.state === "stopped" ? /* @__PURE__ */ jsx(Link, {
495
+ to: "/agents/$agentId/settings",
496
+ params: { agentId: chat.agent.id },
497
+ className: "mt-2 inline-block cursor-pointer text-violet-300 underline",
498
+ children: "Retry deletion in Settings"
499
+ }) : /* @__PURE__ */ jsx("button", {
500
+ disabled: pending,
501
+ onClick: () => {
502
+ action("retry");
503
+ },
504
+ className: "mt-2 cursor-pointer rounded-lg bg-violet-600 px-4 py-2 text-sm disabled:cursor-wait",
505
+ children: "Retry initialization"
506
+ })]
507
+ }),
508
+ chat.compactionError && /* @__PURE__ */ jsxs("p", {
509
+ role: "status",
510
+ className: "border-b border-zinc-800 px-4 py-2 text-xs text-amber-200 sm:px-6",
511
+ children: ["Compaction failed: ", chat.compactionError]
512
+ }),
513
+ /* @__PURE__ */ jsxs("div", {
514
+ ref: scroll,
515
+ onScroll,
516
+ "aria-label": "Conversation",
517
+ "aria-live": "polite",
518
+ className: `min-h-0 flex-1 space-y-3 overflow-y-auto ${embedded ? "px-3 py-3" : "px-4 py-4 sm:px-6"}`,
519
+ children: [
520
+ !historyDone && chat.history && /* @__PURE__ */ jsx("div", {
521
+ className: "py-1 text-center",
522
+ children: /* @__PURE__ */ jsx("button", {
523
+ type: "button",
524
+ disabled: historyLoading,
525
+ onClick: () => {
526
+ onLoadOlder();
527
+ },
528
+ className: "cursor-pointer rounded-lg px-3 py-1 text-xs text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200 disabled:cursor-wait disabled:opacity-50",
529
+ children: historyLoading ? "Loading earlier messages…" : messages[0]?.marker === "reset" ? "View messages before reset" : "Load earlier messages"
530
+ })
531
+ }),
532
+ messages.length === 0 && /* @__PURE__ */ jsx("p", {
533
+ className: "py-8 text-center text-sm text-zinc-500",
534
+ children: "Start a conversation with your Agent."
535
+ }),
536
+ messages.map((entry) => /* @__PURE__ */ jsx(ChatMessage, {
537
+ entry,
538
+ agentId: chat.agent.id
539
+ }, entry.id)),
540
+ busy && /* @__PURE__ */ jsx("article", {
541
+ className: "mr-8 whitespace-pre-wrap break-words rounded-xl bg-zinc-900 p-4 text-sm text-zinc-300",
542
+ children: chat.partial || "Thinking…"
543
+ }),
544
+ chat.queuedMessages.map((item) => /* @__PURE__ */ jsxs("article", {
545
+ className: "ml-8 rounded-xl bg-violet-950/40 p-4",
546
+ children: [
547
+ /* @__PURE__ */ jsx("h2", {
548
+ className: "mb-2 text-xs font-semibold uppercase tracking-wide text-zinc-400",
549
+ children: "You"
550
+ }),
551
+ item.chart && /* @__PURE__ */ jsx(ChartContextBadge, { chart: item.chart }),
552
+ /* @__PURE__ */ jsx("p", {
553
+ title: item.text,
554
+ className: "line-clamp-6 whitespace-pre-wrap break-words text-sm text-zinc-100",
555
+ children: item.text
556
+ }),
557
+ /* @__PURE__ */ jsx("p", {
558
+ className: "mt-2 text-xs text-violet-300/70",
559
+ children: "Queued · sent when the response finishes"
560
+ })
561
+ ]
562
+ }, item.id))
563
+ ]
564
+ }),
565
+ /* @__PURE__ */ jsxs("div", {
566
+ role: "status",
567
+ className: `flex flex-wrap items-center gap-3 border-t border-zinc-800 text-xs text-zinc-400 ${embedded ? "px-3 py-1.5" : "px-4 py-2 sm:px-6"}`,
568
+ children: [
569
+ /* @__PURE__ */ jsxs("span", { children: [busy ? "Working" : "Idle", chat.queuedMessages.length > 0 ? ` · ${chat.queuedMessages.length} queued` : ""] }),
570
+ notice && /* @__PURE__ */ jsx("span", {
571
+ className: "text-amber-200",
572
+ children: notice
573
+ }),
574
+ busy && /* @__PURE__ */ jsx("button", {
575
+ disabled: pending,
576
+ onClick: () => {
577
+ action("stop");
578
+ },
579
+ title: "Stop response (Esc)",
580
+ "aria-keyshortcuts": "Escape",
581
+ className: "cursor-pointer text-zinc-300 hover:text-white hover:underline disabled:cursor-wait",
582
+ children: "Stop response"
583
+ }),
584
+ jump && /* @__PURE__ */ jsx("button", {
585
+ type: "button",
586
+ onClick: jumpToLatest,
587
+ className: "ml-auto cursor-pointer text-sky-300 hover:underline",
588
+ children: "Jump to latest"
589
+ })
590
+ ]
591
+ }),
592
+ /* @__PURE__ */ jsxs("form", {
593
+ onSubmit: (event) => {
594
+ event.preventDefault();
595
+ if (!disabled && message.trim()) send();
596
+ },
597
+ className: `border-t border-zinc-800 ${embedded ? "px-3 py-2" : "px-4 py-3 sm:px-6"}`,
598
+ children: [
599
+ chartContext && /* @__PURE__ */ jsxs("div", {
600
+ className: "mb-2 flex flex-wrap items-center justify-between gap-2 text-xs text-zinc-400",
601
+ children: [/* @__PURE__ */ jsx("span", {
602
+ className: embedded ? "min-w-0 flex-1 truncate" : void 0,
603
+ title: chartContext.label,
604
+ children: embedded ? "Chart context" : `Attach chart context · ${chartContext.label}`
605
+ }), /* @__PURE__ */ jsxs("label", {
606
+ className: chat.supportsImages ? "cursor-pointer" : "cursor-not-allowed text-zinc-600",
607
+ title: chat.supportsImages ? "Include this chart and visible drawings as a PNG" : "The selected model does not support images",
608
+ children: [/* @__PURE__ */ jsx("input", {
609
+ type: "checkbox",
610
+ checked: (request.current?.chart ? Boolean(request.current.chart.image) : includeImage) && chat.supportsImages === true,
611
+ disabled: !chat.supportsImages || pending || Boolean(request.current?.chart),
612
+ onChange: (event) => {
613
+ setIncludeImage(event.target.checked);
614
+ try {
615
+ localStorage.setItem(`hypervibes:chart-image:${id}`, String(event.target.checked));
616
+ } catch {}
617
+ },
618
+ className: "mr-2 cursor-pointer disabled:cursor-not-allowed"
619
+ }), "Include chart image"]
620
+ })]
621
+ }),
622
+ /* @__PURE__ */ jsxs("div", {
623
+ className: `flex items-end ${embedded ? "gap-2" : "gap-3"}`,
624
+ children: [
625
+ /* @__PURE__ */ jsx("label", {
626
+ htmlFor: "agent-message",
627
+ className: "sr-only",
628
+ children: "Message"
629
+ }),
630
+ /* @__PURE__ */ jsx("textarea", {
631
+ id: "agent-message",
632
+ ref: composer,
633
+ autoFocus: true,
634
+ value: message,
635
+ onChange: (event) => {
636
+ setMessage(event.target.value);
637
+ if (request.current?.message !== event.target.value) request.current = null;
638
+ },
639
+ onKeyDown: onComposerKey,
640
+ required: true,
641
+ maxLength: 16e3,
642
+ rows: 1,
643
+ disabled: !chat.agent.enabled || !chat.configured || chat.agent.state !== "ready",
644
+ placeholder: embedded ? "Ask about this chart" : "Message this agent",
645
+ className: "field-sizing-content max-h-48 min-h-11 min-w-0 flex-1 resize-none rounded-2xl border border-zinc-800 bg-zinc-950 px-4 py-3 text-sm text-zinc-100 placeholder-zinc-600 focus:border-zinc-600 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50"
646
+ }),
647
+ /* @__PURE__ */ jsx("button", {
648
+ type: "submit",
649
+ disabled: disabled || !message.trim(),
650
+ "aria-label": pending ? "Please wait…" : busy ? "Queue message" : "Send message",
651
+ title: busy ? "Queue message" : "Send message",
652
+ className: `shrink-0 cursor-pointer rounded-full bg-violet-600 text-sm font-medium hover:bg-violet-500 disabled:cursor-not-allowed disabled:opacity-50 ${embedded ? "flex size-10 items-center justify-center" : "px-5 py-2.5"}`,
653
+ children: embedded ? /* @__PURE__ */ jsx("svg", {
654
+ "aria-hidden": "true",
655
+ viewBox: "0 0 24 24",
656
+ fill: "none",
657
+ stroke: "currentColor",
658
+ strokeWidth: 2,
659
+ strokeLinecap: "round",
660
+ strokeLinejoin: "round",
661
+ className: "size-5",
662
+ children: /* @__PURE__ */ jsx("path", { d: "M12 19V5m-6 6 6-6 6 6" })
663
+ }) : pending ? "Please wait…" : busy ? "Queue message" : "Send message"
664
+ })
665
+ ]
666
+ }),
667
+ !embedded && /* @__PURE__ */ jsxs("p", {
668
+ className: "mt-2 text-xs text-zinc-500",
669
+ children: [busy ? "The agent is responding · Esc to stop · Enter queues your message · Shift+Enter for a new line" : "Enter to send · Shift+Enter for a new line", " · Up to 16,000 characters"]
670
+ })
671
+ ]
672
+ }),
673
+ error && request.current?.chart && /* @__PURE__ */ jsx("p", {
674
+ className: "px-4 py-2 text-xs text-zinc-400",
675
+ children: "Retries reuse the captured chart and image setting. Edit your message to capture a new view."
676
+ }),
677
+ (error || connectionError) && /* @__PURE__ */ jsx("p", {
678
+ role: "alert",
679
+ className: "border-t border-zinc-800 px-4 py-2 text-sm text-red-300 sm:px-6",
680
+ children: error || connectionError
681
+ })
682
+ ]
683
+ });
684
+ }
685
+ //#endregion
686
+ export { AgentChatPage as t };