{"owner":"tisfeng","repo":"Easydict","hasSkills":true,"totalSkillsCount":33,"totalTokensCount":16897,"categories":["anthropic-skill","root-instruction","subagent-persona"],"hasMcp":false,"mcpConfig":null,"found":[".agents/skills/worktree-rebase-merge/SKILL.md",".agents/skills/code-simplifier/SKILL.md","AGENTS.md","docs/references/README.md",".agents/skills/fireworks-tech-graph/SKILL.md",".agents/skills/review-pr/SKILL.md",".agents/skills/git-commit/SKILL.md","docs/agents/build-and-test.md","docs/agents/skills.md","docs/agents/swift-xcode.md","docs/agents/testing.md",".agents/skills/fireworks-tech-graph/package.json",".agents/skills/fireworks-tech-graph/README.md",".agents/skills/fireworks-tech-graph/README.zh.md",".agents/skills/fireworks-tech-graph/agents/openai.yaml",".agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json",".agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json",".agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json",".agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json",".agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json",".agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json",".agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json",".agents/skills/fireworks-tech-graph/references/icons.md",".agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md",".agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md",".agents/skills/fireworks-tech-graph/references/style-3-blueprint.md",".agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md",".agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md",".agents/skills/fireworks-tech-graph/references/style-6-claude-official.md",".agents/skills/fireworks-tech-graph/references/style-7-openai.md",".agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md",".agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md",".agents/skills/fireworks-tech-graph/scripts/README.md"],"skills":{".agents/skills/worktree-rebase-merge/SKILL.md":"---\nname: worktree-rebase-merge\ndescription: 将当前 worktree 的任务提交 rebase 到本地目标分支，并从目标 worktree 合并。用于明确要求本地集成；仅创建提交使用 git-commit。\n---\n\n# Worktree Rebase/Merge 工作流\n\n将当前 checkout 视为源：必要时创建任务分支并提交，rebase 到目标分支，\n再从目标分支的 worktree 合并。源与目标相同时只提交，不 rebase 或 merge。\n\n## 依赖与授权\n\n完整交付依赖同级完整安装的 [`git-commit`](../git-commit/SKILL.md)，复用其提交、\n[统一分支命名](../git-commit/references/branch-naming.md)和已有提交回执能力。\n依赖缺失时可报告已知事实，但无法完成 helper 预检，在任何 Git 写入前停止。\n\n本 Skill 只在用户明确要求本地集成时执行 Git 写入。仅预览或只读请求不创建分支/\nworktree、不暂存、提交、rebase 或 merge。除非用户明确要求，不 fetch、pull 或 push。\n\n## Git 状态保护\n\n- 开始前确认允许路径、提交范围、用户限制，以及源/目标的 HEAD、索引、工作树、\n  worktree 占用和进行中操作。\n- Git 写操作串行执行；每次写入前复验相关状态，写入后确认结果符合预期。\n- rebase 前冻结源提交范围与目标 OID；rebase 后核对改写结果。merge 前确认源干净、\n  目标仍为冻结 OID，且目标 worktree 没有漂移。\n- 不使用 reset、强制移动 ref、stash 或 clean，不切换用户其他 checkout 的分支。\n- 发现非预期漂移、未解冲突、范围不一致、不能安全处理的语义冲突或权限拒绝时，\n  保留现场并停止后续写入。\n\n## 主流程\n\n1. 读取 [集成协议](references/integration-workflow.md)，使用其只读 helper 收集稳定的源/目标事实。\n2. 用户指定目标时使用该分支；否则按集成协议实时解析远程默认分支。目标或 remote\n   有歧义、无法证明实时默认分支或本地目标不存在时，在写入前停止并请用户指定。\n3. detached HEAD 按集成协议挂接到不覆盖现有 ref 的任务分支。没有 staged、unstaged、\n   untracked 或相对目标的提交时，不创建空分支。\n4. 源与目标相同时，只使用 `git-commit` 完成提交和回执。\n5. 其他情况先用 `git-commit` 提交获准的源变更，要求源 worktree 干净；再检查完整\n   `<target>..<source>` 提交和路径范围，执行 `git rebase <target>` 并验证改写结果。\n6. 在干净的目标 worktree 执行 `git merge <source>`。没有目标 worktree 时，在仓库外创建临时\n   worktree，成功合并后删除；冲突或失败时保留供恢复。\n7. 读取 [集成回执](references/reporting.md)，报告真实分支、OID、worktree、rebase/merge、工作树和\n   Push 状态；单提交或多提交统计复用 `git-commit` 的回执契约。\n\n## 完成与停止条件\n\n直接提交模式在 `git-commit` 完成时结束。普通集成只有在源已成功 rebase、目标从冻结\nOID 按预期合并、源与目标最终状态已验证且回执完整时才算完成。目标只有脏\nworktree 时，允许先完成源提交，然后在 rebase/merge 前暂停；恢复步骤见集成协议。\n",".agents/skills/code-simplifier/SKILL.md":"---\nname: code-simplifier\ndescription: 在不改变行为的前提下简化或重构已有代码。用于明确要求清理、去重或提高可读性；查找缺陷使用 review。\n---\n\n<!--\nhttps://github.com/getsentry/skills/blob/main/plugins/sentry-skills/skills/code-simplifier/SKILL.md\n-->\n\n<!--\nBased on Anthropic's code-simplifier agent:\nhttps://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md\n-->\n\n# 代码简化\n\n保持功能不变，简化代码并提高可读性。优先处理真实的重复、嵌套和间接层，不为减少行数牺牲\n清晰度或有意义的抽象。\n\n## 范围与授权\n\n- 默认只处理用户指定的范围或近期改动；扩大范围需要用户授权。\n- 本 Skill 不做缺陷审查。用户要求查找 bug、回归或风险时使用 `review`；简化中发现疑似缺陷时不顺手改变行为。\n- 实际修改、验证和交付遵循当前请求与仓库规则；调用本 Skill 不自动授权写入或外部操作。\n\n## 简化要求\n\n- 先理解调用方、测试、配置和数据格式；保持功能、输出、公开 API、命名、兼容性、序列化、\n  错误语义和用户可见文本不变。\n- 保留必要的错误处理、边界行为、状态转换，以及隔离副作用和表达领域概念的抽象。\n- 遵循目标项目、语言、框架和运行时的现有约定，不把某个平台的规则套用到其他项目。\n- 合并重复逻辑，减少无用嵌套；使用明确命名和控制流，避免嵌套三元或隐藏副作用的密集单行。\n- 职责相关的逻辑放在一起，不强行合并无关职责。注释解释意图、约束和非显然原因，不复述代码。\n\n## 工作方式\n\n识别近期改动及必要上下文，选择保持行为不变的最小改法。在已有授权内应用修改并执行相称验证，\n报告重要变化与未验证部分。没有明确收益时保留现有实现。\n\n## 语言和平台专项规则\n\n只加载目标代码对应的 reference：\n\n- Electron、TypeScript、React、IPC、preload 或 renderer：\n  [Electron/TypeScript 专项规则](references/electron-typescript.md)。\n- Swift、SwiftUI 或 Xcode：[Swift/Xcode 专项规则](references/swift-xcode.md)。\n","AGENTS.md":"# AGENTS.md\n\nEasydict 是一款 macOS 词典和翻译应用，支持查词、文本翻译、划词翻译和 OCR 截图翻译。\n\n`AGENTS.md` 是 Agent 的唯一任务入口；详细规则只在对应专题文档维护。\n\n## 任务模式\n\n### 计划模式\n\n- 用户要求方案、分析、解释或评估时，只读取和检查现状并给出答复，不修改文件、Git 或外部服务。\n\n### 执行模式\n\n用户要求修改、修复、更新、实现或执行时，按以下顺序完成任务：\n\n1. **执行前**：首次写入前读取任务路由要求的专题规则；任何可能产生仓库差异的任务都必须读取\n   `exec-plans/README.md` 与 `histories/README.md`，并按其规则判断 plan 和 history。\n2. **实现与验证**：完成范围内的修改并运行风险匹配的验证；失败时修复并重新验证。\n3. **Review**：生产代码、复杂逻辑、跨模块或高风险变更在验证通过后使用\n   [`review`](.agents/skills/review/SKILL.md) 技能审查；修复有效 finding 后重新验证和审查。\n   纯文档及简单低风险变更除外。\n4. **交付**：更新 history，完成并归档已有 plan；必要验证和适用的 Review 通过后自动创建本地\n   提交，用户明确要求不提交或没有差异时除外。\n\n### 通用规则\n\n- 用户可能会出错；发现用户有明显错误或决策冲突时，应明确指出并说明原因。\n- 无法确认修改授权时保持只读；从计划模式转入执行模式后，从“执行前”开始。\n- 用户的禁止、范围和顺序要求优先；push、创建 Pull Request、发布及其他外部写入仅在用户明确\n  要求时执行。\n- 回复使用用户当前请求的语言；已有文档保持原语言；代码标识、API 名称、命令、路径、品牌名称\n  和固定输出契约保留原文。\n- 现行规则文档单一职责，跨职责使用链接，不复制条款；文档使用相对仓库路径，\n  不提交机器本地绝对路径。\n- 历史记录与设计文档只在被当前任务明确采用时才构成约束。\n\n## 任务路由\n\n- 只读取当前任务需要的专题规则。\n- Git 分支命名：统一遵循\n  [`git-commit` 分支命名规范](.agents/skills/git-commit/references/branch-naming.md)。\n- 构建、测试、工程文件与资源、Xcode 验证：[`build-and-test.md`](docs/agents/build-and-test.md)。\n- 跨语言代码质量、Swift、Objective-C、SwiftUI、API 和本地化：\n  [`coding-guidelines.md`](docs/agents/coding-guidelines.md)。\n- 计划与 history 记录：[`exec-plans/README.md`](docs/exec-plans/README.md) 与\n  [`histories/README.md`](docs/histories/README.md)。\n- 参考资料与外部证据：[`references/README.md`](docs/references/README.md)。\n- 外部 Skills 和同步边界：[`skills.md`](docs/agents/skills.md)。\n- 产品代码、跨功能行为或模块边界：\n  [`application-architecture.md`](docs/design-docs/application-architecture.md)。\n- 公共使用或贡献者文档：[`en/zh`](docs/user-docs/)。\n","docs/references/README.md":"# Agent 规则参考\n\n本目录保存长期使用的外部来源证据。参考资料只提供证据，不定义 Easydict 的执行规则；\nSkills 的来源基线与同步命令由 [`docs/agents/skills.md`](../agents/skills.md) 统一维护。\n\n## 当前参考\n\n- [`astra-agent-guidance.md`](astra-agent-guidance.md)：保留 Astra 指令适配的历史来源。\n",".agents/skills/fireworks-tech-graph/SKILL.md":"---\nname: fireworks-tech-graph\ndescription: >-\n  Create precise SVG technical diagrams, export PNG or offline HTML, and animate\n  supported semantic SVGs to GIF. Use for architecture, UML, agent, cloud or\n  workflow diagrams; not photos, raster art or statistical charts.\n---\n\n# Fireworks Tech Graph\n\nOne portable Agent Skill for Codex and Claude Code. SVG is the canonical artifact;\nPNG, offline HTML and supported GIF motion are output routes. Preserve requested\nlabels, topology and meaning; a successful command is not a visual quality verdict.\n\n## Locate and select\n\nResolve the directory containing this file as `SKILL_ROOT`. Use\n`${CLAUDE_SKILL_DIR}` in Claude Code or the absolute directory in Codex's loaded\nskill metadata. Do not assume cwd or a previous shell variable persists.\n\nUse the installed version for the task. Run `version` for source/version questions\nand `doctor` when diagnosing a missing renderer, font or dependency; do not make\ninstallation, updates or a complete test suite prerequisites for every diagram.\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" version\n```\n\n- Honor the user's diagram type, content and style; choose sensible reversible\n  details from the brief. Ask only for a material missing engineering fact or\n  a choice the user explicitly reserved. A request to draw includes local rendering.\n- Styles 1–7 and 9–12 have JSON generators. Style 8 (Dark Luxury) remains\n  AI-authored SVG: use its style reference, then the same validation/export gates.\n- Default to Style 1 Flat Icon when no user/workspace preference applies. Load the\n  actual matching file from [the style matrix](references/style-diagram-matrix.md).\n  Read other styles only for a requested comparison.\n- Styles 9–12 default to C4, cloud, event and observability semantic contracts.\n  Validate facts before layout; do not invent responsibilities, protocols or metrics.\n- Adapt an existing valid SVG directly when appropriate. JSON generation is not\n  required for every edit. Use [diagram/layout guidance](references/diagram-layout-reference.md)\n  and [icons](references/icons.md) only for the relevant type or symbols.\n\n## Generate and check\n\nReuse the user's current brief and artifact; an extra planning document is optional.\nFor JSON work, select `text_policy: \"strict\"` when all labels must be visible exactly.\nThe compatible `report` default preserves full labels in SVG metadata and reports\nany visible truncation. Resolve that warning before claiming complete exact text.\nFor polished work apply the [composition contract](references/composition-quality-contract.md).\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" validate architecture input.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" render architecture input.json diagram.svg --report layout.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" check diagram.svg\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" export-png diagram.svg diagram.png --width 1920\n```\n\n`check` validates SVG identity, marker references, generic collisions, semantic\ngeometry and composition. Inspect the report's typography and palette scope;\nheuristic text widths do not replace inspecting the actual rendered font.\nUse [visual quality guidance](references/visual-quality.md) for readability and\nstyle-specific refinements. Keep one semantic connector per business edge.\n\n## Additional outputs\n\n- **PNG:** prefer `export-png`, which reads root canvas dimensions, limits output\n  size, writes atomically and reads the PNG dimensions back. Alternate renderer\n  details are in [PNG export](references/png-export.md).\n- **HTML:** `fireworks.py export-html diagram.svg diagram.html`. One sanitized\n  offline file provides pan/zoom, source copy and static image downloads.\n- **GIF:** “Generate a GIF”, “Animate this diagram”, “生成 GIF”, “制作 GIF” and\n  “让这张图动起来” select the existing semantic SVG's motion route. Styles 1–12 are enabled\n  for the documented scene contracts; arbitrary same-style topologies are not\n  promised. Load [motion effects](references/motion-effects.md) and run\n  `fireworks.py animate diagram.svg diagram.gif`. Default is 960px, 20fps, 5.75s\n  with the `+2s-settled-flow` preset and a `.motion.json` report. Historical\n  `user-approved` fields describe maintainer-reviewed presets, not authorization\n  from the current user to publish, spend or send data.\n\n## Verify the requested outcome\n\nInspect the final PNG at intended reading size when image viewing is available:\ncheck text completeness, contrast, font substitution, hierarchy, spacing, clipping,\narrow direction, crossings and labels. Preserve style palette and material while\nfixing defects. Reuse an unchanged reviewed render; do not keep adding tests or\npolish after acceptance passes. If viewing is unavailable, explicitly mark the\nvisual check skipped and do not claim visual correctness.\n\nAfter a failed check, use its element IDs and geometry to make a focused repair;\nchange the approach after two unchanged failures. Widen/split an overfull diagram\ninstead of hiding required copy or endlessly shrinking type. Do not silently\nweaken semantic or composition constraints to obtain a pass.\n\nComplete every requested local output and its applicable checks, then report file\npaths, dimensions, visual review and residual limitations. A first SVG does not\ncomplete a requested PNG/GIF/HTML package. Publication or remote delivery requires\nits own scope-matching authorization; existing authorization is not requested twice.\n",".agents/skills/review-pr/SKILL.md":"---\nname: review-pr\ndescription: 审查 GitHub PR 的准确 head/base diff、关联 issue、CI 和 review threads，交付前刷新。创建 PR 使用 submit-pr；本地审查使用 review。\n---\n\n# GitHub PR 审查\n\n本 Skill 编排 GitHub PR 的身份、问题背景、本地准备、CI、线程和最终刷新。\n语义与正确性审查使用配套 `review`；审查本地工作树、提交、范围、文件或模块时直接使用\n`review`，不启动 PR 编排。\n\n`<review-pr-skill-dir>` 指实际加载的本 Skill 目录。优先从当前 Skill 清单定位 `review`，\n未提供位置时才检查 [同级安装位置](../review/SKILL.md)。开始 Git 准备前确认依赖可读；\n缺失时可收集获准的只读证据，但不得声称完整代码审查已完成。\n\n审查分支命名依赖同级完整安装的 `git-commit`，只使用其\n[统一命名规范与工具](../git-commit/references/branch-naming.md)；缺失时不执行本地 Git 准备，可继续远程证据审查。\n\n## 模式与授权\n\n- **默认本地审查**：明确请求审查 PR 时，包含必要的 remote 添加、fetch、安全分支创建或\n  fast-forward、upstream 设置和 checkout。\n- **隔离 worktree**：只在用户明确要求 worktree、并行或并发 review 时新建；本人 PR 分支\n  已在其他 worktree 打开时可复用其干净 checkout，后续命令使用回执路径。\n- **latest-base 集成审查**：只在用户明确要求更新最新 base、解决冲突或审查集成结果时使用。\n- **不改变 Git 状态**：遵守用户的只读或不切分支限制，改用可访问的准确远程 diff、源码和评论；\n  证据不足时报告限制。\n\n上述本地准备授权不包含产品修复、push、发布评论、approve、删除评论或关闭 PR。\n线程 resolve 需要单独的远程操作授权和当前远程证据。仅方案或解释不执行 Git 准备。\n\n## 核心安全边界\n\n- 默认本地模式从 `git status --short --branch` 开始；当前 checkout 有未提交变更时，\n  在切换分支前停止。显式 worktree 模式不得改变原 checkout，因此可从脏状态继续。\n- 多阶段 review 必须把首次准备回执中的 `checkout.branch` 作为后续阶段的显式输入；使用\n  helper 的 `--reuse-branch` 复验该分支、HEAD、upstream 和 worktree 占用，失败时停止，\n  不静默改选另一个分支。回执记录实际 helper 路径、入口 SHA 和准备依赖组合指纹，\n  按本地准备协议复验版本漂移。\n- 不覆盖、删除、重命名、rebase、reset、强制更新、stash 或丢弃本地分支、worktree 或变更。\n- 普通审查必须对应 PR 元数据的准确 `headRefOid` 和真实 base/merge-base diff；\n  不用 detached HEAD、已 fetch ref 或无关 `origin` 绕过身份检查。\n- 本人 PR 优先复用已核实身份的同名分支及等价 upstream。相同或落后的分支安全准备到远程\n  head；领先时保留额外提交，按冻结 Git 对象审查，不新建 review 分支。回执区分 checkout\n  与 review SHA；源码上下文和验证归属遵循 [证据协议](references/evidence-workflow.md)。\n  本人分支分叉或 upstream 不匹配时停止；其他作者仍按本地准备协议处理 collision fallback。\n- `mergeable: CONFLICTING`、`mergeStateStatus: DIRTY` 或 base 领先不构成 latest-base 授权。\n- 除非用户明确要求，审查、准备、冲突处理和线程维护都不 push。审查后保留准备好的\n  分支或 worktree，不自动删除。\n\n## 审查流程\n\n1. 读取 [证据收集与刷新](references/evidence-workflow.md)，收集并冻结 PR 身份、head/base、\n   [问题背景](references/problem-review.md)、checks 和完整 threads/replies。\n2. 允许 Git 准备时读取 [本地准备与 latest-base](references/local-preparation.md)；只读模式直接使用准确远程证据。\n3. 将 PR 目标、关键验收条件、冻结 base/head 和完整 raw diff 交给 `review`，检查需求满足程度、\n   实现方式与代码正确性。\n4. 评估每个开放 thread，包括 outdated、bot 和所有回复。已有评论只放在对应评论条目，\n   不重复列为独立 finding。需要 resolve 且已获授权时才读取\n   [线程维护](references/thread-resolution.md)。\n5. 如任务包含冲突处理、验证或本地提交，先完成这些获准操作；结论前按证据协议立即刷新 PR、\n   选定问题证据、checks 和完整 threads/replies，处理所有新活动。\n6. 生成最终回复前重新读取 [PR 审查报告](references/reporting.md)；此前已读过或上下文摘要中\n   提及过，均不替代此次读取。按该协议组织报告与必要的提交回执，并对实际回复草稿完成\n   [交付检查](references/reporting.md#交付检查) 后再输出。\n\n大 PR 或需要复用快照文件时才读取\n[快照传输协议](references/snapshot-protocol.md)；复杂复审报告可再读取 [完整示例](references/report-example.md)。\n\n## 完成与停止条件\n\n只有准确 remote head/base 与 merge-base、完整 diff、目标/问题证据、CI 状态、全部开放 threads\n及回复均已审查，最终刷新没有未检查活动，且最终报告通过交付检查时，才算完成。最终刷新发现 head/base、\n需求或线程变化时，根据影响更新 checkout、范围和判断，处理后再刷新一次。\n\n引用有歧义、准备会覆盖本地状态、依赖或必需证据不可用、身份/内容持续漂移、冲突需要产品判断，\n或最终刷新失败时，保留当前快照和本地状态，报告已审查 SHA 与未覆盖缺口；不无限重试。\n受阻或未完成报告仍遵循报告协议，保留内容介绍及验证限制；证据不足的字段明确标注缺失，\n不为满足格式编造内容，也不将报告格式完整视为审查已完成。\n",".agents/skills/git-commit/SKILL.md":"---\nname: git-commit\ndescription: 起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付；分支集成使用 worktree-rebase-merge，不 push。\n---\n\n# Git 提交流程\n\n以经范围校验的 staged diff 创建本地提交。只读预览可使用尚未暂存的候选，\n但必须标为草稿。`<git-commit-skill-dir>` 指实际加载的本 Skill 目录。\n\n## 任务与边界\n\n| 任务 | 结果 |\n| --- | --- |\n| 起草或预览 | 根据 staged 内容或获准候选返回草稿，不改变 Git。 |\n| 创建提交 | 在有效提交授权下完成范围判断、预览、暂存、提交和校验。 |\n| 汇报已有提交 | 读取指定提交或范围的真实消息与统计，不启动新提交。 |\n| 为组合 Skill 推导分支名 | 只返回合法候选，不暂存、提交或创建分支。 |\n\n本 Skill 不运行 `git push`、rebase 或 merge。调用方传入真实任务、允许范围和已有证据，\n不需要采用本 Skill 的内部字段。\n\n## 选择模式\n\n- **只命名或汇报已有提交**：只完成该任务；未指定提交对象时先明确对象。\n- **仅预览、起草或只读**：不暂存、不创建消息文件、不提交。已有 staged 内容时\n  只用其起草；索引为空时使用获准范围内的候选。\n- **确认模式**：展示完整预览并等待批准。未单独获准时，确认前不暂存。\n- **默认模式**：明确调用本 Skill 或宿主已授权自动本地提交时，展示预览后直接提交。\n\n用户的禁止、范围、确认和暂缓要求持续有效；“不提交”不自动授权暂存。\n\n## 范围与 Git 状态保护\n\n1. 记录调用目录，使用 `git rev-parse --show-toplevel` 定位仓库根目录；相对路径先按原调用目录解析。\n2. 读取 HEAD、分支、status、最近提交、staged/unstaged raw diff 和相关 untracked 内容，\n   区分用户已有变更与本任务候选。\n3. 准备写入时复验 HEAD、索引、候选路径和内容。发现冲突、归属不明或非预期漂移时\n   停止，不覆盖、清理或自动 amend。\n4. 获准后只执行一次选定的暂存动作，并比较 staged paths 与 raw patch 是否与候选完全一致。\n   不一致时停止，不通过第二次 `git add` 修正范围；不创建空提交。\n\n| 情况 | 暂存动作 |\n| --- | --- |\n| 已有索引 | 不运行 `git add`，只提交既有 staged 内容；超出请求范围时停止。 |\n| 显式交付、空索引、限定路径 | 一次 `git add -- <selected-paths>`。 |\n| 显式交付、空索引、未限定路径 | 未禁止暂存且非 staged-only 时，在仓库根目录一次 `git add .`。 |\n| 宿主授权自动提交 | 一次 `git add -- <expected-commit-paths>`，禁止 `git add .`。 |\n\n宿主自动提交还必须有首次写入前的 HEAD、初始 Git 状态、允许路径和内容归属证据。\n初始索引非空、唯一暂存前出现非 Agent staged 内容、验证失败或仍有暂缓要求时，\n停止自动提交。这不反向限制用户已明确授权的 staged-only 提交。\n\n## 提交主流程\n\n1. 起草提交时读取 [提交信息契约](references/commit-message.md)。在主对话以 `text` 代码围栏展示\n   完整、将要使用的消息；仅预览到此结束，确认模式等待批准。\n2. 完成唯一暂存并复验后，将与预览完全一致的内容写入本任务专用消息文件。\n   候选或消息变化时重新审核和展示；用户要求确认时不复用旧批准。\n3. 使用 Skill 内校验器检查消息，再运行 `git commit -F <message-file>`。\n4. 以新建完整 commit hash 执行提交后消息一致性校验。校验失败时保留消息文件，\n   不 amend，不声称交付完成。\n5. 校验通过后删除本任务消息文件，读取 [统计与提交回执](references/reporting.md)，根据 Git 真实结果交付。\n\n任何技能或 Agent 需要拟定、分类或校验分支名称时，读取\n[统一分支命名](references/branch-naming.md) 并使用其中工具，不进入提交流程。\n\n## 完成与停止条件\n\n只有范围与 staged raw patch 一致、必要验证通过、Git 真实消息与预览一致，且最终\n状态和统计已核对时，才算创建提交完成。范围无法证明、出现冲突或漂移、权限被拒、\n提交前/后校验失败、hook 改写结果或统计不一致时保留现场并报告具体阶段，\n不自动扩大暂存、重试写入、amend 或清理用户状态。\n","docs/agents/build-and-test.md":"# 构建与测试\n\n## 测试与验证原则\n\n- 只有用户在当前任务中明确要求添加测试，才允许新增或扩写测试，包括测试文件、suite、用例、断言、\n  fixture、mock、helper 和仅为测试引入的生产代码 hook；修复 bug、新增功能、修改复杂逻辑和回归\n  风险都不构成授权。\n- 未获授权时可以运行和分析现有测试，认为需要补充时只在结果中提建议；获授权后优先更新现有用例，\n  遵循最小范围，不为测试简单实现增加生产抽象、mock 或 hook。\n- 新增服务时，必须新增该服务专属的验证测试文件。服务验证可以依赖实现者本机的 CLI、登录态、密钥或\n  其他配置；实现者必须在自己的开发环境中运行并通过该验证。此类环境依赖测试不要求每位开发者或 CI\n  持续运行，应通过非默认 test plan 或 Xcode 的精确测试选择运行，且不得将其误认为默认离线回归测试。\n- 优先运行直接覆盖变更风险的检查，影响范围不明确时再扩大；只修改已授权的测试与 fixture，不把\n  未运行、失败或环境阻塞的检查写成通过。\n\n## 测试与工程文件组织\n\n- 测试目录按领域对应源码模块，Swift 测试以 `Easydict/Swift/` 为映射根，例如 `Service/OpenAI/`\n  对应 `EasydictTests/Service/OpenAI/`；跨模块测试按主要业务归属放置，现有目录按任务范围渐进调整。\n- 每个测试文件聚焦一个主要被测类型或行为领域，最多声明一个 `@Suite`；接近文件规模限制时按职责\n  拆分 suite 和 fixture，保留原有覆盖和标签、actor 隔离、共享状态恢复、串行边界。独立 suite 的\n  `.serialized` 不提供跨 suite 串行保证。\n- 单文件 helper 保持局部，同领域共享工具就近放置，跨目录复用的 fixture 或工具放入\n  `EasydictTests/Support/<Domain>/`，资源放入对应测试资源目录。\n- 新增、移动或删除由 Xcode 管理的源码文件或运行时资源时，同步\n  `Easydict.xcodeproj/project.pbxproj` 中的 group、文件和 build phase 引用，测试文件同时同步测试\n  target 的 Sources，删除文件不保留悬空引用。仓库治理 Markdown、plan、history、skill、参考资料\n  和 `docs/` 下的公共 Markdown 不需要工程引用，除非作为运行时资源发布。\n\n## 选择验证\n\n根据变更需要证明的结果选择最小且充分的验证，不按变更行数设置硬阈值。\n\n- 纯治理 Markdown、plan、history、注释，以及不进入 Xcode 构建图的脚本或配置，只运行相应静态\n  检查：Markdown 的格式、相对链接、锚点和规则语义检查。\n- 生产源码、工程/workspace、target、build setting、build phase、依赖、entitlement、Info.plist\n  或运行时资源发生实质变化时，运行覆盖受影响配置的 `xcodebuild build`；修复 bug、修改可测试\n  行为或测试源码及其 target 引用时，运行覆盖相应行为、suite 或方法的 `xcodebuild test`。\n- `xcodebuild build` 只证明构建集成；相同配置的成功测试已覆盖编译，不重复运行 build，测试未覆盖\n  的 Release、Archive、签名或其他配置另行验证。重复运行兼容的测试时先 `build-for-testing`，再\n  用 `test-without-building`，前者本身不构成测试通过证据。\n- 每次变更运行 `git diff --check`；对变更的 `.xcstrings` 或 JSON 运行 `jq -e .`，对变更的 Shell\n  脚本运行 `bash -n`。\n- 并发判据是构建目录而不是构建入口：同一 workspace 与同一 DerivedData 的并发构建，无论来自\n  Xcode IDE 还是 `xcodebuild`，都会互相破坏增量状态和 build database；DerivedData 不同可以并行。\n- 因此 agent 运行 `xcodebuild` 时始终显式指定 `-derivedDataPath`，指向按 checkout 派生、与 Xcode\n  默认目录不相交的 `~/Library/Developer/Xcode/DerivedData/Easydict-Agent/<checkout-id>`；损坏时\n  删除该目录重建，不切换到 Xcode 默认 DerivedData。\n- `xcodebuild test` 会启动同 bundle id 的 `Easydict-debug.app` 测试宿主，不要与 Xcode 的 Run/Test\n  同时运行；构建与 Archive 不受此限制。\n## 常用命令\n\n```bash\n# 每个 checkout 一个 agent 专用 DerivedData，与 Xcode 默认目录互不相交\nset -o pipefail\ncheckout_id=\"$(git rev-parse --show-toplevel | sed -e \"s|^$HOME/||\" -e 's|^\\.||' -e 's|/|_|g')\"\nagent_dd=\"$HOME/Library/Developer/Xcode/DerivedData/Easydict-Agent/$checkout_id\"\n\n# 构建\nxcodebuild build \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 运行测试\nxcodebuild test \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 构建可复用的测试产物\nxcodebuild build-for-testing \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 复用已构建产物运行指定 suite 或方法，-only-testing 支持 <Suite> 与 <Suite>/<test>\nxcodebuild test-without-building \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" \\\n  -only-testing:EasydictTests/UtilityFunctionsTests | xcbeautify\n```\n\n`xcbeautify` 依赖 `pipefail` 才能保留 `xcodebuild` 的真实退出状态。重建时只删除当前 checkout 的\n`agent_dd`，不动 Xcode 默认目录或其他 checkout。\n","docs/agents/skills.md":"# Subagent: skills\n\nPath: `docs/agents/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/skills.md)","docs/agents/swift-xcode.md":"# Subagent: swift-xcode\n\nPath: `docs/agents/swift-xcode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/swift-xcode.md)","docs/agents/testing.md":"# Subagent: testing\n\nPath: `docs/agents/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/testing.md)",".agents/skills/fireworks-tech-graph/package.json":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/package.json)",".agents/skills/fireworks-tech-graph/README.md":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.md)",".agents/skills/fireworks-tech-graph/README.zh.md":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.zh.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.zh.md)",".agents/skills/fireworks-tech-graph/agents/openai.yaml":"# Agents Skill\n\nPath: `.agents/skills/fireworks-tech-graph/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/agents/openai.yaml)",".agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json)",".agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json)",".agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json)",".agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json)",".agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json)",".agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json)",".agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json)",".agents/skills/fireworks-tech-graph/references/icons.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/icons.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/icons.md)",".agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md)",".agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md)",".agents/skills/fireworks-tech-graph/references/style-3-blueprint.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md)",".agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md)",".agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md)",".agents/skills/fireworks-tech-graph/references/style-6-claude-official.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md)",".agents/skills/fireworks-tech-graph/references/style-7-openai.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-7-openai.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-7-openai.md)",".agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md)",".agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md)",".agents/skills/fireworks-tech-graph/scripts/README.md":"# Scripts Skill\n\nPath: `.agents/skills/fireworks-tech-graph/scripts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/scripts/README.md)"},"files":{".agents/skills/worktree-rebase-merge/SKILL.md":"---\nname: worktree-rebase-merge\ndescription: 将当前 worktree 的任务提交 rebase 到本地目标分支，并从目标 worktree 合并。用于明确要求本地集成；仅创建提交使用 git-commit。\n---\n\n# Worktree Rebase/Merge 工作流\n\n将当前 checkout 视为源：必要时创建任务分支并提交，rebase 到目标分支，\n再从目标分支的 worktree 合并。源与目标相同时只提交，不 rebase 或 merge。\n\n## 依赖与授权\n\n完整交付依赖同级完整安装的 [`git-commit`](../git-commit/SKILL.md)，复用其提交、\n[统一分支命名](../git-commit/references/branch-naming.md)和已有提交回执能力。\n依赖缺失时可报告已知事实，但无法完成 helper 预检，在任何 Git 写入前停止。\n\n本 Skill 只在用户明确要求本地集成时执行 Git 写入。仅预览或只读请求不创建分支/\nworktree、不暂存、提交、rebase 或 merge。除非用户明确要求，不 fetch、pull 或 push。\n\n## Git 状态保护\n\n- 开始前确认允许路径、提交范围、用户限制，以及源/目标的 HEAD、索引、工作树、\n  worktree 占用和进行中操作。\n- Git 写操作串行执行；每次写入前复验相关状态，写入后确认结果符合预期。\n- rebase 前冻结源提交范围与目标 OID；rebase 后核对改写结果。merge 前确认源干净、\n  目标仍为冻结 OID，且目标 worktree 没有漂移。\n- 不使用 reset、强制移动 ref、stash 或 clean，不切换用户其他 checkout 的分支。\n- 发现非预期漂移、未解冲突、范围不一致、不能安全处理的语义冲突或权限拒绝时，\n  保留现场并停止后续写入。\n\n## 主流程\n\n1. 读取 [集成协议](references/integration-workflow.md)，使用其只读 helper 收集稳定的源/目标事实。\n2. 用户指定目标时使用该分支；否则按集成协议实时解析远程默认分支。目标或 remote\n   有歧义、无法证明实时默认分支或本地目标不存在时，在写入前停止并请用户指定。\n3. detached HEAD 按集成协议挂接到不覆盖现有 ref 的任务分支。没有 staged、unstaged、\n   untracked 或相对目标的提交时，不创建空分支。\n4. 源与目标相同时，只使用 `git-commit` 完成提交和回执。\n5. 其他情况先用 `git-commit` 提交获准的源变更，要求源 worktree 干净；再检查完整\n   `<target>..<source>` 提交和路径范围，执行 `git rebase <target>` 并验证改写结果。\n6. 在干净的目标 worktree 执行 `git merge <source>`。没有目标 worktree 时，在仓库外创建临时\n   worktree，成功合并后删除；冲突或失败时保留供恢复。\n7. 读取 [集成回执](references/reporting.md)，报告真实分支、OID、worktree、rebase/merge、工作树和\n   Push 状态；单提交或多提交统计复用 `git-commit` 的回执契约。\n\n## 完成与停止条件\n\n直接提交模式在 `git-commit` 完成时结束。普通集成只有在源已成功 rebase、目标从冻结\nOID 按预期合并、源与目标最终状态已验证且回执完整时才算完成。目标只有脏\nworktree 时，允许先完成源提交，然后在 rebase/merge 前暂停；恢复步骤见集成协议。\n",".agents/skills/code-simplifier/SKILL.md":"---\nname: code-simplifier\ndescription: 在不改变行为的前提下简化或重构已有代码。用于明确要求清理、去重或提高可读性；查找缺陷使用 review。\n---\n\n<!--\nhttps://github.com/getsentry/skills/blob/main/plugins/sentry-skills/skills/code-simplifier/SKILL.md\n-->\n\n<!--\nBased on Anthropic's code-simplifier agent:\nhttps://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md\n-->\n\n# 代码简化\n\n保持功能不变，简化代码并提高可读性。优先处理真实的重复、嵌套和间接层，不为减少行数牺牲\n清晰度或有意义的抽象。\n\n## 范围与授权\n\n- 默认只处理用户指定的范围或近期改动；扩大范围需要用户授权。\n- 本 Skill 不做缺陷审查。用户要求查找 bug、回归或风险时使用 `review`；简化中发现疑似缺陷时不顺手改变行为。\n- 实际修改、验证和交付遵循当前请求与仓库规则；调用本 Skill 不自动授权写入或外部操作。\n\n## 简化要求\n\n- 先理解调用方、测试、配置和数据格式；保持功能、输出、公开 API、命名、兼容性、序列化、\n  错误语义和用户可见文本不变。\n- 保留必要的错误处理、边界行为、状态转换，以及隔离副作用和表达领域概念的抽象。\n- 遵循目标项目、语言、框架和运行时的现有约定，不把某个平台的规则套用到其他项目。\n- 合并重复逻辑，减少无用嵌套；使用明确命名和控制流，避免嵌套三元或隐藏副作用的密集单行。\n- 职责相关的逻辑放在一起，不强行合并无关职责。注释解释意图、约束和非显然原因，不复述代码。\n\n## 工作方式\n\n识别近期改动及必要上下文，选择保持行为不变的最小改法。在已有授权内应用修改并执行相称验证，\n报告重要变化与未验证部分。没有明确收益时保留现有实现。\n\n## 语言和平台专项规则\n\n只加载目标代码对应的 reference：\n\n- Electron、TypeScript、React、IPC、preload 或 renderer：\n  [Electron/TypeScript 专项规则](references/electron-typescript.md)。\n- Swift、SwiftUI 或 Xcode：[Swift/Xcode 专项规则](references/swift-xcode.md)。\n","AGENTS.md":"# AGENTS.md\n\nEasydict 是一款 macOS 词典和翻译应用，支持查词、文本翻译、划词翻译和 OCR 截图翻译。\n\n`AGENTS.md` 是 Agent 的唯一任务入口；详细规则只在对应专题文档维护。\n\n## 任务模式\n\n### 计划模式\n\n- 用户要求方案、分析、解释或评估时，只读取和检查现状并给出答复，不修改文件、Git 或外部服务。\n\n### 执行模式\n\n用户要求修改、修复、更新、实现或执行时，按以下顺序完成任务：\n\n1. **执行前**：首次写入前读取任务路由要求的专题规则；任何可能产生仓库差异的任务都必须读取\n   `exec-plans/README.md` 与 `histories/README.md`，并按其规则判断 plan 和 history。\n2. **实现与验证**：完成范围内的修改并运行风险匹配的验证；失败时修复并重新验证。\n3. **Review**：生产代码、复杂逻辑、跨模块或高风险变更在验证通过后使用\n   [`review`](.agents/skills/review/SKILL.md) 技能审查；修复有效 finding 后重新验证和审查。\n   纯文档及简单低风险变更除外。\n4. **交付**：更新 history，完成并归档已有 plan；必要验证和适用的 Review 通过后自动创建本地\n   提交，用户明确要求不提交或没有差异时除外。\n\n### 通用规则\n\n- 用户可能会出错；发现用户有明显错误或决策冲突时，应明确指出并说明原因。\n- 无法确认修改授权时保持只读；从计划模式转入执行模式后，从“执行前”开始。\n- 用户的禁止、范围和顺序要求优先；push、创建 Pull Request、发布及其他外部写入仅在用户明确\n  要求时执行。\n- 回复使用用户当前请求的语言；已有文档保持原语言；代码标识、API 名称、命令、路径、品牌名称\n  和固定输出契约保留原文。\n- 现行规则文档单一职责，跨职责使用链接，不复制条款；文档使用相对仓库路径，\n  不提交机器本地绝对路径。\n- 历史记录与设计文档只在被当前任务明确采用时才构成约束。\n\n## 任务路由\n\n- 只读取当前任务需要的专题规则。\n- Git 分支命名：统一遵循\n  [`git-commit` 分支命名规范](.agents/skills/git-commit/references/branch-naming.md)。\n- 构建、测试、工程文件与资源、Xcode 验证：[`build-and-test.md`](docs/agents/build-and-test.md)。\n- 跨语言代码质量、Swift、Objective-C、SwiftUI、API 和本地化：\n  [`coding-guidelines.md`](docs/agents/coding-guidelines.md)。\n- 计划与 history 记录：[`exec-plans/README.md`](docs/exec-plans/README.md) 与\n  [`histories/README.md`](docs/histories/README.md)。\n- 参考资料与外部证据：[`references/README.md`](docs/references/README.md)。\n- 外部 Skills 和同步边界：[`skills.md`](docs/agents/skills.md)。\n- 产品代码、跨功能行为或模块边界：\n  [`application-architecture.md`](docs/design-docs/application-architecture.md)。\n- 公共使用或贡献者文档：[`en/zh`](docs/user-docs/)。\n","docs/references/README.md":"# Agent 规则参考\n\n本目录保存长期使用的外部来源证据。参考资料只提供证据，不定义 Easydict 的执行规则；\nSkills 的来源基线与同步命令由 [`docs/agents/skills.md`](../agents/skills.md) 统一维护。\n\n## 当前参考\n\n- [`astra-agent-guidance.md`](astra-agent-guidance.md)：保留 Astra 指令适配的历史来源。\n",".agents/skills/fireworks-tech-graph/SKILL.md":"---\nname: fireworks-tech-graph\ndescription: >-\n  Create precise SVG technical diagrams, export PNG or offline HTML, and animate\n  supported semantic SVGs to GIF. Use for architecture, UML, agent, cloud or\n  workflow diagrams; not photos, raster art or statistical charts.\n---\n\n# Fireworks Tech Graph\n\nOne portable Agent Skill for Codex and Claude Code. SVG is the canonical artifact;\nPNG, offline HTML and supported GIF motion are output routes. Preserve requested\nlabels, topology and meaning; a successful command is not a visual quality verdict.\n\n## Locate and select\n\nResolve the directory containing this file as `SKILL_ROOT`. Use\n`${CLAUDE_SKILL_DIR}` in Claude Code or the absolute directory in Codex's loaded\nskill metadata. Do not assume cwd or a previous shell variable persists.\n\nUse the installed version for the task. Run `version` for source/version questions\nand `doctor` when diagnosing a missing renderer, font or dependency; do not make\ninstallation, updates or a complete test suite prerequisites for every diagram.\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" version\n```\n\n- Honor the user's diagram type, content and style; choose sensible reversible\n  details from the brief. Ask only for a material missing engineering fact or\n  a choice the user explicitly reserved. A request to draw includes local rendering.\n- Styles 1–7 and 9–12 have JSON generators. Style 8 (Dark Luxury) remains\n  AI-authored SVG: use its style reference, then the same validation/export gates.\n- Default to Style 1 Flat Icon when no user/workspace preference applies. Load the\n  actual matching file from [the style matrix](references/style-diagram-matrix.md).\n  Read other styles only for a requested comparison.\n- Styles 9–12 default to C4, cloud, event and observability semantic contracts.\n  Validate facts before layout; do not invent responsibilities, protocols or metrics.\n- Adapt an existing valid SVG directly when appropriate. JSON generation is not\n  required for every edit. Use [diagram/layout guidance](references/diagram-layout-reference.md)\n  and [icons](references/icons.md) only for the relevant type or symbols.\n\n## Generate and check\n\nReuse the user's current brief and artifact; an extra planning document is optional.\nFor JSON work, select `text_policy: \"strict\"` when all labels must be visible exactly.\nThe compatible `report` default preserves full labels in SVG metadata and reports\nany visible truncation. Resolve that warning before claiming complete exact text.\nFor polished work apply the [composition contract](references/composition-quality-contract.md).\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" validate architecture input.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" render architecture input.json diagram.svg --report layout.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" check diagram.svg\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" export-png diagram.svg diagram.png --width 1920\n```\n\n`check` validates SVG identity, marker references, generic collisions, semantic\ngeometry and composition. Inspect the report's typography and palette scope;\nheuristic text widths do not replace inspecting the actual rendered font.\nUse [visual quality guidance](references/visual-quality.md) for readability and\nstyle-specific refinements. Keep one semantic connector per business edge.\n\n## Additional outputs\n\n- **PNG:** prefer `export-png`, which reads root canvas dimensions, limits output\n  size, writes atomically and reads the PNG dimensions back. Alternate renderer\n  details are in [PNG export](references/png-export.md).\n- **HTML:** `fireworks.py export-html diagram.svg diagram.html`. One sanitized\n  offline file provides pan/zoom, source copy and static image downloads.\n- **GIF:** “Generate a GIF”, “Animate this diagram”, “生成 GIF”, “制作 GIF” and\n  “让这张图动起来” select the existing semantic SVG's motion route. Styles 1–12 are enabled\n  for the documented scene contracts; arbitrary same-style topologies are not\n  promised. Load [motion effects](references/motion-effects.md) and run\n  `fireworks.py animate diagram.svg diagram.gif`. Default is 960px, 20fps, 5.75s\n  with the `+2s-settled-flow` preset and a `.motion.json` report. Historical\n  `user-approved` fields describe maintainer-reviewed presets, not authorization\n  from the current user to publish, spend or send data.\n\n## Verify the requested outcome\n\nInspect the final PNG at intended reading size when image viewing is available:\ncheck text completeness, contrast, font substitution, hierarchy, spacing, clipping,\narrow direction, crossings and labels. Preserve style palette and material while\nfixing defects. Reuse an unchanged reviewed render; do not keep adding tests or\npolish after acceptance passes. If viewing is unavailable, explicitly mark the\nvisual check skipped and do not claim visual correctness.\n\nAfter a failed check, use its element IDs and geometry to make a focused repair;\nchange the approach after two unchanged failures. Widen/split an overfull diagram\ninstead of hiding required copy or endlessly shrinking type. Do not silently\nweaken semantic or composition constraints to obtain a pass.\n\nComplete every requested local output and its applicable checks, then report file\npaths, dimensions, visual review and residual limitations. A first SVG does not\ncomplete a requested PNG/GIF/HTML package. Publication or remote delivery requires\nits own scope-matching authorization; existing authorization is not requested twice.\n",".agents/skills/review-pr/SKILL.md":"---\nname: review-pr\ndescription: 审查 GitHub PR 的准确 head/base diff、关联 issue、CI 和 review threads，交付前刷新。创建 PR 使用 submit-pr；本地审查使用 review。\n---\n\n# GitHub PR 审查\n\n本 Skill 编排 GitHub PR 的身份、问题背景、本地准备、CI、线程和最终刷新。\n语义与正确性审查使用配套 `review`；审查本地工作树、提交、范围、文件或模块时直接使用\n`review`，不启动 PR 编排。\n\n`<review-pr-skill-dir>` 指实际加载的本 Skill 目录。优先从当前 Skill 清单定位 `review`，\n未提供位置时才检查 [同级安装位置](../review/SKILL.md)。开始 Git 准备前确认依赖可读；\n缺失时可收集获准的只读证据，但不得声称完整代码审查已完成。\n\n审查分支命名依赖同级完整安装的 `git-commit`，只使用其\n[统一命名规范与工具](../git-commit/references/branch-naming.md)；缺失时不执行本地 Git 准备，可继续远程证据审查。\n\n## 模式与授权\n\n- **默认本地审查**：明确请求审查 PR 时，包含必要的 remote 添加、fetch、安全分支创建或\n  fast-forward、upstream 设置和 checkout。\n- **隔离 worktree**：只在用户明确要求 worktree、并行或并发 review 时新建；本人 PR 分支\n  已在其他 worktree 打开时可复用其干净 checkout，后续命令使用回执路径。\n- **latest-base 集成审查**：只在用户明确要求更新最新 base、解决冲突或审查集成结果时使用。\n- **不改变 Git 状态**：遵守用户的只读或不切分支限制，改用可访问的准确远程 diff、源码和评论；\n  证据不足时报告限制。\n\n上述本地准备授权不包含产品修复、push、发布评论、approve、删除评论或关闭 PR。\n线程 resolve 需要单独的远程操作授权和当前远程证据。仅方案或解释不执行 Git 准备。\n\n## 核心安全边界\n\n- 默认本地模式从 `git status --short --branch` 开始；当前 checkout 有未提交变更时，\n  在切换分支前停止。显式 worktree 模式不得改变原 checkout，因此可从脏状态继续。\n- 多阶段 review 必须把首次准备回执中的 `checkout.branch` 作为后续阶段的显式输入；使用\n  helper 的 `--reuse-branch` 复验该分支、HEAD、upstream 和 worktree 占用，失败时停止，\n  不静默改选另一个分支。回执记录实际 helper 路径、入口 SHA 和准备依赖组合指纹，\n  按本地准备协议复验版本漂移。\n- 不覆盖、删除、重命名、rebase、reset、强制更新、stash 或丢弃本地分支、worktree 或变更。\n- 普通审查必须对应 PR 元数据的准确 `headRefOid` 和真实 base/merge-base diff；\n  不用 detached HEAD、已 fetch ref 或无关 `origin` 绕过身份检查。\n- 本人 PR 优先复用已核实身份的同名分支及等价 upstream。相同或落后的分支安全准备到远程\n  head；领先时保留额外提交，按冻结 Git 对象审查，不新建 review 分支。回执区分 checkout\n  与 review SHA；源码上下文和验证归属遵循 [证据协议](references/evidence-workflow.md)。\n  本人分支分叉或 upstream 不匹配时停止；其他作者仍按本地准备协议处理 collision fallback。\n- `mergeable: CONFLICTING`、`mergeStateStatus: DIRTY` 或 base 领先不构成 latest-base 授权。\n- 除非用户明确要求，审查、准备、冲突处理和线程维护都不 push。审查后保留准备好的\n  分支或 worktree，不自动删除。\n\n## 审查流程\n\n1. 读取 [证据收集与刷新](references/evidence-workflow.md)，收集并冻结 PR 身份、head/base、\n   [问题背景](references/problem-review.md)、checks 和完整 threads/replies。\n2. 允许 Git 准备时读取 [本地准备与 latest-base](references/local-preparation.md)；只读模式直接使用准确远程证据。\n3. 将 PR 目标、关键验收条件、冻结 base/head 和完整 raw diff 交给 `review`，检查需求满足程度、\n   实现方式与代码正确性。\n4. 评估每个开放 thread，包括 outdated、bot 和所有回复。已有评论只放在对应评论条目，\n   不重复列为独立 finding。需要 resolve 且已获授权时才读取\n   [线程维护](references/thread-resolution.md)。\n5. 如任务包含冲突处理、验证或本地提交，先完成这些获准操作；结论前按证据协议立即刷新 PR、\n   选定问题证据、checks 和完整 threads/replies，处理所有新活动。\n6. 生成最终回复前重新读取 [PR 审查报告](references/reporting.md)；此前已读过或上下文摘要中\n   提及过，均不替代此次读取。按该协议组织报告与必要的提交回执，并对实际回复草稿完成\n   [交付检查](references/reporting.md#交付检查) 后再输出。\n\n大 PR 或需要复用快照文件时才读取\n[快照传输协议](references/snapshot-protocol.md)；复杂复审报告可再读取 [完整示例](references/report-example.md)。\n\n## 完成与停止条件\n\n只有准确 remote head/base 与 merge-base、完整 diff、目标/问题证据、CI 状态、全部开放 threads\n及回复均已审查，最终刷新没有未检查活动，且最终报告通过交付检查时，才算完成。最终刷新发现 head/base、\n需求或线程变化时，根据影响更新 checkout、范围和判断，处理后再刷新一次。\n\n引用有歧义、准备会覆盖本地状态、依赖或必需证据不可用、身份/内容持续漂移、冲突需要产品判断，\n或最终刷新失败时，保留当前快照和本地状态，报告已审查 SHA 与未覆盖缺口；不无限重试。\n受阻或未完成报告仍遵循报告协议，保留内容介绍及验证限制；证据不足的字段明确标注缺失，\n不为满足格式编造内容，也不将报告格式完整视为审查已完成。\n",".agents/skills/git-commit/SKILL.md":"---\nname: git-commit\ndescription: 起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付；分支集成使用 worktree-rebase-merge，不 push。\n---\n\n# Git 提交流程\n\n以经范围校验的 staged diff 创建本地提交。只读预览可使用尚未暂存的候选，\n但必须标为草稿。`<git-commit-skill-dir>` 指实际加载的本 Skill 目录。\n\n## 任务与边界\n\n| 任务 | 结果 |\n| --- | --- |\n| 起草或预览 | 根据 staged 内容或获准候选返回草稿，不改变 Git。 |\n| 创建提交 | 在有效提交授权下完成范围判断、预览、暂存、提交和校验。 |\n| 汇报已有提交 | 读取指定提交或范围的真实消息与统计，不启动新提交。 |\n| 为组合 Skill 推导分支名 | 只返回合法候选，不暂存、提交或创建分支。 |\n\n本 Skill 不运行 `git push`、rebase 或 merge。调用方传入真实任务、允许范围和已有证据，\n不需要采用本 Skill 的内部字段。\n\n## 选择模式\n\n- **只命名或汇报已有提交**：只完成该任务；未指定提交对象时先明确对象。\n- **仅预览、起草或只读**：不暂存、不创建消息文件、不提交。已有 staged 内容时\n  只用其起草；索引为空时使用获准范围内的候选。\n- **确认模式**：展示完整预览并等待批准。未单独获准时，确认前不暂存。\n- **默认模式**：明确调用本 Skill 或宿主已授权自动本地提交时，展示预览后直接提交。\n\n用户的禁止、范围、确认和暂缓要求持续有效；“不提交”不自动授权暂存。\n\n## 范围与 Git 状态保护\n\n1. 记录调用目录，使用 `git rev-parse --show-toplevel` 定位仓库根目录；相对路径先按原调用目录解析。\n2. 读取 HEAD、分支、status、最近提交、staged/unstaged raw diff 和相关 untracked 内容，\n   区分用户已有变更与本任务候选。\n3. 准备写入时复验 HEAD、索引、候选路径和内容。发现冲突、归属不明或非预期漂移时\n   停止，不覆盖、清理或自动 amend。\n4. 获准后只执行一次选定的暂存动作，并比较 staged paths 与 raw patch 是否与候选完全一致。\n   不一致时停止，不通过第二次 `git add` 修正范围；不创建空提交。\n\n| 情况 | 暂存动作 |\n| --- | --- |\n| 已有索引 | 不运行 `git add`，只提交既有 staged 内容；超出请求范围时停止。 |\n| 显式交付、空索引、限定路径 | 一次 `git add -- <selected-paths>`。 |\n| 显式交付、空索引、未限定路径 | 未禁止暂存且非 staged-only 时，在仓库根目录一次 `git add .`。 |\n| 宿主授权自动提交 | 一次 `git add -- <expected-commit-paths>`，禁止 `git add .`。 |\n\n宿主自动提交还必须有首次写入前的 HEAD、初始 Git 状态、允许路径和内容归属证据。\n初始索引非空、唯一暂存前出现非 Agent staged 内容、验证失败或仍有暂缓要求时，\n停止自动提交。这不反向限制用户已明确授权的 staged-only 提交。\n\n## 提交主流程\n\n1. 起草提交时读取 [提交信息契约](references/commit-message.md)。在主对话以 `text` 代码围栏展示\n   完整、将要使用的消息；仅预览到此结束，确认模式等待批准。\n2. 完成唯一暂存并复验后，将与预览完全一致的内容写入本任务专用消息文件。\n   候选或消息变化时重新审核和展示；用户要求确认时不复用旧批准。\n3. 使用 Skill 内校验器检查消息，再运行 `git commit -F <message-file>`。\n4. 以新建完整 commit hash 执行提交后消息一致性校验。校验失败时保留消息文件，\n   不 amend，不声称交付完成。\n5. 校验通过后删除本任务消息文件，读取 [统计与提交回执](references/reporting.md)，根据 Git 真实结果交付。\n\n任何技能或 Agent 需要拟定、分类或校验分支名称时，读取\n[统一分支命名](references/branch-naming.md) 并使用其中工具，不进入提交流程。\n\n## 完成与停止条件\n\n只有范围与 staged raw patch 一致、必要验证通过、Git 真实消息与预览一致，且最终\n状态和统计已核对时，才算创建提交完成。范围无法证明、出现冲突或漂移、权限被拒、\n提交前/后校验失败、hook 改写结果或统计不一致时保留现场并报告具体阶段，\n不自动扩大暂存、重试写入、amend 或清理用户状态。\n","docs/agents/build-and-test.md":"# 构建与测试\n\n## 测试与验证原则\n\n- 只有用户在当前任务中明确要求添加测试，才允许新增或扩写测试，包括测试文件、suite、用例、断言、\n  fixture、mock、helper 和仅为测试引入的生产代码 hook；修复 bug、新增功能、修改复杂逻辑和回归\n  风险都不构成授权。\n- 未获授权时可以运行和分析现有测试，认为需要补充时只在结果中提建议；获授权后优先更新现有用例，\n  遵循最小范围，不为测试简单实现增加生产抽象、mock 或 hook。\n- 新增服务时，必须新增该服务专属的验证测试文件。服务验证可以依赖实现者本机的 CLI、登录态、密钥或\n  其他配置；实现者必须在自己的开发环境中运行并通过该验证。此类环境依赖测试不要求每位开发者或 CI\n  持续运行，应通过非默认 test plan 或 Xcode 的精确测试选择运行，且不得将其误认为默认离线回归测试。\n- 优先运行直接覆盖变更风险的检查，影响范围不明确时再扩大；只修改已授权的测试与 fixture，不把\n  未运行、失败或环境阻塞的检查写成通过。\n\n## 测试与工程文件组织\n\n- 测试目录按领域对应源码模块，Swift 测试以 `Easydict/Swift/` 为映射根，例如 `Service/OpenAI/`\n  对应 `EasydictTests/Service/OpenAI/`；跨模块测试按主要业务归属放置，现有目录按任务范围渐进调整。\n- 每个测试文件聚焦一个主要被测类型或行为领域，最多声明一个 `@Suite`；接近文件规模限制时按职责\n  拆分 suite 和 fixture，保留原有覆盖和标签、actor 隔离、共享状态恢复、串行边界。独立 suite 的\n  `.serialized` 不提供跨 suite 串行保证。\n- 单文件 helper 保持局部，同领域共享工具就近放置，跨目录复用的 fixture 或工具放入\n  `EasydictTests/Support/<Domain>/`，资源放入对应测试资源目录。\n- 新增、移动或删除由 Xcode 管理的源码文件或运行时资源时，同步\n  `Easydict.xcodeproj/project.pbxproj` 中的 group、文件和 build phase 引用，测试文件同时同步测试\n  target 的 Sources，删除文件不保留悬空引用。仓库治理 Markdown、plan、history、skill、参考资料\n  和 `docs/` 下的公共 Markdown 不需要工程引用，除非作为运行时资源发布。\n\n## 选择验证\n\n根据变更需要证明的结果选择最小且充分的验证，不按变更行数设置硬阈值。\n\n- 纯治理 Markdown、plan、history、注释，以及不进入 Xcode 构建图的脚本或配置，只运行相应静态\n  检查：Markdown 的格式、相对链接、锚点和规则语义检查。\n- 生产源码、工程/workspace、target、build setting、build phase、依赖、entitlement、Info.plist\n  或运行时资源发生实质变化时，运行覆盖受影响配置的 `xcodebuild build`；修复 bug、修改可测试\n  行为或测试源码及其 target 引用时，运行覆盖相应行为、suite 或方法的 `xcodebuild test`。\n- `xcodebuild build` 只证明构建集成；相同配置的成功测试已覆盖编译，不重复运行 build，测试未覆盖\n  的 Release、Archive、签名或其他配置另行验证。重复运行兼容的测试时先 `build-for-testing`，再\n  用 `test-without-building`，前者本身不构成测试通过证据。\n- 每次变更运行 `git diff --check`；对变更的 `.xcstrings` 或 JSON 运行 `jq -e .`，对变更的 Shell\n  脚本运行 `bash -n`。\n- 并发判据是构建目录而不是构建入口：同一 workspace 与同一 DerivedData 的并发构建，无论来自\n  Xcode IDE 还是 `xcodebuild`，都会互相破坏增量状态和 build database；DerivedData 不同可以并行。\n- 因此 agent 运行 `xcodebuild` 时始终显式指定 `-derivedDataPath`，指向按 checkout 派生、与 Xcode\n  默认目录不相交的 `~/Library/Developer/Xcode/DerivedData/Easydict-Agent/<checkout-id>`；损坏时\n  删除该目录重建，不切换到 Xcode 默认 DerivedData。\n- `xcodebuild test` 会启动同 bundle id 的 `Easydict-debug.app` 测试宿主，不要与 Xcode 的 Run/Test\n  同时运行；构建与 Archive 不受此限制。\n## 常用命令\n\n```bash\n# 每个 checkout 一个 agent 专用 DerivedData，与 Xcode 默认目录互不相交\nset -o pipefail\ncheckout_id=\"$(git rev-parse --show-toplevel | sed -e \"s|^$HOME/||\" -e 's|^\\.||' -e 's|/|_|g')\"\nagent_dd=\"$HOME/Library/Developer/Xcode/DerivedData/Easydict-Agent/$checkout_id\"\n\n# 构建\nxcodebuild build \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 运行测试\nxcodebuild test \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 构建可复用的测试产物\nxcodebuild build-for-testing \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 复用已构建产物运行指定 suite 或方法，-only-testing 支持 <Suite> 与 <Suite>/<test>\nxcodebuild test-without-building \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" \\\n  -only-testing:EasydictTests/UtilityFunctionsTests | xcbeautify\n```\n\n`xcbeautify` 依赖 `pipefail` 才能保留 `xcodebuild` 的真实退出状态。重建时只删除当前 checkout 的\n`agent_dd`，不动 Xcode 默认目录或其他 checkout。\n","docs/agents/skills.md":"# Subagent: skills\n\nPath: `docs/agents/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/skills.md)","docs/agents/swift-xcode.md":"# Subagent: swift-xcode\n\nPath: `docs/agents/swift-xcode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/swift-xcode.md)","docs/agents/testing.md":"# Subagent: testing\n\nPath: `docs/agents/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/testing.md)",".agents/skills/fireworks-tech-graph/package.json":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/package.json)",".agents/skills/fireworks-tech-graph/README.md":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.md)",".agents/skills/fireworks-tech-graph/README.zh.md":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.zh.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.zh.md)",".agents/skills/fireworks-tech-graph/agents/openai.yaml":"# Agents Skill\n\nPath: `.agents/skills/fireworks-tech-graph/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/agents/openai.yaml)",".agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json)",".agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json)",".agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json)",".agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json)",".agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json)",".agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json)",".agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json)",".agents/skills/fireworks-tech-graph/references/icons.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/icons.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/icons.md)",".agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md)",".agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md)",".agents/skills/fireworks-tech-graph/references/style-3-blueprint.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md)",".agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md)",".agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md)",".agents/skills/fireworks-tech-graph/references/style-6-claude-official.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md)",".agents/skills/fireworks-tech-graph/references/style-7-openai.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-7-openai.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-7-openai.md)",".agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md)",".agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md)",".agents/skills/fireworks-tech-graph/scripts/README.md":"# Scripts Skill\n\nPath: `.agents/skills/fireworks-tech-graph/scripts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/scripts/README.md)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AGENTS.md\n\nEasydict 是一款 macOS 词典和翻译应用，支持查词、文本翻译、划词翻译和 OCR 截图翻译。\n\n`AGENTS.md` 是 Agent 的唯一任务入口；详细规则只在对应专题文档维护。\n\n## 任务模式\n\n### 计划模式\n\n- 用户要求方案、分析、解释或评估时，只读取和检查现状并给出答复，不修改文件、Git 或外部服务。\n\n### 执行模式\n\n用户要求修改、修复、更新、实现或执行时，按以下顺序完成任务：\n\n1. **执行前**：首次写入前读取任务路由要求的专题规则；任何可能产生仓库差异的任务都必须读取\n   `exec-plans/README.md` 与 `histories/README.md`，并按其规则判断 plan 和 history。\n2. **实现与验证**：完成范围内的修改并运行风险匹配的验证；失败时修复并重新验证。\n3. **Review**：生产代码、复杂逻辑、跨模块或高风险变更在验证通过后使用\n   [`review`](.agents/skills/review/SKILL.md) 技能审查；修复有效 finding 后重新验证和审查。\n   纯文档及简单低风险变更除外。\n4. **交付**：更新 history，完成并归档已有 plan；必要验证和适用的 Review 通过后自动创建本地\n   提交，用户明确要求不提交或没有差异时除外。\n\n### 通用规则\n\n- 用户可能会出错；发现用户有明显错误或决策冲突时，应明确指出并说明原因。\n- 无法确认修改授权时保持只读；从计划模式转入执行模式后，从“执行前”开始。\n- 用户的禁止、范围和顺序要求优先；push、创建 Pull Request、发布及其他外部写入仅在用户明确\n  要求时执行。\n- 回复使用用户当前请求的语言；已有文档保持原语言；代码标识、API 名称、命令、路径、品牌名称\n  和固定输出契约保留原文。\n- 现行规则文档单一职责，跨职责使用链接，不复制条款；文档使用相对仓库路径，\n  不提交机器本地绝对路径。\n- 历史记录与设计文档只在被当前任务明确采用时才构成约束。\n\n## 任务路由\n\n- 只读取当前任务需要的专题规则。\n- Git 分支命名：统一遵循\n  [`git-commit` 分支命名规范](.agents/skills/git-commit/references/branch-naming.md)。\n- 构建、测试、工程文件与资源、Xcode 验证：[`build-and-test.md`](docs/agents/build-and-test.md)。\n- 跨语言代码质量、Swift、Objective-C、SwiftUI、API 和本地化：\n  [`coding-guidelines.md`](docs/agents/coding-guidelines.md)。\n- 计划与 history 记录：[`exec-plans/README.md`](docs/exec-plans/README.md) 与\n  [`histories/README.md`](docs/histories/README.md)。\n- 参考资料与外部证据：[`references/README.md`](docs/references/README.md)。\n- 外部 Skills 和同步边界：[`skills.md`](docs/agents/skills.md)。\n- 产品代码、跨功能行为或模块边界：\n  [`application-architecture.md`](docs/design-docs/application-architecture.md)。\n- 公共使用或贡献者文档：[`en/zh`](docs/user-docs/)。\n","isInternal":false,"tokens":1005,"sizeBytes":3031},{"name":"SKILL.md","path":".agents/skills/code-simplifier/SKILL.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/code-simplifier/SKILL.md","title":"code-simplifier","category":"anthropic-skill","format":"markdown","content":"---\nname: code-simplifier\ndescription: 在不改变行为的前提下简化或重构已有代码。用于明确要求清理、去重或提高可读性；查找缺陷使用 review。\n---\n\n<!--\nhttps://github.com/getsentry/skills/blob/main/plugins/sentry-skills/skills/code-simplifier/SKILL.md\n-->\n\n<!--\nBased on Anthropic's code-simplifier agent:\nhttps://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md\n-->\n\n# 代码简化\n\n保持功能不变，简化代码并提高可读性。优先处理真实的重复、嵌套和间接层，不为减少行数牺牲\n清晰度或有意义的抽象。\n\n## 范围与授权\n\n- 默认只处理用户指定的范围或近期改动；扩大范围需要用户授权。\n- 本 Skill 不做缺陷审查。用户要求查找 bug、回归或风险时使用 `review`；简化中发现疑似缺陷时不顺手改变行为。\n- 实际修改、验证和交付遵循当前请求与仓库规则；调用本 Skill 不自动授权写入或外部操作。\n\n## 简化要求\n\n- 先理解调用方、测试、配置和数据格式；保持功能、输出、公开 API、命名、兼容性、序列化、\n  错误语义和用户可见文本不变。\n- 保留必要的错误处理、边界行为、状态转换，以及隔离副作用和表达领域概念的抽象。\n- 遵循目标项目、语言、框架和运行时的现有约定，不把某个平台的规则套用到其他项目。\n- 合并重复逻辑，减少无用嵌套；使用明确命名和控制流，避免嵌套三元或隐藏副作用的密集单行。\n- 职责相关的逻辑放在一起，不强行合并无关职责。注释解释意图、约束和非显然原因，不复述代码。\n\n## 工作方式\n\n识别近期改动及必要上下文，选择保持行为不变的最小改法。在已有授权内应用修改并执行相称验证，\n报告重要变化与未验证部分。没有明确收益时保留现有实现。\n\n## 语言和平台专项规则\n\n只加载目标代码对应的 reference：\n\n- Electron、TypeScript、React、IPC、preload 或 renderer：\n  [Electron/TypeScript 专项规则](references/electron-typescript.md)。\n- Swift、SwiftUI 或 Xcode：[Swift/Xcode 专项规则](references/swift-xcode.md)。\n","frontmatter":{"name":"code-simplifier","description":"在不改变行为的前提下简化或重构已有代码。用于明确要求清理、去重或提高可读性；查找缺陷使用 review。"},"isInternal":false,"tokens":750,"sizeBytes":2263},{"name":"openai.yaml","path":".agents/skills/fireworks-tech-graph/agents/openai.yaml","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/agents/openai.yaml","title":"Agents Skill","category":"anthropic-skill","format":"yaml","content":"# Agents Skill\n\nPath: `.agents/skills/fireworks-tech-graph/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/agents/openai.yaml)","tokens":300,"sizeBytes":220},{"name":"agent-memory-types-style4.json","path":".agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json)","tokens":300,"sizeBytes":264},{"name":"api-flow-style7.json","path":".agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json)","tokens":300,"sizeBytes":244},{"name":"mem0-style1.json","path":".agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json)","tokens":300,"sizeBytes":236},{"name":"microservices-style3.json","path":".agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json)","tokens":300,"sizeBytes":254},{"name":"multi-agent-style5.json","path":".agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json)","tokens":300,"sizeBytes":250},{"name":"system-architecture-style6.json","path":".agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json)","tokens":300,"sizeBytes":266},{"name":"tool-call-style2.json","path":".agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json)","tokens":300,"sizeBytes":246},{"name":"package.json","path":".agents/skills/fireworks-tech-graph/package.json","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/package.json","title":"Fireworks-tech-graph Skill","category":"anthropic-skill","format":"json","content":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/package.json)","tokens":300,"sizeBytes":222},{"name":"README.md","path":".agents/skills/fireworks-tech-graph/README.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.md","title":"Fireworks-tech-graph Skill","category":"anthropic-skill","format":"markdown","content":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.md)","tokens":300,"sizeBytes":216},{"name":"README.zh.md","path":".agents/skills/fireworks-tech-graph/README.zh.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.zh.md","title":"Fireworks-tech-graph Skill","category":"anthropic-skill","format":"markdown","content":"# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.zh.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.zh.md)","tokens":300,"sizeBytes":222},{"name":"icons.md","path":".agents/skills/fireworks-tech-graph/references/icons.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/icons.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/icons.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/icons.md)","tokens":300,"sizeBytes":226},{"name":"style-1-flat-icon.md","path":".agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md)","tokens":300,"sizeBytes":250},{"name":"style-2-dark-terminal.md","path":".agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md)","tokens":300,"sizeBytes":258},{"name":"style-3-blueprint.md","path":".agents/skills/fireworks-tech-graph/references/style-3-blueprint.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md)","tokens":300,"sizeBytes":250},{"name":"style-4-notion-clean.md","path":".agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md)","tokens":300,"sizeBytes":256},{"name":"style-5-glassmorphism.md","path":".agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md)","tokens":300,"sizeBytes":258},{"name":"style-6-claude-official.md","path":".agents/skills/fireworks-tech-graph/references/style-6-claude-official.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md)","tokens":300,"sizeBytes":262},{"name":"style-7-openai.md","path":".agents/skills/fireworks-tech-graph/references/style-7-openai.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-7-openai.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-7-openai.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-7-openai.md)","tokens":300,"sizeBytes":244},{"name":"style-diagram-matrix.md","path":".agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md)","tokens":300,"sizeBytes":256},{"name":"svg-layout-best-practices.md","path":".agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md)","tokens":300,"sizeBytes":266},{"name":"README.md","path":".agents/skills/fireworks-tech-graph/scripts/README.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/scripts/README.md","title":"Scripts Skill","category":"anthropic-skill","format":"markdown","content":"# Scripts Skill\n\nPath: `.agents/skills/fireworks-tech-graph/scripts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/scripts/README.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":".agents/skills/fireworks-tech-graph/SKILL.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/SKILL.md","title":"fireworks-tech-graph","category":"anthropic-skill","format":"markdown","content":"---\nname: fireworks-tech-graph\ndescription: >-\n  Create precise SVG technical diagrams, export PNG or offline HTML, and animate\n  supported semantic SVGs to GIF. Use for architecture, UML, agent, cloud or\n  workflow diagrams; not photos, raster art or statistical charts.\n---\n\n# Fireworks Tech Graph\n\nOne portable Agent Skill for Codex and Claude Code. SVG is the canonical artifact;\nPNG, offline HTML and supported GIF motion are output routes. Preserve requested\nlabels, topology and meaning; a successful command is not a visual quality verdict.\n\n## Locate and select\n\nResolve the directory containing this file as `SKILL_ROOT`. Use\n`${CLAUDE_SKILL_DIR}` in Claude Code or the absolute directory in Codex's loaded\nskill metadata. Do not assume cwd or a previous shell variable persists.\n\nUse the installed version for the task. Run `version` for source/version questions\nand `doctor` when diagnosing a missing renderer, font or dependency; do not make\ninstallation, updates or a complete test suite prerequisites for every diagram.\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" version\n```\n\n- Honor the user's diagram type, content and style; choose sensible reversible\n  details from the brief. Ask only for a material missing engineering fact or\n  a choice the user explicitly reserved. A request to draw includes local rendering.\n- Styles 1–7 and 9–12 have JSON generators. Style 8 (Dark Luxury) remains\n  AI-authored SVG: use its style reference, then the same validation/export gates.\n- Default to Style 1 Flat Icon when no user/workspace preference applies. Load the\n  actual matching file from [the style matrix](references/style-diagram-matrix.md).\n  Read other styles only for a requested comparison.\n- Styles 9–12 default to C4, cloud, event and observability semantic contracts.\n  Validate facts before layout; do not invent responsibilities, protocols or metrics.\n- Adapt an existing valid SVG directly when appropriate. JSON generation is not\n  required for every edit. Use [diagram/layout guidance](references/diagram-layout-reference.md)\n  and [icons](references/icons.md) only for the relevant type or symbols.\n\n## Generate and check\n\nReuse the user's current brief and artifact; an extra planning document is optional.\nFor JSON work, select `text_policy: \"strict\"` when all labels must be visible exactly.\nThe compatible `report` default preserves full labels in SVG metadata and reports\nany visible truncation. Resolve that warning before claiming complete exact text.\nFor polished work apply the [composition contract](references/composition-quality-contract.md).\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" validate architecture input.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" render architecture input.json diagram.svg --report layout.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" check diagram.svg\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" export-png diagram.svg diagram.png --width 1920\n```\n\n`check` validates SVG identity, marker references, generic collisions, semantic\ngeometry and composition. Inspect the report's typography and palette scope;\nheuristic text widths do not replace inspecting the actual rendered font.\nUse [visual quality guidance](references/visual-quality.md) for readability and\nstyle-specific refinements. Keep one semantic connector per business edge.\n\n## Additional outputs\n\n- **PNG:** prefer `export-png`, which reads root canvas dimensions, limits output\n  size, writes atomically and reads the PNG dimensions back. Alternate renderer\n  details are in [PNG export](references/png-export.md).\n- **HTML:** `fireworks.py export-html diagram.svg diagram.html`. One sanitized\n  offline file provides pan/zoom, source copy and static image downloads.\n- **GIF:** “Generate a GIF”, “Animate this diagram”, “生成 GIF”, “制作 GIF” and\n  “让这张图动起来” select the existing semantic SVG's motion route. Styles 1–12 are enabled\n  for the documented scene contracts; arbitrary same-style topologies are not\n  promised. Load [motion effects](references/motion-effects.md) and run\n  `fireworks.py animate diagram.svg diagram.gif`. Default is 960px, 20fps, 5.75s\n  with the `+2s-settled-flow` preset and a `.motion.json` report. Historical\n  `user-approved` fields describe maintainer-reviewed presets, not authorization\n  from the current user to publish, spend or send data.\n\n## Verify the requested outcome\n\nInspect the final PNG at intended reading size when image viewing is available:\ncheck text completeness, contrast, font substitution, hierarchy, spacing, clipping,\narrow direction, crossings and labels. Preserve style palette and material while\nfixing defects. Reuse an unchanged reviewed render; do not keep adding tests or\npolish after acceptance passes. If viewing is unavailable, explicitly mark the\nvisual check skipped and do not claim visual correctness.\n\nAfter a failed check, use its element IDs and geometry to make a focused repair;\nchange the approach after two unchanged failures. Widen/split an overfull diagram\ninstead of hiding required copy or endlessly shrinking type. Do not silently\nweaken semantic or composition constraints to obtain a pass.\n\nComplete every requested local output and its applicable checks, then report file\npaths, dimensions, visual review and residual limitations. A first SVG does not\ncomplete a requested PNG/GIF/HTML package. Publication or remote delivery requires\nits own scope-matching authorization; existing authorization is not requested twice.\n","frontmatter":{"name":"fireworks-tech-graph","description":"Create precise SVG technical diagrams, export PNG or offline HTML, and animate supported semantic SVGs to GIF. Use for architecture, UML, agent, cloud or workflow diagrams; not photos, raster art or statistical charts."},"isInternal":false,"tokens":1204,"sizeBytes":5658},{"name":"SKILL.md","path":".agents/skills/git-commit/SKILL.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/git-commit/SKILL.md","title":"git-commit","category":"anthropic-skill","format":"markdown","content":"---\nname: git-commit\ndescription: 起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付；分支集成使用 worktree-rebase-merge，不 push。\n---\n\n# Git 提交流程\n\n以经范围校验的 staged diff 创建本地提交。只读预览可使用尚未暂存的候选，\n但必须标为草稿。`<git-commit-skill-dir>` 指实际加载的本 Skill 目录。\n\n## 任务与边界\n\n| 任务 | 结果 |\n| --- | --- |\n| 起草或预览 | 根据 staged 内容或获准候选返回草稿，不改变 Git。 |\n| 创建提交 | 在有效提交授权下完成范围判断、预览、暂存、提交和校验。 |\n| 汇报已有提交 | 读取指定提交或范围的真实消息与统计，不启动新提交。 |\n| 为组合 Skill 推导分支名 | 只返回合法候选，不暂存、提交或创建分支。 |\n\n本 Skill 不运行 `git push`、rebase 或 merge。调用方传入真实任务、允许范围和已有证据，\n不需要采用本 Skill 的内部字段。\n\n## 选择模式\n\n- **只命名或汇报已有提交**：只完成该任务；未指定提交对象时先明确对象。\n- **仅预览、起草或只读**：不暂存、不创建消息文件、不提交。已有 staged 内容时\n  只用其起草；索引为空时使用获准范围内的候选。\n- **确认模式**：展示完整预览并等待批准。未单独获准时，确认前不暂存。\n- **默认模式**：明确调用本 Skill 或宿主已授权自动本地提交时，展示预览后直接提交。\n\n用户的禁止、范围、确认和暂缓要求持续有效；“不提交”不自动授权暂存。\n\n## 范围与 Git 状态保护\n\n1. 记录调用目录，使用 `git rev-parse --show-toplevel` 定位仓库根目录；相对路径先按原调用目录解析。\n2. 读取 HEAD、分支、status、最近提交、staged/unstaged raw diff 和相关 untracked 内容，\n   区分用户已有变更与本任务候选。\n3. 准备写入时复验 HEAD、索引、候选路径和内容。发现冲突、归属不明或非预期漂移时\n   停止，不覆盖、清理或自动 amend。\n4. 获准后只执行一次选定的暂存动作，并比较 staged paths 与 raw patch 是否与候选完全一致。\n   不一致时停止，不通过第二次 `git add` 修正范围；不创建空提交。\n\n| 情况 | 暂存动作 |\n| --- | --- |\n| 已有索引 | 不运行 `git add`，只提交既有 staged 内容；超出请求范围时停止。 |\n| 显式交付、空索引、限定路径 | 一次 `git add -- <selected-paths>`。 |\n| 显式交付、空索引、未限定路径 | 未禁止暂存且非 staged-only 时，在仓库根目录一次 `git add .`。 |\n| 宿主授权自动提交 | 一次 `git add -- <expected-commit-paths>`，禁止 `git add .`。 |\n\n宿主自动提交还必须有首次写入前的 HEAD、初始 Git 状态、允许路径和内容归属证据。\n初始索引非空、唯一暂存前出现非 Agent staged 内容、验证失败或仍有暂缓要求时，\n停止自动提交。这不反向限制用户已明确授权的 staged-only 提交。\n\n## 提交主流程\n\n1. 起草提交时读取 [提交信息契约](references/commit-message.md)。在主对话以 `text` 代码围栏展示\n   完整、将要使用的消息；仅预览到此结束，确认模式等待批准。\n2. 完成唯一暂存并复验后，将与预览完全一致的内容写入本任务专用消息文件。\n   候选或消息变化时重新审核和展示；用户要求确认时不复用旧批准。\n3. 使用 Skill 内校验器检查消息，再运行 `git commit -F <message-file>`。\n4. 以新建完整 commit hash 执行提交后消息一致性校验。校验失败时保留消息文件，\n   不 amend，不声称交付完成。\n5. 校验通过后删除本任务消息文件，读取 [统计与提交回执](references/reporting.md)，根据 Git 真实结果交付。\n\n任何技能或 Agent 需要拟定、分类或校验分支名称时，读取\n[统一分支命名](references/branch-naming.md) 并使用其中工具，不进入提交流程。\n\n## 完成与停止条件\n\n只有范围与 staged raw patch 一致、必要验证通过、Git 真实消息与预览一致，且最终\n状态和统计已核对时，才算创建提交完成。范围无法证明、出现冲突或漂移、权限被拒、\n提交前/后校验失败、hook 改写结果或统计不一致时保留现场并报告具体阶段，\n不自动扩大暂存、重试写入、amend 或清理用户状态。\n","frontmatter":{"name":"git-commit","description":"起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付；分支集成使用 worktree-rebase-merge，不 push。"},"isInternal":false,"tokens":1524,"sizeBytes":4471},{"name":"SKILL.md","path":".agents/skills/review-pr/SKILL.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/review-pr/SKILL.md","title":"review-pr","category":"anthropic-skill","format":"markdown","content":"---\nname: review-pr\ndescription: 审查 GitHub PR 的准确 head/base diff、关联 issue、CI 和 review threads，交付前刷新。创建 PR 使用 submit-pr；本地审查使用 review。\n---\n\n# GitHub PR 审查\n\n本 Skill 编排 GitHub PR 的身份、问题背景、本地准备、CI、线程和最终刷新。\n语义与正确性审查使用配套 `review`；审查本地工作树、提交、范围、文件或模块时直接使用\n`review`，不启动 PR 编排。\n\n`<review-pr-skill-dir>` 指实际加载的本 Skill 目录。优先从当前 Skill 清单定位 `review`，\n未提供位置时才检查 [同级安装位置](../review/SKILL.md)。开始 Git 准备前确认依赖可读；\n缺失时可收集获准的只读证据，但不得声称完整代码审查已完成。\n\n审查分支命名依赖同级完整安装的 `git-commit`，只使用其\n[统一命名规范与工具](../git-commit/references/branch-naming.md)；缺失时不执行本地 Git 准备，可继续远程证据审查。\n\n## 模式与授权\n\n- **默认本地审查**：明确请求审查 PR 时，包含必要的 remote 添加、fetch、安全分支创建或\n  fast-forward、upstream 设置和 checkout。\n- **隔离 worktree**：只在用户明确要求 worktree、并行或并发 review 时新建；本人 PR 分支\n  已在其他 worktree 打开时可复用其干净 checkout，后续命令使用回执路径。\n- **latest-base 集成审查**：只在用户明确要求更新最新 base、解决冲突或审查集成结果时使用。\n- **不改变 Git 状态**：遵守用户的只读或不切分支限制，改用可访问的准确远程 diff、源码和评论；\n  证据不足时报告限制。\n\n上述本地准备授权不包含产品修复、push、发布评论、approve、删除评论或关闭 PR。\n线程 resolve 需要单独的远程操作授权和当前远程证据。仅方案或解释不执行 Git 准备。\n\n## 核心安全边界\n\n- 默认本地模式从 `git status --short --branch` 开始；当前 checkout 有未提交变更时，\n  在切换分支前停止。显式 worktree 模式不得改变原 checkout，因此可从脏状态继续。\n- 多阶段 review 必须把首次准备回执中的 `checkout.branch` 作为后续阶段的显式输入；使用\n  helper 的 `--reuse-branch` 复验该分支、HEAD、upstream 和 worktree 占用，失败时停止，\n  不静默改选另一个分支。回执记录实际 helper 路径、入口 SHA 和准备依赖组合指纹，\n  按本地准备协议复验版本漂移。\n- 不覆盖、删除、重命名、rebase、reset、强制更新、stash 或丢弃本地分支、worktree 或变更。\n- 普通审查必须对应 PR 元数据的准确 `headRefOid` 和真实 base/merge-base diff；\n  不用 detached HEAD、已 fetch ref 或无关 `origin` 绕过身份检查。\n- 本人 PR 优先复用已核实身份的同名分支及等价 upstream。相同或落后的分支安全准备到远程\n  head；领先时保留额外提交，按冻结 Git 对象审查，不新建 review 分支。回执区分 checkout\n  与 review SHA；源码上下文和验证归属遵循 [证据协议](references/evidence-workflow.md)。\n  本人分支分叉或 upstream 不匹配时停止；其他作者仍按本地准备协议处理 collision fallback。\n- `mergeable: CONFLICTING`、`mergeStateStatus: DIRTY` 或 base 领先不构成 latest-base 授权。\n- 除非用户明确要求，审查、准备、冲突处理和线程维护都不 push。审查后保留准备好的\n  分支或 worktree，不自动删除。\n\n## 审查流程\n\n1. 读取 [证据收集与刷新](references/evidence-workflow.md)，收集并冻结 PR 身份、head/base、\n   [问题背景](references/problem-review.md)、checks 和完整 threads/replies。\n2. 允许 Git 准备时读取 [本地准备与 latest-base](references/local-preparation.md)；只读模式直接使用准确远程证据。\n3. 将 PR 目标、关键验收条件、冻结 base/head 和完整 raw diff 交给 `review`，检查需求满足程度、\n   实现方式与代码正确性。\n4. 评估每个开放 thread，包括 outdated、bot 和所有回复。已有评论只放在对应评论条目，\n   不重复列为独立 finding。需要 resolve 且已获授权时才读取\n   [线程维护](references/thread-resolution.md)。\n5. 如任务包含冲突处理、验证或本地提交，先完成这些获准操作；结论前按证据协议立即刷新 PR、\n   选定问题证据、checks 和完整 threads/replies，处理所有新活动。\n6. 生成最终回复前重新读取 [PR 审查报告](references/reporting.md)；此前已读过或上下文摘要中\n   提及过，均不替代此次读取。按该协议组织报告与必要的提交回执，并对实际回复草稿完成\n   [交付检查](references/reporting.md#交付检查) 后再输出。\n\n大 PR 或需要复用快照文件时才读取\n[快照传输协议](references/snapshot-protocol.md)；复杂复审报告可再读取 [完整示例](references/report-example.md)。\n\n## 完成与停止条件\n\n只有准确 remote head/base 与 merge-base、完整 diff、目标/问题证据、CI 状态、全部开放 threads\n及回复均已审查，最终刷新没有未检查活动，且最终报告通过交付检查时，才算完成。最终刷新发现 head/base、\n需求或线程变化时，根据影响更新 checkout、范围和判断，处理后再刷新一次。\n\n引用有歧义、准备会覆盖本地状态、依赖或必需证据不可用、身份/内容持续漂移、冲突需要产品判断，\n或最终刷新失败时，保留当前快照和本地状态，报告已审查 SHA 与未覆盖缺口；不无限重试。\n受阻或未完成报告仍遵循报告协议，保留内容介绍及验证限制；证据不足的字段明确标注缺失，\n不为满足格式编造内容，也不将报告格式完整视为审查已完成。\n","frontmatter":{"name":"review-pr","description":"审查 GitHub PR 的准确 head/base diff、关联 issue、CI 和 review threads，交付前刷新。创建 PR 使用 submit-pr；本地审查使用 review。"},"isInternal":false,"tokens":1945,"sizeBytes":5873},{"name":"SKILL.md","path":".agents/skills/worktree-rebase-merge/SKILL.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/worktree-rebase-merge/SKILL.md","title":"worktree-rebase-merge","category":"anthropic-skill","format":"markdown","content":"---\nname: worktree-rebase-merge\ndescription: 将当前 worktree 的任务提交 rebase 到本地目标分支，并从目标 worktree 合并。用于明确要求本地集成；仅创建提交使用 git-commit。\n---\n\n# Worktree Rebase/Merge 工作流\n\n将当前 checkout 视为源：必要时创建任务分支并提交，rebase 到目标分支，\n再从目标分支的 worktree 合并。源与目标相同时只提交，不 rebase 或 merge。\n\n## 依赖与授权\n\n完整交付依赖同级完整安装的 [`git-commit`](../git-commit/SKILL.md)，复用其提交、\n[统一分支命名](../git-commit/references/branch-naming.md)和已有提交回执能力。\n依赖缺失时可报告已知事实，但无法完成 helper 预检，在任何 Git 写入前停止。\n\n本 Skill 只在用户明确要求本地集成时执行 Git 写入。仅预览或只读请求不创建分支/\nworktree、不暂存、提交、rebase 或 merge。除非用户明确要求，不 fetch、pull 或 push。\n\n## Git 状态保护\n\n- 开始前确认允许路径、提交范围、用户限制，以及源/目标的 HEAD、索引、工作树、\n  worktree 占用和进行中操作。\n- Git 写操作串行执行；每次写入前复验相关状态，写入后确认结果符合预期。\n- rebase 前冻结源提交范围与目标 OID；rebase 后核对改写结果。merge 前确认源干净、\n  目标仍为冻结 OID，且目标 worktree 没有漂移。\n- 不使用 reset、强制移动 ref、stash 或 clean，不切换用户其他 checkout 的分支。\n- 发现非预期漂移、未解冲突、范围不一致、不能安全处理的语义冲突或权限拒绝时，\n  保留现场并停止后续写入。\n\n## 主流程\n\n1. 读取 [集成协议](references/integration-workflow.md)，使用其只读 helper 收集稳定的源/目标事实。\n2. 用户指定目标时使用该分支；否则按集成协议实时解析远程默认分支。目标或 remote\n   有歧义、无法证明实时默认分支或本地目标不存在时，在写入前停止并请用户指定。\n3. detached HEAD 按集成协议挂接到不覆盖现有 ref 的任务分支。没有 staged、unstaged、\n   untracked 或相对目标的提交时，不创建空分支。\n4. 源与目标相同时，只使用 `git-commit` 完成提交和回执。\n5. 其他情况先用 `git-commit` 提交获准的源变更，要求源 worktree 干净；再检查完整\n   `<target>..<source>` 提交和路径范围，执行 `git rebase <target>` 并验证改写结果。\n6. 在干净的目标 worktree 执行 `git merge <source>`。没有目标 worktree 时，在仓库外创建临时\n   worktree，成功合并后删除；冲突或失败时保留供恢复。\n7. 读取 [集成回执](references/reporting.md)，报告真实分支、OID、worktree、rebase/merge、工作树和\n   Push 状态；单提交或多提交统计复用 `git-commit` 的回执契约。\n\n## 完成与停止条件\n\n直接提交模式在 `git-commit` 完成时结束。普通集成只有在源已成功 rebase、目标从冻结\nOID 按预期合并、源与目标最终状态已验证且回执完整时才算完成。目标只有脏\nworktree 时，允许先完成源提交，然后在 rebase/merge 前暂停；恢复步骤见集成协议。\n","frontmatter":{"name":"worktree-rebase-merge","description":"将当前 worktree 的任务提交 rebase 到本地目标分支，并从目标 worktree 合并。用于明确要求本地集成；仅创建提交使用 git-commit。"},"isInternal":false,"tokens":1067,"sizeBytes":3240},{"name":"README.md","path":"docs/references/README.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/references/README.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Agent 规则参考\n\n本目录保存长期使用的外部来源证据。参考资料只提供证据，不定义 Easydict 的执行规则；\nSkills 的来源基线与同步命令由 [`docs/agents/skills.md`](../agents/skills.md) 统一维护。\n\n## 当前参考\n\n- [`astra-agent-guidance.md`](astra-agent-guidance.md)：保留 Astra 指令适配的历史来源。\n","isInternal":false,"tokens":117,"sizeBytes":364},{"name":"build-and-test.md","path":"docs/agents/build-and-test.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/build-and-test.md","title":"Subagent: build-and-test","category":"subagent-persona","format":"markdown","content":"# 构建与测试\n\n## 测试与验证原则\n\n- 只有用户在当前任务中明确要求添加测试，才允许新增或扩写测试，包括测试文件、suite、用例、断言、\n  fixture、mock、helper 和仅为测试引入的生产代码 hook；修复 bug、新增功能、修改复杂逻辑和回归\n  风险都不构成授权。\n- 未获授权时可以运行和分析现有测试，认为需要补充时只在结果中提建议；获授权后优先更新现有用例，\n  遵循最小范围，不为测试简单实现增加生产抽象、mock 或 hook。\n- 新增服务时，必须新增该服务专属的验证测试文件。服务验证可以依赖实现者本机的 CLI、登录态、密钥或\n  其他配置；实现者必须在自己的开发环境中运行并通过该验证。此类环境依赖测试不要求每位开发者或 CI\n  持续运行，应通过非默认 test plan 或 Xcode 的精确测试选择运行，且不得将其误认为默认离线回归测试。\n- 优先运行直接覆盖变更风险的检查，影响范围不明确时再扩大；只修改已授权的测试与 fixture，不把\n  未运行、失败或环境阻塞的检查写成通过。\n\n## 测试与工程文件组织\n\n- 测试目录按领域对应源码模块，Swift 测试以 `Easydict/Swift/` 为映射根，例如 `Service/OpenAI/`\n  对应 `EasydictTests/Service/OpenAI/`；跨模块测试按主要业务归属放置，现有目录按任务范围渐进调整。\n- 每个测试文件聚焦一个主要被测类型或行为领域，最多声明一个 `@Suite`；接近文件规模限制时按职责\n  拆分 suite 和 fixture，保留原有覆盖和标签、actor 隔离、共享状态恢复、串行边界。独立 suite 的\n  `.serialized` 不提供跨 suite 串行保证。\n- 单文件 helper 保持局部，同领域共享工具就近放置，跨目录复用的 fixture 或工具放入\n  `EasydictTests/Support/<Domain>/`，资源放入对应测试资源目录。\n- 新增、移动或删除由 Xcode 管理的源码文件或运行时资源时，同步\n  `Easydict.xcodeproj/project.pbxproj` 中的 group、文件和 build phase 引用，测试文件同时同步测试\n  target 的 Sources，删除文件不保留悬空引用。仓库治理 Markdown、plan、history、skill、参考资料\n  和 `docs/` 下的公共 Markdown 不需要工程引用，除非作为运行时资源发布。\n\n## 选择验证\n\n根据变更需要证明的结果选择最小且充分的验证，不按变更行数设置硬阈值。\n\n- 纯治理 Markdown、plan、history、注释，以及不进入 Xcode 构建图的脚本或配置，只运行相应静态\n  检查：Markdown 的格式、相对链接、锚点和规则语义检查。\n- 生产源码、工程/workspace、target、build setting、build phase、依赖、entitlement、Info.plist\n  或运行时资源发生实质变化时，运行覆盖受影响配置的 `xcodebuild build`；修复 bug、修改可测试\n  行为或测试源码及其 target 引用时，运行覆盖相应行为、suite 或方法的 `xcodebuild test`。\n- `xcodebuild build` 只证明构建集成；相同配置的成功测试已覆盖编译，不重复运行 build，测试未覆盖\n  的 Release、Archive、签名或其他配置另行验证。重复运行兼容的测试时先 `build-for-testing`，再\n  用 `test-without-building`，前者本身不构成测试通过证据。\n- 每次变更运行 `git diff --check`；对变更的 `.xcstrings` 或 JSON 运行 `jq -e .`，对变更的 Shell\n  脚本运行 `bash -n`。\n- 并发判据是构建目录而不是构建入口：同一 workspace 与同一 DerivedData 的并发构建，无论来自\n  Xcode IDE 还是 `xcodebuild`，都会互相破坏增量状态和 build database；DerivedData 不同可以并行。\n- 因此 agent 运行 `xcodebuild` 时始终显式指定 `-derivedDataPath`，指向按 checkout 派生、与 Xcode\n  默认目录不相交的 `~/Library/Developer/Xcode/DerivedData/Easydict-Agent/<checkout-id>`；损坏时\n  删除该目录重建，不切换到 Xcode 默认 DerivedData。\n- `xcodebuild test` 会启动同 bundle id 的 `Easydict-debug.app` 测试宿主，不要与 Xcode 的 Run/Test\n  同时运行；构建与 Archive 不受此限制。\n## 常用命令\n\n```bash\n# 每个 checkout 一个 agent 专用 DerivedData，与 Xcode 默认目录互不相交\nset -o pipefail\ncheckout_id=\"$(git rev-parse --show-toplevel | sed -e \"s|^$HOME/||\" -e 's|^\\.||' -e 's|/|_|g')\"\nagent_dd=\"$HOME/Library/Developer/Xcode/DerivedData/Easydict-Agent/$checkout_id\"\n\n# 构建\nxcodebuild build \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 运行测试\nxcodebuild test \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 构建可复用的测试产物\nxcodebuild build-for-testing \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 复用已构建产物运行指定 suite 或方法，-only-testing 支持 <Suite> 与 <Suite>/<test>\nxcodebuild test-without-building \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" \\\n  -only-testing:EasydictTests/UtilityFunctionsTests | xcbeautify\n```\n\n`xcbeautify` 依赖 `pipefail` 才能保留 `xcodebuild` 的真实退出状态。重建时只删除当前 checkout 的\n`agent_dd`，不动 Xcode 默认目录或其他 checkout。\n","isInternal":false,"tokens":1785,"sizeBytes":5445},{"name":"skills.md","path":"docs/agents/skills.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/skills.md","title":"Subagent: skills","category":"subagent-persona","format":"markdown","content":"# Subagent: skills\n\nPath: `docs/agents/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/skills.md)","tokens":300,"sizeBytes":158},{"name":"swift-xcode.md","path":"docs/agents/swift-xcode.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/swift-xcode.md","title":"Subagent: swift-xcode","category":"subagent-persona","format":"markdown","content":"# Subagent: swift-xcode\n\nPath: `docs/agents/swift-xcode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/swift-xcode.md)","tokens":300,"sizeBytes":173},{"name":"testing.md","path":"docs/agents/testing.md","rawUrl":"https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/testing.md","title":"Subagent: testing","category":"subagent-persona","format":"markdown","content":"# Subagent: testing\n\nPath: `docs/agents/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/docs/agents/testing.md)","tokens":300,"sizeBytes":161}],"systemPromptSnippet":"<yakaai_skills repo=\"tisfeng/Easydict\">\n<!-- File: AGENTS.md (Tokens: ~1005 | Category: root-instruction) -->\n# AGENTS.md\n\nEasydict 是一款 macOS 词典和翻译应用，支持查词、文本翻译、划词翻译和 OCR 截图翻译。\n\n`AGENTS.md` 是 Agent 的唯一任务入口；详细规则只在对应专题文档维护。\n\n## 任务模式\n\n### 计划模式\n\n- 用户要求方案、分析、解释或评估时，只读取和检查现状并给出答复，不修改文件、Git 或外部服务。\n\n### 执行模式\n\n用户要求修改、修复、更新、实现或执行时，按以下顺序完成任务：\n\n1. **执行前**：首次写入前读取任务路由要求的专题规则；任何可能产生仓库差异的任务都必须读取\n   `exec-plans/README.md` 与 `histories/README.md`，并按其规则判断 plan 和 history。\n2. **实现与验证**：完成范围内的修改并运行风险匹配的验证；失败时修复并重新验证。\n3. **Review**：生产代码、复杂逻辑、跨模块或高风险变更在验证通过后使用\n   [`review`](.agents/skills/review/SKILL.md) 技能审查；修复有效 finding 后重新验证和审查。\n   纯文档及简单低风险变更除外。\n4. **交付**：更新 history，完成并归档已有 plan；必要验证和适用的 Review 通过后自动创建本地\n   提交，用户明确要求不提交或没有差异时除外。\n\n### 通用规则\n\n- 用户可能会出错；发现用户有明显错误或决策冲突时，应明确指出并说明原因。\n- 无法确认修改授权时保持只读；从计划模式转入执行模式后，从“执行前”开始。\n- 用户的禁止、范围和顺序要求优先；push、创建 Pull Request、发布及其他外部写入仅在用户明确\n  要求时执行。\n- 回复使用用户当前请求的语言；已有文档保持原语言；代码标识、API 名称、命令、路径、品牌名称\n  和固定输出契约保留原文。\n- 现行规则文档单一职责，跨职责使用链接，不复制条款；文档使用相对仓库路径，\n  不提交机器本地绝对路径。\n- 历史记录与设计文档只在被当前任务明确采用时才构成约束。\n\n## 任务路由\n\n- 只读取当前任务需要的专题规则。\n- Git 分支命名：统一遵循\n  [`git-commit` 分支命名规范](.agents/skills/git-commit/references/branch-naming.md)。\n- 构建、测试、工程文件与资源、Xcode 验证：[`build-and-test.md`](docs/agents/build-and-test.md)。\n- 跨语言代码质量、Swift、Objective-C、SwiftUI、API 和本地化：\n  [`coding-guidelines.md`](docs/agents/coding-guidelines.md)。\n- 计划与 history 记录：[`exec-plans/README.md`](docs/exec-plans/README.md) 与\n  [`histories/README.md`](docs/histories/README.md)。\n- 参考资料与外部证据：[`references/README.md`](docs/references/README.md)。\n- 外部 Skills 和同步边界：[`skills.md`](docs/agents/skills.md)。\n- 产品代码、跨功能行为或模块边界：\n  [`application-architecture.md`](docs/design-docs/application-architecture.md)。\n- 公共使用或贡献者文档：[`en/zh`](docs/user-docs/)。\n\n<!-- File: .agents/skills/code-simplifier/SKILL.md (Tokens: ~750 | Category: anthropic-skill) -->\n---\nname: code-simplifier\ndescription: 在不改变行为的前提下简化或重构已有代码。用于明确要求清理、去重或提高可读性；查找缺陷使用 review。\n---\n\n<!--\nhttps://github.com/getsentry/skills/blob/main/plugins/sentry-skills/skills/code-simplifier/SKILL.md\n-->\n\n<!--\nBased on Anthropic's code-simplifier agent:\nhttps://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md\n-->\n\n# 代码简化\n\n保持功能不变，简化代码并提高可读性。优先处理真实的重复、嵌套和间接层，不为减少行数牺牲\n清晰度或有意义的抽象。\n\n## 范围与授权\n\n- 默认只处理用户指定的范围或近期改动；扩大范围需要用户授权。\n- 本 Skill 不做缺陷审查。用户要求查找 bug、回归或风险时使用 `review`；简化中发现疑似缺陷时不顺手改变行为。\n- 实际修改、验证和交付遵循当前请求与仓库规则；调用本 Skill 不自动授权写入或外部操作。\n\n## 简化要求\n\n- 先理解调用方、测试、配置和数据格式；保持功能、输出、公开 API、命名、兼容性、序列化、\n  错误语义和用户可见文本不变。\n- 保留必要的错误处理、边界行为、状态转换，以及隔离副作用和表达领域概念的抽象。\n- 遵循目标项目、语言、框架和运行时的现有约定，不把某个平台的规则套用到其他项目。\n- 合并重复逻辑，减少无用嵌套；使用明确命名和控制流，避免嵌套三元或隐藏副作用的密集单行。\n- 职责相关的逻辑放在一起，不强行合并无关职责。注释解释意图、约束和非显然原因，不复述代码。\n\n## 工作方式\n\n识别近期改动及必要上下文，选择保持行为不变的最小改法。在已有授权内应用修改并执行相称验证，\n报告重要变化与未验证部分。没有明确收益时保留现有实现。\n\n## 语言和平台专项规则\n\n只加载目标代码对应的 reference：\n\n- Electron、TypeScript、React、IPC、preload 或 renderer：\n  [Electron/TypeScript 专项规则](references/electron-typescript.md)。\n- Swift、SwiftUI 或 Xcode：[Swift/Xcode 专项规则](references/swift-xcode.md)。\n\n<!-- File: .agents/skills/fireworks-tech-graph/agents/openai.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Agents Skill\n\nPath: `.agents/skills/fireworks-tech-graph/agents/openai.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/agents/openai.yaml)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/agent-memory-types-style4.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/api-flow-style7.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/mem0-style1.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/microservices-style3.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/multi-agent-style5.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/system-architecture-style6.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fixtures Skill\n\nPath: `.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/fixtures/tool-call-style2.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/package.json)\n\n<!-- File: .agents/skills/fireworks-tech-graph/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/README.zh.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Fireworks-tech-graph Skill\n\nPath: `.agents/skills/fireworks-tech-graph/README.zh.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/README.zh.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/icons.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/icons.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/icons.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-1-flat-icon.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-2-dark-terminal.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-3-blueprint.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-3-blueprint.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-4-notion-clean.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-5-glassmorphism.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-6-claude-official.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-6-claude-official.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-7-openai.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-7-openai.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-7-openai.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/style-diagram-matrix.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/references/svg-layout-best-practices.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/scripts/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Scripts Skill\n\nPath: `.agents/skills/fireworks-tech-graph/scripts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/tisfeng/Easydict/HEAD/.agents/skills/fireworks-tech-graph/scripts/README.md)\n\n<!-- File: .agents/skills/fireworks-tech-graph/SKILL.md (Tokens: ~1204 | Category: anthropic-skill) -->\n---\nname: fireworks-tech-graph\ndescription: >-\n  Create precise SVG technical diagrams, export PNG or offline HTML, and animate\n  supported semantic SVGs to GIF. Use for architecture, UML, agent, cloud or\n  workflow diagrams; not photos, raster art or statistical charts.\n---\n\n# Fireworks Tech Graph\n\nOne portable Agent Skill for Codex and Claude Code. SVG is the canonical artifact;\nPNG, offline HTML and supported GIF motion are output routes. Preserve requested\nlabels, topology and meaning; a successful command is not a visual quality verdict.\n\n## Locate and select\n\nResolve the directory containing this file as `SKILL_ROOT`. Use\n`${CLAUDE_SKILL_DIR}` in Claude Code or the absolute directory in Codex's loaded\nskill metadata. Do not assume cwd or a previous shell variable persists.\n\nUse the installed version for the task. Run `version` for source/version questions\nand `doctor` when diagnosing a missing renderer, font or dependency; do not make\ninstallation, updates or a complete test suite prerequisites for every diagram.\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" version\n```\n\n- Honor the user's diagram type, content and style; choose sensible reversible\n  details from the brief. Ask only for a material missing engineering fact or\n  a choice the user explicitly reserved. A request to draw includes local rendering.\n- Styles 1–7 and 9–12 have JSON generators. Style 8 (Dark Luxury) remains\n  AI-authored SVG: use its style reference, then the same validation/export gates.\n- Default to Style 1 Flat Icon when no user/workspace preference applies. Load the\n  actual matching file from [the style matrix](references/style-diagram-matrix.md).\n  Read other styles only for a requested comparison.\n- Styles 9–12 default to C4, cloud, event and observability semantic contracts.\n  Validate facts before layout; do not invent responsibilities, protocols or metrics.\n- Adapt an existing valid SVG directly when appropriate. JSON generation is not\n  required for every edit. Use [diagram/layout guidance](references/diagram-layout-reference.md)\n  and [icons](references/icons.md) only for the relevant type or symbols.\n\n## Generate and check\n\nReuse the user's current brief and artifact; an extra planning document is optional.\nFor JSON work, select `text_policy: \"strict\"` when all labels must be visible exactly.\nThe compatible `report` default preserves full labels in SVG metadata and reports\nany visible truncation. Resolve that warning before claiming complete exact text.\nFor polished work apply the [composition contract](references/composition-quality-contract.md).\n\n```bash\nSKILL_ROOT=\"${CLAUDE_SKILL_DIR:-/absolute/path/from-codex-skill-metadata}\"\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" validate architecture input.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" render architecture input.json diagram.svg --report layout.json\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" check diagram.svg\npython3 \"$SKILL_ROOT/scripts/fireworks.py\" export-png diagram.svg diagram.png --width 1920\n```\n\n`check` validates SVG identity, marker references, generic collisions, semantic\ngeometry and composition. Inspect the report's typography and palette scope;\nheuristic text widths do not replace inspecting the actual rendered font.\nUse [visual quality guidance](references/visual-quality.md) for readability and\nstyle-specific refinements. Keep one semantic connector per business edge.\n\n## Additional outputs\n\n- **PNG:** prefer `export-png`, which reads root canvas dimensions, limits output\n  size, writes atomically and reads the PNG dimensions back. Alternate renderer\n  details are in [PNG export](references/png-export.md).\n- **HTML:** `fireworks.py export-html diagram.svg diagram.html`. One sanitized\n  offline file provides pan/zoom, source copy and static image downloads.\n- **GIF:** “Generate a GIF”, “Animate this diagram”, “生成 GIF”, “制作 GIF” and\n  “让这张图动起来” select the existing semantic SVG's motion route. Styles 1–12 are enabled\n  for the documented scene contracts; arbitrary same-style topologies are not\n  promised. Load [motion effects](references/motion-effects.md) and run\n  `fireworks.py animate diagram.svg diagram.gif`. Default is 960px, 20fps, 5.75s\n  with the `+2s-settled-flow` preset and a `.motion.json` report. Historical\n  `user-approved` fields describe maintainer-reviewed presets, not authorization\n  from the current user to publish, spend or send data.\n\n## Verify the requested outcome\n\nInspect the final PNG at intended reading size when image viewing is available:\ncheck text completeness, contrast, font substitution, hierarchy, spacing, clipping,\narrow direction, crossings and labels. Preserve style palette and material while\nfixing defects. Reuse an unchanged reviewed render; do not keep adding tests or\npolish after acceptance passes. If viewing is unavailable, explicitly mark the\nvisual check skipped and do not claim visual correctness.\n\nAfter a failed check, use its element IDs and geometry to make a focused repair;\nchange the approach after two unchanged failures. Widen/split an overfull diagram\ninstead of hiding required copy or endlessly shrinking type. Do not silently\nweaken semantic or composition constraints to obtain a pass.\n\nComplete every requested local output and its applicable checks, then report file\npaths, dimensions, visual review and residual limitations. A first SVG does not\ncomplete a requested PNG/GIF/HTML package. Publication or remote delivery requires\nits own scope-matching authorization; existing authorization is not requested twice.\n\n<!-- File: .agents/skills/git-commit/SKILL.md (Tokens: ~1524 | Category: anthropic-skill) -->\n---\nname: git-commit\ndescription: 起草、创建或汇报 Angular-style 本地 Git 提交。用于明确的提交交付；分支集成使用 worktree-rebase-merge，不 push。\n---\n\n# Git 提交流程\n\n以经范围校验的 staged diff 创建本地提交。只读预览可使用尚未暂存的候选，\n但必须标为草稿。`<git-commit-skill-dir>` 指实际加载的本 Skill 目录。\n\n## 任务与边界\n\n| 任务 | 结果 |\n| --- | --- |\n| 起草或预览 | 根据 staged 内容或获准候选返回草稿，不改变 Git。 |\n| 创建提交 | 在有效提交授权下完成范围判断、预览、暂存、提交和校验。 |\n| 汇报已有提交 | 读取指定提交或范围的真实消息与统计，不启动新提交。 |\n| 为组合 Skill 推导分支名 | 只返回合法候选，不暂存、提交或创建分支。 |\n\n本 Skill 不运行 `git push`、rebase 或 merge。调用方传入真实任务、允许范围和已有证据，\n不需要采用本 Skill 的内部字段。\n\n## 选择模式\n\n- **只命名或汇报已有提交**：只完成该任务；未指定提交对象时先明确对象。\n- **仅预览、起草或只读**：不暂存、不创建消息文件、不提交。已有 staged 内容时\n  只用其起草；索引为空时使用获准范围内的候选。\n- **确认模式**：展示完整预览并等待批准。未单独获准时，确认前不暂存。\n- **默认模式**：明确调用本 Skill 或宿主已授权自动本地提交时，展示预览后直接提交。\n\n用户的禁止、范围、确认和暂缓要求持续有效；“不提交”不自动授权暂存。\n\n## 范围与 Git 状态保护\n\n1. 记录调用目录，使用 `git rev-parse --show-toplevel` 定位仓库根目录；相对路径先按原调用目录解析。\n2. 读取 HEAD、分支、status、最近提交、staged/unstaged raw diff 和相关 untracked 内容，\n   区分用户已有变更与本任务候选。\n3. 准备写入时复验 HEAD、索引、候选路径和内容。发现冲突、归属不明或非预期漂移时\n   停止，不覆盖、清理或自动 amend。\n4. 获准后只执行一次选定的暂存动作，并比较 staged paths 与 raw patch 是否与候选完全一致。\n   不一致时停止，不通过第二次 `git add` 修正范围；不创建空提交。\n\n| 情况 | 暂存动作 |\n| --- | --- |\n| 已有索引 | 不运行 `git add`，只提交既有 staged 内容；超出请求范围时停止。 |\n| 显式交付、空索引、限定路径 | 一次 `git add -- <selected-paths>`。 |\n| 显式交付、空索引、未限定路径 | 未禁止暂存且非 staged-only 时，在仓库根目录一次 `git add .`。 |\n| 宿主授权自动提交 | 一次 `git add -- <expected-commit-paths>`，禁止 `git add .`。 |\n\n宿主自动提交还必须有首次写入前的 HEAD、初始 Git 状态、允许路径和内容归属证据。\n初始索引非空、唯一暂存前出现非 Agent staged 内容、验证失败或仍有暂缓要求时，\n停止自动提交。这不反向限制用户已明确授权的 staged-only 提交。\n\n## 提交主流程\n\n1. 起草提交时读取 [提交信息契约](references/commit-message.md)。在主对话以 `text` 代码围栏展示\n   完整、将要使用的消息；仅预览到此结束，确认模式等待批准。\n2. 完成唯一暂存并复验后，将与预览完全一致的内容写入本任务专用消息文件。\n   候选或消息变化时重新审核和展示；用户要求确认时不复用旧批准。\n3. 使用 Skill 内校验器检查消息，再运行 `git commit -F <message-file>`。\n4. 以新建完整 commit hash 执行提交后消息一致性校验。校验失败时保留消息文件，\n   不 amend，不声称交付完成。\n5. 校验通过后删除本任务消息文件，读取 [统计与提交回执](references/reporting.md)，根据 Git 真实结果交付。\n\n任何技能或 Agent 需要拟定、分类或校验分支名称时，读取\n[统一分支命名](references/branch-naming.md) 并使用其中工具，不进入提交流程。\n\n## 完成与停止条件\n\n只有范围与 staged raw patch 一致、必要验证通过、Git 真实消息与预览一致，且最终\n状态和统计已核对时，才算创建提交完成。范围无法证明、出现冲突或漂移、权限被拒、\n提交前/后校验失败、hook 改写结果或统计不一致时保留现场并报告具体阶段，\n不自动扩大暂存、重试写入、amend 或清理用户状态。\n\n<!-- File: .agents/skills/review-pr/SKILL.md (Tokens: ~1945 | Category: anthropic-skill) -->\n---\nname: review-pr\ndescription: 审查 GitHub PR 的准确 head/base diff、关联 issue、CI 和 review threads，交付前刷新。创建 PR 使用 submit-pr；本地审查使用 review。\n---\n\n# GitHub PR 审查\n\n本 Skill 编排 GitHub PR 的身份、问题背景、本地准备、CI、线程和最终刷新。\n语义与正确性审查使用配套 `review`；审查本地工作树、提交、范围、文件或模块时直接使用\n`review`，不启动 PR 编排。\n\n`<review-pr-skill-dir>` 指实际加载的本 Skill 目录。优先从当前 Skill 清单定位 `review`，\n未提供位置时才检查 [同级安装位置](../review/SKILL.md)。开始 Git 准备前确认依赖可读；\n缺失时可收集获准的只读证据，但不得声称完整代码审查已完成。\n\n审查分支命名依赖同级完整安装的 `git-commit`，只使用其\n[统一命名规范与工具](../git-commit/references/branch-naming.md)；缺失时不执行本地 Git 准备，可继续远程证据审查。\n\n## 模式与授权\n\n- **默认本地审查**：明确请求审查 PR 时，包含必要的 remote 添加、fetch、安全分支创建或\n  fast-forward、upstream 设置和 checkout。\n- **隔离 worktree**：只在用户明确要求 worktree、并行或并发 review 时新建；本人 PR 分支\n  已在其他 worktree 打开时可复用其干净 checkout，后续命令使用回执路径。\n- **latest-base 集成审查**：只在用户明确要求更新最新 base、解决冲突或审查集成结果时使用。\n- **不改变 Git 状态**：遵守用户的只读或不切分支限制，改用可访问的准确远程 diff、源码和评论；\n  证据不足时报告限制。\n\n上述本地准备授权不包含产品修复、push、发布评论、approve、删除评论或关闭 PR。\n线程 resolve 需要单独的远程操作授权和当前远程证据。仅方案或解释不执行 Git 准备。\n\n## 核心安全边界\n\n- 默认本地模式从 `git status --short --branch` 开始；当前 checkout 有未提交变更时，\n  在切换分支前停止。显式 worktree 模式不得改变原 checkout，因此可从脏状态继续。\n- 多阶段 review 必须把首次准备回执中的 `checkout.branch` 作为后续阶段的显式输入；使用\n  helper 的 `--reuse-branch` 复验该分支、HEAD、upstream 和 worktree 占用，失败时停止，\n  不静默改选另一个分支。回执记录实际 helper 路径、入口 SHA 和准备依赖组合指纹，\n  按本地准备协议复验版本漂移。\n- 不覆盖、删除、重命名、rebase、reset、强制更新、stash 或丢弃本地分支、worktree 或变更。\n- 普通审查必须对应 PR 元数据的准确 `headRefOid` 和真实 base/merge-base diff；\n  不用 detached HEAD、已 fetch ref 或无关 `origin` 绕过身份检查。\n- 本人 PR 优先复用已核实身份的同名分支及等价 upstream。相同或落后的分支安全准备到远程\n  head；领先时保留额外提交，按冻结 Git 对象审查，不新建 review 分支。回执区分 checkout\n  与 review SHA；源码上下文和验证归属遵循 [证据协议](references/evidence-workflow.md)。\n  本人分支分叉或 upstream 不匹配时停止；其他作者仍按本地准备协议处理 collision fallback。\n- `mergeable: CONFLICTING`、`mergeStateStatus: DIRTY` 或 base 领先不构成 latest-base 授权。\n- 除非用户明确要求，审查、准备、冲突处理和线程维护都不 push。审查后保留准备好的\n  分支或 worktree，不自动删除。\n\n## 审查流程\n\n1. 读取 [证据收集与刷新](references/evidence-workflow.md)，收集并冻结 PR 身份、head/base、\n   [问题背景](references/problem-review.md)、checks 和完整 threads/replies。\n2. 允许 Git 准备时读取 [本地准备与 latest-base](references/local-preparation.md)；只读模式直接使用准确远程证据。\n3. 将 PR 目标、关键验收条件、冻结 base/head 和完整 raw diff 交给 `review`，检查需求满足程度、\n   实现方式与代码正确性。\n4. 评估每个开放 thread，包括 outdated、bot 和所有回复。已有评论只放在对应评论条目，\n   不重复列为独立 finding。需要 resolve 且已获授权时才读取\n   [线程维护](references/thread-resolution.md)。\n5. 如任务包含冲突处理、验证或本地提交，先完成这些获准操作；结论前按证据协议立即刷新 PR、\n   选定问题证据、checks 和完整 threads/replies，处理所有新活动。\n6. 生成最终回复前重新读取 [PR 审查报告](references/reporting.md)；此前已读过或上下文摘要中\n   提及过，均不替代此次读取。按该协议组织报告与必要的提交回执，并对实际回复草稿完成\n   [交付检查](references/reporting.md#交付检查) 后再输出。\n\n大 PR 或需要复用快照文件时才读取\n[快照传输协议](references/snapshot-protocol.md)；复杂复审报告可再读取 [完整示例](references/report-example.md)。\n\n## 完成与停止条件\n\n只有准确 remote head/base 与 merge-base、完整 diff、目标/问题证据、CI 状态、全部开放 threads\n及回复均已审查，最终刷新没有未检查活动，且最终报告通过交付检查时，才算完成。最终刷新发现 head/base、\n需求或线程变化时，根据影响更新 checkout、范围和判断，处理后再刷新一次。\n\n引用有歧义、准备会覆盖本地状态、依赖或必需证据不可用、身份/内容持续漂移、冲突需要产品判断，\n或最终刷新失败时，保留当前快照和本地状态，报告已审查 SHA 与未覆盖缺口；不无限重试。\n受阻或未完成报告仍遵循报告协议，保留内容介绍及验证限制；证据不足的字段明确标注缺失，\n不为满足格式编造内容，也不将报告格式完整视为审查已完成。\n\n<!-- File: .agents/skills/worktree-rebase-merge/SKILL.md (Tokens: ~1067 | Category: anthropic-skill) -->\n---\nname: worktree-rebase-merge\ndescription: 将当前 worktree 的任务提交 rebase 到本地目标分支，并从目标 worktree 合并。用于明确要求本地集成；仅创建提交使用 git-commit。\n---\n\n# Worktree Rebase/Merge 工作流\n\n将当前 checkout 视为源：必要时创建任务分支并提交，rebase 到目标分支，\n再从目标分支的 worktree 合并。源与目标相同时只提交，不 rebase 或 merge。\n\n## 依赖与授权\n\n完整交付依赖同级完整安装的 [`git-commit`](../git-commit/SKILL.md)，复用其提交、\n[统一分支命名](../git-commit/references/branch-naming.md)和已有提交回执能力。\n依赖缺失时可报告已知事实，但无法完成 helper 预检，在任何 Git 写入前停止。\n\n本 Skill 只在用户明确要求本地集成时执行 Git 写入。仅预览或只读请求不创建分支/\nworktree、不暂存、提交、rebase 或 merge。除非用户明确要求，不 fetch、pull 或 push。\n\n## Git 状态保护\n\n- 开始前确认允许路径、提交范围、用户限制，以及源/目标的 HEAD、索引、工作树、\n  worktree 占用和进行中操作。\n- Git 写操作串行执行；每次写入前复验相关状态，写入后确认结果符合预期。\n- rebase 前冻结源提交范围与目标 OID；rebase 后核对改写结果。merge 前确认源干净、\n  目标仍为冻结 OID，且目标 worktree 没有漂移。\n- 不使用 reset、强制移动 ref、stash 或 clean，不切换用户其他 checkout 的分支。\n- 发现非预期漂移、未解冲突、范围不一致、不能安全处理的语义冲突或权限拒绝时，\n  保留现场并停止后续写入。\n\n## 主流程\n\n1. 读取 [集成协议](references/integration-workflow.md)，使用其只读 helper 收集稳定的源/目标事实。\n2. 用户指定目标时使用该分支；否则按集成协议实时解析远程默认分支。目标或 remote\n   有歧义、无法证明实时默认分支或本地目标不存在时，在写入前停止并请用户指定。\n3. detached HEAD 按集成协议挂接到不覆盖现有 ref 的任务分支。没有 staged、unstaged、\n   untracked 或相对目标的提交时，不创建空分支。\n4. 源与目标相同时，只使用 `git-commit` 完成提交和回执。\n5. 其他情况先用 `git-commit` 提交获准的源变更，要求源 worktree 干净；再检查完整\n   `<target>..<source>` 提交和路径范围，执行 `git rebase <target>` 并验证改写结果。\n6. 在干净的目标 worktree 执行 `git merge <source>`。没有目标 worktree 时，在仓库外创建临时\n   worktree，成功合并后删除；冲突或失败时保留供恢复。\n7. 读取 [集成回执](references/reporting.md)，报告真实分支、OID、worktree、rebase/merge、工作树和\n   Push 状态；单提交或多提交统计复用 `git-commit` 的回执契约。\n\n## 完成与停止条件\n\n直接提交模式在 `git-commit` 完成时结束。普通集成只有在源已成功 rebase、目标从冻结\nOID 按预期合并、源与目标最终状态已验证且回执完整时才算完成。目标只有脏\nworktree 时，允许先完成源提交，然后在 rebase/merge 前暂停；恢复步骤见集成协议。\n\n<!-- File: docs/references/README.md (Tokens: ~117 | Category: anthropic-skill) -->\n# Agent 规则参考\n\n本目录保存长期使用的外部来源证据。参考资料只提供证据，不定义 Easydict 的执行规则；\nSkills 的来源基线与同步命令由 [`docs/agents/skills.md`](../agents/skills.md) 统一维护。\n\n## 当前参考\n\n- [`astra-agent-guidance.md`](astra-agent-guidance.md)：保留 Astra 指令适配的历史来源。\n\n<!-- File: docs/agents/build-and-test.md (Tokens: ~1785 | Category: subagent-persona) -->\n# 构建与测试\n\n## 测试与验证原则\n\n- 只有用户在当前任务中明确要求添加测试，才允许新增或扩写测试，包括测试文件、suite、用例、断言、\n  fixture、mock、helper 和仅为测试引入的生产代码 hook；修复 bug、新增功能、修改复杂逻辑和回归\n  风险都不构成授权。\n- 未获授权时可以运行和分析现有测试，认为需要补充时只在结果中提建议；获授权后优先更新现有用例，\n  遵循最小范围，不为测试简单实现增加生产抽象、mock 或 hook。\n- 新增服务时，必须新增该服务专属的验证测试文件。服务验证可以依赖实现者本机的 CLI、登录态、密钥或\n  其他配置；实现者必须在自己的开发环境中运行并通过该验证。此类环境依赖测试不要求每位开发者或 CI\n  持续运行，应通过非默认 test plan 或 Xcode 的精确测试选择运行，且不得将其误认为默认离线回归测试。\n- 优先运行直接覆盖变更风险的检查，影响范围不明确时再扩大；只修改已授权的测试与 fixture，不把\n  未运行、失败或环境阻塞的检查写成通过。\n\n## 测试与工程文件组织\n\n- 测试目录按领域对应源码模块，Swift 测试以 `Easydict/Swift/` 为映射根，例如 `Service/OpenAI/`\n  对应 `EasydictTests/Service/OpenAI/`；跨模块测试按主要业务归属放置，现有目录按任务范围渐进调整。\n- 每个测试文件聚焦一个主要被测类型或行为领域，最多声明一个 `@Suite`；接近文件规模限制时按职责\n  拆分 suite 和 fixture，保留原有覆盖和标签、actor 隔离、共享状态恢复、串行边界。独立 suite 的\n  `.serialized` 不提供跨 suite 串行保证。\n- 单文件 helper 保持局部，同领域共享工具就近放置，跨目录复用的 fixture 或工具放入\n  `EasydictTests/Support/<Domain>/`，资源放入对应测试资源目录。\n- 新增、移动或删除由 Xcode 管理的源码文件或运行时资源时，同步\n  `Easydict.xcodeproj/project.pbxproj` 中的 group、文件和 build phase 引用，测试文件同时同步测试\n  target 的 Sources，删除文件不保留悬空引用。仓库治理 Markdown、plan、history、skill、参考资料\n  和 `docs/` 下的公共 Markdown 不需要工程引用，除非作为运行时资源发布。\n\n## 选择验证\n\n根据变更需要证明的结果选择最小且充分的验证，不按变更行数设置硬阈值。\n\n- 纯治理 Markdown、plan、history、注释，以及不进入 Xcode 构建图的脚本或配置，只运行相应静态\n  检查：Markdown 的格式、相对链接、锚点和规则语义检查。\n- 生产源码、工程/workspace、target、build setting、build phase、依赖、entitlement、Info.plist\n  或运行时资源发生实质变化时，运行覆盖受影响配置的 `xcodebuild build`；修复 bug、修改可测试\n  行为或测试源码及其 target 引用时，运行覆盖相应行为、suite 或方法的 `xcodebuild test`。\n- `xcodebuild build` 只证明构建集成；相同配置的成功测试已覆盖编译，不重复运行 build，测试未覆盖\n  的 Release、Archive、签名或其他配置另行验证。重复运行兼容的测试时先 `build-for-testing`，再\n  用 `test-without-building`，前者本身不构成测试通过证据。\n- 每次变更运行 `git diff --check`；对变更的 `.xcstrings` 或 JSON 运行 `jq -e .`，对变更的 Shell\n  脚本运行 `bash -n`。\n- 并发判据是构建目录而不是构建入口：同一 workspace 与同一 DerivedData 的并发构建，无论来自\n  Xcode IDE 还是 `xcodebuild`，都会互相破坏增量状态和 build database；DerivedData 不同可以并行。\n- 因此 agent 运行 `xcodebuild` 时始终显式指定 `-derivedDataPath`，指向按 checkout 派生、与 Xcode\n  默认目录不相交的 `~/Library/Developer/Xcode/DerivedData/Easydict-Agent/<checkout-id>`；损坏时\n  删除该目录重建，不切换到 Xcode 默认 DerivedData。\n- `xcodebuild test` 会启动同 bundle id 的 `Easydict-debug.app` 测试宿主，不要与 Xcode 的 Run/Test\n  同时运行；构建与 Archive 不受此限制。\n## 常用命令\n\n```bash\n# 每个 checkout 一个 agent 专用 DerivedData，与 Xcode 默认目录互不相交\nset -o pipefail\ncheckout_id=\"$(git rev-parse --show-toplevel | sed -e \"s|^$HOME/||\" -e 's|^\\.||' -e 's|/|_|g')\"\nagent_dd=\"$HOME/Library/Developer/Xcode/DerivedData/Easydict-Agent/$checkout_id\"\n\n# 构建\nxcodebuild build \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 运行测试\nxcodebuild test \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 构建可复用的测试产物\nxcodebuild build-for-testing \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" | xcbeautify\n\n# 复用已构建产物运行指定 suite 或方法，-only-testing 支持 <Suite> 与 <Suite>/<test>\nxcodebuild test-without-building \\\n  -workspace Easydict.xcworkspace \\\n  -scheme Easydict \\\n  -derivedDataPath \"$agent_dd\" \\\n  -only-testing:EasydictTests/UtilityFunctionsTests | xcbeautify\n```\n\n`xcbeautify` 依赖 `pipefail` 才能保留 `xcodebuild` 的真实退出状态。重建时只删除当前 checkout 的\n`agent_dd`，不动 Xcode 默认目录或其他 checkout。\n\n<!-- ... +3 more modular skills available via /api/skills/tisfeng/Easydict?path={path} -->\n</yakaai_skills>"}