dexterm-cli 0.1.3 → 0.1.5

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 (259) hide show
  1. package/dist/packages/cli/assets/claude/analyst-system.md +2 -1
  2. package/dist/packages/cli/src/agent-paper.js +60 -0
  3. package/dist/packages/cli/src/analyst/backend.js +183 -0
  4. package/dist/packages/cli/src/analyst/codex.js +301 -0
  5. package/dist/packages/cli/src/analyst/session.js +9 -2
  6. package/dist/packages/cli/src/app-help-gen.js +18 -9
  7. package/dist/packages/cli/src/docs-kb-gen.js +228 -0
  8. package/dist/packages/cli/src/doctor.js +80 -9
  9. package/dist/packages/cli/src/index.js +1 -1
  10. package/dist/packages/cli/src/kb-skill-cmd.js +3 -0
  11. package/dist/packages/cli/src/larp-detected.js +209 -0
  12. package/dist/packages/cli/src/live/dev-history.js +99 -0
  13. package/dist/packages/cli/src/live/newpairs.js +12 -0
  14. package/dist/packages/cli/src/live/screens/token-live.js +11 -1
  15. package/dist/packages/cli/src/live/token.js +39 -1
  16. package/dist/packages/cli/src/main.js +260 -7
  17. package/dist/packages/cli/src/mcp-follow.js +255 -0
  18. package/dist/packages/cli/src/record-cmd.js +2 -0
  19. package/dist/packages/cli/src/rules.js +25 -2
  20. package/dist/packages/cli/src/screens/analyst-session.js +5 -3
  21. package/dist/packages/cli/src/screens/analyst.js +4 -3
  22. package/dist/packages/cli/src/spectate-cmd.js +14 -3
  23. package/dist/packages/cli/src/version.js +1 -1
  24. package/dist/packages/cli/src/x-cmd.js +11 -5
  25. package/dist/packages/custom/src/rules.js +2 -2
  26. package/dist/packages/custom/src/schema.js +5 -1
  27. package/dist/packages/data/src/fixtures.js +28 -6
  28. package/dist/packages/data/src/index.js +3 -0
  29. package/dist/packages/data/src/sources/jupiter.js +1 -0
  30. package/dist/packages/data/src/trade/agent/paper-desk.js +336 -0
  31. package/dist/packages/data/src/trade/agent/rendezvous.js +161 -0
  32. package/dist/packages/mcp/assets/kb/app-help/agent-paper-trade.md +38 -0
  33. package/dist/packages/mcp/assets/kb/app-help/ask-the-analyst.md +1 -1
  34. package/dist/packages/mcp/assets/kb/app-help/connect-an-agent.md +1 -1
  35. package/dist/packages/mcp/assets/kb/app-help/dev-history.md +32 -0
  36. package/dist/packages/mcp/assets/kb/app-help/paper-trade.md +1 -1
  37. package/dist/packages/mcp/assets/kb/app-help/screen-positions.md +4 -1
  38. package/dist/packages/mcp/assets/kb/app-help/screen-token.md +1 -0
  39. package/dist/packages/mcp/assets/kb/app-help/spectate-an-agent.md +4 -1
  40. package/dist/packages/mcp/assets/kb/app-help/use-codex-analyst.md +31 -0
  41. package/dist/packages/mcp/assets/kb/docs/docs-agents-agent-paper-trading.md +50 -0
  42. package/dist/packages/mcp/assets/kb/docs/docs-agents-capability-tiers-enforced-server-side.md +38 -0
  43. package/dist/packages/mcp/assets/kb/docs/docs-agents-directory-metadata-prepared-not-submitted.md +36 -0
  44. package/dist/packages/mcp/assets/kb/docs/docs-agents-install-in-one-command.md +51 -0
  45. package/dist/packages/mcp/assets/kb/docs/docs-agents-per-agent-mandates.md +35 -0
  46. package/dist/packages/mcp/assets/kb/docs/docs-agents-recipes.md +43 -0
  47. package/dist/packages/mcp/assets/kb/docs/docs-agents-red-team-coverage.md +30 -0
  48. package/dist/packages/mcp/assets/kb/docs/docs-agents-two-ways-to-connect.md +37 -0
  49. package/dist/packages/mcp/assets/kb/docs/docs-agents-untrusted-by-default.md +36 -0
  50. package/dist/packages/mcp/assets/kb/docs/docs-agents-watch-an-agent-work-spectator-view.md +35 -0
  51. package/dist/packages/mcp/assets/kb/docs/docs-agents.md +26 -0
  52. package/dist/packages/mcp/assets/kb/docs/docs-analyst-answer-style.md +35 -0
  53. package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +25 -0
  54. package/dist/packages/mcp/assets/kb/docs/docs-analyst-it-knows-the-app.md +33 -0
  55. package/dist/packages/mcp/assets/kb/docs/docs-analyst-mcp-tools.md +33 -0
  56. package/dist/packages/mcp/assets/kb/docs/docs-analyst-plain-language-filters.md +25 -0
  57. package/dist/packages/mcp/assets/kb/docs/docs-analyst-skills.md +31 -0
  58. package/dist/packages/mcp/assets/kb/docs/docs-analyst-starting-a-run.md +33 -0
  59. package/dist/packages/mcp/assets/kb/docs/docs-analyst-use-codex-instead-of-claude.md +35 -0
  60. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-can-change-three-tiers.md +33 -0
  61. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-sees.md +26 -0
  62. package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-the-analyst-can-never-do.md +31 -0
  63. package/dist/packages/mcp/assets/kb/docs/docs-analyst.md +23 -0
  64. package/dist/packages/mcp/assets/kb/docs/docs-beginners-1-start-dexterm.md +35 -0
  65. package/dist/packages/mcp/assets/kb/docs/docs-beginners-2-open-a-real-coin-by-contract-address.md +43 -0
  66. package/dist/packages/mcp/assets/kb/docs/docs-beginners-3-read-the-safety-panel.md +40 -0
  67. package/dist/packages/mcp/assets/kb/docs/docs-beginners-4-read-the-holder-panel.md +35 -0
  68. package/dist/packages/mcp/assets/kb/docs/docs-beginners-5-optionally-ask-the-analyst.md +39 -0
  69. package/dist/packages/mcp/assets/kb/docs/docs-beginners-6-export-or-share-what-you-see.md +34 -0
  70. package/dist/packages/mcp/assets/kb/docs/docs-beginners-7-quit-safely.md +34 -0
  71. package/dist/packages/mcp/assets/kb/docs/docs-beginners-before-any-experimental-trading.md +33 -0
  72. package/dist/packages/mcp/assets/kb/docs/docs-beginners-check-the-installation-with-doctor.md +38 -0
  73. package/dist/packages/mcp/assets/kb/docs/docs-beginners-choose-a-setup-path.md +30 -0
  74. package/dist/packages/mcp/assets/kb/docs/docs-beginners-common-mistakes-and-recovery.md +30 -0
  75. package/dist/packages/mcp/assets/kb/docs/docs-beginners-copy-and-paste-without-surprises.md +39 -0
  76. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-data-says-unavailable-stale-or-rate-limited.md +35 -0
  77. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-dexterm-says-command-not-found.md +36 -0
  78. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-optional-help-is-unavailable.md +33 -0
  79. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-paste-does-nothing-or-pastes-twice.md +35 -0
  80. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-the-screen-looks-broken.md +33 -0
  81. package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-you-typed-the-wrong-thing.md +33 -0
  82. package/dist/packages/mcp/assets/kb/docs/docs-beginners-install-node-js-first.md +36 -0
  83. package/dist/packages/mcp/assets/kb/docs/docs-beginners-linux.md +30 -0
  84. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-homebrew.md +46 -0
  85. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-or-linux-npm.md +39 -0
  86. package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos.md +30 -0
  87. package/dist/packages/mcp/assets/kb/docs/docs-beginners-open-the-terminal.md +29 -0
  88. package/dist/packages/mcp/assets/kb/docs/docs-beginners-reopen-dexterm-later.md +36 -0
  89. package/dist/packages/mcp/assets/kb/docs/docs-beginners-ten-minute-first-win.md +30 -0
  90. package/dist/packages/mcp/assets/kb/docs/docs-beginners-terminal-shell-prompt-command-output-and-path.md +40 -0
  91. package/dist/packages/mcp/assets/kb/docs/docs-beginners-where-to-go-next.md +32 -0
  92. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +29 -0
  93. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +39 -0
  94. package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows.md +30 -0
  95. package/dist/packages/mcp/assets/kb/docs/docs-beginners.md +29 -0
  96. package/dist/packages/mcp/assets/kb/docs/docs-cli-dexterm-help.md +31 -0
  97. package/dist/packages/mcp/assets/kb/docs/docs-cli-filter-grammar.md +37 -0
  98. package/dist/packages/mcp/assets/kb/docs/docs-cli-flags.md +27 -0
  99. package/dist/packages/mcp/assets/kb/docs/docs-cli-invocations.md +43 -0
  100. package/dist/packages/mcp/assets/kb/docs/docs-cli-presets.md +26 -0
  101. package/dist/packages/mcp/assets/kb/docs/docs-cli-scan-commands.md +26 -0
  102. package/dist/packages/mcp/assets/kb/docs/docs-cli-sort-keys.md +27 -0
  103. package/dist/packages/mcp/assets/kb/docs/docs-cli-subcommands.md +26 -0
  104. package/dist/packages/mcp/assets/kb/docs/docs-cli.md +25 -0
  105. package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +47 -0
  106. package/dist/packages/mcp/assets/kb/docs/docs-configuration-files-on-disk.md +41 -0
  107. package/dist/packages/mcp/assets/kb/docs/docs-configuration-headless-recorder-dexterm-record.md +44 -0
  108. package/dist/packages/mcp/assets/kb/docs/docs-configuration-history-recorder.md +33 -0
  109. package/dist/packages/mcp/assets/kb/docs/docs-configuration-packs.md +38 -0
  110. package/dist/packages/mcp/assets/kb/docs/docs-configuration-price-display-mode.md +35 -0
  111. package/dist/packages/mcp/assets/kb/docs/docs-configuration-push-alerts-and-dexterm-watch.md +45 -0
  112. package/dist/packages/mcp/assets/kb/docs/docs-configuration-rules-engine.md +37 -0
  113. package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-analyst-s-launch.md +29 -0
  114. package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-optional-free-rpc-key.md +42 -0
  115. package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-keymaps.md +29 -0
  116. package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-look.md +27 -0
  117. package/dist/packages/mcp/assets/kb/docs/docs-configuration-widgets.md +31 -0
  118. package/dist/packages/mcp/assets/kb/docs/docs-configuration-workspaces.md +30 -0
  119. package/dist/packages/mcp/assets/kb/docs/docs-configuration.md +25 -0
  120. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-1-follow-a-wallet-see-what-it-does.md +51 -0
  121. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-2-the-one-key-mirror-ticket-a-proposal.md +56 -0
  122. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-3-capped-auto-mirror-default-off-less.md +47 -0
  123. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-what-is-proven-what-is-not.md +36 -0
  124. package/dist/packages/mcp/assets/kb/docs/docs-copy-trading.md +31 -0
  125. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-cache.md +32 -0
  126. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-health-registry.md +29 -0
  127. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-rate-limits-and-pacing.md +32 -0
  128. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-request-budget-meter.md +30 -0
  129. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-sources.md +47 -0
  130. package/dist/packages/mcp/assets/kb/docs/docs-data-sources-the-helius-credit-meter.md +30 -0
  131. package/dist/packages/mcp/assets/kb/docs/docs-data-sources.md +27 -0
  132. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-dexterm-doctor.md +33 -0
  133. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-first-run.md +34 -0
  134. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +81 -0
  135. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-next.md +32 -0
  136. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +35 -0
  137. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-running-the-tests.md +34 -0
  138. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +44 -0
  139. package/dist/packages/mcp/assets/kb/docs/docs-getting-started-updating.md +28 -0
  140. package/dist/packages/mcp/assets/kb/docs/docs-getting-started.md +27 -0
  141. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-global-keys.md +26 -0
  142. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-keys-handled-by-the-loop.md +29 -0
  143. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-per-screen-keys.md +26 -0
  144. package/dist/packages/mcp/assets/kb/docs/docs-keyboard-what-shows.md +27 -0
  145. package/dist/packages/mcp/assets/kb/docs/docs-keyboard.md +26 -0
  146. package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +53 -0
  147. package/dist/packages/mcp/assets/kb/docs/docs-larp-open-link-keys.md +26 -0
  148. package/dist/packages/mcp/assets/kb/docs/docs-larp-paste-a-coin-on-the-web.md +35 -0
  149. package/dist/packages/mcp/assets/kb/docs/docs-larp-the-verdict.md +29 -0
  150. package/dist/packages/mcp/assets/kb/docs/docs-larp-timestamped-follow-up-drafts.md +35 -0
  151. package/dist/packages/mcp/assets/kb/docs/docs-larp-what-it-looks-at.md +33 -0
  152. package/dist/packages/mcp/assets/kb/docs/docs-larp.md +24 -0
  153. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-degraded-states-you-will-see.md +36 -0
  154. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-free-vs-paid-x-api-tiers-your-bill-your-limits.md +37 -0
  155. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-kol-lists-and-the-per-handle-filter.md +28 -0
  156. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-tests.md +25 -0
  157. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-is-read-and-when.md +35 -0
  158. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-you-set-up-once.md +40 -0
  159. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-where-the-tokens-live.md +27 -0
  160. package/dist/packages/mcp/assets/kb/docs/docs-login-with-x.md +26 -0
  161. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-a-live-ticket.md +42 -0
  162. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-before-you-press-size-vs-caps.md +34 -0
  163. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-devnet-signer-mainnet-token.md +35 -0
  164. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-jupiter-rate-limits.md +33 -0
  165. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-letting-an-agent-paper-trade-experimental.md +32 -0
  166. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-link-a-wallet.md +32 -0
  167. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-live-trading-devnet-first.md +30 -0
  168. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-mainnet.md +31 -0
  169. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-order-plans-and-standing-mandates.md +44 -0
  170. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-panic.md +31 -0
  171. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-pnl-cards.md +37 -0
  172. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-live-fire-path-devnet-the-fast-wallet.md +41 -0
  173. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-signer-process.md +34 -0
  174. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-ticket.md +31 -0
  175. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-wallet.md +34 -0
  176. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-trade-moments.md +32 -0
  177. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +37 -0
  178. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-your-first-live-trade.md +41 -0
  179. package/dist/packages/mcp/assets/kb/docs/docs-paper-trading.md +32 -0
  180. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-bubble-map-popup.md +27 -0
  181. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-build-the-native-window.md +33 -0
  182. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-config-dexterm-popup-json.md +38 -0
  183. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-docking-macos.md +27 -0
  184. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-keys-in-the-popup.md +30 -0
  185. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-market-cap-axis.md +28 -0
  186. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-security-model.md +33 -0
  187. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-token-and-feeds-popups.md +38 -0
  188. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-what-it-shows.md +30 -0
  189. package/dist/packages/mcp/assets/kb/docs/docs-popup-chart.md +27 -0
  190. package/dist/packages/mcp/assets/kb/docs/docs-scan-cost-control.md +28 -0
  191. package/dist/packages/mcp/assets/kb/docs/docs-scan-keys-flag-command.md +34 -0
  192. package/dist/packages/mcp/assets/kb/docs/docs-scan-safety-four-layers.md +32 -0
  193. package/dist/packages/mcp/assets/kb/docs/docs-scan-states.md +27 -0
  194. package/dist/packages/mcp/assets/kb/docs/docs-scan-the-read.md +25 -0
  195. package/dist/packages/mcp/assets/kb/docs/docs-scan-triggers-and-score.md +37 -0
  196. package/dist/packages/mcp/assets/kb/docs/docs-scan.md +24 -0
  197. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-canary.md +30 -0
  198. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-task-1401-evaluation.md +35 -0
  199. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-latest-skill-care-run.md +33 -0
  200. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-links-only-larp-baseline-where-it-is-weak.md +35 -0
  201. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-not-measured.md +29 -0
  202. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-rug-verdict-rules.md +33 -0
  203. package/dist/packages/mcp/assets/kb/docs/docs-scorecard-source-and-rebuild.md +31 -0
  204. package/dist/packages/mcp/assets/kb/docs/docs-scorecard.md +27 -0
  205. package/dist/packages/mcp/assets/kb/docs/docs-screens-1-screener.md +35 -0
  206. package/dist/packages/mcp/assets/kb/docs/docs-screens-2-new-pairs.md +28 -0
  207. package/dist/packages/mcp/assets/kb/docs/docs-screens-3-watchlist.md +27 -0
  208. package/dist/packages/mcp/assets/kb/docs/docs-screens-4-analyst-tab.md +28 -0
  209. package/dist/packages/mcp/assets/kb/docs/docs-screens-bubble-map.md +32 -0
  210. package/dist/packages/mcp/assets/kb/docs/docs-screens-coin-images.md +32 -0
  211. package/dist/packages/mcp/assets/kb/docs/docs-screens-dev-history.md +44 -0
  212. package/dist/packages/mcp/assets/kb/docs/docs-screens-how-well-it-predicts-measured-held-out.md +46 -0
  213. package/dist/packages/mcp/assets/kb/docs/docs-screens-live-holder-and-rug-signals.md +51 -0
  214. package/dist/packages/mcp/assets/kb/docs/docs-screens-order-plans.md +26 -0
  215. package/dist/packages/mcp/assets/kb/docs/docs-screens-paper-ticket-and-positions.md +29 -0
  216. package/dist/packages/mcp/assets/kb/docs/docs-screens-the-look.md +29 -0
  217. package/dist/packages/mcp/assets/kb/docs/docs-screens-token-screen.md +36 -0
  218. package/dist/packages/mcp/assets/kb/docs/docs-screens-trending-social-and-kol-lists.md +34 -0
  219. package/dist/packages/mcp/assets/kb/docs/docs-screens.md +26 -0
  220. package/dist/packages/mcp/assets/kb/docs/docs-spectator-1-the-agent-activity-window-follow-mode.md +56 -0
  221. package/dist/packages/mcp/assets/kb/docs/docs-spectator-2-the-read-only-stream-spectate.md +42 -0
  222. package/dist/packages/mcp/assets/kb/docs/docs-spectator-3-save-and-replay-record-file-dexterm-spectate.md +41 -0
  223. package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +39 -0
  224. package/dist/packages/mcp/assets/kb/docs/docs-spectator-limits.md +36 -0
  225. package/dist/packages/mcp/assets/kb/docs/docs-spectator-quick-start.md +37 -0
  226. package/dist/packages/mcp/assets/kb/docs/docs-spectator-security-model.md +35 -0
  227. package/dist/packages/mcp/assets/kb/docs/docs-spectator-see-also.md +29 -0
  228. package/dist/packages/mcp/assets/kb/docs/docs-spectator-streaming-it.md +32 -0
  229. package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-three-surfaces.md +37 -0
  230. package/dist/packages/mcp/assets/kb/docs/docs-spectator-what-is-redacted.md +35 -0
  231. package/dist/packages/mcp/assets/kb/docs/docs-spectator.md +29 -0
  232. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-common-questions.md +33 -0
  233. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +38 -0
  234. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-in-app-messages.md +42 -0
  235. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-reporting-a-problem.md +25 -0
  236. package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting.md +23 -0
  237. package/dist/packages/mcp/assets/kb/docs/docs-voice-doctor.md +26 -0
  238. package/dist/packages/mcp/assets/kb/docs/docs-voice-it-clarifies-it-never-guesses.md +36 -0
  239. package/dist/packages/mcp/assets/kb/docs/docs-voice-latency.md +38 -0
  240. package/dist/packages/mcp/assets/kb/docs/docs-voice-linux-and-windows.md +32 -0
  241. package/dist/packages/mcp/assets/kb/docs/docs-voice-privacy.md +26 -0
  242. package/dist/packages/mcp/assets/kb/docs/docs-voice-still-unverified.md +27 -0
  243. package/dist/packages/mcp/assets/kb/docs/docs-voice-the-voice-neural-by-default.md +48 -0
  244. package/dist/packages/mcp/assets/kb/docs/docs-voice-what-it-can-never-do.md +27 -0
  245. package/dist/packages/mcp/assets/kb/docs/docs-voice-what-you-can-say.md +38 -0
  246. package/dist/packages/mcp/assets/kb/docs/docs-voice.md +25 -0
  247. package/dist/packages/mcp/src/app-help.js +123 -0
  248. package/dist/packages/mcp/src/firewall.js +2 -2
  249. package/dist/packages/mcp/src/index.js +8 -4
  250. package/dist/packages/mcp/src/paper-agent.js +92 -0
  251. package/dist/packages/mcp/src/server.js +261 -29
  252. package/dist/packages/mcp/src/spectator-sink.js +146 -5
  253. package/dist/packages/mcp/src/user-content.js +1 -0
  254. package/dist/packages/recorder/src/dev-history.js +129 -0
  255. package/dist/packages/recorder/src/index.js +1 -0
  256. package/dist/packages/recorder/src/recorder.js +23 -0
  257. package/dist/packages/recorder/src/schema.js +11 -0
  258. package/dist/packages/voice/src/stt/whisper.js +4 -2
  259. package/package.json +6 -5
@@ -0,0 +1,129 @@
1
+ // DEV HISTORY (0.1.5, task-1425): "has this deployer rugged before?" from dexterm's OWN recorded history, keyless.
2
+ // The creator links come from the `creators` table (a keyless source naming the dev when dexterm saw the coin), the
3
+ // outcomes from the recorder's code-only labeler (labels.ts: keyless-proxy tier), the dev-exit timing from the
4
+ // recorded `dev_pct` series. Every number carries its source, sample size and age; no recorded prior launch is
5
+ // `unknown`, never "clean". It is a risk flag from observed history, never a certificate.
6
+ //
7
+ // Point in time: with `asOf`, only links recorded before it and labels already known by then count (a label is known
8
+ // once its observation t1, or t0 + horizon, has passed). The backtest uses this so a coin is never judged on the
9
+ // future (the same leakage rule as export.ts).
10
+ /** Label horizons in preference order: the 72 h label when known, else the longest one known. */
11
+ const PREF_HORIZONS = [259200, 86400, 21600, 7200, 3600];
12
+ /** Dev-exit rule: the dev held more than this % of supply, then this little. */
13
+ export const DEV_EXIT = { heldPct: 0.5, exitPct: 0.1 };
14
+ /** Prior rugs at/over this many = the `serial_rugger` flag (same threshold as the token-dossier pack). */
15
+ export const SERIAL_RUGGER_MIN = 2;
16
+ export const DEV_HISTORY_SOURCE = 'dexterm recorder (keyless creator links + code-only outcome labels)';
17
+ const median = (xs) => {
18
+ if (!xs.length)
19
+ return null;
20
+ const s = [...xs].sort((a, b) => a - b);
21
+ const m = Math.floor(s.length / 2);
22
+ return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
23
+ };
24
+ /** The creator dexterm recorded for `mint`, or null. */
25
+ export function creatorOf(db, mint) {
26
+ try {
27
+ const r = db.prepare('SELECT mint, creator, source, first_t, created_at FROM creators WHERE mint = ?').get(mint);
28
+ return r ? { mint: r.mint, creator: r.creator, source: r.source, firstT: Number(r.first_t), createdAt: r.created_at === null ? null : Number(r.created_at) } : null;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /** The creator's recorded track record. Never throws: a DB without the tables reads as `unknown`. */
35
+ export function queryDevHistory(db, q) {
36
+ const asOf = q.asOf ?? Date.now();
37
+ const empty = {
38
+ creator: q.creator, status: 'unknown', asOf, source: DEV_HISTORY_SOURCE,
39
+ launches: { n: 0, newestT: null, ageSec: null },
40
+ labelled: { n: 0, rug: 0, dead: 0, fade: 0, flat: 0, runner: 0, horizon: '72h preferred', tier: 'keyless-proxy', newestT: null, ageSec: null },
41
+ rugRate: null, badRate: null, devExit: { n: 0, medianMin: null, within60m: 0 }, serialRugger: false, recent: [],
42
+ };
43
+ let links;
44
+ try {
45
+ links = db.prepare('SELECT mint, first_t, created_at FROM creators WHERE creator = ? AND first_t <= ? AND mint != ? ORDER BY first_t DESC LIMIT ?')
46
+ .all(q.creator, asOf, q.mint ?? '', q.limit ?? 300);
47
+ }
48
+ catch {
49
+ return empty;
50
+ }
51
+ if (!links.length)
52
+ return empty;
53
+ const outStmt = db.prepare("SELECT t0, horizon_sec, t1, label FROM outcomes WHERE mint = ? AND label != 'unobserved' ORDER BY t0 ASC");
54
+ const symStmt = db.prepare('SELECT symbol FROM token_snapshots WHERE mint = ? AND symbol IS NOT NULL ORDER BY t ASC LIMIT 1');
55
+ const devStmt = db.prepare('SELECT t, dev_pct FROM token_snapshots WHERE mint = ? AND dev_pct IS NOT NULL AND t <= ? ORDER BY t ASC LIMIT 400');
56
+ const counts = { rug: 0, dead: 0, fade: 0, flat: 0, runner: 0 };
57
+ let labelledN = 0, labelledNewest = null;
58
+ const exits = [];
59
+ const launches = [];
60
+ for (const l of links) {
61
+ const firstT = Number(l.first_t);
62
+ const createdAt = l.created_at === null ? null : Number(l.created_at);
63
+ const rows = outStmt.all(l.mint);
64
+ // the label of the EARLIEST anchor (closest to launch) at the longest horizon already known as of asOf
65
+ const known = rows.filter((r) => (r.t1 !== null ? Number(r.t1) : Number(r.t0) + Number(r.horizon_sec) * 1000) <= asOf);
66
+ let label = null, horizonSec = null, knownAt = null;
67
+ if (known.length) {
68
+ const t0 = Math.min(...known.map((r) => Number(r.t0)));
69
+ const at = known.filter((r) => Number(r.t0) === t0);
70
+ for (const h of PREF_HORIZONS) {
71
+ const hit = at.find((r) => Number(r.horizon_sec) === h);
72
+ if (hit) {
73
+ label = hit.label;
74
+ horizonSec = h;
75
+ knownAt = hit.t1 !== null ? Number(hit.t1) : t0 + h * 1000;
76
+ break;
77
+ }
78
+ }
79
+ }
80
+ if (label) {
81
+ labelledN++;
82
+ counts[label]++;
83
+ if (knownAt !== null)
84
+ labelledNewest = Math.max(labelledNewest ?? 0, knownAt);
85
+ }
86
+ let devExitMin = null;
87
+ if (q.devExit !== false) {
88
+ const series = devStmt.all(l.mint, asOf);
89
+ const held = series.findIndex((r) => r.dev_pct > DEV_EXIT.heldPct);
90
+ if (held >= 0) {
91
+ const out = series.slice(held + 1).find((r) => r.dev_pct <= DEV_EXIT.exitPct);
92
+ if (out) {
93
+ const from = createdAt ?? Number(series[held].t);
94
+ devExitMin = Math.max(0, (Number(out.t) - from) / 60_000);
95
+ exits.push(devExitMin);
96
+ }
97
+ }
98
+ }
99
+ if (launches.length < 10) {
100
+ const sym = symStmt.get(l.mint)?.symbol ?? null;
101
+ launches.push({ mint: l.mint, symbol: sym, firstT, createdAt, label, horizonSec, devExitMin });
102
+ }
103
+ }
104
+ const newestT = Number(links[0].first_t);
105
+ return {
106
+ ...empty,
107
+ status: 'ok',
108
+ launches: { n: links.length, newestT, ageSec: Math.max(0, Math.round((asOf - newestT) / 1000)) },
109
+ labelled: { ...empty.labelled, n: labelledN, ...counts, newestT: labelledNewest, ageSec: labelledNewest === null ? null : Math.max(0, Math.round((asOf - labelledNewest) / 1000)) },
110
+ rugRate: labelledN ? counts.rug / labelledN : null,
111
+ badRate: labelledN ? (counts.rug + counts.dead) / labelledN : null,
112
+ devExit: { n: exits.length, medianMin: median(exits), within60m: exits.filter((m) => m <= 60).length },
113
+ serialRugger: counts.rug >= SERIAL_RUGGER_MIN,
114
+ recent: launches,
115
+ };
116
+ }
117
+ const ago = (sec) => sec === null ? 'age unknown' : sec < 3600 ? `${Math.max(1, Math.round(sec / 60))}m ago` : sec < 172800 ? `${Math.round(sec / 3600)}h ago` : `${Math.round(sec / 86400)}d ago`;
118
+ /**
119
+ * The one-line summary every surface shows (DEV panel, rug-signal row, MCP note): counts with the sample size and
120
+ * the age, or `unknown` with why. Plain wording: a risk flag from observed history, never "rug confirmed" or "safe".
121
+ */
122
+ export function devHistoryLine(r) {
123
+ if (r.status === 'unknown')
124
+ return 'unknown: no prior launch by this wallet in dexterm\'s record';
125
+ const L = r.labelled;
126
+ if (!L.n)
127
+ return `${r.launches.n} prior launch${r.launches.n === 1 ? '' : 'es'} recorded, none labelled yet (newest ${ago(r.launches.ageSec)})`;
128
+ return `rugged ${L.rug} of ${L.n} labelled prior launches${L.dead ? ` (+${L.dead} dead)` : ''} · ${r.launches.n} recorded · labels ${ago(L.ageSec)}`;
129
+ }
@@ -8,6 +8,7 @@ export * from "./export.js";
8
8
  export * from "./open.js";
9
9
  export * from "./verdicts.js";
10
10
  export * from "./schedule.js";
11
+ export * from "./dev-history.js";
11
12
  export { recorderCli, RECORDER_HELP } from "./cli.js";
12
13
  /** `--no-recorder` / `DEXTERM_RECORDER=0` resolution: the recorder is on in live mode unless either says no. */
13
14
  export function recorderEnabled(env, flagOff) {
@@ -30,6 +30,7 @@ export const LABEL_RETRY_MS = 300_000;
30
30
  export const LABEL_BATCH = 300;
31
31
  /** In-memory last-row cache: entries not observed for this long are dropped (re-read from the DB on return). */
32
32
  export const SEEN_EVICT_MS = 2 * 3_600_000;
33
+ const BASE58 = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
33
34
  export class Recorder {
34
35
  enabled;
35
36
  path;
@@ -58,6 +59,8 @@ export class Recorder {
58
59
  /** Counters for the handoff / --verbose. */
59
60
  counters = { observed: 0, written: 0, heartbeat: 0, members: 0, sweepCalls: 0, labelled: 0 };
60
61
  stmts;
62
+ /** Mints whose creator link is already stored (this run), so a refresh costs no write. */
63
+ creatorKnown = new Set();
61
64
  constructor(opts = {}) {
62
65
  this.enabled = opts.enabled ?? true;
63
66
  this.path = opts.path ?? ':memory:';
@@ -87,6 +90,7 @@ export class Recorder {
87
90
  insertMember: this.db.prepare('INSERT OR IGNORE INTO feed_members (t, feed, rank, mint) VALUES (?, ?, ?, ?)'),
88
91
  lastIdentity: this.db.prepare('SELECT symbol, name, launchpad, created_at FROM token_snapshots WHERE mint = ? ORDER BY t DESC LIMIT 1'),
89
92
  lastLive: this.db.prepare(`SELECT t, hash, sources, ${cols} FROM token_snapshots WHERE mint = ? AND kind = 'live' ORDER BY t DESC LIMIT 1`),
93
+ insertCreator: this.db.prepare('INSERT OR IGNORE INTO creators (mint, creator, source, first_t, created_at) VALUES (?, ?, ?, ?, ?)'),
90
94
  };
91
95
  }
92
96
  /** Attach as the data layer's store listener (and detach any previous one). */
@@ -120,6 +124,10 @@ export class Recorder {
120
124
  const pending = [];
121
125
  for (const r of rows) {
122
126
  this.counters.observed++;
127
+ // 0.1.5 dev history: the creator the row's source names (Jupiter `dev`), stored once per mint.
128
+ const dev = r.audit?.devAddress;
129
+ if (r.mint && dev)
130
+ this.recordCreator(r.mint, dev, r.audit?.source ?? 'jupiter-tokens', now, r.token?.createdAt ?? null);
123
131
  if (!r.mint || !r.pair) {
124
132
  res.skipped++;
125
133
  continue;
@@ -173,6 +181,21 @@ export class Recorder {
173
181
  this.counters.heartbeat += res.heartbeat;
174
182
  return res;
175
183
  }
184
+ /**
185
+ * Record which wallet created `mint`, as `source` named it (0.1.5 dev history). First writer wins; a mint or
186
+ * creator that is not a base58 address is ignored. Returns true when a new link was stored.
187
+ */
188
+ recordCreator(mint, creator, source, now = this.clock.now(), createdAt = null) {
189
+ if (!this.enabled || this.closed || this.creatorKnown.has(mint))
190
+ return false;
191
+ if (!BASE58.test(mint) || !BASE58.test(creator) || mint === creator)
192
+ return false;
193
+ this.creatorKnown.add(mint);
194
+ if (this.creatorKnown.size > 200_000)
195
+ this.creatorKnown.clear();
196
+ const r = this.stmts.insertCreator.run(mint, creator, String(source).slice(0, 24), now, createdAt !== null && Number.isFinite(createdAt) ? Math.round(createdAt) : null);
197
+ return Number(r.changes) > 0;
198
+ }
176
199
  /** The mint's last stored live row (one indexed read; only paid the first time a mint is seen this run). */
177
200
  lastStored(mint) {
178
201
  const row = this.stmts.lastLive.get(mint);
@@ -132,4 +132,15 @@ CREATE TABLE IF NOT EXISTS verdicts (
132
132
  run_file TEXT
133
133
  );
134
134
  CREATE INDEX IF NOT EXISTS verdicts_mint_t ON verdicts (mint, t);
135
+
136
+ -- 0.1.5 dev history: which wallet created a coin, as a keyless source named it when dexterm saw the coin
137
+ -- (Jupiter tokens v2 \`dev\`, a PumpPortal create, RugCheck new_tokens). First writer wins; never a guess.
138
+ CREATE TABLE IF NOT EXISTS creators (
139
+ mint TEXT PRIMARY KEY,
140
+ creator TEXT NOT NULL,
141
+ source TEXT NOT NULL, -- 'jupiter-tokens' | 'pumpportal' | 'rugcheck' | 'goplus'
142
+ first_t INTEGER NOT NULL, -- unix ms dexterm first recorded the link
143
+ created_at INTEGER -- the coin's creation time when the source gave one
144
+ ) WITHOUT ROWID;
145
+ CREATE INDEX IF NOT EXISTS creators_creator ON creators (creator, first_t);
135
146
  `;
@@ -39,9 +39,11 @@ export function pickRecorder() {
39
39
  }
40
40
  /** Synchronous PATH check without spawning (cheap; used by available() and pickRecorder). */
41
41
  function which(bin) {
42
- const paths = (process.env.PATH ?? '').split(':');
42
+ // Windows (task-1423): `;`-separated PATH and `.exe` binaries, same rule as piper.ts's which()
43
+ const win = process.platform === 'win32';
44
+ const paths = (process.env.PATH ?? '').split(win ? ';' : ':');
43
45
  for (const p of paths) {
44
- if (p && existsSync(join(p, bin)))
46
+ if (p && (existsSync(join(p, bin)) || (win && existsSync(join(p, `${bin}.exe`)))))
45
47
  return true;
46
48
  }
47
49
  return false;
package/package.json CHANGED
@@ -1,13 +1,10 @@
1
1
  {
2
2
  "name": "dexterm-cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
+ "mcpName": "io.github.dexterm-xyz/dexterm",
4
5
  "description": "dexterm: terminal DEX screener with a local Claude CLI analyst",
5
6
  "author": "The dexterm authors",
6
7
  "license": "AGPL-3.0-only",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/dexterm-xyz/dexterm.git"
10
- },
11
8
  "type": "module",
12
9
  "bin": {
13
10
  "dexterm": "./dist/packages/cli/bin/dexterm.mjs"
@@ -36,5 +33,9 @@
36
33
  "@dexterm/recorder": "0.0.1",
37
34
  "@dexterm/tui": "0.0.1",
38
35
  "@dexterm/voice": "0.0.1"
36
+ },
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/dexterm-xyz/dexterm.git"
39
40
  }
40
41
  }