名称: firebase-development 描述: 此技能适用于处理Firebase项目时使用,包括初始化项目、添加云函数或Firestore集合、调试模拟器问题或审查Firebase代码。触发关键词包括"firebase"、“firestore”、“cloud functions”、“emulator”、“firebase auth”、“deploy to firebase”、“firestore rules”。
Firebase开发
概述
此技能系统使用生产项目中验证过的模式来指导Firebase开发。它根据检测到的意图路由到专门的子技能。
子技能:
firebase-development:project-setup- 初始化新的Firebase项目firebase-development:add-feature- 添加函数/集合/端点firebase-development:debug- 排查模拟器和运行时问题firebase-development:validate- 审查Firebase代码的安全性和模式
此技能适用场景
- 启动新的Firebase项目
- 添加云函数或Firestore集合
- 调试模拟器问题或规则违规
- 审查Firebase代码的安全性和模式
- 设置多托管配置
- 实现身份验证(API密钥或Firebase Auth)
路由逻辑
按子技能的关键词
project-setup:
- “新的firebase项目”、“初始化firebase”、“firebase init”
- “设置firebase”、“创建firebase应用”、“启动firebase项目”
add-feature:
- “添加函数”、“创建端点”、“新工具”、“添加api”
- “新集合”、“添加功能”、“构建”、“实现”
debug:
- “错误”、“不工作”、“调试”、“模拟器问题”
- “规则失败”、“权限被拒绝”、“故障排除”、“部署失败”
validate:
- “审查firebase”、“检查firebase”、“验证”、“审计firebase”
- “查看firebase代码”、“安全审查”
路由流程
- 分析请求: 检查路由关键词
- 匹配子技能: 基于关键词密度识别最佳匹配
- 宣布: “我正在使用firebase-development:[子技能]技能来[动作]”
- 路由: 加载并执行子技能
- 回退: 如果意图不明确,使用AskUserQuestion并提供4个选项
回退示例
如果意图不明确,询问:
问题: "您正在处理什么Firebase任务?"
选项:
- "项目设置" (初始化新的Firebase项目)
- "添加功能" (添加函数、集合、端点)
- "调试问题" (排查错误或问题)
- "验证代码" (根据模式进行审查)
参考项目
模式提取自三个生产Firebase项目:
| 项目 | 路径 | 关键模式 |
|---|---|---|
| oneonone | /Users/dylanr/work/2389/oneonone |
Express API、自定义API密钥、仅服务器写入 |
| bot-socialmedia | /Users/dylanr/work/2389/bot-socialmedia-server |
按域分组的函数、Firebase Auth + 角色 |
| meme-rodeo | /Users/dylanr/work/2389/meme-rodeo |
单独的函数文件、权限 |
模式摘要
多托管设置
基于需求的三种选项:
| 选项 | 何时使用 | 关键特性 |
|---|---|---|
基于site: |
多个独立的URL | 简单,无需构建协调 |
基于target: |
需要预部署钩子 | 构建脚本自动运行 |
| 单一 + 重写 | 较小的项目 | 全部在一个域名下 |
详情: 参见docs/examples/multi-hosting-setup.md
身份验证
| 模式 | 何时使用 | 示例 |
|---|---|---|
| 自定义API密钥 | MCP工具、服务器到服务器 | oneonone |
| Firebase Auth + 角色 | 面向用户的应用 | bot-socialmedia |
| 混合模式 | 两种模式都需要 | Web UI + API访问 |
详情: 参见docs/examples/api-key-authentication.md
云函数架构
| 模式 | 何时使用 | 结构 |
|---|---|---|
| Express应用 | 带有中间件、路由的API | app.post('/mcp', handler) |
| 按域分组 | 功能丰富的应用 | posts.ts、journal.ts |
| 单独文件 | 最大模块化 | 每个文件一个函数 |
详情: 参见docs/examples/express-function-architecture.md
安全模型
| 模型 | 何时使用 | 复杂性 |
|---|---|---|
| 仅服务器写入 | 轻写入应用、高安全性 | 简单规则 |
| 客户端写入 + 验证 | 高写入量、实时 | 复杂规则 |
强烈建议轻写入应用使用仅服务器写入。
详情: 参见docs/examples/firestore-rules-patterns.md
模拟器优先开发
始终使用模拟器进行本地开发:
firebase emulators:start
# 在 http://127.0.0.1:4000 访问UI
firebase.json中的关键设置:
singleProjectMode: true- 模拟器协同工作的关键ui.enabled: true- 访问调试UI
详情: 参见docs/examples/emulator-workflow.md
现代工具标准
所有Firebase项目都遵循这些标准:
| 工具 | 目的 | 配置文件 |
|---|---|---|
| TypeScript | 类型安全 | tsconfig.json |
| vitest | 测试 | vitest.config.ts |
| biome | 代码检查 + 格式化 | biome.json |
ABOUTME注释模式
每个TypeScript文件都以2行的ABOUTME注释开头:
// ABOUTME: 此文件功能的简要描述
// ABOUTME: 第二行提供额外上下文
测试要求
- 单元测试: 隔离测试处理器/实用程序
- 集成测试: 在模拟器运行时测试
- 每个功能都需要两者
常见陷阱
| 问题 | 解决方案 |
|---|---|
| 模拟器端口被占用 | lsof -i :5001,终止进程 |
| Admin SDK vs Client SDK | Admin绕过规则,Client遵守规则 |
| 冷启动延迟 | 首次调用需要5-10秒,正常 |
| 数据持久化 | 使用Ctrl+C(非kill)导出数据 |
| 函数中的CORS | app.use(cors({ origin: true })) |
总结
此编排器路由到专门的子技能:
- 通过关键词检测意图
- 路由到适当的子技能
- 子技能使用TodoWrite清单
- 所有内容都引用
docs/examples/中的共享模式
子技能:
firebase-development:project-setup- 初始化新项目firebase-development:add-feature- 添加函数/集合firebase-development:debug- 排查问题firebase-development:validate- 审查代码