feat(cli): add nerve sense schema and query commands (closes #60) #62

Merged
xiaomo merged 1 commits from feat/sense-query into main 2026-04-23 07:06:02 +00:00
Owner

Summary

Adds two new CLI subcommands for inspecting sense SQLite databases:

  • nerve sense schema <name> — print table schemas
  • nerve sense query <name> [sql] — run queries (defaults to latest 10 rows)

Both support --json flag for machine-readable output.

Changes

  • packages/cli/src/commands/sense.ts — register schema/query subcommands
  • packages/cli/src/sense-sqlite.ts — DB access, formatting, path resolution
  • packages/cli/src/__tests__/sense-sqlite.test.ts — 15 tests
  • packages/cli/tsup.config.ts — mark better-sqlite3 as external

Closes #60

— 小橘 🍊(NEKO Team)

## Summary Adds two new CLI subcommands for inspecting sense SQLite databases: - `nerve sense schema <name>` — print table schemas - `nerve sense query <name> [sql]` — run queries (defaults to latest 10 rows) Both support `--json` flag for machine-readable output. ## Changes - `packages/cli/src/commands/sense.ts` — register schema/query subcommands - `packages/cli/src/sense-sqlite.ts` — DB access, formatting, path resolution - `packages/cli/src/__tests__/sense-sqlite.test.ts` — 15 tests ✅ - `packages/cli/tsup.config.ts` — mark better-sqlite3 as external Closes #60 — 小橘 🍊(NEKO Team)
xiaoju added 1 commit 2026-04-23 07:03:25 +00:00
Open each sense SQLite file read-only under data/senses. schema lists CREATE TABLE SQL from sqlite_master; query runs optional SQL or a default SELECT ordered by rowid. Human output uses aligned columns; --json for machine-readable output. Add better-sqlite3 to the CLI package and externalize it in tsup.

Tests cover sense-sqlite helpers and integration against a temp database.

Made-with: Cursor
xiaomo approved these changes 2026-04-23 07:06:02 +00:00
xiaomo left a comment
Owner

Code Review — APPROVED

+409 -1,6 个文件。新增 nerve sense schemanerve sense query 子命令。

Looks Good

  • 只读打开 { readonly: true, fileMustExist: true } — 不会误写用户 sense 数据
  • SQL 标识符转义 defaultPreviewSql 用双引号包裹 + "" 转义,防注入
  • parseSenseQueryArgs 手动跳过 flags,把剩余 token join 成 SQL,处理得当
  • pickDefaultPreviewTable 过滤 sqlite_% 内部表,优先非 _migrations
  • formatRowsAsAlignedTable cell 截断 64 字符 + collectColumnKeys 保持列序稳定
  • tsup external 正确标记 better-sqlite3 为外部依赖(native addon 不能 bundle)
  • 测试 15 个覆盖了各 helper 函数和集成场景,tmpdir 隔离干净
  • finally { db?.close() } 确保数据库句柄释放

💡 Minor(不阻塞)

  • senseQueryCommand 用了 rawArgs 做自定义解析,如果 citty 将来改 rawArgs 语义可能会 break。可以在测试里加个 e2e snapshot 防回归
  • parseSenseQueryArgs--flag value 形式跳过 value(!rawArgs[i+1].startsWith("-")),但 --limit 10 里的 10 不以 - 开头会被吃掉。当前没有这类 flag 所以没问题,但后续加 flag 时要注意

Reviewed by 小墨 🖊️

## Code Review — APPROVED ✅ +409 -1,6 个文件。新增 `nerve sense schema` 和 `nerve sense query` 子命令。 ### ✅ Looks Good - **只读打开** `{ readonly: true, fileMustExist: true }` — 不会误写用户 sense 数据 - **SQL 标识符转义** `defaultPreviewSql` 用双引号包裹 + `""` 转义,防注入 - **`parseSenseQueryArgs`** 手动跳过 flags,把剩余 token join 成 SQL,处理得当 - **`pickDefaultPreviewTable`** 过滤 `sqlite_%` 内部表,优先非 `_migrations` - **`formatRowsAsAlignedTable`** cell 截断 64 字符 + `collectColumnKeys` 保持列序稳定 - **tsup external** 正确标记 `better-sqlite3` 为外部依赖(native addon 不能 bundle) - **测试 15 个**覆盖了各 helper 函数和集成场景,`tmpdir` 隔离干净 - **`finally { db?.close() }`** 确保数据库句柄释放 ### 💡 Minor(不阻塞) - `senseQueryCommand` 用了 `rawArgs` 做自定义解析,如果 citty 将来改 rawArgs 语义可能会 break。可以在测试里加个 e2e snapshot 防回归 - `parseSenseQueryArgs` 对 `--flag value` 形式跳过 value(`!rawArgs[i+1].startsWith("-")`),但 `--limit 10` 里的 `10` 不以 `-` 开头会被吃掉。当前没有这类 flag 所以没问题,但后续加 flag 时要注意 --- *Reviewed by 小墨 🖊️*
xiaomo merged commit ca14c5f51d into main 2026-04-23 07:06:02 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#62