{"owner":"metowolf","repo":"vCards","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## 项目概述\n\n这是一个中国常用联系人头像库（vCards），为 iOS/macOS 设备提供企业和机构的联系人信息，用于优化来电和信息界面体验。项目生成 vCard 格式的联系人文件，并支持通过 CardDAV 服务分发。\n\n## 核心架构\n\n### 数据结构\n- `data/` - 按分类存储的 YAML 数据文件和对应的 PNG 图标\n  - 每个条目包含一个 `.yaml` 配置文件和一个 `.png` 图标文件\n  - YAML 文件包含 `basic` 对象，包含 `organization`、`cellPhone`、`url`、`workEmail` 等字段\n  - 图标优先使用 512x512px（≤50KB），也支持 200x200px（≤20KB）的 PNG 格式\n\n### 构建系统\n- 使用 Gulp 作为构建工具，配置文件在 `src/gulpfile.js`\n- 两个主要的生成流程：\n  - `generator` - 标准 vCard 生成，过滤 106 开头的长号码（超过11位）\n  - `generator_ext` - 扩展版本，保留所有号码并添加 git 历史时间戳\n- 支持生成分类文件夹和汇总文件\n- 支持生成 Radicale CardDAV 服务所需的文件结构\n- 网页版本构建：`buildWeb` - 生成可浏览的网页界面\n\n### 插件系统\n- `src/plugins/vcard.js` - 标准 vCard 生成插件\n- `src/plugins/vcard-ext.js` - 扩展版 vCard 生成插件，包含 REV 字段和 UID\n- 使用 `vcards-js` 库生成 vCard 格式\n- 自动添加拼音字段用于中文排序\n\n## 常用命令\n\n### 开发和测试\n```bash\n# 运行格式检查和数据验证\nnpm test\n# 或使用 yarn\nyarn test\n\n# 构建标准版本（用于发布）\nnpm run build\n\n# 构建 CardDAV 服务版本\nnpm run radicale\n\n# 构建网页版本\nnpm run build:web\n\n# 启动网页开发服务器\nnpm run dev:web\n# 或单独启动服务器\nnpm run serve:web\n```\n\n### Gulp 任务\n```bash\n# 生成 vCard 文件到 temp 目录\nnpm run gulp generator\n\n# 生成扩展版本 vCard（保留所有号码）\nnpm run gulp generator_ext\n\n# 生成分类汇总文件\nnpm run gulp combine\n\n# 生成总汇总文件\nnpm run gulp allinone\n\n# 创建压缩包\nnpm run gulp archive\n\n# 完整构建流程\nnpm run gulp build\n\n# CardDAV 服务构建\nnpm run gulp radicale\n\n# 网页版本构建\nnpm run gulp buildWeb\n```\n\n## 数据验证和规范\n\n### Schema 验证\n- 使用 Joi 进行数据验证，配置在 `src/const/schema.js`\n- 电话号码使用 `google-libphonenumber` 进行验证\n- 支持中国区号格式和国际格式\n\n### 测试规范\n- 图标必须是合法的 PNG 格式（优先 512x512px ≤50KB，也支持 200x200px ≤20KB）\n- YAML 数据必须符合定义的 schema\n- 检查阻止列表（`src/const/block.js`）中的机构\n\n### 添加新条目\n1. 在对应的 `data/分类/` 目录下添加 `.yaml` 和 `.png` 文件\n2. 运行 `npm test` 检查格式规范\n3. YAML 文件必须包含：\n   - `basic.organization` - 机构名称\n   - `basic.cellPhone` - 电话号码数组\n   - `basic.url` - 官网链接（可选）\n   - `basic.workEmail` - 邮箱数组（可选）\n\n## 特殊处理\n\n### 电话号码过滤\n- 标准版本会过滤掉 106 开头的长号码（超过11位）\n- 扩展版本保留所有号码\n\n### 中文支持\n- 自动生成拼音字段用于通讯录排序\n- 使用 `pinyin-pro` 库进行拼音转换\n\n### CardDAV 服务\n- 生成 Radicale 兼容的目录结构\n- iOS 版本按分类生成文件夹\n- macOS 版本将所有联系人合并到一个文件夹\n\n## 输出文件\n\n- `temp/` - 临时生成的 vCard 文件，按分类组织\n- `public/archive.zip` - 打包的发布文件\n- `radicale/ios/` - iOS CardDAV 服务文件，按分类分文件夹\n- `radicale/macos/全部/` - macOS CardDAV 服务文件，所有联系人在一个文件夹\n- `public-web/` - 网页版本输出目录，包含 HTML、CSS、JS 和资源文件\n\n## 网页版本\n\n### 开发服务器\n- 使用 `src/serve.js` 作为开发服务器\n- 默认运行在 `http://localhost:3000`\n- 支持热重载和静态文件服务\n- 自动设置正确的 MIME 类型，包括 `.vcf` 文件\n\n### 构建流程\n- `buildWeb` 任务会：\n  1. 读取所有 YAML 数据文件\n  2. 生成 JSON 数据注入到网页模板\n  3. 复制图标文件到 `public-web/icons/`\n  4. 复制 VCF 文件到 `public-web/vcf/`\n  5. 生成完整的网页界面\n\n## 关键技术细节\n\n### vCard 生成差异\n- **标准版本** (`vcard.js`)：过滤 106 开头的长号码，适用于一般用户\n- **扩展版本** (`vcard-ext.js`)：保留所有号码，添加 REV 和 UID 字段，适用于 CardDAV\n\n### Git 时间戳集成\n- 扩展版本使用 `git log` 获取文件最后修改时间\n- REV 字段使用 YAML 和 PNG 文件中较新的时间戳\n- 确保 CardDAV 客户端能正确检测更新\n\n### 拼音处理\n- 使用 `pinyin-pro` 库生成拼音\n- 自动为中文机构名添加 `X-PHONETIC-ORG` 字段\n- 支持通讯录中的中文排序功能\n\n## 注意事项\n\n- 不支持 SVG 图标，必须转换为 PNG\n- 图标设计规范：圆形 140x140px，正方形 120x120px，长方形 160x80px\n- 所有文本编码使用 UTF-8\n- 项目使用 ES 模块语法（`\"type\": \"module\"`）\n- 网页版本需要先运行 `generator` 生成 VCF 文件\n- CardDAV 版本使用 `generator_ext` 确保包含完整的元数据\n\n## 图标标准化处理\n\n项目优先使用 512x512px 的 PNG 格式，文件大小不超过 50KB。也支持 200x200px（≤20KB）作为备选。Issue 中提供的图标通常尺寸过大（如 1024x1024），需要缩放处理。\n\n### 处理步骤\n\n1. **下载原始图标**：从 GitHub issue 或评论中的 `user-attachments` 链接下载 PNG 文件\n2. **检查原始尺寸**：使用 `file` 命令确认格式和尺寸\n3. **缩放处理**：使用 Python Pillow 进行缩放（优先 512x512）\n   ```python\n   from PIL import Image\n   img = Image.open('input.png')\n   img = img.convert('RGBA')\n   img = img.resize((512, 512), Image.LANCZOS)\n   img.save('output.png', 'PNG', optimize=True)\n   ```\n4. **验证结果**：确认输出为 PNG 格式、512x512px、文件大小 < 50KB\n\n### 环境依赖\n\n- 图片缩放依赖 `Pillow`，如未安装可通过 `pip3 install Pillow` 安装\n- 环境中通常没有 ImageMagick（`convert`/`magick`）或 ffmpeg，优先使用 Python 方案\n- Node.js `canvas` 模块通常也不可用\n\n### 规格要求\n\n- 格式：PNG（不支持 SVG）\n- 尺寸：优先 512x512px（≤50KB），也支持 200x200px（≤20KB）\n- 设计参考：圆形图标有效区域 140x140px，正方形 120x120px，长方形 160x80px"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## 项目概述\n\n这是一个中国常用联系人头像库（vCards），为 iOS/macOS 设备提供企业和机构的联系人信息，用于优化来电和信息界面体验。项目生成 vCard 格式的联系人文件，并支持通过 CardDAV 服务分发。\n\n## 核心架构\n\n### 数据结构\n- `data/` - 按分类存储的 YAML 数据文件和对应的 PNG 图标\n  - 每个条目包含一个 `.yaml` 配置文件和一个 `.png` 图标文件\n  - YAML 文件包含 `basic` 对象，包含 `organization`、`cellPhone`、`url`、`workEmail` 等字段\n  - 图标优先使用 512x512px（≤50KB），也支持 200x200px（≤20KB）的 PNG 格式\n\n### 构建系统\n- 使用 Gulp 作为构建工具，配置文件在 `src/gulpfile.js`\n- 两个主要的生成流程：\n  - `generator` - 标准 vCard 生成，过滤 106 开头的长号码（超过11位）\n  - `generator_ext` - 扩展版本，保留所有号码并添加 git 历史时间戳\n- 支持生成分类文件夹和汇总文件\n- 支持生成 Radicale CardDAV 服务所需的文件结构\n- 网页版本构建：`buildWeb` - 生成可浏览的网页界面\n\n### 插件系统\n- `src/plugins/vcard.js` - 标准 vCard 生成插件\n- `src/plugins/vcard-ext.js` - 扩展版 vCard 生成插件，包含 REV 字段和 UID\n- 使用 `vcards-js` 库生成 vCard 格式\n- 自动添加拼音字段用于中文排序\n\n## 常用命令\n\n### 开发和测试\n```bash\n# 运行格式检查和数据验证\nnpm test\n# 或使用 yarn\nyarn test\n\n# 构建标准版本（用于发布）\nnpm run build\n\n# 构建 CardDAV 服务版本\nnpm run radicale\n\n# 构建网页版本\nnpm run build:web\n\n# 启动网页开发服务器\nnpm run dev:web\n# 或单独启动服务器\nnpm run serve:web\n```\n\n### Gulp 任务\n```bash\n# 生成 vCard 文件到 temp 目录\nnpm run gulp generator\n\n# 生成扩展版本 vCard（保留所有号码）\nnpm run gulp generator_ext\n\n# 生成分类汇总文件\nnpm run gulp combine\n\n# 生成总汇总文件\nnpm run gulp allinone\n\n# 创建压缩包\nnpm run gulp archive\n\n# 完整构建流程\nnpm run gulp build\n\n# CardDAV 服务构建\nnpm run gulp radicale\n\n# 网页版本构建\nnpm run gulp buildWeb\n```\n\n## 数据验证和规范\n\n### Schema 验证\n- 使用 Joi 进行数据验证，配置在 `src/const/schema.js`\n- 电话号码使用 `google-libphonenumber` 进行验证\n- 支持中国区号格式和国际格式\n\n### 测试规范\n- 图标必须是合法的 PNG 格式（优先 512x512px ≤50KB，也支持 200x200px ≤20KB）\n- YAML 数据必须符合定义的 schema\n- 检查阻止列表（`src/const/block.js`）中的机构\n\n### 添加新条目\n1. 在对应的 `data/分类/` 目录下添加 `.yaml` 和 `.png` 文件\n2. 运行 `npm test` 检查格式规范\n3. YAML 文件必须包含：\n   - `basic.organization` - 机构名称\n   - `basic.cellPhone` - 电话号码数组\n   - `basic.url` - 官网链接（可选）\n   - `basic.workEmail` - 邮箱数组（可选）\n\n## 特殊处理\n\n### 电话号码过滤\n- 标准版本会过滤掉 106 开头的长号码（超过11位）\n- 扩展版本保留所有号码\n\n### 中文支持\n- 自动生成拼音字段用于通讯录排序\n- 使用 `pinyin-pro` 库进行拼音转换\n\n### CardDAV 服务\n- 生成 Radicale 兼容的目录结构\n- iOS 版本按分类生成文件夹\n- macOS 版本将所有联系人合并到一个文件夹\n\n## 输出文件\n\n- `temp/` - 临时生成的 vCard 文件，按分类组织\n- `public/archive.zip` - 打包的发布文件\n- `radicale/ios/` - iOS CardDAV 服务文件，按分类分文件夹\n- `radicale/macos/全部/` - macOS CardDAV 服务文件，所有联系人在一个文件夹\n- `public-web/` - 网页版本输出目录，包含 HTML、CSS、JS 和资源文件\n\n## 网页版本\n\n### 开发服务器\n- 使用 `src/serve.js` 作为开发服务器\n- 默认运行在 `http://localhost:3000`\n- 支持热重载和静态文件服务\n- 自动设置正确的 MIME 类型，包括 `.vcf` 文件\n\n### 构建流程\n- `buildWeb` 任务会：\n  1. 读取所有 YAML 数据文件\n  2. 生成 JSON 数据注入到网页模板\n  3. 复制图标文件到 `public-web/icons/`\n  4. 复制 VCF 文件到 `public-web/vcf/`\n  5. 生成完整的网页界面\n\n## 关键技术细节\n\n### vCard 生成差异\n- **标准版本** (`vcard.js`)：过滤 106 开头的长号码，适用于一般用户\n- **扩展版本** (`vcard-ext.js`)：保留所有号码，添加 REV 和 UID 字段，适用于 CardDAV\n\n### Git 时间戳集成\n- 扩展版本使用 `git log` 获取文件最后修改时间\n- REV 字段使用 YAML 和 PNG 文件中较新的时间戳\n- 确保 CardDAV 客户端能正确检测更新\n\n### 拼音处理\n- 使用 `pinyin-pro` 库生成拼音\n- 自动为中文机构名添加 `X-PHONETIC-ORG` 字段\n- 支持通讯录中的中文排序功能\n\n## 注意事项\n\n- 不支持 SVG 图标，必须转换为 PNG\n- 图标设计规范：圆形 140x140px，正方形 120x120px，长方形 160x80px\n- 所有文本编码使用 UTF-8\n- 项目使用 ES 模块语法（`\"type\": \"module\"`）\n- 网页版本需要先运行 `generator` 生成 VCF 文件\n- CardDAV 版本使用 `generator_ext` 确保包含完整的元数据\n\n## 图标标准化处理\n\n项目优先使用 512x512px 的 PNG 格式，文件大小不超过 50KB。也支持 200x200px（≤20KB）作为备选。Issue 中提供的图标通常尺寸过大（如 1024x1024），需要缩放处理。\n\n### 处理步骤\n\n1. **下载原始图标**：从 GitHub issue 或评论中的 `user-attachments` 链接下载 PNG 文件\n2. **检查原始尺寸**：使用 `file` 命令确认格式和尺寸\n3. **缩放处理**：使用 Python Pillow 进行缩放（优先 512x512）\n   ```python\n   from PIL import Image\n   img = Image.open('input.png')\n   img = img.convert('RGBA')\n   img = img.resize((512, 512), Image.LANCZOS)\n   img.save('output.png', 'PNG', optimize=True)\n   ```\n4. **验证结果**：确认输出为 PNG 格式、512x512px、文件大小 < 50KB\n\n### 环境依赖\n\n- 图片缩放依赖 `Pillow`，如未安装可通过 `pip3 install Pillow` 安装\n- 环境中通常没有 ImageMagick（`convert`/`magick`）或 ffmpeg，优先使用 Python 方案\n- Node.js `canvas` 模块通常也不可用\n\n### 规格要求\n\n- 格式：PNG（不支持 SVG）\n- 尺寸：优先 512x512px（≤50KB），也支持 200x200px（≤20KB）\n- 设计参考：圆形图标有效区域 140x140px，正方形 120x120px，长方形 160x80px"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## 项目概述\n\n这是一个中国常用联系人头像库（vCards），为 iOS/macOS 设备提供企业和机构的联系人信息，用于优化来电和信息界面体验。项目生成 vCard 格式的联系人文件，并支持通过 CardDAV 服务分发。\n\n## 核心架构\n\n### 数据结构\n- `data/` - 按分类存储的 YAML 数据文件和对应的 PNG 图标\n  - 每个条目包含一个 `.yaml` 配置文件和一个 `.png` 图标文件\n  - YAML 文件包含 `basic` 对象，包含 `organization`、`cellPhone`、`url`、`workEmail` 等字段\n  - 图标优先使用 512x512px（≤50KB），也支持 200x200px（≤20KB）的 PNG 格式\n\n### 构建系统\n- 使用 Gulp 作为构建工具，配置文件在 `src/gulpfile.js`\n- 两个主要的生成流程：\n  - `generator` - 标准 vCard 生成，过滤 106 开头的长号码（超过11位）\n  - `generator_ext` - 扩展版本，保留所有号码并添加 git 历史时间戳\n- 支持生成分类文件夹和汇总文件\n- 支持生成 Radicale CardDAV 服务所需的文件结构\n- 网页版本构建：`buildWeb` - 生成可浏览的网页界面\n\n### 插件系统\n- `src/plugins/vcard.js` - 标准 vCard 生成插件\n- `src/plugins/vcard-ext.js` - 扩展版 vCard 生成插件，包含 REV 字段和 UID\n- 使用 `vcards-js` 库生成 vCard 格式\n- 自动添加拼音字段用于中文排序\n\n## 常用命令\n\n### 开发和测试\n```bash\n# 运行格式检查和数据验证\nnpm test\n# 或使用 yarn\nyarn test\n\n# 构建标准版本（用于发布）\nnpm run build\n\n# 构建 CardDAV 服务版本\nnpm run radicale\n\n# 构建网页版本\nnpm run build:web\n\n# 启动网页开发服务器\nnpm run dev:web\n# 或单独启动服务器\nnpm run serve:web\n```\n\n### Gulp 任务\n```bash\n# 生成 vCard 文件到 temp 目录\nnpm run gulp generator\n\n# 生成扩展版本 vCard（保留所有号码）\nnpm run gulp generator_ext\n\n# 生成分类汇总文件\nnpm run gulp combine\n\n# 生成总汇总文件\nnpm run gulp allinone\n\n# 创建压缩包\nnpm run gulp archive\n\n# 完整构建流程\nnpm run gulp build\n\n# CardDAV 服务构建\nnpm run gulp radicale\n\n# 网页版本构建\nnpm run gulp buildWeb\n```\n\n## 数据验证和规范\n\n### Schema 验证\n- 使用 Joi 进行数据验证，配置在 `src/const/schema.js`\n- 电话号码使用 `google-libphonenumber` 进行验证\n- 支持中国区号格式和国际格式\n\n### 测试规范\n- 图标必须是合法的 PNG 格式（优先 512x512px ≤50KB，也支持 200x200px ≤20KB）\n- YAML 数据必须符合定义的 schema\n- 检查阻止列表（`src/const/block.js`）中的机构\n\n### 添加新条目\n1. 在对应的 `data/分类/` 目录下添加 `.yaml` 和 `.png` 文件\n2. 运行 `npm test` 检查格式规范\n3. YAML 文件必须包含：\n   - `basic.organization` - 机构名称\n   - `basic.cellPhone` - 电话号码数组\n   - `basic.url` - 官网链接（可选）\n   - `basic.workEmail` - 邮箱数组（可选）\n\n## 特殊处理\n\n### 电话号码过滤\n- 标准版本会过滤掉 106 开头的长号码（超过11位）\n- 扩展版本保留所有号码\n\n### 中文支持\n- 自动生成拼音字段用于通讯录排序\n- 使用 `pinyin-pro` 库进行拼音转换\n\n### CardDAV 服务\n- 生成 Radicale 兼容的目录结构\n- iOS 版本按分类生成文件夹\n- macOS 版本将所有联系人合并到一个文件夹\n\n## 输出文件\n\n- `temp/` - 临时生成的 vCard 文件，按分类组织\n- `public/archive.zip` - 打包的发布文件\n- `radicale/ios/` - iOS CardDAV 服务文件，按分类分文件夹\n- `radicale/macos/全部/` - macOS CardDAV 服务文件，所有联系人在一个文件夹\n- `public-web/` - 网页版本输出目录，包含 HTML、CSS、JS 和资源文件\n\n## 网页版本\n\n### 开发服务器\n- 使用 `src/serve.js` 作为开发服务器\n- 默认运行在 `http://localhost:3000`\n- 支持热重载和静态文件服务\n- 自动设置正确的 MIME 类型，包括 `.vcf` 文件\n\n### 构建流程\n- `buildWeb` 任务会：\n  1. 读取所有 YAML 数据文件\n  2. 生成 JSON 数据注入到网页模板\n  3. 复制图标文件到 `public-web/icons/`\n  4. 复制 VCF 文件到 `public-web/vcf/`\n  5. 生成完整的网页界面\n\n## 关键技术细节\n\n### vCard 生成差异\n- **标准版本** (`vcard.js`)：过滤 106 开头的长号码，适用于一般用户\n- **扩展版本** (`vcard-ext.js`)：保留所有号码，添加 REV 和 UID 字段，适用于 CardDAV\n\n### Git 时间戳集成\n- 扩展版本使用 `git log` 获取文件最后修改时间\n- REV 字段使用 YAML 和 PNG 文件中较新的时间戳\n- 确保 CardDAV 客户端能正确检测更新\n\n### 拼音处理\n- 使用 `pinyin-pro` 库生成拼音\n- 自动为中文机构名添加 `X-PHONETIC-ORG` 字段\n- 支持通讯录中的中文排序功能\n\n## 注意事项\n\n- 不支持 SVG 图标，必须转换为 PNG\n- 图标设计规范：圆形 140x140px，正方形 120x120px，长方形 160x80px\n- 所有文本编码使用 UTF-8\n- 项目使用 ES 模块语法（`\"type\": \"module\"`）\n- 网页版本需要先运行 `generator` 生成 VCF 文件\n- CardDAV 版本使用 `generator_ext` 确保包含完整的元数据\n\n## 图标标准化处理\n\n项目优先使用 512x512px 的 PNG 格式，文件大小不超过 50KB。也支持 200x200px（≤20KB）作为备选。Issue 中提供的图标通常尺寸过大（如 1024x1024），需要缩放处理。\n\n### 处理步骤\n\n1. **下载原始图标**：从 GitHub issue 或评论中的 `user-attachments` 链接下载 PNG 文件\n2. **检查原始尺寸**：使用 `file` 命令确认格式和尺寸\n3. **缩放处理**：使用 Python Pillow 进行缩放（优先 512x512）\n   ```python\n   from PIL import Image\n   img = Image.open('input.png')\n   img = img.convert('RGBA')\n   img = img.resize((512, 512), Image.LANCZOS)\n   img.save('output.png', 'PNG', optimize=True)\n   ```\n4. **验证结果**：确认输出为 PNG 格式、512x512px、文件大小 < 50KB\n\n### 环境依赖\n\n- 图片缩放依赖 `Pillow`，如未安装可通过 `pip3 install Pillow` 安装\n- 环境中通常没有 ImageMagick（`convert`/`magick`）或 ffmpeg，优先使用 Python 方案\n- Node.js `canvas` 模块通常也不可用\n\n### 规格要求\n\n- 格式：PNG（不支持 SVG）\n- 尺寸：优先 512x512px（≤50KB），也支持 200x200px（≤20KB）\n- 设计参考：圆形图标有效区域 140x140px，正方形 120x120px，长方形 160x80px","category":"root","tokens":981}]}