dexterm-cli 0.1.3 → 0.1.4
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.
- package/dist/packages/cli/assets/claude/analyst-system.md +2 -1
- package/dist/packages/cli/src/app-help-gen.js +3 -3
- package/dist/packages/cli/src/docs-kb-gen.js +228 -0
- package/dist/packages/cli/src/doctor.js +22 -7
- package/dist/packages/cli/src/index.js +1 -1
- package/dist/packages/cli/src/kb-skill-cmd.js +3 -0
- package/dist/packages/cli/src/larp-detected.js +209 -0
- package/dist/packages/cli/src/live/token.js +38 -1
- package/dist/packages/cli/src/main.js +140 -1
- package/dist/packages/cli/src/mcp-follow.js +225 -0
- package/dist/packages/cli/src/spectate-cmd.js +14 -3
- package/dist/packages/cli/src/version.js +1 -1
- package/dist/packages/cli/src/x-cmd.js +11 -5
- package/dist/packages/mcp/assets/kb/app-help/spectate-an-agent.md +4 -1
- package/dist/packages/mcp/assets/kb/docs/docs-agents-capability-tiers-enforced-server-side.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-install-in-one-command.md +49 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-per-agent-mandates.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-recipes.md +43 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-red-team-coverage.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-two-ways-to-connect.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-untrusted-by-default.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-watch-an-agent-work-spectator-view.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-answer-style.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-it-knows-the-app.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-mcp-tools.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-plain-language-filters.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-skills.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-starting-a-run.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-can-change-three-tiers.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-it-sees.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-what-the-analyst-can-never-do.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst.md +23 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-1-start-dexterm.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-2-open-a-real-coin-by-contract-address.md +43 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-3-read-the-safety-panel.md +40 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-4-read-the-holder-panel.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-5-optionally-ask-the-analyst.md +39 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-6-export-or-share-what-you-see.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-7-quit-safely.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-before-any-experimental-trading.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-check-the-installation-with-doctor.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-choose-a-setup-path.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-common-mistakes-and-recovery.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-copy-and-paste-without-surprises.md +39 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-data-says-unavailable-stale-or-rate-limited.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-dexterm-says-command-not-found.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-optional-help-is-unavailable.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-paste-does-nothing-or-pastes-twice.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-the-screen-looks-broken.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-if-you-typed-the-wrong-thing.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-install-node-js-first.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-linux.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-homebrew.md +46 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-or-linux-npm.md +39 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-open-the-terminal.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-reopen-dexterm-later.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-ten-minute-first-win.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-terminal-shell-prompt-command-output-and-path.md +40 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-where-to-go-next.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +39 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-dexterm-help.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-filter-grammar.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-flags.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-invocations.md +43 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-presets.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-scan-commands.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-sort-keys.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli-subcommands.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-cli.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +45 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-files-on-disk.md +41 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-headless-recorder-dexterm-record.md +44 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-history-recorder.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-packs.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-price-display-mode.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-push-alerts-and-dexterm-watch.md +45 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-rules-engine.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-analyst-s-launch.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-optional-free-rpc-key.md +42 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-keymaps.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-themes-and-look.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-widgets.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-workspaces.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-1-follow-a-wallet-see-what-it-does.md +51 -0
- package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-2-the-one-key-mirror-ticket-a-proposal.md +56 -0
- package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-stage-3-capped-auto-mirror-default-off-less.md +47 -0
- package/dist/packages/mcp/assets/kb/docs/docs-copy-trading-what-is-proven-what-is-not.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-copy-trading.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-cache.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-health-registry.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-rate-limits-and-pacing.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-request-budget-meter.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-sources.md +47 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources-the-helius-credit-meter.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-data-sources.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-dexterm-doctor.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-first-run.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +71 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-next.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-running-the-tests.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +44 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-updating.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-keyboard-global-keys.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-keyboard-keys-handled-by-the-loop.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-keyboard-per-screen-keys.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-keyboard-what-shows.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-keyboard.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +55 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-open-link-keys.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-paste-a-coin-on-the-web.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-the-verdict.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-timestamped-follow-up-drafts.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp-what-it-looks-at.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-larp.md +24 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-degraded-states-you-will-see.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-free-vs-paid-x-api-tiers-your-bill-your-limits.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-kol-lists-and-the-per-handle-filter.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-tests.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-is-read-and-when.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-what-you-set-up-once.md +40 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x-where-the-tokens-live.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-login-with-x.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-a-live-ticket.md +42 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-before-you-press-size-vs-caps.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-devnet-signer-mainnet-token.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-jupiter-rate-limits.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-link-a-wallet.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-live-trading-devnet-first.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-mainnet.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-order-plans-and-standing-mandates.md +44 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-panic.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-pnl-cards.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-live-fire-path-devnet-the-fast-wallet.md +41 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-signer-process.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-ticket.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-the-wallet.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-trade-moments.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-your-first-live-trade.md +41 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-bubble-map-popup.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-build-the-native-window.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-config-dexterm-popup-json.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-docking-macos.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-keys-in-the-popup.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-market-cap-axis.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-security-model.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-token-and-feeds-popups.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart-what-it-shows.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-popup-chart.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-cost-control.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-keys-flag-command.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-safety-four-layers.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-states.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-the-read.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan-triggers-and-score.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scan.md +24 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-canary.md +30 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-frozen-task-1401-evaluation.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-latest-skill-care-run.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-links-only-larp-baseline-where-it-is-weak.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-not-measured.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-rug-verdict-rules.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard-source-and-rebuild.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-scorecard.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-1-screener.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-2-new-pairs.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-3-watchlist.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-4-analyst-tab.md +28 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-bubble-map.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-coin-images.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-live-holder-and-rug-signals.md +51 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-order-plans.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-paper-ticket-and-positions.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-the-look.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-token-screen.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-trending-social-and-kol-lists.md +34 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-1-the-agent-activity-window-follow-mode.md +56 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-2-the-read-only-stream-spectate.md +42 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-3-save-and-replay-record-file-dexterm-spectate.md +41 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +39 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-limits.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-quick-start.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-security-model.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-see-also.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-streaming-it.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-the-three-surfaces.md +37 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-what-is-redacted.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator.md +29 -0
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-common-questions.md +33 -0
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-in-app-messages.md +42 -0
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-reporting-a-problem.md +25 -0
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting.md +23 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-doctor.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-it-clarifies-it-never-guesses.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-latency.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-linux-and-windows.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-privacy.md +26 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-still-unverified.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-the-voice-neural-by-default.md +48 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-what-it-can-never-do.md +27 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice-what-you-can-say.md +38 -0
- package/dist/packages/mcp/assets/kb/docs/docs-voice.md +25 -0
- package/dist/packages/mcp/src/app-help.js +123 -0
- package/dist/packages/mcp/src/firewall.js +2 -2
- package/dist/packages/mcp/src/index.js +5 -4
- package/dist/packages/mcp/src/server.js +56 -18
- package/dist/packages/mcp/src/spectator-sink.js +74 -2
- package/dist/packages/voice/src/stt/whisper.js +4 -2
- package/package.json +6 -5
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-troubleshooting-common-questions
|
|
3
|
+
title: Troubleshooting › Common questions
|
|
4
|
+
kind: docs
|
|
5
|
+
page: troubleshooting
|
|
6
|
+
page_title: Troubleshooting
|
|
7
|
+
heading: Common questions
|
|
8
|
+
anchor: common-questions
|
|
9
|
+
url: https://dexterm.xyz/docs/troubleshooting#common-questions
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- troubleshooting
|
|
13
|
+
- common
|
|
14
|
+
- questions
|
|
15
|
+
confidence: high
|
|
16
|
+
owner: maintainers
|
|
17
|
+
origin: docs-generated
|
|
18
|
+
reviewed_by: generated@2026-10-16
|
|
19
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
20
|
+
sources:
|
|
21
|
+
- site/content/docs/troubleshooting.md
|
|
22
|
+
date: 2026-10-16
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
**The screener is empty on first launch.** It should paint cached or skeleton rows within a second. If it stays empty for more than a few seconds, run `dexterm doctor`: the Jupiter bucket allows one call every ~3 s keyless, and a 429 pauses it for 30 s.
|
|
26
|
+
|
|
27
|
+
**Candles load slowly after switching timeframe.** 5m/15m derive from 1m and 4h/1d from 1h locally, so a switch costs at most one fetch, and the chart goes ahead of background work. GeckoTerminal allows about 10 calls a minute per IP; several dexterm instances on one IP share that.
|
|
28
|
+
|
|
29
|
+
**The chart popup did not dock.** macOS Automation permission was denied, or the terminal is not Terminal.app or iTerm2; the window opens at the screen edge instead. Drag it where you want it.
|
|
30
|
+
|
|
31
|
+
**Quitting takes long.** It should take under a second. If it does not, report it with `--verbose` output; the shutdown signal cancels every pending wait.
|
|
32
|
+
|
|
33
|
+
**Something that looks like dexterm asks for a seed phrase or a wallet connection.** It is not dexterm. The app never asks for keys; see security and trust (https://dexterm.xyz/trust/).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-troubleshooting-doctor-lines
|
|
3
|
+
title: Troubleshooting › Doctor lines
|
|
4
|
+
kind: docs
|
|
5
|
+
page: troubleshooting
|
|
6
|
+
page_title: Troubleshooting
|
|
7
|
+
heading: Doctor lines
|
|
8
|
+
anchor: doctor-lines
|
|
9
|
+
url: https://dexterm.xyz/docs/troubleshooting#doctor-lines
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- troubleshooting
|
|
13
|
+
- doctor
|
|
14
|
+
- lines
|
|
15
|
+
confidence: high
|
|
16
|
+
owner: maintainers
|
|
17
|
+
origin: docs-generated
|
|
18
|
+
reviewed_by: generated@2026-10-16
|
|
19
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
20
|
+
sources:
|
|
21
|
+
- site/content/docs/troubleshooting.md
|
|
22
|
+
date: 2026-10-16
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
| line | meaning | fix |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| `✗ Node … too old` | Node is below 22.18 (needed to run the TypeScript entry) | `nvm install 22` or `brew install node`, then re-run. `./install.sh` can fetch a verified Node for you. |
|
|
28
|
+
| `! Terminal: not a TTY` | output is piped or the shell is not interactive | run `dexterm` in a terminal window. One-shot frames still work with `--screen`. |
|
|
29
|
+
| `! Terminal colour: 256-colour only` | the terminal cannot do 24-bit colour | use a truecolor terminal (iTerm2, WezTerm, Ghostty, Kitty, Alacritty, Windows Terminal) or set `COLORTERM=truecolor`. The app runs, flattened. |
|
|
30
|
+
| `! Terminal colour: no colour` | `NO_COLOR` is set, or a monochrome terminal | unset `NO_COLOR` for the full look; dexterm works in monochrome. |
|
|
31
|
+
| `! Claude CLI: not found` | `claude` is not on PATH | only the analyst needs it: install Claude Code and run `claude` once to log in. Everything else works. |
|
|
32
|
+
| `! Helius RPC: no key` | no key configured | optional. Holders and some safety fields show `needs key`; see configuration (https://dexterm.xyz/docs/configuration#the-optional-free-rpc-key). |
|
|
33
|
+
| `✗ Data sources: unreachable …` | a required host did not answer | check your connection, VPN or firewall. If only some hosts fail they may be blocked on your network. `--fixtures` or `DEXTERM_OFFLINE=1` browse offline demo data. |
|
|
34
|
+
| `! Data sources: … PumpPortal …` | only the new-pairs host is down | the rest works; new pairs may be blocked on your network. |
|
|
35
|
+
| `! Chart window: not built` | no native shell | the chart popup opens in your browser. For the docked window install Rust and run `npm run build:shell` in `packages/popup`. |
|
|
36
|
+
| `✗ Data directory: cannot write …` | the data dir is not writable | fix the permissions the line names, or run with `--db :memory:`. |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-troubleshooting-in-app-messages
|
|
3
|
+
title: Troubleshooting › In-app messages
|
|
4
|
+
kind: docs
|
|
5
|
+
page: troubleshooting
|
|
6
|
+
page_title: Troubleshooting
|
|
7
|
+
heading: In-app messages
|
|
8
|
+
anchor: in-app-messages
|
|
9
|
+
url: https://dexterm.xyz/docs/troubleshooting#in-app-messages
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- troubleshooting
|
|
13
|
+
- in-app
|
|
14
|
+
- messages
|
|
15
|
+
confidence: high
|
|
16
|
+
owner: maintainers
|
|
17
|
+
origin: docs-generated
|
|
18
|
+
reviewed_by: generated@2026-10-16
|
|
19
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
20
|
+
sources:
|
|
21
|
+
- site/content/docs/troubleshooting.md
|
|
22
|
+
date: 2026-10-16
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
| message | meaning |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `connecting to the live feed…` | the first DexScreener list has not landed yet; skeleton rows show in the meantime |
|
|
28
|
+
| `offline — can't reach the data feed` | no source answered; run `dexterm doctor`. `r` retries. |
|
|
29
|
+
| `rate-limited — backing off` | a source returned 429; the limiter pauses it (30 s, doubling to 10 min) and other sources keep going |
|
|
30
|
+
| `unavailable: <reason>` / `needs key` in a panel | that panel's source is down or needs a key; nothing is fabricated |
|
|
31
|
+
| `cached Nm old · refreshing` | the screener painted its last snapshot while fresh rows load |
|
|
32
|
+
| `claude is not logged in` in the analyst panel | run `claude login` and retry |
|
|
33
|
+
| `analyst busy; Esc to interrupt before vetting` | one run per conversation at a time; `esc` interrupts it |
|
|
34
|
+
| `open links needs live mode` / `paper trading needs live mode` | fixtures and one-shot frames have no real links or quotes |
|
|
35
|
+
| `AI scan needs live data (or --replay FILE)` | the scan has nothing real to watch on fixtures |
|
|
36
|
+
| `AI scan blocked analyst action "…" · observe-only` | the model tried an action during a scan and the app refused it; this is the safety layer working |
|
|
37
|
+
| `rate limited by Jupiter — retrying…` on a ticket | the keyless quote bucket is paused; the confirm retries for up to 8 s, then lets you retry or cancel |
|
|
38
|
+
| `chart opened in browser (<reason>)` | the native shell is not built or has no display; the page says why too |
|
|
39
|
+
| `voice-in unavailable — type your question instead` | no speech-to-text engine on this Mac (no `swiftc`, or no whisper-cli + model + sox/ffmpeg); replies are still spoken. `dexterm doctor` prints the 2-minute fix |
|
|
40
|
+
| `mic/STT could not start: …` | the Apple Speech helper could not be spawned or macOS denied Microphone / Speech permission; voice stays idle and the keyboard works. Allow the permissions in System Settings › Privacy & Security, or set `DEXTERM_VOICE_STT=whisper` |
|
|
41
|
+
| `mic timed out — press v to talk again` | the mic was live for 15 s with no second `v`; it closed itself |
|
|
42
|
+
| `I don't see a token called X` / `I see 2 tokens called X` | voice never guesses a coin: open the exact token first, then say buy or sell |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-troubleshooting-reporting-a-problem
|
|
3
|
+
title: Troubleshooting › Reporting a problem
|
|
4
|
+
kind: docs
|
|
5
|
+
page: troubleshooting
|
|
6
|
+
page_title: Troubleshooting
|
|
7
|
+
heading: Reporting a problem
|
|
8
|
+
anchor: reporting-a-problem
|
|
9
|
+
url: https://dexterm.xyz/docs/troubleshooting#reporting-a-problem
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- troubleshooting
|
|
13
|
+
- reporting
|
|
14
|
+
- problem
|
|
15
|
+
confidence: high
|
|
16
|
+
owner: maintainers
|
|
17
|
+
origin: docs-generated
|
|
18
|
+
reviewed_by: generated@2026-10-16
|
|
19
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
20
|
+
sources:
|
|
21
|
+
- site/content/docs/troubleshooting.md
|
|
22
|
+
date: 2026-10-16
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
Include `dexterm --version`, the `dexterm doctor` output (it contains no secrets), your terminal, and if possible a `--record` file of the one-shot frame that misbehaves (keys are redacted at capture). Where to send it is on the trust page (https://dexterm.xyz/trust/#report).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-troubleshooting
|
|
3
|
+
title: Troubleshooting
|
|
4
|
+
kind: docs
|
|
5
|
+
page: troubleshooting
|
|
6
|
+
page_title: Troubleshooting
|
|
7
|
+
url: https://dexterm.xyz/docs/troubleshooting
|
|
8
|
+
tags:
|
|
9
|
+
- docs
|
|
10
|
+
- troubleshooting
|
|
11
|
+
confidence: high
|
|
12
|
+
owner: maintainers
|
|
13
|
+
origin: docs-generated
|
|
14
|
+
reviewed_by: generated@2026-10-16
|
|
15
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
16
|
+
sources:
|
|
17
|
+
- site/content/docs/troubleshooting.md
|
|
18
|
+
date: 2026-10-16
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
What each doctor line and in-app message means, and the fix.
|
|
22
|
+
|
|
23
|
+
`dexterm doctor` is the first stop. It exits 0 when the app will run (warnings are optional) and 1 when something must be fixed, and every non-pass line prints the exact fix.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-doctor
|
|
3
|
+
title: Jarvis voice mode › Doctor
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: Doctor
|
|
8
|
+
anchor: doctor
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#doctor
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- doctor
|
|
14
|
+
- jarvis
|
|
15
|
+
- mode
|
|
16
|
+
confidence: high
|
|
17
|
+
owner: maintainers
|
|
18
|
+
origin: docs-generated
|
|
19
|
+
reviewed_by: generated@2026-10-16
|
|
20
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
21
|
+
sources:
|
|
22
|
+
- site/content/docs/voice.md
|
|
23
|
+
date: 2026-10-16
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
`dexterm doctor` has a voice section. When the neural voice is set up it shows `Voice out (Piper)` as the default with `Voice out (say, fallback)` beneath it; when it is not, it shows `Voice out (say)` plus a `Neural voice (Piper)` hint whose fix is `dexterm voice setup`. It also shows `Voice in (Apple Speech)` or `Voice in (whisper)` and a mic-capture note. Every line is a warning at worst and voice degrades to text; the doctor never fails because of voice. `dexterm voice status` shows the same engine summary and which models are installed.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-it-clarifies-it-never-guesses
|
|
3
|
+
title: Jarvis voice mode › It clarifies; it never guesses
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: It clarifies; it never guesses
|
|
8
|
+
anchor: it-clarifies-it-never-guesses
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#it-clarifies-it-never-guesses
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- clarifies
|
|
14
|
+
- never
|
|
15
|
+
- guesses
|
|
16
|
+
- jarvis
|
|
17
|
+
- mode
|
|
18
|
+
confidence: high
|
|
19
|
+
owner: maintainers
|
|
20
|
+
origin: docs-generated
|
|
21
|
+
reviewed_by: generated@2026-10-16
|
|
22
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
23
|
+
sources:
|
|
24
|
+
- site/content/docs/voice.md
|
|
25
|
+
date: 2026-10-16
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
- A ticker it cannot see on screen gets "I don't see a token called X — open it first". There is no fuzzy match: "buy bonks" does not become BONK.
|
|
29
|
+
- A ticker that resolves to **more than one mint** (a copycat) gets "I see 2 tokens called X. Open the exact one first, then say buy" and no ticket opens.
|
|
30
|
+
- A pronoun ("buy it") means the row actually highlighted on the current screen. On an empty list it asks instead of acting on a coin you cannot see.
|
|
31
|
+
- "cell wif" / "by bonk" (homophones) ask "did you mean sell?". A screen command and a trade in one breath ("show runners and sell all my bonk") ask you to say just one. A bare "close" or "exit" asks what to close.
|
|
32
|
+
- A named ticker beats a pronoun: "buy BONK, confirm it" with WIF selected opens a BONK ticket, never WIF.
|
|
33
|
+
- A spoken ticker that is **also a command word** and is visible on screen — "buy live" with a token called LIVE in the list — is not assumed to be the highlighted row: it asks which token you mean rather than silently buying the selected coin.
|
|
34
|
+
- **More than one ticker in a breath** ("buy wif and bonk") asks which one; it never quietly drops one and trades the other.
|
|
35
|
+
- A **spoken size, amount or slippage** ("buy 10 sol of bonk", "buy bonk with max size", "buy bonk 50 percent slippage") is not applied by voice: it says it does not set size or slippage by voice, and asks you to open the ticket and set it there. No size spoken aloud ever reaches a ticket.
|
|
36
|
+
- An **order plan** needs every market cap to carry its scale: "dips to 300k" is a plan, "dips to 300" asks "300k or 300m?" instead of guessing, and "1.2m" keeps its decimal point rather than collapsing to 12m. An unclear fraction ("sell some at 600k") asks what fraction; a plan with no named or highlighted coin asks which coin. "… and confirm it" at the end of a plan drafts the same inert proposal and arms nothing.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-latency
|
|
3
|
+
title: Jarvis voice mode › Latency
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: Latency
|
|
8
|
+
anchor: latency
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#latency
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- latency
|
|
14
|
+
- jarvis
|
|
15
|
+
- mode
|
|
16
|
+
confidence: high
|
|
17
|
+
owner: maintainers
|
|
18
|
+
origin: docs-generated
|
|
19
|
+
reviewed_by: generated@2026-10-16
|
|
20
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
21
|
+
sources:
|
|
22
|
+
- site/content/docs/voice.md
|
|
23
|
+
date: 2026-10-16
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
Measured on the development Mac (Intel i7-8700B, 2026-10-10), key-release to first spoken word, excluding speech-to-text:
|
|
27
|
+
|
|
28
|
+
| stage | measured |
|
|
29
|
+
|---|---|
|
|
30
|
+
| router (intent, clarify, provenance gate) | 0.01 ms median |
|
|
31
|
+
| `say` first audio | 0.8 ms median |
|
|
32
|
+
| Piper neural first audio, model pre-warmed (voice on) | ~0.18 s (cold, first-ever reply: ~1.7 s) |
|
|
33
|
+
| instant command path (router + say) | under 1 ms |
|
|
34
|
+
| Claude first token (warm `claude -p`, model only) | 3.1 s |
|
|
35
|
+
| Apple Speech helper, cached lookup | 0.2 ms; a one-time 4.1 s `swiftc` compile on first use |
|
|
36
|
+
| whisper `base.en` on a 2.3 s clip (CPU batch) | 3.0 to 3.3 s |
|
|
37
|
+
|
|
38
|
+
Apple Speech streams partial transcripts while you speak, so the perceived speech-to-text delay is well under a second; whisper is a batch fallback and feels like three seconds. Real analyst turns add tool round-trips on top of the first token.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-linux-and-windows
|
|
3
|
+
title: Jarvis voice mode › Linux and Windows
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: Linux and Windows
|
|
8
|
+
anchor: linux-and-windows
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#linux-and-windows
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- linux
|
|
14
|
+
- windows
|
|
15
|
+
- jarvis
|
|
16
|
+
- mode
|
|
17
|
+
confidence: high
|
|
18
|
+
owner: maintainers
|
|
19
|
+
origin: docs-generated
|
|
20
|
+
reviewed_by: generated@2026-10-16
|
|
21
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
22
|
+
sources:
|
|
23
|
+
- site/content/docs/voice.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
**Linux is beta (since 0.1.2); Windows voice input is not built.** macOS is the platform voice mode was built and measured on. Off macOS the engines below exist on main, but no person has yet verified real speaker or microphone I/O on Linux hardware. Treat Linux voice as beta. Every voice action has a keyboard equivalent.
|
|
28
|
+
|
|
29
|
+
- **Speech out (Linux).** The neural Piper engine is the default when its prebuilt binary and the `en_GB-alan-medium` voice are installed (`dexterm voice download piper-voice` fetches the voice from Hugging Face, asks first and checks a pinned checksum). `espeak-ng` is the fallback. Both play their WAV through `aplay`, `paplay` or `ffplay`. Synthesis to WAV is verified in Docker on Linux, but real speaker output is not covered by the test suite. `dexterm doctor` names what is missing. Don't use `apt install piper`, which installs an unrelated tool.
|
|
30
|
+
- **Speech in (Linux).** Apple Speech is macOS-only. The local whisper.cpp engine (`dexterm voice download whisper` fetches its `base.en` model) records with `sox`, `arecord` (alsa-utils) or `ffmpeg -f alsa`. Real microphone capture on Linux is not yet verified on hardware.
|
|
31
|
+
- **Windows.** Untested. `espeak-ng` or Piper may speak through `ffplay`, but microphone capture has no Windows-specific input (the `ffmpeg` capture uses a macOS or Linux device), so treat push-to-talk on Windows as not built.
|
|
32
|
+
- **Unchanged everywhere.** The router, the clarify-never-guess rules and the hard limits above are platform-independent. Another platform adds engines, not powers: voice can never confirm, sign, flip LIVE or raise a cap.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-privacy
|
|
3
|
+
title: Jarvis voice mode › Privacy
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: Privacy
|
|
8
|
+
anchor: privacy
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#privacy
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- privacy
|
|
14
|
+
- jarvis
|
|
15
|
+
- mode
|
|
16
|
+
confidence: high
|
|
17
|
+
owner: maintainers
|
|
18
|
+
origin: docs-generated
|
|
19
|
+
reviewed_by: generated@2026-10-16
|
|
20
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
21
|
+
sources:
|
|
22
|
+
- site/content/docs/voice.md
|
|
23
|
+
date: 2026-10-16
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
The Apple path keeps no audio file; the whisper path writes a temporary WAV and deletes it after transcription unless `DEXTERM_VOICE_RECORD=1`. Transcripts are treated as untrusted text: control characters are stripped before anything is drawn, and a voice question is capped at 400 characters like a typed one. Questions sent to the analyst land in your own Claude Code session store, the same as typed questions.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-still-unverified
|
|
3
|
+
title: Jarvis voice mode › Still unverified
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: Still unverified
|
|
8
|
+
anchor: still-unverified
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#still-unverified
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- still
|
|
14
|
+
- unverified
|
|
15
|
+
- jarvis
|
|
16
|
+
- mode
|
|
17
|
+
confidence: high
|
|
18
|
+
owner: maintainers
|
|
19
|
+
origin: docs-generated
|
|
20
|
+
reviewed_by: generated@2026-10-16
|
|
21
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
22
|
+
sources:
|
|
23
|
+
- site/content/docs/voice.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
The real-microphone path has been exercised headlessly (scripted speech engines, the real key loop) and the engines have been measured on synthetic audio. A person has not yet run the first-launch Microphone and Speech prompts and spoken to it end to end; see the changelog (https://dexterm.xyz/changelog/).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-the-voice-neural-by-default
|
|
3
|
+
title: Jarvis voice mode › The voice: neural by default
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: The voice: neural by default
|
|
8
|
+
anchor: the-voice-neural-by-default
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#the-voice-neural-by-default
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- neural
|
|
14
|
+
- default
|
|
15
|
+
- jarvis
|
|
16
|
+
- mode
|
|
17
|
+
confidence: high
|
|
18
|
+
owner: maintainers
|
|
19
|
+
origin: docs-generated
|
|
20
|
+
reviewed_by: generated@2026-10-16
|
|
21
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
22
|
+
sources:
|
|
23
|
+
- site/content/docs/voice.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
dexterm speaks with a **neural British voice** (Piper, `en_GB-alan-medium`) — the one chosen as the default. It is free, local and keyless, and sounds markedly more natural than the built-in system voices. It is the default speaking voice everywhere it is installed, on macOS as well as Linux, with the system `say` voice as the fallback.
|
|
28
|
+
|
|
29
|
+
On macOS, run `dexterm voice setup` once to install it. The prebuilt macOS Piper binary from upstream is broken (it needs a system library it does not bundle), so dexterm instead builds its own private Python environment under `~/.dexterm/piper/` and installs Piper into it, then downloads the ~61 MB voice from the official source and checks it against a pinned checksum. It asks before it does any of this, needs Python 3.9+ (the doctor prints the exact install line if it is missing), runs fully offline afterwards, and ships no key. `dexterm voice uninstall` removes the runtime and keeps the downloaded voice model (add `--purge-model` to delete that too); the fallback `say` voice takes over again. Off macOS, install the prebuilt Piper binary and run `dexterm voice download piper-voice`.
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
$ dexterm voice setup # macOS: private runtime + checksum-verified voice (asks first)
|
|
33
|
+
$ dexterm voice status # which engines and models this machine has
|
|
34
|
+
$ dexterm voice uninstall # remove the runtime (add --purge-model to drop the voice too)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Once Piper is installed it is used automatically — no config change. The model is kept pre-warmed while voice is on, so the first word of a reply starts in about a fifth of a second. `voice.rate` still maps to its speaking speed; a `voice.pitch` setting does not apply to Piper (its pitch is fixed by the model) and is ignored.
|
|
38
|
+
|
|
39
|
+
**The fallback chain.** dexterm picks the first engine that can speak on this machine, and never a novelty voice or the machine's own system voice:
|
|
40
|
+
|
|
41
|
+
| platform | 1st | 2nd | then |
|
|
42
|
+
| --- | --- | --- | --- |
|
|
43
|
+
| macOS | Piper `en_GB-alan-medium` (after `dexterm voice setup`) | `say` with a deep British male voice (Eddy, then Daniel, then the next installed one on that list) | text only: the analyst still answers on screen |
|
|
44
|
+
| Linux (beta) | Piper (prebuilt binary + `dexterm voice download piper-voice`) | `espeak-ng` with a British male voice | text only |
|
|
45
|
+
|
|
46
|
+
Set `DEXTERM_VOICE_TTS` to `piper`, `say`, `espeak` or `none` to pin one engine. An explicit `say` never switches to Piper.
|
|
47
|
+
|
|
48
|
+
**Speed and delivery.** `<` slows the spoken reply and `>` speeds it up, 15 words a minute per press between 120 and 320 (the default is 205). The new rate is saved to `voice.rate` in `config.json`. Numbers are read the way a trader says them: a sub-cent price is spoken as the coin's market cap when the line includes one, and otherwise as "a tiny price". Years and SOL amounts are read as written. On the screener, "this one", "this coin" or "it" means the highlighted row.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-what-it-can-never-do
|
|
3
|
+
title: Jarvis voice mode › What it can never do
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: What it can never do
|
|
8
|
+
anchor: what-it-can-never-do
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#what-it-can-never-do
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- can
|
|
14
|
+
- never
|
|
15
|
+
- jarvis
|
|
16
|
+
- mode
|
|
17
|
+
confidence: high
|
|
18
|
+
owner: maintainers
|
|
19
|
+
origin: docs-generated
|
|
20
|
+
reviewed_by: generated@2026-10-16
|
|
21
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
22
|
+
sources:
|
|
23
|
+
- site/content/docs/voice.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
Voice creates proposals only. The ticket it opens is PAPER, in its editing phase, and the keypress gate stands: your `⏎` then `y` (plus the typed-back size above the threshold) is the only way to a fill. Spoken "confirm", "send it", "y", "sign it", "go live", "arm it", "raise my cap", "panic" and "/wallet …" are routed as questions or ignored; they cannot flip the ticket to LIVE, arm a plan, touch the signer's caps, run a wallet command or press anything. The router's output is a closed set of decision kinds, a guard rejects any decision that carries a mode, live, arm, caps, confirm, sign or send field, and an in-app test drives the real key loop with the executor, the confirm paths, the LIVE flip and the wallet commands booby-trapped: twenty-one hostile utterances, zero touches.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice-what-you-can-say
|
|
3
|
+
title: Jarvis voice mode › What you can say
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
heading: What you can say
|
|
8
|
+
anchor: what-you-can-say
|
|
9
|
+
url: https://dexterm.xyz/docs/voice#what-you-can-say
|
|
10
|
+
tags:
|
|
11
|
+
- docs
|
|
12
|
+
- voice
|
|
13
|
+
- can
|
|
14
|
+
- say
|
|
15
|
+
- jarvis
|
|
16
|
+
- mode
|
|
17
|
+
confidence: high
|
|
18
|
+
owner: maintainers
|
|
19
|
+
origin: docs-generated
|
|
20
|
+
reviewed_by: generated@2026-10-16
|
|
21
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
22
|
+
sources:
|
|
23
|
+
- site/content/docs/voice.md
|
|
24
|
+
date: 2026-10-16
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
| you say | what happens | path |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| "show me the runners", "go to new pairs", "open my watchlist", "positions" | switches the screen | instant, no model |
|
|
30
|
+
| "open bonk", "pull up wif" | opens that coin's token screen | instant |
|
|
31
|
+
| "filter liquidity over 50k", "only show age under 10 minutes" | sets the screener filter | instant |
|
|
32
|
+
| "watch this one", "add bonk to my watchlist" | adds to the watchlist | instant |
|
|
33
|
+
| "show the chart", "close the chart" | opens or closes the chart popup for the open coin through the popup host | instant |
|
|
34
|
+
| "buy bonk", "sell half of wif", "ape into this one" | opens a **PAPER ticket in its editing phase** for the spoken coin and says so | instant |
|
|
35
|
+
| "is this a rug?", "what do you think about wif", "tell me about the holders" | asks the analyst; the first two sentences of the answer are read aloud | Claude |
|
|
36
|
+
| "buy this if it dips to 300k, sell half at 600k, and leave a moon bag", "buy bonk if it drops to 250k, stop at 150k" | drafts an **order-plan proposal** (entry trigger, take-profit ladder, moon bag, stop) for the named or highlighted coin; it is inert until you arm it with a held keypress on the `O` screen or `dexterm plan arm` | instant, no model |
|
|
37
|
+
|
|
38
|
+
`m` mutes the replies, `,` cycles the macOS `say` voice (the fallback; Piper itself has one fixed voice), `<` / `>` make it slower or faster, `esc` stops a reply or cancels the mic. Only the keyboard changes the voice: the analyst can explain these keys but has no action that sets them. Any other key pressed while the mic is live closes it first and then does its normal job, and the mic auto-closes after 15 s if you walk away. On the ticket screen the voice keys are off, so nothing spoken can reach the confirm gate.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: docs-voice
|
|
3
|
+
title: Jarvis voice mode
|
|
4
|
+
kind: docs
|
|
5
|
+
page: voice
|
|
6
|
+
page_title: Jarvis voice mode
|
|
7
|
+
url: https://dexterm.xyz/docs/voice
|
|
8
|
+
tags:
|
|
9
|
+
- docs
|
|
10
|
+
- voice
|
|
11
|
+
- jarvis
|
|
12
|
+
- mode
|
|
13
|
+
confidence: high
|
|
14
|
+
owner: maintainers
|
|
15
|
+
origin: docs-generated
|
|
16
|
+
reviewed_by: generated@2026-10-16
|
|
17
|
+
generated_from: dexterm/site content/docs (task-1420)
|
|
18
|
+
sources:
|
|
19
|
+
- site/content/docs/voice.md
|
|
20
|
+
date: 2026-10-16
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
Push-to-talk on v, an instant local command path, Claude for analysis, spoken replies, popups. Voice only ever proposes; it can never confirm, sign, flip LIVE or raise a cap.
|
|
24
|
+
|
|
25
|
+
`v` is push-to-talk. Press it once and the mic opens (a red `● LISTENING` badge sits on the band under the header the whole time it is live); say what you want; press `v` again to send. The first press enables voice for the run and asks macOS for Microphone and Speech permission. Everything is free and local: speech-out is the neural Piper voice once it is set up (otherwise the built-in `say`), speech-in is on-device Apple Speech (compiled once with `swiftc`) or a local whisper.cpp `base.en` model, and the only model in the loop is your own `claude` login, for analysis questions. No paid speech API exists in the code, no key is read, nothing is recorded to disk.
|
|
@@ -133,3 +133,126 @@ export function searchAppHelp(query, limit = 5, entries = loadAppHelp()) {
|
|
|
133
133
|
export function getAppHelp(id, entries = loadAppHelp()) {
|
|
134
134
|
return entries.find((e) => e.id === id) ?? null;
|
|
135
135
|
}
|
|
136
|
+
// ---------------------------------------------------------------------------------------- docs (task-1420)
|
|
137
|
+
// A THIRD bundled set: every page of the site docs (dexterm.xyz/docs), chunked by heading. GENERATED from the
|
|
138
|
+
// site by `packages/cli/src/docs-kb-gen.ts` (committed; a regenerate-and-diff test runs when the site checkout
|
|
139
|
+
// is present). The app-help entries stay the authority for an exact key or command; a docs entry carries the
|
|
140
|
+
// explanation and the URL to cite, and NEVER structured keys/commands/flags/tools. Its text is reference DATA:
|
|
141
|
+
// the app_help tool hands it to a model firewalled (`<untrusted kind="docs">`), so an instruction written into
|
|
142
|
+
// a docs page reads as quoted text, never as an order.
|
|
143
|
+
/** The shipped docs KB directory (read-only; generated from the site docs). */
|
|
144
|
+
export const DOCS_KB_DIR = path.resolve(HERE, '..', 'assets', 'kb', 'docs');
|
|
145
|
+
function toDocs(e) {
|
|
146
|
+
return {
|
|
147
|
+
id: e.id,
|
|
148
|
+
title: String(e.meta.title ?? e.id),
|
|
149
|
+
page: String(e.meta.page ?? ''),
|
|
150
|
+
pageTitle: String(e.meta.page_title ?? ''),
|
|
151
|
+
heading: String(e.meta.heading ?? ''),
|
|
152
|
+
anchor: String(e.meta.anchor ?? ''),
|
|
153
|
+
url: String(e.meta.url ?? ''),
|
|
154
|
+
tags: list(e.meta.tags),
|
|
155
|
+
body: e.body,
|
|
156
|
+
bytes: e.bytes,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/** Load every docs entry (bundled-only; deterministic order by id). */
|
|
160
|
+
export function loadDocsKb(dir = DOCS_KB_DIR) {
|
|
161
|
+
const entries = loadBundled([{ dir, layout: 'flat' }]).map(toDocs);
|
|
162
|
+
entries.sort((a, b) => a.id.localeCompare(b.id));
|
|
163
|
+
return entries;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* A light, deterministic stemmer for the docs set only (prose, unlike the app-help titles): "answers"/"answer",
|
|
167
|
+
* "cached"/"cache", "clarifies"/"clarify", "streaming"/"stream" meet. Short words are left alone.
|
|
168
|
+
*/
|
|
169
|
+
function stem(w) {
|
|
170
|
+
if (w.length < 4 || w.includes('-'))
|
|
171
|
+
return w;
|
|
172
|
+
let s = w;
|
|
173
|
+
if (s.endsWith('ies') && s.length > 4)
|
|
174
|
+
s = s.slice(0, -3) + 'y';
|
|
175
|
+
else if (s.endsWith('ing') && s.length > 5)
|
|
176
|
+
s = s.slice(0, -3);
|
|
177
|
+
else if (s.endsWith('ed') && s.length > 4)
|
|
178
|
+
s = s.slice(0, -2);
|
|
179
|
+
else if (/(?:ss|sh|ch|x|z)es$/.test(s))
|
|
180
|
+
s = s.slice(0, -2);
|
|
181
|
+
else if (s.endsWith('s') && !s.endsWith('ss'))
|
|
182
|
+
s = s.slice(0, -1);
|
|
183
|
+
if (s.endsWith('e') && s.length > 3)
|
|
184
|
+
s = s.slice(0, -1);
|
|
185
|
+
return s;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Deterministic keyword retrieval over the docs set (no model), same word-boundary matching as app-help.
|
|
189
|
+
* The section heading and tags score strongest, the page title less (every section of a page shares it),
|
|
190
|
+
* the body is the weak tail.
|
|
191
|
+
*/
|
|
192
|
+
export function searchDocs(query, limit = 5, entries = loadDocsKb()) {
|
|
193
|
+
const terms = [...new Set(expand(tokenise(query)).map(stem))];
|
|
194
|
+
const scored = entries.map((e) => {
|
|
195
|
+
const strong = new Set(words(`${e.heading} ${e.tags.filter((t) => t !== 'docs').join(' ')}`).map(stem));
|
|
196
|
+
const page = new Set(words(`${e.pageTitle} ${e.page}`).map(stem));
|
|
197
|
+
const bodyWords = words(e.body).map(stem);
|
|
198
|
+
let score = 0;
|
|
199
|
+
for (const t of terms) {
|
|
200
|
+
if (strong.has(t))
|
|
201
|
+
score += 4;
|
|
202
|
+
else if (page.has(t))
|
|
203
|
+
score += 2;
|
|
204
|
+
let n = 0;
|
|
205
|
+
for (const w of bodyWords)
|
|
206
|
+
if (w === t)
|
|
207
|
+
n++;
|
|
208
|
+
score += Math.min(n, 3);
|
|
209
|
+
}
|
|
210
|
+
// A question that names a section's own heading words is about that section: +3 per heading word
|
|
211
|
+
// matched (+2 more when it names all of them), so "what is redacted in the spectator view" lands on "What is redacted",
|
|
212
|
+
// not on the page's other sections that merely share the page title.
|
|
213
|
+
const head = new Set(tokenise(e.heading).map(stem));
|
|
214
|
+
let hit = 0;
|
|
215
|
+
for (const w of head)
|
|
216
|
+
if (terms.includes(w))
|
|
217
|
+
hit++;
|
|
218
|
+
if (hit >= 1 && head.size > 0)
|
|
219
|
+
score += 3 * hit + (hit === head.size ? 2 : 0);
|
|
220
|
+
return { e, score };
|
|
221
|
+
}).filter((x) => x.score > 0)
|
|
222
|
+
.sort((a, b) => (b.score - a.score) || a.e.id.localeCompare(b.e.id))
|
|
223
|
+
.slice(0, limit);
|
|
224
|
+
return scored.map(({ e, score }) => ({ ...e, score }));
|
|
225
|
+
}
|
|
226
|
+
/** Fetch one docs entry by id. */
|
|
227
|
+
export function getDocs(id, entries = loadDocsKb()) {
|
|
228
|
+
return entries.find((e) => e.id === id) ?? null;
|
|
229
|
+
}
|
|
230
|
+
/** Words that make a question about an exact key or command: app-help answers it. */
|
|
231
|
+
const KEY_OR_COMMAND = /\b(?:key|keys|keybind\w*|press|pressing|shortcut|shortcuts|hotkey|hotkeys|command|commands|subcommand|subcommands|flag|flags|cli)\b/i;
|
|
232
|
+
/** "how do I …" / "how to …": a how-to, answered by an app-help topic. */
|
|
233
|
+
const HOW_TO = /^\s*how\s+(?:do|can|could|would|should)\s+(?:i|you|we)\b|^\s*how\s+to\b/i;
|
|
234
|
+
/** A conceptual question opens with a question word ("what is …", "does it …", "how does …", "how long …"). */
|
|
235
|
+
const CONCEPT = /^\s*(?:what|whats|what's|why|is|are|does|do|did|can|could|will|would|should|where|when|which|who|how)\b/i;
|
|
236
|
+
/** About a screen ("what does the token screen show") or the coin on it ("is this coin a rug"): an app-help topic/tool. */
|
|
237
|
+
const APP_SUBJECT = /\b(?:screen|screener)\b|\bthis\s+(?:[a-z-]+\s+){0,2}(?:coin|token|project)\b/i;
|
|
238
|
+
/** The question's shape: 'key' (exact key/command, a how-to, an imperative, a screen/this-coin question) or 'concept'. */
|
|
239
|
+
export function helpIntent(query) {
|
|
240
|
+
if (KEY_OR_COMMAND.test(query) || HOW_TO.test(query) || APP_SUBJECT.test(query))
|
|
241
|
+
return 'key';
|
|
242
|
+
return CONCEPT.test(query) ? 'concept' : 'key';
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The analyst's help search (task-1420): app-help AND the docs, merged by the question's shape.
|
|
246
|
+
* - a key/command question, a how-to or an imperative ("export the view", "how do I sort"): app-help ranks
|
|
247
|
+
* first (it carries the exact key/command), the docs after it;
|
|
248
|
+
* - a conceptual question ("what is redacted in the spectator view", "does voice work on linux"): the docs rank
|
|
249
|
+
* first (nothing ranks above them), the app-help after.
|
|
250
|
+
* Either way the answer keeps both sets in view: up to 3 hits of the leading set, then up to 2 of the other,
|
|
251
|
+
* then the rest. A set with no hits simply yields to the other (a docs-only answer beats no answer).
|
|
252
|
+
*/
|
|
253
|
+
export function searchHelp(query, limit = 5, sets = {}) {
|
|
254
|
+
const app = searchAppHelp(query, limit, sets.appHelp ?? loadAppHelp()).map((e) => ({ ...e, origin: 'app-help' }));
|
|
255
|
+
const docs = searchDocs(query, limit, sets.docs ?? loadDocsKb()).map((e) => ({ ...e, origin: 'docs' }));
|
|
256
|
+
const [lead, other] = helpIntent(query) === 'concept' ? [docs, app] : [app, docs];
|
|
257
|
+
return [...lead.slice(0, 3), ...other.slice(0, 2), ...lead.slice(3), ...other.slice(2)].slice(0, limit);
|
|
258
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Prompt firewall (CL-06), spec'd in SPEC §5.3. Kept tiny and total. Every untrusted string — token text,
|
|
2
2
|
// web pages, RugCheck risks, and (task-1377) user- or pack-edited KB entries and skills — passes through
|
|
3
|
-
// here before a model sees it.
|
|
4
|
-
export const LIMITS = { name: 64, symbol: 16, description: 512, risk: 160, kb: 4000, page: 1600, link: 40, skill: 8000 };
|
|
3
|
+
// here before a model sees it. (task-1420) The generated docs KB sections pass through as kind `docs`.
|
|
4
|
+
export const LIMITS = { name: 64, symbol: 16, description: 512, risk: 160, kb: 4000, page: 1600, link: 40, skill: 8000, docs: 6000 };
|
|
5
5
|
export function firewall(text, source, kind = 'description', opts = {}) {
|
|
6
6
|
if (text === null || text === undefined)
|
|
7
7
|
return null;
|