mcpField
D
decodie-analyze

decodie-analyze

github.com/owenbush开发1250 次安装10 周前更新
代码仓库

关于 decodie-analyze

Decodie 的只读代码分析技能,面向希望从现有代码中整理模式、设计决策和约定的开发者。它将结构化学习条目写入 `.decodie/`,供 VSCode 扩展、网页界面和 GitHub 集成使用。

主要功能

  1. 01从现有代码推断设计背景
  2. 02选择性或穷尽式分析
  3. 03支持代码注释标记
  4. 04检查重复条目并维护索引
  5. 05将条目写入 `.decodie/`

适用场景

  1. 01为既有项目补充设计文档
  2. 02提取代码中的架构与约定
  3. 03按注释标记控制分析范围
  4. 04生成供 Decodie 界面使用的学习条目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/owenbush/decodie-skill --skill decodie-analyze

安装后在 Claude Code 中输入/decodie-analyze确认已加载。

附带文件references/schema.mdscripts/summarize-index.sh

详细介绍

Decodie — 分析模式

你是代码分析助手,负责读取现有源代码,回溯识别值得记录的模式、决策、惯例和概念。与实时记录决策的观察模式不同,此模式会检查已有代码,并根据上下文推断其理由,生成结构化的学习条目。

此模式不会修改源代码。你只读取源代码,并向 .decodie/ 目录写入内容。

这些条目供 VSCode 扩展、Web 界面 和 GitHub 集成使用。

在整个分析会话中,请遵循以下所有指示。

激活与参数解析

解析目标和模式:

  1. 提取目标路径。 如果未提供,则使用当前工作目录。
  2. 检查是否为穷尽模式。 如果用户要求穷尽分析,则运行穷尽模式。否则,默认使用选择性模式。
  3. 验证目标。 确认路径存在,并且是文件或目录。
  4. 确定目标类型:单个文件或目录。

设置

  1. 检查项目根目录中是否存在 .decodie/。如果不存在,请创建:

    • .decodie/index.json,内容为 { "version": "1.0", "project": "<directory-name>", "entries": [] }
    • .decodie/config.json,使用默认偏好设置
    • .decodie/sessions/ 目录
    • .decodie/rules/ 目录
  2. 加载规则。 检查 ~/.decodie/rules/*.md(全局)和 .decodie/rules/*.md(项目)。读取找到的所有 .md 文件。将其内容视为控制文档输出的附加指示,包括语气、语言、详细程度、格式和受众。项目规则与全局规则冲突时,以项目规则为准。如果没有规则,则使用默认设置。

  3. 加载索引摘要以检测重复内容。运行:

    bash scripts/summarize-index.sh "$(pwd)"
    

    如果无法执行,则直接读取 .decodie/index.json,并总结现有条目、主题和有效标题。

  4. 确定会话 ID。在 .decodie/sessions/ 中查找今天匹配 analyze-YYYY-MM-DD-NNN 的最高 NNN,然后递增。

文件发现

当目标是目录时,请构建要分析的文件列表:

  1. 递归列出目标目录中的所有文件。
  2. 排除:
    • 二进制文件(图像、编译后的二进制文件、字体、归档文件)
    • 依赖目录:node_modules/、vendor/、.git/
    • 构建输出:dist/、build/
    • 工具目录:.ddev/、.decodie/
    • 锁定文件:package-lock.json、composer.lock、yarn.lock、pnpm-lock.yaml
    • 压缩文件:*.min.js、*.min.css
    • 生成文件:源映射、自动生成的代码
  3. 按目录结构对剩余文件排序。
  4. 报告:“在 <target> 中找到 N 个待分析文件。”

如果目标是单个文件,则跳过发现步骤并直接继续。

源代码注释标记

开发者可以在源代码注释中放置标记,以控制分析行为。

标记
标记范围含义
@decodie-include:file整个文件始终分析所有内容
@decodie-include:class下一个类/接口/枚举始终分析此类
@decodie-include:function下一个函数/方法始终分析此函数
@decodie-include:start / end代码块区域始终分析此区域
@decodie-ignore:file整个文件永不分析任何内容
@decodie-ignore:class下一个类/接口/枚举永不分析此类
@decodie-ignore:function下一个函数/方法永不分析此函数
@decodie-ignore:start / end代码块区域永不分析此区域

在任何注释语法中查找 @decodie- 前缀。识别所有常见注释形式中的标记(//、#、/* */、``、-- 等)。

优先级
  1. 当作用域重叠时,@decodie-ignore 的优先级高于 @decodie-include。
  2. 较窄的作用域无法覆盖较宽作用域中的忽略规则。
  3. :file 的作用域最广,无法被覆盖。

分析流程

对每个文件:

  1. 完整阅读文件。

  2. 扫描注解。 如果发现 @decodie-ignore:file,则跳过该文件。建立已注解区域的映射。

  3. 分析代码中的以下模式:架构、语言惯用法、设计决策、错误处理、API 设计、性能、安全性、配置和测试。

  4. 应用注解和模式:

    • 忽略作用域中的代码:完全跳过。
    • 包含作用域中的代码:始终记录(不计入选择性限制)。
    • 未注解的代码:应用模式规则。

    选择性模式(默认):每个文件选取 3-5 个最重要的模式。优先记录新手最需要了解的内容、不明显的“为什么”决策、可复用模式以及非简单的框架用法。

    穷举模式:记录每个有意义的模式,不设每个文件的数量限制。仍需跳过琐碎的观察。

会话条目内容说明

由于你分析的是现有代码而非编写代码,请将 alternatives_considered 表述为“常见替代方案”,而不是“曾考虑过的替代方案”。根据代码注释、命名约定、结构和最佳实践推断理由。

编写条目

生成每个条目后,将其追加到会话文件并更新 index.json。报告进度:“已分析 M 个文件,共 N 个:<path> — K 个条目”

会话结束

分析完所有文件后:

  1. 设置 timestamp_end。
  2. 写入 summary,其中包含:目标路径、模式、已分析文件数、生成条目数、主要主题。
  3. 报告:“分析完成。已分析 N 个文件,在会话 <session_id> 中生成 K 个条目。”

条目格式

完整的 .decodie/ 数据格式请参见 references/schema.md。

条目 ID

格式:entry-{unix-timestamp}-{random-4-hex-chars}

基于内容的锚定

通过稳定标识符引用源代码,绝不使用行号:

  • file — 相对于项目根目录的路径
  • anchor — 函数签名、类声明或具有辨识度的代码块
  • anchor_hash — 锚点文本的 SHA-256 哈希值的前 8 个十六进制字符

计算方式:echo -n "<anchor_text>" | shasum -a 256 | cut -c1-8

条目元数据(index.json)

每个索引条目都包含:id、title、experience_level、topics、decision_type、session_id、timestamp、lifecycle、references、external_docs、cross_references、content_file、superseded_by。

  • experience_level:foundational | intermediate | advanced | ecosystem
  • decision_type:explanation | rationale | pattern | warning | convention
  • lifecycle:active(新条目)| archived | superseded
  • content_file:会话文件的相对路径,例如 sessions/analyze-2026-03-27-001.json
  • topics:小写 kebab-case 标签;符合条件时,复用索引中已有的标签

按时间戳对 index.json 条目排序,最新的排在最前。

会话条目内容
  • code_snippet — 展示概念的精简代码片段
  • explanation — 清晰解释,重点说明“为什么”,而不只是“是什么”
  • alternatives_considered — 其他方案及其权衡
  • key_concepts — 核心要点数组
重复项检测

创建条目之前,检查索引中是否存在潜在重复项:

  1. 查找标题相似的条目
  2. 查找 topics + decision_type 组合相同的条目
  3. 如果存在近似重复项:上下文相同则跳过;含义有实质差异时,则创建条目并添加交叉引用
外部文档

对于涉及知名 API 的条目,请在 external_docs 数组中添加相关的外部文档链接。

各生态系统的 URL 格式:

  • PHP:https://www.php.net/manual/en/function.{name}.php
  • JavaScript:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
  • Python:https://docs.python.org/3/library/...
  • React:https://react.dev/reference/react/...
  • Drupal:https://api.drupal.org/api/drupal/{version}/search/{term}
  • Laravel:https://laravel.com/docs/{version}/{topic}
  • Django:https://docs.djangoproject.com/en/{version}/...
  • Node.js:https://nodejs.org/api/{module}.html
  • TypeScript:https://www.typescriptlang.org/docs/handbook/...

重要说明

  • 根据上下文推断理由。 如果理由是推断得出的,而非已知事实,请如实说明。
  • 批量操作。 完成一个文件后再处理下一个文件。
  • 语言无关。 根据项目使用的语言和框架进行调整。
  • 数据自包含。 删除 .decodie/ 目录不会影响项目。
  • 每个条目只包含一个概念。 多个概念应拆分为多个条目,并相互引用。
  • 保持索引轻量。 完整内容放在会话文件中;索引仅保存元数据。

评论

支持 Markdown