**重要说明**: 此提示词可能在非交互式环境中运行（如 CI/CD、自动化脚本）。

**非交互式模式**:
- 禁止使用 `AskUserQuestion` 或任何交互式工具
- 当需要用户输入时：
  - 使用合理的默认值
  - 跳过可选的确认步骤
  - 记录所做的假设

**交互式模式**:
- 遵循正常的交互式流程，提示用户输入

---

<task>
分析仓库结构，生成或更新 `hagindex.yml` 文件。
{{#if monoSpecsRepositories}}

**注意**：此任务需要为 MonoSpecs 项目的多个子仓库生成独立的索引文件。
{{/if}}
</task>

<context>
用户正在以下 Git 仓库中工作：
<project_path>
{{ projectPath }}
</project_path>
{{#if repositoryPath}}
<sub_repository>
子仓库路径: {{ repositoryPath }}
这是 MonoSpecs 项目的子仓库，AI 应在此子仓库路径下进行分析和操作。
</sub_repository>
{{/if}}
{{#if monoSpecsRepositories}}

<MonoSpecs 子仓库列表>
这是 MonoSpecs 项目的子仓库列表，你需要为每个子仓库生成独立的 hagindex.yml 文件：
{{#each monoSpecsRepositories}}
- 子仓库: {{{ displayName }}}
  路径: {{{ path }}}
  类型: {{{ type }}}
  图标: {{{ icon }}}
{{/each}}
</MonoSpecs>
{{/if}}

<最近提交分析>
**重要**：在分析仓库结构之前，先检查最近的 Git 提交记录，了解项目的最新变更。

使用 `git log` 获取最近的提交（例如：`git log -n 10 --pretty=format:"%h - %an, %ar : %s"`）。这将帮助你：
- 了解最近修改了哪些文件
- 识别项目中正在活跃开发的区域
- 优先读取反映项目当前状态的文件

在生成 hagindex.yml 时，结合最近提交的上下文，确保索引反映最新的结构和关注重点。
</最近提交分析>

`hagindex.yml` 文件用于：
- 快速了解仓库结构
- 查找关键入口点和重要文件
- 提供高级概览用于文档或 UI 显示
- 允许开发者选择仓库的特定方面进行深入探索

你需要：
1. 探索仓库结构（使用 Bash、ls、find 等工具）
2. 识别关键入口点、配置文件和重要目录
3. 按照指定格式生成或更新 `hagindex.yml` 文件
</context>

<working_directory>
使用此项目路径作为工作目录: {{ projectPath }}
{{#if repositoryPath}}
子仓库路径: {{{ repositoryPath }}}
{{/if}}
{{#if monoSpecsRepositories}}

对于 MonoSpecs 模式，你需要在以下每个子仓库路径下执行分析和文件生成操作。
{{/if}}
</working_directory>

<tools>
你可以使用以下工具:
- Bash - 执行命令（git、ls、find、cat 等）
- Read - 读取文件内容
- Write - 写入文件（生成 hagindex.yml）
- Edit - 编辑现有文件
- Glob - 按模式查找文件
</tools>

<requirements>
  <requirement>
    **hagindex.yml 结构**:

    文件必须包含以下字段：
    - `version`: 版本号（当前使用 "1.0"）
    - `name`: 仓库名称
    - `displayName`: 显示名称（用于 UI 显示）
    - `description`: 简短描述（用于 UI 显示）
    - `indexedAt`: 索引日期（YYYY-MM-DD 格式）
    - `generatedBy`: 生成者（如 "claude-code"）
    - `quickRef.catalogs`: 可用目录定义列表
    - `quickRef.{catalogId}`: 每个目录的项目列表
  </requirement>

  <requirement>
    **Catalog 聚焦要求（非常重要）**:

    生成的 catalog 必须聚焦于项目的**物理结构、功能特性和业务能力**，而不是技术栈：

    1. **排除技术栈标签**：
       - 禁止生成如 ".NET"、"Electron"、"React"、"TypeScript"、"SignalR"、"Orleans"、"Astro"、"Ansible" 等通用技术名称
       - technologies catalog 应该聚焦于**核心架构组件或基础设施**，而不是具体的技术框架

    2. **优先识别功能模块（features）**：
       - **必须识别项目的业务功能、功能模块或核心能力**
       - 例如："用户认证"、"订单管理"、"支付处理"、"数据分析"、"API 接口"等
       - features catalog 是最有价值的索引维度，帮助用户找到具有特定功能的代码

    3. **有价值的 catalog 类型**：
       - `entryPoints` - 入口点（应用程序、服务、工具的启动入口）
       - `configFiles` - 关键配置文件
       - `directories` - 重要目录结构
       - `features` - **业务功能模块（最重要，优先添加）**
       - `workflows` - 常用工作流或命令
       - `environments` - 环境配置
       - `coreComponents` - 核心组件（如 "数据库访问层"、"消息队列"、"缓存系统"）

    4. **根据项目类型索引特定内容**：
       - 前端项目：索引 components、pages、apiClients、stores、hooks
       - 后端项目：索引 dataModels、services、apis、repositories、migrations
       - 桌面端项目：索引 windows、controls、viewModels、services、platformIntegration
  </requirement>

  <requirement>
    **目录定义格式（使用中文）**:
    ```yaml
    quickRef:
      catalogs:
        - id: "entryPoints"
          title: "入口点"
          desc: "不同用途的主要入口点"
        - id: "configFiles"
          title: "配置文件"
          desc: "关键配置文件"
        - id: "directories"
          title: "目录结构"
          desc: "重要目录"
    ```
  </requirement>

  <requirement>
    **项目列表格式（使用中文）**:
    ```yaml
    quickRef:
      entryPoints:
        - title: "项目名称"
          desc: "项目的简要说明"
          path: "path/to/project"

      configFiles:
        - title: "配置文件"
          desc: "配置文件的用途"
          path: "path/to/config"

      directories:
        - title: "目录名"
          desc: "目录包含的内容"
          path: "path/to/dir"

      features:
        - title: "功能模块名"
          desc: "功能模块的描述"
          path: "path/to/feature"
    ```
  </requirement>

  <requirement>
    **技术栈感知索引（非常重要）**:

    根据项目的技术栈类型，需要索引不同的关键内容：

    1. **前端项目** (type: "frontend", "web", "react", "vue", "angular" 等)：
       - **components** - 关键 React/Vue/Angular 组件
       - **pages** - 主要页面和路由
       - **apiClients** - API 客户端调用
       - **stores** - 状态管理（Redux, Vuex, Context 等）
       - **hooks** - 自定义 Hooks

    2. **后端项目** (type: "backend", "api", "service" 等)：
       - **dataModels** - 数据模型/实体（Entity, Model）
       - **services** - 服务层（Business Logic）
       - **apis** - API 控制器/端点
       - **repositories** - 数据访问层
       - **migrations** - 数据库迁移

    3. **桌面端项目** (type: "desktop", "electron", "tauri", "winforms", "wpf" 等)：
       - **windows** - 窗口/视图
       - **controls** - 自定义控件
       - **viewModels** - 视图模型 (MVVM)
       - **services** - 桌面服务
       - **platformIntegration** - 平台集成功能

    4. **通用目录**（所有项目类型）：
       - **entryPoints** - 入口点
       - **configFiles** - 配置文件
       - **directories** - 目录结构
       - **features** - 业务功能模块
  </requirement>

  <requirement>
    **最佳实践**:
    1. 每个目录保持简洁（最多 3-10 个项目）
    2. **features catalog 是最重要的**，优先识别项目的业务功能模块
    3. 只包含有意义的条目
    4. 验证路径在添加之前存在
    5. 准确反映当前仓库状态
  </requirement>
</requirements>

<steps>
{{#if monoSpecsRepositories}}
1. 遍历 MonoSpecs 子仓库列表，对每个子仓库执行以下操作：
{{#each monoSpecsRepositories}}
   - 处理子仓库: {{{ displayName }}} (路径: {{{ path }}}, 类型: {{{ type }}})
{{/each}}

2. 对于每个子仓库，根据其类型执行特定索引：
   - 对于前端项目 
     - 索引 components（关键组件）、pages（页面）、apiClients（API客户端）
     - 索引 stores（状态管理）、hooks（自定义 Hooks）
   - 对于后端项目 
     - 索引 dataModels（数据模型）、services（服务层）、apis（API端点）
     - 索引 repositories（数据访问层）、migrations（数据库迁移）
   - 对于桌面端项目 
     - 索引 windows（窗口）、controls（控件）、viewModels（视图模型）
     - 索引 services（服务）、platformIntegration（平台集成）
{{else}}
1. 探索仓库结构：
   - 列出顶级目录
   - 检查 monorepo 配置（monospecs.yaml、package.json、pnpm-workspace.yaml 等）
   - 识别子项目（如果是 monorepo）

2. 定义目录：
   - 始终包含: entryPoints, configFiles, directories
   - **必须添加 features 目录**：识别项目的业务功能模块
   - 根据需要添加: workflows, environments, coreComponents 等

3. 填充项目：
   - 为每个目录识别相关项目
   - 每个需要: title（必填）、desc（必填）、path（可选）
   - **features 目录应聚焦于业务功能**，而非技术栈

4. 生成 YAML：
   - 检查是否已存在 hagindex.yml
   - 如果存在，读取并更新内容
   - 如果不存在，创建新文件
   - 使用 Write 工具写入最终文件
{{/if}}
</steps>

<output>
{{#if monoSpecsRepositories}}
完成时，为每个子仓库输出：
1. 生成的或更新的 hagindex.yml 文件路径列表（格式：子仓库路径|hagindex.yml）
2. 每个子仓库的目录数量和项目数量统计
3. 主要发现（如有）
{{else}}
完成时，输出：
1. 生成的或更新的 hagindex.yml 文件路径
2. 包含的目录数量和项目数量统计
3. 主要发现（如有）
{{/if}}
</output>

<examples>
{{#if monoSpecsRepositories}}
**MonoSpecs 多仓库示例**:
```yaml
# 文件路径: repos/hagicode-core/hagindex.yml
version: "1.0"
name: "hagicode-core"
displayName: "HagiCode 核心库"
description: "Hagicode 项目的核心代码库"
indexedAt: "2026-03-03"
generatedBy: "claude-code"

quickRef:
  catalogs:
    - id: "entryPoints"
      title: "入口点"
      desc: "不同用途的主要入口点"
    - id: "dataModels"
      title: "数据模型"
      desc: "核心数据模型和实体"
    - id: "services"
      title: "服务层"
      desc: "业务逻辑服务"
    - id: "apis"
      title: "API 接口"
      desc: "API 控制器和端点"
    - id: "features"
      title: "功能模块"
      desc: "项目的主要功能模块"

  entryPoints:
    - title: "主程序入口"
      desc: "应用程序启动入口"
      path: "src/Program.cs"

  dataModels:
    - title: "用户实体"
      desc: "用户数据模型"
      path: "src/Models/User.cs"
    - title: "订单实体"
      desc: "订单数据模型"
      path: "src/Models/Order.cs"

  services:
    - title: "用户服务"
      desc: "用户相关业务逻辑"
      path: "src/Services/UserService.cs"
    - title: "订单服务"
      desc: "订单相关业务逻辑"
      path: "src/Services/OrderService.cs"

  apis:
    - title: "用户 API"
      desc: "用户管理接口"
      path: "src/Controllers/UserController.cs"
    - title: "订单 API"
      desc: "订单管理接口"
      path: "src/Controllers/OrderController.cs"

  features:
    - title: "用户认证"
      desc: "用户登录和权限管理"
      path: "src/Auth"
```
{{else}}
**简单仓库示例**:
```yaml
version: "1.0"
name: "my-app"
displayName: "我的应用"
description: "一个简单的 Web 应用程序"
indexedAt: "2026-03-02"
generatedBy: "claude-code"

quickRef:
  catalogs:
    - id: "entryPoints"
      title: "Entry Points"
      desc: "Main entry points for different purposes"
    - id: "configFiles"
      title: "Config Files"
      desc: "Key configuration files"
    - id: "directories"
      title: "Directories"
      desc: "Important directories"

  entryPoints:
    - title: "主应用"
      desc: "React 应用入口"
      path: "src/App.tsx"

  configFiles:
    - title: "package.json"
      desc: "NPM 包配置"
      path: "package.json"

  directories:
    - title: "src"
      desc: "源代码目录"
      path: "src"
```

**Monorepo 示例**:
```yaml
version: "1.0"
name: "monorepo"
displayName: "Monorepo 项目"
description: "一个包含多个包的 TypeScript monorepo"
indexedAt: "2026-03-02"
generatedBy: "claude-code"

quickRef:
  catalogs:
    - id: "entryPoints"
      title: "入口点"
      desc: "不同用途的主要入口点"
    - id: "configFiles"
      title: "配置文件"
      desc: "关键配置文件"
    - id: "directories"
      title: "目录结构"
      desc: "重要目录"
    - id: "features"
      title: "功能模块"
      desc: "项目的主要功能模块"

  entryPoints:
    - title: "Web 应用"
      desc: "Next.js Web 应用"
      path: "apps/web"
    - title: "API 服务"
      desc: "Express API 服务"
      path: "packages/api"

  configFiles:
    - title: "pnpm-workspace.yaml"
      desc: "PNPM 工作区配置"
      path: "pnpm-workspace.yaml"
    - title: "turbo.json"
      desc: "Turborepo 配置"
      path: "turbo.json"

  directories:
    - title: "apps"
      desc: "应用包"
      path: "apps"
    - title: "packages"
      desc: "共享包"
      path: "packages"

  features:
    - title: "用户认证"
      desc: "跨包的用户认证功能"
      path: "packages/auth"
    - title: "订单管理"
      desc: "订单创建、支付和物流"
      path: "packages/orders"
```
{{/if}}
</examples>
