dexterm-cli 0.0.0-stage → 0.1.2

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 (377) hide show
  1. package/LICENSE +661 -0
  2. package/dist/packages/agents/src/audit.js +122 -0
  3. package/dist/packages/agents/src/bus.js +394 -0
  4. package/dist/packages/agents/src/executor.js +202 -0
  5. package/dist/packages/agents/src/gate.js +179 -0
  6. package/dist/packages/agents/src/identity.js +218 -0
  7. package/dist/packages/agents/src/index.js +15 -0
  8. package/dist/packages/agents/src/proposals.js +153 -0
  9. package/dist/packages/agents/src/schema.js +87 -0
  10. package/dist/packages/agents/src/sdk.js +140 -0
  11. package/dist/packages/agents/src/tiers.js +119 -0
  12. package/dist/packages/agents/src/tools.js +72 -0
  13. package/dist/packages/agents/src/ws.js +158 -0
  14. package/dist/packages/cli/assets/claude/analyst-system.md +76 -0
  15. package/dist/packages/cli/assets/claude/plugin/.claude-plugin/plugin.json +5 -0
  16. package/dist/packages/cli/assets/claude/plugin/skills/REGISTRY.json +16 -0
  17. package/dist/packages/cli/assets/claude/plugin/skills/larp-check/SKILL.md +75 -0
  18. package/dist/packages/cli/assets/claude/plugin/skills/rug-check/SKILL.md +74 -0
  19. package/dist/packages/cli/assets/claude/plugin/skills/token-dossier/SKILL.md +63 -0
  20. package/dist/packages/cli/assets/claude/plugin/skills/trench-scan/SKILL.md +44 -0
  21. package/dist/packages/cli/assets/claude/schemas/larp.schema.json +117 -0
  22. package/dist/packages/cli/assets/claude/schemas/trench-scan.schema.json +71 -0
  23. package/dist/packages/cli/assets/claude/schemas/verdict.schema.json +115 -0
  24. package/dist/packages/cli/bin/dexterm.mjs +11 -0
  25. package/dist/packages/cli/src/agent-cmd.js +336 -0
  26. package/dist/packages/cli/src/agent-roster.js +26 -0
  27. package/dist/packages/cli/src/alerts/adapters/desktop.js +40 -0
  28. package/dist/packages/cli/src/alerts/adapters/discord.js +36 -0
  29. package/dist/packages/cli/src/alerts/adapters/telegram.js +43 -0
  30. package/dist/packages/cli/src/alerts/adapters/toast.js +16 -0
  31. package/dist/packages/cli/src/alerts/creds.js +83 -0
  32. package/dist/packages/cli/src/alerts/format.js +41 -0
  33. package/dist/packages/cli/src/alerts/index.js +10 -0
  34. package/dist/packages/cli/src/alerts/notifier.js +53 -0
  35. package/dist/packages/cli/src/alerts/route.js +19 -0
  36. package/dist/packages/cli/src/alerts/types.js +1 -0
  37. package/dist/packages/cli/src/alerts-cmd.js +212 -0
  38. package/dist/packages/cli/src/analyst/backend.js +526 -0
  39. package/dist/packages/cli/src/analyst/results.js +38 -0
  40. package/dist/packages/cli/src/analyst/session.js +319 -0
  41. package/dist/packages/cli/src/audit.js +51 -0
  42. package/dist/packages/cli/src/backtest-cmd.js +208 -0
  43. package/dist/packages/cli/src/boot-state.js +62 -0
  44. package/dist/packages/cli/src/coin-target.js +2 -0
  45. package/dist/packages/cli/src/custom.js +261 -0
  46. package/dist/packages/cli/src/display.js +191 -0
  47. package/dist/packages/cli/src/doctor.js +375 -0
  48. package/dist/packages/cli/src/export.js +235 -0
  49. package/dist/packages/cli/src/feed.js +634 -0
  50. package/dist/packages/cli/src/fixtures.js +275 -0
  51. package/dist/packages/cli/src/follow-cmd.js +221 -0
  52. package/dist/packages/cli/src/images-config.js +59 -0
  53. package/dist/packages/cli/src/index.js +31 -0
  54. package/dist/packages/cli/src/kb-skill-cmd.js +240 -0
  55. package/dist/packages/cli/src/larp-record.js +21 -0
  56. package/dist/packages/cli/src/live/copy.js +80 -0
  57. package/dist/packages/cli/src/live/flow.js +233 -0
  58. package/dist/packages/cli/src/live/index.js +511 -0
  59. package/dist/packages/cli/src/live/intel.js +227 -0
  60. package/dist/packages/cli/src/live/newpairs.js +334 -0
  61. package/dist/packages/cli/src/live/screens/newpairs-live.js +219 -0
  62. package/dist/packages/cli/src/live/screens/token-live.js +459 -0
  63. package/dist/packages/cli/src/live/screens/watchlist-live.js +149 -0
  64. package/dist/packages/cli/src/live/token.js +585 -0
  65. package/dist/packages/cli/src/live/trade.js +929 -0
  66. package/dist/packages/cli/src/live/watchlist.js +178 -0
  67. package/dist/packages/cli/src/main.js +5785 -0
  68. package/dist/packages/cli/src/mcp-cmd.js +326 -0
  69. package/dist/packages/cli/src/narrative-cmd.js +76 -0
  70. package/dist/packages/cli/src/pack-cmd.js +323 -0
  71. package/dist/packages/cli/src/plan-cmd.js +278 -0
  72. package/dist/packages/cli/src/popup.js +810 -0
  73. package/dist/packages/cli/src/rules-cmd.js +131 -0
  74. package/dist/packages/cli/src/rules.js +358 -0
  75. package/dist/packages/cli/src/scan/command.js +57 -0
  76. package/dist/packages/cli/src/scan/engine.js +419 -0
  77. package/dist/packages/cli/src/scan/observe.js +64 -0
  78. package/dist/packages/cli/src/scan/ui.js +98 -0
  79. package/dist/packages/cli/src/screener/filter.js +241 -0
  80. package/dist/packages/cli/src/screener/presets.js +80 -0
  81. package/dist/packages/cli/src/screener/rows.js +146 -0
  82. package/dist/packages/cli/src/screener/rug.js +50 -0
  83. package/dist/packages/cli/src/screener/sort.js +52 -0
  84. package/dist/packages/cli/src/screener/view.js +183 -0
  85. package/dist/packages/cli/src/screens/analyst-session.js +343 -0
  86. package/dist/packages/cli/src/screens/analyst.js +326 -0
  87. package/dist/packages/cli/src/screens/boot.js +74 -0
  88. package/dist/packages/cli/src/screens/bubbles.js +255 -0
  89. package/dist/packages/cli/src/screens/coin.js +33 -0
  90. package/dist/packages/cli/src/screens/follows.js +201 -0
  91. package/dist/packages/cli/src/screens/kol.js +90 -0
  92. package/dist/packages/cli/src/screens/narrative.js +90 -0
  93. package/dist/packages/cli/src/screens/newpairs.js +150 -0
  94. package/dist/packages/cli/src/screens/overlay.js +257 -0
  95. package/dist/packages/cli/src/screens/plans.js +126 -0
  96. package/dist/packages/cli/src/screens/positions.js +176 -0
  97. package/dist/packages/cli/src/screens/rules.js +170 -0
  98. package/dist/packages/cli/src/screens/screener.js +459 -0
  99. package/dist/packages/cli/src/screens/social-panel.js +107 -0
  100. package/dist/packages/cli/src/screens/ticket.js +342 -0
  101. package/dist/packages/cli/src/screens/token.js +312 -0
  102. package/dist/packages/cli/src/screens/trending.js +181 -0
  103. package/dist/packages/cli/src/screens/watchlist.js +104 -0
  104. package/dist/packages/cli/src/skill-eval-build.js +109 -0
  105. package/dist/packages/cli/src/social/demo.js +96 -0
  106. package/dist/packages/cli/src/social/view.js +250 -0
  107. package/dist/packages/cli/src/state.js +463 -0
  108. package/dist/packages/cli/src/theme-cmd.js +126 -0
  109. package/dist/packages/cli/src/trade.js +319 -0
  110. package/dist/packages/cli/src/update.js +294 -0
  111. package/dist/packages/cli/src/version.js +3 -0
  112. package/dist/packages/cli/src/voice-cmd.js +119 -0
  113. package/dist/packages/cli/src/voice-hud.js +42 -0
  114. package/dist/packages/cli/src/wallet-cmd.js +440 -0
  115. package/dist/packages/cli/src/wallet-command.js +31 -0
  116. package/dist/packages/cli/src/watch-cmd.js +190 -0
  117. package/dist/packages/cli/src/widgets.js +208 -0
  118. package/dist/packages/cli/src/workspace-cmd.js +68 -0
  119. package/dist/packages/cli/src/x-cmd.js +154 -0
  120. package/dist/packages/custom/src/config.js +213 -0
  121. package/dist/packages/custom/src/index.js +10 -0
  122. package/dist/packages/custom/src/keymap.js +107 -0
  123. package/dist/packages/custom/src/layout.js +235 -0
  124. package/dist/packages/custom/src/packs.js +633 -0
  125. package/dist/packages/custom/src/rules.js +704 -0
  126. package/dist/packages/custom/src/schema.js +538 -0
  127. package/dist/packages/custom/src/themes.js +176 -0
  128. package/dist/packages/custom/src/widget-html.js +222 -0
  129. package/dist/packages/custom/src/workspace.js +141 -0
  130. package/dist/packages/data/src/analyst-actions.js +133 -0
  131. package/dist/packages/data/src/budget.js +88 -0
  132. package/dist/packages/data/src/cache.js +142 -0
  133. package/dist/packages/data/src/candles.js +168 -0
  134. package/dist/packages/data/src/clock.js +64 -0
  135. package/dist/packages/data/src/coin-target.js +82 -0
  136. package/dist/packages/data/src/credits.js +137 -0
  137. package/dist/packages/data/src/detail.js +97 -0
  138. package/dist/packages/data/src/fast-lane.js +321 -0
  139. package/dist/packages/data/src/fixtures.js +135 -0
  140. package/dist/packages/data/src/health.js +245 -0
  141. package/dist/packages/data/src/http.js +277 -0
  142. package/dist/packages/data/src/images/cache.js +141 -0
  143. package/dist/packages/data/src/images/decode-worker.js +28 -0
  144. package/dist/packages/data/src/images/decode.js +81 -0
  145. package/dist/packages/data/src/images/fetch.js +162 -0
  146. package/dist/packages/data/src/images/gif.js +214 -0
  147. package/dist/packages/data/src/images/index.js +10 -0
  148. package/dist/packages/data/src/images/jpeg.js +544 -0
  149. package/dist/packages/data/src/images/png.js +310 -0
  150. package/dist/packages/data/src/images/service.js +334 -0
  151. package/dist/packages/data/src/images/types.js +27 -0
  152. package/dist/packages/data/src/index.js +211 -0
  153. package/dist/packages/data/src/intel/helius-history.js +70 -0
  154. package/dist/packages/data/src/intel/holder-class.js +125 -0
  155. package/dist/packages/data/src/intel/rules.js +421 -0
  156. package/dist/packages/data/src/intel/scan.js +170 -0
  157. package/dist/packages/data/src/larp/evidence.js +288 -0
  158. package/dist/packages/data/src/larp/link-baseline.js +196 -0
  159. package/dist/packages/data/src/larp/links.js +137 -0
  160. package/dist/packages/data/src/larp/robots.js +90 -0
  161. package/dist/packages/data/src/larp/safe-fetch.js +389 -0
  162. package/dist/packages/data/src/limiter.js +341 -0
  163. package/dist/packages/data/src/model.js +12 -0
  164. package/dist/packages/data/src/paper.js +331 -0
  165. package/dist/packages/data/src/rpc-config.js +126 -0
  166. package/dist/packages/data/src/rpc-pool.js +166 -0
  167. package/dist/packages/data/src/social/chain.js +83 -0
  168. package/dist/packages/data/src/social/dedupe.js +205 -0
  169. package/dist/packages/data/src/social/feed.js +462 -0
  170. package/dist/packages/data/src/social/firewall.js +110 -0
  171. package/dist/packages/data/src/social/index.js +11 -0
  172. package/dist/packages/data/src/social/kol.js +269 -0
  173. package/dist/packages/data/src/social/model.js +11 -0
  174. package/dist/packages/data/src/social/rank.js +184 -0
  175. package/dist/packages/data/src/social/rss.js +113 -0
  176. package/dist/packages/data/src/social/summary.js +104 -0
  177. package/dist/packages/data/src/social/venues.js +186 -0
  178. package/dist/packages/data/src/sources/dexscreener.js +184 -0
  179. package/dist/packages/data/src/sources/geckoterminal.js +133 -0
  180. package/dist/packages/data/src/sources/goplus.js +161 -0
  181. package/dist/packages/data/src/sources/jupiter-swap.js +236 -0
  182. package/dist/packages/data/src/sources/jupiter.js +198 -0
  183. package/dist/packages/data/src/sources/pda.js +113 -0
  184. package/dist/packages/data/src/sources/pump-curve.js +58 -0
  185. package/dist/packages/data/src/sources/pumpportal.js +252 -0
  186. package/dist/packages/data/src/sources/rugcheck.js +71 -0
  187. package/dist/packages/data/src/sources/solana-rpc.js +299 -0
  188. package/dist/packages/data/src/sources/solana-ws.js +287 -0
  189. package/dist/packages/data/src/store.js +289 -0
  190. package/dist/packages/data/src/trade/bridge.js +464 -0
  191. package/dist/packages/data/src/trade/caps.js +323 -0
  192. package/dist/packages/data/src/trade/copy/auto.js +385 -0
  193. package/dist/packages/data/src/trade/copy/follows.js +103 -0
  194. package/dist/packages/data/src/trade/copy/index.js +9 -0
  195. package/dist/packages/data/src/trade/copy/mirror.js +91 -0
  196. package/dist/packages/data/src/trade/copy/stats.js +120 -0
  197. package/dist/packages/data/src/trade/copy/tracker.js +158 -0
  198. package/dist/packages/data/src/trade/copy/trades.js +87 -0
  199. package/dist/packages/data/src/trade/copy/types.js +6 -0
  200. package/dist/packages/data/src/trade/executor.js +933 -0
  201. package/dist/packages/data/src/trade/kill-switch.js +47 -0
  202. package/dist/packages/data/src/trade/link-store.js +52 -0
  203. package/dist/packages/data/src/trade/plans/confirm.js +157 -0
  204. package/dist/packages/data/src/trade/plans/engine.js +784 -0
  205. package/dist/packages/data/src/trade/plans/executor-live.js +220 -0
  206. package/dist/packages/data/src/trade/plans/executor-paper.js +44 -0
  207. package/dist/packages/data/src/trade/plans/executor.js +11 -0
  208. package/dist/packages/data/src/trade/plans/index.js +12 -0
  209. package/dist/packages/data/src/trade/plans/journal.js +77 -0
  210. package/dist/packages/data/src/trade/plans/mandate.js +129 -0
  211. package/dist/packages/data/src/trade/plans/plan.js +179 -0
  212. package/dist/packages/data/src/trade/plans/service.js +168 -0
  213. package/dist/packages/data/src/trade/plans/types.js +6 -0
  214. package/dist/packages/data/src/trade/rpc-exec.js +229 -0
  215. package/dist/packages/data/src/trade/signer/client.js +197 -0
  216. package/dist/packages/data/src/trade/signer/fast-wallet.js +154 -0
  217. package/dist/packages/data/src/trade/signer/host.js +97 -0
  218. package/dist/packages/data/src/trade/signer/main.js +121 -0
  219. package/dist/packages/data/src/trade/signer/probe-builder.js +85 -0
  220. package/dist/packages/data/src/trade/signer/protocol.js +92 -0
  221. package/dist/packages/data/src/trade/signer/service.js +400 -0
  222. package/dist/packages/data/src/trade/signer/sol-usd-feed.js +98 -0
  223. package/dist/packages/data/src/trade/sol-usd.js +86 -0
  224. package/dist/packages/data/src/trade/swap-build.js +108 -0
  225. package/dist/packages/data/src/trade/token-delta.js +201 -0
  226. package/dist/packages/data/src/trade/tx-decode.js +632 -0
  227. package/dist/packages/data/src/util.js +24 -0
  228. package/dist/packages/data/src/watchlist.js +176 -0
  229. package/dist/packages/data/src/x/api.js +256 -0
  230. package/dist/packages/data/src/x/budget.js +66 -0
  231. package/dist/packages/data/src/x/config.js +49 -0
  232. package/dist/packages/data/src/x/index.js +10 -0
  233. package/dist/packages/data/src/x/mock-server.js +217 -0
  234. package/dist/packages/data/src/x/oauth.js +242 -0
  235. package/dist/packages/data/src/x/pkce.js +21 -0
  236. package/dist/packages/data/src/x/source.js +285 -0
  237. package/dist/packages/data/src/x/token-store.js +134 -0
  238. package/dist/packages/data/src/x/transport.js +71 -0
  239. package/dist/packages/data/vendor/solana-web3/LICENSE +20 -0
  240. package/dist/packages/data/vendor/solana-web3/NOTICE.md +13 -0
  241. package/dist/packages/data/vendor/solana-web3/index.iife.min.js +20 -0
  242. package/dist/packages/mcp/assets/cases.json +1194 -0
  243. package/dist/packages/mcp/assets/kb/entries/cabal-and-coordinated-launches.md +28 -0
  244. package/dist/packages/mcp/assets/kb/entries/common-rug-patterns.md +40 -0
  245. package/dist/packages/mcp/assets/kb/entries/dbc-mechanics.md +30 -0
  246. package/dist/packages/mcp/assets/kb/entries/dev-wallet-behaviour.md +33 -0
  247. package/dist/packages/mcp/assets/kb/entries/glossary.md +35 -0
  248. package/dist/packages/mcp/assets/kb/entries/holder-concentration.md +30 -0
  249. package/dist/packages/mcp/assets/kb/entries/jito-bundles.md +29 -0
  250. package/dist/packages/mcp/assets/kb/entries/launchlab-curve.md +31 -0
  251. package/dist/packages/mcp/assets/kb/entries/lp-burn-vs-lock.md +31 -0
  252. package/dist/packages/mcp/assets/kb/entries/metadata-and-copycats.md +29 -0
  253. package/dist/packages/mcp/assets/kb/entries/mint-freeze-authority.md +31 -0
  254. package/dist/packages/mcp/assets/kb/entries/narrative-lifecycle.md +32 -0
  255. package/dist/packages/mcp/assets/kb/entries/pump-bonding-curve.md +33 -0
  256. package/dist/packages/mcp/assets/kb/entries/pumpswap-migration.md +29 -0
  257. package/dist/packages/mcp/assets/kb/entries/sniping-and-snipers.md +29 -0
  258. package/dist/packages/mcp/assets/kb/entries/token2022-extensions-risk.md +32 -0
  259. package/dist/packages/mcp/assets/kb/entries/wash-trading-fake-volume.md +33 -0
  260. package/dist/packages/mcp/assets/skills/rug-check.md +52 -0
  261. package/dist/packages/mcp/assets/skills/token-dossier.md +57 -0
  262. package/dist/packages/mcp/assets/skills/trench-scan.md +40 -0
  263. package/dist/packages/mcp/bin/dexterm-mcp.mjs +16 -0
  264. package/dist/packages/mcp/src/dossier.js +78 -0
  265. package/dist/packages/mcp/src/firewall.js +21 -0
  266. package/dist/packages/mcp/src/index.js +22 -0
  267. package/dist/packages/mcp/src/server.js +936 -0
  268. package/dist/packages/mcp/src/user-content.js +434 -0
  269. package/dist/packages/packs/src/backtest.js +183 -0
  270. package/dist/packages/packs/src/digest.js +95 -0
  271. package/dist/packages/packs/src/firewall.js +57 -0
  272. package/dist/packages/packs/src/index.js +20 -0
  273. package/dist/packages/packs/src/larp-eval.js +100 -0
  274. package/dist/packages/packs/src/narrative.js +309 -0
  275. package/dist/packages/packs/src/reason.js +135 -0
  276. package/dist/packages/packs/src/rug-model.js +137 -0
  277. package/dist/packages/packs/src/schema.js +54 -0
  278. package/dist/packages/packs/src/skill-backtest.js +300 -0
  279. package/dist/packages/packs/src/token-dossier.js +174 -0
  280. package/dist/packages/packs/src/verdicts.js +17 -0
  281. package/dist/packages/packs/src/wallet-dossier.js +105 -0
  282. package/dist/packages/popup/src/config.js +71 -0
  283. package/dist/packages/popup/src/dock.js +271 -0
  284. package/dist/packages/popup/src/host.js +210 -0
  285. package/dist/packages/popup/src/index.js +12 -0
  286. package/dist/packages/popup/src/loopback.js +53 -0
  287. package/dist/packages/popup/src/open.js +183 -0
  288. package/dist/packages/popup/src/pages/bubbles-lib.js +160 -0
  289. package/dist/packages/popup/src/pages/bubbles.css +23 -0
  290. package/dist/packages/popup/src/pages/bubbles.html +36 -0
  291. package/dist/packages/popup/src/pages/bubbles.js +214 -0
  292. package/dist/packages/popup/src/pages/chart-lib.js +262 -0
  293. package/dist/packages/popup/src/pages/chart.css +50 -0
  294. package/dist/packages/popup/src/pages/chart.html +56 -0
  295. package/dist/packages/popup/src/pages/chart.js +554 -0
  296. package/dist/packages/popup/src/pages/common.css +34 -0
  297. package/dist/packages/popup/src/pages/common.js +187 -0
  298. package/dist/packages/popup/src/pages/feeds.html +20 -0
  299. package/dist/packages/popup/src/pages/feeds.js +77 -0
  300. package/dist/packages/popup/src/pages/narrative.html +20 -0
  301. package/dist/packages/popup/src/pages/narrative.js +61 -0
  302. package/dist/packages/popup/src/pages/plans.css +30 -0
  303. package/dist/packages/popup/src/pages/plans.html +26 -0
  304. package/dist/packages/popup/src/pages/plans.js +82 -0
  305. package/dist/packages/popup/src/pages/roster.css +41 -0
  306. package/dist/packages/popup/src/pages/roster.html +25 -0
  307. package/dist/packages/popup/src/pages/roster.js +75 -0
  308. package/dist/packages/popup/src/pages/token.html +20 -0
  309. package/dist/packages/popup/src/pages/token.js +112 -0
  310. package/dist/packages/popup/src/pages/widget-sdk.js +224 -0
  311. package/dist/packages/popup/src/pages/widget.css +5 -0
  312. package/dist/packages/popup/src/pages/widget.html +21 -0
  313. package/dist/packages/popup/src/pages/widget.js +85 -0
  314. package/dist/packages/popup/src/protocol.js +31 -0
  315. package/dist/packages/popup/src/selftest.js +156 -0
  316. package/dist/packages/popup/src/server.js +582 -0
  317. package/dist/packages/popup/src/sinkproxy.js +167 -0
  318. package/dist/packages/popup/src/widget-html.js +231 -0
  319. package/dist/packages/popup/vendor/lightweight-charts/LICENSE +201 -0
  320. package/dist/packages/popup/vendor/lightweight-charts/NOTICE +2 -0
  321. package/dist/packages/popup/vendor/lightweight-charts/README.md +30 -0
  322. package/dist/packages/popup/vendor/lightweight-charts/VERSION +1 -0
  323. package/dist/packages/popup/vendor/lightweight-charts/lightweight-charts.standalone.production.js +7 -0
  324. package/dist/packages/recorder/bin/dexterm-recorder.mjs +11 -0
  325. package/dist/packages/recorder/src/cli.js +113 -0
  326. package/dist/packages/recorder/src/export.js +71 -0
  327. package/dist/packages/recorder/src/index.js +20 -0
  328. package/dist/packages/recorder/src/labels.js +151 -0
  329. package/dist/packages/recorder/src/open.js +29 -0
  330. package/dist/packages/recorder/src/recorder.js +553 -0
  331. package/dist/packages/recorder/src/schedule.js +43 -0
  332. package/dist/packages/recorder/src/schema.js +135 -0
  333. package/dist/packages/recorder/src/snapshot.js +191 -0
  334. package/dist/packages/recorder/src/sweep.js +52 -0
  335. package/dist/packages/recorder/src/verdicts.js +52 -0
  336. package/dist/packages/tui/src/bubbles.js +415 -0
  337. package/dist/packages/tui/src/canvas.js +370 -0
  338. package/dist/packages/tui/src/chrome.js +85 -0
  339. package/dist/packages/tui/src/color.js +133 -0
  340. package/dist/packages/tui/src/flush.js +62 -0
  341. package/dist/packages/tui/src/fmt.js +188 -0
  342. package/dist/packages/tui/src/fx-trade.js +278 -0
  343. package/dist/packages/tui/src/fx.js +527 -0
  344. package/dist/packages/tui/src/images/blocks.js +141 -0
  345. package/dist/packages/tui/src/images/coin.js +22 -0
  346. package/dist/packages/tui/src/images/detect.js +140 -0
  347. package/dist/packages/tui/src/images/index.js +7 -0
  348. package/dist/packages/tui/src/images/layer.js +146 -0
  349. package/dist/packages/tui/src/images/pixels.js +157 -0
  350. package/dist/packages/tui/src/images/protocols.js +87 -0
  351. package/dist/packages/tui/src/index.js +18 -0
  352. package/dist/packages/tui/src/keymap.js +357 -0
  353. package/dist/packages/tui/src/layout.js +11 -0
  354. package/dist/packages/tui/src/raster-font.js +195 -0
  355. package/dist/packages/tui/src/raster.js +213 -0
  356. package/dist/packages/tui/src/sound.js +177 -0
  357. package/dist/packages/tui/src/theme.js +182 -0
  358. package/dist/packages/tui/src/widgets.js +598 -0
  359. package/dist/packages/voice/src/controller.js +407 -0
  360. package/dist/packages/voice/src/doctor.js +131 -0
  361. package/dist/packages/voice/src/download.js +184 -0
  362. package/dist/packages/voice/src/engines.js +84 -0
  363. package/dist/packages/voice/src/index.js +20 -0
  364. package/dist/packages/voice/src/router.js +502 -0
  365. package/dist/packages/voice/src/stt/apple-helper.swift.js +103 -0
  366. package/dist/packages/voice/src/stt/apple.js +179 -0
  367. package/dist/packages/voice/src/stt/fake.js +34 -0
  368. package/dist/packages/voice/src/stt/whisper.js +112 -0
  369. package/dist/packages/voice/src/summary.js +44 -0
  370. package/dist/packages/voice/src/tts/espeak.js +131 -0
  371. package/dist/packages/voice/src/tts/fake.js +30 -0
  372. package/dist/packages/voice/src/tts/piper.js +206 -0
  373. package/dist/packages/voice/src/tts/say.js +132 -0
  374. package/dist/packages/voice/src/tts/voices.js +206 -0
  375. package/dist/packages/voice/src/types.js +3 -0
  376. package/package.json +38 -4
  377. package/README.md +0 -3
@@ -0,0 +1,219 @@
1
+ // dexterm — live NEW PAIRS screen (task-1298): the layout of screens/newpairs.ts over NewPairRows.
2
+ // The table caption names the push source and its rate, the sub-tabs count real rows, forensics
3
+ // columns the keyless sources cannot answer dash out and the spotlight says what is missing and why.
4
+ import { Canvas, table, sparkline, sparkArea, launchpadBadge, bar, badge, statGrid, ratioBar, heatPct, fmtUsd, fmtPrice, fmtAge, fmtNum, fmtPct, shortAddr, header, footer, breakpoint, mix, } from '../../../../tui/src/index.js';
5
+ import { headerModel } from "../../state.js";
6
+ import { PUMP_GRADUATION_USD } from "../newpairs.js";
7
+ import { drawCoin, imagesOn } from "../../screens/coin.js";
8
+ import { COIN_ICON_W } from '../../../../tui/src/index.js';
9
+ import { launchIntelCells } from "../intel.js";
10
+ import { priceCell, priceModeOf, fallbackCount, fallbackCaption, FALLBACK_MARK, MCAP_FALLBACK_NOTE } from "../../display.js";
11
+ export function renderNewPairsLive(c, state, live) {
12
+ const t = c.theme;
13
+ const bp = breakpoint(c.w);
14
+ header(c, headerModel(state));
15
+ const now = state.now.getTime();
16
+ const top = 2, bottom = c.h - 1;
17
+ const sideW = bp === 'wide' ? 46 : 0;
18
+ const tableW = c.w - sideW - (sideW ? 1 : 0);
19
+ const rows = live.list();
20
+ const sel = Math.min(Math.max(0, state.selected || 0), Math.max(0, rows.length - 1));
21
+ const st = live.status();
22
+ const dash = (cv, x, y, w, bg, align = 'right') => {
23
+ if (align === 'right')
24
+ cv.textR(x, y, w, '—', { fg: t.dim, bg });
25
+ else
26
+ cv.text(x, y, '—', { fg: t.dim, bg });
27
+ };
28
+ const intel = state.live?.intel;
29
+ const intelCell = (cv, x, y, w, cell, bg) => {
30
+ cv.textR(x, y, w, cell.short, { fg: cell.level === 'bad' ? t.down : cell.level === 'warn' ? t.warn : cell.level === 'ok' ? t.muted : t.dim, bg });
31
+ };
32
+ // sub-tabs (real counts)
33
+ const fy = top;
34
+ let x = 1;
35
+ const graduating = rows.filter((r) => r.bonding !== null && r.bonding >= 80 && !r.migrated).length;
36
+ const migrated = rows.filter((r) => r.migrated).length;
37
+ const tabs = [['New', rows.length], ['Graduating', graduating], ['Migrated', migrated]];
38
+ for (const [lab, n] of tabs) {
39
+ const active = lab === 'New';
40
+ x = c.text(x, fy, ` ${lab} `, active ? { fg: t.text, bg: t.tabActiveBg, b: true } : { fg: t.muted, bg: t.bg });
41
+ x = c.text(x, fy, `${n} `, { fg: active ? t.accent : t.dim, bg: active ? t.tabActiveBg : t.bg }) + 1;
42
+ }
43
+ const lat = st.latency.p50 !== null ? `event→row p50 ${Math.round(st.latency.p50)}ms` : '';
44
+ const rlat = st.renderLatency.p50 !== null ? ` · →screen p50 ${Math.round(st.renderLatency.p50)}ms` : '';
45
+ const note = state.live?.notice ?? '';
46
+ c.text(x + 2, fy, note || `${lat}${rlat}` || 'waiting for the first create…', { fg: note ? t.warn : t.dim, bg: t.bg, i: true }, tableW - x - 4);
47
+ const mode = priceModeOf(state); // task-1366
48
+ const fb = mode === 'mcap' ? fallbackCaption(fallbackCount(rows, (r) => r)) : null;
49
+ const box = c.box(0, top + 1, tableW, bottom - top - 1, { title: 'NEW PAIRS', caption: fb ? `${st.caption} · ${fb}` : st.caption, captionFg: st.headerStatus ? t.warn : undefined });
50
+ const cols = [
51
+ { key: 'age', label: 'AGE', w: 5, align: 'right', prio: 0, render: (cv, x, y, w, r, bg) => { const m = Math.max(0, (now - r.createdAt) / 60000); cv.textR(x, y, w, fmtAge(m), { fg: m < 2 ? t.accent : t.muted, bg, b: m < 2 }); } },
52
+ // task-1326: the coin image once a poll has seen the mint (a fresh create has none yet → the ticker placeholder).
53
+ ...(imagesOn(state) && bp !== 'compact' ? [{ key: 'img', label: '', w: COIN_ICON_W, prio: 2, render: (cv, x, y, w, r, bg) => { drawCoin(cv, state, { x, y, w, h: 1, url: r.image, symbol: r.symbol, bg, prio: 1, mode: 'quad' }); } }] : []),
54
+ { key: 'token', label: 'TOKEN', w: bp === 'compact' ? 12 : 20, prio: 0, flex: bp !== 'compact', render: (cv, x, y, w, r, bg) => {
55
+ const cx = cv.text(x, y, r.symbol, { fg: t.text, bg, b: true }, Math.min(10, w));
56
+ if (w > 14)
57
+ cv.text(cx + 1, y, r.name, { fg: t.muted, bg }, w - (cx - x) - 1);
58
+ } },
59
+ { key: 'lp', label: 'LAUNCH', w: 6, prio: 1, render: (cv, x, y, w, r, bg) => { if (r.launchpad === 'unknown')
60
+ dash(cv, x, y, w, bg, 'left');
61
+ else
62
+ launchpadBadge(cv, x, y, r.launchpad, { on: bg }); } },
63
+ { key: 'bond', label: 'BONDING', w: 14, prio: 1, render: (cv, x, y, w, r, bg) => {
64
+ if (r.migrated) {
65
+ cv.text(x, y, 'migrated', { fg: t.dim, bg });
66
+ return;
67
+ }
68
+ if (r.bonding === null) {
69
+ dash(cv, x, y, w, bg, 'left');
70
+ return;
71
+ }
72
+ bar(cv, x, y, w - 5, r.bonding, { bg, color: r.bonding > 80 ? t.warn : t.pump });
73
+ cv.textR(x + w - 4, y, 4, `${Math.round(r.bonding)}%`, { fg: r.bonding > 80 ? t.warn : t.muted, bg });
74
+ } },
75
+ { key: 'mcap', label: 'MCAP', w: 8, align: 'right', prio: 0, render: (cv, x, y, w, r, bg) => {
76
+ // task-1366: in mcap mode a launch without a supply shows its price here, marked ᵖ in amber
77
+ if (r.mcap === null && mode === 'mcap' && r.price !== null) {
78
+ cv.textR(x, y, w, fmtPrice(r.price) + FALLBACK_MARK, { fg: t.warn, bg });
79
+ return;
80
+ }
81
+ if (r.mcap === null)
82
+ dash(cv, x, y, w, bg);
83
+ else
84
+ cv.textR(x, y, w, fmtUsd(r.mcap, { digits: 1 }), { fg: t.text, bg });
85
+ } },
86
+ { key: 'liq', label: 'LIQ', w: 7, align: 'right', prio: 2, render: (cv, x, y, w, r, bg) => { if (r.liq === null)
87
+ dash(cv, x, y, w, bg);
88
+ else
89
+ cv.textR(x, y, w, fmtUsd(r.liq, { digits: 1 }), { fg: t.text, bg }); } },
90
+ { key: 'm5', label: '5M', w: 7, align: 'right', prio: 0, render: (cv, x, y, w, r, bg) => heatPct(cv, x, y, w, r.chg.m5, bg) },
91
+ { key: 'h1', label: '1H', w: 7, align: 'right', prio: 3, render: (cv, x, y, w, r, bg) => heatPct(cv, x, y, w, r.chg.h1, bg) },
92
+ { key: 'holders', label: 'HLD', w: 5, align: 'right', prio: 2, render: (cv, x, y, w, r, bg) => { if (r.holders === null)
93
+ dash(cv, x, y, w, bg);
94
+ else
95
+ cv.textR(x, y, w, fmtNum(r.holders), { fg: t.text, bg }); } },
96
+ { key: 'bs', label: 'B/S 5M', w: 8, prio: 4, render: (cv, x, y, w, r, bg) => { if (r.buys === null || r.sells === null)
97
+ dash(cv, x, y, w, bg, 'left');
98
+ else
99
+ ratioBar(cv, x, y, w, Math.max(0, r.buys), Math.max(0, r.sells), { bg }); } },
100
+ { key: 'dev', label: 'DEV', w: 5, align: 'right', prio: 3, render: (cv, x, y, w, r, bg) => { if (r.dev === null)
101
+ dash(cv, x, y, w, bg);
102
+ else
103
+ cv.textR(x, y, w, `${r.dev.toFixed(1)}%`, { fg: r.dev > 5 ? t.down : t.muted, bg }); } },
104
+ // task-1359: SNIPE / BUNDLE come from the wallet-intel scan of that mint (the selected row is scanned after a
105
+ // short dwell when a free Helius key is set); an unscanned row keeps the dash, a scan in flight shows `…`.
106
+ { key: 'snipe', label: 'SNIPE', w: 5, align: 'right', prio: 4, render: (cv, x, y, w, r, bg) => intelCell(cv, x, y, w, launchIntelCells(intel, r.mint).snipers, bg) },
107
+ { key: 'bund', label: 'BUNDLE', w: 6, align: 'right', prio: 4, render: (cv, x, y, w, r, bg) => intelCell(cv, x, y, w, launchIntelCells(intel, r.mint).bundle, bg) },
108
+ { key: 'spark', label: 'TREND', w: 12, prio: 2, render: (cv, x, y, w, r, bg) => { if (r.spark)
109
+ sparkline(cv, x, y, w, r.spark, { bg });
110
+ else
111
+ dash(cv, x, y, w, bg, 'left'); } },
112
+ { key: 'flags', label: 'RISK', w: 13, prio: 5, render: (cv, x, y, w, r, bg) => {
113
+ let cx = x;
114
+ for (const f of r.flags.slice(0, 2)) {
115
+ if (cx + f.length + 2 > x + w)
116
+ break;
117
+ cx = badge(cv, cx, y, f, f === 'MINT' || f === 'FREEZE' ? t.down : t.warn, { on: bg }) + 1;
118
+ }
119
+ if (!r.flags.length) {
120
+ if (r.mintAuth === null && r.freezeAuth === null)
121
+ cv.text(x, y, '—', { fg: t.dim, bg });
122
+ else
123
+ cv.text(x, y, '✓ clean', { fg: mix(bg, t.up, 0.7), bg });
124
+ }
125
+ } },
126
+ ];
127
+ if (rows.length)
128
+ table(c, box.x + 1, box.y, box.w - 2, box.h, { columns: cols, rows, selected: sel, scroll: 0, bg: box.bg });
129
+ else {
130
+ const s = st.stream;
131
+ const msg = st.mode === 'off' ? 'push feed off · r to poll jup recent' : s?.state === 'open' ? `connected to pumpportal · waiting for the first create (≈15/min measured)` : `pumpportal ${s?.state ?? 'connecting'}${s?.lastError ? ` · ${s.lastError}` : ''} · polling jup recent`;
132
+ c.textC(box.x, box.y + Math.min(4, Math.floor(box.h / 2)), box.w, msg, { fg: t.muted, bg: box.bg, i: true });
133
+ }
134
+ if (sideW && rows[sel])
135
+ pairSpotlight(c, c.w - sideW, top, sideW, bottom - top, rows[sel], now, state);
136
+ const watched = rows[sel] && state.live?.watch?.has(rows[sel].mint) ? 'unwatch' : 'watch';
137
+ footer(c, [['j/k', 'move'], ['⏎', 'open'], ['p', 'pause feed'], ['w', watched], ['b', 'alert'], ['r', 'refresh'], ['q', 'quit']], state.theme.name);
138
+ }
139
+ function pairSpotlight(c, x, y, w, h, r, now, state) {
140
+ const t = c.theme;
141
+ const ageMin = Math.max(0, (now - r.createdAt) / 60000);
142
+ const box = c.box(x, y, w, h, { title: `$${r.symbol}`, caption: `${fmtAge(ageMin)} old · ${shortAddr(r.mint, 4)}`, focus: true });
143
+ const bg = box.bg;
144
+ let cy = box.y;
145
+ c.text(box.x + 1, cy, r.name, { fg: t.muted, bg }, box.w - 10);
146
+ if (r.launchpad !== 'unknown')
147
+ launchpadBadge(c, box.x + box.w - 8, cy, r.launchpad, { on: bg });
148
+ cy += 1;
149
+ // task-1366: the headline follows the price mode (mcap, then the price beside it; a price + note without a supply)
150
+ const head = priceCell(priceModeOf(state), r.price, r.mcap);
151
+ let cx = c.text(box.x + 1, cy, head.text, { fg: head.text === '—' ? t.dim : head.fallback ? t.warn : t.text, bg, b: true });
152
+ if (head.kind === 'mcap' && r.price !== null)
153
+ cx = c.text(cx + 1, cy, `(${fmtPrice(r.price)})`, { fg: t.dim, bg });
154
+ c.text(cx + 1, cy, r.chg.h1 === null ? '' : fmtPct(r.chg.h1), { fg: (r.chg.h1 ?? 0) >= 0 ? t.up : t.down, bg });
155
+ if (head.fallback)
156
+ c.text(box.x + 1, cy + 1, MCAP_FALLBACK_NOTE, { fg: t.warn, bg, i: true }, box.w - 8);
157
+ // Fast lane (task-1312): honest feed badge — LIVE when this launch arrived via the PumpPortal push,
158
+ // POLL when it came from the Jupiter-recent poll (the fallback when the socket is down).
159
+ const pushed = r.latencyMs !== null;
160
+ badge(c, box.x + box.w - 6, cy, pushed ? 'LIVE' : 'POLL', pushed ? t.up : t.dim, { on: bg });
161
+ cy += 2;
162
+ if (r.migrated) {
163
+ c.text(box.x + 1, cy, 'MIGRATED', { fg: t.dim, bg });
164
+ c.textR(box.x + 1, cy, box.w - 2, 'bonding complete → PumpSwap', { fg: t.muted, bg });
165
+ cy += 2;
166
+ }
167
+ else if (r.bonding !== null) {
168
+ c.text(box.x + 1, cy, 'BONDING CURVE', { fg: t.dim, bg });
169
+ c.textR(box.x + 1, cy, box.w - 2, `${Math.round(r.bonding)}% → PumpSwap at ${fmtUsd(PUMP_GRADUATION_USD, { digits: 0 })}`, { fg: t.muted, bg });
170
+ cy += 1;
171
+ bar(c, box.x + 1, cy, box.w - 2, r.bonding, { bg, color: r.bonding > 80 ? t.warn : t.pump });
172
+ cy += 1;
173
+ c.text(box.x + 1, cy, 'est. from curve reserves at create (pumpportal)', { fg: t.dim, bg, i: true }, box.w - 2);
174
+ cy += 1;
175
+ }
176
+ if (r.spark)
177
+ sparkArea(c, box.x + 1, cy, box.w - 2, 3, r.spark, { bg });
178
+ else
179
+ c.text(box.x + 1, cy + 1, 'no price history yet', { fg: t.dim, bg, i: true });
180
+ cy += 4;
181
+ const d = (n, f) => (n === null ? '—' : f(n));
182
+ cy += statGrid(c, box.x + 1, cy, box.w - 2, [
183
+ { label: 'mcap', value: d(r.mcap, (n) => fmtUsd(n, { digits: 1 })), sub: r.marketCapSol !== null ? `${r.marketCapSol.toFixed(1)} SOL at create` : undefined },
184
+ { label: 'liquidity', value: d(r.liq, (n) => fmtUsd(n, { digits: 1 })) },
185
+ { label: 'holders', value: d(r.holders, fmtNum) },
186
+ { label: 'vol 24h', value: d(r.vol, (n) => fmtUsd(n, { digits: 1 })) },
187
+ ], { bg, cols: 2 });
188
+ cy += 1;
189
+ c.text(box.x + 1, cy, 'LAUNCH FORENSICS', { fg: t.dim, bg });
190
+ c.textR(box.x + 1, cy, box.w - 2, `via ${r.via.map((s) => (s === 'jupiter-tokens' ? 'jup' : s)).join(' · ') || '—'}`, { fg: t.dim, bg });
191
+ cy += 1;
192
+ const auth = r.mintAuth === null && r.freezeAuth === null ? null : !!(r.mintAuth || r.freezeAuth);
193
+ const cells = launchIntelCells(state.live?.intel, r.mint, 'scans after ~2 s on this row');
194
+ const rows = [
195
+ ['Dev wallet', r.dev === null ? (r.creator ? `creator ${shortAddr(r.creator, 4)} · share unknown` : '— (jup not yet indexed)') : `${r.dev.toFixed(1)}%${r.creator ? ` · ${shortAddr(r.creator, 4)}` : ''}`, r.dev === null ? 'na' : r.dev > 5 ? 'warn' : 'ok'],
196
+ ['Initial buy', r.initialBuySol === null ? '—' : `${r.initialBuySol.toFixed(2)} SOL by creator`, r.initialBuySol === null ? 'na' : r.initialBuySol > 2 ? 'warn' : 'ok'],
197
+ ['Bundled at launch', cells.bundle.text, cells.bundle.level],
198
+ ['Snipers (first 3 slots)', cells.snipers.text, cells.snipers.level],
199
+ ['Mint / freeze', auth === null ? '— (rugcheck/jup pending)' : auth ? 'ENABLED' : 'revoked', auth === null ? 'na' : auth ? 'bad' : 'ok'],
200
+ ['Socials', `${[r.socials.x && 'X', r.socials.tg && 'TG', r.socials.web && 'web'].filter(Boolean).join(' ') || (r.via.includes('jupiter-tokens') ? 'none' : '—')}`, r.socials.x || r.socials.tg || r.socials.web ? 'ok' : r.via.includes('jupiter-tokens') ? 'warn' : 'na'],
201
+ ];
202
+ for (const [label, val, lvl] of rows) {
203
+ if (cy >= box.y + box.h - 5)
204
+ break;
205
+ const color = lvl === 'ok' ? t.up : lvl === 'warn' ? t.warn : lvl === 'bad' ? t.down : t.dim;
206
+ c.text(box.x + 1, cy, lvl === 'ok' ? '●' : lvl === 'warn' ? '◐' : lvl === 'bad' ? '○' : '·', { fg: color, bg });
207
+ c.text(box.x + 3, cy, label, { fg: t.muted, bg });
208
+ cy += 1;
209
+ c.text(box.x + 3, cy, val, { fg: lvl === 'ok' ? t.text : lvl === 'na' ? t.dim : color, bg, i: lvl === 'na' }, box.w - 4);
210
+ cy += 1;
211
+ }
212
+ const ay = box.y + box.h - 3;
213
+ c.hline(box.x, ay - 1, box.w, { fg: t.border, bg });
214
+ c.text(box.x + 1, ay, '✦ claude', { fg: t.ai, bg, b: true });
215
+ c.text(box.x + 10, ay, '◌ demo data · not wired yet', { fg: t.warn, bg, i: true }, box.w - 11);
216
+ const lat = r.latencyMs === null ? 'polled (jup recent)' : `pushed · event→row ${Math.round(r.latencyMs)}ms${r.drawnAt !== null && r.receivedAt !== null ? ` · →screen ${Math.round(r.drawnAt - r.receivedAt)}ms` : ''}`;
217
+ c.text(box.x + 1, ay + 1, lat, { fg: t.dim, bg }, box.w - 2);
218
+ void state;
219
+ }