{"id":"91bda052-5cf2-4f50-9cfd-d0ae9936b80f","entityType":"agent","slug":"clawhub-ldxs001-workday-calendar","name":"workday-calendar","canonicalUrl":"https://www.xpersona.co/agent/clawhub-ldxs001-workday-calendar","canonicalPath":"/agent/clawhub-ldxs001-workday-calendar","generatedAt":"2026-10-10T10:52:22.009Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":null},"description":"智能周历系统。支持法定假日、补班日、轮休系统（跳过/不跳过法定假双模式）、特殊休息（公休/临修）、个人日程管理。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.7K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s1794v2r46s8y5d1r4jdd7ec5h84rw70:workday-calendar","sourceUrl":"https://clawhub.ai/ldxs001/workday-calendar","homepage":"https://clawhub.ai/ldxs001/skills/workday-calendar","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/ldxs001/workday-calendar","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/ldxs001/skills/workday-calendar","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"workday-calendar technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":null},"stars":null,"forks":null,"downloads":1671,"packageName":null,"latestVersion":"2.2.0","tractionLabel":"1.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:54:57.838Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T04:54:57.839Z","lastCrawledAt":"2026-10-10T04:54:57.838Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T04:54:57.839Z","lastVerifiedAt":null,"highlights":[{"version":"2.2.0","createdAt":"2026-06-25T10:26:40.854Z","changelog":"**workday-calendar 2.2.0** — 大版本升级，全面支持轮休（班表）与特殊休息，增强排班配置与数据分层。 - 新增“轮休系统”，可设置轮班周期，支持“跳过/不跳过”法定假日模式。 - 支持“公休/临修”特殊休息类型，优先级高于普通假期、补班、排班。 - 增强多层数据架构（法定假期、周末规则、轮休/特殊休息、个人日程独立层），日历类型优先级体系更清晰。 - 引入`settings.py`，提供本地 Web 配置中心（端口 8765）。 - CLI、数据格式、权限与文档标准化，对应 MD 文档重组与细化，权限说明单独拆分为 references/permissions.md。 - 移除旧 permission.md/skill-card.md，新增使用示例、CLI、权限、测试","fileCount":16,"zipByteSize":59035},{"version":"1.6.5","createdAt":"2026-05-30T20:56:16.651Z","changelog":"workday-calendar 1.6.4 - 新增 meta_field_sync: true 字段，增强元数据同步能力 - tags 增加 'calendar', 'workday', 'holiday', 'schedule', 'excel-export'，便于检索和分类 - 版本号更新至 1.6.4","fileCount":10,"zipByteSize":23856},{"version":"1.6.3","createdAt":"2026-05-30T20:09:38.870Z","changelog":"- No code changes detected in this release. - Added h1_position: true to metadata for SKILL.md, which may affect documentation rendering or display. - Version updated to 1.6.3.","fileCount":10,"zipByteSize":23651},{"version":"1.6.2","createdAt":"2026-05-30T19:47:49.426Z","changelog":"workday-calendar v1.6.2 - 增加 author、license、tags 元数据字段。 - 更新 version 至 1.6.2。 - description 行更简明，保留原 skill-standardization 相关说明。 - 其余核心功能和使用说明保持一致，无功能改动。","fileCount":10,"zipByteSize":23769},{"version":"1.6.0","createdAt":"2026-05-30T03:54:37.345Z","changelog":"workday-calendar v1.6.0 - 完成 skill-standardization 合规改造，修复 R-12 数据目录路径，规范 data_dir 字段（含 _meta.json 补充） - 数据存储路径更新为 .standardization/workday-calendar/data/ - 新增 external_data_dir 标记 - 代码层增加 DEFAULT_DATA_DIR_RAW 审计锚点 - 移除 skill-card.md（已删除冗余说明）","fileCount":10,"zipByteSize":23557},{"version":"1.5.0","createdAt":"2026-05-27T15:52:12.456Z","changelog":"v1.5.0 introduces skill-standardization, structural updates, and documentation improvements: - Restructured SKILL.md: clarified field usage, added compliance fields (`sensitive_access`, `critical_write`, `permission_weight`, etc.) - Improved trigger system: added `trigger_negative` and clarified positive/negative triggering scenarios. - Split out detailed guidance, FAQ, and antipatterns to separate markdown files for modular documentation. - Refined CLI command usage examples for greater clarity and unified script naming. - Data directory standardized to `.standardization/workday-calendar/data/` for consistent storage paths.","fileCount":10,"zipByteSize":23254},{"version":"1.3.0","createdAt":"2026-05-24T16:18:27.916Z","changelog":"- 数据存储路径统一规范到 skills/.standardization/<skill>/data/，便于管理和迁移。 - 移除多份年度假日与日程配置等本地JSON示例数据文件，减少冗余。 - 新增 references/permission_report.json 文件。 - 其他核心能力、使用方式和接口保持不变。","fileCount":6,"zipByteSize":18335},{"version":"1.2.0","createdAt":"2026-05-24T14:46:33.413Z","changelog":"- 新增 references/permission.md 文件，补充权限或参考文档。 - 无功能改动，主要文档和结构保持不变。","fileCount":11,"zipByteSize":19587}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1794v2r46s8y5d1r4jdd7ec5h84rw70:workday-calendar","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1794v2r46s8y5d1r4jdd7ec5h84rw70:workday-calendar` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/ldxs001/workday-calendar before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:52:22.006Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ldxs001-workday-calendar/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":null},"readme":"Skill: workday-calendar\n\nOwner: ldxs001\n\nSummary: 智能周历系统。支持法定假日、补班日、轮休系统（跳过/不跳过法定假双模式）、特殊休息（公休/临修）、个人日程管理。\n\nTags: latest:2.2.0\n\nVersion history:\n\nv2.2.0 | 2026-06-25T10:26:40.854Z | auto\n\n**workday-calendar 2.2.0** — 大版本升级，全面支持轮休（班表）与特殊休息，增强排班配置与数据分层。\n\n- 新增“轮休系统”，可设置轮班周期，支持“跳过/不跳过”法定假日模式。\n- 支持“公休/临修”特殊休息类型，优先级高于普通假期、补班、排班。\n- 增强多层数据架构（法定假期、周末规则、轮休/特殊休息、个人日程独立层），日历类型优先级体系更清晰。\n- 引入`settings.py`，提供本地 Web 配置中心（端口 8765）。\n- CLI、数据格式、权限与文档标准化，对应 MD 文档重组与细化，权限说明单独拆分为 references/permissions.md。\n- 移除旧 permission.md/skill-card.md，新增使用示例、CLI、权限、测试\n\nv1.6.5 | 2026-05-30T20:56:16.651Z | user\n\nworkday-calendar 1.6.4\n\n- 新增 meta_field_sync: true 字段，增强元数据同步能力\n- tags 增加 'calendar', 'workday', 'holiday', 'schedule', 'excel-export'，便于检索和分类\n- 版本号更新至 1.6.4\n\nv1.6.3 | 2026-05-30T20:09:38.870Z | user\n\n- No code changes detected in this release.\n- Added h1_position: true to metadata for SKILL.md, which may affect documentation rendering or display.\n- Version updated to 1.6.3.\n\nv1.6.2 | 2026-05-30T19:47:49.426Z | user\n\nworkday-calendar v1.6.2\n\n- 增加 author、license、tags 元数据字段。\n- 更新 version 至 1.6.2。\n- description 行更简明，保留原 skill-standardization 相关说明。\n- 其余核心功能和使用说明保持一致，无功能改动。\n\nv1.6.0 | 2026-05-30T03:54:37.345Z | user\n\nworkday-calendar v1.6.0\n\n- 完成 skill-standardization 合规改造，修复 R-12 数据目录路径，规范 data_dir 字段（含 _meta.json 补充）\n- 数据存储路径更新为 .standardization/workday-calendar/data/\n- 新增 external_data_dir 标记\n- 代码层增加 DEFAULT_DATA_DIR_RAW 审计锚点\n- 移除 skill-card.md（已删除冗余说明）\n\nv1.5.0 | 2026-05-27T15:52:12.456Z | user\n\nv1.5.0 introduces skill-standardization, structural updates, and documentation improvements:\n\n- Restructured SKILL.md: clarified field usage, added compliance fields (`sensitive_access`, `critical_write`, `permission_weight`, etc.)\n- Improved trigger system: added `trigger_negative` and clarified positive/negative triggering scenarios.\n- Split out detailed guidance, FAQ, and antipatterns to separate markdown files for modular documentation.\n- Refined CLI command usage examples for greater clarity and unified script naming.\n- Data directory standardized to `.standardization/workday-calendar/data/` for consistent storage paths.\n\nv1.3.0 | 2026-05-24T16:18:27.916Z | user\n\n- 数据存储路径统一规范到 skills/.standardization/<skill>/data/，便于管理和迁移。\n- 移除多份年度假日与日程配置等本地JSON示例数据文件，减少冗余。\n- 新增 references/permission_report.json 文件。\n- 其他核心能力、使用方式和接口保持不变。\n\nv1.2.0 | 2026-05-24T14:46:33.413Z | user\n\n- 新增 references/permission.md 文件，补充权限或参考文档。\n- 无功能改动，主要文档和结构保持不变。\n\nv1.1.1 | 2026-05-21T17:29:34.082Z | user\n\n## v1.1.1 Changelog\n\n- Version bump from 1.1.0 to 1.1.1.\n- No code or documentation changes detected in this release.\n\nv1.1.0 | 2026-05-21T13:16:14.041Z | user\n\nVersion 1.1.0 – Adds automatic disaster recovery backup for schedule data\n\n- 每次添加新日程前自动做 .bat 备份（最多9份，循环覆盖），便于一键回滚 schedule_events.json；\n- 备份文件为 Windows 可用 .bat，可直接双击恢复或命令行恢复；\n- 新增 data/backups/ 目录，包含 schedule_backup_01~09.bat 及索引文件；\n- schedule_events.json 文件作为全局日程事件数据存储；\n- 其他功能保持不变，兼容原有工作日计算和日程管理能力。\n\nv1.0.0 | 2026-05-19T15:54:18.875Z | user\n\n- Initial release of the workday-calendar skill.\n- Supports national holiday and compensatory workday management, customizable weekend rules, and annual workday calculation.\n- Provides weekly calendar generation and full-featured schedule management (add, delete, update, query, auto conflict detection).\n- All data is stored locally in JSON files, with user-friendly CLI commands for all major functions.\n- Includes rules confirmation and statistical summary to ensure official holiday consistency.\n\nArchive index:\n\nArchive v2.2.0: 16 files, 59035 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (4339b), references/cli.md (2956b), references/data_format.md (5616b), references/examples.md (1744b), references/faq.md (2307b), references/guide.md (1631b), references/LICENSE.md (1097b), references/permission_report.json (514b), references/permissions.md (3250b), references/test-report.md (22136b), scripts/settings.py (18083b), scripts/workday_calendar.py (133923b), skill-card.md (2455b), SKILL.md (6717b)\n\nFile v2.2.0:SKILL.md\n\n---\r\nname: workday-calendar\r\nauthor: wUwproject\r\nlicense: MIT\r\ntags: ['calendar', 'workday', 'holiday', 'schedule', 'rotation', 'gongxiu', 'linxiu', 'excel-export']\r\nversion: 2.2.0\r\ndescription: 智能周历系统。支持法定假日、补班日、轮休系统（跳过/不跳过法定假双模式）、特殊休息（公休/临修）、个人日程管理。\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间|轮休|公休|临修|排班\r\ntrigger_negative: true\r\nexternal_data_dir: true\r\nh1_position: true\r\nmeta_field_sync: true\r\ncreate_permissions_md: true\r\n---\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n## 触发条件\r\n\r\n**正向触发：**\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n### 否定条件（不触发）\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n\r\n| 能力 | 说明 |\r\n| ------ |------|\r\n| **法定假日管理** | 区间形式存储节假日，支持 AI 批量导入 |\r\n| **补班日管理** | 单独记录调休上班日期 |\r\n| **周末规则可配置** | 双休/单休/单双休/自定义周几 |\r\n| **工作日计算** | 自动计算年度总工日，含所有休息类型统计 |\r\n| **轮休系统** | skip/add 双模式，可配置周期，跨年缓存 |\r\n| **特殊休息** | 公休/临修，支持单日和区间，最高优先级 |\r\n| **个人日程** | 添加/删除/更新/查询/冲突检测 |\r\n| **排班时段** | 15 分钟粒度，支持岗位+人员多赋值 |\r\n| **HTML 导出** | 排班周历 / 日程周历 / 排班表（周/月/日期范围） |\r\n| **定时任务** | 自动化配置，Markdown 输出 |\r\n| **配置中心** | Web 界面（settings.py，端口 8765） |\r\n\r\n### 渐进式文件索引\r\n\r\n| 文件名 | 分类 | 包含内容 | 审计关联 |\r\n| -------- |------| ---------- |----------|\r\n| `references/LICENSE.md` | 许可协议 | MIT 许可证完整文本 | R-26 |\r\n| `references/antipatterns.md` | 规范指南 | 常见反模式与避坑指引 | R-18 |\r\n| `references/changelog.md` | 版本管理 | 版本更新日志 | R-24 |\r\n| `references/cli.md` | 命令参考 | CLI 命令完整列表 | 无 |\r\n| `references/data_format.md` | 参考文档 | JSON 数据格式说明 | 无 |\r\n| `references/examples.md` | 使用示例 | 各场景完整交互示例 | R-25 C-17 |\r\n| `references/faq.md` | 常见问题 | 常见疑问与解答 | R-19, R-25 C-19 |\r\n| `references/guide.md` | 使用指南 | Python API 使用示例 | 无 |\r\n| `references/permissions.md` | 权限与测试 | 权限扫描说明与测试结论 | R-15, R-16 |\r\n| `references/test-report.md` | 测试报告 | skill-function-test 测试结论 | 无 |\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n\r\n当某年没有法定假日数据时（`load_holiday_intervals(year)` 返回空列表），**必须主动联网查询**国务院办公厅放假安排通知：\r\n\r\n1. **联网查询** — 输入：年份 → 搜索\"国务院办公厅 20XX年 放假安排\" → 输出：法定假日日期范围、补班日、假期名称\r\n2. **组织规则模板 JSON** — 输入：查询结果 → 按 `export_rules_template` 格式组织 JSON → 输出：标准规则模板\r\n3. **导入** — 输入：规则模板 → 调用 `import_rules_from_template()` → 输出：数据写入 JSON 文件\r\n4. **核对** — 输入：已导入数据 → 运行 `python scripts/workday_calendar.py rules 20XX` → 输出：规则确认表\r\n5. **计算** — 输入：确认无误的数据 → 调用 `calculate_total_workdays(20XX)` → 输出：年度工日统计\r\n\r\n**联网查询要求：**\r\n- 搜索关键词：\"国务院办公厅 20XX 年 放假安排\"\r\n- 获取：法定假日日期范围、调休上班日（补班）、假期名称\r\n- 确认该年周末规则（通常为标准双休日六日）\r\n\r\n**组织规则模板（`export_rules_template` 格式）：**\r\n```json\r\n{\r\n  \"version\": \"1.0\",\r\n  \"year\": 2027,\r\n  \"base_type\": \"holiday\",\r\n  \"rules\": {\r\n    \"weekend_config\": {\"weekends\": [0, 6]},\r\n    \"holiday_intervals\": [\r\n      {\"name\": \"元旦\", \"start\": \"2027-01-01\", \"end\": \"2027-01-03\"}\r\n    ],\r\n    \"compensatory_days\": [\r\n      {\"date\": \"2027-01-04\", \"note\": \"元旦补班\"}\r\n    ],\r\n    \"rotation_configs\": [],\r\n    \"special_rests\": []\r\n  }\r\n}\r\n```\r\n\r\n**执行导入：**\r\n```python\r\ntemplate = {上面组织好的 JSON}\r\nimport_rules_from_template(template)\r\n```\r\n\r\n**导入后核对：**\r\n```bash\r\npython scripts/workday_calendar.py rules 2027\r\n```\r\n\r\n⚠️ **核对步骤必须执行**：节假日日期、补班日必须与国务院通知完全一致。\r\n\r\n### 四层数据架构\r\n\r\n```text\r\n底板(法定假休, 永远不变)\r\n  └→ weekend_config(双休/单休/自定义周几)\r\n      └→ 排班规则(轮休/公休/临修, 始终叠在 weekend_config 上)\r\n          ├─ toggle OFF → 假休保留(不受排班影响)\r\n          └─ toggle ON  → 排班全面覆盖(包括假休)\r\n              └→ 个人日程(记事本, 永远最上层)\r\n```\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n| -------- |------| ------ |\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **临修** | 强制计为休息日 |\r\n| 3 | **公休** | 强制计为休息日 |\r\n| 4 | **轮休** | 按配置生成的休息日 |\r\n| 5 | **法定假日** | 强制计为休息日 |\r\n| 6 | **周末** | 按配置的周末规则 |\r\n| 7 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n- 添加日程时自动检测时间冲突\r\n- 更新日程时重新检测冲突，冲突则自动还原\r\n\r\n- `scripts/workday_calendar.py` — 核心逻辑\r\n- `scripts/settings.py` — 配置中心 Web 服务器\n\nFile v2.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1782383200854\n}\n\nFile v2.2.0:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 230 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 更新日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v2.2.0:references/changelog.md\n\n## 2.2.0 (2026-06-22)\r\n\r\n### Added\r\n- B 层排班时段规则系统（WorkSlot 15 分钟粒度）\r\n- 岗位（position）+ 多人多岗多赋值（WorkSlot.assignments）\r\n- 排班时段条（tl-bar，工作日蓝灰交替/周末全灰/假日隐藏）\r\n- 弹出框排班时段表 + 个人日程按 B 层时段染色\r\n- 排班表导出（export_schedule_table，周/月/日期范围，按周或月分组）\r\n- 日程自动状态流转（pending → missed/completed，配置开关）\r\n- 平台无关的自动化定时配置（auto add/check CLI）\r\n- 补班日弹出框按工作日时段展示\r\n\r\n### Changed\r\n- 周末色统一为绿色（法定假休），不再与轮休双色区分\r\n- 日类型简化为：绿=休息（法定/双休/轮休/公休/临修）、红=补班、白=工作\r\n- get_day_type() 逻辑重构：排班规则只定义上班，不上班=休息\r\n- config.json 缺字段自动补默认值（不再因旧文件无 key 而失效）\r\n\r\n### Fixed\r\n- load_config() 新增字段自动合并默认值\r\n- auto_update_event_statuses() 支持 missed→completed 重评\r\n- get_slot_color_for_time() 按 weekday+time 正确映射时段颜色\r\n- weekend_config 映射 bug（config 0=周日→Python 6=周日）\r\n- 弹出框日程染色正确（午休灰、上午班蓝、下午班蓝）\r\n\r\n## 2.1.0 (2026-06-22)\r\n\r\n### Added\r\n- 基础周 HTML 导出与配置中心（settings.py）\r\n- 岗位+人员多赋值支持（WorkSlot.assignments）\r\n- 排班表导出（周/月/日期范围）\r\n- 定时任务自动化配置（auto CLI）\r\n- 过期日程自动打标（missed/completed 配置切换）\r\n- 排班时段条（tl-bar 可视化）\r\n- 配置中心 Web 界面\r\n\r\n### Fixed\r\n- `update_schedule_event()` 增加冲突检测\r\n- `export_rules_table()` 修复硬编码 52 周\r\n- 节假日落在周末重复扣除 Bug\r\n- 周末规则转换 Bug（config_weekends_to_python）\r\n- `scheduling_rules.json` 清空后默认回退\r\n\r\n### Changed\r\n- WorkSlot 重构：assignments 列表替代单 position/persons\r\n- 加载配置使用默认值合并（兼容旧 config.json）\r\n\r\n## 1.6.5 (2026-05-31)\r\n\r\n### 修复\r\n- **data_dir 格式修正**: frontmatter 的 data_dir 恢复为 ../ 相对路径格式（此前错误同步为 skills/ 格式）\r\n\r\n---\r\n## 1.6.4 (2026-05-31)\r\n\r\n### 修复\r\n- audit --fix 自动修正: meta_field_sync\r\n\r\n---\r\n\r\n## 1.6.3 (2026-05-31)\r\n\r\n### 修复\r\n- **H1 位置修复**: 将 H1 从第 38 行移至 frontmatter 后首行（原距 frontmatter 闭合后有 22 行空白）\r\n\r\n---\r\n## 1.6.2 (2026-05-31)\r\n\r\n### 修复\r\n- **R-04**: description 删除版本号\r\n- **R-10**: changelog 版本号去 v 前缀\r\n\r\n---\r\n\r\n## 1.6.1 (2026-05-30)\r\n\r\n### 修复\r\n- audit --fix 自动修正\r\n\r\n---\r\n\r\n\r\n## 1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## 1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（删除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## 1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（删除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## 1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v2.2.0:references/cli.md\n\n# CLI 命令参考\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\n\r\n# 轮休管理\r\npython scripts/workday_calendar.py rotation add \"A组\" 2026-01-05 7 5 --skip\r\npython scripts/workday_calendar.py rotation list\r\npython scripts/workday_calendar.py rotation delete <id>\r\npython scripts/workday_calendar.py rotation generate 2026\r\n\r\n# 特殊休息管理（公休/临修）\r\npython scripts/workday_calendar.py special add 公休 --date=2026-03-15 --reason=\"公司统一调休\"\r\npython scripts/workday_calendar.py special add 临修 --start-date=2026-04-10 --end-date=2026-04-12\r\npython scripts/workday_calendar.py special list\r\npython scripts/workday_calendar.py special delete <id>\r\n\r\n# 排班时段规则\r\npython scripts/workday_calendar.py sched view\r\npython scripts/workday_calendar.py sched set 0 08:30-11:30:上午班|收银台:张三,李四 13:30-17:30:下午班\r\n\r\n# 配置管理\r\npython scripts/workday_calendar.py config\r\npython scripts/workday_calendar.py config set --use-scheduling=true\r\npython scripts/workday_calendar.py config set --auto-complete=true\r\n\r\n# 规则模板（标准化 JSON 接口）\r\npython scripts/workday_calendar.py export-rules-template\r\npython scripts/workday_calendar.py import-rules '<json>'\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\"\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --status=completed\r\npython scripts/workday_calendar.py schedule 7\r\npython scripts/workday_calendar.py today\r\n\r\n# HTML 导出\r\npython scripts/workday_calendar.py export-weekly-board [year]\r\npython scripts/workday_calendar.py export-schedule-weekly [year]\r\npython scripts/workday_calendar.py export-schedule-table --mode=week|month --date-from=... --date-to=...\r\n\r\n# 定时任务自动化\r\npython scripts/workday_calendar.py auto add \"晨间简报\" 6 0 3\r\npython scripts/workday_calendar.py auto list\r\npython scripts/workday_calendar.py auto check\r\n\r\n# 配置中心（Web 界面）\r\npython scripts/settings.py [port]   # 默认 8765\r\n```\r\n\r\n### ⚙️ 配置中心\r\n\r\n运行 `python scripts/settings.py 8765` 后在浏览器打开 `http://localhost:8765`，支持：\r\n- **基础周类型切换** - 节假周 / 排班周\r\n- **过期日程自动打标** - 已完成 / 已错过\r\n- **导出规则模板** / **导入规则**\r\n- **导出排班HTML** / **导出日程HTML** / **导出排班表**\r\n- 排班表支持周/月单选 + 日期范围筛选\n\nFile v2.2.0:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\r\n\r\n## 概述\r\n\r\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\r\n\r\n---\r\n\r\n## 1. 法定假日区间 (Holiday Intervals)\r\n\r\n**文件名**: `holiday_intervals_{年份}.json`\r\n\r\n### 完整格式\r\n\r\n```json\r\n{\r\n  \"year\": 2026,\r\n  \"intervals\": [\r\n    {\r\n      \"name\": \"元旦\",\r\n      \"start\": \"2026-01-01\",\r\n      \"end\": \"2026-01-01\",\r\n      \"note\": \"新年第一天\"\r\n    },\r\n    {\r\n      \"name\": \"春节\",\r\n      \"start\": \"2026-01-28\",\r\n      \"end\": \"2026-02-04\",\r\n      \"note\": \"农历新年假期\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2025-12-01T10:30:00\"\r\n}\r\n```\r\n\r\n### AI导入格式（简化）\r\n\r\n```json\r\n[\r\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\r\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\r\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\r\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\r\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\r\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\r\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\r\n]\r\n```\r\n\r\n---\r\n\r\n## 2. 补班日期 (Compensatory Days)\r\n\r\n**文件名**: `compensatory_days_{年份}.json`\r\n\r\n### 完整格式\r\n\r\n```json\r\n{\r\n  \"year\": 2026,\r\n  \"days\": [\r\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\r\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\r\n  ],\r\n  \"updated_at\": \"2025-12-01T10:30:00\"\r\n}\r\n```\r\n\r\n### AI导入格式（简化）\r\n\r\n```json\r\n[\r\n  {\"date\": \"2026-01-25\"},\r\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\r\n]\r\n```\r\n\r\n---\r\n\r\n## 3. 周末规则配置 (Weekend Config)\r\n\r\n**文件名**: `weekend_config.json`\r\n\r\n```json\r\n{\r\n  \"weekends\": [0, 6],\r\n  \"updated_at\": \"2025-12-01T10:30:00\"\r\n}\r\n```\r\n\r\n### 周末数值对照\r\n\r\n| 数值 | 星期 |\r\n|------|------|\r\n| 0 | 周日 |\r\n| 1 | 周一 |\r\n| 2 | 周二 |\r\n| 3 | 周三 |\r\n| 4 | 周四 |\r\n| 5 | 周五 |\r\n| 6 | 周六 |\r\n\r\n---\r\n\r\n## 4. 日程事件 (Schedule Events)\r\n\r\n**文件名**: `schedule_events.json`\r\n\r\n### 完整格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 字段说明\r\n\r\n| 字段 | 类型 | 必填 | 说明 |\r\n|------|------|------|------|\r\n| id | string | ✅ | 唯一标识符（自动生成） |\r\n| title | string | ✅ | 日程标题 |\r\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\r\n| start_time | string | ✅ | 开始时间 (HH:MM) |\r\n| end_time | string | ✅ | 结束时间 (HH:MM) |\r\n| description | string | ❌ | 描述说明 |\r\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\r\n| status | string | ❌ | 状态（pending/completed/cancelled） |\r\n| created_at | string | ✅ | 创建时间 |\r\n| updated_at | string | ✅ | 更新时间 |\r\n\r\n### 分类选项\r\n\r\n| 值 | 说明 |\r\n|----|------|\r\n| 工作 | 工作相关事务 |\r\n| 个人 | 个人事务 |\r\n| 会议 | 会议安排 |\r\n| 其他 | 其他类型 |\r\n\r\n### 状态选项\r\n\r\n| 值 | 说明 |\r\n|----|------|\r\n| pending | 待完成（默认） |\r\n| completed | 已完成 |\r\n| cancelled | 已取消 |\r\n\r\n---\r\n\r\n## 5. 年度汇总导出 (Year Summary)\r\n\r\n```json\r\n{\r\n  \"year\": 2026,\r\n  \"total_workdays\": 247,\r\n  \"total_holidays\": 118,\r\n  \"total_days\": 365,\r\n  \"holiday_count\": 28,\r\n  \"compensatory_count\": 5,\r\n  \"weekend_config\": {\"weekends\": [0, 6]},\r\n  \"holiday_intervals\": [...],\r\n  \"compensatory_days\": [...]\r\n}\r\n```\r\n\r\n---\r\n\r\n## 6. 周历导出 (Weekly Calendar)\r\n\r\n```json\r\n[\r\n  {\r\n    \"week_number\": 1,\r\n    \"week_start\": \"2026-01-01\",\r\n    \"week_end\": \"2026-01-03\",\r\n    \"week_workdays\": 2,\r\n    \"week_holidays\": 5,\r\n    \"days\": [\r\n      {\r\n        \"date\": \"2026-01-01\",\r\n        \"weekday\": 3,\r\n        \"weekday_name\": \"周四\",\r\n        \"day_type\": \"假日\",\r\n        \"is_workday\": false,\r\n        \"holiday_name\": \"元旦\",\r\n        \"month\": 1,\r\n        \"day\": 1\r\n      }\r\n    ]\r\n  }\r\n]\r\n```\r\n\r\n---\r\n\r\n## 7. 空闲时段查询 (Free Slots)\r\n\r\n```json\r\n[\r\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n]\r\n```\r\n\r\n---\r\n\r\n## AI调用示例\r\n\r\n### 场景1：导入法定假日数据\r\n\r\n```python\r\nimport_holidays_from_ai(2026, [\r\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\r\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\r\n    # ...\r\n])\r\n```\r\n\r\n### 场景2：添加日程\r\n\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n```\r\n\r\n### 场景3：查询空闲时间\r\n\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\"\r\n)\r\n```\r\n\r\n### 场景4：生成日程列表\r\n\r\n```python\r\nschedule = generate_today_schedule()\r\n# 输出:\r\n# 📅 2026-05-19 (周二) - 无安排\r\n# 📅 2026-05-20 (周三)\r\n#   🔄 09:00-10:00 晨会\r\n#   🔄 14:00-15:30 项目评审\r\n```\r\n\r\n### 场景5：删除日程\r\n\r\n```python\r\nmsg = delete_schedule_event(\"d008b885\")\r\n# 输出: \"已删除日程: 晨会\"\r\n```\r\n\r\n### 场景6：更新日程状态\r\n\r\n```python\r\nmsg = update_schedule_event(\r\n    \"d008b885\",\r\n    status=\"completed\"\r\n)\r\n```\n\nFile v2.2.0:references/examples.md\n\n# 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n### 场景7：配置轮休\r\n```\r\n用户：给A组配置一个轮休，7天一周期，工作5天休息2天，跳过法定假\r\nAI：调用 add_rotation_config(\"A组\", \"2026-01-05\", 7, 5, True)\r\n生成：rotate_generate(2026)\r\n```\r\n\r\n### 场景8：公休/临修\r\n```\r\n用户：下周一公司统一调休\r\nAI：调用 add_special_rest(\"公休\", date=\"2026-03-15\")\r\n\r\n用户：15号到17号办公室装修，临时休息\r\nAI：调用 add_special_rest(\"临修\", start_date=\"2026-04-15\", end_date=\"2026-04-17\")\r\n```\r\n\r\n### 场景9：法定假休被改为轮休\r\n```\r\n用户：这个项目期间，春节假期按轮休走\r\nAI：创建轮休配置 + 可选调整/删除春节假期区间 -> generate -> check rules\r\n```\n\nFile v2.2.0:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\r\n\r\nQ: add_schedule_event() 返回\"冲突\"怎么办？\r\nA: 该时间段已有日程。先用 `list <date>` 查看现有日程，调整起止时间避开冲突。更新日程时也会重新检测冲突，冲突则自动还原。\r\n\r\nQ: 导入规则模板时报 JSON 解析错误？\r\nA: 检查模板 JSON 是否符合 `export_rules_template` 格式（version/year/base_type/rules 字段）。可先用 `export-rules-template` 导出正确格式作为对照。\r\n\r\nQ: HTML 导出后页面空白/乱码？\r\nA: 确保使用 UTF-8 编码保存 .html 文件。用浏览器打开时若显示乱码，在浏览器菜单中手动选择 UTF-8 编码。\r\n\r\nQ: settings.py 配置中心无法访问？\r\nA: 确认端口 8765 未被占用。如被占用，运行 `python scripts/settings.py <其他端口>` 指定端口。防火墙可能需放行。\n\nFile v2.2.0:references/guide.md\n\n# 使用指南\r\n\r\n## 工作日计算\r\n\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n## 日程管理\r\n\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\", date=\"2026-05-20\",\r\n    start_time=\"14:00\", end_time=\"15:00\",\r\n    description=\"项目进度讨论\", category=\"会议\"\r\n)\r\n```\r\n\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n\r\nslots = find_free_slots(date=\"2026-05-20\", start_search=\"09:00\", end_search=\"18:00\", min_duration=30)\r\n\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\nmsg = update_schedule_event(event_id, title=\"新标题\", status=\"completed\")\r\n\r\nschedule_text = generate_today_schedule()\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n## 容灾备份\r\n\r\n每次 `add_schedule_event()` 自动创建 `.bat` 备份文件：\r\n- 存储在 `data/backups/schedule_backup_01.bat ~ 09.bat`\r\n- 最多保留 9 个，循环覆盖\r\n- 恢复：双击 `.bat` 文件或 `cmd /c data/backups/schedule_backup_03.bat`\n\nFile v2.2.0:references/LICENSE.md\n\nMIT License\r\n\r\nCopyright (c) 2026 [username-redacted]\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\n\nFile v2.2.0:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v2.2.0:references/permissions.md\n\n# 基于 skill-standardization 渐进式披露规范的权限说明\r\n\r\n本文档由 `skill-standardization` 权限扫描器自动维护。\r\n\r\n## 风险等级\r\n\r\n**LOW**（实际权重: 0.2）\r\n\r\n## 权限总览\r\n\r\n| 权限类别 | 涉及项数 | 风险等级 |\r\n|-----------|----------|----------|\r\n| `subprocess_call` | 0 项 | ✅ LOW |\r\n| `file_delete` | 0 项 | ✅ LOW |\r\n| `network_access` | 1 项 | 🔴 HIGH |\r\n| `sensitive_access` | 0 项 | ✅ LOW |\r\n| `critical_write` | 0 项 | ✅ LOW |\r\n\r\n## 高权限操作说明\r\n\r\n- **网络访问**（1 项，silent）\r\n\r\n\r\n## 权限详细说明\r\n\r\n### 子进程调用（subprocess）\r\n\r\n**无**。\r\n\r\n\r\n### 文件删除\r\n\r\n**无**。\r\n\r\n\r\n### 网络访问（1 项）\r\n\r\n> **功能说明**：技能需要通过网络连接到外部服务或远程仓库。\r\n> **授权方式**：silent\r\n\r\n| 文件 | 行号 | 匹配内容 | 功能说明 |\r\n|------|------|----------|----------|\r\n| `scripts\\settings.py` | 93 | `urllib` | 自动化技能：中风险静默执行，仅记录 |\r\n\r\n\r\n### 敏感信息访问\r\n\r\n**无**。\r\n\r\n\r\n### 关键位置写入\r\n\r\n**无**。\r\n\r\n\r\n## 授权方式说明\r\n\r\n- **immediate（即时授权）**：每次执行前需获得用户批准\r\n- **unified（统一授权）**：首次执行前获得用户批准，后续不再询问\r\n- **silent（静默授权）**：无需用户交互，自动执行并记录\r\n\r\n<!-- fp:risk=LOW|sensitive=0|critical_write=0|network=1|delete=0|subprocess=0|issues=1 -->\r\n---\r\n\r\n# 权限说明\r\n\r\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\r\n\r\n## 风险等级\r\n\r\n`low`（权重 **0.00%**）\r\n\r\n## 扫描摘要\r\n\r\n| 项目 | 值 |\r\n|------|-----|\r\n| 扫描文件数 | 1 |\r\n| 扫描行数 | 1348 |\r\n| 风险等级 | low |\r\n| 权重 | 0.00% |\r\n| 高权限操作 | 无 |\r\n\r\n## 权限操作清单\r\n\r\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\r\n\r\n| 操作 | 文件路径 | 权限 |\r\n|------|----------|--------|\r\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\r\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\r\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\r\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\r\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\r\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\r\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\r\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\r\n\r\n## 授权方式\r\n\r\n**`silent`**（静默执行，无需用户授权）\r\n\r\n理由：\r\n- 权重 0.00%，无高权限操作\r\n- 仅读写本地 JSON 数据文件  \r\n- 无网络访问、无子进程调用、无文件删除操作  \r\n\r\n## 权重说明\r\n\r\n权重 = Σ(操作风险分值) / 100，上限 100%。\r\n\r\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nArchive v1.6.5: 10 files, 23856 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (2267b), references/data_format.md (5334b), references/faq.md (1476b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (46425b), skill-card.md (2306b), SKILL.md (10409b)\n\nFile v1.6.5:SKILL.md\n\n---\r\nname: workday-calendar\r\nauthor: wUwproject\r\nlicense: MIT\r\ntags: ['calendar', 'workday', 'holiday', 'schedule', 'excel-export']\r\nversion: 1.6.4\r\ndescription: 智能周历系统。skill-standardization 改造（R-12 数据目录路径合规修复、_meta.json data_dir 字段补充、代码中新增 DEFAULT_DATA_DIR_RAW 审计锚点）\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\r\ntrigger_negative: true\r\nexternal_data_dir: true\r\nh1_position: true\r\nmeta_field_sync: true\r\n---\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n## 触发条件\r\n\r\n当用户出现以下意图时，加载本技能：\r\n\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n\r\n---\r\n### 不触发（否定条件）\r\n\r\n本技能在以下情况**不触发**：\r\n\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n\r\n\r\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n> 更多反模式详见 `references/antipatterns.md`\r\n> 更多 FAQ 详见 `references/faq.md`\r\n\r\n\r\n### 📅 工作日计算\r\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\r\n- **补班日管理** - 单独记录调休上班日期\r\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\r\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\r\n\r\n### 📊 日程管理\r\n- **添加日程** - 指定日期、起止时间、标题、分类\r\n- **删除/更新日程** - 支持CRUD完整操作\r\n- **查询空闲时间** - 自动查找某日空闲时段\r\n- **日程列表生成** - 自动生成未来N天日程文本\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n```\r\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\r\n```\r\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\r\n\r\n### 日程管理\r\n```\r\n添加日程 → 查询/更新 → 查找空闲时间 → 生成日程列表\r\n```\r\n\r\n---\r\n\r\n## 使用指南\r\n\r\n### 1. 工作日计算\r\n\r\n#### 计算年度总工日\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n#### 生成周历\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n#### 同步数据到新年份\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n### 2. 日程管理\r\n\r\n#### 添加日程\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\r\n```\r\n\r\n#### 🛡️ 容灾备份（自动）\r\n\r\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\r\n\r\n```python\r\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\r\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\r\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\r\n```\r\n\r\n**恢复方式**：\r\n```bash\r\n# Windows: 双击 .bat 文件即可恢复\r\n# 或命令行执行\r\ncmd /c data/backups/schedule_backup_03.bat\r\n```\r\n\r\n**备份机制**：\r\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\r\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\r\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\r\n\r\n#### 列出指定日期日程\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n```\r\n\r\n#### 查询空闲时间\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\",\r\n    min_duration=30  # 最小空闲30分钟\r\n)\r\n# 返回:\r\n# [\r\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n# ]\r\n```\r\n\r\n#### 查询日期范围日程\r\n```python\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n#### 删除日程\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\n# 返回: \"已删除日程: 团队会议\"\r\n```\r\n\r\n#### 更新日程\r\n```python\r\nmsg = update_schedule_event(\r\n    event_id,\r\n    title=\"新标题\",\r\n    start_time=\"15:00\",\r\n    end_time=\"16:00\",\r\n    status=\"completed\"\r\n)\r\n```\r\n\r\n#### 生成日程列表\r\n```python\r\n# 今天及后续7天\r\nschedule_text = generate_today_schedule()\r\n\r\n# 指定日期及天数\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n---\r\n\r\n## CLI 命令\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\npython scripts/workday_calendar.py init 2026            # 初始化年度数据\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --title=新标题 --status=completed\r\npython scripts/workday_calendar.py schedule 7            # 生成7天日程列表\r\npython scripts/workday_calendar.py today                 # 今天+7天日程\r\n```\r\n\r\n### ⚠️ 重要：规则确认表\r\n\r\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\r\n\r\n```\r\npython scripts/workday_calendar.py rules 2026\r\n```\r\n\r\n该表会显示：\r\n- 🔧 周末规则配置（双休/单休/大小周）\r\n- 🎉 法定节假日列表及日期范围\r\n- 💼 补班日列表\r\n- ⚠️ 配置冲突警告\r\n- 📊 年度统计摘要\r\n\r\n请核对配置是否与官方发布的节假日安排一致。\r\n\r\n---\r\n\r\n## 数据存储位置\r\n\r\n```\r\n~/.workbuddy/skills/.standardization/workday-calendar/data/\r\n├── holiday_intervals_2026.json    # 2026年法定假日\r\n├── compensatory_days_2026.json     # 2026年补班日\r\n├── weekend_config.json             # 周末规则（全局）\r\n├── schedule_events.json            # 日程事件（全局）\r\n└── backups/                        # 容灾备份（自动）\r\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\r\n    ├── schedule_backup_02.bat\r\n    ├── ...\r\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\r\n```\r\n\r\n---\r\n\r\n## 优先级规则\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n|--------|------|------|\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **法定假日** | 强制计为休息日 |\r\n| 3 | **周末** | 按配置的周末规则 |\r\n| 4 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n添加日程时会自动检测与现有日程的时间冲突。\r\n\r\n---\r\n\r\n## 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n用户可以配置自动化任务：\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n---\r\n\r\n## 日程数据格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 分类选项\r\n- 工作\r\n- 个人\r\n- 会议\r\n- 其他\r\n\r\n### 状态选项\r\n- pending（待完成）\r\n- completed（已完成）\r\n- cancelled（已取消）\r\n\r\n---\r\n\r\n## 相关文件\r\n\r\n- `scripts/workday_calendar.py` - 核心计算逻辑\r\n- `references/data_format.md` - 数据格式详细说明\r\n- `data/` - JSON数据存储目录\n\nFile v1.6.5:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.6.5\",\n  \"publishedAt\": 1780174576651\n}\n\nFile v1.6.5:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 200 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 修改日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v1.6.5:references/changelog.md\n\n## 1.6.5 (2026-05-31)\r\n\r\n### 修复\r\n- **data_dir 格式修正**: frontmatter 的 data_dir 恢复为 ../ 相对路径格式（此前错误同步为 skills/ 格式）\r\n\r\n---\r\n## 1.6.4 (2026-05-31)\r\n\r\n### 修复\r\n- audit --fix 自动修正: meta_field_sync\r\n\r\n---\r\n\r\n## 1.6.3 (2026-05-31)\r\n\r\n### 修复\r\n- **H1 位置修复**: 将 H1 从第 38 行移至 frontmatter 后首行（原距 frontmatter 闭合后有 22 行空白）\r\n\r\n---\r\n## 1.6.2 (2026-05-31)\r\n\r\n### 修复\r\n- **R-04**: description 移除版本号\r\n- **R-10**: changelog 版本号去 v 前缀\r\n\r\n---\r\n\r\n## 1.6.1 (2026-05-30)\r\n\r\n### 修复\r\n- audit --fix 自动修正\r\n\r\n---\r\n\r\n\r\n## 1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## 1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## 1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## 1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v1.6.5:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.6.5:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\n\nFile v1.6.5:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.6.5:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nFile v1.6.5:skill-card.md\n\n## Description: <br>\nWorkday Calendar manages statutory holiday ranges, compensatory workdays, configurable weekend rules, annual workday totals, weekly calendars, and local personal schedule events. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ldxs001](https://clawhub.ai/user/ldxs001) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nEmployees, external users, and agents use this skill to maintain a local workday calendar, calculate annual working days, generate weekly calendars, and manage schedule events and free-time queries. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill stores and modifies local JSON schedule data, including personal or business calendar entries. <br>\nMitigation: Use it only for schedules you are comfortable retaining locally, and review the standardized data directory and backup copies as part of normal maintenance. <br>\nRisk: Schedule operations can create executable Windows .bat restore backups. <br>\nMitigation: Inspect generated .bat backups before running them, keep them local, and remove unneeded backups according to local data-retention practices. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ldxs001/workday-calendar) <br>\n- [Data format reference](references/data_format.md) <br>\n- [Permission reference](references/permission.md) <br>\n- [FAQ](references/faq.md) <br>\n- [Changelog](references/changelog.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with Python examples, shell commands, and JSON data structures.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reads and writes local JSON schedule data; schedule additions can create local Windows .bat restore backups.] <br>\n\n## Skill Version(s): <br>\n1.6.5 (source: server release, _meta.json, changelog; frontmatter says 1.6.4) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.6.3: 10 files, 23651 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (2002b), references/data_format.md (5334b), references/faq.md (1476b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (46425b), skill-card.md (2215b), SKILL.md (10326b)\n\nFile v1.6.3:SKILL.md\n\n---\r\nname: workday-calendar\r\nauthor: wUwproject\r\nlicense: MIT\r\ntags: []\r\nversion: 1.6.3\r\ndescription: 智能周历系统。skill-standardization 改造（R-12 数据目录路径合规修复、_meta.json data_dir 字段补充、代码中新增 DEFAULT_DATA_DIR_RAW 审计锚点）\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\r\ntrigger_negative: true\r\nexternal_data_dir: true\r\nh1_position: true\r\n---\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n## 触发条件\r\n\r\n当用户出现以下意图时，加载本技能：\r\n\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n\r\n---\r\n### 不触发（否定条件）\r\n\r\n本技能在以下情况**不触发**：\r\n\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n\r\n\r\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n> 更多反模式详见 `references/antipatterns.md`\r\n> 更多 FAQ 详见 `references/faq.md`\r\n\r\n\r\n### 📅 工作日计算\r\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\r\n- **补班日管理** - 单独记录调休上班日期\r\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\r\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\r\n\r\n### 📊 日程管理\r\n- **添加日程** - 指定日期、起止时间、标题、分类\r\n- **删除/更新日程** - 支持CRUD完整操作\r\n- **查询空闲时间** - 自动查找某日空闲时段\r\n- **日程列表生成** - 自动生成未来N天日程文本\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n```\r\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\r\n```\r\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\r\n\r\n### 日程管理\r\n```\r\n添加日程 → 查询/更新 → 查找空闲时间 → 生成日程列表\r\n```\r\n\r\n---\r\n\r\n## 使用指南\r\n\r\n### 1. 工作日计算\r\n\r\n#### 计算年度总工日\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n#### 生成周历\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n#### 同步数据到新年份\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n### 2. 日程管理\r\n\r\n#### 添加日程\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\r\n```\r\n\r\n#### 🛡️ 容灾备份（自动）\r\n\r\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\r\n\r\n```python\r\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\r\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\r\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\r\n```\r\n\r\n**恢复方式**：\r\n```bash\r\n# Windows: 双击 .bat 文件即可恢复\r\n# 或命令行执行\r\ncmd /c data/backups/schedule_backup_03.bat\r\n```\r\n\r\n**备份机制**：\r\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\r\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\r\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\r\n\r\n#### 列出指定日期日程\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n```\r\n\r\n#### 查询空闲时间\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\",\r\n    min_duration=30  # 最小空闲30分钟\r\n)\r\n# 返回:\r\n# [\r\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n# ]\r\n```\r\n\r\n#### 查询日期范围日程\r\n```python\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n#### 删除日程\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\n# 返回: \"已删除日程: 团队会议\"\r\n```\r\n\r\n#### 更新日程\r\n```python\r\nmsg = update_schedule_event(\r\n    event_id,\r\n    title=\"新标题\",\r\n    start_time=\"15:00\",\r\n    end_time=\"16:00\",\r\n    status=\"completed\"\r\n)\r\n```\r\n\r\n#### 生成日程列表\r\n```python\r\n# 今天及后续7天\r\nschedule_text = generate_today_schedule()\r\n\r\n# 指定日期及天数\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n---\r\n\r\n## CLI 命令\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\npython scripts/workday_calendar.py init 2026            # 初始化年度数据\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --title=新标题 --status=completed\r\npython scripts/workday_calendar.py schedule 7            # 生成7天日程列表\r\npython scripts/workday_calendar.py today                 # 今天+7天日程\r\n```\r\n\r\n### ⚠️ 重要：规则确认表\r\n\r\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\r\n\r\n```\r\npython scripts/workday_calendar.py rules 2026\r\n```\r\n\r\n该表会显示：\r\n- 🔧 周末规则配置（双休/单休/大小周）\r\n- 🎉 法定节假日列表及日期范围\r\n- 💼 补班日列表\r\n- ⚠️ 配置冲突警告\r\n- 📊 年度统计摘要\r\n\r\n请核对配置是否与官方发布的节假日安排一致。\r\n\r\n---\r\n\r\n## 数据存储位置\r\n\r\n```\r\n~/.workbuddy/skills/.standardization/workday-calendar/data/\r\n├── holiday_intervals_2026.json    # 2026年法定假日\r\n├── compensatory_days_2026.json     # 2026年补班日\r\n├── weekend_config.json             # 周末规则（全局）\r\n├── schedule_events.json            # 日程事件（全局）\r\n└── backups/                        # 容灾备份（自动）\r\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\r\n    ├── schedule_backup_02.bat\r\n    ├── ...\r\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\r\n```\r\n\r\n---\r\n\r\n## 优先级规则\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n|--------|------|------|\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **法定假日** | 强制计为休息日 |\r\n| 3 | **周末** | 按配置的周末规则 |\r\n| 4 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n添加日程时会自动检测与现有日程的时间冲突。\r\n\r\n---\r\n\r\n## 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n用户可以配置自动化任务：\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n---\r\n\r\n## 日程数据格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 分类选项\r\n- 工作\r\n- 个人\r\n- 会议\r\n- 其他\r\n\r\n### 状态选项\r\n- pending（待完成）\r\n- completed（已完成）\r\n- cancelled（已取消）\r\n\r\n---\r\n\r\n## 相关文件\r\n\r\n- `scripts/workday_calendar.py` - 核心计算逻辑\r\n- `references/data_format.md` - 数据格式详细说明\r\n- `data/` - JSON数据存储目录\n\nFile v1.6.3:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.6.3\",\n  \"publishedAt\": 1780171778870\n}\n\nFile v1.6.3:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 200 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 修改日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v1.6.3:references/changelog.md\n\n## 1.6.3 (2026-05-31)\r\n\r\n### 修复\r\n- **H1 位置修复**: 将 H1 从第 38 行移至 frontmatter 后首行（原距 frontmatter 闭合后有 22 行空白）\r\n\r\n---\r\n## 1.6.2 (2026-05-31)\r\n\r\n### 修复\r\n- **R-04**: description 移除版本号\r\n- **R-10**: changelog 版本号去 v 前缀\r\n\r\n---\r\n\r\n## 1.6.1 (2026-05-30)\r\n\r\n### 修复\r\n- audit --fix 自动修正\r\n\r\n---\r\n\r\n\r\n## 1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## 1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## 1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## 1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v1.6.3:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.6.3:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\n\nFile v1.6.3:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.6.3:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nFile v1.6.3:skill-card.md\n\n## Description: <br>\nWorkday Calendar helps agents manage statutory holidays, compensatory workdays, configurable weekend rules, annual workday calculations, weekly calendars, and personal schedule events. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ldxs001](https://clawhub.ai/user/ldxs001) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nEmployees, external users, and agents use this skill to calculate workdays and holidays, generate weekly calendars, find available time, and manage local schedule events. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can silently read and update its own local schedule JSON files. <br>\nMitigation: Review schedule changes before and after use, and prefer a release that prompts before create, update, or delete actions. <br>\nRisk: The skill can create Windows .bat recovery files containing schedule data. <br>\nMitigation: Inspect backup files before execution and prefer non-executable JSON backups when available. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ldxs001/workday-calendar) <br>\n- [Changelog](references/changelog.md) <br>\n- [Data format](references/data_format.md) <br>\n- [Permission report](references/permission_report.json) <br>\n- [Permission notes](references/permission.md) <br>\n- [FAQ](references/faq.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, JSON] <br>\n**Output Format:** [Markdown guidance with Python and shell command examples, plus JSON calendar and schedule data.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Uses local calendar and schedule JSON files, and may create Windows .bat backup files for schedule recovery.] <br>\n\n## Skill Version(s): <br>\n1.6.3 (source: frontmatter and changelog, released 2026-05-31) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.6.2: 10 files, 23769 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (1835b), references/data_format.md (5334b), references/faq.md (1476b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (46425b), skill-card.md (2666b), SKILL.md (10305b)\n\nFile v1.6.2:SKILL.md\n\n---\r\nname: workday-calendar\r\nauthor: wUwproject\r\nlicense: MIT\r\ntags: []\r\nversion: 1.6.2\r\ndescription: 智能周历系统。skill-standardization 改造（R-12 数据目录路径合规修复、_meta.json data_dir 字段补充、代码中新增 DEFAULT_DATA_DIR_RAW 审计锚点）\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\r\ntrigger_negative: true\r\nexternal_data_dir: true\r\n---\r\n## 触发条件\r\n\r\n当用户出现以下意图时，加载本技能：\r\n\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n\r\n---\r\n### 不触发（否定条件）\r\n\r\n本技能在以下情况**不触发**：\r\n\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n> 更多反模式详见 `references/antipatterns.md`\r\n> 更多 FAQ 详见 `references/faq.md`\r\n\r\n\r\n### 📅 工作日计算\r\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\r\n- **补班日管理** - 单独记录调休上班日期\r\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\r\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\r\n\r\n### 📊 日程管理\r\n- **添加日程** - 指定日期、起止时间、标题、分类\r\n- **删除/更新日程** - 支持CRUD完整操作\r\n- **查询空闲时间** - 自动查找某日空闲时段\r\n- **日程列表生成** - 自动生成未来N天日程文本\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n```\r\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\r\n```\r\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\r\n\r\n### 日程管理\r\n```\r\n添加日程 → 查询/更新 → 查找空闲时间 → 生成日程列表\r\n```\r\n\r\n---\r\n\r\n## 使用指南\r\n\r\n### 1. 工作日计算\r\n\r\n#### 计算年度总工日\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n#### 生成周历\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n#### 同步数据到新年份\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n### 2. 日程管理\r\n\r\n#### 添加日程\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\r\n```\r\n\r\n#### 🛡️ 容灾备份（自动）\r\n\r\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\r\n\r\n```python\r\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\r\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\r\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\r\n```\r\n\r\n**恢复方式**：\r\n```bash\r\n# Windows: 双击 .bat 文件即可恢复\r\n# 或命令行执行\r\ncmd /c data/backups/schedule_backup_03.bat\r\n```\r\n\r\n**备份机制**：\r\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\r\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\r\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\r\n\r\n#### 列出指定日期日程\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n```\r\n\r\n#### 查询空闲时间\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\",\r\n    min_duration=30  # 最小空闲30分钟\r\n)\r\n# 返回:\r\n# [\r\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n# ]\r\n```\r\n\r\n#### 查询日期范围日程\r\n```python\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n#### 删除日程\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\n# 返回: \"已删除日程: 团队会议\"\r\n```\r\n\r\n#### 更新日程\r\n```python\r\nmsg = update_schedule_event(\r\n    event_id,\r\n    title=\"新标题\",\r\n    start_time=\"15:00\",\r\n    end_time=\"16:00\",\r\n    status=\"completed\"\r\n)\r\n```\r\n\r\n#### 生成日程列表\r\n```python\r\n# 今天及后续7天\r\nschedule_text = generate_today_schedule()\r\n\r\n# 指定日期及天数\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n---\r\n\r\n## CLI 命令\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\npython scripts/workday_calendar.py init 2026            # 初始化年度数据\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --title=新标题 --status=completed\r\npython scripts/workday_calendar.py schedule 7            # 生成7天日程列表\r\npython scripts/workday_calendar.py today                 # 今天+7天日程\r\n```\r\n\r\n### ⚠️ 重要：规则确认表\r\n\r\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\r\n\r\n```\r\npython scripts/workday_calendar.py rules 2026\r\n```\r\n\r\n该表会显示：\r\n- 🔧 周末规则配置（双休/单休/大小周）\r\n- 🎉 法定节假日列表及日期范围\r\n- 💼 补班日列表\r\n- ⚠️ 配置冲突警告\r\n- 📊 年度统计摘要\r\n\r\n请核对配置是否与官方发布的节假日安排一致。\r\n\r\n---\r\n\r\n## 数据存储位置\r\n\r\n```\r\n~/.workbuddy/skills/.standardization/workday-calendar/data/\r\n├── holiday_intervals_2026.json    # 2026年法定假日\r\n├── compensatory_days_2026.json     # 2026年补班日\r\n├── weekend_config.json             # 周末规则（全局）\r\n├── schedule_events.json            # 日程事件（全局）\r\n└── backups/                        # 容灾备份（自动）\r\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\r\n    ├── schedule_backup_02.bat\r\n    ├── ...\r\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\r\n```\r\n\r\n---\r\n\r\n## 优先级规则\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n|--------|------|------|\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **法定假日** | 强制计为休息日 |\r\n| 3 | **周末** | 按配置的周末规则 |\r\n| 4 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n添加日程时会自动检测与现有日程的时间冲突。\r\n\r\n---\r\n\r\n## 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n用户可以配置自动化任务：\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n---\r\n\r\n## 日程数据格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 分类选项\r\n- 工作\r\n- 个人\r\n- 会议\r\n- 其他\r\n\r\n### 状态选项\r\n- pending（待完成）\r\n- completed（已完成）\r\n- cancelled（已取消）\r\n\r\n---\r\n\r\n## 相关文件\r\n\r\n- `scripts/workday_calendar.py` - 核心计算逻辑\r\n- `references/data_format.md` - 数据格式详细说明\r\n- `data/` - JSON数据存储目录\n\nFile v1.6.2:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.6.2\",\n  \"publishedAt\": 1780170469426\n}\n\nFile v1.6.2:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 200 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 修改日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v1.6.2:references/changelog.md\n\n## 1.6.2 (2026-05-31)\r\n\r\n### 修复\r\n- **R-04**: description 移除版本号\r\n- **R-10**: changelog 版本号去 v 前缀\r\n\r\n---\r\n\r\n## 1.6.1 (2026-05-30)\r\n\r\n### 修复\r\n- audit --fix 自动修正\r\n\r\n---\r\n\r\n\r\n## 1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## 1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## 1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## 1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v1.6.2:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.6.2:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\n\nFile v1.6.2:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.6.2:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nFile v1.6.2:skill-card.md\n\n## Description: <br>\nManages local holiday, compensatory workday, weekly calendar, and personal schedule data for workday calculations and schedule planning. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ldxs001](https://clawhub.ai/user/ldxs001) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nEmployees, developers, and agents use this skill to maintain local holiday and compensatory-workday data, calculate annual workdays, generate weekly calendars, and manage personal schedule events. It is intended for local calendar and schedule workflows rather than integration with external calendar services. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill automatically creates runnable Windows .bat recovery files that contain schedule data and can overwrite schedule_events.json when executed. <br>\nMitigation: Review generated backup files before running them, run recovery only when the embedded schedule data is trusted, and prefer plain JSON backups restored through the Python tool where possible. <br>\nRisk: Incorrect holiday, compensatory workday, or weekend-rule data can produce misleading workday counts and calendar output. <br>\nMitigation: Use the rules command after initialization or yearly updates to review holiday intervals, compensatory days, weekend rules, conflict warnings, and yearly summary data before relying on calculations. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ldxs001/workday-calendar) <br>\n- [SKILL.md](artifact/SKILL.md) <br>\n- [Data format reference](artifact/references/data_format.md) <br>\n- [FAQ](artifact/references/faq.md) <br>\n- [Permission report](artifact/references/permission.md) <br>\n- [Changelog](artifact/references/changelog.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, JSON data] <br>\n**Output Format:** [Markdown guidance with Python examples, shell commands, and JSON data structures.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Uses local JSON data files and may create rotating Windows .bat recovery files containing schedule data.] <br>\n\n## Skill Version(s): <br>\n1.6.2 (source: server release metadata, SKILL.md frontmatter, _meta.json, changelog released 2026-05-31) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.6.0: 10 files, 23557 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (1633b), references/data_format.md (5334b), references/faq.md (1476b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (46425b), skill-card.md (2308b), SKILL.md (10366b)\n\nFile v1.6.0:SKILL.md\n\n---\r\nname: workday-calendar\r\nversion: 1.6.0\r\ndescription: 智能周历系统 v1.6.0 - skill-standardization 改造（R-12 数据目录路径合规修复、_meta.json data_dir 字段补充、代码中新增 DEFAULT_DATA_DIR_RAW 审计锚点）\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\r\ntrigger_negative: true\r\nfaq_unparsable: reformat\r\nantipattern_detail: add_detail\r\nexternal_data_dir: true\r\n---\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## 触发条件\r\n\r\n当用户出现以下意图时，加载本技能：\r\n\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n\r\n---\r\n### 不触发（否定条件）\r\n\r\n本技能在以下情况**不触发**：\r\n\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n> 更多反模式详见 `references/antipatterns.md`\r\n> 更多 FAQ 详见 `references/faq.md`\r\n\r\n\r\n### 📅 工作日计算\r\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\r\n- **补班日管理** - 单独记录调休上班日期\r\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\r\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\r\n\r\n### 📊 日程管理\r\n- **添加日程** - 指定日期、起止时间、标题、分类\r\n- **删除/更新日程** - 支持CRUD完整操作\r\n- **查询空闲时间** - 自动查找某日空闲时段\r\n- **日程列表生成** - 自动生成未来N天日程文本\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n```\r\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\r\n```\r\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\r\n\r\n### 日程管理\r\n```\r\n添加日程 → 查询/更新 → 查找空闲时间 → 生成日程列表\r\n```\r\n\r\n---\r\n\r\n## 使用指南\r\n\r\n### 1. 工作日计算\r\n\r\n#### 计算年度总工日\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n#### 生成周历\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n#### 同步数据到新年份\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n### 2. 日程管理\r\n\r\n#### 添加日程\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\r\n```\r\n\r\n#### 🛡️ 容灾备份（自动）\r\n\r\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\r\n\r\n```python\r\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\r\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\r\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\r\n```\r\n\r\n**恢复方式**：\r\n```bash\r\n# Windows: 双击 .bat 文件即可恢复\r\n# 或命令行执行\r\ncmd /c data/backups/schedule_backup_03.bat\r\n```\r\n\r\n**备份机制**：\r\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\r\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\r\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\r\n\r\n#### 列出指定日期日程\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n```\r\n\r\n#### 查询空闲时间\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\",\r\n    min_duration=30  # 最小空闲30分钟\r\n)\r\n# 返回:\r\n# [\r\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n# ]\r\n```\r\n\r\n#### 查询日期范围日程\r\n```python\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n#### 删除日程\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\n# 返回: \"已删除日程: 团队会议\"\r\n```\r\n\r\n#### 更新日程\r\n```python\r\nmsg = update_schedule_event(\r\n    event_id,\r\n    title=\"新标题\",\r\n    start_time=\"15:00\",\r\n    end_time=\"16:00\",\r\n    status=\"completed\"\r\n)\r\n```\r\n\r\n#### 生成日程列表\r\n```python\r\n# 今天及后续7天\r\nschedule_text = generate_today_schedule()\r\n\r\n# 指定日期及天数\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n---\r\n\r\n## CLI 命令\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\npython scripts/workday_calendar.py init 2026            # 初始化年度数据\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --title=新标题 --status=completed\r\npython scripts/workday_calendar.py schedule 7            # 生成7天日程列表\r\npython scripts/workday_calendar.py today                 # 今天+7天日程\r\n```\r\n\r\n### ⚠️ 重要：规则确认表\r\n\r\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\r\n\r\n```\r\npython scripts/workday_calendar.py rules 2026\r\n```\r\n\r\n该表会显示：\r\n- 🔧 周末规则配置（双休/单休/大小周）\r\n- 🎉 法定节假日列表及日期范围\r\n- 💼 补班日列表\r\n- ⚠️ 配置冲突警告\r\n- 📊 年度统计摘要\r\n\r\n请核对配置是否与官方发布的节假日安排一致。\r\n\r\n---\r\n\r\n## 数据存储位置\r\n\r\n```\r\n~/.workbuddy/skills/.standardization/workday-calendar/data/\r\n├── holiday_intervals_2026.json    # 2026年法定假日\r\n├── compensatory_days_2026.json     # 2026年补班日\r\n├── weekend_config.json             # 周末规则（全局）\r\n├── schedule_events.json            # 日程事件（全局）\r\n└── backups/                        # 容灾备份（自动）\r\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\r\n    ├── schedule_backup_02.bat\r\n    ├── ...\r\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\r\n```\r\n\r\n---\r\n\r\n## 优先级规则\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n|--------|------|------|\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **法定假日** | 强制计为休息日 |\r\n| 3 | **周末** | 按配置的周末规则 |\r\n| 4 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n添加日程时会自动检测与现有日程的时间冲突。\r\n\r\n---\r\n\r\n## 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n用户可以配置自动化任务：\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n---\r\n\r\n## 日程数据格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 分类选项\r\n- 工作\r\n- 个人\r\n- 会议\r\n- 其他\r\n\r\n### 状态选项\r\n- pending（待完成）\r\n- completed（已完成）\r\n- cancelled（已取消）\r\n\r\n---\r\n\r\n## 相关文件\r\n\r\n- `scripts/workday_calendar.py` - 核心计算逻辑\r\n- `references/data_format.md` - 数据格式详细说明\r\n- `data/` - JSON数据存储目录\n\nFile v1.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.6.0\",\n  \"publishedAt\": 1780113277345\n}\n\nFile v1.6.0:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 200 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 修改日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v1.6.0:references/changelog.md\n\n## v1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## v1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## v1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## v1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v1.6.0:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.6.0:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\n\nFile v1.6.0:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.6.0:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nFile v1.6.0:skill-card.md\n\n## Description: <br>\nWorkday Calendar helps agents manage statutory holidays, compensatory workdays, configurable weekend rules, annual workday calculations, weekly calendars, and local schedule events. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ldxs001](https://clawhub.ai/user/ldxs001) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nUsers and agents use this skill to calculate workdays and holidays, generate weekly calendar views, and manage local personal schedule events through the bundled Python CLI and JSON data files. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill automatically creates executable Windows .bat rollback files that can contain schedule data. <br>\nMitigation: Treat backup scripts as sensitive local files, do not share or run them casually, and prefer JSON-only backups with explicit restore commands when possible. <br>\nRisk: Incorrect holiday, compensatory-day, or weekend configuration can produce inaccurate workday calculations. <br>\nMitigation: Run the rules command after initialization or data import and compare the rule summary against the intended holiday schedule before relying on totals. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/ldxs001/workday-calendar) <br>\n- [Data format reference](references/data_format.md) <br>\n- [Permission reference](references/permission.md) <br>\n- [FAQ](references/faq.md) <br>\n- [Changelog](references/changelog.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration] <br>\n**Output Format:** [Markdown guidance with Python examples, shell commands, and JSON calendar or schedule data] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reads and writes local JSON calendar data and can create Windows .bat schedule backup files.] <br>\n\n## Skill Version(s): <br>\n1.6.0 (source: frontmatter, changelog, release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.5.0: 10 files, 23254 bytes\n\nFiles: _meta.json (135b), references/antipatterns.md (1435b), references/changelog.md (1081b), references/data_format.md (5334b), references/faq.md (1476b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (46184b), skill-card.md (2596b), SKILL.md (10287b)\n\nFile v1.5.0:SKILL.md\n\n---\r\nname: workday-calendar\r\nversion: 1.5.0\r\ndescription: 智能周历系统 v1.5.0 - skill-standardization 改造（结构规范化、R-11/R-12 合规修复、trigger 字段补充）\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\nwriting_standards: fix_terms\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\r\ntrigger_negative: true\r\nfaq_unparsable: reformat\r\nantipattern_detail: add_detail\r\n---\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## 触发条件\r\n\r\n当用户出现以下意图时，加载本技能：\r\n\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n\r\n---\r\n### 不触发（否定条件）\r\n\r\n本技能在以下情况**不触发**：\r\n\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n> 更多反模式详见 `references/antipatterns.md`\r\n> 更多 FAQ 详见 `references/faq.md`\r\n\r\n\r\n### 📅 工作日计算\r\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\r\n- **补班日管理** - 单独记录调休上班日期\r\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\r\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\r\n\r\n### 📊 日程管理\r\n- **添加日程** - 指定日期、起止时间、标题、分类\r\n- **删除/更新日程** - 支持CRUD完整操作\r\n- **查询空闲时间** - 自动查找某日空闲时段\r\n- **日程列表生成** - 自动生成未来N天日程文本\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n```\r\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\r\n```\r\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\r\n\r\n### 日程管理\r\n```\r\n添加日程 → 查询/更新 → 查找空闲时间 → 生成日程列表\r\n```\r\n\r\n---\r\n\r\n## 使用指南\r\n\r\n### 1. 工作日计算\r\n\r\n#### 计算年度总工日\r\n```python\r\nsummary = calculate_total_workdays(2026)\r\n# 返回:\r\n# {\r\n#   \"year\": 2026,\r\n#   \"total_workdays\": 247,\r\n#   \"total_holidays\": 118,\r\n#   \"holiday_count\": 28,\r\n#   \"compensatory_count\": 5\r\n# }\r\n```\r\n\r\n#### 生成周历\r\n```python\r\ncalendar = generate_weekly_calendar(2026)\r\nfor week in calendar:\r\n    print(f\"第{week['week_number']}周\")\r\n    for day in week['days']:\r\n        if day['date']:\r\n            print(f\"  {day['date']}: {day['day_type']}\")\r\n```\r\n\r\n#### 同步数据到新年份\r\n```python\r\nresult = sync_year(2026, 2025)\r\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\r\n```\r\n\r\n### 2. 日程管理\r\n\r\n#### 添加日程\r\n```python\r\nevent, msg = add_schedule_event(\r\n    title=\"团队会议\",\r\n    date=\"2026-05-20\",\r\n    start_time=\"14:00\",\r\n    end_time=\"15:00\",\r\n    description=\"项目进度讨论\",\r\n    category=\"会议\"\r\n)\r\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\r\n```\r\n\r\n#### 🛡️ 容灾备份（自动）\r\n\r\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\r\n\r\n```python\r\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\r\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\r\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\r\n```\r\n\r\n**恢复方式**：\r\n```bash\r\n# Windows: 双击 .bat 文件即可恢复\r\n# 或命令行执行\r\ncmd /c data/backups/schedule_backup_03.bat\r\n```\r\n\r\n**备份机制**：\r\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\r\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\r\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\r\n\r\n#### 列出指定日期日程\r\n```python\r\nevents = get_schedule_by_date(\"2026-05-20\")\r\nfor e in events:\r\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\r\n```\r\n\r\n#### 查询空闲时间\r\n```python\r\nslots = find_free_slots(\r\n    date=\"2026-05-20\",\r\n    start_search=\"09:00\",\r\n    end_search=\"18:00\",\r\n    min_duration=30  # 最小空闲30分钟\r\n)\r\n# 返回:\r\n# [\r\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\r\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\r\n# ]\r\n```\r\n\r\n#### 查询日期范围日程\r\n```python\r\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\r\n```\r\n\r\n#### 删除日程\r\n```python\r\nmsg = delete_schedule_event(event_id)\r\n# 返回: \"已删除日程: 团队会议\"\r\n```\r\n\r\n#### 更新日程\r\n```python\r\nmsg = update_schedule_event(\r\n    event_id,\r\n    title=\"新标题\",\r\n    start_time=\"15:00\",\r\n    end_time=\"16:00\",\r\n    status=\"completed\"\r\n)\r\n```\r\n\r\n#### 生成日程列表\r\n```python\r\n# 今天及后续7天\r\nschedule_text = generate_today_schedule()\r\n\r\n# 指定日期及天数\r\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\r\n```\r\n\r\n---\r\n\r\n## CLI 命令\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\npython scripts/workday_calendar.py init 2026            # 初始化年度数据\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --title=新标题 --status=completed\r\npython scripts/workday_calendar.py schedule 7            # 生成7天日程列表\r\npython scripts/workday_calendar.py today                 # 今天+7天日程\r\n```\r\n\r\n### ⚠️ 重要：规则确认表\r\n\r\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\r\n\r\n```\r\npython scripts/workday_calendar.py rules 2026\r\n```\r\n\r\n该表会显示：\r\n- 🔧 周末规则配置（双休/单休/大小周）\r\n- 🎉 法定节假日列表及日期范围\r\n- 💼 补班日列表\r\n- ⚠️ 配置冲突警告\r\n- 📊 年度统计摘要\r\n\r\n请核对配置是否与官方发布的节假日安排一致。\r\n\r\n---\r\n\r\n## 数据存储位置\r\n\r\n```\r\n~/.workbuddy/skills/workday-calendar/data/\r\n├── holiday_intervals_2026.json    # 2026年法定假日\r\n├── compensatory_days_2026.json     # 2026年补班日\r\n├── weekend_config.json             # 周末规则（全局）\r\n├── schedule_events.json            # 日程事件（全局）\r\n└── backups/                        # 容灾备份（自动）\r\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\r\n    ├── schedule_backup_02.bat\r\n    ├── ...\r\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\r\n```\r\n\r\n---\r\n\r\n## 优先级规则\r\n\r\n### 日期类型优先级\r\n| 优先级 | 类型 | 规则 |\r\n|--------|------|------|\r\n| 1 | **补班日** | 强制计为工作日 |\r\n| 2 | **法定假日** | 强制计为休息日 |\r\n| 3 | **周末** | 按配置的周末规则 |\r\n| 4 | **工作日** | 其他日期 |\r\n\r\n### 日程冲突检测\r\n添加日程时会自动检测与现有日程的时间冲突。\r\n\r\n---\r\n\r\n## 典型场景\r\n\r\n### 场景1：查工作日\r\n```\r\n用户：2026年有多少个工作日？\r\nAI：调用 calculate_total_workdays(2026)\r\n```\r\n\r\n### 场景2：安排会议找空闲时间\r\n```\r\n用户：5月20日下午有什么空闲时间？\r\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\r\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\r\n```\r\n\r\n### 场景3：添加新日程\r\n```\r\n用户：明天下午2点到3点我要开会\r\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\r\n```\r\n\r\n### 场景4：查看今天和未来几天的安排\r\n```\r\n用户：帮我看看这周有什么安排\r\nAI：调用 generate_today_schedule()\r\n```\r\n\r\n### 场景5：删除或更新日程\r\n```\r\n用户：取消明天的会议\r\nAI：先 list 找到ID，然后 delete <id>\r\n\r\n用户：把下午的会议改到3点\r\nAI：update <id> --start=15:00 --end=16:00\r\n```\r\n\r\n### 场景6：每天定时生成日程列表\r\n用户可以配置自动化任务：\r\n```\r\n命令：python scripts/workday_calendar.py today\r\n时间：每天早上 08:00\r\n```\r\n\r\n---\r\n\r\n## 日程数据格式\r\n\r\n```json\r\n{\r\n  \"events\": [\r\n    {\r\n      \"id\": \"d008b885\",\r\n      \"title\": \"团队会议\",\r\n      \"date\": \"2026-05-20\",\r\n      \"start_time\": \"14:00\",\r\n      \"end_time\": \"15:00\",\r\n      \"description\": \"项目进度讨论\",\r\n      \"category\": \"会议\",\r\n      \"status\": \"pending\",\r\n      \"created_at\": \"2026-05-19T22:00:00\",\r\n      \"updated_at\": \"2026-05-19T22:00:00\"\r\n    }\r\n  ],\r\n  \"updated_at\": \"2026-05-19T22:00:00\"\r\n}\r\n```\r\n\r\n### 分类选项\r\n- 工作\r\n- 个人\r\n- 会议\r\n- 其他\r\n\r\n### 状态选项\r\n- pending（待完成）\r\n- completed（已完成）\r\n- cancelled（已取消）\r\n\r\n---\r\n\r\n## 相关文件\r\n\r\n- `scripts/workday_calendar.py` - 核心计算逻辑\r\n- `references/data_format.md` - 数据格式详细说明\r\n- `data/` - JSON数据存储目录\n\nFile v1.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.5.0\",\n  \"publishedAt\": 1779897132456\n}\n\nFile v1.5.0:references/antipatterns.md\n\n# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 200 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 修改日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。\n\nFile v1.5.0:references/changelog.md\n\n## v1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## v1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（移除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## v1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---\n\nFile v1.5.0:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.5.0:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\n\nFile v1.5.0:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.5.0:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nFile v1.5.0:skill-card.md\n\n## Description: <br>\nWorkday Calendar helps agents manage statutory holidays, compensatory workdays, configurable weekend rules, annual workday calculations, weekly calendars, and local personal schedules. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[ldxs001](https://clawhub.ai/user/ldxs001) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nAgents and users use this skill to calculate workdays and holidays, generate weekly calendar data, and manage local schedule events with conflict and free-time queries. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill stores local calendar and schedule data on disk, including personal event details. <br>\nMitigation: Use it only in environments where local persistence of schedule data is acceptable, and avoid placing sensitive personal or business details in event text. <br>\nRisk: The schedule backup mechanism creates executable Windows .bat recovery files that can overwrite the schedule data file when run. <br>\nMitigation: Inspect and trust any generated backup script before running it; prefer restoring through the Python tool or non-executable JSON backups where possible. <br>\nRisk: Permission notes report low risk while server security evidence says the executable backup behavior is understated. <br>\nMitigation: Treat the server security verdict as authoritative during review and document the executable backup behavior before deployment. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/ldxs001/workday-calendar) <br>\n- [Data format reference](references/data_format.md) <br>\n- [FAQ](references/faq.md) <br>\n- [Permission notes](references/permission.md) <br>\n- [Changelog](references/changelog.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with Python examples, shell commands, and JSON calendar or schedule data] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces local calendar, workday, holiday, and schedule-management guidance for agent use.] <br>\n\n## Skill Version(s): <br>\n1.5.0 (source: frontmatter, _meta.json, changelog, server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.3.0: 6 files, 18335 bytes\n\nFiles: _meta.json (135b), references/data_format.md (5334b), references/permission_report.json (514b), references/permission.md (1722b), scripts/workday_calendar.py (44067b), SKILL.md (8958b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: workday-calendar\nversion: 1.3.0\ndescription: \"智能周历系统 - 国家法定假日区间管理、年度工作日计算、周历生成、日程管理。数据路径统一到 skills/.standardization/<skill>/data/。\"\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\n---\n## 触发条件\n\n当用户出现以下意图时，加载本技能：\n\n- 查询或管理**法定假日**、**补班日**、**调休**安排\n- 计算**年度工作日**、**工作日统计**\n- 生成**周历**、**日程安排**\n- 查询某天的**空闲时间**、**日程安排**\n- 添加、修改、删除**日程事件**\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\n\n---\n\n# 智能周历系统 (Workday Calendar)\n\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\n\n## 核心能力\n\n### 📅 工作日计算\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\n- **补班日管理** - 单独记录调休上班日期\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\n\n### 📊 日程管理\n- **添加日程** - 指定日期、起止时间、标题、分类\n- **删除/修改日程** - 支持CRUD完整操作\n- **查询空闲时间** - 自动查找某日空闲时段\n- **日程列表生成** - 自动生成未来N天日程文本\n\n## 工作流程\n\n### 首次使用 / 新年份\n```\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\n```\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\n\n### 日程管理\n```\n添加日程 → 查询/修改 → 查找空闲时间 → 生成日程列表\n```\n\n---\n\n## 使用指南\n\n### 1. 工作日计算\n\n#### 计算年度总工日\n```python\nsummary = calculate_total_workdays(2026)\n# 返回:\n# {\n#   \"year\": 2026,\n#   \"total_workdays\": 247,\n#   \"total_holidays\": 118,\n#   \"holiday_count\": 28,\n#   \"compensatory_count\": 5\n# }\n```\n\n#### 生成周历\n```python\ncalendar = generate_weekly_calendar(2026)\nfor week in calendar:\n    print(f\"第{week['week_number']}周\")\n    for day in week['days']:\n        if day['date']:\n            print(f\"  {day['date']}: {day['day_type']}\")\n```\n\n#### 同步数据到新年份\n```python\nresult = sync_year(2026, 2025)\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\n```\n\n### 2. 日程管理\n\n#### 添加日程\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\n```\n\n#### 🛡️ 容灾备份（自动）\n\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\n\n```python\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\n```\n\n**恢复方式**：\n```bash\n# Windows: 双击 .bat 文件即可恢复\n# 或命令行执行\ncmd /c data/backups/schedule_backup_03.bat\n```\n\n**备份机制**：\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\n\n#### 列出指定日期日程\n```python\nevents = get_schedule_by_date(\"2026-05-20\")\nfor e in events:\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\n```\n\n#### 查询空闲时间\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\",\n    min_duration=30  # 最小空闲30分钟\n)\n# 返回:\n# [\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n# ]\n```\n\n#### 查询日期范围日程\n```python\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\n```\n\n#### 删除日程\n```python\nmsg = delete_schedule_event(event_id)\n# 返回: \"已删除日程: 团队会议\"\n```\n\n#### 更新日程\n```python\nmsg = update_schedule_event(\n    event_id,\n    title=\"新标题\",\n    start_time=\"15:00\",\n    end_time=\"16:00\",\n    status=\"completed\"\n)\n```\n\n#### 生成日程列表\n```python\n# 今天及后续7天\nschedule_text = generate_today_schedule()\n\n# 指定日期及天数\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\n```\n\n---\n\n## CLI 命令\n\n```bash\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\npython workday_calendar.py rules 2026           # 导出规则确认表\n\n# 工作日计算\npython workday_calendar.py calculate 2026       # 计算年度工日\npython workday_calendar.py calendar 2026        # 生成周历JSON\npython workday_calendar.py sync 2026 2025       # 同步数据\npython workday_calendar.py init 2026            # 初始化年度数据\n\n# 日程管理\npython workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\npython workday_calendar.py list 2026-05-20\npython workday_calendar.py free 2026-05-20 09:00 18:00\npython workday_calendar.py delete <event_id>\npython workday_calendar.py update <event_id> --title=\"新标题\" --status=completed\npython workday_calendar.py schedule 7            # 生成7天日程列表\npython workday_calendar.py today                 # 今天+7天日程\n```\n\n### ⚠️ 重要：规则确认表\n\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\n\n```\npython workday_calendar.py rules 2026\n```\n\n该表会显示：\n- 🔧 周末规则配置（双休/单休/大小周）\n- 🎉 法定节假日列表及日期范围\n- 💼 补班日列表\n- ⚠️ 配置冲突警告\n- 📊 年度统计摘要\n\n请核对配置是否与官方发布的节假日安排一致。\n\n---\n\n## 数据存储位置\n\n```\n~/.workbuddy/skills/workday-calendar/data/\n├── holiday_intervals_2026.json    # 2026年法定假日\n├── compensatory_days_2026.json     # 2026年补班日\n├── weekend_config.json             # 周末规则（全局）\n├── schedule_events.json            # 日程事件（全局）\n└── backups/                        # 容灾备份（自动）\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\n    ├── schedule_backup_02.bat\n    ├── ...\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\n```\n\n---\n\n## 优先级规则\n\n### 日期类型优先级\n| 优先级 | 类型 | 规则 |\n|--------|------|------|\n| 1 | **补班日** | 强制计为工作日 |\n| 2 | **法定假日** | 强制计为休息日 |\n| 3 | **周末** | 按配置的周末规则 |\n| 4 | **工作日** | 其他日期 |\n\n### 日程冲突检测\n添加日程时会自动检测与现有日程的时间冲突。\n\n---\n\n## 典型场景\n\n### 场景1：查工作日\n```\n用户：2026年有多少个工作日？\nAI：调用 calculate_total_workdays(2026)\n```\n\n### 场景2：安排会议找空闲时间\n```\n用户：5月20日下午有什么空闲时间？\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\n```\n\n### 场景3：添加新日程\n```\n用户：明天下午2点到3点我要开会\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\n```\n\n### 场景4：查看今天和未来几天的安排\n```\n用户：帮我看看这周有什么安排\nAI：调用 generate_today_schedule()\n```\n\n### 场景5：删除或修改日程\n```\n用户：取消明天的会议\nAI：先 list 找到ID，然后 delete <id>\n\n用户：把下午的会议改到3点\nAI：update <id> --start=15:00 --end=16:00\n```\n\n### 场景6：每天定时生成日程列表\n用户可以设置自动化任务：\n```\n命令：python workday_calendar.py today\n时间：每天早上 08:00\n```\n\n---\n\n## 日程数据格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 分类选项\n- 工作\n- 个人\n- 会议\n- 其他\n\n### 状态选项\n- pending（待完成）\n- completed（已完成）\n- cancelled（已取消）\n\n---\n\n## 相关文件\n\n- `scripts/workday_calendar.py` - 核心计算逻辑\n- `references/data_format.md` - 数据格式详细说明\n- `data/` - JSON数据存储目录\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1779639507916\n}\n\nFile v1.3.0:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.3.0:references/permission_report.json\n\n{\r\n  \"skill_dir\": \"C:\\\\Users\\\\sm001\\\\.workbuddy\\\\skills\\\\workday-calendar\",\r\n  \"risk_level\": \"low\",\r\n  \"permission_weight\": 0.0,\r\n  \"stats\": {\r\n    \"files_scanned\": 1,\r\n    \"lines_scanned\": 1348,\r\n    \"sensitive_access\": 0,\r\n    \"critical_write\": 0,\r\n    \"network_access\": 0,\r\n    \"file_delete\": 0,\r\n    \"subprocess_call\": 0\r\n  },\r\n  \"issues\": [],\r\n  \"summary\": {\r\n    \"total_issues\": 0,\r\n    \"high_severity\": 0,\r\n    \"error_severity\": 0,\r\n    \"recommendation\": \"风险较低，建议保持当前设计。\"\r\n  }\r\n}\n\nFile v1.3.0:references/permission.md\n\n# 权限说明\n\n> 由 `permission_checker.py` 扫描生成，基于脚本实际文件操作行为计算风险权重。\n\n## 风险等级\n\n`low`（权重 **0.00%**）\n\n## 扫描摘要\n\n| 项目 | 值 |\n|------|-----|\n| 扫描文件数 | 1 |\n| 扫描行数 | 1348 |\n| 风险等级 | low |\n| 权重 | 0.00% |\n| 高权限操作 | 无 |\n\n## 权限操作清单\n\n脚本 `scripts/workday_calendar.py` 文件操作均为**数据读写**（JSON 配置文件），无删除/网络/子进程操作：\n\n| 操作 | 文件路径 | 权限 |\n|------|----------|--------|\n| 读假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | 📖 读 |\n| 写假日配置 | `.standardization/workday-calendar/data/holiday_intervals_YYYY.json` | ✏️ 写 |\n| 读补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | 📖 读 |\n| 写补班配置 | `.standardization/workday-calendar/data/compensatory_days_YYYY.json` | ✏️ 写 |\n| 读周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | 📖 读 |\n| 写周末配置 | `.standardization/workday-calendar/data/weekend_config.json` | ✏️ 写 |\n| 读日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | 📖 读 |\n| 写日程数据 | `.standardization/workday-calendar/data/schedule_events.json` | ✏️ 写 |\n\n## 授权方式\n\n**`silent`**（静默执行，无需用户授权）\n\n理由：\n- 权重 0.00%，无高权限操作\n- 仅读写本地 JSON 数据文件  \n- 无网络访问、无子进程调用、无文件删除操作  \n\n## 权重说明\n\n权重 = Σ(操作风险分值) / 100，上限 100%。\n\n本技能仅做本地 JSON 数据读写，风险分值为 0，故权重 0.00%。\n\nArchive v1.2.0: 11 files, 19587 bytes\n\nFiles: _meta.json (135b), data/compensatory_days_2025.json (298b), data/compensatory_days_2026.json (529b), data/holiday_intervals_2025.json (667b), data/holiday_intervals_2026.json (917b), data/schedule_events.json (67b), data/weekend_config.json (161b), references/data_format.md (5334b), references/permission.md (1201b), scripts/workday_calendar.py (43832b), SKILL.md (9185b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: workday-calendar\nversion: 1.2.0\ndescription: 智能周历系统 - 国家法定假日区间管理、年度工作日计算、周历生成、日程管理。支持数据本地JSON存储，AI友好调用接口。\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\n---管理、年度工作日计算、周历生成、日程管理。支持数据本地JSON存储，AI友好调用接口。\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间\n---\n## 触发条件\n\n当用户出现以下意图时，加载本技能：\n\n- 查询或管理**法定假日**、**补班日**、**调休**安排\n- 计算**年度工作日**、**工作日统计**\n- 生成**周历**、**日程安排**\n- 查询某天的**空闲时间**、**日程安排**\n- 添加、修改、删除**日程事件**\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\n\n---\n\n# 智能周历系统 (Workday Calendar)\n\n管理国家法定假日、补班日、自定义周末规则，计算年度工作日，生成周历，并支持个人日程管理。\n\n## 核心能力\n\n### 📅 工作日计算\n- **法定假日区间管理** - 以区间形式存储节假日，支持AI批量导入\n- **补班日管理** - 单独记录调休上班日期\n- **周末规则可配置** - 支持单休、双休、大小周等各类工时制度\n- **工作日计算** - 自动计算年度总工日，优先级：补班 > 节假日 > 周末\n\n### 📊 日程管理\n- **添加日程** - 指定日期、起止时间、标题、分类\n- **删除/修改日程** - 支持CRUD完整操作\n- **查询空闲时间** - 自动查找某日空闲时段\n- **日程列表生成** - 自动生成未来N天日程文本\n\n## 工作流程\n\n### 首次使用 / 新年份\n```\n1. 初始化年度数据 → 2. 导入法定假日 → 3. 导入补班日 → 4. 核对规则确认表 → 5. 计算工作日\n```\n⚠️ **第4步必须执行**：使用 `rules` 命令查看规则确认表，核对节假日和补班日是否正确\n\n### 日程管理\n```\n添加日程 → 查询/修改 → 查找空闲时间 → 生成日程列表\n```\n\n---\n\n## 使用指南\n\n### 1. 工作日计算\n\n#### 计算年度总工日\n```python\nsummary = calculate_total_workdays(2026)\n# 返回:\n# {\n#   \"year\": 2026,\n#   \"total_workdays\": 247,\n#   \"total_holidays\": 118,\n#   \"holiday_count\": 28,\n#   \"compensatory_count\": 5\n# }\n```\n\n#### 生成周历\n```python\ncalendar = generate_weekly_calendar(2026)\nfor week in calendar:\n    print(f\"第{week['week_number']}周\")\n    for day in week['days']:\n        if day['date']:\n            print(f\"  {day['date']}: {day['day_type']}\")\n```\n\n#### 同步数据到新年份\n```python\nresult = sync_year(2026, 2025)\n# 返回: {\"holidays_synced\": 7, \"compensatory_synced\": 4}\n```\n\n### 2. 日程管理\n\n#### 添加日程\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n# 返回: (事件对象, \"日程已添加: 团队会议 (2026-05-20 14:00-15:00)\")\n```\n\n#### 🛡️ 容灾备份（自动）\n\n每次添加新日程前，系统自动创建 `.bat` 备份文件，确保意外情况下可一键回退。\n\n```python\n# 每次 add_schedule_event() 调用时自动执行，无需手动干预\n# 备份文件存储在: data/backups/schedule_backup_01.bat ~ schedule_backup_09.bat\n# 最多保留 9 个备份，超过后循环覆盖（最新覆盖最旧）\n```\n\n**恢复方式**：\n```bash\n# Windows: 双击 .bat 文件即可恢复\n# 或命令行执行\ncmd /c data/backups/schedule_backup_03.bat\n```\n\n**备份机制**：\n- 每次 `add_schedule_event()` 保存前，自动将当前 `schedule_events.json` 备份\n- .bat 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件\n- 编号 01~09 循环覆盖，第10个备份覆盖第1个\n\n#### 列出指定日期日程\n```python\nevents = get_schedule_by_date(\"2026-05-20\")\nfor e in events:\n    print(f\"{e.start_time}-{e.end_time} {e.title}\")\n```\n\n#### 查询空闲时间\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\",\n    min_duration=30  # 最小空闲30分钟\n)\n# 返回:\n# [\n#   {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n#   {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n# ]\n```\n\n#### 查询日期范围日程\n```python\nevents = get_schedules_by_date_range(\"2026-05-20\", \"2026-05-25\")\n```\n\n#### 删除日程\n```python\nmsg = delete_schedule_event(event_id)\n# 返回: \"已删除日程: 团队会议\"\n```\n\n#### 更新日程\n```python\nmsg = update_schedule_event(\n    event_id,\n    title=\"新标题\",\n    start_time=\"15:00\",\n    end_time=\"16:00\",\n    status=\"completed\"\n)\n```\n\n#### 生成日程列表\n```python\n# 今天及后续7天\nschedule_text = generate_today_schedule()\n\n# 指定日期及天数\nschedule_text = generate_daily_schedule(\"2026-05-20\", 14)\n```\n\n---\n\n## CLI 命令\n\n```bash\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\npython workday_calendar.py rules 2026           # 导出规则确认表\n\n# 工作日计算\npython workday_calendar.py calculate 2026       # 计算年度工日\npython workday_calendar.py calendar 2026        # 生成周历JSON\npython workday_calendar.py sync 2026 2025       # 同步数据\npython workday_calendar.py init 2026            # 初始化年度数据\n\n# 日程管理\npython workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\" \"团队同步\" 工作\npython workday_calendar.py list 2026-05-20\npython workday_calendar.py free 2026-05-20 09:00 18:00\npython workday_calendar.py delete <event_id>\npython workday_calendar.py update <event_id> --title=\"新标题\" --status=completed\npython workday_calendar.py schedule 7            # 生成7天日程列表\npython workday_calendar.py today                 # 今天+7天日程\n```\n\n### ⚠️ 重要：规则确认表\n\n初始化年度数据后，**强烈建议**执行 `rules` 命令查看规则确认表：\n\n```\npython workday_calendar.py rules 2026\n```\n\n该表会显示：\n- 🔧 周末规则配置（双休/单休/大小周）\n- 🎉 法定节假日列表及日期范围\n- 💼 补班日列表\n- ⚠️ 配置冲突警告\n- 📊 年度统计摘要\n\n请核对配置是否与官方发布的节假日安排一致。\n\n---\n\n## 数据存储位置\n\n```\n~/.workbuddy/skills/workday-calendar/data/\n├── holiday_intervals_2026.json    # 2026年法定假日\n├── compensatory_days_2026.json     # 2026年补班日\n├── weekend_config.json             # 周末规则（全局）\n├── schedule_events.json            # 日程事件（全局）\n└── backups/                        # 容灾备份（自动）\n    ├── schedule_backup_01.bat      # .bat 回滚脚本，最多9个循环覆盖\n    ├── schedule_backup_02.bat\n    ├── ...\n    └── _backup_index.txt           # 循环索引（记录下一个写入编号）\n```\n\n---\n\n## 优先级规则\n\n### 日期类型优先级\n| 优先级 | 类型 | 规则 |\n|--------|------|------|\n| 1 | **补班日** | 强制计为工作日 |\n| 2 | **法定假日** | 强制计为休息日 |\n| 3 | **周末** | 按配置的周末规则 |\n| 4 | **工作日** | 其他日期 |\n\n### 日程冲突检测\n添加日程时会自动检测与现有日程的时间冲突。\n\n---\n\n## 典型场景\n\n### 场景1：查工作日\n```\n用户：2026年有多少个工作日？\nAI：调用 calculate_total_workdays(2026)\n```\n\n### 场景2：安排会议找空闲时间\n```\n用户：5月20日下午有什么空闲时间？\nAI：调用 find_free_slots(\"2026-05-20\", \"09:00\", \"18:00\")\n返回：[{\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}]\n```\n\n### 场景3：添加新日程\n```\n用户：明天下午2点到3点我要开会\nAI：调用 add_schedule_event(\"开会\", tomorrow, \"14:00\", \"15:00\")\n```\n\n### 场景4：查看今天和未来几天的安排\n```\n用户：帮我看看这周有什么安排\nAI：调用 generate_today_schedule()\n```\n\n### 场景5：删除或修改日程\n```\n用户：取消明天的会议\nAI：先 list 找到ID，然后 delete <id>\n\n用户：把下午的会议改到3点\nAI：update <id> --start=15:00 --end=16:00\n```\n\n### 场景6：每天定时生成日程列表\n用户可以设置自动化任务：\n```\n命令：python workday_calendar.py today\n时间：每天早上 08:00\n```\n\n---\n\n## 日程数据格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 分类选项\n- 工作\n- 个人\n- 会议\n- 其他\n\n### 状态选项\n- pending（待完成）\n- completed（已完成）\n- cancelled（已取消）\n\n---\n\n## 相关文件\n\n- `scripts/workday_calendar.py` - 核心计算逻辑\n- `references/data_format.md` - 数据格式详细说明\n- `data/` - JSON数据存储目录\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1779633993413\n}\n\nFile v1.2.0:references/data_format.md\n\n# 智能周历系统 - 数据格式规范\n\n## 概述\n\n本系统使用 JSON 格式存储数据，支持 AI/智能体 格式化导入导出。\n\n---\n\n## 1. 法定假日区间 (Holiday Intervals)\n\n**文件名**: `holiday_intervals_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]\n```\n\n---\n\n## 2. 补班日期 (Compensatory Days)\n\n**文件名**: `compensatory_days_{年份}.json`\n\n### 完整格式\n\n```json\n{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### AI导入格式（简化）\n\n```json\n[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]\n```\n\n---\n\n## 3. 周末规则配置 (Weekend Config)\n\n**文件名**: `weekend_config.json`\n\n```json\n{\n  \"weekends\": [0, 6],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}\n```\n\n### 周末数值对照\n\n| 数值 | 星期 |\n|------|------|\n| 0 | 周日 |\n| 1 | 周一 |\n| 2 | 周二 |\n| 3 | 周三 |\n| 4 | 周四 |\n| 5 | 周五 |\n| 6 | 周六 |\n\n---\n\n## 4. 日程事件 (Schedule Events)\n\n**文件名**: `schedule_events.json`\n\n### 完整格式\n\n```json\n{\n  \"events\": [\n    {\n      \"id\": \"d008b885\",\n      \"title\": \"团队会议\",\n      \"date\": \"2026-05-20\",\n      \"start_time\": \"14:00\",\n      \"end_time\": \"15:00\",\n      \"description\": \"项目进度讨论\",\n      \"category\": \"会议\",\n      \"status\": \"pending\",\n      \"created_at\": \"2026-05-19T22:00:00\",\n      \"updated_at\": \"2026-05-19T22:00:00\"\n    }\n  ],\n  \"updated_at\": \"2026-05-19T22:00:00\"\n}\n```\n\n### 字段说明\n\n| 字段 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| id | string | ✅ | 唯一标识符（自动生成） |\n| title | string | ✅ | 日程标题 |\n| date | string | ✅ | 日期 (YYYY-MM-DD) |\n| start_time | string | ✅ | 开始时间 (HH:MM) |\n| end_time | string | ✅ | 结束时间 (HH:MM) |\n| description | string | ❌ | 描述说明 |\n| category | string | ❌ | 分类（工作/个人/会议/其他） |\n| status | string | ❌ | 状态（pending/completed/cancelled） |\n| created_at | string | ✅ | 创建时间 |\n| updated_at | string | ✅ | 更新时间 |\n\n### 分类选项\n\n| 值 | 说明 |\n|----|------|\n| 工作 | 工作相关事务 |\n| 个人 | 个人事务 |\n| 会议 | 会议安排 |\n| 其他 | 其他类型 |\n\n### 状态选项\n\n| 值 | 说明 |\n|----|------|\n| pending | 待完成（默认） |\n| completed | 已完成 |\n| cancelled | 已取消 |\n\n---\n\n## 5. 年度汇总导出 (Year Summary)\n\n```json\n{\n  \"year\": 2026,\n  \"total_workdays\": 247,\n  \"total_holidays\": 118,\n  \"total_days\": 365,\n  \"holiday_count\": 28,\n  \"compensatory_count\": 5,\n  \"weekend_config\": {\"weekends\": [0, 6]},\n  \"holiday_intervals\": [...],\n  \"compensatory_days\": [...]\n}\n```\n\n---\n\n## 6. 周历导出 (Weekly Calendar)\n\n```json\n[\n  {\n    \"week_number\": 1,\n    \"week_start\": \"2026-01-01\",\n    \"week_end\": \"2026-01-03\",\n    \"week_workdays\": 2,\n    \"week_holidays\": 5,\n    \"days\": [\n      {\n        \"date\": \"2026-01-01\",\n        \"weekday\": 3,\n        \"weekday_name\": \"周四\",\n        \"day_type\": \"假日\",\n        \"is_workday\": false,\n        \"holiday_name\": \"元旦\",\n        \"month\": 1,\n        \"day\": 1\n      }\n    ]\n  }\n]\n```\n\n---\n\n## 7. 空闲时段查询 (Free Slots)\n\n```json\n[\n  {\"start\": \"10:00\", \"end\": \"14:00\", \"duration\": 240},\n  {\"start\": \"15:30\", \"end\": \"18:00\", \"duration\": 150}\n]\n```\n\n---\n\n## AI调用示例\n\n### 场景1：导入法定假日数据\n\n```python\nimport_holidays_from_ai(2026, [\n    {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n    {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n    # ...\n])\n```\n\n### 场景2：添加日程\n\n```python\nevent, msg = add_schedule_event(\n    title=\"团队会议\",\n    date=\"2026-05-20\",\n    start_time=\"14:00\",\n    end_time=\"15:00\",\n    description=\"项目进度讨论\",\n    category=\"会议\"\n)\n```\n\n### 场景3：查询空闲时间\n\n```python\nslots = find_free_slots(\n    date=\"2026-05-20\",\n    start_search=\"09:00\",\n    end_search=\"18:00\"\n)\n```\n\n### 场景4：生成日程列表\n\n```python\nschedule = generate_today_schedule()\n# 输出:\n# 📅 2026-05-19 (周二) - 无安排\n# 📅 2026-05-20 (周三)\n#   🔄 09:00-10:00 晨会\n#   🔄 14:00-15:30 项目评审\n```\n\n### 场景5：删除日程\n\n```python\nmsg = delete_schedule_event(\"d008b885\")\n# 输出: \"已删除日程: 晨会\"\n```\n\n### 场景6：更新日程状态\n\n```python\nmsg = update_schedule_event(\n    \"d008b885\",\n    status=\"completed\"\n)\n```\n\nFile v1.2.0:references/permission.md\n\n# 权限权重说明（R-16）\n\n本技能各操作的权限权重评估如下（由 `permission_checker.py` 计算）：\n\n| 脚本 | 操作类型 | 权限权重 | 风险等级 | 说明 |\n|------|---------|---------|---------|------|\n| `workday_calendar.py` | 读写 `data/` 目录（JSON） | 中低 | 🟡 | 本地数据文件读写，无外部命令调用 |\n| `workday_calendar.py` | 创建 `.bat` 备份文件 | 中低 | 🟡 | 备份文件仅含数据恢复命令，无执行风险 |\n| `workday_calendar.py` | 读取 `weekend_config.json` | 低 | 🟢 | 仅读取配置 |\n| `workday_calendar.py` | 写入 `schedule_events.json` | 中 | 🟡 | 本地日程数据写入，无外部网络/命令 |\n\n**合计权限权重**：中低（所有操作均为本地文件读写）\n**敏感信息访问**：无（仅本地日历/日程数据）\n**关键位置写入**：否（仅写入技能自身 `data/` 目录）\n**高权限操作**：无（无需授权）\n\n> 本技能整体风险等级：**低**。所有操作仅限于本地用户目录，不涉及系统目录、敏感位置或网络传输。备份 `.bat` 文件使用 `certutil -decode` 自解码技术，无需依赖外部文件，无执行风险。\n\nFile v1.2.0:data/compensatory_days_2025.json\n\n{\r\n  \"year\": 2025,\r\n  \"days\": [\r\n    {\"date\": \"2025-01-26\", \"note\": \"春节前调休\"},\r\n    {\"date\": \"2025-02-08\", \"note\": \"春节后补班\"},\r\n    {\"date\": \"2025-04-27\", \"note\": \"五一调休\"},\r\n    {\"date\": \"2025-09-28\", \"note\": \"国庆调休\"}\r\n  ],\r\n  \"updated_at\": \"2025-01-01T00:00:00\"\r\n}\n\nFile v1.2.0:data/compensatory_days_2026.json\n\n{\r\n  \"year\": 2026,\r\n  \"days\": [\r\n    {\r\n      \"date\": \"2026-01-04\",\r\n      \"note\": \"元旦调休\"\r\n    },\r\n    {\r\n      \"date\": \"2026-02-14\",\r\n      \"note\": \"春节调休\"\r\n    },\r\n    {\r\n      \"date\": \"2026-02-28\",\r\n      \"note\": \"春节调休\"\r\n    },\r\n    \n\nArchive v1.1.1: 10 files, 18611 bytes\n\nFiles: _meta.json (135b), data/compensatory_days_2025.json (298b), data/compensatory_days_2026.json (529b), data/holiday_intervals_2025.json (667b), data/holiday_intervals_2026.json (917b), data/schedule_events.json (67b), data/weekend_config.json (161b), references/data_format.md (5334b), scripts/workday_calendar.py (43832b), SKILL.md (8775b)\n\nArchive v1.1.0: 10 files, 18610 bytes\n\nFiles: _meta.json (135b), data/compensatory_days_2025.json (298b), data/compensatory_days_2026.json (529b), data/holiday_intervals_2025.json (667b), data/holiday_intervals_2026.json (917b), data/schedule_events.json (67b), data/weekend_config.json (161b), references/data_format.md (5334b), scripts/workday_calendar.py (43832b), SKILL.md (8775b)","readmeExcerpt":"Skill: workday-calendar Owner: ldxs001 Summary: 智能周历系统。支持法定假日、补班日、轮休系统（跳过/不跳过法定假双模式）、特殊休息（公休/临修）、个人日程管理。 Tags: latest:2.2.0 Version history: v2.2.0 | 2026-06-25T10:26:40.854Z | auto **workday-calendar 2.2.0** — 大版本升级，全面支持轮休（班表）与特殊休息，增强排班配置与数据分层。 - 新增“轮休系统”，可设置轮班周期，支持“跳过/不跳过”法定假日模式。 - 支持“公休/临修”特殊休息类型，优先级高于普通假期、补班、排班。 - 增强多层数据架构（法定假期、周末规则、轮休/特殊休息、个人日程独立层），日历类型优先级体系更清晰。 - 引入settings.py，提供本地 Web 配置中心（端口 8765）。 - CLI、数据格式","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"File v2.2.0:references/examples.md\n\n# 典型场景\r\n\r\n### 场景1：查工作日"},{"language":"text","snippet":"File v2.2.0:references/faq.md\n\n# FAQ — workday-calendar 常见问题\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/faq.md`\r\n\r\nQ: 什么时候用工作日计算，什么时候用日程管理？\r\nA: 工作日计算用于查询某年/某月有多少个工作日、是否为假日等；日程管理用于管理个人日程事件（会议、任务等）。两者互不干扰，可以同时使用。\r\n\r\nQ: 数据文件存储在哪里？会不会丢失？\r\nA: 所有数据存储在 `skills/.standardization/workday-calendar/data/` 目录下（`holiday_intervals.json`、`compensatory_days.json`、`schedule_events.json` 等）。每次添加日程前系统自动创建 .bat 容灾备份，最多保留 9 个，可一键回滚。\r\n\r\nQ: 如何导入新的法定假日数据？\r\nA: 使用 CLI 命令 `python scripts/workday_calendar.py init <year>` 初始化年份数据，然后手动编辑 `data/holiday_intervals_<year>.json` 填入官方假日区间，或使用 AI 批量导入。\r\n\r\nQ: 周历和日程有什么区别？\r\nA: 周历（calendar）是按周展示的年度工作日/假日视图，用于查看某周有哪些工作日；日程（schedule）是具体日期上的事件安排，两者属于不同维度，可配合使用。\r\n\r\nQ: 为什么计算的工作日数和官方不一致？\r\nA: 请先执行 `python scripts/workday_calendar.py rules <year>` 查看规则确认表，核对假日区间和补班日是否正确配置。配置错误是计算结果偏差的最常见原因。\r\n\r\nQ: add_schedule_event() 返回\"冲突\"怎么办？\r\nA: 该时间段已有日程。先用 `list <date>` 查看现有日程，调整起止时间避开冲突。更新日程时也会重新检测冲突，冲突则自动还原。\r\n\r\nQ: 导入规则模板时报 JSON 解析错误？\r\nA: 检查模板 JSON 是否符合 `export_rules_template` 格式（version/year/base_type/rules 字段）。可先用 `export-rules-template` 导出正确格式作为对照。\r\n\r\nQ: HTML 导出后页面空白/乱码？\r\nA: 确保使用 UTF-8 编码保存 .html 文件。用浏览器打开时若显示乱码，在浏览器菜单中手动选择 UTF-8 编码。\r\n\r\nQ: settings.py 配置中心无法访问？\r\nA: 确认端口 8765 未被占用。如被占用，运行 `python scripts/settings.py <其他端口>` 指定端口。防火墙可能需放行。\n\nFile v2.2.0:references/guide.md\n\n# 使用指南\r\n\r\n## 工作日计算"},{"language":"json","snippet":"{\n  \"year\": 2026,\n  \"intervals\": [\n    {\n      \"name\": \"元旦\",\n      \"start\": \"2026-01-01\",\n      \"end\": \"2026-01-01\",\n      \"note\": \"新年第一天\"\n    },\n    {\n      \"name\": \"春节\",\n      \"start\": \"2026-01-28\",\n      \"end\": \"2026-02-04\",\n      \"note\": \"农历新年假期\"\n    }\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}"},{"language":"json","snippet":"[\n  {\"name\": \"元旦\", \"start\": \"2026-01-01\", \"end\": \"2026-01-01\"},\n  {\"name\": \"春节\", \"start\": \"2026-01-28\", \"end\": \"2026-02-04\"},\n  {\"name\": \"清明节\", \"start\": \"2026-04-04\", \"end\": \"2026-04-06\"},\n  {\"name\": \"劳动节\", \"start\": \"2026-05-01\", \"end\": \"2026-05-05\"},\n  {\"name\": \"端午节\", \"start\": \"2026-06-20\", \"end\": \"2026-06-22\"},\n  {\"name\": \"中秋节\", \"start\": \"2026-10-06\", \"end\": \"2026-10-08\"},\n  {\"name\": \"国庆节\", \"start\": \"2026-10-01\", \"end\": \"2026-10-07\"}\n]"},{"language":"json","snippet":"{\n  \"year\": 2026,\n  \"days\": [\n    {\"date\": \"2026-01-25\", \"note\": \"春节前调休\"},\n    {\"date\": \"2026-02-08\", \"note\": \"春节后补班\"}\n  ],\n  \"updated_at\": \"2025-12-01T10:30:00\"\n}"},{"language":"json","snippet":"[\n  {\"date\": \"2026-01-25\"},\n  {\"date\": \"2026-02-08\", \"note\": \"春节调休\"}\n]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\r\nname: workday-calendar\r\nauthor: wUwproject\r\nlicense: MIT\r\ntags: ['calendar', 'workday', 'holiday', 'schedule', 'rotation', 'gongxiu', 'linxiu', 'excel-export']\r\nversion: 2.2.0\r\ndescription: 智能周历系统。支持法定假日、补班日、轮休系统（跳过/不跳过法定假双模式）、特殊休息（公休/临修）、个人日程管理。\r\nsensitive_access: false\r\ncritical_write: false\r\npermission_weight: LOW\r\ndata_dir: ../.standardization/workday-calendar/data/\r\ntrigger: 法定假日|周历|工作日|调休|补班|节假日|假日区间|年度工日|日程|安排|空闲时间|轮休|公休|临修|排班\r\ntrigger_negative: true\r\nexternal_data_dir: true\r\nh1_position: true\r\nmeta_field_sync: true\r\ncreate_permissions_md: true\r\n---\r\n# 智能周历系统 (Workday Calendar)\r\n\r\n## 触发条件\r\n\r\n**正向触发：**\r\n- 查询或管理**法定假日**、**补班日**、**调休**安排\r\n- 计算**年度工作日**、**工作日统计**\r\n- 生成**周历**、**日程安排**\r\n- 查询某天的**空闲时间**、**日程安排**\r\n- 添加、更新、删除**日程事件**\r\n- 说出关键词：\"周历\"、\"工作日\"、\"假日区间\"、\"日程\"、\"安排\"\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n### 否定条件（不触发）\r\n- 用户只是询问日期（如\"今天几号\"），无假日/工作日/日程管理意图\r\n- 用户讨论日历 UI 组件设计（如\"帮我画一个日历组件\"），应触发 drawiodo 而非本技能\r\n- 用户要求操作其他日历应用（如 Google Calendar、Outlook 日历），本技能仅管理本地数据\r\n\r\n## 核心能力\r\n\r\n> 📚 **渐进式加载**：本技能采用渐进式 MD 体系，`SKILL.md` 为入口（≤230行），详细内容拆分到 `references/*.md` 按需加载。\r\n\r\n| 能力 | 说明 |\r\n| ------ |------|\r\n| **法定假日管理** | 区间形式存储节假日，支持 AI 批量导入 |\r\n| **补班日管理** | 单独记录调休上班日期 |\r\n| **周末规则可配置** | 双休/单休/单双休/自定义周几 |\r\n| **工作日计算** | 自动计算年度总工日，含所有休息类型统计 |\r\n| **轮休系统** | skip/add 双模式，可配置周期，跨年缓存 |\r\n| **特殊休息** | 公休/临修，支持单日和区间，最高优先级 |\r\n| **个人日程** | 添加/删除/更新/查询/冲突检测 |\r\n| **排班时段** | 15 分钟粒度，支持岗位+人员多赋值 |\r\n| **HTML 导出** | 排班周历 / 日程周历 / 排班表（周/月/日期范围） |\r\n| **定时任务** | 自动化配置，Markdown 输出 |\r\n| **配置中心** | Web 界面（settings.py，端口 8765） |\r\n\r\n### 渐进式文件索引\r\n\r\n| 文件名 | 分类 | 包含内容 | 审计关联 |\r\n| -------- |------| ---------- |----------|\r\n| `references/LICENSE.md` | 许可协议 | MIT 许可证完整文本 | R-26 |\r\n| `references/antipatterns.md` | 规范指南 | 常见反模式与避坑指引 | R-18 |\r\n| `references/changelog.md` | 版本管理 | 版本更新日志 | R-24 |\r\n| `references/cli.md` | 命令参考 | CLI 命令完整列表 | 无 |\r\n| `references/data_format.md` | 参考文档 | JSON 数据格式说明 | 无 |\r\n| `references/examples.md` | 使用示例 | 各场景完整交互示例 | R-25 C-17 |\r\n| `references/faq.md` | 常见问题 | 常见疑问与解答 | R-19, R-25 C-19 |\r\n| `references/guide.md` | 使用指南 | Python API 使用示例 | 无 |\r\n| `references/permissions.md` | 权限与测试 | 权限扫描说明与测试结论 | R-15, R-16 |\r\n| `references/test-report.md` | 测试报告 | skill-function-test 测试结论 | 无 |\r\n\r\n## 工作流程\r\n\r\n### 首次使用 / 新年份\r\n\r\n当某年没有法定假日数据时（`load_holiday_intervals(year)` 返回空列表），**必须主动联网查询**国务院办公厅放假安排通知：\r\n\r\n1. **联网查询** — 输入：年份 → 搜索\"国务院办公厅 20XX年 放假安排\" → 输出：法定假日日期范围、补班日、假期名称\r\n2. **组织规则模板 JSON** — 输入：查询结果 → 按 `export_rules_template` 格式组织 JSON → 输出：标准规则模板\r\n3. **导入** — 输入：规则模板 → 调用 `import_rules_from_template()` → 输出：数据写入 JSON 文件\r\n4. **核对** — 输入：已导入数据 → 运行 `python scripts/workday_calendar.py rules 20XX` → 输出：规则确认表\r\n5. **计算** — 输入：确认无误的数据 → 调用 `calculate_total_workdays(20XX)` → 输出：年度工日统计\r\n\r\n**联网查询要求：**\r\n- 搜索关键词：\"国务院办公厅 20XX 年 放假安排\"\r\n- 获取：法定假日日期范围、调休上班日（补班）、假期名称\r\n- 确认该年周末规则（通常为标准双休日六日）\r\n\r\n**组织规则模板（`export_rules_template` 格式）：**\r\n```json\r\n{\r\n  \"version\": \"1.0\",\r\n  \"year\": 2027,\r\n  \"base_type\": \"holiday\",\r\n  \"rules"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75zfd51df61ajdyqtgvrs1hx84s4q6\",\n  \"slug\": \"workday-calendar\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1782383200854\n}"},{"path":"references/antipatterns.md","content":"# workday-calendar 反模式\r\n\r\n> 本文件以渐进式加载方式提供，详见 `references/antipatterns.md`\r\n\r\n## 反模式 1：在 SKILL.md 正文中写完整数据格式说明\r\n\r\n**错误做法**：把 `holiday_intervals.json` 和 `schedule_events.json` 的完整字段说明全部写在 SKILL.md 里，导致文件超过 230 行，违反 R-17 规则。\r\n\r\n**正确做法**：数据格式说明拆分到 `references/data_format.md`，SKILL.md 只留摘要 + 引用链接。当 SKILL.md 超过 150 行时应主动考虑拆分。\r\n\r\n## 反模式 2：触发词过于宽泛导致误触发\r\n\r\n**错误做法**：trigger 写成 `日历|calendar`，导致用户说「帮我画一个日历 UI」时也触发本技能，而用户实际想要的是 drawio-diagram 画图。\r\n\r\n**正确做法**：触发词须含具体动作或对象（如 `法定假日|工作日|周历|日程管理`），并配合 `trigger_negative: true` 在「不触发」段落排除 UI 设计类意图。\r\n\r\n## 反模式 3：直接编辑 data/ 下的 JSON 文件而不备份\r\n\r\n**错误做法**：手动用编辑器打开 `data/schedule_events.json` 更新日程，改错后无法恢复，也没有利用系统自带的 .bat 容灾备份机制。\r\n\r\n**正确做法**：始终通过 `python scripts/workday_calendar.py add/delete/update` 操作，脚本会自动创建 `.bat` 容灾备份。紧急恢复时双击 `data/backups/schedule_backup_XX.bat` 即可回滚。"},{"path":"references/changelog.md","content":"## 2.2.0 (2026-06-22)\r\n\r\n### Added\r\n- B 层排班时段规则系统（WorkSlot 15 分钟粒度）\r\n- 岗位（position）+ 多人多岗多赋值（WorkSlot.assignments）\r\n- 排班时段条（tl-bar，工作日蓝灰交替/周末全灰/假日隐藏）\r\n- 弹出框排班时段表 + 个人日程按 B 层时段染色\r\n- 排班表导出（export_schedule_table，周/月/日期范围，按周或月分组）\r\n- 日程自动状态流转（pending → missed/completed，配置开关）\r\n- 平台无关的自动化定时配置（auto add/check CLI）\r\n- 补班日弹出框按工作日时段展示\r\n\r\n### Changed\r\n- 周末色统一为绿色（法定假休），不再与轮休双色区分\r\n- 日类型简化为：绿=休息（法定/双休/轮休/公休/临修）、红=补班、白=工作\r\n- get_day_type() 逻辑重构：排班规则只定义上班，不上班=休息\r\n- config.json 缺字段自动补默认值（不再因旧文件无 key 而失效）\r\n\r\n### Fixed\r\n- load_config() 新增字段自动合并默认值\r\n- auto_update_event_statuses() 支持 missed→completed 重评\r\n- get_slot_color_for_time() 按 weekday+time 正确映射时段颜色\r\n- weekend_config 映射 bug（config 0=周日→Python 6=周日）\r\n- 弹出框日程染色正确（午休灰、上午班蓝、下午班蓝）\r\n\r\n## 2.1.0 (2026-06-22)\r\n\r\n### Added\r\n- 基础周 HTML 导出与配置中心（settings.py）\r\n- 岗位+人员多赋值支持（WorkSlot.assignments）\r\n- 排班表导出（周/月/日期范围）\r\n- 定时任务自动化配置（auto CLI）\r\n- 过期日程自动打标（missed/completed 配置切换）\r\n- 排班时段条（tl-bar 可视化）\r\n- 配置中心 Web 界面\r\n\r\n### Fixed\r\n- `update_schedule_event()` 增加冲突检测\r\n- `export_rules_table()` 修复硬编码 52 周\r\n- 节假日落在周末重复扣除 Bug\r\n- 周末规则转换 Bug（config_weekends_to_python）\r\n- `scheduling_rules.json` 清空后默认回退\r\n\r\n### Changed\r\n- WorkSlot 重构：assignments 列表替代单 position/persons\r\n- 加载配置使用默认值合并（兼容旧 config.json）\r\n\r\n## 1.6.5 (2026-05-31)\r\n\r\n### 修复\r\n- **data_dir 格式修正**: frontmatter 的 data_dir 恢复为 ../ 相对路径格式（此前错误同步为 skills/ 格式）\r\n\r\n---\r\n## 1.6.4 (2026-05-31)\r\n\r\n### 修复\r\n- audit --fix 自动修正: meta_field_sync\r\n\r\n---\r\n\r\n## 1.6.3 (2026-05-31)\r\n\r\n### 修复\r\n- **H1 位置修复**: 将 H1 从第 38 行移至 frontmatter 后首行（原距 frontmatter 闭合后有 22 行空白）\r\n\r\n---\r\n## 1.6.2 (2026-05-31)\r\n\r\n### 修复\r\n- **R-04**: description 删除版本号\r\n- **R-10**: changelog 版本号去 v 前缀\r\n\r\n---\r\n\r\n## 1.6.1 (2026-05-30)\r\n\r\n### 修复\r\n- audit --fix 自动修正\r\n\r\n---\r\n\r\n\r\n## 1.6.0（2026-05-30）\r\n\r\n### 修复\r\n- R-12 数据目录路径合规修复（`scripts/workday_calendar.py` 新增 `DEFAULT_DATA_DIR_RAW` 审计锚点 + `_data_dir_abs` 运行时路径）\r\n- `_meta.json` 补充 `data_dir` 字段（与 SKILL.md frontmatter 保持一致）\r\n- `get_skill_data_dir()` 改用 `_data_dir_abs` 静态路径替代动态目录遍历\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.6.0，描述更新\r\n- `_meta.json` 版本号和描述同步更新\r\n- `references/changelog.md` 补写 v1.6.0 改动记录\r\n\r\n---\r\n\r\n## 1.5.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（删除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n- SKILL.md frontmatter 补充 trigger/trigger_negative 字段\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.5.0\r\n- _meta.json 版本号和描述更新\r\n- references/changelog.md 补写 v1.4.0 遗漏的实际改动\r\n\r\n---\r\n\r\n## 1.4.0（2026-05-27）\r\n\r\n### 修复\r\n- 经 skill-standardization 改造，文件结构规范化（scripts/、references/ 归位）\r\n- R-11 产出物路径合规性修复（删除根目录违规文件）\r\n- R-12 数据目录路径统一（data_dir: ../.standardization/workday-calendar/data/）\r\n\r\n### 更新\r\n- SKILL.md frontmatter 版本号升至 v1.4.0\r\n- _meta.json 版本号和描述更新\r\n\r\n---\r\n\r\n## 1.3.0（2026-05-27）\r\n\r\n### 新增\r\n- 国家法定假日区间管理\r\n- 年度工作日计算\r\n- 周历生成\r\n- 日程管理\r\n\r\n---"},{"path":"references/cli.md","content":"# CLI 命令参考\r\n\r\n```bash\r\n# 规则确认（重要！初始化后必须执行，核对配置是否正确）\r\npython scripts/workday_calendar.py rules 2026           # 导出规则确认表\r\n\r\n# 工作日计算\r\npython scripts/workday_calendar.py calculate 2026       # 计算年度工日\r\npython scripts/workday_calendar.py calendar 2026        # 生成周历JSON\r\npython scripts/workday_calendar.py sync 2026 2025       # 同步数据\r\n\r\n# 轮休管理\r\npython scripts/workday_calendar.py rotation add \"A组\" 2026-01-05 7 5 --skip\r\npython scripts/workday_calendar.py rotation list\r\npython scripts/workday_calendar.py rotation delete <id>\r\npython scripts/workday_calendar.py rotation generate 2026\r\n\r\n# 特殊休息管理（公休/临修）\r\npython scripts/workday_calendar.py special add 公休 --date=2026-03-15 --reason=\"公司统一调休\"\r\npython scripts/workday_calendar.py special add 临修 --start-date=2026-04-10 --end-date=2026-04-12\r\npython scripts/workday_calendar.py special list\r\npython scripts/workday_calendar.py special delete <id>\r\n\r\n# 排班时段规则\r\npython scripts/workday_calendar.py sched view\r\npython scripts/workday_calendar.py sched set 0 08:30-11:30:上午班|收银台:张三,李四 13:30-17:30:下午班\r\n\r\n# 配置管理\r\npython scripts/workday_calendar.py config\r\npython scripts/workday_calendar.py config set --use-scheduling=true\r\npython scripts/workday_calendar.py config set --auto-complete=true\r\n\r\n# 规则模板（标准化 JSON 接口）\r\npython scripts/workday_calendar.py export-rules-template\r\npython scripts/workday_calendar.py import-rules '<json>'\r\n\r\n# 日程管理\r\npython scripts/workday_calendar.py add 2026-05-20 09:00 10:00 \"晨会\"\r\npython scripts/workday_calendar.py list 2026-05-20\r\npython scripts/workday_calendar.py free 2026-05-20 09:00 18:00\r\npython scripts/workday_calendar.py delete <event_id>\r\npython scripts/workday_calendar.py update <event_id> --status=completed\r\npython scripts/workday_calendar.py schedule 7\r\npython scripts/workday_calendar.py today\r\n\r\n# HTML 导出\r\npython scripts/workday_calendar.py export-weekly-board [year]\r\npython scripts/workday_calendar.py export-schedule-weekly [year]\r\npython scripts/workday_calendar.py export-schedule-table --mode=week|month --date-from=... --date-to=...\r\n\r\n# 定时任务自动化\r\npython scripts/workday_calendar.py auto add \"晨间简报\" 6 0 3\r\npython scripts/workday_calendar.py auto list\r\npython scripts/workday_calendar.py auto check\r\n\r\n# 配置中心（Web 界面）\r\npython scripts/settings.py [port]   # 默认 8765\r\n```\r\n\r\n### ⚙️ 配置中心\r\n\r\n运行 `python scripts/settings.py 8765` 后在浏览器打开 `http://localhost:8765`，支持：\r\n- **基础周类型切换** - 节假周 / 排班周\r\n- **过期日程自动打标** - 已完成 / 已错过\r\n- **导出规则模板** / **导入规则**\r\n- **导出排班HTML** / **导出日程HTML** / **导出排班表**\r\n- 排班表支持周/月单选 + 日期范围筛选"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":986,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T04:54:57.839Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:52:22.009Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}