dexterm-cli 0.0.0-stage → 0.1.1

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 (349) 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 +379 -0
  4. package/dist/packages/agents/src/executor.js +177 -0
  5. package/dist/packages/agents/src/gate.js +176 -0
  6. package/dist/packages/agents/src/identity.js +179 -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 +114 -0
  12. package/dist/packages/agents/src/tools.js +69 -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 +67 -0
  18. package/dist/packages/cli/assets/claude/plugin/skills/rug-check/SKILL.md +64 -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 +303 -0
  26. package/dist/packages/cli/src/agent-roster.js +26 -0
  27. package/dist/packages/cli/src/analyst/backend.js +526 -0
  28. package/dist/packages/cli/src/analyst/results.js +38 -0
  29. package/dist/packages/cli/src/analyst/session.js +319 -0
  30. package/dist/packages/cli/src/audit.js +51 -0
  31. package/dist/packages/cli/src/backtest-cmd.js +149 -0
  32. package/dist/packages/cli/src/boot-state.js +62 -0
  33. package/dist/packages/cli/src/custom.js +261 -0
  34. package/dist/packages/cli/src/display.js +191 -0
  35. package/dist/packages/cli/src/doctor.js +361 -0
  36. package/dist/packages/cli/src/feed.js +634 -0
  37. package/dist/packages/cli/src/fixtures.js +275 -0
  38. package/dist/packages/cli/src/follow-cmd.js +221 -0
  39. package/dist/packages/cli/src/images-config.js +59 -0
  40. package/dist/packages/cli/src/index.js +31 -0
  41. package/dist/packages/cli/src/kb-skill-cmd.js +240 -0
  42. package/dist/packages/cli/src/larp-record.js +21 -0
  43. package/dist/packages/cli/src/live/copy.js +80 -0
  44. package/dist/packages/cli/src/live/flow.js +233 -0
  45. package/dist/packages/cli/src/live/index.js +509 -0
  46. package/dist/packages/cli/src/live/intel.js +227 -0
  47. package/dist/packages/cli/src/live/newpairs.js +334 -0
  48. package/dist/packages/cli/src/live/screens/newpairs-live.js +219 -0
  49. package/dist/packages/cli/src/live/screens/token-live.js +459 -0
  50. package/dist/packages/cli/src/live/screens/watchlist-live.js +149 -0
  51. package/dist/packages/cli/src/live/token.js +585 -0
  52. package/dist/packages/cli/src/live/trade.js +929 -0
  53. package/dist/packages/cli/src/live/watchlist.js +178 -0
  54. package/dist/packages/cli/src/main.js +5583 -0
  55. package/dist/packages/cli/src/narrative-cmd.js +76 -0
  56. package/dist/packages/cli/src/pack-cmd.js +323 -0
  57. package/dist/packages/cli/src/plan-cmd.js +278 -0
  58. package/dist/packages/cli/src/popup.js +810 -0
  59. package/dist/packages/cli/src/rules-cmd.js +131 -0
  60. package/dist/packages/cli/src/rules.js +339 -0
  61. package/dist/packages/cli/src/scan/command.js +57 -0
  62. package/dist/packages/cli/src/scan/engine.js +419 -0
  63. package/dist/packages/cli/src/scan/observe.js +64 -0
  64. package/dist/packages/cli/src/scan/ui.js +98 -0
  65. package/dist/packages/cli/src/screener/filter.js +241 -0
  66. package/dist/packages/cli/src/screener/presets.js +80 -0
  67. package/dist/packages/cli/src/screener/rows.js +146 -0
  68. package/dist/packages/cli/src/screener/rug.js +50 -0
  69. package/dist/packages/cli/src/screener/sort.js +52 -0
  70. package/dist/packages/cli/src/screener/view.js +183 -0
  71. package/dist/packages/cli/src/screens/analyst-session.js +343 -0
  72. package/dist/packages/cli/src/screens/analyst.js +326 -0
  73. package/dist/packages/cli/src/screens/boot.js +74 -0
  74. package/dist/packages/cli/src/screens/bubbles.js +255 -0
  75. package/dist/packages/cli/src/screens/coin.js +33 -0
  76. package/dist/packages/cli/src/screens/follows.js +201 -0
  77. package/dist/packages/cli/src/screens/kol.js +90 -0
  78. package/dist/packages/cli/src/screens/narrative.js +90 -0
  79. package/dist/packages/cli/src/screens/newpairs.js +150 -0
  80. package/dist/packages/cli/src/screens/overlay.js +257 -0
  81. package/dist/packages/cli/src/screens/plans.js +126 -0
  82. package/dist/packages/cli/src/screens/positions.js +176 -0
  83. package/dist/packages/cli/src/screens/rules.js +170 -0
  84. package/dist/packages/cli/src/screens/screener.js +459 -0
  85. package/dist/packages/cli/src/screens/social-panel.js +107 -0
  86. package/dist/packages/cli/src/screens/ticket.js +342 -0
  87. package/dist/packages/cli/src/screens/token.js +312 -0
  88. package/dist/packages/cli/src/screens/trending.js +181 -0
  89. package/dist/packages/cli/src/screens/watchlist.js +104 -0
  90. package/dist/packages/cli/src/social/demo.js +96 -0
  91. package/dist/packages/cli/src/social/view.js +250 -0
  92. package/dist/packages/cli/src/state.js +463 -0
  93. package/dist/packages/cli/src/theme-cmd.js +126 -0
  94. package/dist/packages/cli/src/trade.js +319 -0
  95. package/dist/packages/cli/src/voice-hud.js +42 -0
  96. package/dist/packages/cli/src/wallet-cmd.js +440 -0
  97. package/dist/packages/cli/src/wallet-command.js +31 -0
  98. package/dist/packages/cli/src/widgets.js +208 -0
  99. package/dist/packages/cli/src/workspace-cmd.js +68 -0
  100. package/dist/packages/cli/src/x-cmd.js +154 -0
  101. package/dist/packages/custom/src/config.js +213 -0
  102. package/dist/packages/custom/src/index.js +10 -0
  103. package/dist/packages/custom/src/keymap.js +107 -0
  104. package/dist/packages/custom/src/layout.js +235 -0
  105. package/dist/packages/custom/src/packs.js +633 -0
  106. package/dist/packages/custom/src/rules.js +704 -0
  107. package/dist/packages/custom/src/schema.js +515 -0
  108. package/dist/packages/custom/src/themes.js +176 -0
  109. package/dist/packages/custom/src/widget-html.js +222 -0
  110. package/dist/packages/custom/src/workspace.js +141 -0
  111. package/dist/packages/data/src/analyst-actions.js +133 -0
  112. package/dist/packages/data/src/budget.js +88 -0
  113. package/dist/packages/data/src/cache.js +142 -0
  114. package/dist/packages/data/src/candles.js +168 -0
  115. package/dist/packages/data/src/clock.js +64 -0
  116. package/dist/packages/data/src/credits.js +137 -0
  117. package/dist/packages/data/src/detail.js +97 -0
  118. package/dist/packages/data/src/fast-lane.js +321 -0
  119. package/dist/packages/data/src/fixtures.js +135 -0
  120. package/dist/packages/data/src/health.js +245 -0
  121. package/dist/packages/data/src/http.js +277 -0
  122. package/dist/packages/data/src/images/cache.js +141 -0
  123. package/dist/packages/data/src/images/decode-worker.js +28 -0
  124. package/dist/packages/data/src/images/decode.js +81 -0
  125. package/dist/packages/data/src/images/fetch.js +162 -0
  126. package/dist/packages/data/src/images/gif.js +214 -0
  127. package/dist/packages/data/src/images/index.js +10 -0
  128. package/dist/packages/data/src/images/jpeg.js +544 -0
  129. package/dist/packages/data/src/images/png.js +310 -0
  130. package/dist/packages/data/src/images/service.js +334 -0
  131. package/dist/packages/data/src/images/types.js +27 -0
  132. package/dist/packages/data/src/index.js +208 -0
  133. package/dist/packages/data/src/intel/helius-history.js +59 -0
  134. package/dist/packages/data/src/intel/holder-class.js +125 -0
  135. package/dist/packages/data/src/intel/rules.js +421 -0
  136. package/dist/packages/data/src/intel/scan.js +170 -0
  137. package/dist/packages/data/src/larp/evidence.js +288 -0
  138. package/dist/packages/data/src/larp/links.js +137 -0
  139. package/dist/packages/data/src/larp/robots.js +90 -0
  140. package/dist/packages/data/src/larp/safe-fetch.js +389 -0
  141. package/dist/packages/data/src/limiter.js +341 -0
  142. package/dist/packages/data/src/model.js +12 -0
  143. package/dist/packages/data/src/paper.js +331 -0
  144. package/dist/packages/data/src/rpc-config.js +126 -0
  145. package/dist/packages/data/src/rpc-pool.js +166 -0
  146. package/dist/packages/data/src/social/chain.js +83 -0
  147. package/dist/packages/data/src/social/dedupe.js +205 -0
  148. package/dist/packages/data/src/social/feed.js +462 -0
  149. package/dist/packages/data/src/social/firewall.js +110 -0
  150. package/dist/packages/data/src/social/index.js +11 -0
  151. package/dist/packages/data/src/social/kol.js +269 -0
  152. package/dist/packages/data/src/social/model.js +11 -0
  153. package/dist/packages/data/src/social/rank.js +184 -0
  154. package/dist/packages/data/src/social/rss.js +113 -0
  155. package/dist/packages/data/src/social/summary.js +104 -0
  156. package/dist/packages/data/src/social/venues.js +186 -0
  157. package/dist/packages/data/src/sources/dexscreener.js +170 -0
  158. package/dist/packages/data/src/sources/geckoterminal.js +133 -0
  159. package/dist/packages/data/src/sources/goplus.js +161 -0
  160. package/dist/packages/data/src/sources/jupiter-swap.js +236 -0
  161. package/dist/packages/data/src/sources/jupiter.js +198 -0
  162. package/dist/packages/data/src/sources/pda.js +113 -0
  163. package/dist/packages/data/src/sources/pump-curve.js +58 -0
  164. package/dist/packages/data/src/sources/pumpportal.js +247 -0
  165. package/dist/packages/data/src/sources/rugcheck.js +71 -0
  166. package/dist/packages/data/src/sources/solana-rpc.js +299 -0
  167. package/dist/packages/data/src/sources/solana-ws.js +287 -0
  168. package/dist/packages/data/src/store.js +289 -0
  169. package/dist/packages/data/src/trade/bridge.js +464 -0
  170. package/dist/packages/data/src/trade/caps.js +323 -0
  171. package/dist/packages/data/src/trade/copy/auto.js +385 -0
  172. package/dist/packages/data/src/trade/copy/follows.js +103 -0
  173. package/dist/packages/data/src/trade/copy/index.js +9 -0
  174. package/dist/packages/data/src/trade/copy/mirror.js +91 -0
  175. package/dist/packages/data/src/trade/copy/stats.js +120 -0
  176. package/dist/packages/data/src/trade/copy/tracker.js +158 -0
  177. package/dist/packages/data/src/trade/copy/trades.js +87 -0
  178. package/dist/packages/data/src/trade/copy/types.js +6 -0
  179. package/dist/packages/data/src/trade/executor.js +933 -0
  180. package/dist/packages/data/src/trade/kill-switch.js +47 -0
  181. package/dist/packages/data/src/trade/link-store.js +52 -0
  182. package/dist/packages/data/src/trade/plans/confirm.js +157 -0
  183. package/dist/packages/data/src/trade/plans/engine.js +784 -0
  184. package/dist/packages/data/src/trade/plans/executor-live.js +220 -0
  185. package/dist/packages/data/src/trade/plans/executor-paper.js +44 -0
  186. package/dist/packages/data/src/trade/plans/executor.js +11 -0
  187. package/dist/packages/data/src/trade/plans/index.js +12 -0
  188. package/dist/packages/data/src/trade/plans/journal.js +77 -0
  189. package/dist/packages/data/src/trade/plans/mandate.js +129 -0
  190. package/dist/packages/data/src/trade/plans/plan.js +179 -0
  191. package/dist/packages/data/src/trade/plans/service.js +168 -0
  192. package/dist/packages/data/src/trade/plans/types.js +6 -0
  193. package/dist/packages/data/src/trade/rpc-exec.js +229 -0
  194. package/dist/packages/data/src/trade/signer/client.js +197 -0
  195. package/dist/packages/data/src/trade/signer/fast-wallet.js +154 -0
  196. package/dist/packages/data/src/trade/signer/host.js +97 -0
  197. package/dist/packages/data/src/trade/signer/main.js +121 -0
  198. package/dist/packages/data/src/trade/signer/probe-builder.js +85 -0
  199. package/dist/packages/data/src/trade/signer/protocol.js +92 -0
  200. package/dist/packages/data/src/trade/signer/service.js +400 -0
  201. package/dist/packages/data/src/trade/signer/sol-usd-feed.js +98 -0
  202. package/dist/packages/data/src/trade/sol-usd.js +86 -0
  203. package/dist/packages/data/src/trade/swap-build.js +108 -0
  204. package/dist/packages/data/src/trade/token-delta.js +201 -0
  205. package/dist/packages/data/src/trade/tx-decode.js +632 -0
  206. package/dist/packages/data/src/util.js +24 -0
  207. package/dist/packages/data/src/watchlist.js +176 -0
  208. package/dist/packages/data/src/x/api.js +256 -0
  209. package/dist/packages/data/src/x/budget.js +66 -0
  210. package/dist/packages/data/src/x/config.js +49 -0
  211. package/dist/packages/data/src/x/index.js +10 -0
  212. package/dist/packages/data/src/x/mock-server.js +217 -0
  213. package/dist/packages/data/src/x/oauth.js +242 -0
  214. package/dist/packages/data/src/x/pkce.js +21 -0
  215. package/dist/packages/data/src/x/source.js +285 -0
  216. package/dist/packages/data/src/x/token-store.js +134 -0
  217. package/dist/packages/data/src/x/transport.js +71 -0
  218. package/dist/packages/data/vendor/solana-web3/LICENSE +20 -0
  219. package/dist/packages/data/vendor/solana-web3/NOTICE.md +13 -0
  220. package/dist/packages/data/vendor/solana-web3/index.iife.min.js +20 -0
  221. package/dist/packages/mcp/assets/cases.json +1194 -0
  222. package/dist/packages/mcp/assets/kb/entries/cabal-and-coordinated-launches.md +28 -0
  223. package/dist/packages/mcp/assets/kb/entries/common-rug-patterns.md +40 -0
  224. package/dist/packages/mcp/assets/kb/entries/dbc-mechanics.md +30 -0
  225. package/dist/packages/mcp/assets/kb/entries/dev-wallet-behaviour.md +33 -0
  226. package/dist/packages/mcp/assets/kb/entries/glossary.md +35 -0
  227. package/dist/packages/mcp/assets/kb/entries/holder-concentration.md +30 -0
  228. package/dist/packages/mcp/assets/kb/entries/jito-bundles.md +29 -0
  229. package/dist/packages/mcp/assets/kb/entries/launchlab-curve.md +31 -0
  230. package/dist/packages/mcp/assets/kb/entries/lp-burn-vs-lock.md +31 -0
  231. package/dist/packages/mcp/assets/kb/entries/metadata-and-copycats.md +29 -0
  232. package/dist/packages/mcp/assets/kb/entries/mint-freeze-authority.md +31 -0
  233. package/dist/packages/mcp/assets/kb/entries/narrative-lifecycle.md +32 -0
  234. package/dist/packages/mcp/assets/kb/entries/pump-bonding-curve.md +33 -0
  235. package/dist/packages/mcp/assets/kb/entries/pumpswap-migration.md +29 -0
  236. package/dist/packages/mcp/assets/kb/entries/sniping-and-snipers.md +29 -0
  237. package/dist/packages/mcp/assets/kb/entries/token2022-extensions-risk.md +32 -0
  238. package/dist/packages/mcp/assets/kb/entries/wash-trading-fake-volume.md +33 -0
  239. package/dist/packages/mcp/assets/skills/rug-check.md +52 -0
  240. package/dist/packages/mcp/assets/skills/token-dossier.md +57 -0
  241. package/dist/packages/mcp/assets/skills/trench-scan.md +40 -0
  242. package/dist/packages/mcp/bin/dexterm-mcp.mjs +16 -0
  243. package/dist/packages/mcp/src/dossier.js +78 -0
  244. package/dist/packages/mcp/src/firewall.js +21 -0
  245. package/dist/packages/mcp/src/index.js +22 -0
  246. package/dist/packages/mcp/src/server.js +849 -0
  247. package/dist/packages/mcp/src/user-content.js +434 -0
  248. package/dist/packages/packs/src/backtest.js +183 -0
  249. package/dist/packages/packs/src/digest.js +95 -0
  250. package/dist/packages/packs/src/firewall.js +57 -0
  251. package/dist/packages/packs/src/index.js +19 -0
  252. package/dist/packages/packs/src/larp-eval.js +100 -0
  253. package/dist/packages/packs/src/narrative.js +309 -0
  254. package/dist/packages/packs/src/reason.js +135 -0
  255. package/dist/packages/packs/src/rug-model.js +137 -0
  256. package/dist/packages/packs/src/schema.js +54 -0
  257. package/dist/packages/packs/src/token-dossier.js +174 -0
  258. package/dist/packages/packs/src/verdicts.js +17 -0
  259. package/dist/packages/packs/src/wallet-dossier.js +105 -0
  260. package/dist/packages/popup/src/config.js +71 -0
  261. package/dist/packages/popup/src/dock.js +271 -0
  262. package/dist/packages/popup/src/host.js +210 -0
  263. package/dist/packages/popup/src/index.js +12 -0
  264. package/dist/packages/popup/src/loopback.js +53 -0
  265. package/dist/packages/popup/src/open.js +183 -0
  266. package/dist/packages/popup/src/pages/bubbles-lib.js +160 -0
  267. package/dist/packages/popup/src/pages/bubbles.css +23 -0
  268. package/dist/packages/popup/src/pages/bubbles.html +36 -0
  269. package/dist/packages/popup/src/pages/bubbles.js +214 -0
  270. package/dist/packages/popup/src/pages/chart-lib.js +262 -0
  271. package/dist/packages/popup/src/pages/chart.css +50 -0
  272. package/dist/packages/popup/src/pages/chart.html +56 -0
  273. package/dist/packages/popup/src/pages/chart.js +554 -0
  274. package/dist/packages/popup/src/pages/common.css +34 -0
  275. package/dist/packages/popup/src/pages/common.js +187 -0
  276. package/dist/packages/popup/src/pages/feeds.html +20 -0
  277. package/dist/packages/popup/src/pages/feeds.js +77 -0
  278. package/dist/packages/popup/src/pages/narrative.html +20 -0
  279. package/dist/packages/popup/src/pages/narrative.js +61 -0
  280. package/dist/packages/popup/src/pages/plans.css +30 -0
  281. package/dist/packages/popup/src/pages/plans.html +26 -0
  282. package/dist/packages/popup/src/pages/plans.js +82 -0
  283. package/dist/packages/popup/src/pages/roster.css +41 -0
  284. package/dist/packages/popup/src/pages/roster.html +25 -0
  285. package/dist/packages/popup/src/pages/roster.js +75 -0
  286. package/dist/packages/popup/src/pages/token.html +20 -0
  287. package/dist/packages/popup/src/pages/token.js +112 -0
  288. package/dist/packages/popup/src/pages/widget-sdk.js +224 -0
  289. package/dist/packages/popup/src/pages/widget.css +5 -0
  290. package/dist/packages/popup/src/pages/widget.html +21 -0
  291. package/dist/packages/popup/src/pages/widget.js +85 -0
  292. package/dist/packages/popup/src/protocol.js +31 -0
  293. package/dist/packages/popup/src/selftest.js +156 -0
  294. package/dist/packages/popup/src/server.js +582 -0
  295. package/dist/packages/popup/src/sinkproxy.js +167 -0
  296. package/dist/packages/popup/src/widget-html.js +231 -0
  297. package/dist/packages/popup/vendor/lightweight-charts/LICENSE +201 -0
  298. package/dist/packages/popup/vendor/lightweight-charts/NOTICE +2 -0
  299. package/dist/packages/popup/vendor/lightweight-charts/README.md +30 -0
  300. package/dist/packages/popup/vendor/lightweight-charts/VERSION +1 -0
  301. package/dist/packages/popup/vendor/lightweight-charts/lightweight-charts.standalone.production.js +7 -0
  302. package/dist/packages/recorder/bin/dexterm-recorder.mjs +11 -0
  303. package/dist/packages/recorder/src/cli.js +113 -0
  304. package/dist/packages/recorder/src/export.js +71 -0
  305. package/dist/packages/recorder/src/index.js +20 -0
  306. package/dist/packages/recorder/src/labels.js +151 -0
  307. package/dist/packages/recorder/src/open.js +29 -0
  308. package/dist/packages/recorder/src/recorder.js +553 -0
  309. package/dist/packages/recorder/src/schedule.js +43 -0
  310. package/dist/packages/recorder/src/schema.js +135 -0
  311. package/dist/packages/recorder/src/snapshot.js +191 -0
  312. package/dist/packages/recorder/src/sweep.js +52 -0
  313. package/dist/packages/recorder/src/verdicts.js +52 -0
  314. package/dist/packages/tui/src/bubbles.js +415 -0
  315. package/dist/packages/tui/src/canvas.js +370 -0
  316. package/dist/packages/tui/src/chrome.js +85 -0
  317. package/dist/packages/tui/src/color.js +133 -0
  318. package/dist/packages/tui/src/flush.js +62 -0
  319. package/dist/packages/tui/src/fmt.js +188 -0
  320. package/dist/packages/tui/src/fx-trade.js +278 -0
  321. package/dist/packages/tui/src/fx.js +527 -0
  322. package/dist/packages/tui/src/images/blocks.js +141 -0
  323. package/dist/packages/tui/src/images/coin.js +22 -0
  324. package/dist/packages/tui/src/images/detect.js +140 -0
  325. package/dist/packages/tui/src/images/index.js +7 -0
  326. package/dist/packages/tui/src/images/layer.js +146 -0
  327. package/dist/packages/tui/src/images/pixels.js +157 -0
  328. package/dist/packages/tui/src/images/protocols.js +87 -0
  329. package/dist/packages/tui/src/index.js +15 -0
  330. package/dist/packages/tui/src/keymap.js +355 -0
  331. package/dist/packages/tui/src/layout.js +11 -0
  332. package/dist/packages/tui/src/sound.js +177 -0
  333. package/dist/packages/tui/src/theme.js +182 -0
  334. package/dist/packages/tui/src/widgets.js +598 -0
  335. package/dist/packages/voice/src/controller.js +395 -0
  336. package/dist/packages/voice/src/doctor.js +63 -0
  337. package/dist/packages/voice/src/engines.js +44 -0
  338. package/dist/packages/voice/src/index.js +16 -0
  339. package/dist/packages/voice/src/router.js +502 -0
  340. package/dist/packages/voice/src/stt/apple-helper.swift.js +103 -0
  341. package/dist/packages/voice/src/stt/apple.js +179 -0
  342. package/dist/packages/voice/src/stt/fake.js +34 -0
  343. package/dist/packages/voice/src/stt/whisper.js +102 -0
  344. package/dist/packages/voice/src/summary.js +44 -0
  345. package/dist/packages/voice/src/tts/fake.js +30 -0
  346. package/dist/packages/voice/src/tts/say.js +96 -0
  347. package/dist/packages/voice/src/types.js +3 -0
  348. package/package.json +42 -4
  349. package/README.md +0 -3
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: cabal-and-coordinated-launches
3
+ title: Cabals: repeat co-buyers across launches and how dexterm would detect them
4
+ tags:
5
+ - cabal
6
+ - coordination
7
+ - kol
8
+ - labels
9
+ - wallet-intelligence
10
+ date: 2026-10-06
11
+ confidence: low
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - dexterm research/data-firehose-inventory-2026-10-06.md §1f and §4 item 6 (no credible open label dataset; in-house labels from recorded history)
17
+ - dexterm ROADMAP.md pillar 2 and legal flag on wallet labelling accuracy
18
+ - dexterm SPEC.md §3.6 (Bundled %, Snipers definitions)
19
+ ---
20
+ **Term.** In trench slang a *cabal* is a group (often KOLs, launch teams and their bots) that coordinates entries and exits across many tokens: they are early on each launch, promote it, and sell into the audience. It is a social claim about intent; on-chain it reduces to **the same wallets (or wallets funded from the same sources) appearing early on many launches that later dump**.
21
+
22
+ **What is observable, and what dexterm can build (inventory §1f):** there is no credible open dataset of KOL/cabal wallets (GitHub search tops out at 7 stars; Nansen/Arkham/GMGN/Cielo are keyed or paid). The in-house path is: record every watched launch's first-N-slot buyers and their funding sources (Helius `getTransactionsForAddress`), store them, and score wallets on *early-entry rate*, *co-occurrence* with the same other wallets, and *realised PnL* of their exits. A "cabal candidate" is a cluster of wallets that co-occur early on ≥ k launches where the launches' later outcome was a dump. Thresholds and k are to be set from recorded history, not guessed.
23
+
24
+ **Why confidence is low.** Until the local history recorder holds enough recorded launches to set the thresholds, this is a method, not a measurement. Co-occurrence also catches honest copy-traders and popular snipers. Mislabelling a real person's wallet as "cabal" is the labelling-accuracy legal flag in ROADMAP (counsel before anything public); inside dexterm labels are **private, evidence-linked and reversible** (`WalletLabel.evidence[]`).
25
+
26
+ **Judgement (maintainers, reviewed 2026-10-15):** the useful trader signal is not "cabal yes/no" but "who holds the early float and what did those wallets do last time". Case files with verified outcomes (see `case_lookup`) are where this becomes checkable.
27
+
28
+ **Rule:** never assert that a specific wallet is a cabal member from memory or from a KB entry; only from a label record with evidence returned by a tool.
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: common-rug-patterns
3
+ title: Common rug patterns mapped to checkable chain facts
4
+ tags:
5
+ - rug
6
+ - rug-pull
7
+ - honeypot
8
+ - patterns
9
+ - checklist
10
+ date: 2026-10-06
11
+ confidence: medium
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://spl.solana.com/token (authorities)
17
+ - https://spl.solana.com/token-2022/extensions (default account state, permanent delegate, transfer hook)
18
+ - https://github.com/pump-fun/pump-public-docs (creator fields, PumpSwap lp_supply)
19
+ - https://docs.meteora.ag/core-products/dbc/migration-and-liquidity.md (unlocked vs locked liquidity)
20
+ - https://www.metaplex.com/docs/smart-contracts/token-metadata (Is Mutable)
21
+ - dexterm SPEC.md §3.6 (forensics definitions)
22
+ ---
23
+ Each pattern names the **mechanism**, the **chain fact that proves the capability exists**, and the dexterm field. A pattern is a capability, not an event: a token can have the capability and never use it.
24
+
25
+ | Pattern | Mechanism | Checkable fact | dexterm field |
26
+ |---|---|---|---|
27
+ | **LP pull** | LP-token holder withdraws both vaults; price → 0 | LP tokens not burned/locked; locker expiry | `rugcheck.lpLockedPct`, `audit.lpLockedPct` |
28
+ | **Freeze honeypot** | `FreezeAccount` on buyers' token accounts; only the deployer cluster can sell | `freezeAuthority` not null on the mint | `audit.freezeAuthority == true`, `rugcheck.risks` |
29
+ | **Token-2022 honeypot** | default-frozen accounts, transfer hook that blocks sells, permanent delegate pulls tokens | extension present on the mint | `rugcheck.tokenProgram == Token-2022`, GoPlus flags |
30
+ | **Mint-and-dump** | `MintTo` inflates supply into the pool | `mintAuthority` not null | `audit.mintAuthority == true` |
31
+ | **Bundled launch dump** | deployer's wallets bought a large float atomically at create and sell into the first bid | same-slot buys funded from one source | `get_dev_history.bundledPct`, `get_holders.labelled.sniper` |
32
+ | **Dev dump / slow rug** | creator or linked cluster distributes into strength | creator balance falling, transfers to fresh wallets | `audit.devPct`, `get_trades.devSells` |
33
+ | **Serial launcher** | same creator, many dead mints | creator's prior mints and their outcomes | `get_dev_history.devHistory.{launches,rugged}` |
34
+ | **Copycat ticker** | same symbol as a trending token; buyers hit the wrong mint | metadata symbol is not unique; mint is | `get_token` ambiguity → candidates (see `metadata-and-copycats`) |
35
+ | **Metadata swap** | mutable metadata renamed/re-imaged after listing | `Is Mutable` on the Metaplex metadata account | GoPlus `metadata_mutable` (read by the data layer as `metadataMutable`) |
36
+ | **Fake volume to trend** | wash trading to reach trending lists | few wallets dominate the tape | `get_trades.top2WalletVolumeSharePct`, organic score |
37
+
38
+ **Reading order used by the `rug-check` skill:** authorities → token program/extensions → LP → concentration and clusters → creator history → tape. Stop early with AVOID on a freeze/mint authority or a Token-2022 honeypot extension; otherwise weigh the rest.
39
+
40
+ **What this entry cannot say:** anything about a specific live token. The skill reads each field from a tool and cites the tool and data age.
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: dbc-mechanics
3
+ title: Meteora Dynamic Bonding Curve (DBC) lifecycle and migration
4
+ tags:
5
+ - meteora
6
+ - dbc
7
+ - bonding-curve
8
+ - migration
9
+ - damm-v2
10
+ date: 2026-10-06
11
+ confidence: high
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://docs.meteora.ag/core-products/dbc/what-is-dbc.md (retrieved 2026-09-30 into solana-launchpad/docs/meteora/dbc-overview.md)
17
+ - https://docs.meteora.ag/core-products/dbc/migration-and-liquidity.md (solana-launchpad/docs/meteora/dbc-migration.md)
18
+ - https://docs.meteora.ag/core-products/dbc/fees/rate-limiter.md (solana-launchpad/docs/meteora/dbc-rate-limiter.md)
19
+ ---
20
+ **Program:** `dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN` (pool authority PDA `FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM`). A *partner* (launchpad front end) or creator publishes a `PoolConfig` (curve shape with 1–16 segments, fee scheduler, migration settings, liquidity distribution); creators deploy a `VirtualPool` from it.
21
+
22
+ **States:** `PreBondingCurve` (not yet tradeable) → `PostBondingCurve` (trading on the curve) → `MigrationOngoing` (quote threshold hit) → `CreatedPool` (DAMM v2 pool live). "Swaps are only possible in `PostBondingCurve`; migration is only possible after the quote threshold is reached."
23
+
24
+ **Graduation:** when the pool's quote balance reaches `migration_quote_threshold`, a keeper (Meteora runs two: `Asi5DTGEeiso6k7ya6ndDabEZ7DRCgfTpCBLPH5E3aQs`, `DeQ8dPv6ReZNQ45NfiWwS5CchWpB2BVq1QMyNV8L2uSW`) or the manual migrator calls migrate. Standard-keeper thresholds are set per quote mint (10 SOL, 750 USDC as retrieved 2026-09-30; Meteora's migration docs list the other supported quote mints and their thresholds). New configs must migrate to **DAMM v2** (v1 deprecated); a **0.2 % protocol liquidity migration fee** is deducted; the DAMM v2 pool opens at the curve's final price.
25
+
26
+ **Liquidity after migration:** split into unlocked / permanently locked / vesting positions per config; at least 10 % must be permanently locked on day 1 for the standard keeper to migrate (see `lp-burn-vs-lock`).
27
+
28
+ **Anti-sniper design that existed and is now deprecated:** the *rate limiter* base-fee mode raised the fee with buy size during the first ≤ 12 h (`max_limiter_duration` ≤ 43,200 s) and "does not apply to sells". New configs use fee schedulers (linear/exponential decay) plus optional dynamic fees instead, so **early-buy fees on DBC launches are time-based, not size-based**, and a big first buy is not penalised unless the scheduler's starting fee is high.
29
+
30
+ **Reading a DBC token in dexterm:** `launchpad == "dbc"` (Jupiter `met-dbc`, Gecko `meteora-dbc`). The config is per partner, so the *same* program hosts launches with very different fee and lock rules; the config address decides, and there is no public REST for DBC state (inventory §1b), so curve state is read on-chain.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: dev-wallet-behaviour
3
+ title: Dev (creator) wallets: where the address comes from and what to watch
4
+ tags:
5
+ - dev
6
+ - creator
7
+ - dev-wallet
8
+ - forensics
9
+ - creator-fees
10
+ date: 2026-10-06
11
+ confidence: medium
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://github.com/pump-fun/pump-public-docs (BondingCurve.creator; PumpSwap Pool.coin_creator; holder rewards)
17
+ - https://developers.jup.ag/docs/tokens (retrieved 2026-09-30; audit fields devBalancePercentage, devMints, isSus)
18
+ - dexterm research/data-firehose-inventory-2026-10-06.md §1d (RugCheck new_tokens.creator)
19
+ - dexterm SPEC.md §3.6 (Dev % definition)
20
+ ---
21
+ **Where "the dev" is defined on-chain.** On pump.fun the `BondingCurve.creator` field "accrues creator fees" and carries over to `PumpSwap Pool.coin_creator` after migration; the `create` instruction's signer is the deploying wallet. On Raydium LaunchLab the creator share of fees accrues to `creator_fees_quote`. On Meteora DBC the creator is the VirtualPool deployer. These are facts a tool reads; dexterm exposes them as `get_dev_history.creator`.
22
+
23
+ **Derived signals.** Jupiter `audit.devBalancePercentage` (creator's share of supply) and `audit.devMints` (how many tokens this creator has launched) and `audit.isSus`; RugCheck `new_tokens.creator` for fresh mints. SPEC §3.6: **Dev % = creator wallet's current balance share plus linked wallets when clustering is available.**
24
+
25
+ **Why creator fees change behaviour.** Since pump.fun and LaunchLab pay creators a share of every swap, a creator earns from *volume*, not only from selling supply. A creator who keeps zero supply but earns fees has an incentive to keep the token trading; a creator holding 15–20 % has the opposite option. With `is_holder_reward` set, the fee goes to holders instead, which removes that incentive from the creator.
26
+
27
+ **Patterns worth a flag (maintainers, reviewed 2026-10-15):**
28
+ - Creator has many prior mints (`devMints` high) and most are dead: serial launcher.
29
+ - Creator balance falling while price rises: distribution into strength.
30
+ - Creator transfers supply to fresh wallets before launch: shows as "bundled" or as many same-funded holders (see `holder-concentration`).
31
+ - Creator sells to zero in the first hour: not always bad on pump.fun (fees still accrue), but the token is now "CTO or nothing".
32
+
33
+ **Rule:** the creator address and its history are per-token facts. Read them from `get_dev_history`; never from memory.
@@ -0,0 +1,35 @@
1
+ ---
2
+ id: glossary
3
+ title: Trench glossary (terms as dexterm uses them)
4
+ tags:
5
+ - glossary
6
+ - terminology
7
+ - trenches
8
+ - slang
9
+ date: 2026-10-06
10
+ confidence: medium
11
+ owner: maintainers
12
+ origin: primary-doc
13
+ reviewed_by: maintainers@2026-10-15
14
+ sources:
15
+ - dexterm SPEC.md §3.3 (model), §3.6 (forensics definitions), §5.4 (verdict words)
16
+ - https://github.com/pump-fun/pump-public-docs (bonding curve, migrate, king of the hill fields)
17
+ - https://docs.meteora.ag/core-products/dbc/what-is-dbc.md (migration states)
18
+ ---
19
+ Terms with the precise meaning dexterm attaches to them. Where a term is slang with no on-chain definition, that is said.
20
+
21
+ - **Trenches**: the stream of brand-new launches (minutes old, tiny market cap). "Trench scan" = screening that stream.
22
+ - **Bonding / on the curve**: a pump.fun, LaunchLab or DBC token still trading on its launch curve, before migration. **Bonding progress**: share of the curve's real token reserve sold.
23
+ - **Graduation / migration / "bonded"**: the curve completed and a real AMM pool was created (PumpSwap, Raydium CPMM, DAMM v2). On pump.fun `migrate` is permissionless.
24
+ - **KOTH (king of the hill)**: pump.fun's label for the curve token with the highest market cap at the moment; a UI concept, not a program state.
25
+ - **Mcap vs FDV**: market cap uses circulating supply, FDV uses total supply. For a 1 B-supply memecoin with no locked supply they are equal; `pair.mcap` and `pair.fdv` are both carried.
26
+ - **Dev**: the creator address (`BondingCurve.creator` / `coin_creator` / LaunchLab creator); **dev %** = its balance share plus linked wallets (SPEC §3.6).
27
+ - **Sniper**: a wallet that bought in the first 3 blocks or first 2 s on a curve (SPEC §3.6). **Bundle / bundled %**: supply bought in the launch transaction or by wallets funded from one source within 60 s of launch.
28
+ - **Rug / rug pull**: liquidity or supply mechanics used against holders (see `common-rug-patterns`); **soft rug / slow rug**: the creator cluster sells over time instead of pulling LP; **honeypot**: holders cannot sell (freeze authority, Token-2022 extension or hook).
29
+ - **LP burned / locked**: see `lp-burn-vs-lock`. **Unlocked LP**: withdrawable by its holder now.
30
+ - **Jeet** (slang): a holder who sells early into any strength; no on-chain definition. **Paper hands / diamond hands**: same, slang.
31
+ - **CTO (community takeover)** (slang): the original creator is gone and holders promote the token; DexScreener has a `community-takeovers` endpoint that lists claimed CTOs.
32
+ - **Moon bag** (slang): the remainder left after taking profit; in an order plan, the share excluded from the sell legs.
33
+ - **Cabal** (slang): coordinated group early on many launches; see `cabal-and-coordinated-launches`.
34
+ - **Organic score**: Jupiter's 0–100 genuineness score; see `wash-trading-fake-volume`.
35
+ - **Verdict words (SPEC §5.4)**: **WATCH** (worth tracking, no disqualifier), **SPECULATIVE** (no disqualifier found, but material risks that the answer must state), **AVOID** (a disqualifier is present), plus **INSUFFICIENT_DATA** and **AMBIGUOUS** from the skill schema. None is a recommendation to buy or sell.
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: holder-concentration
3
+ title: Holder concentration, top-10 share and funding-source clusters
4
+ tags:
5
+ - holders
6
+ - top10
7
+ - concentration
8
+ - bubble-map
9
+ - clusters
10
+ - helius
11
+ date: 2026-10-06
12
+ confidence: medium
13
+ owner: maintainers
14
+ origin: primary-doc
15
+ reviewed_by: maintainers@2026-10-15
16
+ sources:
17
+ - dexterm SPEC.md §3.6 (Top 10 % excludes LP vault and known CEX/bridge addresses)
18
+ - https://spl.solana.com/token (RPC methods getTokenLargestAccounts, getTokenAccountsByOwner, getTokenSupply)
19
+ - https://www.helius.dev/docs/das-api (solana-launchpad/docs/helius/das-api.md; getTokenAccounts by mint)
20
+ - dexterm research/data-firehose-inventory-2026-10-06.md §2 (bubble map from getTransactionsForAddress)
21
+ ---
22
+ **How the numbers are made.** The public RPC's `getTokenLargestAccounts` returns the 20 largest token accounts for a mint (it 429s on the public endpoint in practice); Helius DAS `getTokenAccounts` returns all holders paginated (64 ms per 100 in the inventory probe). A token account is not a person: the LP vault, CEX deposit wallets and bridges hold large balances that are not "one holder". **dexterm's Top-10 % excludes the LP vault and a static allow-list of CEX/bridge addresses** (SPEC §3.6); the tool reports `top10PctExLp`.
23
+
24
+ **Clusters.** Several wallets funded from the same source (one wallet sending SOL to many fresh wallets shortly before they buy) behave as one holder. dexterm builds this from Helius `getTransactionsForAddress` (first SOL inflow per wallet) and shows it as a bubble map; the Forensics record's `bundledPct` is the same idea restricted to the launch window.
25
+
26
+ **Thresholds in use (maintainers, reviewed 2026-10-15; rough heuristics, not measured facts):** top-10 ex-LP under ~20 % is broad; 20–35 % is common for a young token; above ~50 % a handful of holders (one group, if they are linked) can decide the exit. Combine with `labelled.dev` and `labelled.sniper` from `get_holders`: 30 % spread over 10 unrelated whales is a different risk from 30 % in one funded cluster.
27
+
28
+ **What the count hides.** Holder count (`stats.holderCount`, Jupiter) can be inflated cheaply by airdropping dust to thousands of wallets; `holders24hDelta` plus organic score (`wash-trading-fake-volume`) separates growth from dusting.
29
+
30
+ **Rule:** concentration numbers for a live token come from `get_holders`/`get_token.audit.top10Pct` with their `fetchedAt`; the KB only explains how to read them.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: jito-bundles
3
+ title: Jito bundles, tips, and what "bundled" means on a launch
4
+ tags:
5
+ - jito
6
+ - bundle
7
+ - bundling
8
+ - tips
9
+ - sniping
10
+ - forensics
11
+ date: 2026-10-06
12
+ confidence: high
13
+ owner: maintainers
14
+ origin: primary-doc
15
+ reviewed_by: maintainers@2026-10-15
16
+ sources:
17
+ - https://docs.jito.wtf/lowlatencytxnsend/ (retrieved 2026-10-01 into solana-launchpad/docs/jito/bundles.md)
18
+ - dexterm SPEC.md §3.6 (Bundled % definition)
19
+ - dexterm research/data-firehose-inventory-2026-10-06.md §1e (bundle contents not exposed by Jito)
20
+ ---
21
+ **Mechanics.** A Jito bundle is "a group of up to 5 transactions that execute sequentially and atomically (all-or-nothing)", submitted to the Jito block engine (`sendBundle`) and landed by validators running Jito-Solana. A bundle pays a **tip** (minimum 1,000 lamports) to one of 8 tip accounts; "higher tips win the auction during congestion". `getBundleStatuses` returns the landed `slot`. The live tip floor is at `https://bundles.jito.wtf/api/v1/bundles/tip_floor`.
22
+
23
+ **Why launches get "bundled".** Because a bundle is atomic and ordered, a deployer can put the `create` instruction and several `buy`s from different wallets into the same bundle: the token is created and a chosen share of supply is bought in the same slot before anyone else can trade. The buyers in that bundle look like separate wallets but were funded and signed by one operator.
24
+
25
+ **What is and is not observable.** Jito does not publish bundle contents or membership, so "this was a Jito bundle" is not directly readable. What *is* on-chain: the slot and ordering of the first buys, and the funding history of each buying wallet. dexterm's definition (SPEC §3.6): **Bundled % = share of supply bought in the launch transaction or by wallets funded by the same source within 60 s of launch.** This catches bundles and also non-Jito same-slot coordination; it misses operators who pre-fund wallets days ahead.
26
+
27
+ **Trader reading.** A high bundled share means one party controls a large float and can sell it at once; many "bundled launches" dump the bundle into the first organic bid. But a bundle that *sells early and is absorbed* can leave a cleaner holder base afterwards (the fixture case F5 models this). The number to watch next is whether the bundle wallets still hold (`get_holders` labels `sniper`, `get_trades.sniperSells`).
28
+
29
+ **Sandwich note:** Jito's `jitodontfront` convention (an account whose pubkey starts with `jitodontfront` in an instruction) makes the block engine reject bundles that would front-run that transaction; it protects the sender, not the token.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: launchlab-curve
3
+ title: Raydium LaunchLab curves, graduation and the CPMM handoff
4
+ tags:
5
+ - raydium
6
+ - launchlab
7
+ - letsbonk
8
+ - bonding-curve
9
+ - graduation
10
+ - fees
11
+ date: 2026-10-06
12
+ confidence: high
13
+ owner: maintainers
14
+ origin: primary-doc
15
+ reviewed_by: maintainers@2026-10-15
16
+ sources:
17
+ - https://docs.raydium.io/products/launchlab/bonding-curve.md (retrieved 2026-09-30 into solana-launchpad/docs/raydium/launchlab-bonding-curve.md)
18
+ - https://docs.raydium.io/products/launchlab/platform-config.md (solana-launchpad/docs/raydium/launchlab-platform-pda.md)
19
+ - https://docs.raydium.io/products/cpmm/fees.md (creator fee only on InitializeWithPermission pools)
20
+ ---
21
+ **Curve types** (selected at `Initialize`, stored in `LaunchState.curve_type`): `0` constant-product with virtual reserves (the pump-style default), `1` fixed-price, `2` linear-price (cost quadratic in tokens sold: "early buyers pay close to zero, late buyers pay substantially more").
22
+
23
+ **Supply split:** `base_supply_graduation` is "usually 0.8 × base_supply_max; the remaining 20 % becomes the post-graduation pool's initial LP". `quote_reserve_target = cost(0, base_supply_graduation) × (1 + buy_fee_rate)`; the launch graduates when `quote_vault.balance ≥ quote_reserve_target`.
24
+
25
+ **Fees on the curve:** per-buy `gross_fee = ceil(quote_in × buy_numerator / buy_denominator)` (e.g. 100/10,000 = 1 %), split into `lp_share` (stays in the quote vault), `protocol_share`, `creator_share` (accrues to `creator_fees_quote`).
26
+
27
+ **Handoff:** at `Graduate`, `cpmm_quote_reserve = quote_vault − swept protocol fees − swept creator fees`, `cpmm_base_reserve = base_vault`, and for the constant-product curve the CPMM opening price equals the curve's marginal price, "so an observer switching from the curve UI to the CPMM UI sees no jump". Only CPMM pools created via `InitializeWithPermission` (LaunchLab graduations) have `enable_creator_fee = true`.
28
+
29
+ **Platforms:** third-party front ends (LetsBonk is one) are *platform PDAs* with their own fee share and defaults; the launchpad label in dexterm (`bonk`, `raydium`) comes from Jupiter's `launchpad` field.
30
+
31
+ **Trader reading:** a LaunchLab token on a linear curve has a steep late-buyer price; "graduated" means a Raydium CPMM pool now exists, seeded with the supply left after the curve (usually 20 %) as its base side; the creator earns fees for as long as the pool trades. LaunchLab has no public REST for per-mint state that worked in the inventory probe (500 on a guessed `platformId`), so state is read on-chain.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: lp-burn-vs-lock
3
+ title: LP tokens, burn vs lock, and what lpLockedPct means
4
+ tags:
5
+ - lp
6
+ - liquidity
7
+ - burn
8
+ - lock
9
+ - rug
10
+ - raydium
11
+ - meteora
12
+ date: 2026-10-06
13
+ confidence: medium
14
+ owner: maintainers
15
+ origin: primary-doc
16
+ reviewed_by: maintainers@2026-10-15
17
+ sources:
18
+ - https://github.com/pump-fun/pump-public-docs/blob/main/docs/PUMP_SWAP_README.md (lp_supply excludes burns)
19
+ - https://docs.meteora.ag/core-products/dbc/migration-and-liquidity.md (retrieved 2026-09-30; locked/vesting liquidity, 10 % permanent lock rule, 0.2 % migration fee)
20
+ - https://docs.raydium.io/products/cpmm/fees.md (retrieved 2026-09-30; LP fee stays in the vault, owned pro-rata by LP tokens)
21
+ - dexterm SPEC.md §3.6 (LP locked definition; pump.fun/PumpSwap treated as 100 %)
22
+ ---
23
+ **Mechanics.** On a constant-product AMM (Raydium CPMM, PumpSwap, Meteora DAMM) the liquidity provider receives LP tokens that represent a pro-rata claim on both vaults; "the LP fee is never explicitly tracked — it remains in the vault as a reserve that all LP tokens proportionally own" (Raydium CPMM docs). Whoever holds the LP tokens can withdraw the pool's SOL and tokens. A "rug pull" in the narrow sense is the LP holder withdrawing liquidity, which drives the price to ~0 for everyone else.
24
+
25
+ **Burn:** sending the LP tokens to an unrecoverable state (SPL `Burn`). PumpSwap's `Pool.lp_supply` is documented as "total LP supply excluding user burns", so a burned LP shows up as reduced supply. Burned liquidity can never be withdrawn, but it also cannot be migrated or upgraded.
26
+
27
+ **Lock:** LP tokens held by a locker program or a vesting position with a release date. Meteora DBC graduations distribute DAMM v2 liquidity into positions that are *unlocked*, *permanently locked* ("cannot be withdrawn; earns trading fees forever") or *vesting* ("cliff + linear or periodic releases"), and "the config must ensure at least 10 % of liquidity is permanently locked on day 1 for the standard keeper to migrate the pool". A lock has an expiry; a permanent lock does not.
28
+
29
+ **What the number means in dexterm:** `rugcheck.lpLockedPct` is RugCheck's estimate of the share of LP that is burned or locked. SPEC §3.6: pump.fun/PumpSwap pools are treated as 100 % because migrated liquidity is not held by the creator. Anything below 100 % on a Raydium/Meteora pair means someone can pull that share.
30
+
31
+ **Judgement (maintainers, reviewed 2026-10-15):** "LP locked" is necessary, not sufficient. A 100 % locked LP with a live freeze authority is still a honeypot; a locked LP with 60 % supply in the deployer's cluster can still be dumped into the pool. Read LP together with authorities (`mint-freeze-authority`) and concentration (`holder-concentration`). A lock with a short expiry is a timer, not safety.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: metadata-and-copycats
3
+ title: Token metadata, mutable names and why the ticker is not an identifier
4
+ tags:
5
+ - metaplex
6
+ - metadata
7
+ - copycat
8
+ - ticker
9
+ - symbol
10
+ - mint
11
+ date: 2026-10-06
12
+ confidence: high
13
+ owner: maintainers
14
+ origin: primary-doc
15
+ reviewed_by: maintainers@2026-10-15
16
+ sources:
17
+ - https://www.metaplex.com/docs/smart-contracts/token-metadata (retrieved 2026-09-30 into solana-launchpad/docs/metaplex/token-metadata-overview.md)
18
+ - https://github.com/pump-fun/pump-public-docs (create(user, name, symbol, uri, creator))
19
+ - dexterm SPEC.md §5.3 CL-05 analogue (tools take mints; symbol resolution prefers the row on screen)
20
+ ---
21
+ **Where the name comes from.** A mint account holds supply, decimals and authorities, nothing human-readable. The Metaplex Token Metadata program attaches a **Metadata account** (PDA from the mint) with `name`, `symbol`, a `URI` to off-chain JSON (image, description, socials), a creators list with a `Verified` flag, and an `Is Mutable` attribute. pump.fun's `create(user, name, symbol, uri, creator)` writes these at creation.
22
+
23
+ **Consequences.**
24
+ - **Symbols are free text.** Anyone can create a token with the same name and symbol as a well-known one. There can be hundreds of mints with the same symbol; the mint address is the only identifier. dexterm's `get_token` returns *candidates* when a symbol is ambiguous and the skills must disambiguate by mint (or by the row on screen) before saying anything.
25
+ - **Mutable metadata** (`Is Mutable` true) lets the update authority rename and re-image a token after it has been listed, which is how a dead mint is recycled into a trending name. Immutable metadata cannot be changed on-chain; the off-chain JSON stays fixed only if the URI also points at permanent storage (such as Arweave). GoPlus reports `metadata_mutable`.
26
+ - **Off-chain URI content is untrusted text.** The description, socials and image live wherever the URI points; they can be changed if the URI host is mutable, and they are the main carrier of prompt-injection text. dexterm firewalls every such string (SPEC §5.3) and the analyst treats `<untrusted>` blocks as data.
27
+ - **Verified creators** are signed by the creator key; an unverified creator entry is a claim, not a proof.
28
+
29
+ **Rule for skills:** identify a token by mint in every output (`mint` field in the schema); never by symbol alone. When the user names a symbol and the tool returns more than one candidate, return `AMBIGUOUS` with the candidates instead of guessing.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: mint-freeze-authority
3
+ title: Mint authority and freeze authority (SPL Token)
4
+ tags:
5
+ - spl-token
6
+ - mint-authority
7
+ - freeze-authority
8
+ - honeypot
9
+ - rug
10
+ date: 2026-10-06
11
+ confidence: high
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://spl.solana.com/token (retrieved 2026-09-30 into solana-launchpad/docs/spl-token/spl-token-overview.md)
17
+ - https://github.com/solana-program/token (program source; InitializeMint, MintTo, FreezeAccount, SetAuthority)
18
+ - dexterm SPEC.md §3.3 Audit model (mintAuthority/freezeAuthority booleans)
19
+ ---
20
+ **Mechanics (from the SPL Token program).** A token type is a `Mint` account created with `InitializeMint`. Two optional authorities live on the mint:
21
+ - **mint authority**: can call `MintTo` and create new supply at will. It can be revoked by `SetAuthority` to `None`, after which supply is fixed forever. Tokens "when initially created by spl-token have no supply"; all supply is minted by this authority.
22
+ - **freeze authority**: "The Mint may also contain a `freeze_authority` which can be used to issue `FreezeAccount` instructions." A frozen token account cannot transfer or sell. It can also be revoked, and cannot be re-added once revoked.
23
+
24
+ Both are fields on the mint account, readable with `getAccountInfo(mint, jsonParsed)` (`mintAuthority`, `freezeAuthority`, `supply`, `decimals`). Jupiter's `audit` and GoPlus's `mintable`/`freezable` flags are derived from the same fields.
25
+
26
+ **Why a trader cares.**
27
+ - A live **mint authority** means the supply can be inflated at any time (mint-and-dump). Any market cap or "% of supply" number is provisional.
28
+ - A live **freeze authority** is the honeypot primitive on Solana: the authority can freeze buyers' token accounts selectively so they cannot sell while the deployer's cluster can. It is also used legitimately by some stablecoins and regulated assets, so it is a red flag on a memecoin, not proof of fraud.
29
+ - Launchpads differ: pump.fun creates coins with both authorities revoked by design (see `pump-bonding-curve`); tokens created by hand or through generic token creators on Raydium/Meteora can keep either authority.
30
+
31
+ **What this entry does NOT tell you:** whether *this* token's authorities are revoked. That is a per-mint fact; read it from `get_token.audit.mintAuthority` / `.freezeAuthority` (true = still enabled) or `rugcheck.risks`.
@@ -0,0 +1,32 @@
1
+ ---
2
+ id: narrative-lifecycle
3
+ title: Narrative lifecycle (DRAFT, needs maintainer review before any skill may cite it)
4
+ tags:
5
+ - narrative
6
+ - meta
7
+ - lifecycle
8
+ - trending
9
+ - judgement
10
+ date: 2026-10-06
11
+ confidence: low
12
+ owner: maintainers
13
+ origin: maintainer-draft
14
+ reviewed_by: none
15
+ status: draft-unreviewed
16
+ sources:
17
+ - dexterm research/data-firehose-inventory-2026-10-06.md §1c (Jupiter toptrending/toporganicscore, DexScreener boosts/profiles, GeckoTerminal trending_pools, DefiLlama venue share)
18
+ - dexterm ROADMAP.md north-star scenario (narrative summary, volume per narrative)
19
+ ---
20
+ **Status.** This is the one entry in the KB that is trading judgement rather than protocol mechanics. It is a scaffold for the maintainers to replace; `confidence: low`, `status: draft-unreviewed`. The `narrative-scan` and `daily-digest` routines must refuse to cite it until `reviewed_by` is set.
21
+
22
+ **What can be measured (facts, from tools):** which tokens are on Jupiter's `toptrending/{5m,1h,6h,24h}` and `toporganicscore` lists; DexScreener boosts and profiles (paid promotion); GeckoTerminal `trending_pools` and `new_pools` with DEX counts; per-DEX 24 h volume from DefiLlama; the *share of new launches whose name/description matches a theme* (string match over firewalled text); SOL funding/OI from Hyperliquid/OKX as the macro backdrop.
23
+
24
+ **Scaffold of the lifecycle (to be rewritten by the maintainers):**
25
+ 1. *Spark*: a real-world event or one runner; a handful of mints with the theme appear within minutes.
26
+ 2. *Derivative wave*: dozens of same-theme launches; most are copycats; volume concentrates in one or two leaders.
27
+ 3. *Peak*: trending lists are dominated by the theme; late derivatives launch into falling attention.
28
+ 4. *Rotation*: volume per theme falls, leaders fade or hold, a new spark begins.
29
+
30
+ **What a narrative routine may output:** counts and volumes per theme with the tool and data age, the leaders by organic score, and *proposals* (watch-list adds, alerts) for the user to confirm. It may not say that a theme "will run".
31
+
32
+ **Open questions:** what counts as a theme match; the minimum number of same-theme launches before it is a narrative; whether DexScreener boosts count as a negative signal; which X lists (if any) seed the theme detector once 1289 lands.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: pump-bonding-curve
3
+ title: pump.fun bonding curve mechanics
4
+ tags:
5
+ - pump.fun
6
+ - bonding-curve
7
+ - graduation
8
+ - fees
9
+ date: 2026-10-06
10
+ confidence: high
11
+ owner: maintainers
12
+ origin: primary-doc
13
+ reviewed_by: maintainers@2026-10-15
14
+ sources:
15
+ - https://github.com/pump-fun/pump-public-docs (README, retrieved 2026-10-01 into solana-launchpad/docs/pump-fun/docs-overview.md)
16
+ - https://github.com/pump-fun/pump-public-docs/blob/main/docs/PUMP_PROGRAM_README.md (solana-launchpad/docs/pump-fun/fees.md)
17
+ ---
18
+ **What it is.** The Pump program (`6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P`) creates an SPL coin that is instantly tradeable on a constant-product curve with *synthetic* (virtual) reserves, Uniswap-v2 style. When the real token reserve is sold out the curve is `complete` and liquidity migrates to PumpSwap.
19
+
20
+ **Numbers from the on-chain `Global` config (PDA `4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf`), as documented when retrieved 2026-10-01 (the config can change; a tool reads the live values):**
21
+ - `initial_virtual_token_reserves` 1,073,000,000,000,000; `initial_virtual_sol_reserves` 30,000,000,000 lamports (30 SOL); `initial_real_token_reserves` 793,100,000,000,000; `token_total_supply` 1,000,000,000,000,000 (1 B tokens at 6 decimals).
22
+ - `fee_basis_points` 100 = **1 %** on every buy and sell, paid to one of 8 fee-recipient accounts. A creator fee, when the coin has one, comes on top (the protocol sets its rate for SOL- and USDC-paired coins).
23
+ - `pool_migration_fee` 15,000,001 lamports (~0.015 SOL) charged by `migrate`.
24
+
25
+ **Per-coin `BondingCurve` account** (PDA seeds `["bonding-curve", mint]`): `virtual_token_reserves`, `virtual_sol_reserves` (pricing), `real_token_reserves`, `real_sol_reserves`, `complete` (true when `real_token_reserves == 0`), `creator` (accrues creator fees), `quote_mint` (default pubkey for SOL-paired coins), `is_holder_reward`.
26
+
27
+ **Instructions:** `create`, `buy(amount, max_sol_cost)`, `sell(amount, min_sol_output)`, the v2 variants (`buy_v2`, `sell_v2`, `buy_exact_quote_in_v2`, all accounts mandatory), and `migrate(user, mint)` which is **permissionless**: anyone can trigger the migration once the curve is complete.
28
+
29
+ **How to read "bonding progress":** progress = 1 − `real_token_reserves` / `initial_real_token_reserves`. The curve's price at any moment is `virtual_sol_reserves / virtual_token_reserves`. "Graduation" = `complete` flipped to true, followed by a `migrate` instruction that creates the PumpSwap pool (see `pumpswap-migration`).
30
+
31
+ **What a trader can and cannot infer:** a pump.fun coin is created with its mint and freeze authority revoked (the program creates it that way; verify it on the mint account with a tool), and pre-graduation there is no LP token to lock or burn because liquidity lives in the curve PDA. The risks on the curve are **holder concentration, bundled first buys and the creator's behaviour**, not authorities or LP.
32
+
33
+ **Tool mapping in dexterm:** `get_token` (launchpad, age, mcap), `get_dev_history` (creator, bundle share), `get_holders`. The `pumpfun` frontend API (S8) is undocumented and feature-flagged; the compliant source for curve state is the on-chain account via Helius.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: pumpswap-migration
3
+ title: PumpSwap migration and post-graduation pools
4
+ tags:
5
+ - pump.fun
6
+ - pumpswap
7
+ - migration
8
+ - graduation
9
+ - lp
10
+ date: 2026-10-06
11
+ confidence: high
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://github.com/pump-fun/pump-public-docs/blob/main/docs/PUMP_SWAP_README.md (retrieved 2026-10-01 into solana-launchpad/docs/pump-fun/pumpswap-overview.md)
17
+ - https://github.com/pump-fun/pump-public-docs/blob/main/docs/PUMP_PROGRAM_README.md (fees)
18
+ ---
19
+ **What it is.** PumpSwap (`pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA`) is pump.fun's own constant-product AMM. A completed bonding curve migrates here automatically (the `migrate` instruction on the Pump program is permissionless). Pools created by `migrate` use `CANONICAL_POOL_INDEX == 0`.
20
+
21
+ **Fees (GlobalConfig PDA `ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw`):** `lp_fee_basis_points` 20 (0.20 %) + `protocol_fee_basis_points` 5 (0.05 %) = **0.25 % per swap**, plus the coin-creator fee where one applies (the protocol sets its rate); no fee on deposit/withdraw. Protocol fees go to one of 8 recipient pubkeys chosen at random per tx.
22
+
23
+ **Pool account** (PDA seeds `["pool", index, creator, baseMint, quoteMint]`): `base_mint`, `quote_mint`, `lp_mint` (PDA `["pool_lp_mint", pool]`), vault ATAs, `lp_supply` (**total LP supply excluding user burns**), `coin_creator` (accrues creator fees), `virtual_quote_reserves` (i128; the docs, retrieved 2026-10-01, say it can be negative "starting September 30"; quoting must use `pool_quote_token_account.amount + virtual_quote_reserves`).
24
+
25
+ **What "graduated" means for risk:** after migration the liquidity is a real AMM pool with an LP mint. Because `lp_supply` excludes burns, a pool whose LP has been burned shows a reduced `lp_supply`; RugCheck's `lpLockedPct` for pump.fun/PumpSwap pairs is treated as 100 % in dexterm (SPEC §3.6) because the migrated liquidity is not held by the creator. The creator still earns `coin_creator` fees on every swap, which is an incentive to keep the pool trading, and also an incentive to launch many coins.
26
+
27
+ **Holder rewards:** when `is_holder_reward == true`, the creator fee is distributed to holders instead; `BuyEvent`/`SellEvent` carry `holder_rewards_bps`.
28
+
29
+ **Tool mapping:** `get_token.pair.dex == "pumpswap"` identifies a graduated coin; `rugcheck.lpLockedPct`; the pool address is `pair.pairAddress`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ id: sniping-and-snipers
3
+ title: Sniping: how first-block buyers get in and how dexterm counts them
4
+ tags:
5
+ - sniping
6
+ - snipers
7
+ - launch
8
+ - forensics
9
+ - pumpportal
10
+ date: 2026-10-06
11
+ confidence: medium
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - dexterm SPEC.md §3.6 (Snipers definition)
17
+ - dexterm research/data-firehose-inventory-2026-10-06.md (PumpPortal create stream median 65 ms before Helius logs; Helius logsSubscribe metering)
18
+ - https://docs.meteora.ag/core-products/dbc/fees/rate-limiter.md (deprecated buy-size fee)
19
+ - https://docs.raydium.io/products/launchlab/bonding-curve.md (linear curve makes early buys cheap)
20
+ ---
21
+ **Definition used by dexterm (SPEC §3.6):** snipers = distinct wallets that bought in the token's **first 3 blocks** (or first 2 s on a bonding curve). Needs parsed transaction history (Helius `getTransactionsForAddress`, Tier 1).
22
+
23
+ **How snipers get there.** Bots subscribe to create events: PumpPortal's `subscribeNewToken` (free; in the 2026-10-06 probe its create messages arrived a median 65 ms *before* Helius `logsSubscribe` on a loaded socket), or `logsSubscribe` on the launchpad program, then submit a buy, often through a Jito bundle for ordering (see `jito-bundles`). On a constant-product curve with virtual reserves the first buys are the cheapest tokens the curve will ever sell; on a linear LaunchLab curve "early buyers pay close to zero".
24
+
25
+ **Protocol-level deterrents.** Meteora DBC had a *rate limiter* fee that rose with buy size for up to 12 h; it is deprecated for new configs, replaced by time-decaying fee schedulers (high starting fee that decays), so a launch's anti-snipe protection is now "fee is high for the first minutes", if the partner configured it at all. pump.fun's documented curve fee is a flat 1 % (plus any creator fee), with no size- or time-based part.
26
+
27
+ **Difference from bundling.** A sniper is an *outside* bot racing the public; a bundle is the *deployer's own* wallets inserted atomically. The chain shows both as early buys; funding-source clustering separates them (a sniper bot's wallets are funded by the bot operator, not by the creator).
28
+
29
+ **Judgement (maintainers, reviewed 2026-10-15; rough heuristics, not yet measured):** a few snipers (2–5) on a popular launch are common and often sell within minutes; a dozen plus a high bundled share means the early float is in professional hands and the first candle is theirs to sell into. The useful number is sniper share *still held* at the time of analysis, not the count at launch.
@@ -0,0 +1,32 @@
1
+ ---
2
+ id: token2022-extensions-risk
3
+ title: Token-2022 extensions a trader must check
4
+ tags:
5
+ - token-2022
6
+ - transfer-fee
7
+ - transfer-hook
8
+ - permanent-delegate
9
+ - honeypot
10
+ date: 2026-10-06
11
+ confidence: high
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://spl.solana.com/token-2022/extensions (retrieved 2026-09-30 into solana-launchpad/docs/spl-token/token2022-extensions.md)
17
+ - Token-2022 program id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb (solana-launchpad/docs/INDEX.md gap note)
18
+ ---
19
+ Token-2022 (`TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`) adds extensions to mints and token accounts. A token's program id tells you which rules apply (`rugcheck.tokenProgram`, GoPlus fields). Extensions that change what a holder can do:
20
+
21
+ | Extension | What the docs say | Trader reading |
22
+ |---|---|---|
23
+ | **Transfer fee** | "On every transfer, some amount is withheld on the recipient account, untouchable by the recipient"; fee in basis points plus a maximum fee; a *withdraw withheld authority* can collect it. | A tax on every trade. Check the bps and who holds the withheld-withdraw authority. A fee authority can raise the fee later. |
24
+ | **Default account state** | "can force all new token accounts to be frozen. Users must interact with some service to unfreeze." | Buyers start frozen: a honeypot by construction unless the project unfreezes everyone. |
25
+ | **Permanent delegate** | "unlimited delegate privileges over any account for that mint, meaning that it can burn or transfer any amount of tokens." | The issuer can take tokens out of your wallet. Disqualifying for a memecoin. |
26
+ | **Transfer hook** | Token-2022 "calls into the program" the creator deployed on every transfer. | Arbitrary code on every transfer: can block sells, whitelist wallets, or tax. Treat it as unknown until you have read what the hook program does; an upgradeable hook can change later. |
27
+ | **Non-transferable** | "soul-bound" tokens; the owner can still burn and close. | Cannot be sold at all. |
28
+ | **Mint close authority** | the mint can be closed; "closing and reinitializing a mint with different extensions can lead to problems if any token accounts exist". | Rare on memecoins. A mint can only be closed while its supply is zero, so it cannot be closed under holders who still hold tokens; the risk is to empty token accounts left behind if it is closed and re-created. |
29
+ | **Interest-bearing** | "entirely cosmetic"; no new tokens are created. | UI balance grows, value does not. |
30
+ | **CPI guard, immutable owner, required memo** | protections for the account owner. | Neutral. |
31
+
32
+ **Mapping:** GoPlus Solana token-security returns `transfer_fee`, `transfer_hook`, `default_account_state`, `non_transferable`, `balance_mutable_authority`, `closable`; dexterm surfaces the dangerous ones through `rugcheck.risks` and the Audit record. A legacy SPL Token (`TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`) has none of these: only mint and freeze authority matter (see `mint-freeze-authority`).
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: wash-trading-fake-volume
3
+ title: Wash trading, fake volume and the organic score
4
+ tags:
5
+ - wash-trading
6
+ - fake-volume
7
+ - organic-score
8
+ - volume
9
+ - jupiter
10
+ date: 2026-10-06
11
+ confidence: medium
12
+ owner: maintainers
13
+ origin: primary-doc
14
+ reviewed_by: maintainers@2026-10-15
15
+ sources:
16
+ - https://developers.jup.ag/docs/tokens (retrieved 2026-09-30 into solana-launchpad/docs/jupiter/tokens-api.md; Organic Score section)
17
+ - https://developers.jup.ag/blog/what-is-organic-score (linked from the Tokens API doc)
18
+ - dexterm SPEC.md §3.3 Stats (numTraders, numNetBuyers, buyVol/sellVol per window)
19
+ ---
20
+ **What the aggregator measures.** Jupiter's Organic Score (0–100) "measures how genuine a token's trading activity is, filtering out bots, snipers, and copy-trading tools"; it combines organic volume, organic holders, organic traders and organic buyers after removing wallets that trade through known bot channels. The docs' own caveats: it is **relative, not absolute** (normalised against the ecosystem; SOL and USDC sit near 100), **early growth counts most** (10 → 100 organic buyers moves it far more than 10,000 → 10,100), and the raw score beats the `high/medium/low` label. dexterm shows the raw score (≥ 70 green, 40–69 amber, < 40 red; SPEC §3.6).
21
+
22
+ **How volume is faked.** Two or more wallets controlled by one party buy and sell to each other; each round trip pays the trading fee (1 % on a pump.fun curve and 0.25 % on PumpSwap, each plus any creator fee; 0.25 % on the common Raydium CPMM tier) plus network fees and little else, so "$1 M volume" costs roughly $2,500 on a 0.25 % pool and about $10,000 on a 1 % curve. The goal is to appear on volume-sorted screeners and trending lists. Volume-boost services sell exactly this.
23
+
24
+ **Signals that separate it (maintainers, reviewed 2026-10-15):**
25
+ - `get_trades.top2WalletVolumeSharePct` high (two wallets are most of the tape) and `distinctWallets` low relative to `count`.
26
+ - `stats.perWindow.h1.numTraders` small while `pair.volume.h1` is large: volume per trader is far above a retail ticket.
27
+ - `buyVol ≈ sellVol` to the dollar across windows with no price trend: ping-pong.
28
+ - Organic score low while raw volume ranks high.
29
+ - Candle volume evenly spaced in time (bot cadence) rather than bursty.
30
+
31
+ **What it is not:** high volume from a few big wallets that are *not* round-tripping (a whale accumulating) looks similar on share-of-volume alone; the buy/sell symmetry and price response distinguish them.
32
+
33
+ **Rule:** the KB describes the pattern; whether *this* token shows it comes from `get_trades`, `get_token.stats` and `get_candles` with their data ages.