{"_id":"@baiwangshu1202/framework","_rev":"3-89ef0bd14dd4e5063c2848d246e4d489","name":"@baiwangshu1202/framework","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.1":{"name":"@baiwangshu1202/framework","version":"0.1.1","_id":"@baiwangshu1202/framework@0.1.1","maintainers":[{"name":"baiwangshu1202","email":"18569911115@163.com"}],"dist":{"shasum":"192a6119186f1d6ac4a570c633cbcc5283fab233","tarball":"https://registry.npmjs.org/@baiwangshu1202/framework/-/framework-0.1.1.tgz","fileCount":94,"integrity":"sha512-P+IeiQ/uD9BAZbCHp3Nr5bqIm16aSTCutmsTse3oyXsYkTOG1KnGEMZi5WwtW+19OBWtiDasr1vW+QKwasCIIg==","signatures":[{"sig":"MEYCIQC7BlbehpOsuNtDXUdcI27uIXPfSU2Pq1nRobIPui/mcAIhAJZDnddZRAY7VrYVl7aPR+j6PCQviA0sMnthEHQ+l1ON","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7002079},"main":"./frontend/dist/index.js","type":"module","types":"./frontend/dist/index.d.ts","exports":{".":{"types":"./frontend/dist/index.d.ts","import":"./frontend/dist/index.js"},"./styles.css":"./frontend/dist/styles.css","./styles-source":"./frontend/src/styles/globals.css","./tailwind-preset":"./frontend/tailwind-preset.cjs"},"gitHead":"5dc2a3ea8e44c17692eb7929e0adb09449a14e6e","scripts":{"dev":"vite build --watch","build":"vite build","serve":"vite","dev:spa":"vite build --config vite.config.spa.ts --watch","build:all":"vite build && vite build --config vite.config.spa.ts && node -e \"require('fs').copyFileSync('frontend/index.html','frontend/dist/index.html')\"","build:spa":"vite build --config vite.config.spa.ts","type-check":"tsc --noEmit"},"_npmUser":{"name":"baiwangshu1202","email":"18569911115@163.com"},"_npmVersion":"11.9.0","description":"AI 数字分身站点前端框架","directories":{},"_nodeVersion":"24.14.0","dependencies":{"clsx":"^2.1.0","katex":"^0.16.9","html2canvas":"^1.4.1","highlight.js":"^11.9.0","lucide-react":"^0.468.0","qrcode.react":"^3.1.0","tailwind-merge":"^2.2.0","tailwindcss-animate":"^1.0.7","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.0","postcss":"^8.4.35","typescript":"^5.9.3","tailwindcss":"^3.4.1","@types/katex":"^0.16.7","@types/react":"^18.3.31","autoprefixer":"^10.4.17","vite-plugin-dts":"^3.7.0","@types/react-dom":"^18.3.7","@vitejs/plugin-react":"^4.2.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/framework_0.1.1_1781753129875_0.7939733592990845","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@baiwangshu1202/framework","version":"0.1.2","_id":"@baiwangshu1202/framework@0.1.2","maintainers":[{"name":"baiwangshu1202","email":"18569911115@163.com"}],"dist":{"shasum":"6131a1b2f3311815120d4f8e6b42835bc5fcffe9","tarball":"https://registry.npmjs.org/@baiwangshu1202/framework/-/framework-0.1.2.tgz","fileCount":94,"integrity":"sha512-vHkVoTFEhKOfiVALpTiPfWE91dyd+hHEvVPo30Vj1P209V3+3AJOc9BluviOxhYSTe5MMMeCZ4acb6ukGMxtLw==","signatures":[{"sig":"MEQCICk7Khb+r1Qho5Edg5dIWzt8zhePIj6LaQPiC6qo+ceSAiAnZBtT6rdkwBMDaBRsRE/A7+Z9k3bA66sjmakotXxWYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7002087},"main":"./frontend/dist/index.js","type":"module","types":"./frontend/dist/index.d.ts","exports":{".":{"types":"./frontend/dist/index.d.ts","import":"./frontend/dist/index.js"},"./styles.css":"./frontend/dist/styles.css","./styles-source":"./frontend/src/styles/globals.css","./tailwind-preset":"./frontend/tailwind-preset.cjs"},"gitHead":"bb60c277ccf246c14309d049668f9face1a1e439","scripts":{"dev":"vite build --watch","build":"vite build","serve":"vite","dev:spa":"vite build --config vite.config.spa.ts --watch","build:all":"vite build && vite build --config vite.config.spa.ts && node -e \"require('fs').copyFileSync('frontend/index.html','frontend/dist/index.html')\"","build:spa":"vite build --config vite.config.spa.ts","type-check":"tsc --noEmit"},"_npmUser":{"name":"baiwangshu1202","email":"18569911115@163.com"},"_npmVersion":"11.9.0","description":"AI 数字分身站点前端框架","directories":{},"_nodeVersion":"24.14.0","dependencies":{"clsx":"^2.1.0","katex":"^0.16.9","html2canvas":"^1.4.1","highlight.js":"^11.9.0","lucide-react":"^0.468.0","qrcode.react":"^3.1.0","tailwind-merge":"^2.2.0","tailwindcss-animate":"^1.0.7","class-variance-authority":"^0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.0","postcss":"^8.4.35","typescript":"^5.9.3","tailwindcss":"^3.4.1","@types/katex":"^0.16.7","@types/react":"^18.3.31","autoprefixer":"^10.4.17","vite-plugin-dts":"^3.7.0","@types/react-dom":"^18.3.7","@vitejs/plugin-react":"^4.2.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","react-router-dom":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/framework_0.1.2_1781761118233_0.7067689869833338","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@baiwangshu1202/framework","version":"0.1.3","description":"AI 数字分身站点前端框架","type":"module","main":"./frontend/dist/index.js","types":"./frontend/dist/index.d.ts","exports":{".":{"import":"./frontend/dist/index.js","types":"./frontend/dist/index.d.ts"},"./styles.css":"./frontend/dist/styles.css","./tailwind-preset":"./frontend/tailwind-preset.cjs","./styles-source":"./frontend/src/styles/globals.css"},"scripts":{"build":"vite build","build:spa":"vite build --config vite.config.spa.ts","build:all":"vite build && vite build --config vite.config.spa.ts && node -e \"require('fs').copyFileSync('frontend/index.html','frontend/dist/index.html')\"","dev":"vite build --watch","dev:spa":"vite build --config vite.config.spa.ts --watch","serve":"vite","type-check":"tsc --noEmit"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0","react-router-dom":"^6.0.0 || ^7.0.0"},"dependencies":{"class-variance-authority":"^0.7.1","clsx":"^2.1.0","lucide-react":"^0.468.0","tailwind-merge":"^2.2.0","tailwindcss-animate":"^1.0.7","highlight.js":"^11.9.0","katex":"^0.16.9","html2canvas":"^1.4.1","qrcode.react":"^3.1.0"},"devDependencies":{"@types/react":"^18.3.31","@types/react-dom":"^18.3.7","@vitejs/plugin-react":"^4.2.0","autoprefixer":"^10.4.17","postcss":"^8.4.35","tailwindcss":"^3.4.1","typescript":"^5.9.3","vite":"^5.1.0","vite-plugin-dts":"^3.7.0","@types/katex":"^0.16.7"},"gitHead":"4637906e9cb2381570a0a168ca6f40c6cc855f6a","_id":"@baiwangshu1202/framework@0.1.3","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-5H3jOki9n7gnP/wDSrvLQjIHul4Z4h9zPAqAixMnmAakbeSLhr4dd9gHE2tsZw4Nc5W2Aebq5ikN0EAiGORoRw==","shasum":"008c1c5f964bfcee925ff274cd71509646c4f6b0","tarball":"https://registry.npmjs.org/@baiwangshu1202/framework/-/framework-0.1.3.tgz","fileCount":91,"unpackedSize":2114859,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC9Haphw0wJTiPnm6LMjAlp+40lMpICEhWyWEym4cYhxAIgHUWRla3iSmD+voeDhDWejiiJf/KFAIUqoKmN0Ty4V8Q="}]},"_npmUser":{"name":"baiwangshu1202","email":"18569911115@163.com"},"directories":{},"maintainers":[{"name":"baiwangshu1202","email":"18569911115@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/framework_0.1.3_1781762507500_0.2314481404383335"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T03:25:29.702Z","modified":"2026-06-18T06:01:47.800Z","0.1.1":"2026-06-18T03:25:30.110Z","0.1.2":"2026-06-18T05:38:38.448Z","0.1.3":"2026-06-18T06:01:47.680Z"},"description":"AI 数字分身站点前端框架","maintainers":[{"name":"baiwangshu1202","email":"18569911115@163.com"}],"readme":"# BaiBai Framework\n\nAI 数字分身站点框架 — 从 Monorepo 到「框架即依赖」的可插拔架构\n\n> 版本: v0.1.1 | Python >= 3.11 | Flask 3.1 | MIT License\n\n---\n\n## 一、项目概述\n\nbaibai-framework 是数字分身平台三层架构中的**能力层**，为每个数字分身实例站点提供标准化的运行时骨架。站点只需创建一个 `site.json` 配置文件和两行入口代码，即可获得完整的 AI 数字分身功能。\n\n### 三层架构中的角色\n\n```\nbaibai-platform (控制平面)  →  管理多个实例、接收同步数据、A2A 路由代理\n        ↕ REST API + Sync\nbaibai-framework (能力层)    →  提供 create_app() 工厂、插件体系、PlatformSync\n        ↓ 被依赖\nsite-baibai / site-* (实例)  →  独立部署的站点，拥有独立 SQLite 数据库\n```\n\n---\n\n## 二、架构设计\n\n### 核心模块\n\n| 模块 | 路径 | 职责 |\n|------|------|------|\n| **app_factory** | `core/app_factory.py` | `create_app()` 工厂函数，组装 Flask 应用 |\n| **site_loader** | `core/site_loader.py` | 从 `site.json` 加载配置，环境变量覆盖 |\n| **database** | `core/database.py` | SQLite WAL 模式数据库层，表结构初始化 |\n| **platform_sync** | `core/platform_sync.py` | 实例侧数据同步客户端，定时向平台上报 |\n| **plugin_registry** | `plugins/` | 可插拔架构核心，按 features 开关动态挂载 Blueprint |\n\n### 插件体系\n\n所有功能通过 `PluginRegistry` 统一管理。`site.json` 的 `features` 字段控制启用状态：\n\n```\nsite.json features\n       │\n       ▼\nPluginRegistry.register_all_plugins()\n       │\n       ├── 核心 (默认启用): admin_dashboard, analytics, seo, blog, chat, contact, booking,\n       │                   voice, projects, skills, resources, profile, public_api\n       ├── 管理后台: personal_assistant, knowledge_chat, chat_admin\n       ├── 三方集成: lark, openclaw, bijinote, uumit, a2a\n       ├── 内容同步: content_sync, sync_skills, sync_projects\n       └── 预留插槽: wecom, dingtalk\n       │\n       ▼\nregistry.init_app(app) → 注册 Blueprint + 验证依赖\n```\n\n### 应用启动流程\n\n```\n1. create_app(site_name=\"baibai\")\n2. load_site_config() → 读取 site.json + .env 覆盖\n3. 创建 Flask 实例，配置 CORS + 速率限制\n4. 注册 SPA 回退路由\n5. 注册健康检查 /api/health\n6. 注册平台桥接端点 (platform_bridge)\n7. 根据 features → PluginRegistry.init_app() 注册 Blueprint\n8. 启动 PlatformSync (实例→平台数据同步)\n9. 返回配置好的 Flask app\n```\n\n---\n\n## 三、技术栈\n\n| 层 | 技术 | 版本 | 用途 |\n|---|------|------|------|\n| 后端 | Python | 3.11+ | 运行时 |\n| Web | Flask | 3.1+ | Web 框架 |\n| 数据库 | SQLite | WAL 模式 | 实例本地数据库 |\n| 定时任务 | APScheduler | 3.10+ | 同步调度 |\n| AI | openai (可选) | 1.30+ | DeepSeek API 调用 |\n| TTS | edge-tts (可选) | 6.1+ | 语音合成 |\n| 前端 | React + Vite + Tailwind | 18 / 6 / 3 | SPA 构建 |\n\n---\n\n## 四、安装\n\n### 方式一：从 PyPI 安装（推荐，适合客户站点）\n\n```bash\npip install baibai-framework\n```\n\n可选功能依赖：\n\n```bash\npip install \"baibai-framework[ai]\"      # 启用 AI 对话功能\npip install \"baibai-framework[voice]\"   # 启用 AI 语音通话\npip install \"baibai-framework[all]\"     # 安装所有可选功能\n```\n\n### 方式二：写入 requirements.txt\n\n```\n# requirements.txt\nbaibai-framework>=0.1.0\n```\n\n---\n\n## 五、快速开始（3 分钟建站）\n\n### 第 1 步：安装框架\n\n```bash\npip install \"baibai-framework[ai]\"\n```\n\n### 第 2 步：创建站点\n\n```bash\ncreate-baibai-site mysite --domain mysite.com --brand \"我的品牌\" --port 3001\n```\n\n这会在当前目录生成 `site-mysite/`，结构如下：\n\n```\nsite-mysite/\n├── site.json          # 站点配置（品牌、功能开关、AI 配置）\n├── .env.example       # 环境变量模板\n├── app.py             # 入口文件（仅两行）\n├── seed.py            # 内容种子脚本\n├── requirements.txt   # 依赖声明\n└── content/           # 博客、数据库等运行时数据\n```\n\n### 第 3 步：配置密钥\n\n```bash\ncd site-mysite\ncp .env.example .env\n# 编辑 .env，填入以下必填项:\n#   DEEPSEEK_API_KEY=sk-xxx   (AI 对话功能必须)\n#   ADMIN_PASSWORD=yourpass   (管理后台密码)\n```\n\n### 第 4 步：启动\n\n```bash\npython app.py\n```\n\n访问 `http://localhost:3001` 查看站点，`http://localhost:3001/admin` 进入管理后台。\n\n### 第 5 步：自定义配置（可选）\n\n编辑 `site.json` 按需调整品牌颜色、功能开关、AI 模型等：\n\n```json\n{\n  \"brand\": { \"name\": \"我的品牌\", \"primaryColor\": \"#3b82f6\" },\n  \"features\": { \"voice\": true, \"lark\": false }\n}\n```\n\n重启 `python app.py` 即可生效。\n\n### 手动创建入口（不用 CLI 时）\n\n```python\n# app.py — 仅两行\nfrom baibai_framework import create_app\napp = create_app(site_name=\"mysite\")\n\nif __name__ == \"__main__\":\n    app.run(host=\"0.0.0.0\", port=3001)\n```\n\n---\n\n## 五·五、升级与维护\n\n### 检查当前版本\n\n```bash\npip show baibai-framework\n# 访问: http://localhost:3001/api/health\n```\n\n### 升级到最新版本\n\n```bash\npip install --upgrade baibai-framework\npython app.py   # 重启即可，数据库会自动迁移\n```\n\n### 升级到指定版本\n\n```bash\npip install baibai-framework==0.2.0\n```\n\n### 查看可用版本\n\n👉 https://pypi.org/project/baibai-framework/#history\n\n### 数据备份\n\n框架内置自动备份（每天凌晨 3:00，保田 7 份）。如需手动备份：\n\n```bash\n# 备份数据库\ncp content/data/mysite.db content/data/mysite.db.bak\n```\n\n### 卸载\n\n```bash\npip uninstall baibai-framework\n# 站点数据（content/）不会被删除，可手动清理\n```\n\n---\n\n## 六、site.json 配置参考\n\n```json\n{\n  \"name\": \"your-site\",\n  \"domain\": \"your-domain.com\",\n\n  \"brand\": {\n    \"logo\": \"\",\n    \"name\": \"你的品牌名称\",\n    \"primaryColor\": \"#3b82f6\"\n  },\n\n  \"ai\": {\n    \"model\": \"deepseek-v4-pro\",\n    \"baseUrl\": \"https://api.deepseek.com\",\n    \"systemPrompt\": \"你是...\",\n    \"apiKey\": \"\"              // 从环境变量 DEEPSEEK_API_KEY 注入\n  },\n\n  \"server\": {\n    \"port\": 3001,\n    \"debug\": false,\n    \"corsOrigins\": [\"http://localhost:5173\"]\n  },\n\n  \"admin\": {\n    \"password\": \"\",           // ADMIN_PASSWORD 环境变量注入\n    \"demoPassword\": \"\",       // DEMO_PASSWORD 环境变量注入\n    \"demoTokenPrefix\": \"demo_\"\n  },\n\n  \"features\": {\n    \"blog\": true,             // 博客系统\n    \"chat\": true,             // AI 对话\n    \"contact\": true,          // 咨询/预约\n    \"booking\": true,          // 预约系统\n    \"voice\": false,           // AI 语音通话\n    \"projects\": true,         // 项目展示\n    \"skills\": true,           // 技能矩阵\n    \"resources\": true,        // 资源下载\n    \"lark\": false,            // 飞书集成\n    \"openclaw\": false,        // OpenClaw 同步\n    \"bijinote\": false,        // Get笔记同步\n    \"uumit\": false,           // UUMit A2A\n    \"content_sync\": false,    // 内容同步\n    \"a2a\": true,              // A2A 协议\n    \"adminDashboard\": true    // 管理后台\n  },\n\n  \"theme\": {\n    \"primaryColor\": \"#3b82f6\",\n    \"darkMode\": \"auto\",\n    \"borderRadius\": \"md\"\n  },\n\n  \"platform\": {\n    \"sync\": {\n      \"enabled\": true,\n      \"platformUrl\": \"http://localhost:4000\",\n      \"syncToken\": \"\",\n      \"intervals\": {\n        \"heartbeat\": 5,       // 心跳: 5分钟\n        \"metrics\": 30,        // 指标: 30分钟\n        \"a2a_log\": 30,        // A2A日志: 30分钟\n        \"chat_stats\": 60,     // 对话统计: 1小时\n        \"error_report\": 60    // 错误报告: 1小时\n      },\n      \"retryMaxAttempts\": 3,\n      \"retryBackoffSeconds\": [30, 120, 600]\n    }\n  },\n\n  \"paths\": {\n    \"db\": null,               // 自动计算: content/data/{name}.db\n    \"content\": null,          // 自动计算: content/\n    \"blog\": null,             // 自动计算: content/blog/\n    \"dist\": null              // 自动查找，优先级: frontend/dist/ → dist/ → 包内内置\n  },\n\n  \"corsOrigins\": [\"https://your-domain.com\"]\n}\n```\n\n### 环境变量（.env）\n\n```bash\nDEEPSEEK_API_KEY=sk-xxx       # DeepSeek API 密钥\nADMIN_PASSWORD=xxx            # 管理员密码\nDEMO_PASSWORD=demo2026!       # 演示模式密码\nLARK_APP_ID=xxx               # 飞书应用 ID\nLARK_APP_SECRET=xxx           # 飞书应用密钥\nPLATFORM_URL=http://localhost:4000\nPLATFORM_SYNC_TOKEN=sk_sync_xxx\n```\n\n---\n\n## 七、核心模块详解\n\n### 7.1 site_loader — 配置加载\n\n- 从 `site.json` 加载完整站点配置\n- 环境变量自动覆盖敏感字段（API Key、密码等）\n- 自动计算路径、推导功能开关（如 lark.enabled = bool(app_id and app_secret)）\n- 输出 `SiteConfig` 数据类，包含所有子配置\n\n### 7.2 PluginRegistry — 插件系统\n\n- 26 个插件定义在 `plugins/definitions.py`\n- 支持依赖验证（如 contact 依赖 blog）\n- 支持预留插槽（wecom, dingtalk 暂无实现）\n- 按 `site.json.features` 开关动态挂载 Blueprint\n\n### 7.3 PlatformSync — 数据同步客户端\n\n- 实例侧主动向 baibai-platform 上报数据\n- 5 种同步类型: heartbeat / metrics / a2a_log / chat_stats / error_report\n- APScheduler 定时调度，间隔可配置\n- 容错: 失败缓存到本地 `pending_sync` 表，网络恢复后自动追赶\n- 重试: 3 次退避 (30s / 120s / 600s)\n\n### 7.4 A2A Server — Google A2A 协议\n\n- 自动生成 `/.well-known/agent.json` Agent Card\n- 处理 JSON-RPC: `tasks/send`, `tasks/get`, `tasks/cancel`, `tasks/sendSubscribe`\n- 从 site.json features 映射 skills 列表\n\n### 7.5 app_factory — 应用工厂\n\n- `create_app(site_name, site_config, config_override)` 一站式创建\n- 自动注册: SPA 回退、健康检查、平台桥接\n- 可选注册: 按功能开关挂载 Blueprint\n- 可选启动: PlatformSync 后台线程\n\n---\n\n## 八、功能插件清单\n\n| 插件 Key | 名称 | 类别 | 后端 Blueprint | 默认启用 |\n|----------|------|------|---------------|---------|\n| `blog` | 博客系统 | core | `features/blog.py` | true |\n| `chat` | AI 对话 | core | `features/chat.py` | true |\n| `contact` | 咨询/预约 | core | `features/contact.py` | true |\n| `booking` | 预约系统 | core | 同上（共用 contact BP） | true |\n| `voice` | AI 语音通话 | core | `features/voice.py` | false |\n| `projects` | 项目展示 | core | `features/projects.py` | true |\n| `skills` | 技能矩阵 | core | `features/skills.py` | true |\n| `resources` | 资源下载 | core | `features/resources.py` | true |\n| `profile` | 个人资料 | core | `features/profile.py` | true |\n| `public_api` | 公共 API | core | `features/public_api.py` | true |\n| `admin_dashboard` | 管理后台 | admin | `features/admin.py` | true |\n| `personal_assistant` | 个人助手 | admin | `integrations/me/` | true |\n| `knowledge_chat` | 知识库对话 | admin | 同上（共用 ME BP） | true |\n| `chat_admin` | 管理端对话 | admin | `features/chat_admin.py` | true |\n| `a2a` | A2A 协议 | integration | `features/a2a_server.py` | true |\n| `analytics` | 分析追踪 | core | `features/analytics.py` | true |\n| `seo` | SEO 优化 | core | `features/seo.py` | true |\n| `lark` | 飞书集成 | integration | `integrations/lark/` | false |\n| `openclaw` | OpenClaw 同步 | sync | `integrations/openclaw/` | false |\n| `bijinote` | Get笔记 | sync | `integrations/bijinote/` | false |\n| `uumit` | UUMit A2A | integration | `integrations/uumit/` | false |\n| `content_sync` | 内容同步 | sync | `integrations/sync/` | false |\n| `sync_skills` | 技能同步 | sync | 同上（共用 sync BP） | false |\n| `sync_projects` | 项目同步 | sync | 同上（共用 sync BP） | false |\n| `wecom` | 企业微信 | integration | (预留) | false |\n| `dingtalk` | 钉钉 | integration | (预留) | false |\n\n> 注: booking/knowledge_chat/sync_skills/sync_projects 与对应主插件共享 Blueprint，通过单独注册支持独立开关控制。\n> 注: analytics、seo、public_api、chat_admin 为后端专用插件，无前端路由。\n\n---\n\n## 九、当前进度\n\n| 模块 | 状态 | 说明 |\n|------|------|------|\n| app_factory | **完成** | create_app() 工厂函数 |\n| site_loader | **完成** | 配置加载 + 环境变量覆盖 |\n| PluginRegistry | **完成** | 26 插件注册 + 依赖验证 |\n| blog feature | **完成** | Markdown 博客 + RSS |\n| chat feature | **完成** | SSE 流式 AI 对话 |\n| contact feature | **完成** | 咨询 + 预约 |\n| admin feature | **完成** | 管理后台 + 演示模式 |\n| analytics + seo | **完成** | 页面追踪 + SEO 元数据 |\n| a2a_server | **完成** | Google A2A 协议服务端 |\n| platform_bridge | **完成** | 平台指令接收端点 |\n| platform_sync | **完成** | 5 类数据同步 + 容错 |\n| lark integration | **完成** | 飞书 OAuth + 文档 + 通讯录 + 审批 + 多维表 + 云盘 |\n| openclaw integration | **完成** | 工作快照同步 + 洞察生成 |\n| bijinote integration | **完成** | Get笔记同步 + 语义搜索 |\n| uumit integration | **完成** | A2A 商业拓展 |\n| content_sync | **完成** | 三源同步 (SkillHub/ClawHub/GitHub) |\n| site-template | **完成** | 站点脚手架模板（内置于 pip 包） |\n| create-site CLI | **完成** | 命令行站点生成工具（`create-baibai-site`） |\n| PyPI 包发布 | **完成** | `pip install baibai-framework` |\n| npm 包发布 | 待完善 | 前端框架包独立发布 |\n\n---\n\n## 十、开发指南\n\n### 项目结构\n\n```\nbaibai-framework/\n├── backend/\n│   └── baibai_framework/\n│       ├── __init__.py          # 公开 API: create_app, SiteConfig\n│       ├── app_factory.py       # 应用工厂\n│       ├── core/                # 核心模块\n│       │   ├── site_loader.py   # 配置加载\n│       │   ├── database.py      # SQLite 数据库\n│       │   └── platform_sync.py # 数据同步客户端\n│       ├── features/            # 功能 Blueprint\n│       │   ├── admin.py         # 管理后台\n│       │   ├── blog.py          # 博客\n│       │   ├── chat.py          # AI 对话\n│       │   ├── contact.py       # 咨询/预约\n│       │   ├── analytics.py     # 分析追踪\n│       │   ├── seo.py           # SEO\n│       │   ├── a2a_server.py    # A2A 协议\n│       │   └── platform_bridge.py\n│       ├── integrations/        # 第三方集成\n│       │   ├── lark/            # 飞书\n│       │   ├── openclaw/        # OpenClaw\n│       │   ├── uumit/           # UUMit\n│       │   ├── bijinote/        # Get笔记\n│       │   ├── sync/            # 内容同步\n│       │   └── me/              # 个人助手\n│       ├── plugins/             # 插件系统\n│       │   ├── __init__.py      # PluginDef, PluginRegistry\n│       │   └── definitions.py   # 26 插件定义\n│       └── cli/                 # CLI 工具\n│           ├── create_site.py   # create-baibai-site 入口\n│           └── templates/       # 站点模板（构建时生成）\n├── frontend/                    # React 组件库源码\n├── scripts/\n│   └── build_package.py         # 一键构建发布脚本\n├── site-template/               # 站点脚手架模板\n├── pyproject.toml               # Python 包配置\n├── MANIFEST.in                  # sdist 打包规则\n├── site.json.example            # 配置示例\n└── test_framework.py            # 框架测试\n```\n\n### 添加新插件\n\n1. 在 `features/` 或 `integrations/` 下实现 Blueprint\n2. 在 `plugins/definitions.py` 注册 PluginDef\n3. 声明依赖关系 (dependencies)\n4. 在 `site.json.example` 添加对应 feature 开关\n\n### 调试\n\n```bash\n# 安装开发模式\npip install -e backend/\n\n# 运行测试\npython test_framework.py\n\n# 在 site-baibai 中验证\ncd ../site-baibai && python app.py\n```\n\n### 构建与发布（框架开发者专用）\n\n```bash\n# 一键构建（自动：前端构建 → 复制 dist 到包内 → 复制模板 → 生成 wheel + sdist）\npython scripts/build_package.py\n\n# 跳过前端重新构建（仅重打 Python 包）\npython scripts/build_package.py --skip-frontend\n\n# 构建并上传到 PyPI\npython scripts/build_package.py --upload pypi\n```\n\n### 端口规划\n\n| 组件 | 端口 | 说明 |\n|------|------|------|\n| site-baibai 后端 | 3001 | 实例后端 |\n| site-baibai 前端 | 5173 | Vite 开发服务器 |\n| baibai-platform 后端 | 4000 | 平台后端 |\n| baibai-platform 前端 | 4001 | 平台前端 |\n\n---\n\n## 十一、相关项目\n\n- **[baibai-framework on PyPI](https://pypi.org/project/baibai-framework/)** — pip 安装包\n- **[baibai-platform](https://github.com/your-org/baibai-platform)** — 数字分身平台控制平面\n- **[site-baibai](https://github.com/your-org/site-baibai)** — 第一个实例站点\n- 数字分身平台架构方案: `baibai/数字分身平台架构方案_d5b4a17b.md`\n","readmeFilename":"README.md"}