SuperAPI AI 工具集

structural-index

编程与开发

查看项目

更新于 10-20 16:12

技能介绍

用途

structural-index 是一个用于 Drupal 项目的结构索引生成与查询技能(Skill)。它解析项目中的声明式配置(如 services.yml、routing.yml、钩子、插件和实体类型),自动生成结构化的索引文档,并支持通过 discover 命令进行查询,帮助开发者理解代码库的“是什么”和“如何连接”。

主要能力

  • 生成结构索引:运行 generate-all.sh 脚本,在 docs/semantic/structural/ 目录下生成多个 Markdown 文件,包括:
    • services.md:服务 ID、类、注入依赖、模块、标签
    • routes.md:路由名称、路径、控制器/表单、访问权限、模块
    • hooks.md:钩子实现(过程式和面向对象)
    • plugins.md:Block、FieldType、Action、QueueWorker 等插件
    • entities.md:内容实体和配置实体类型(含字段列)
    • schemas.md:实体模式摘要(每个 bundle 的字段、引用、列表)
    • base-fields.md:基础字段注册表(来自 PHP baseFieldDefinitions())
    • permissions.md:权限注册表(来自 *.permissions.yml)
    • methods.md:方法索引(Service/Controller/Form 中的公共方法)
    • 同时生成 docs/semantic/schemas/*.json(每个 bundle 的 JSON 模式,含字段类型、标签、基数、目标类型/ bundle、允许值)和 *.base-fields.json(每个实体的基础字段模式,含实体元数据、字段类型、设置)
    • docs/semantic/DEPENDENCY_GRAPH.md:交叉引用依赖分析
    • docs/semantic/FEATURE_MAP.md:功能概览及结构计数
  • 检查索引是否过时:运行 check-staleness.sh 脚本,根据文件修改时间报告哪些结构文件需要重新生成。
  • 查询结构数据:通过 discover 技能查询已生成的索引,支持以下前缀:
    • service: 或 svc: 查找服务
    • route: 或 path: 按路径查找路由
    • hook: 查找钩子实现
    • plugin: 查找插件(如 Block)
    • entity: 查找实体类型
    • schema: 显示实体 bundle 的字段模式
    • perm: 查找权限
    • method: 查找相关方法
    • deps: 进行影响范围/依赖分析
    • impact: 查看哪些模块依赖指定模块
  • 输出格式:各 Markdown 文件以表格形式呈现,便于阅读和检索;JSON 模式文件按需加载。

使用方式

  • 生成索引:在项目目录下运行 $SKILL_DIR/scripts/generate-all.sh [project-dir]。
  • 检查过时:运行 $SKILL_DIR/scripts/check-staleness.sh [project-dir]。
  • 查询:使用 discover 命令,例如 discover service:entity_type.manager、discover hook:node_presave、discover deps:AUTH 等。

适用场景

  • 需要快速了解 Drupal 项目的服务依赖、路由、钩子和插件结构。
  • 进行变更影响分析(如修改某个服务或模块的影响范围)。
  • 作为语义文档(Layer 3)和原始代码库(Layer 1)之间的中间层(Layer 2),辅助架构理解和文档生成。
  • 与 discover 技能、prime.sh 和自动化代理集成,提供结构上下文。

限制

  • 仅提取 YAML 配置中的可配置字段;基础字段在单独的 *.base-fields.json 文件中。
  • 配置目录自动从常见位置检测(config/sync、config/default、config/staging、../config/sync),非标准路径需符号链接或调整。
  • 来自父类 baseFieldDefinitions() 的字段(id、uuid、langcode)是隐式的,未枚举。
  • 没有 baseFieldDefinitions() 的配置实体会被跳过。
  • 来自 permission_callbacks 的动态权限无法检测。
  • 需要 Drupal 项目具有标准目录结构,且存在 docs/semantic/ 目录作为输出位置。
  • 无外部依赖(仅 grep/sed/awk),可选 yq 以提升 YAML 解析精度。