Bundled NPM package dyor-pulse exposes the executable dyor: reproducible diligence dossiers (Markdown, JSON, optional HTML/PDF) from public aggregators plus optional Dune/OpenRouter augmentation.
Outputs are reference material only—not investment advice, issuer diligence, or contract audit substitutes.
| Section | |
|---|---|
| Requirements | Node version |
| Install & build | Local setup |
| Invocation | How to run the binary |
| Environment | .env variables |
| Commands | Full subcommand reference |
| Artifacts | What packet writes |
| Exit status | Return codes |
| Configuration files | YAML and catalogs |
| Limits & disclaimers | Scope and vendor terms |
- Node.js ≥ 20
cd dyor-pulse
npm ci # or: npm install
npm run build # emits dist/cli.jsDeclared binary: dyor → dist/cli.js (package.json bin). After linking:
npm link && dyor --helpDiscovery:
dyor --help
dyor <command> --helpRun paths:
| Method | Example |
|---|---|
| NPM script | npm run dyor -- packet chainlink --help |
| Node | node ./dist/cli.js packet chainlink --chain ethereum |
| Linked | dyor packet chainlink … |
| Dev (tsx) | npm run dev -- packet chainlink --help |
Working directory: project root recommended so ./.env, ./config/dune-queries.yaml, and ./reports resolve predictably.
Copy .env.example → .env. Never commit real credentials.
Loaded via dotenv when present (src/env.ts).
| Variable | When needed | Purpose |
|---|---|---|
DUNE_API_KEY |
packet Dune lanes, dyor dune run |
Executes registry / ad‑hoc queries. |
COINGECKO_API_KEY |
Optional | Higher CoinGecko limits where supported. |
DEFILLAMA_API_KEY |
Optional | Llama Pro (emissions SDK, quotas). Public TVL/emission probes may still work. |
ETHERSCAN_API_KEY |
packet explorer lane |
Single Etherscan API V2 key; per-request chainid. |
TOKENSNIFFER_API_KEY |
Optional packet |
TokenSniffer smell-test tier. |
ETH_RPC_URL |
Optional packet |
Default JSON-RPC for Transfer-window probe; overridden by --rpc-url. |
OPENROUTER_API_KEY |
packet --with-ai |
OpenRouter chat completions. |
OPENROUTER_MODEL |
Optional | Override default nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free; --ai-model wins. |
Summary:
| Command | Stdout | Role |
|---|---|---|
dyor packet |
Logs + files under --out |
Full dossier |
dyor protocol <slug> |
JSON | Llama protocol snapshot |
dyor markets <coinGeckoId> |
JSON | CoinGecko market row |
dyor chains |
JSON | Macro TVL regime + top chains |
dyor resolve … |
JSON | Resolver debug (failure → exit 1) |
dyor dune list |
YAML registry as JSON | No HTTP |
dyor dune run … |
JSON | One-off Dune execution |
Aggregate DefiLlama, CoinGecko, DexScreener, GoPlus, Etherscan V2; optional TokenSniffer, bounded RPC Transfer probe, emissions attempt, YAML Dune runs, optional OpenRouter memo sections (--with-ai), optional PDF (--pdf).
dyor packet [options] <target>
<target> — Resolved as Llama slug, CoinGecko id (with --coin), contract (with --contract / address shape), or fuzzy label per internal resolver (src/lib/packetResolution.ts).
| Option | Type | Default | Description |
|---|---|---|---|
--coin |
flag | false |
Treat <target> as explicit CoinGecko coin id. |
--contract |
flag | false |
Force contract → CoinGecko path. |
--pick-first |
flag | false |
Accept best fuzzy Llama match when ambiguity would fail. |
-c, --chain <slug> |
string | — | Accent routing: platform slug, alias, or EIP‑155 id (maps via src/lib/evmChainCatalog.ts). |
-o, --out <dir> |
path | ./reports |
Output directory. |
--dune-config <yaml> |
path | ./config/dune-queries.yaml |
Dune query registry. |
--skip-dune |
flag | — | Do not execute registry queries. |
--skip-chains |
flag | — | Omit top-chain regime slice. |
--top-chains <n> |
number | 12 |
Rows in regime table (minimum ~5 enforced in code). |
--skip-dex |
flag | — | Skip DexScreener pool fetch. |
--skip-goplus |
flag | — | Skip GoPlus token_security. |
--skip-etherscan |
flag | — | Skip Etherscan V2 façade. |
--skip-emissions |
flag | — | Skip Llama emissions/unlock scaffolding. |
--skip-tokensniffer |
flag | — | Skip TokenSniffer when key present. |
--skip-rpc-probe |
flag | — | Skip bounded JSON-RPC probe. |
--rpc-url <url> |
URL | env ETH_RPC_URL |
JSON-RPC endpoint (must match chain eth_chainId). |
--rpc-log-blocks <n> |
number | 65536 |
Transfer log window span (bounded; see --help). |
--with-ai |
flag | false |
Call OpenRouter for thesis / strategy prose blocks. Requires OPENROUTER_API_KEY. |
--ai-model <slug> |
string | see env | Overrides OPENROUTER_MODEL; default Nemotron Omni :free. |
--pdf |
flag | false |
After emitting Markdown, compile report.md → report.pdf via md-to-pdf / Puppeteer. |
Fixed memo order (appendix afterward): Overview → On-Chain Snapshot → Capital Flows & User Behavior → Tokenomics Evaluation → Technical & Risk Assessment → Investment Thesis → Strategic Recommendations for DYOR → methodology & verification.
dyor packet chainlink --chain ethereum -o ./reports/chainlink --with-ai --pdf
dyor packet aave --chain ethereum --skip-dune
dyor packet ethereum --coin -o ./reports/eth-token
dyor packet 0x…token --chain base --rpc-url https://…dyor protocol <slug>
Prints Llama /protocol/<slug> snapshot (TVL series slice, deltas, chains, bridging metadata) as JSON.
Example: dyor protocol aave
dyor markets <coinGeckoId>
CoinGecko coin detail market fields for one exact id.
Example: dyor markets ethereum
dyor chains [--top <n>]
| Option | Default | Description |
|---|---|---|
--top <n> |
15 |
Top-N chains by TVL (clamped ~3–80). |
Emit resolver trace JSON only (no dossier). Exit code 1 on hard resolver failure (src/commands/resolve.ts).
dyor resolve [options] <raw>
| Option | Description |
|---|---|
--coin |
Same as packet. |
--contract |
Same as packet. |
--pick-first |
Same as packet. |
-c, --chain … |
Chain hint. |
dyor dune list [--dune-config <yaml>]
Prints parsed registry (name, queryId, enabled, …) without hitting Dune’s API.
dyor dune run [options] <queryId>
Requires DUNE_API_KEY.
| Option | Description |
|---|---|
-p, --params <csv> |
key=value,key2=value2 query parameters |
Example:
dyor dune run 1234567 -p "blockchain=ethereum,min_usd=1000"| Flag | Behaviour |
|---|---|
-h, --help |
Help (dyor, or subcommand if placed after). |
-V, --version |
Semantic version string. |
Written under dyor packet -o (default ./reports/…). Console logs paths where applicable.
| File | Produced when |
|---|---|
report.md |
Always for packet. |
report.json |
Parallel structured dump (same run; includes methodology footers). |
protocol-tvl.html |
Llama yields ≥2 usable TVL points in series. Inline SVG preview. |
report.pdf |
--pdf succeeds; failure note may append to report.json methodology. |
PDF uses headless Chromium (first run may download browser binaries).
| Code | Meaning |
|---|---|
| 0 | Normal completion (packet prefers degrading skips over aborting single feed failures). |
| 1 | dyor resolve hard resolver failure. |
| ≠0 | Parse errors, missing DUNE_API_KEY on dune run, uncaught Node errors elsewhere. |
CI pattern: dyor resolve gate, then dyor packet, optionally assert report.json lanes your policy requires.
| Path | Role |
|---|---|
config/dune-queries.yaml |
Dune ids + defaults; placeholders use queryId: 0 / enabled: false until you publish real queries. DUNE_API_KEY alone does not run lanes until rows are enabled with numeric ids. |
dune/samples/ |
Sample SQL to fork in Dune’s UI. |
src/lib/evmChainCatalog.ts |
CoinGecko platform → DexScreener / GoPlus / Etherscan chainid. |
src/roleAlignment.ts |
Responsibility vs CLI coverage mapping (maintainer notes). |
- Aggregator truth — Reconcile Llama/CG/Dex/GoPlus with contracts and disclosures.
- Heuristics — bytecode flags, sniff scores, RPC counterparty breadth ≠ audits or labelled wallet intel.
- Explorer reads — one accent-chain ERC‑20 façade; multisite issuance needs manual rollup.
- TVL deltas — Nearest anchored sample logic:
src/lib/tvlMath.ts. - Contracts / fuzzing — Formal audit tooling (Slither, Foundry fuzz, Echidna, …) is out of scope for this repo; orchestrate externally and cite in memos.
Terms: Obey CoinGecko, DefiLlama, Dune, DexScreener, GoPlus, TokenSniffer, Etherscan/OpenRouter rate limits and redistribution policies.
dyor packet --help— live option parity with Commander definitions.- Etherscan V2 chains
- OpenRouter models