Files
nanoclaw/package.json
T
gavrielc 96dd77c911 feat(migrate): v1→v2 migration driver + skill
Hybrid flow modeled on setup:auto — a scripted driver
(`pnpm run migrate:v1-to-v2`) owns the UX, with two Claude integration
points: offerClaudeAssist() on failure, offerClaudeHandoff() for the
rebuild step and owner-ambiguity `?` escape.

Structure:
  setup/migrate.ts                — sequencer (clack UI + step routing)
  setup/migrate/detect-v1.ts      — v1/v2/mixed/fresh detection
  setup/migrate/jid.ts            — v1 JID → v2 channel_type inference
  setup/migrate/owner-propose.ts  — owner inference (env / is_main / allowlist)
  setup/migrate/extract-v1.ts     — reads v1 DB + git + env → v1-data JSONs
  setup/migrate/seed-v2.ts        — seeds v2 central DB from v1-data
  setup/migrate/guide-compose.ts  — renders .nanoclaw-migrations/guide.md
  .claude/skills/migrate-v1-to-v2 — orchestration doc + reference template

v1 defaults mapped to v2 seeds:
  registered_groups.folder         → agent_groups (deduped by folder)
  registered_groups.jid            → messaging_groups (channel_type from JID)
  trigger_pattern + requires_trigger → engage_mode + engage_pattern (migration 010)
  container_config DB column       → groups/<folder>/container.json (skills: 'all')
  sender-allowlist explicit JIDs   → users + agent_group_members
  is_main / .env OWNER_* / single allowlist entry → user_roles(owner) + user_dms
  v1 groups/<folder>/CLAUDE.md     → v2 groups/<folder>/CLAUDE.local.md

Reuses setup/lib/{runner,claude-assist,claude-handoff,theme}.ts verbatim.
Seeder is idempotent; fails loudly when a required channel adapter isn't
installed via /add-<name>.
2026-04-22 16:21:34 +03:00

54 lines
1.5 KiB
JSON

{
"name": "nanoclaw",
"version": "2.0.0",
"description": "Personal Claude assistant. Lightweight, secure, customizable.",
"type": "module",
"packageManager": "pnpm@10.33.0",
"main": "dist/index.js",
"scripts": {
"build": "tsc",
"start": "node dist/index.js",
"dev": "tsx src/index.ts",
"typecheck": "tsc --noEmit",
"format": "prettier --write \"src/**/*.ts\"",
"format:fix": "prettier --write \"src/**/*.ts\"",
"format:check": "prettier --check \"src/**/*.ts\"",
"prepare": "husky",
"setup": "tsx setup/index.ts",
"setup:auto": "tsx setup/auto.ts",
"migrate:v1-to-v2": "tsx setup/migrate.ts",
"chat": "tsx scripts/chat.ts",
"auth": "tsx src/whatsapp-auth.ts",
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix",
"test": "vitest run",
"test:watch": "vitest"
},
"dependencies": {
"@chat-adapter/telegram": "4.26.0",
"@clack/prompts": "^1.2.0",
"@onecli-sh/sdk": "^0.3.1",
"better-sqlite3": "11.10.0",
"chat": "^4.24.0",
"cron-parser": "5.5.0",
"kleur": "^4.1.5"
},
"devDependencies": {
"@eslint/js": "^9.35.0",
"@types/better-sqlite3": "^7.6.12",
"@types/node": "^22.10.0",
"eslint": "^9.35.0",
"eslint-plugin-no-catch-all": "^1.1.0",
"globals": "^15.12.0",
"husky": "^9.1.7",
"prettier": "^3.8.1",
"tsx": "^4.19.0",
"typescript": "^5.7.0",
"typescript-eslint": "^8.35.0",
"vitest": "^4.0.18"
},
"engines": {
"node": ">=20"
}
}