Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>ZK Qoder SyncNew to Visual Studio Code? Get it now.
ZK Qoder Sync

ZK Qoder Sync

zk-qoder-sync

| (0) | Free
ZK Qoder 缓存数据库采集工具,支持增量采集、文件对比和 API 同步
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Qoder Sync - Qoder 缓存数据库采集工具

一个用于采集和分析 Qoder 缓存数据库的 VS Code 插件,支持导出 JSON 和同步到公司数据库。

📑 目录

  • 功能
  • 安装
  • 使用方法
    • 快速开始
    • 命令列表
  • VS Code 配置项
  • 开发与打包
    • 版本升级指南
    • 打包插件
    • 完整发布流程
  • 更新日志
  • 常见问题
  • 许可证

功能

🎯 核心功能

1. 数据采集

  • ✅ 会话采集: 查询 chat_session 表中的所有会话信息
  • ✅ 文件版本采集: 查询 chat_working_space_file 表中的所有文件版本
  • ✅ 增量采集: 记录上次统计的结束时间,下次只采集新数据,避免重复
  • ✅ 分批采集: 每批最多采集 50 条变更,分批发送,避免数据过大
  • ✅ 版本对比: 对比同一文件不同版本的内容变更,识别新增和修改的代码行
  • ✅ 状态识别: 根据 status 字段判断版本是否被接受(ACCEPTED/APPLIED/REJECTED 等)

2. 对话记录采集

  • ✅ 双模式支持:
    • 编辑器用户(editor): 从 state.vscdb 采集对话记录
    • 插件用户(plugin): 从缓存目录和 chat_message 表采集对话记录
  • ✅ 状态自动计算: 根据代码变更自动推断对话记录状态(ACCEPTED/PARTACCEPTED/REJECTED)
  • ✅ 时间范围过滤: 只采集指定时间范围内的对话记录

3. 数据输出

  • ✅ JSON 导出: 导出完整的 JSON 数据文件,包含会话、代码变更、对话记录
  • ✅ API 同步: 自动调用后端 API 同步数据到公司数据库
  • ✅ 分片上传: 数据过大时自动分片上传,避免请求失败
  • ✅ 数据查看器: 内置 HTML 查看器,方便浏览采集数据

🔄 自动化功能

4. 定时任务

  • ✅ 自动采集任务:
    • 首次采集 7 天数据
    • 之后每 30 分钟增量采集
    • Cron 表达式可配置(默认 */30 * * * *)
  • ✅ 持久化任务: 关闭/重启 VS Code 后自动恢复自动任务
  • ✅ 启停控制: 手动启动/停止自动任务
  • ✅ 间隔控制: 可设置最小执行间隔,避免频繁执行

5. 文件同步(规则/技能/智能体)

  • ✅ 规则同步: 自动同步 .qoder/rules 文件夹下的规则文件
  • ✅ 技能同步: 自动同步 .qoder/skills 文件夹下的技能文件
  • ✅ 智能体同步: 自动同步 .qoder/agents 文件夹下的智能体文件
  • ✅ 综合同步: 一键同步规则+技能+智能体,支持独立定时任务(默认每小时)
  • ✅ 增量同步: 对比本地和远程文件,只同步有变化的文件
  • ✅ 文件管理: 支持新增、更新、删除操作
  • ✅ 定时同步: 单项与综合同步默认均为每小时执行一次(Cron: 0 * * * *)
  • ✅ 版本控制: 通过 manifest.json 记录文件版本和时间戳
  • ✅ 配置向导: 首次使用自动引导配置,包含数据授权、用户信息、数据库配置等
  • ✅ 用户授权: 首次使用需同意数据采集,保护用户隐私
  • ✅ 用户信息强制校验: 采集前必须配置用户类型和用户名(用户名仅校验非空)
  • ✅ 数据库路径选择器: 支持自动检测或手动选择 .db 文件
  • ✅ 连接测试: 支持数据库连接测试和 API 连接测试
  • ✅ 日志导出: 导出完整日志,方便排查问题

6. DevOps 认证与 Token 管理

  • ✅ 自动登录: 首次使用配置向导时自动完成 DevOps 登录
  • ✅ Token 自动刷新: Token 失效或为空时自动重新登录
  • ✅ 手动重新登录: 登录失败时弹出输入框引导重新输入凭证
  • ✅ 凭证加密存储: 密码使用 AES 加密后存储
  • ✅ 清除凭证: 支持手动清除 DevOps 凭证重新登录

7. 跨平台支持

  • ✅ Windows: 自动检测 %APPDATA%\Qoder\SharedClientCache\cache\db\local.db
  • ✅ macOS: 自动检测 ~/Library/Application Support/Qoder/SharedClientCache/cache/db/local.db
  • ✅ Linux: 自动检测 ~/.config/Qoder/SharedClientCache/cache/db/local.db

📊 统计与监控

  • ✅ 运行次数统计: 记录累计运行次数
  • ✅ 状态查看: 查看自动任务状态、运行次数、首次采集状态等
  • ✅ 状态重置: 支持重置采集状态(保留或删除 output.json)
  • ✅ 详细日志: 所有操作都有详细日志输出到"Qoder Sync"通道
  • ✅ 日志输出优化: 接口成功/失败等提示信息统一输出到日志通道,不再弹窗干扰

安装

npm install

使用方法

快速开始

方式一: 配置向导(首次使用推荐)

在 VS Code 中按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (macOS),输入:

Qoder: zk-tool-配置向导

配置向导将引导您完成:

  • 📋 数据采集授权(首次使用必须先同意授权)
  • 👤 用户信息配置(用户类型和用户名,采集前必须设置)
  • 🔐 DevOps 登录(输入用户名密码自动获取 Token)
  • 📁 数据库路径配置(自动检测或手动选择)
  • 🔍 数据库连接测试
  • 🔍 API 连接测试
  • 🚀 自动采集任务启动

命令列表

在 VS Code 命令面板(Ctrl+Shift+P 或 Cmd+Shift+P)中可使用以下命令:

数据采集命令

命令 说明
Qoder: zk-collect-立即采集 立即执行一次数据采集
Qoder: zk-collect-启动自动采集 启动定时自动采集任务
Qoder: zk-collect-停止自动采集 停止自动采集任务
Qoder: zk-collect-查看采集状态 查看当前采集任务状态和统计信息
Qoder: zk-collect-重置采集状态 重置采集进度(可选保留或删除 output.json)

规则同步命令

命令 说明
Qoder: zk-rules-启动自动同步 启动 .qoder/rules 文件夹自动同步
Qoder: zk-rules-停止自动同步 停止规则文件自动同步
Qoder: zk-rules-查看同步状态 查看规则文件同步状态
Qoder: zk-rules-立即同步 立即执行一次规则文件同步

技能同步命令

命令 说明
Qoder: zk-skills-启动自动同步 启动 .qoder/skills 文件夹自动同步
Qoder: zk-skills-停止自动同步 停止技能文件自动同步
Qoder: zk-skills-查看同步状态 查看技能文件同步状态
Qoder: zk-skills-立即同步 立即执行一次技能文件同步

智能体同步命令

命令 说明
Qoder: zk-agents-启动自动同步 启动 .qoder/agents 文件夹自动同步
Qoder: zk-agents-停止自动同步 停止智能体文件自动同步
Qoder: zk-agents-查看同步状态 查看智能体文件同步状态
Qoder: zk-agents-立即同步 立即执行一次智能体文件同步

综合同步命令(规则+技能+智能体)

命令 说明
Qoder: zk-sync-启动自动同步 启动综合自动同步(规则+技能+智能体,默认每小时)
Qoder: zk-sync-停止自动同步 停止综合自动同步
Qoder: zk-sync-查看同步状态 查看综合同步状态
Qoder: zk-sync-立即同步所有(规则+技能+智能体) 立即执行一次综合同步

辅助命令

命令 说明
Qoder: zk-tool-选择数据库文件 手动选择 .db 数据库文件
Qoder: zk-tool-测试数据库连接 测试数据库连接并显示统计信息
Qoder: zk-tool-测试API连接 测试后端 API 连接
Qoder: zk-tool-导出日志 导出完整日志文件
Qoder: zk-tool-配置向导 启动首次配置向导
Qoder: zk-tool-清除DevOps凭证 清除 DevOps 登录凭证和 Token

2. 选择数据库文件(可选)

如果自动检测的数据库路径不正确,可以手动选择:

Qoder: zk-tool-选择数据库文件

支持的文件格式:.db, .sqlite, .sqlite3

3. 运行采集脚本

在 VS Code 中按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (macOS),输入:

Qoder: zk-collect-立即采集

或点击命令面板中的 Qoder: zk-collect-立即采集 命令。

4. 启动自动任务(推荐)

首次运行会采集最近 7 天的数据,之后每 30 分钟自动增量采集:

Qoder: zk-collect-启动自动采集

注意:自动任务会在后台持续运行,停止自动任务可点击 Qoder: zk-collect-停止自动采集。

✨ 持久化特性:一旦启动自动采集,任务状态会被保存。无论是关闭 VS Code 还是重启电脑,下次打开 VS Code 时自动采集任务会自动恢复运行,无需手动重新启动。

5. 停止自动任务

Qoder: zk-collect-停止自动采集

6. 查看运行状态

Qoder: zk-collect-查看采集状态

============================================================ 📊 自动任务状态

自动任务:✅ 已启用 运行次数:15 首次采集:已完成 上次运行:2026-03-17 10:30:00 基准时间:2026-03-17 10:25:00


### 7. 重置采集状态(重新采集所有数据)

Qoder: zk-collect-重置采集状态


**使用场景:**
- 🔄 想要重新初始化采集所有数据
- 🔄 之前的采集数据有问题,需要重新采集
- 🔄 更换了数据库或 API 地址,需要重新同步

**重置选项:**
执行命令后会弹出选择框:

| 选项 | 说明 |
|------|------|
| **仅重置状态(保留 output.json)** | 只清除采集进度记录,保留已导出的 JSON 文件 |
| **完全重置(删除 output.json)** | 清除采集进度记录 + 删除 JSON 文件,彻底重新开始 |
| **取消** | 取消操作 |

**重置后的行为:**
- 下次执行采集时,会像首次运行一样重新采集所有数据
- 如果是自动任务,会重新执行"首次采集模式"(采集最近 7 天数据)

### 8. 测试数据库连接

Qoder: zk-tool-测试数据库连接


显示当前数据库文件的信息和统计数据。

Qoder: zk-tool-导出日志


将采集日志导出为文本文件,方便排查问题。

## 输出数据格式

### JSON 文件结构(公司数据库格式)

```json
[
  {
    "session": {
      "sessionId": "9d275ae4-7805-4d53-a4cb-252833eb26cb",
      "userId": "user_123",
      "userName": "张三",
      "sessionTitle": "检查并记忆规则配置",
      "projectId": "D:\\project\\ai_dev_platform",
      "projectName": "ai_dev_platform",
      "sessionType": "assistant",
      "model": "agent",
      "codingTool": "Qoder",
      "createTime": "2026-03-16 10:00:00",
      "updateTime": "2026-03-16 12:00:00"
    },
    "codingChanges": [
      {
        "id": "cd04334a-f32b-4293-9227-35979c2e8977",
        "sessionId": "9d275ae4-7805-4d53-a4cb-252833eb26cb",
        "fileId": "d:\\project\\session-data.html",
        "content": "新增的代码内容...",
        "status": "APPLIED",
        "operationMode": "MODIFIED",
        "version": "1"
      }
    ],
    "dialogueRecords": [
      {
        "id": "对话记录ID",
        "sessionId": "9d275ae4-7805-4d53-a4cb-252833eb26cb",
        "question": "用户提问内容",
        "context": "",
        "status": "ACCEPTED",
        "createTime": "2026-03-16 10:05:00",
        "updateTime": "2026-03-16 10:05:00"
      }
    ]
  }
]

字段说明

session 对象

字段 说明
sessionId 会话唯一标识
userId 用户 ID
userName 用户名(优先使用配置的用户名,未配置时使用数据库原始值)
sessionTitle 会话标题
projectId 项目 ID(路径)
projectName 项目名称
sessionType 会话类型
model 模型模式
codingTool 编码工具(固定为 Qoder)
createTime 创建时间
updateTime 更新时间

codingChanges 数组

字段 说明
id 变更记录唯一标识(UUID)
sessionId 关联的会话 ID
fileId 文件路径
content 新增的代码内容(变更行的集合)
status 状态(APPLIED/ACCEPTED/REJECTED 等)
operationMode 操作模式(MODIFIED/ADDED/REJECTED)
version 版本号

dialogueRecords 数组

字段 说明
id 对话记录唯一标识
sessionId 关联的会话 ID
question 用户提问内容
context 对话上下文(预留字段,当前为空)
status 状态(自动计算:ACCEPTED/REJECTED/PARTACCEPTED)
createTime 创建时间
updateTime 更新时间

增量统计原理

工具会在项目目录下生成 .last_sync_state.json 文件,记录:

  • lastEndTime: 上次统计的会话结束时间戳
  • lastRunTime: 上次运行时间
  • isFirstRun: 是否为首次运行标记
  • runCount: 累计运行次数
  • autoTaskEnabled: 自动任务启用状态

首次采集模式

第一次运行时,工具只统计最近 initialDays 天(默认 7 天)的数据:

  • 时间范围:当前时间往前推 7 天
  • 跳过 7 天之前的所有会话
  • 采集完成后标记 isFirstRun: false

增量采集模式(分批采集)

首次采集完成后,后续运行根据 lastEndTime 进行智能增量统计:

核心逻辑:

  1. 采集时间范围:从 lastEndTime 到当前运行时间
  2. 版本过滤:只采集 gmt_modified 字段在采集范围内的版本记录
  3. 分批采集:每批最多采集 50 条变更,采集满后发送 API
  4. 状态更新:API 成功后才更新同步状态和 output.json,失败则不更新(避免漏数据)
  5. 循环采集:一批成功后继续采集下一批,直到覆盖到运行时间

时间更新规则:

  • 最后一批:更新 lastEndTime 为运行时间(当前时间)
  • 中间批次:更新 lastEndTime 为本批最后一个版本的 gmt_modified 时间

数据落地规则:

  • API 成功 → 更新 output.json + 更新 .last_sync_state.json
  • API 失败 → 不更新 output.json(保持上次成功数据) + 不更新 .last_sync_state.json

示例流程:

运行时间:2026-03-27 10:00:00
上次结束时间:2026-03-27 08:00:00

第 1 批:采集 08:00:00 → 10:00:00 的数据,最多 50 条变更
       → API 成功 → 更新 lastEndTime = 第 1 批最后版本时间 (08:45:00)

第 2 批:采集 08:45:00 → 10:00:00 的数据,最多 50 条变更
       → API 成功 → 更新 lastEndTime = 第 2 批最后版本时间 (09:30:00)

第 3 批:采集 09:30:00 → 10:00:00 的数据,最多 50 条变更
       → API 成功 → 更新 lastEndTime = 运行时间 (10:00:00)(最后一批)

✅ 采集完成

失败处理:

  • 如果某一批 API 发送失败,则 lastEndTime 不会更新
  • 下次执行时会重新采集该批次数据
  • 确保数据不会丢失

这样可以:

  • ✅ 避免一次性采集大量数据导致超时
  • ✅ 每批数据及时同步,降低风险
  • ✅ API 失败时不更新状态,保证数据完整性
  • ✅ 循环采集直到覆盖所有数据

自动任务说明

启动自动任务

在 VS Code 命令面板中执行:

Qoder: zk-collect-启动自动采集

启动后:

  1. 立即执行首次采集:采集最近 7 天的数据
  2. 定时执行:之后每 30 分钟自动执行一次增量采集
  3. 后台运行:任务会持续运行,直到手动停止
  4. ✨ 持久化:自动任务状态会被保存,关闭 VS Code 或重启电脑后,下次启动时会自动恢复运行

自动恢复

当自动采集任务已启用时:

  • 关闭 VS Code 后重新打开 → 自动恢复运行
  • 重启电脑后打开 VS Code → 自动恢复运行
  • 插件激活时会自动检测并恢复上次启用的自动任务

注意:自动恢复时不会重复请求用户授权(因为之前已经同意过)

停止自动任务

Qoder: zk-collect-停止自动采集

查看状态

Qoder: zk-collect-查看采集状态

显示信息:

  • 自动任务启用状态
  • 累计运行次数
  • 首次采集是否完成
  • 上次运行时间
  • 增量统计基准时间

对话记录采集

用户类型区分

插件支持两种用户类型的对话记录采集,数据源和采集方式不同:

特性 编辑器用户 (editor) 插件用户 (plugin)
数据源 state.vscdb 数据库 .qoder/cache/projects 目录下的 txt 文件
数据库路径 Qoder/User/globalStorage/state.vscdb 不需要额外数据库
查询方式 SELECT key, value FROM ItemTable WHERE key LIKE '%lingma%' 读取 txt 文件并解析
时间来源 state.vscdb 中的 timestamp 字段 chat_message 表中的 gmt_create 字段
关联方式 直接从 value JSON 中提取 sessionId 通过 chat_message 表关联 requestId 和 sessionId

编辑器用户采集流程

Step 1: 打开 state.vscdb 数据库
  ↓
Step 2: 查询 ItemTable 表
  SQL: SELECT key, value FROM ItemTable WHERE key LIKE '%lingma%'
  ↓
Step 3: 解析 value 字段(JSON 格式)
  - 提取 id、sessionId、question、timestamp 等字段
  ↓
Step 4: 过滤和排序
  - 只保留目标 sessionId 的记录
  - 按 sessionId + timestamp 升序排序
  ↓
Step 5: 输出 dialogueRecords 数组

数据库路径(跨平台):

  • Windows: C:\Users\{用户名}\AppData\Roaming\Qoder\User\globalStorage\state.vscdb
  • macOS: /Users/{用户名}/Library/Application Support/Qoder/User/globalStorage/state.vscdb
  • Linux: /home/{用户名}/.config/Qoder/User/globalStorage/state.vscdb

插件用户采集流程

Step 1: 查询 chat_message 表(带时间范围过滤)
  SQL: SELECT request_id, session_id, gmt_create
       FROM chat_message
       WHERE session_id IN (?, ?, ...)
         AND gmt_create IS NOT NULL
       ORDER BY gmt_create ASC
  ↓
Step 2: 扫描缓存目录
  路径:C:\Users\{用户名}\.qoder\cache\projects
  递归查找所有 .txt 文件
  ↓
Step 3: 按需读取 txt 文件(提前终止优化)
  - 从 txt 文件提取 requestId 和 <user_query> 标签内容
  - 匹配到所有 request_id 后立即停止读取
  ↓
Step 4: 构建输出数据
  - 按 sessionId + createTime 排序
  - 输出格式与编辑器用户一致

性能优化:

  • ✅ 先查数据库获取 request_id 列表,再按需读取 txt 文件
  • ✅ 匹配到所有 request_id 后立即停止读取,避免解析无用文件
  • ✅ 完全遵循主程序的时间范围规则(首次 7 天,之后增量采集)

txt 文件格式要求:

requestId: 726c47c1-0781-4fd5-bd51-dd674241c0e9
timestamp: 1712340000000
...

<user_query>
请帮我优化这个函数的性能
</user_query>

<response>
...
</response>

对话记录状态自动计算

在输出数据时,插件会根据 codingChanges(代码变更)的状态自动推断 dialogueRecords(对话记录)的状态。

核心规则:

状态 说明
ACCEPTED 对应时段内所有代码变更都不是 REJECTED,或没有代码变更(默认值)
REJECTED 对应时段内所有代码变更都是 REJECTED
PARTACCEPTED 对应时段内部分代码变更是 REJECTED

时间范围映射逻辑:

对话记录按时间顺序与代码变更进行匹配:

对话记录 1 (时间: T1)
  ↓
查找代码变更: createTime >= T1 且 < T2 (T2 是对话记录 2 的时间)
  ↓
计算状态 → 更新对话记录 1 的 status

对话记录 2 (时间: T2)
  ↓
查找代码变更: createTime >= T2 且 < T3
  ↓
计算状态 → 更新对话记录 2 的 status

...

最后一条对话记录 (时间: Tn)
  ↓
查找代码变更: createTime >= Tn (所有剩余的代码变更)
  ↓
计算状态 → 更新最后一条对话记录的 status

示例:

{
  "dialogueRecords": [
    { "id": "1", "question": "如何创建函数?", "createTime": "10:00:00" },
    { "id": "2", "question": "如何添加注释?", "createTime": "10:10:00" },
    { "id": "3", "question": "如何测试?", "createTime": "10:20:00" }
  ],
  "codingChanges": [
    { "id": "c1", "createTime": "10:02:00", "status": "ACCEPTED" },
    { "id": "c2", "createTime": "10:05:00", "status": "ACCEPTED" },
    { "id": "c3", "createTime": "10:12:00", "status": "REJECTED" },
    { "id": "c4", "createTime": "10:15:00", "status": "ACCEPTED" },
    { "id": "c5", "createTime": "10:25:00", "status": "REJECTED" }
  ]
}

计算结果:

对话记录 时间范围 对应代码变更 状态 原因
对话 1 10:00-10:10 c1, c2 ACCEPTED 全部非 REJECTED
对话 2 10:10-10:20 c3, c4 PARTACCEPTED 部分 REJECTED
对话 3 10:20 之后 c5 REJECTED 全部 REJECTED

注意事项:

  • 函数内部会自动对 dialogueRecords 和 codingChanges 按 createTime 进行升序排序
  • 使用浅拷贝排序([...array].sort()),不会修改原始数组
  • 时间格式必须是可解析的(ISO 格式或 YYYY-MM-DD HH:mm:ss)

文件版本对比说明

工具只对比相同版本号的相邻文件变更:

  • ✅ 版本 0 → 版本 0(同一版本的不同状态)
  • ✅ 版本 1 → 版本 1(同一版本的不同状态)
  • ❌ 版本 0 → 版本 1(跳过,不同版本)

原因:同一版本号的不同记录代表该版本的不同处理状态(如 ACCEPTED、APPLIED),对比相同版本号的相邻记录可以查看文件内容在该版本下的变化。

差异输出格式

文件差异不显示具体行号,而是将变更整理成代码集合(只包含新增内容):

{
  "type": "modified",
  "description": "文件内容已修改",
  "diffCount": 10,
  "oldHash": "abc123...",
  "newHash": "def456...",
  "changes": {
    "added": [
      "新代码行 1",
      "新代码行 2",
      "新代码行 3"
    ]
  }
}

优点:

  • 简洁明了,直接看到新增的代码内容
  • 不包含删除内容,聚焦于最终结果
  • 文件大小更小,便于传输和存储

数据库路径

默认读取以下路径的数据库文件:

Windows

C:\Users\{用户名}\AppData\Roaming\Qoder\SharedClientCache\cache\db\local.db

macOS

/Users/{用户名}/Library/Application Support/Qoder/SharedClientCache/cache/db/local.db

Linux

/home/{用户名}/.config/Qoder/SharedClientCache/cache/db/local.db

文件缓存路径

文件内容存储在:

Windows

C:\Users\{用户名}\AppData\Roaming\Qoder\SharedClientCache\cache\workingSpace\

macOS

/Users/{用户名}/Library/Application Support/Qoder/SharedClientCache/cache/workingSpace/

Linux

/home/{用户名}/.config/Qoder/SharedClientCache/cache/workingSpace/

技术栈

  • Node.js
  • sqlite3: SQLite 数据库驱动
  • fs/path: 文件系统操作
  • http/https: API 请求
  • os: 跨平台路径检测
  • node-cron: 定时任务
  • crypto: 文件哈希计算

架构说明

模块结构

qoder-sync/
├── extension.js           # 主入口文件(插件激活/停用,协调各模块)
├── collector.js           # 数据采集核心模块(分批采集、API 发送、状态保存)
├── dialogue-collector.js  # 编辑器用户对话记录采集模块(state.vscdb)
├── plugin-dialogue-collector.js  # 插件用户对话记录采集模块(txt 文件)
├── commands.js            # 命令注册模块(所有 VS Code 命令)
├── config-loader.js       # 配置加载器(加载和合并配置)
├── task-manager.js        # 定时任务管理模块(自动采集、规则同步)
├── rules-sync.js          # 规则文件同步模块
├── skills-sync.js         # 技能文件同步模块
├── agents-sync.js         # 智能体文件同步模块
├── http-client.js         # 统一 HTTP 客户端(Token 认证、自动重登录)
├── devops-auth.js         # DevOps 认证模块(登录、Token 管理)
├── crypto-utils.js        # 加密工具模块(AES 加密密码)
├── rules-skills-common.js # 规则/技能/智能体同步公共配置和工具
├── utils.js               # 工具函数模块(时间解析、文件对比等)
├── viewer.js              # 数据查看器和日志导出模块
├── viewer.html            # 数据查看器 HTML 页面

模块职责

模块 职责
extension.js 插件激活/停用,协调各模块工作
collector.js 核心采集逻辑:查询数据库、分批采集、发送 API、导出 JSON
dialogue-collector.js 编辑器用户对话采集:从 state.vscdb 提取对话记录
plugin-dialogue-collector.js 插件用户对话采集:从缓存目录 txt 文件提取对话记录
commands.js 注册所有 VS Code 命令及其处理逻辑
config-loader.js 加载和合并用户配置
task-manager.js 管理定时任务:启动、停止、恢复自动任务
rules-sync.js 规则文件同步:对比本地和远程文件,下载/删除/更新
skills-sync.js 技能文件同步:对比本地和远程文件,下载/删除/更新
agents-sync.js 智能体文件同步:对比本地和远程文件,下载/删除/更新
http-client.js 统一 HTTP 客户端:Token 认证、Token 失效自动重登录、调试日志
devops-auth.js DevOps 认证:登录、Token 获取/保存/清除
crypto-utils.js 加密工具:AES 加密/解密密码
rules-skills-common.js 公共配置和工具:API 地址、文件下载、manifest 管理
utils.js 工具函数:时间格式化、文件内容对比、同步状态管理
viewer.js 数据查看器和日志导出:打开 HTML 查看器、导出日志文件

依赖注入

模块之间通过回调函数和参数传递依赖,避免全局变量:

// 示例:collector.js 通过参数接收依赖
runBatchLoop(
    db, startTime, endTime, isFirstRun, initialStartTime,
    config,
    sendToApi,           // 注入 API 发送函数
    exportToJson,        // 注入导出函数
    loadSyncState,       // 注入状态加载函数
    saveSyncState,       // 注入状态保存函数
    log,                 // 注入日志函数
    configUserName,      // 配置的用户名
    stateDb,             // state 数据库连接(编辑器用户专用)
    userType             // 用户类型(editor/plugin)
)

文件同步功能(规则/技能/智能体)

功能说明

自动同步工作区中 .qoder 文件夹下的规则文件(rules)、技能文件(skills)和智能体文件(agents),确保本地文件与远程 API 保持一致。

使用方法

  1. 配置 API 地址

    当前 API 基础域名默认为 https://devops.ctjsoft.com,后续将支持通过配置文件自定义。

  2. 启动自动同步

    规则同步:

    Qoder: zk-rules-启动自动同步
    

    技能同步:

    Qoder: zk-skills-启动自动同步
    

    智能体同步:

    Qoder: zk-agents-启动自动同步
    

    启动后:

    • 立即执行首次同步
    • 之后每小时自动执行一次(可配置 Cron 表达式)
    • 关闭/重启 VS Code 后自动恢复运行
  3. 手动同步

    单项同步:

    Qoder: zk-rules-立即同步
    Qoder: zk-skills-立即同步
    Qoder: zk-agents-立即同步
    

    综合同步(一次性同步规则+技能+智能体):

    Qoder: zk-sync-立即同步所有(规则+技能+智能体)
    
  4. 综合自动同步

    综合同步将规则、技能、智能体三项同步合并为一个定时任务,只需启动一次即可自动同步所有文件:

    Qoder: zk-sync-启动自动同步
    

    启动后:

    • 立即执行首次综合同步
    • 之后每小时自动执行一次(可通过 qoder-sync.allSync.cronExpression 配置)
    • 关闭/重启 VS Code 后自动恢复运行

    查看状态:

    Qoder: zk-sync-查看同步状态
    

    停止:

    Qoder: zk-sync-停止自动同步
    

同步逻辑

  1. 检测工作区:检查当前打开的项目中是否存在 .qoder 文件夹(包含 rules、skills、agents 子目录)
  2. 获取本地文件列表:递归读取 .qoder/rules、.qoder/skills、.qoder/agents 下所有文件
  3. 请求远程文件列表:调用 API 获取远程文件名列表
  4. 对比文件:
    • 远程有、本地没有 → 下载新增文件
    • 本地有、远程没有 → 删除本地文件
    • 两边都有 → 对比内容,不一致则更新
  5. 更新状态:保存同步时间和文件列表到对应的 manifest.json

API 格式要求

获取文件列表接口

GET /api/qoder/rules
响应:
{
  "success": true,
  "data": {
    "files": [
      "agents/my-agent.md",
      "rules/coding-standards.md",
      "skills/data-analysis.md"
    ]
  }
}

下载单个文件接口

GET /api/qoder/rules/{fileName}
响应:文件内容(纯文本)

注意事项

  • 必须有打开的工作区且包含 .qoder 文件夹
  • 同步过程会修改 .qoder 文件夹内容,请确保有写入权限
  • 规则、技能、智能体同步共用相同的 API 基础域名和认证机制(DevOps Token)
  • 综合同步与单项同步可独立运行,互不影响
  • 所有接口成功/失败提示信息统一输出到"Qoder Sync"日志通道,不再弹出通知窗口

VS Code 配置项

可通过 VS Code 设置(Ctrl+,)搜索 qoder-sync 查看和修改以下配置:

配置项 默认值 说明
qoder-sync.userType "" 用户类型:editor(编辑器用户)或 plugin(插件用户)
qoder-sync.userName "" DevOps 用户名(姓名全拼)
qoder-sync.devopsPassword "" DevOps 登录密码(AES 加密后存储)
qoder-sync.dbPath "" Qoder 数据库路径(留空则自动检测)
qoder-sync.dataConsent false 是否同意插件采集本地数据
qoder-sync.api.enabled false 是否启用 API 同步
qoder-sync.api.requestEnabled true 是否请求后端 API
qoder-sync.export.outputFile "output.json" JSON 输出文件名
qoder-sync.schedule.minIntervalMinutes 30 最小执行间隔(分钟),0 表示不限制
qoder-sync.schedule.initialDays 7 首次采集的天数范围
qoder-sync.schedule.autoTask.cronExpression "*/30 * * * * 自动采集 Cron 表达式
qoder-sync.rulesSync.cronExpression "0 * * * * 规则文件同步 Cron 表达式
qoder-sync.skillsSync.cronExpression "0 * * * * 技能文件同步 Cron 表达式
qoder-sync.agentsSync.cronExpression "0 * * * * 智能体文件同步 Cron 表达式
qoder-sync.allSync.cronExpression "0 * * * *" 综合同步 Cron 表达式(默认每小时)
qoder-sync.allSync.enabled false 是否启用综合同步
qoder-sync.rulesSync.enabled false 是否启用规则文件自动同步
qoder-sync.skillsSync.enabled false 是否启用技能文件自动同步
qoder-sync.agentsSync.enabled false 是否启用智能体文件自动同步
qoder-sync.devopsToken "" DevOps 认证 Token(自动管理,无需手动配置)
qoder-sync.devopsTokenExpiry 0 DevOps Token 过期时间戳(自动管理)
qoder-sync.hasShownWizard false 是否已显示过配置向导(自动管理)

常见问题

数据采集相关

Q: 为什么采集的数据为空?

A: 请检查:

  1. Qoder 数据库文件是否存在
  2. 数据库中是否有 chat_session 和 chat_working_space_file 表
  3. 是否有实际的会话数据
  4. 用户类型和用户名是否已正确配置
  5. 是否已同意数据采集授权

Q: 如何修改采集频率?

A: 采集频率由系统自动管理,无需手动配置。

Q: API 同步失败怎么办?

A: 检查:

  1. 网络连接是否正常
  2. 后端服务是否运行
  3. DevOps 用户名和密码是否已正确配置
  4. Token 是否已过期(插件会自动重新登录,如失败会弹出输入框)
  5. 查看输出通道的详细错误信息
  6. 使用 Qoder: zk-tool-测试API连接 命令测试连接
  7. 如持续失败,可尝试 Qoder: zk-tool-清除DevOps凭证 后重新配置

Q: 如何查看详细的采集日志?

A: 在 VS Code 中点击底部状态栏的"输出"面板,选择"Qoder Sync"通道。或使用 Qoder: zk-tool-导出日志 命令导出日志文件。

Q: 如何在另一台电脑上使用?

A:

  1. 在新电脑上安装 Qoder 插件和 Qoder Sync 插件
  2. 如果数据库路径不同,使用 Qoder: zk-tool-选择数据库文件 手动选择
  3. 系统会自动完成配置

Q: sqlite3 模块未编译怎么办?

A: 插件激活时会检查 sqlite3 模块是否可用。如果未编译,会弹出错误提示。请在终端执行:

cd ~/.qoder/extensions/qoder-sync.qoder-sync-1.0.0
npm install sqlite3

Q: 对话记录没有采集到?

A: 检查:

  1. 用户类型是否设置为 editor 或 plugin
  2. 编辑器用户:state.vscdb 文件是否存在,数据库中是否有包含 lingma 的记录
  3. 插件用户:缓存目录是否有 txt 文件,chat_message 表是否有对应记录

规则/技能同步相关

Q: 文件同步失败怎么办?

A: 检查:

  1. 是否打开了工作区且包含 .qoder 文件夹
  2. 网络连接是否正常
  3. DevOps Token 是否有效(查看输出通道是否有自动重新登录的日志)
  4. .qoder/rules、.qoder/skills、.qoder/agents 文件夹是否有写入权限
  5. 查看输出通道的详细错误信息

Q: Token 失效或自动登录失败怎么办?

A:

  1. 插件会在 Token 失效或为空时自动尝试重新登录
  2. 如果自动登录失败,会弹出输入框要求重新输入用户名和密码
  3. 也可手动执行 Qoder: zk-tool-清除DevOps凭证 清除 Token,下次操作时会重新弹出登录框

Q: 如何手动触发同步?

A: 使用以下命令:

  • Qoder: zk-rules-立即同步
  • Qoder: zk-skills-立即同步
  • Qoder: zk-agents-立即同步

开发与打包

版本升级指南

插件版本号定义在 package.json 文件的 version 字段中。每次发布新版本前,需要更新版本号。

方案 1: 使用 npm 命令自动升级(推荐)

# 升级修订号 (1.0.0 → 1.0.1) - 用于 bug 修复
npm version patch

# 升级次版本号 (1.0.0 → 1.1.0) - 用于新增功能
npm version minor

# 升级主版本号 (1.0.0 → 2.0.0) - 用于重大变更
npm version major

# 指定具体版本号
npm version 1.2.3

执行后会自动更新 package.json 中的版本号,并创建对应的 git tag。

方案 2: 手动修改版本号

直接编辑 package.json 文件,修改第 6 行的 version 字段:

{
  "name": "qoder-sync",
  "version": "1.0.1",  // 修改此处
  ...
}

版本号规范(语义化版本 SemVer)

版本号格式: 主版本号.次版本号.修订号 (Major.Minor.Patch)

  • 主版本号(Major): 不兼容的 API 重大变更
  • 次版本号(Minor): 向下兼容的功能性新增
  • 修订号(Patch): 向下兼容的问题修正

示例:

  • 1.0.0 → 1.0.1: 修复 bug
  • 1.0.0 → 1.1.0: 新增功能
  • 1.0.0 → 2.0.0: 重大变更或不兼容更新

打包插件

版本升级后,使用以下命令打包插件:

# 使用 vsce 打包(自动生成包含版本号的 .vsix 文件)
vsce package

打包成功后会生成文件: qoder-sync-<版本号>.vsix

示例:

  • 版本 1.0.0 → 生成 qoder-sync-1.0.0.vsix
  • 版本 1.0.1 → 生成 qoder-sync-1.0.1.vsix
  • 版本 1.1.0 → 生成 qoder-sync-1.1.0.vsix

⚠️ 打包注意事项:

VSIX 打包不支持中文文件名(中文会被转为 ?,导致 Item has already been added 重复 key 错误)。本项目的 .vscodeignore 已排除以下可能包含中文文件名的目录:

.qoder/**          # 开发者本地规则/技能/智能体文件
.lingma/**         # 其他编辑器配置
openspec/**        # OpenSpec 开发规范文件
node_modules/**    # 依赖包
*.vsix             # 已打包的 vsix 文件

如果本地还有其他中文文件需要排除,请同步补充到 .vscodeignore 中。

完整发布流程

  1. 更新版本号:

    npm version patch  # 或 minor/major
    
  2. 更新更新日志: 在 README.md 的"更新日志"章节添加新版本说明

  3. 打包插件:

    vsce package
    
  4. 安装测试:

    code --install-extension qoder-sync-<新版本号>.vsix
    
  5. 发布(可选):

    vsce publish
    

更新日志

1.0.0 (2025-03-30)

  • 🎉 初始版本发布
  • ✅ 支持完整的数据采集功能(会话、文件版本)
  • ✅ 支持增量采集和自动定时任务
  • ✅ 支持后端 API 同步
  • ✅ 跨平台支持(Windows/macOS/Linux)

1.1.0 (2026-05-18)

  • ✨ 新增配置向导: 首次使用自动引导配置,提升用户体验
  • ✨ 新增数据库路径选择器: 支持手动选择 .db 文件
  • ✨ 新增日志导出功能: 方便排查问题
  • ✨ 新增数据库连接测试功能: 测试连接并显示统计信息
  • ✨ 新增 API 连接测试功能: 验证后端 API 可用性
  • ✨ 新增用户信息强制校验: 采集前必须配置用户类型和用户名
  • ✨ 新增对话记录采集功能:
    • 支持编辑器用户(editor)模式
    • 支持插件用户(plugin)模式
  • ✨ 新增对话状态自动计算: 根据代码变更推断对话记录状态
  • ✨ 新增规则文件同步功能: 自动同步 .qoder/rules 文件夹,支持增量同步和版本控制
  • ✨ 新增技能文件同步功能: 自动同步 .qoder/skills 文件夹,支持增量同步和版本控制
  • ✨ 新增智能体文件同步功能: 自动同步 .qoder/agents 文件夹,支持增量同步和版本控制
  • ✨ 新增综合同步功能: 一键同步规则+技能+智能体,独立定时任务(默认每小时),支持查看状态与自动恢复
  • ✨ 新增 DevOps 认证集成:
    • 自动登录获取 Token
    • Token 失效/为空时自动重新登录
    • 登录失败弹出输入框引导重新输入凭证
    • 密码 AES 加密存储
    • 支持手动清除凭证
  • ✨ 新增持久化任务: 关闭/重启 VS Code 后自动恢复自动任务
  • 🔧 统一 HTTP 客户端: 采集、规则、技能、智能体共用 http-client,统一处理 Token 认证
  • 🔧 API 基础域名配置化: 默认域名写在配置文件中,后续支持用户自定义
  • 🔧 用户名校验放宽: 用户名仅校验非空,不再限制字符格式
  • 🔧 日志输出优化: 接口成功/失败等提示信息统一输出到“Qoder Sync”日志通道,不再弹窗干扰
  • 🔧 完善 .vscodeignore: 排除 .qoder/、.lingma/、openspec/ 等目录,避免中文文件名导致打包冲突
  • 🐛 优化首次使用体验
  • 🏗️ 代码模块化拆分,提升可维护性
  • 📝 完善文档和配置说明

许可证

ISC

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft