dexterm-cli 0.1.4 → 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.
- package/dist/packages/cli/src/agent-paper.js +60 -0
- package/dist/packages/cli/src/analyst/backend.js +183 -0
- package/dist/packages/cli/src/analyst/codex.js +301 -0
- package/dist/packages/cli/src/analyst/session.js +9 -2
- package/dist/packages/cli/src/app-help-gen.js +15 -6
- package/dist/packages/cli/src/doctor.js +58 -2
- package/dist/packages/cli/src/live/dev-history.js +99 -0
- package/dist/packages/cli/src/live/newpairs.js +12 -0
- package/dist/packages/cli/src/live/screens/token-live.js +11 -1
- package/dist/packages/cli/src/live/token.js +1 -0
- package/dist/packages/cli/src/main.js +122 -8
- package/dist/packages/cli/src/mcp-follow.js +37 -7
- package/dist/packages/cli/src/record-cmd.js +2 -0
- package/dist/packages/cli/src/rules.js +25 -2
- package/dist/packages/cli/src/screens/analyst-session.js +5 -3
- package/dist/packages/cli/src/screens/analyst.js +4 -3
- package/dist/packages/cli/src/version.js +1 -1
- package/dist/packages/custom/src/rules.js +2 -2
- package/dist/packages/custom/src/schema.js +5 -1
- package/dist/packages/data/src/fixtures.js +28 -6
- package/dist/packages/data/src/index.js +3 -0
- package/dist/packages/data/src/sources/jupiter.js +1 -0
- package/dist/packages/data/src/trade/agent/paper-desk.js +336 -0
- package/dist/packages/data/src/trade/agent/rendezvous.js +161 -0
- package/dist/packages/mcp/assets/kb/app-help/agent-paper-trade.md +38 -0
- package/dist/packages/mcp/assets/kb/app-help/ask-the-analyst.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/connect-an-agent.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/dev-history.md +32 -0
- package/dist/packages/mcp/assets/kb/app-help/paper-trade.md +1 -1
- package/dist/packages/mcp/assets/kb/app-help/screen-positions.md +4 -1
- package/dist/packages/mcp/assets/kb/app-help/screen-token.md +1 -0
- package/dist/packages/mcp/assets/kb/app-help/use-codex-analyst.md +31 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-agent-paper-trading.md +50 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-directory-metadata-prepared-not-submitted.md +36 -0
- package/dist/packages/mcp/assets/kb/docs/docs-agents-install-in-one-command.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-if-claude-is-missing.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-analyst-use-codex-instead-of-claude.md +35 -0
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-macos-or-linux-npm.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-expectations.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-beginners-windows-powershell-experimental.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-environment-variables.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-rules-engine.md +1 -0
- package/dist/packages/mcp/assets/kb/docs/docs-configuration-the-analyst-s-launch.md +2 -0
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-install.md +13 -3
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-requirements.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-getting-started-supported-platforms.md +2 -2
- package/dist/packages/mcp/assets/kb/docs/docs-larp-measured-accuracy.md +0 -2
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-letting-an-agent-paper-trade-experimental.md +32 -0
- package/dist/packages/mcp/assets/kb/docs/docs-paper-trading-what-the-live-path-keeps.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-screens-dev-history.md +44 -0
- package/dist/packages/mcp/assets/kb/docs/docs-screens-how-well-it-predicts-measured-held-out.md +46 -0
- package/dist/packages/mcp/assets/kb/docs/docs-spectator-follow-over-mcp-in-the-running-terminal.md +1 -1
- package/dist/packages/mcp/assets/kb/docs/docs-troubleshooting-doctor-lines.md +2 -0
- package/dist/packages/mcp/src/index.js +5 -2
- package/dist/packages/mcp/src/paper-agent.js +92 -0
- package/dist/packages/mcp/src/server.js +206 -12
- package/dist/packages/mcp/src/spectator-sink.js +73 -4
- package/dist/packages/mcp/src/user-content.js +1 -0
- package/dist/packages/recorder/src/dev-history.js +129 -0
- package/dist/packages/recorder/src/index.js +1 -0
- package/dist/packages/recorder/src/recorder.js +23 -0
- package/dist/packages/recorder/src/schema.js +11 -0
- package/package.json +1 -1
|
@@ -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
|
`;
|