Dulus
An AI agent for your desktop and terminal, on any model you choose. Hosted models run on Fuel, paid in $DULUS.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
token-police-web
翻訳待ち
Loading the full README.
Read the full README ↗Next.js / TypeScript / Tailwind / SQLite (libSQL) wallet explorer. Requires Node.js 24.17+ and pnpm. Without TURSO_DATABASE_URL it uses a local SQLite file in data/; with it, the hosted Turso database.
pnpm install
Copy-Item .env.example .env.local
pnpm dev
Open http://localhost:3000. In a second terminal, run pnpm sync:watch to run the web app's independent GE6 indexer. pnpm sync performs one pass. No Discord bot, token, source directory, database connection, or running bot process is required.
On Windows after pnpm build, powershell -File scripts/Start-Web.ps1 runs the web server and indexer together; Ctrl+C stops them. It also supports the Node runtime bundled with Codex when Node is not on PATH.
0x86a1f49e1b1cbd69971e99b66123264c75ac2c8f. Raw Voted events are ABI-decoded; transfers are not counted as votes.pnpm sync --audit to enable full reconciliation when the last audit is at least a day old. Transaction hash + log index prevents duplicates. A checkpoint hash change stops the sync for manual review. Partial, stale, out-of-order or failed responses do not replace the last good vote snapshot. Missing vote indices are recorded for repair while verified later votes can continue to arrive. A renewable SQLite lease prevents two web indexers writing concurrently.data/votes.sqlite. Vote totals use integer arithmetic with 18-decimal precision. GE6 has no verified recipient column in the UI.The header refresh button runs a short GE6 transaction sync before reloading the current page. While the forecast page is visible, it also requests a short sync about every 8 seconds after the previous request finishes and refreshes the ranking if the number of confirmed votes changes. A shared lease and brief global cooldown prevent overlapping scans. The short sync scans recent votes without expanding the scan to older missing indices; it preserves those gaps for the background worker to repair. A previous timeout does not disable future browser syncs. Full audits are available through the worker's --audit option. Holder-balance snapshots are refreshed by the scheduled worker. The last successful vote sync time is shown; failed/stale updates are flagged. Stopping the Discord bot has no effect on the web indexer.
Discord names and settings are never read. Community labels live in the names table of the same database, with revision history. Anyone can set or edit a label. Writes are validated, same-origin, rate-limited and protected against stale revisions. Names are community labels, not verified ownership.
pnpm test
pnpm build
pnpm start
node scripts/check-api.mjs
Indexer tests exercise exact amounts, confirmations, duplicate events, restart, missing receipts, upstream failures, pagination and reorgs. API checks remove only their random synthetic wallet label.
TURSO_DATABASE_URL and TURSO_AUTH_TOKEN on the project. To copy the local data in, put both values in .env.local and run pnpm upload-data..github/workflows/sync-ge6.yml runs pnpm sync every 5 minutes on GitHub Actions (GitHub may delay scheduled runs). Add TURSO_DATABASE_URL and TURSO_AUTH_TOKEN as repository secrets. It can also be started by hand from the Actions tab.TRUST_PROXY=false to share one limit.The UI shows up to 100 latest GE6 transactions and 100 latest historical transactions separately. Counts and totals include all matching rows. Databases, local reference source and credentials are ignored by git.
/admin lists which addresses people searched (with the community name, count, first and last time). Searchers' IPs are not stored, and the admin's own searches are not counted. Set ADMIN_PASSWORD (12+ characters) in the environment to enable it; changing it signs out existing sessions.