Development Setup
Tech Stack
| Component | Technology |
|---|---|
| Runtime | Node.js v22, TypeScript, ESM |
| Server | Hono + @hono/node-server + @hono/node-ws |
| Database | DuckDB (duckdb-async) |
| CLI | commander.js |
| Web UI | React 19 + Vite 7 + TailwindCSS 4 |
| Test | Vitest |
| Package Manager | pnpm |
Setup
git clone https://github.com/SierraDevsec/clnode.git
cd clnode
pnpm install
pnpm build
Development Commands
pnpm dev # Dev server with tsx (auto-reload)
pnpm build # TypeScript + Vite build
pnpm test # Run tests
pnpm test:watch # Watch mode
Running Locally
# Start the daemon directly (not via npx)
node dist/cli/index.js start
# Or dev mode with auto-reload
pnpm dev
Important Notes
- Use
now()instead ofcurrent_timestampin DuckDB queries - DuckDB
COUNT(*)returns BigInt — always wrap withNumber() - DuckDB
VARCHAR[]needs literal construction, not bind params hook.shexits 0 even on failure (never blocks Claude Code)hook.shhas 3s curl timeout, requiresjq- Server port: env var
CLNODE_PORT(default 3100)
VSCode Extension Development
cd vscode-extension
pnpm build # esbuild → dist/extension.js (CJS)
pnpm package # vsce package → .vsix
code --install-extension clnode-vscode-*.vsix --force
After Web UI changes: pnpm build (root) → restart daemon → rebuild extension → install → reload VSCode.