@senpi/runtime 3.0.0-dev.openclaw-upgrade-mai.20260623210452 → 3.0.0-dev.runtime-phase-2.20260623210537
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/README.md +9 -10
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +0 -3
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +2 -6
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +56 -43
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +108 -0
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +0 -2
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +0 -2
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/dsl/engine-client/config-mapping.d.ts +0 -7
- package/dist/dsl/engine-client/config-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/config-mapping.js +2 -16
- package/dist/dsl/engine-client/config-mapping.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +2 -18
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +213 -302
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +0 -15
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +9 -44
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +1 -24
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +1 -16
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +4 -35
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/dsl/plugin/options.d.ts +0 -18
- package/dist/dsl/plugin/options.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +3 -4
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +5 -14
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -1
- package/dist/runtime/create-scanner-providers-for-run.js +1 -12
- package/dist/runtime/create-scanner-providers-for-run.js.map +1 -1
- package/dist/runtime/load-runtime-config.js +1 -1
- package/dist/runtime/load-runtime-config.js.map +1 -1
- package/dist/runtime/map-strategies-registration.js +8 -7
- package/dist/runtime/map-strategies-registration.js.map +1 -1
- package/dist/runtime/map-strategies.d.ts.map +1 -1
- package/dist/runtime/map-strategies.js +3 -12
- package/dist/runtime/map-strategies.js.map +1 -1
- package/dist/runtime/reconcile-state.d.ts +0 -44
- package/dist/runtime/reconcile-state.d.ts.map +1 -1
- package/dist/runtime/reconcile-state.js +44 -80
- package/dist/runtime/reconcile-state.js.map +1 -1
- package/dist/runtime/risk-guard.d.ts.map +1 -1
- package/dist/runtime/risk-guard.js +12 -17
- package/dist/runtime/risk-guard.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +995 -2855
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +40 -133
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +0 -26
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +5 -233
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/scanner-registry.d.ts +1 -1
- package/dist/runtime/scanner-registry.d.ts.map +1 -1
- package/dist/runtime/scanner-registry.js +12 -3
- package/dist/runtime/scanner-registry.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime/supervisor/orphan-sweep.js +1 -1
- package/dist/runtime/supervisor/orphan-sweep.js.map +1 -1
- package/dist/runtime/supervisor/supervisor-utils.d.ts +1 -1
- package/dist/runtime/supervisor/supervisor-utils.d.ts.map +1 -1
- package/dist/runtime/supervisor/supervisor-utils.js +1 -1
- package/dist/runtime/supervisor/supervisor-utils.js.map +1 -1
- package/dist/runtime-api/intake/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +36 -28
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +0 -0
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.d.ts +4 -18
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +3 -24
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +0 -6
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +0 -1
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +0 -5
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/scanners/external/liquidation-watchdog/README.md +107 -0
- package/dist/scanners/external/liquidation-watchdog/liquidation-watchdog.yaml +48 -0
- package/dist/scanners/external/liquidation-watchdog/producer.mjs +336 -0
- package/dist/scanners/external/momentum/README.md +148 -0
- package/dist/scanners/external/momentum/momentum.yaml +116 -0
- package/dist/scanners/external/momentum/producer.mjs +251 -0
- package/dist/scanners/external/scaffold/__main__.py +24 -65
- package/dist/scanners/external/scaffold/delivery.py +22 -56
- package/dist/scanners/external/scaffold/entrypoint_loader.py +48 -42
- package/dist/scanners/external/scaffold/journal.py +2 -13
- package/dist/scanners/external/scaffold/scaffold.py +128 -159
- package/dist/scanners/external/scaffold/signal_envelope.py +34 -177
- package/dist/scanners/external/shared/ingest.mjs +112 -0
- package/dist/scanners/external-scanner-receiver.d.ts +0 -6
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -1
- package/dist/scanners/external-scanner-receiver.js +1 -14
- package/dist/scanners/external-scanner-receiver.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-live.d.ts +1 -1
- package/dist/scripts/run-dsl-standalone-live.js +3 -5
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
- package/dist/senpi/client.d.ts +0 -12
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +2 -31
- package/dist/senpi/client.js.map +1 -1
- package/dist/state/state-manager.d.ts +0 -17
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +0 -28
- package/dist/state/state-manager.js.map +1 -1
- package/dist/strategy/strategy-state.d.ts.map +1 -1
- package/dist/strategy/strategy-state.js +1 -7
- package/dist/strategy/strategy-state.js.map +1 -1
- package/dist/tracking/constants.d.ts.map +1 -1
- package/dist/tracking/constants.js +0 -2
- package/dist/tracking/constants.js.map +1 -1
- package/dist/types/dsl/index.d.ts +1 -1
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +0 -7
- package/dist/types/scanner.d.ts.map +1 -1
- package/examples/README.md +89 -0
- package/examples/scanners-consumer-quickstart.mjs +134 -0
- package/examples/scanners-emerging-movers-v4.mjs +287 -0
- package/examples/scanners-liquidation-watchdog.mjs +341 -0
- package/examples/scanners-live-mcp.mjs +208 -0
- package/examples/scanners-multi-strategy.mjs +165 -0
- package/examples/scanners-position-tracker-e2e.mjs +225 -0
- package/examples/scanners-scheduled-events.mjs +96 -0
- package/examples/scanners-senpi-provider-client.mjs +182 -0
- package/examples/scanners-single-strategy.mjs +198 -0
- package/examples/strategies/README.md +12 -17
- package/examples/strategies/dsl-showcase.yaml +68 -0
- package/examples/strategies/dsl.yaml +51 -0
- package/examples/strategies/fox-minimal-loosened.yaml +240 -0
- package/examples/strategies/fox-minimal.yaml +242 -0
- package/examples/strategies/minimal.yaml +46 -0
- package/examples/strategies/momentum/how-it-works.md +48 -0
- package/examples/strategies/momentum/momentum-guarded.yaml +161 -0
- package/examples/strategies/risk-showcase.yaml +93 -0
- package/examples/strategies/viper.yaml +67 -0
- package/examples/strategies/wolf.yaml +72 -0
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +123 -0
- package/package.json +1 -1
- package/dist/runtime/reconcile-decide.d.ts +0 -73
- package/dist/runtime/reconcile-decide.d.ts.map +0 -1
- package/dist/runtime/reconcile-decide.js +0 -166
- package/dist/runtime/reconcile-decide.js.map +0 -1
- package/dist/runtime/reconcile-run.d.ts +0 -62
- package/dist/runtime/reconcile-run.d.ts.map +0 -1
- package/dist/runtime/reconcile-run.js +0 -173
- package/dist/runtime/reconcile-run.js.map +0 -1
- package/dist/scanners/external/scaffold/ctx.py +0 -78
- package/dist/scanners/external/scaffold/requirements.txt +0 -11
- package/dist/scanners/external/scaffold/senpi_mcp.py +0 -250
- package/dist/scanners/external/scaffold/state_manager.py +0 -175
- package/dist/utils/keyed-mutex.d.ts +0 -37
- package/dist/utils/keyed-mutex.d.ts.map +0 -1
- package/dist/utils/keyed-mutex.js +0 -77
- package/dist/utils/keyed-mutex.js.map +0 -1
- package/examples/strategies/iguana/README.md +0 -135
- package/examples/strategies/iguana/recipe.yaml +0 -137
- package/examples/strategies/iguana/scanners/scan.py +0 -243
- package/examples/strategies/iguana/scanners/scoring.py +0 -152
- package/examples/strategies/raptor/README.md +0 -156
- package/examples/strategies/raptor/recipe.yaml +0 -154
- package/examples/strategies/raptor/scanners/scan.py +0 -349
- package/examples/strategies/raptor/scanners/scoring.py +0 -452
- package/examples/strategies/spider/README.md +0 -97
- package/examples/strategies/spider/scalp/recipe.yaml +0 -129
- package/examples/strategies/spider/scalp/scanners/scan.py +0 -219
- package/examples/strategies/spider/scalp/scanners/scoring.py +0 -179
- package/examples/strategies/spider/swing/recipe.yaml +0 -141
- package/examples/strategies/spider/swing/scanners/scan.py +0 -334
- package/examples/strategies/spider/swing/scanners/scoring.py +0 -184
- package/examples/strategies/turbine/README.md +0 -167
- package/examples/strategies/turbine/recipe-runners.yaml +0 -123
- package/examples/strategies/turbine/recipe-volume.yaml +0 -129
- package/examples/strategies/turbine/scanners/scan.py +0 -283
- package/examples/strategies/turbine/scanners/scoring.py +0 -190
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/scanner.d.ts
CHANGED
|
@@ -34,13 +34,6 @@ export interface Signal {
|
|
|
34
34
|
factors: Record<string, boolean>;
|
|
35
35
|
/** Extra scanner-specific metadata for downstream consumers. */
|
|
36
36
|
meta: Record<string, unknown>;
|
|
37
|
-
/**
|
|
38
|
-
* Canonical per-signal USD margin (not a percent). When a producer/LLM sets it,
|
|
39
|
-
* the open action sizes the position to this value, overriding config sizing.
|
|
40
|
-
*/
|
|
41
|
-
marginUsd?: number;
|
|
42
|
-
/** Per-signal leverage override. When set, overrides config default leverage. */
|
|
43
|
-
leverage?: number;
|
|
44
37
|
}
|
|
45
38
|
/** Canonical persisted execution result produced by the engine. */
|
|
46
39
|
export interface ScanResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/types/scanner.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,2CAA2C;AAC3C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAIhC,uEAAuE;AACvE,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACnC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/types/scanner.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,2CAA2C;AAC3C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAIhC,uEAAuE;AACvE,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACnC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,0DAA0D;IAC1D,MAAM,EAAE,UAAU,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Scanners Module Examples
|
|
2
|
+
|
|
3
|
+
These examples are real clients of the standalone scanners module.
|
|
4
|
+
|
|
5
|
+
If you are integrating the module as a consumer for the first time, start with `scanners-consumer-quickstart.mjs`.
|
|
6
|
+
|
|
7
|
+
Each example imports from a built `dist/` entrypoint, so build first:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Run examples:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node examples/scanners-single-strategy.mjs
|
|
17
|
+
node examples/scanners-multi-strategy.mjs
|
|
18
|
+
node examples/scanners-scheduled-events.mjs
|
|
19
|
+
node examples/scanners-senpi-provider-client.mjs
|
|
20
|
+
node examples/scanners-consumer-quickstart.mjs
|
|
21
|
+
node examples/scanners-emerging-movers-v4.mjs
|
|
22
|
+
|
|
23
|
+
# Requires env vars (see below)
|
|
24
|
+
node examples/scanners-live-mcp.mjs
|
|
25
|
+
node examples/scanners-position-tracker-e2e.mjs
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
What each example demonstrates:
|
|
29
|
+
|
|
30
|
+
1. `scanners-consumer-quickstart.mjs`
|
|
31
|
+
- Smallest consumer-oriented setup
|
|
32
|
+
- Which imports to use
|
|
33
|
+
- Required `createScannerRuntimeModule(...)` options
|
|
34
|
+
- Manual `runOnce(...)` flow and `querySignals(...)`
|
|
35
|
+
|
|
36
|
+
2. `scanners-single-strategy.mjs`
|
|
37
|
+
- One strategy with `prescreener`, `oi-tracker`, `momentum`, `emerging-movers`
|
|
38
|
+
- Manual `runOnce` flow and signal query
|
|
39
|
+
|
|
40
|
+
3. `scanners-multi-strategy.mjs`
|
|
41
|
+
- Two strategies sharing scanner ids
|
|
42
|
+
- Different scanner configs per strategy and isolated outputs
|
|
43
|
+
|
|
44
|
+
4. `scanners-scheduled-events.mjs`
|
|
45
|
+
- Interval-driven execution with `start()` / `stop()`
|
|
46
|
+
- Pub/sub lifecycle events (`start`, `complete`, `skip`, `error`)
|
|
47
|
+
|
|
48
|
+
5. `scanners-senpi-provider-client.mjs`
|
|
49
|
+
- Uses `createSenpiScannerProviders(...)` with a **mock** `callTool` client
|
|
50
|
+
- Demonstrates provider wiring for `prescreener`, `momentum`, and `emerging-movers`
|
|
51
|
+
|
|
52
|
+
6. `scanners-emerging-movers-v4.mjs`
|
|
53
|
+
- Showcases all five v4 signal types: FIRST_JUMP, CONTRIB_EXPLOSION, IMMEDIATE_MOVER, NEW_ENTRY_DEEP, DEEP_CLIMBER
|
|
54
|
+
- Simulates a 50-token SM leaderboard evolving over 4 scans
|
|
55
|
+
- Production-like v4 config with all detection thresholds
|
|
56
|
+
- Prints signals with priority, reasons, factors, and summary breakdown
|
|
57
|
+
|
|
58
|
+
7. `scanners-live-mcp.mjs`
|
|
59
|
+
- Connects to the **real Senpi MCP server** using `@modelcontextprotocol/sdk`
|
|
60
|
+
- Bridges `Client.callTool` → `SenpiToolClient` interface
|
|
61
|
+
- Runs all four scanners against live market data and prints results
|
|
62
|
+
- Requires env vars:
|
|
63
|
+
```bash
|
|
64
|
+
export SENPI_API_KEY="your-api-key"
|
|
65
|
+
export SENPI_MCP_URL="https://mcp.prod.senpi.ai/mcp"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
8. `scanners-position-tracker-e2e.mjs`
|
|
69
|
+
- Connects to the **real Senpi MCP server** and runs the `position-tracker` scanner
|
|
70
|
+
- Fetches clearing house state for a strategy wallet with open positions
|
|
71
|
+
- Runs 3 iterations: initial scan (POSITION_OPENED deltas), then 2 steady-state heartbeats
|
|
72
|
+
- Prints detailed position snapshots (direction, size, entry, leverage, uPnL, ROE)
|
|
73
|
+
- Requires env vars:
|
|
74
|
+
```bash
|
|
75
|
+
export SENPI_API_KEY="your-api-key"
|
|
76
|
+
export SENPI_MCP_URL="https://mcp.prod.senpi.ai/mcp"
|
|
77
|
+
# Optional: override default strategy address
|
|
78
|
+
export STRATEGY_ADDRESS="0x..."
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Strategy YAML templates
|
|
82
|
+
|
|
83
|
+
See [`strategies/`](./strategies/README.md) for production-ready YAML
|
|
84
|
+
configs you can copy, fill in your wallet address, and load directly:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
openclaw senpi runtime create -p examples/strategies/wolf.yaml
|
|
88
|
+
```
|
|
89
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import {
|
|
5
|
+
createScannerRuntimeModule,
|
|
6
|
+
momentumScanner,
|
|
7
|
+
prescreenerScanner,
|
|
8
|
+
} from "../dist/index.js";
|
|
9
|
+
|
|
10
|
+
function createInstruments() {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
name: "BTC",
|
|
14
|
+
isDelisted: false,
|
|
15
|
+
maxLeverage: 10,
|
|
16
|
+
context: {
|
|
17
|
+
markPx: 105,
|
|
18
|
+
prevDayPx: 100,
|
|
19
|
+
midPx: 105,
|
|
20
|
+
dayNtlVlm: 80_000_000,
|
|
21
|
+
openInterest: 2_000_000_000,
|
|
22
|
+
funding: 0.001,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "ETH",
|
|
27
|
+
isDelisted: false,
|
|
28
|
+
maxLeverage: 8,
|
|
29
|
+
context: {
|
|
30
|
+
markPx: 101,
|
|
31
|
+
prevDayPx: 100,
|
|
32
|
+
midPx: 101,
|
|
33
|
+
dayNtlVlm: 40_000_000,
|
|
34
|
+
openInterest: 1_000_000_000,
|
|
35
|
+
funding: 0.001,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function createCandles() {
|
|
42
|
+
return {
|
|
43
|
+
BTC: {
|
|
44
|
+
candles: {
|
|
45
|
+
"1h": [
|
|
46
|
+
{ timestamp: 1, open: 100, high: 102, low: 99, close: 100, volume: 1000 },
|
|
47
|
+
{ timestamp: 2, open: 100, high: 106, low: 100, close: 105, volume: 1400 },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
ETH: {
|
|
52
|
+
candles: {
|
|
53
|
+
"1h": [
|
|
54
|
+
{ timestamp: 1, open: 100, high: 101, low: 99, close: 100, volume: 900 },
|
|
55
|
+
{ timestamp: 2, open: 100, high: 101, low: 99, close: 100.2, volume: 920 },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function main() {
|
|
63
|
+
const stateDir = await mkdtemp(join(tmpdir(), "scanners-consumer-quickstart-"));
|
|
64
|
+
|
|
65
|
+
// Required pieces:
|
|
66
|
+
// - stateDir
|
|
67
|
+
// - at least one strategy
|
|
68
|
+
// - scanner factories
|
|
69
|
+
// - provider functions required by those scanners
|
|
70
|
+
const scannerModule = createScannerRuntimeModule({
|
|
71
|
+
stateDir,
|
|
72
|
+
strategies: [
|
|
73
|
+
{
|
|
74
|
+
id: "alpha",
|
|
75
|
+
name: "Alpha",
|
|
76
|
+
scannerOverrides: {
|
|
77
|
+
momentum: {
|
|
78
|
+
config: {
|
|
79
|
+
timeframe: "1h",
|
|
80
|
+
minMovePct: 1.5,
|
|
81
|
+
maxCandidates: 20,
|
|
82
|
+
minDayVolume: 1_000_000,
|
|
83
|
+
minSignalScore: 0.2,
|
|
84
|
+
requirePrescreened: true,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
scanners: [prescreenerScanner, momentumScanner],
|
|
91
|
+
providers: {
|
|
92
|
+
getInstruments: async () => createInstruments(),
|
|
93
|
+
getCandles: async () => createCandles(),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
scannerModule.on("scanner:run:complete", (event) => {
|
|
98
|
+
console.log(
|
|
99
|
+
"complete:",
|
|
100
|
+
event.scannerId,
|
|
101
|
+
"status=",
|
|
102
|
+
event.result.status,
|
|
103
|
+
"signals=",
|
|
104
|
+
event.result.signals.length,
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
// Manual operation
|
|
110
|
+
await scannerModule.runOnce("alpha", "prescreener");
|
|
111
|
+
await scannerModule.runOnce("alpha", "momentum");
|
|
112
|
+
|
|
113
|
+
const signals = await scannerModule.querySignals({
|
|
114
|
+
strategyId: "alpha",
|
|
115
|
+
scannerId: "momentum",
|
|
116
|
+
limit: 10,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
console.log("persisted momentum signals =", signals.length);
|
|
120
|
+
|
|
121
|
+
// Scheduled operation is also available:
|
|
122
|
+
// await scannerModule.start();
|
|
123
|
+
// ...
|
|
124
|
+
// await scannerModule.stop();
|
|
125
|
+
} finally {
|
|
126
|
+
await scannerModule.stop();
|
|
127
|
+
await rm(stateDir, { recursive: true, force: true });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
main().catch((error) => {
|
|
132
|
+
console.error(error);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
});
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emerging-movers v4 — signal detection showcase
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates the five signal types detected by the emerging-movers scanner
|
|
5
|
+
* using a simulated 50-token SM leaderboard that evolves over 4 scans:
|
|
6
|
+
*
|
|
7
|
+
* Scan 1: baseline (warm-up, no signals emitted)
|
|
8
|
+
* Scan 2: FIRST_JUMP (WIF rockets from #45 to #3),
|
|
9
|
+
* CONTRIB_EXPLOSION (ONDO goes 4x contribution),
|
|
10
|
+
* NEW_ENTRY_DEEP (PENDLE appears at #8)
|
|
11
|
+
* Scan 3: IMMEDIATE_MOVER (JUP jumps 15 ranks from #28),
|
|
12
|
+
* DEEP_CLIMBER (RENDER climbs 6 ranks from #32)
|
|
13
|
+
* Scan 4: climb streak + multi-scan climbing for tokens that kept improving
|
|
14
|
+
*
|
|
15
|
+
* Run:
|
|
16
|
+
* npm run build && node examples/scanners-emerging-movers-v4.mjs
|
|
17
|
+
*/
|
|
18
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
19
|
+
import { tmpdir } from "node:os";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
import {
|
|
22
|
+
createScannerRuntimeModule,
|
|
23
|
+
buildCompositionFromScanners,
|
|
24
|
+
emergingMoversScanner,
|
|
25
|
+
} from "../dist/scanners/index.js";
|
|
26
|
+
|
|
27
|
+
// ─── Simulated SM leaderboard ───────────────────────────────────────────────
|
|
28
|
+
// 50 tokens with realistic contribution and trader distributions. Specific
|
|
29
|
+
// tokens are manipulated across scans to trigger each v4 signal type.
|
|
30
|
+
|
|
31
|
+
function makeBaseLeaderboard() {
|
|
32
|
+
const tokens = [
|
|
33
|
+
"BTC", "ETH", "SOL", "DOGE", "PEPE", "AVAX", "LINK", "MATIC",
|
|
34
|
+
"ARB", "OP", "SUI", "APT", "INJ", "TIA", "SEI", "NEAR",
|
|
35
|
+
"FTM", "ATOM", "DOT", "ADA", "XRP", "BNB", "UNI", "AAVE",
|
|
36
|
+
"MKR", "LDO", "CRV", "SNX", "COMP", "ONDO", "WIF", "JUP",
|
|
37
|
+
"RENDER", "FET", "RNDR", "PYTH", "JTO", "STRK", "MANTA", "DYM",
|
|
38
|
+
"PIXEL", "PORTAL", "ETHFI", "W", "ENA", "BOME", "SLERF", "MEW",
|
|
39
|
+
"MYRO", "BONK",
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
return tokens.map((token, i) => ({
|
|
43
|
+
token,
|
|
44
|
+
direction: "up",
|
|
45
|
+
// Contribution decreases roughly linearly; top tokens dominate
|
|
46
|
+
pctOfTopTradersGain: Math.max(0.001, 0.50 - i * 0.009),
|
|
47
|
+
traderCount: Math.max(10, 500 - i * 8),
|
|
48
|
+
tokenPriceChangePct4h: Math.max(-2, 8 - i * 0.3),
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Scan 1: Baseline snapshot. Scanner warms up (no signals emitted). */
|
|
53
|
+
function scan1() {
|
|
54
|
+
return makeBaseLeaderboard();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Scan 2: Three dramatic events.
|
|
59
|
+
* - WIF (was #31, contrib 0.230) rockets to massive contribution → lands ~#3
|
|
60
|
+
* - ONDO (was #30, contrib 0.239) goes 4x contribution → CONTRIB_EXPLOSION
|
|
61
|
+
* - PENDLE (new token, wasn't in scan 1) appears with high contribution → NEW_ENTRY_DEEP
|
|
62
|
+
*/
|
|
63
|
+
function scan2() {
|
|
64
|
+
const board = makeBaseLeaderboard();
|
|
65
|
+
|
|
66
|
+
// WIF: was at index 30 (rank ~31). Boost contribution so it sorts to ~rank 3.
|
|
67
|
+
// Also: WIF was ranked 31 (>= firstJumpMinPrevRank=30), triggering FIRST_JUMP.
|
|
68
|
+
const wif = board.find((m) => m.token === "WIF");
|
|
69
|
+
wif.pctOfTopTradersGain = 0.48;
|
|
70
|
+
wif.traderCount = 420;
|
|
71
|
+
wif.tokenPriceChangePct4h = 15.2;
|
|
72
|
+
|
|
73
|
+
// ONDO: was at index 29 (rank ~30). 4x its contribution for CONTRIB_EXPLOSION.
|
|
74
|
+
const ondo = board.find((m) => m.token === "ONDO");
|
|
75
|
+
ondo.pctOfTopTradersGain = ondo.pctOfTopTradersGain * 4.5;
|
|
76
|
+
ondo.traderCount = 310;
|
|
77
|
+
ondo.tokenPriceChangePct4h = 9.1;
|
|
78
|
+
|
|
79
|
+
// JUP: boost in scan 2 so it lands ~rank 26–29 (between deepClimbRankThreshold
|
|
80
|
+
// and firstJumpMinPrevRank). This sets up scan 3's IMMEDIATE_MOVER — prevRank
|
|
81
|
+
// will be >= 25 (qualifies as deep) but < 30 (not deep enough for FIRST_JUMP).
|
|
82
|
+
const jup = board.find((m) => m.token === "JUP");
|
|
83
|
+
jup.pctOfTopTradersGain = 0.28;
|
|
84
|
+
jup.traderCount = 260;
|
|
85
|
+
|
|
86
|
+
// PENDLE: replace a low-ranked filler token so PENDLE appears fresh.
|
|
87
|
+
const pendle = board.findIndex((m) => m.token === "BONK");
|
|
88
|
+
board[pendle] = {
|
|
89
|
+
token: "PENDLE",
|
|
90
|
+
direction: "up",
|
|
91
|
+
pctOfTopTradersGain: 0.42,
|
|
92
|
+
traderCount: 280,
|
|
93
|
+
tokenPriceChangePct4h: 7.8,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
return board;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Scan 3: Rank-based signals.
|
|
101
|
+
* - JUP jumps 15+ ranks from ~#27 → IMMEDIATE_MOVER (not FIRST_JUMP because prevRank < 30)
|
|
102
|
+
* - RENDER climbs 6 ranks from deep → DEEP_CLIMBER
|
|
103
|
+
* - PENDLE continues climbing slightly (building streak history)
|
|
104
|
+
*/
|
|
105
|
+
function scan3() {
|
|
106
|
+
const board = makeBaseLeaderboard();
|
|
107
|
+
|
|
108
|
+
// Keep WIF high (now a returning token, not a first jump)
|
|
109
|
+
const wif = board.find((m) => m.token === "WIF");
|
|
110
|
+
wif.pctOfTopTradersGain = 0.46;
|
|
111
|
+
wif.traderCount = 400;
|
|
112
|
+
|
|
113
|
+
// ONDO settles back a bit (no longer 4x, so no explosion this scan)
|
|
114
|
+
const ondo = board.find((m) => m.token === "ONDO");
|
|
115
|
+
ondo.pctOfTopTradersGain = 0.35;
|
|
116
|
+
|
|
117
|
+
// PENDLE still present, climbing a bit
|
|
118
|
+
const pendle = board.findIndex((m) => m.token === "BONK");
|
|
119
|
+
board[pendle] = {
|
|
120
|
+
token: "PENDLE",
|
|
121
|
+
direction: "up",
|
|
122
|
+
pctOfTopTradersGain: 0.43,
|
|
123
|
+
traderCount: 290,
|
|
124
|
+
tokenPriceChangePct4h: 6.5,
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// In scan 2, JUP was at its default position (index 31, contrib ~0.221).
|
|
128
|
+
// After sorting in scan 2 (with WIF and ONDO boosted), JUP lands around rank ~27.
|
|
129
|
+
// Here we give JUP a contribution that sorts it to ~rank 10, a jump of 15+.
|
|
130
|
+
// prevRank ~27 is >= deepClimbRankThreshold (25) but < firstJumpMinPrevRank (30),
|
|
131
|
+
// so it qualifies as IMMEDIATE_MOVER, not FIRST_JUMP.
|
|
132
|
+
const jup = board.find((m) => m.token === "JUP");
|
|
133
|
+
jup.pctOfTopTradersGain = 0.44;
|
|
134
|
+
jup.traderCount = 350;
|
|
135
|
+
jup.tokenPriceChangePct4h = 11.0;
|
|
136
|
+
|
|
137
|
+
// RENDER: was at index 32 (rank ~33). Moderate boost for DEEP_CLIMBER.
|
|
138
|
+
const render = board.find((m) => m.token === "RENDER");
|
|
139
|
+
render.pctOfTopTradersGain = 0.30;
|
|
140
|
+
render.traderCount = 240;
|
|
141
|
+
render.tokenPriceChangePct4h = 5.3;
|
|
142
|
+
|
|
143
|
+
return board;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Scan 4: Sustained climbing.
|
|
148
|
+
* - RENDER continues climbing → STREAK signal
|
|
149
|
+
* - PENDLE continues climbing → multi-scan CLIMBING detection
|
|
150
|
+
*/
|
|
151
|
+
function scan4() {
|
|
152
|
+
const board = makeBaseLeaderboard();
|
|
153
|
+
|
|
154
|
+
// WIF, ONDO, JUP remain high but stable
|
|
155
|
+
const wif = board.find((m) => m.token === "WIF");
|
|
156
|
+
wif.pctOfTopTradersGain = 0.45;
|
|
157
|
+
const ondo = board.find((m) => m.token === "ONDO");
|
|
158
|
+
ondo.pctOfTopTradersGain = 0.34;
|
|
159
|
+
const jup = board.find((m) => m.token === "JUP");
|
|
160
|
+
jup.pctOfTopTradersGain = 0.43;
|
|
161
|
+
|
|
162
|
+
// PENDLE keeps climbing
|
|
163
|
+
const pendle = board.findIndex((m) => m.token === "BONK");
|
|
164
|
+
board[pendle] = {
|
|
165
|
+
token: "PENDLE",
|
|
166
|
+
direction: "up",
|
|
167
|
+
pctOfTopTradersGain: 0.45,
|
|
168
|
+
traderCount: 310,
|
|
169
|
+
tokenPriceChangePct4h: 8.2,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// RENDER continues improving
|
|
173
|
+
const render = board.find((m) => m.token === "RENDER");
|
|
174
|
+
render.pctOfTopTradersGain = 0.36;
|
|
175
|
+
render.traderCount = 270;
|
|
176
|
+
render.tokenPriceChangePct4h = 6.8;
|
|
177
|
+
|
|
178
|
+
return board;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ─── Main ───────────────────────────────────────────────────────────────────
|
|
182
|
+
|
|
183
|
+
const SCAN_DATA = [scan1, scan2, scan3, scan4];
|
|
184
|
+
|
|
185
|
+
async function main() {
|
|
186
|
+
const stateDir = await mkdtemp(join(tmpdir(), "emerging-movers-v4-"));
|
|
187
|
+
let scanIndex = 0;
|
|
188
|
+
|
|
189
|
+
const module = createScannerRuntimeModule({
|
|
190
|
+
stateDir,
|
|
191
|
+
...buildCompositionFromScanners([emergingMoversScanner]),
|
|
192
|
+
strategies: [
|
|
193
|
+
{
|
|
194
|
+
id: "wolf",
|
|
195
|
+
name: "Wolf Strategy",
|
|
196
|
+
scannerOverrides: {
|
|
197
|
+
"emerging-movers": {
|
|
198
|
+
config: {
|
|
199
|
+
// Production-like v4 configuration
|
|
200
|
+
topN: 50,
|
|
201
|
+
minRankJump: 5,
|
|
202
|
+
minTopTradersGain: 0.01,
|
|
203
|
+
minScansBeforeSignals: 2,
|
|
204
|
+
historyLimit: 60,
|
|
205
|
+
immediateJumpThreshold: 10,
|
|
206
|
+
deepClimbRankThreshold: 25,
|
|
207
|
+
contribExplosionMultiplier: 3.0,
|
|
208
|
+
contribAccelThreshold: 0.003,
|
|
209
|
+
minVelocityForDeepClimber: 0.0003,
|
|
210
|
+
erraticReversalThreshold: 5,
|
|
211
|
+
climbStreakScans: 3,
|
|
212
|
+
rankClimbThreshold: 3,
|
|
213
|
+
newEntryDeepMaxRank: 20,
|
|
214
|
+
newEntryMaxRank: 35,
|
|
215
|
+
firstJumpMinPrevRank: 30,
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
providers: {
|
|
222
|
+
getInstruments: async () => [],
|
|
223
|
+
getSmData: async () => {
|
|
224
|
+
const data = SCAN_DATA[scanIndex]();
|
|
225
|
+
scanIndex++;
|
|
226
|
+
return data;
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
try {
|
|
232
|
+
for (let i = 0; i < SCAN_DATA.length; i++) {
|
|
233
|
+
const result = await module.runOnce("wolf", "emerging-movers");
|
|
234
|
+
console.log(`\n── Scan ${i + 1} ──────────────────────────────────────`);
|
|
235
|
+
console.log(`Status: ${result.status} | Scanned: ${result.scannedCount} | Signals: ${result.signals.length}`);
|
|
236
|
+
|
|
237
|
+
if (result.signals.length === 0) {
|
|
238
|
+
console.log("(warm-up scan — no signals yet)");
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
for (const signal of result.signals) {
|
|
243
|
+
const m = signal.meta;
|
|
244
|
+
console.log(
|
|
245
|
+
` [${signal.signalType}] ${signal.asset}`,
|
|
246
|
+
`| score=${signal.score}`,
|
|
247
|
+
`| rank=#${m.rank}`,
|
|
248
|
+
`| prev=#${m.prevRank ?? "new"}`,
|
|
249
|
+
`| jump=${m.jump}`,
|
|
250
|
+
`| vel=${m.contribVelocity}`,
|
|
251
|
+
);
|
|
252
|
+
console.log(` reasons: ${(m.reasons).join(", ")}`);
|
|
253
|
+
|
|
254
|
+
const activeFactors = Object.entries(signal.factors)
|
|
255
|
+
.filter(([, v]) => v)
|
|
256
|
+
.map(([k]) => k);
|
|
257
|
+
if (activeFactors.length > 0) {
|
|
258
|
+
console.log(` factors: ${activeFactors.join(", ")}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Print summary breakdown
|
|
263
|
+
const bd = result.summary.signalBreakdown;
|
|
264
|
+
const counts = Object.entries(bd).filter(([, v]) => v > 0);
|
|
265
|
+
if (counts.length > 0) {
|
|
266
|
+
console.log(` summary: ${counts.map(([k, v]) => `${k}=${v}`).join(", ")}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Query all persisted signals
|
|
271
|
+
const allSignals = await module.querySignals({ strategyId: "wolf", limit: 50 });
|
|
272
|
+
console.log(`\n── Total persisted signals: ${allSignals.length} ──`);
|
|
273
|
+
const byType = {};
|
|
274
|
+
for (const s of allSignals) {
|
|
275
|
+
byType[s.signalType] = (byType[s.signalType] || 0) + 1;
|
|
276
|
+
}
|
|
277
|
+
console.log("By type:", byType);
|
|
278
|
+
} finally {
|
|
279
|
+
await module.stop();
|
|
280
|
+
await rm(stateDir, { recursive: true, force: true });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
main().catch((error) => {
|
|
285
|
+
console.error(error);
|
|
286
|
+
process.exit(1);
|
|
287
|
+
});
|