dexterm-cli 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/packages/agents/src/audit.js +122 -0
- package/dist/packages/agents/src/bus.js +379 -0
- package/dist/packages/agents/src/executor.js +177 -0
- package/dist/packages/agents/src/gate.js +176 -0
- package/dist/packages/agents/src/identity.js +179 -0
- package/dist/packages/agents/src/index.js +15 -0
- package/dist/packages/agents/src/proposals.js +153 -0
- package/dist/packages/agents/src/schema.js +87 -0
- package/dist/packages/agents/src/sdk.js +140 -0
- package/dist/packages/agents/src/tiers.js +114 -0
- package/dist/packages/agents/src/tools.js +69 -0
- package/dist/packages/agents/src/ws.js +158 -0
- package/dist/packages/cli/assets/claude/analyst-system.md +76 -0
- package/dist/packages/cli/assets/claude/plugin/.claude-plugin/plugin.json +5 -0
- package/dist/packages/cli/assets/claude/plugin/skills/REGISTRY.json +16 -0
- package/dist/packages/cli/assets/claude/plugin/skills/larp-check/SKILL.md +67 -0
- package/dist/packages/cli/assets/claude/plugin/skills/rug-check/SKILL.md +64 -0
- package/dist/packages/cli/assets/claude/plugin/skills/token-dossier/SKILL.md +63 -0
- package/dist/packages/cli/assets/claude/plugin/skills/trench-scan/SKILL.md +44 -0
- package/dist/packages/cli/assets/claude/schemas/larp.schema.json +117 -0
- package/dist/packages/cli/assets/claude/schemas/trench-scan.schema.json +71 -0
- package/dist/packages/cli/assets/claude/schemas/verdict.schema.json +115 -0
- package/dist/packages/cli/bin/dexterm.mjs +11 -0
- package/dist/packages/cli/src/agent-cmd.js +303 -0
- package/dist/packages/cli/src/agent-roster.js +26 -0
- package/dist/packages/cli/src/analyst/backend.js +526 -0
- package/dist/packages/cli/src/analyst/results.js +38 -0
- package/dist/packages/cli/src/analyst/session.js +319 -0
- package/dist/packages/cli/src/audit.js +51 -0
- package/dist/packages/cli/src/backtest-cmd.js +149 -0
- package/dist/packages/cli/src/boot-state.js +62 -0
- package/dist/packages/cli/src/custom.js +261 -0
- package/dist/packages/cli/src/display.js +191 -0
- package/dist/packages/cli/src/doctor.js +361 -0
- package/dist/packages/cli/src/feed.js +634 -0
- package/dist/packages/cli/src/fixtures.js +275 -0
- package/dist/packages/cli/src/follow-cmd.js +221 -0
- package/dist/packages/cli/src/images-config.js +59 -0
- package/dist/packages/cli/src/index.js +31 -0
- package/dist/packages/cli/src/kb-skill-cmd.js +240 -0
- package/dist/packages/cli/src/larp-record.js +21 -0
- package/dist/packages/cli/src/live/copy.js +80 -0
- package/dist/packages/cli/src/live/flow.js +233 -0
- package/dist/packages/cli/src/live/index.js +509 -0
- package/dist/packages/cli/src/live/intel.js +227 -0
- package/dist/packages/cli/src/live/newpairs.js +334 -0
- package/dist/packages/cli/src/live/screens/newpairs-live.js +219 -0
- package/dist/packages/cli/src/live/screens/token-live.js +459 -0
- package/dist/packages/cli/src/live/screens/watchlist-live.js +149 -0
- package/dist/packages/cli/src/live/token.js +585 -0
- package/dist/packages/cli/src/live/trade.js +929 -0
- package/dist/packages/cli/src/live/watchlist.js +178 -0
- package/dist/packages/cli/src/main.js +5583 -0
- package/dist/packages/cli/src/narrative-cmd.js +76 -0
- package/dist/packages/cli/src/pack-cmd.js +323 -0
- package/dist/packages/cli/src/plan-cmd.js +278 -0
- package/dist/packages/cli/src/popup.js +810 -0
- package/dist/packages/cli/src/rules-cmd.js +131 -0
- package/dist/packages/cli/src/rules.js +339 -0
- package/dist/packages/cli/src/scan/command.js +57 -0
- package/dist/packages/cli/src/scan/engine.js +419 -0
- package/dist/packages/cli/src/scan/observe.js +64 -0
- package/dist/packages/cli/src/scan/ui.js +98 -0
- package/dist/packages/cli/src/screener/filter.js +241 -0
- package/dist/packages/cli/src/screener/presets.js +80 -0
- package/dist/packages/cli/src/screener/rows.js +146 -0
- package/dist/packages/cli/src/screener/rug.js +50 -0
- package/dist/packages/cli/src/screener/sort.js +52 -0
- package/dist/packages/cli/src/screener/view.js +183 -0
- package/dist/packages/cli/src/screens/analyst-session.js +343 -0
- package/dist/packages/cli/src/screens/analyst.js +326 -0
- package/dist/packages/cli/src/screens/boot.js +74 -0
- package/dist/packages/cli/src/screens/bubbles.js +255 -0
- package/dist/packages/cli/src/screens/coin.js +33 -0
- package/dist/packages/cli/src/screens/follows.js +201 -0
- package/dist/packages/cli/src/screens/kol.js +90 -0
- package/dist/packages/cli/src/screens/narrative.js +90 -0
- package/dist/packages/cli/src/screens/newpairs.js +150 -0
- package/dist/packages/cli/src/screens/overlay.js +257 -0
- package/dist/packages/cli/src/screens/plans.js +126 -0
- package/dist/packages/cli/src/screens/positions.js +176 -0
- package/dist/packages/cli/src/screens/rules.js +170 -0
- package/dist/packages/cli/src/screens/screener.js +459 -0
- package/dist/packages/cli/src/screens/social-panel.js +107 -0
- package/dist/packages/cli/src/screens/ticket.js +342 -0
- package/dist/packages/cli/src/screens/token.js +312 -0
- package/dist/packages/cli/src/screens/trending.js +181 -0
- package/dist/packages/cli/src/screens/watchlist.js +104 -0
- package/dist/packages/cli/src/social/demo.js +96 -0
- package/dist/packages/cli/src/social/view.js +250 -0
- package/dist/packages/cli/src/state.js +463 -0
- package/dist/packages/cli/src/theme-cmd.js +126 -0
- package/dist/packages/cli/src/trade.js +319 -0
- package/dist/packages/cli/src/voice-hud.js +42 -0
- package/dist/packages/cli/src/wallet-cmd.js +440 -0
- package/dist/packages/cli/src/wallet-command.js +31 -0
- package/dist/packages/cli/src/widgets.js +208 -0
- package/dist/packages/cli/src/workspace-cmd.js +68 -0
- package/dist/packages/cli/src/x-cmd.js +154 -0
- package/dist/packages/custom/src/config.js +213 -0
- package/dist/packages/custom/src/index.js +10 -0
- package/dist/packages/custom/src/keymap.js +107 -0
- package/dist/packages/custom/src/layout.js +235 -0
- package/dist/packages/custom/src/packs.js +633 -0
- package/dist/packages/custom/src/rules.js +704 -0
- package/dist/packages/custom/src/schema.js +515 -0
- package/dist/packages/custom/src/themes.js +176 -0
- package/dist/packages/custom/src/widget-html.js +222 -0
- package/dist/packages/custom/src/workspace.js +141 -0
- package/dist/packages/data/src/analyst-actions.js +133 -0
- package/dist/packages/data/src/budget.js +88 -0
- package/dist/packages/data/src/cache.js +142 -0
- package/dist/packages/data/src/candles.js +168 -0
- package/dist/packages/data/src/clock.js +64 -0
- package/dist/packages/data/src/credits.js +137 -0
- package/dist/packages/data/src/detail.js +97 -0
- package/dist/packages/data/src/fast-lane.js +321 -0
- package/dist/packages/data/src/fixtures.js +135 -0
- package/dist/packages/data/src/health.js +245 -0
- package/dist/packages/data/src/http.js +277 -0
- package/dist/packages/data/src/images/cache.js +141 -0
- package/dist/packages/data/src/images/decode-worker.js +28 -0
- package/dist/packages/data/src/images/decode.js +81 -0
- package/dist/packages/data/src/images/fetch.js +162 -0
- package/dist/packages/data/src/images/gif.js +214 -0
- package/dist/packages/data/src/images/index.js +10 -0
- package/dist/packages/data/src/images/jpeg.js +544 -0
- package/dist/packages/data/src/images/png.js +310 -0
- package/dist/packages/data/src/images/service.js +334 -0
- package/dist/packages/data/src/images/types.js +27 -0
- package/dist/packages/data/src/index.js +208 -0
- package/dist/packages/data/src/intel/helius-history.js +59 -0
- package/dist/packages/data/src/intel/holder-class.js +125 -0
- package/dist/packages/data/src/intel/rules.js +421 -0
- package/dist/packages/data/src/intel/scan.js +170 -0
- package/dist/packages/data/src/larp/evidence.js +288 -0
- package/dist/packages/data/src/larp/links.js +137 -0
- package/dist/packages/data/src/larp/robots.js +90 -0
- package/dist/packages/data/src/larp/safe-fetch.js +389 -0
- package/dist/packages/data/src/limiter.js +341 -0
- package/dist/packages/data/src/model.js +12 -0
- package/dist/packages/data/src/paper.js +331 -0
- package/dist/packages/data/src/rpc-config.js +126 -0
- package/dist/packages/data/src/rpc-pool.js +166 -0
- package/dist/packages/data/src/social/chain.js +83 -0
- package/dist/packages/data/src/social/dedupe.js +205 -0
- package/dist/packages/data/src/social/feed.js +462 -0
- package/dist/packages/data/src/social/firewall.js +110 -0
- package/dist/packages/data/src/social/index.js +11 -0
- package/dist/packages/data/src/social/kol.js +269 -0
- package/dist/packages/data/src/social/model.js +11 -0
- package/dist/packages/data/src/social/rank.js +184 -0
- package/dist/packages/data/src/social/rss.js +113 -0
- package/dist/packages/data/src/social/summary.js +104 -0
- package/dist/packages/data/src/social/venues.js +186 -0
- package/dist/packages/data/src/sources/dexscreener.js +170 -0
- package/dist/packages/data/src/sources/geckoterminal.js +133 -0
- package/dist/packages/data/src/sources/goplus.js +161 -0
- package/dist/packages/data/src/sources/jupiter-swap.js +236 -0
- package/dist/packages/data/src/sources/jupiter.js +198 -0
- package/dist/packages/data/src/sources/pda.js +113 -0
- package/dist/packages/data/src/sources/pump-curve.js +58 -0
- package/dist/packages/data/src/sources/pumpportal.js +247 -0
- package/dist/packages/data/src/sources/rugcheck.js +71 -0
- package/dist/packages/data/src/sources/solana-rpc.js +299 -0
- package/dist/packages/data/src/sources/solana-ws.js +287 -0
- package/dist/packages/data/src/store.js +289 -0
- package/dist/packages/data/src/trade/bridge.js +464 -0
- package/dist/packages/data/src/trade/caps.js +323 -0
- package/dist/packages/data/src/trade/copy/auto.js +385 -0
- package/dist/packages/data/src/trade/copy/follows.js +103 -0
- package/dist/packages/data/src/trade/copy/index.js +9 -0
- package/dist/packages/data/src/trade/copy/mirror.js +91 -0
- package/dist/packages/data/src/trade/copy/stats.js +120 -0
- package/dist/packages/data/src/trade/copy/tracker.js +158 -0
- package/dist/packages/data/src/trade/copy/trades.js +87 -0
- package/dist/packages/data/src/trade/copy/types.js +6 -0
- package/dist/packages/data/src/trade/executor.js +933 -0
- package/dist/packages/data/src/trade/kill-switch.js +47 -0
- package/dist/packages/data/src/trade/link-store.js +52 -0
- package/dist/packages/data/src/trade/plans/confirm.js +157 -0
- package/dist/packages/data/src/trade/plans/engine.js +784 -0
- package/dist/packages/data/src/trade/plans/executor-live.js +220 -0
- package/dist/packages/data/src/trade/plans/executor-paper.js +44 -0
- package/dist/packages/data/src/trade/plans/executor.js +11 -0
- package/dist/packages/data/src/trade/plans/index.js +12 -0
- package/dist/packages/data/src/trade/plans/journal.js +77 -0
- package/dist/packages/data/src/trade/plans/mandate.js +129 -0
- package/dist/packages/data/src/trade/plans/plan.js +179 -0
- package/dist/packages/data/src/trade/plans/service.js +168 -0
- package/dist/packages/data/src/trade/plans/types.js +6 -0
- package/dist/packages/data/src/trade/rpc-exec.js +229 -0
- package/dist/packages/data/src/trade/signer/client.js +197 -0
- package/dist/packages/data/src/trade/signer/fast-wallet.js +154 -0
- package/dist/packages/data/src/trade/signer/host.js +97 -0
- package/dist/packages/data/src/trade/signer/main.js +121 -0
- package/dist/packages/data/src/trade/signer/probe-builder.js +85 -0
- package/dist/packages/data/src/trade/signer/protocol.js +92 -0
- package/dist/packages/data/src/trade/signer/service.js +400 -0
- package/dist/packages/data/src/trade/signer/sol-usd-feed.js +98 -0
- package/dist/packages/data/src/trade/sol-usd.js +86 -0
- package/dist/packages/data/src/trade/swap-build.js +108 -0
- package/dist/packages/data/src/trade/token-delta.js +201 -0
- package/dist/packages/data/src/trade/tx-decode.js +632 -0
- package/dist/packages/data/src/util.js +24 -0
- package/dist/packages/data/src/watchlist.js +176 -0
- package/dist/packages/data/src/x/api.js +256 -0
- package/dist/packages/data/src/x/budget.js +66 -0
- package/dist/packages/data/src/x/config.js +49 -0
- package/dist/packages/data/src/x/index.js +10 -0
- package/dist/packages/data/src/x/mock-server.js +217 -0
- package/dist/packages/data/src/x/oauth.js +242 -0
- package/dist/packages/data/src/x/pkce.js +21 -0
- package/dist/packages/data/src/x/source.js +285 -0
- package/dist/packages/data/src/x/token-store.js +134 -0
- package/dist/packages/data/src/x/transport.js +71 -0
- package/dist/packages/data/vendor/solana-web3/LICENSE +20 -0
- package/dist/packages/data/vendor/solana-web3/NOTICE.md +13 -0
- package/dist/packages/data/vendor/solana-web3/index.iife.min.js +20 -0
- package/dist/packages/mcp/assets/cases.json +1194 -0
- package/dist/packages/mcp/assets/kb/entries/cabal-and-coordinated-launches.md +28 -0
- package/dist/packages/mcp/assets/kb/entries/common-rug-patterns.md +40 -0
- package/dist/packages/mcp/assets/kb/entries/dbc-mechanics.md +30 -0
- package/dist/packages/mcp/assets/kb/entries/dev-wallet-behaviour.md +33 -0
- package/dist/packages/mcp/assets/kb/entries/glossary.md +35 -0
- package/dist/packages/mcp/assets/kb/entries/holder-concentration.md +30 -0
- package/dist/packages/mcp/assets/kb/entries/jito-bundles.md +29 -0
- package/dist/packages/mcp/assets/kb/entries/launchlab-curve.md +31 -0
- package/dist/packages/mcp/assets/kb/entries/lp-burn-vs-lock.md +31 -0
- package/dist/packages/mcp/assets/kb/entries/metadata-and-copycats.md +29 -0
- package/dist/packages/mcp/assets/kb/entries/mint-freeze-authority.md +31 -0
- package/dist/packages/mcp/assets/kb/entries/narrative-lifecycle.md +32 -0
- package/dist/packages/mcp/assets/kb/entries/pump-bonding-curve.md +33 -0
- package/dist/packages/mcp/assets/kb/entries/pumpswap-migration.md +29 -0
- package/dist/packages/mcp/assets/kb/entries/sniping-and-snipers.md +29 -0
- package/dist/packages/mcp/assets/kb/entries/token2022-extensions-risk.md +32 -0
- package/dist/packages/mcp/assets/kb/entries/wash-trading-fake-volume.md +33 -0
- package/dist/packages/mcp/assets/skills/rug-check.md +52 -0
- package/dist/packages/mcp/assets/skills/token-dossier.md +57 -0
- package/dist/packages/mcp/assets/skills/trench-scan.md +40 -0
- package/dist/packages/mcp/bin/dexterm-mcp.mjs +16 -0
- package/dist/packages/mcp/src/dossier.js +78 -0
- package/dist/packages/mcp/src/firewall.js +21 -0
- package/dist/packages/mcp/src/index.js +22 -0
- package/dist/packages/mcp/src/server.js +849 -0
- package/dist/packages/mcp/src/user-content.js +434 -0
- package/dist/packages/packs/src/backtest.js +183 -0
- package/dist/packages/packs/src/digest.js +95 -0
- package/dist/packages/packs/src/firewall.js +57 -0
- package/dist/packages/packs/src/index.js +19 -0
- package/dist/packages/packs/src/larp-eval.js +100 -0
- package/dist/packages/packs/src/narrative.js +309 -0
- package/dist/packages/packs/src/reason.js +135 -0
- package/dist/packages/packs/src/rug-model.js +137 -0
- package/dist/packages/packs/src/schema.js +54 -0
- package/dist/packages/packs/src/token-dossier.js +174 -0
- package/dist/packages/packs/src/verdicts.js +17 -0
- package/dist/packages/packs/src/wallet-dossier.js +105 -0
- package/dist/packages/popup/src/config.js +71 -0
- package/dist/packages/popup/src/dock.js +271 -0
- package/dist/packages/popup/src/host.js +210 -0
- package/dist/packages/popup/src/index.js +12 -0
- package/dist/packages/popup/src/loopback.js +53 -0
- package/dist/packages/popup/src/open.js +183 -0
- package/dist/packages/popup/src/pages/bubbles-lib.js +160 -0
- package/dist/packages/popup/src/pages/bubbles.css +23 -0
- package/dist/packages/popup/src/pages/bubbles.html +36 -0
- package/dist/packages/popup/src/pages/bubbles.js +214 -0
- package/dist/packages/popup/src/pages/chart-lib.js +262 -0
- package/dist/packages/popup/src/pages/chart.css +50 -0
- package/dist/packages/popup/src/pages/chart.html +56 -0
- package/dist/packages/popup/src/pages/chart.js +554 -0
- package/dist/packages/popup/src/pages/common.css +34 -0
- package/dist/packages/popup/src/pages/common.js +187 -0
- package/dist/packages/popup/src/pages/feeds.html +20 -0
- package/dist/packages/popup/src/pages/feeds.js +77 -0
- package/dist/packages/popup/src/pages/narrative.html +20 -0
- package/dist/packages/popup/src/pages/narrative.js +61 -0
- package/dist/packages/popup/src/pages/plans.css +30 -0
- package/dist/packages/popup/src/pages/plans.html +26 -0
- package/dist/packages/popup/src/pages/plans.js +82 -0
- package/dist/packages/popup/src/pages/roster.css +41 -0
- package/dist/packages/popup/src/pages/roster.html +25 -0
- package/dist/packages/popup/src/pages/roster.js +75 -0
- package/dist/packages/popup/src/pages/token.html +20 -0
- package/dist/packages/popup/src/pages/token.js +112 -0
- package/dist/packages/popup/src/pages/widget-sdk.js +224 -0
- package/dist/packages/popup/src/pages/widget.css +5 -0
- package/dist/packages/popup/src/pages/widget.html +21 -0
- package/dist/packages/popup/src/pages/widget.js +85 -0
- package/dist/packages/popup/src/protocol.js +31 -0
- package/dist/packages/popup/src/selftest.js +156 -0
- package/dist/packages/popup/src/server.js +582 -0
- package/dist/packages/popup/src/sinkproxy.js +167 -0
- package/dist/packages/popup/src/widget-html.js +231 -0
- package/dist/packages/popup/vendor/lightweight-charts/LICENSE +201 -0
- package/dist/packages/popup/vendor/lightweight-charts/NOTICE +2 -0
- package/dist/packages/popup/vendor/lightweight-charts/README.md +30 -0
- package/dist/packages/popup/vendor/lightweight-charts/VERSION +1 -0
- package/dist/packages/popup/vendor/lightweight-charts/lightweight-charts.standalone.production.js +7 -0
- package/dist/packages/recorder/bin/dexterm-recorder.mjs +11 -0
- package/dist/packages/recorder/src/cli.js +113 -0
- package/dist/packages/recorder/src/export.js +71 -0
- package/dist/packages/recorder/src/index.js +20 -0
- package/dist/packages/recorder/src/labels.js +151 -0
- package/dist/packages/recorder/src/open.js +29 -0
- package/dist/packages/recorder/src/recorder.js +553 -0
- package/dist/packages/recorder/src/schedule.js +43 -0
- package/dist/packages/recorder/src/schema.js +135 -0
- package/dist/packages/recorder/src/snapshot.js +191 -0
- package/dist/packages/recorder/src/sweep.js +52 -0
- package/dist/packages/recorder/src/verdicts.js +52 -0
- package/dist/packages/tui/src/bubbles.js +415 -0
- package/dist/packages/tui/src/canvas.js +370 -0
- package/dist/packages/tui/src/chrome.js +85 -0
- package/dist/packages/tui/src/color.js +133 -0
- package/dist/packages/tui/src/flush.js +62 -0
- package/dist/packages/tui/src/fmt.js +188 -0
- package/dist/packages/tui/src/fx-trade.js +278 -0
- package/dist/packages/tui/src/fx.js +527 -0
- package/dist/packages/tui/src/images/blocks.js +141 -0
- package/dist/packages/tui/src/images/coin.js +22 -0
- package/dist/packages/tui/src/images/detect.js +140 -0
- package/dist/packages/tui/src/images/index.js +7 -0
- package/dist/packages/tui/src/images/layer.js +146 -0
- package/dist/packages/tui/src/images/pixels.js +157 -0
- package/dist/packages/tui/src/images/protocols.js +87 -0
- package/dist/packages/tui/src/index.js +15 -0
- package/dist/packages/tui/src/keymap.js +355 -0
- package/dist/packages/tui/src/layout.js +11 -0
- package/dist/packages/tui/src/sound.js +177 -0
- package/dist/packages/tui/src/theme.js +182 -0
- package/dist/packages/tui/src/widgets.js +598 -0
- package/dist/packages/voice/src/controller.js +395 -0
- package/dist/packages/voice/src/doctor.js +63 -0
- package/dist/packages/voice/src/engines.js +44 -0
- package/dist/packages/voice/src/index.js +16 -0
- package/dist/packages/voice/src/router.js +502 -0
- package/dist/packages/voice/src/stt/apple-helper.swift.js +103 -0
- package/dist/packages/voice/src/stt/apple.js +179 -0
- package/dist/packages/voice/src/stt/fake.js +34 -0
- package/dist/packages/voice/src/stt/whisper.js +102 -0
- package/dist/packages/voice/src/summary.js +44 -0
- package/dist/packages/voice/src/tts/fake.js +30 -0
- package/dist/packages/voice/src/tts/say.js +96 -0
- package/dist/packages/voice/src/types.js +3 -0
- package/package.json +42 -4
- package/README.md +0 -3
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// dexterm popup host — `dexterm popup --self-test` (task-1290).
|
|
2
|
+
//
|
|
3
|
+
// the tester may be on another machine with the Mac screen locked, so this does NOT block on a live
|
|
4
|
+
// 60 fps display or a live hotkey press. It reports what it CAN measure headlessly — the shell choice, whether
|
|
5
|
+
// the global hotkey registered, and the frame rate the popup actually renders at — and clearly labels the one
|
|
6
|
+
// thing that needs an unlocked display (confirming 60 fps and pressing the chord). It never claims 60 fps; it
|
|
7
|
+
// reports the measured number and whether the environment looked able to produce it.
|
|
8
|
+
import { createPopupManager } from "./open.js";
|
|
9
|
+
import { loadConfig } from "./config.js";
|
|
10
|
+
import { createPopupHost, displayAvailable } from "./host.js";
|
|
11
|
+
/** A deterministic, network-free candle series for the self-test popup (not real market data). */
|
|
12
|
+
export function fixtureChartVM() {
|
|
13
|
+
const now = Date.now();
|
|
14
|
+
const candles = [];
|
|
15
|
+
let price = 0.0021;
|
|
16
|
+
let seed = 1337;
|
|
17
|
+
const rnd = () => { seed = (seed * 1103515245 + 12345) & 0x7fffffff; return seed / 0x7fffffff; };
|
|
18
|
+
for (let i = 120; i > 0; i--) {
|
|
19
|
+
const o = price;
|
|
20
|
+
const drift = (rnd() - 0.48) * 0.06;
|
|
21
|
+
const c = Math.max(1e-6, o * (1 + drift));
|
|
22
|
+
const h = Math.max(o, c) * (1 + rnd() * 0.02);
|
|
23
|
+
const l = Math.min(o, c) * (1 - rnd() * 0.02);
|
|
24
|
+
candles.push({ t: now - i * 3_600_000, o, h, l, c, v: 1000 + rnd() * 50000 });
|
|
25
|
+
price = c;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
symbol: 'SELFTEST', name: 'popup self-test', mint: 'Se1fTeStMintAddr1111111111111111111111111', interval: '1h',
|
|
29
|
+
price, chg: { m5: 1, h1: 3, h6: -2, h24: 12 }, liq: 250_000, vol24: 1_800_000, mcap: 4_200_000,
|
|
30
|
+
candles, openBarT: candles[candles.length - 1].t, updatedAt: now,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** A deterministic, network-free roster for the roster popup self-test / demo (task-1345). Not real agents. */
|
|
34
|
+
export function fixtureRosterVM() {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
return {
|
|
37
|
+
now, busPort: 48916,
|
|
38
|
+
agents: [
|
|
39
|
+
{ id: 'a1', name: 'claude-code', tier: 'propose', sessions: 1, client: 'claude-code 2.1', lastActivity: now - 4000, topics: ['new_pairs', 'alerts'], reads: 12, readsLimit: 120, proposals: 2, proposalsLimit: 20, refused: 0, paused: false, floodPausedUntil: null },
|
|
40
|
+
{ id: 'a2', name: 'scanbot', tier: 'observe', sessions: 1, client: 'python-sdk', lastActivity: now - 1200, topics: ['trades'], reads: 44, readsLimit: 120, proposals: 0, proposalsLimit: 20, refused: 0, paused: false, floodPausedUntil: null },
|
|
41
|
+
{ id: 'a3', name: 'rogue', tier: 'observe', sessions: 1, client: 'unknown', lastActivity: now - 800, topics: [], reads: 3, readsLimit: 120, proposals: 0, proposalsLimit: 20, refused: 27, paused: true, floodPausedUntil: now + 240000 },
|
|
42
|
+
],
|
|
43
|
+
audit: [
|
|
44
|
+
{ t: now - 800, agent: 'rogue', kind: 'refused', tool: 'arm_plan', ok: false, detail: 'never: no agent may do that at any tier' },
|
|
45
|
+
{ t: now - 1200, agent: 'scanbot', kind: 'call', tool: 'get_trades', ok: true, detail: 'get_trades Fixt…' },
|
|
46
|
+
{ t: now - 4000, agent: 'claude-code', kind: 'proposal', tool: 'propose_alert', ok: true, detail: 'alert Fixt… when mcap crosses 1M' },
|
|
47
|
+
{ t: now - 6000, agent: 'claude-code', kind: 'connect', tool: '-', ok: true, detail: 'tier propose · claude-code 2.1' },
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** A deterministic, network-free narrative board for the popup self-test / demo (task-1356). Not real tokens. */
|
|
52
|
+
export function fixtureNarrativeVM() {
|
|
53
|
+
return {
|
|
54
|
+
title: 'narrative board', window: '1h', tokens_total: 42, unclassified_pct: 14, copycats: 6,
|
|
55
|
+
data_age: '5s', lexicon_version: '0.1.0',
|
|
56
|
+
rows: [
|
|
57
|
+
{ narrative: 'dogs', rank: 1, score: 74, tokens: 8, new_1h: 1, new_24h: 5, vol: 250000, pace: 1.4, med_chg: 10, runner: { symbol: 'WIF', chg: 40, mcap: 2_000_000 } },
|
|
58
|
+
{ narrative: 'ai-agents', rank: 2, score: 70, tokens: 6, new_1h: 2, new_24h: 7, vol: 190000, pace: 1.1, med_chg: 6, runner: { symbol: 'GPT', chg: 22, mcap: 1_100_000 } },
|
|
59
|
+
{ narrative: 'cats', rank: 3, score: 60, tokens: 5, new_1h: 0, new_24h: 3, vol: 130000, pace: null, med_chg: -3, runner: null },
|
|
60
|
+
{ narrative: 'unclassified', rank: null, score: null, tokens: 6, new_1h: 1, new_24h: 2, vol: 0, pace: null, med_chg: null, runner: null },
|
|
61
|
+
],
|
|
62
|
+
limits: 'model output: none (deterministic lexicon v0.1.0). Name-based: X/Telegram-only narratives are missed; 6 copycat symbols.',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Run the self-test and resolve with the measured result. Always cleans up the window host and server. */
|
|
66
|
+
export async function runSelfTest(opts = {}) {
|
|
67
|
+
const seconds = Math.max(2, Math.min(30, opts.seconds ?? 6));
|
|
68
|
+
const env = opts.env ?? process.env;
|
|
69
|
+
const cfg = loadConfig(env);
|
|
70
|
+
const decision = createPopupHost({ hotkey: cfg.hotkey, forceBrowser: opts.forceBrowser, env, platform: opts.platform });
|
|
71
|
+
const displayReachable = displayAvailable(env, opts.platform);
|
|
72
|
+
const result = {
|
|
73
|
+
shell: decision.native ? 'wry' : 'browser',
|
|
74
|
+
reason: decision.reason,
|
|
75
|
+
hotkey: cfg.hotkey || '(disabled)',
|
|
76
|
+
hotkeyRegistered: false,
|
|
77
|
+
fps: null, fpsP95FrameMs: null, openToReadyMs: null, pwned: null, samples: 0,
|
|
78
|
+
displayReachable,
|
|
79
|
+
needsHuman: [], errors: [],
|
|
80
|
+
};
|
|
81
|
+
const perfFps = [];
|
|
82
|
+
const perfP95 = [];
|
|
83
|
+
const mgr = createPopupManager({
|
|
84
|
+
theme: opts.theme, hotkey: cfg.hotkey, rain: cfg.rain, forceBrowser: opts.forceBrowser, env, platform: opts.platform,
|
|
85
|
+
onWarn: (m) => result.errors.push(m),
|
|
86
|
+
onEvent: (ev) => {
|
|
87
|
+
if (ev.ev === 'popup.ready')
|
|
88
|
+
result.openToReadyMs = ev.openToReadyMs;
|
|
89
|
+
else if (ev.ev === 'popup.perf') {
|
|
90
|
+
perfFps.push(ev.fps);
|
|
91
|
+
perfP95.push(ev.p95Ms);
|
|
92
|
+
result.pwned = ev.pwned;
|
|
93
|
+
result.samples++;
|
|
94
|
+
}
|
|
95
|
+
else if (ev.ev === 'popup.log')
|
|
96
|
+
result.errors.push(`page: ${ev.msg}`);
|
|
97
|
+
else if (ev.ev === 'probe.rejected')
|
|
98
|
+
result.errors.push(`probe rejected: ${ev.reason}`);
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
try {
|
|
102
|
+
await mgr.open({ kind: 'chart', title: 'self-test', data: fixtureChartVM() });
|
|
103
|
+
result.shell = mgr.native ? 'wry' : 'browser';
|
|
104
|
+
result.reason = mgr.reason;
|
|
105
|
+
result.hotkeyRegistered = mgr.hotkeyRegistered;
|
|
106
|
+
if (mgr.native) {
|
|
107
|
+
await new Promise((r) => setTimeout(r, seconds * 1000));
|
|
108
|
+
if (perfFps.length) {
|
|
109
|
+
result.fps = +(perfFps.reduce((s, v) => s + v, 0) / perfFps.length).toFixed(1);
|
|
110
|
+
result.fpsP95FrameMs = +(perfP95.reduce((s, v) => s + v, 0) / perfP95.length).toFixed(2);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
result.errors.push(err.message);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
await mgr.shutdown();
|
|
119
|
+
}
|
|
120
|
+
// Honest labelling of what a headless / locked run cannot settle.
|
|
121
|
+
if (result.shell === 'browser') {
|
|
122
|
+
result.needsHuman.push('Native frameless shell not exercised (browser fallback). Build it: `npm run build:shell` in packages/popup, then re-run on the Mac.');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
if (!result.samples)
|
|
126
|
+
result.needsHuman.push('No frame samples arrived — the page may not have rendered (locked/occluded display). Re-run at an unlocked Mac.');
|
|
127
|
+
if (result.fps != null && result.fps < 55)
|
|
128
|
+
result.needsHuman.push(`Measured ${result.fps} fps. WebKit throttles rAF behind a locked/occluded screen; confirm 60 fps at an UNLOCKED, unloaded Mac before claiming it.`);
|
|
129
|
+
result.needsHuman.push(`Hotkey ${result.hotkey} ${result.hotkeyRegistered ? 'registered' : 'NOT registered'}; a live press can only be confirmed by a human at the Mac (press the chord from any app and watch a popup toggle).`);
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/** Render a SelfTestResult as a short terminal report. `color` adds ANSI (default: plain). */
|
|
134
|
+
export function renderSelfTest(r, color = false) {
|
|
135
|
+
const c = (code, s) => (color ? `\x1b[${code}m${s}\x1b[0m` : s);
|
|
136
|
+
const ok = (b) => (b ? c('32', 'yes') : c('31', 'no'));
|
|
137
|
+
const lines = [];
|
|
138
|
+
lines.push(c('1', 'dexterm popup — self-test'));
|
|
139
|
+
lines.push(` window shell ${r.shell === 'wry' ? c('32', 'wry (frameless HUD)') : c('33', 'browser fallback')} — ${r.reason}`);
|
|
140
|
+
lines.push(` display reachable ${ok(r.displayReachable)}`);
|
|
141
|
+
lines.push(` global hotkey ${r.hotkey} registered: ${ok(r.hotkeyRegistered)}`);
|
|
142
|
+
lines.push(` open → ready ${r.openToReadyMs != null ? r.openToReadyMs + ' ms' : '—'}`);
|
|
143
|
+
lines.push(` fps (measured) ${r.fps != null ? `${r.fps} fps · p95 frame ${r.fpsP95FrameMs} ms · ${r.samples} samples` : '— (no native render)'}`);
|
|
144
|
+
lines.push(` page canary window.__pwned = ${r.pwned ?? '—'} ${r.pwned === 'undefined' ? c('32', '(inert ✓)') : ''}`);
|
|
145
|
+
if (r.errors.length) {
|
|
146
|
+
lines.push(c('33', ' notes:'));
|
|
147
|
+
for (const e of r.errors.slice(0, 8))
|
|
148
|
+
lines.push(` · ${e}`);
|
|
149
|
+
}
|
|
150
|
+
if (r.needsHuman.length) {
|
|
151
|
+
lines.push(c('1', ' needs a human at an unlocked Mac:'));
|
|
152
|
+
for (const h of r.needsHuman)
|
|
153
|
+
lines.push(` → ${h}`);
|
|
154
|
+
}
|
|
155
|
+
return lines.join('\n');
|
|
156
|
+
}
|