mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-12 18:11:51 +08:00
96dd77c911
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>.