Skip to main content
Version: 0.1.6

API 参考

AgentLog 后台提供完整的 REST API,默认运行在 http://localhost:7892,可通过环境变量 AGENTLOG_PORT 覆盖。

基础信息

服务状态

GET /health

响应示例

{
"status": "ok",
"version": "0.4.0",
"timestamp": "2025-03-29T10:30:00.000Z",
"database": "connected",
"uptime": 3600
}

配置信息

GET /api/config

响应示例

{
"backendUrl": "http://localhost:7892",
"databasePath": "~/.agentlog/agentlog.db",
"logLevel": "info",
"retentionDays": 90,
"corsOrigin": "http://localhost:3000"
}

会话管理

创建会话

POST /api/sessions
Content-Type: application/json

请求体

{
"provider": "deepseek",
"model": "deepseek-r1",
"source": "cline",
"workspacePath": "/projects/my-app",
"prompt": "请帮我重构这个函数",
"reasoning": "<think>分析原函数职责...</think>",
"response": "我将帮你重构...",
"affectedFiles": ["src/utils.ts"],
"durationMs": 120000,
"tags": ["重构", "工具函数"],
"note": "重要架构决策",
"transcript": [
{
"role": "user",
"content": "请帮我重构这个函数",
"timestamp": "2025-03-29T10:00:00.000Z"
},
{
"role": "assistant",
"content": "我将帮你重构...",
"reasoning": "<think>分析原函数职责...</think>",
"timestamp": "2025-03-29T10:02:00.000Z"
}
],
"tokenUsage": {
"inputTokens": 150,
"outputTokens": 200,
"cacheCreationTokens": 50,
"cacheReadTokens": 25,
"apiCallCount": 1
}
}

响应

{
"success": true,
"data": {
"id": "abc123xyz",
"createdAt": "2025-03-29T10:00:00.000Z"
}
}

查询会话列表

GET /api/sessions

查询参数

参数类型说明
pagenumber页码,从 1 开始(默认 1)
pageSizenumber每页条数,最大 100(默认 20)
startDatestring开始时间(ISO 8601)
endDatestring结束时间(ISO 8601)
providerstring模型提供商过滤
sourcestring来源过滤(cline/cursor/opencode)
keywordstring关键词搜索(prompt/response/note)
onlyBoundToCommitboolean只返回已绑定到 Commit 的会话
commitHashstring按 Commit Hash 过滤

响应示例

{
"success": true,
"data": {
"data": [
{
"id": "abc123xyz",
"createdAt": "2025-03-29T10:00:00.000Z",
"provider": "deepseek",
"model": "deepseek-r1",
"source": "cline",
"prompt": "请帮我重构...",
"response": "我将帮你重构...",
"commitHash": "a1b2c3d4e5",
"affectedFiles": ["src/utils.ts"],
"durationMs": 120000
}
],
"total": 150,
"page": 1,
"pageSize": 20
}
}

获取单个会话详情

GET /api/sessions/{sessionId}

响应示例

{
"success": true,
"data": {
"id": "abc123xyz",
"createdAt": "2025-03-29T10:00:00.000Z",
"provider": "deepseek",
"model": "deepseek-r1",
"source": "cline",
"workspacePath": "/projects/my-app",
"prompt": "请帮我重构这个函数",
"reasoning": "<think>分析原函数职责...</think>",
"response": "我将帮你重构...",
"commitHash": "a1b2c3d4e5",
"affectedFiles": ["src/utils.ts"],
"durationMs": 120000,
"tags": ["重构", "工具函数"],
"note": "重要架构决策",
"transcript": [
{
"role": "user",
"content": "请帮我重构这个函数",
"timestamp": "2025-03-29T10:00:00.000Z"
},
{
"role": "assistant",
"content": "我将帮你重构...",
"reasoning": "<think>分析原函数职责...</think>",
"timestamp": "2025-03-29T10:02:00.000Z"
}
],
"tokenUsage": {
"inputTokens": 150,
"outputTokens": 200,
"cacheCreationTokens": 50,
"cacheReadTokens": 25,
"apiCallCount": 1
}
}
}

追加对话记录

PATCH /api/sessions/{sessionId}/transcript
Content-Type: application/json

请求体

{
"turns": [
{
"role": "tool",
"content": "读取了 src/utils.ts 文件",
"toolName": "read",
"toolInput": "filePath=src/utils.ts",
"timestamp": "2025-03-29T10:01:00.000Z"
}
],
"tokenUsage": {
"inputTokens": 175,
"outputTokens": 200
}
}

更新会话意图

PATCH /api/sessions/{sessionId}/intent
Content-Type: application/json

请求体

{
"response": "已完成函数重构",
"affectedFiles": ["src/utils.ts", "src/helpers.ts"],
"durationMs": 180000
}

更新标签

PATCH /api/sessions/{sessionId}/tags
Content-Type: application/json

请求体

{
"tags": ["bugfix", "高优先级"]
}

更新备注

PATCH /api/sessions/{sessionId}/note
Content-Type: application/json

请求体

{
"note": "这个重构很重要,需要测试覆盖"
}

绑定/解绑 Commit

PATCH /api/sessions/{sessionId}/commit
Content-Type: application/json

绑定请求体

{
"commitHash": "a1b2c3d4e5f6g7h8i9j0"
}

解绑请求体

{
"commitHash": null
}

删除会话

DELETE /api/sessions/{sessionId}

获取统计数据

GET /api/sessions/stats

响应示例

{
"success": true,
"data": {
"totalSessions": 150,
"unboundSessions": 3,
"sessionsByProvider": {
"deepseek": 80,
"openai": 50,
"qwen": 20
},
"sessionsBySource": {
"cline": 100,
"cursor": 40,
"opencode": 10
},
"averageDurationMs": 120000,
"totalTokens": {
"input": 45000,
"output": 68000
}
}
}

查询未绑定会话

GET /api/sessions/unbound

查询参数:支持与会话列表相同的过滤参数。

Commit 绑定管理

Git Hook 接收端

POST /api/commits/hook
Content-Type: application/json

请求体

{
"commitHash": "a1b2c3d4e5f6g7h8i9j0",
"message": "重构用户认证模块",
"authorName": "张三",
"authorEmail": "zhangsan@example.com",
"changedFiles": ["src/auth.ts", "src/middleware.ts"],
"workspacePath": "/projects/my-app"
}

响应

{
"success": true,
"data": {
"boundSessions": 3,
"newCommitBinding": true
}
}

手动批量绑定

POST /api/commits/bind
Content-Type: application/json

请求体

{
"commitHash": "a1b2c3d4e5f6g7h8i9j0",
"sessionIds": ["session1", "session2", "session3"],
"message": "重构用户认证模块",
"authorName": "张三",
"authorEmail": "zhangsan@example.com",
"changedFiles": ["src/auth.ts", "src/middleware.ts"],
"workspacePath": "/projects/my-app"
}

解绑会话

DELETE /api/commits/unbind/{sessionId}

获取所有绑定记录

GET /api/commits

查询参数

参数类型说明
pagenumber页码(默认 1)
pageSizenumber每页条数(默认 20)
workspacePathstring按工作区过滤
authorEmailstring按作者过滤

获取单个 Commit 信息

GET /api/commits/{commitHash}

获取 Commit 关联的所有会话

GET /api/commits/{commitHash}/sessions

生成 Commit 上下文文档

GET /api/commits/{commitHash}/context

查询参数

参数类型默认值说明
formatmarkdown / json / xmlmarkdown输出格式
languagezh / enzh输出语言
includePromptsbooleantrue包含用户 Prompt
includeResponsesbooleantrue包含模型 Response
includeReasoningbooleantrue包含推理过程
includeChangedFilesbooleantrue包含变更文件列表
maxContentLengthnumber2000单条内容最大字符数(0=不截断)
maxSessionsnumber0最多包含的会话数量(0=不限制)

POST 版本

POST /api/commits/{commitHash}/context
Content-Type: application/json

请求体:同上查询参数作为 JSON 对象。

生成 Commit 解释摘要

GET /api/commits/{commitHash}/explain

查询参数

参数类型默认值说明
languagezh / enzh输出语言
maxLengthnumber1000摘要最大长度

POST 版本

POST /api/commits/{commitHash}/explain
Content-Type: application/json

安装 Git Hook

POST /api/commits/hook/install

请求体

{
"workspacePath": "/projects/my-app"
}

移除 Git Hook

DELETE /api/commits/hook/remove

请求体

{
"workspacePath": "/projects/my-app"
}

导出功能

获取支持的导出格式

GET /api/export/formats

响应

{
"success": true,
"data": {
"formats": [
{
"id": "weekly-report",
"name": "中文周报",
"description": "汇总本周所有 AI 辅助的代码变更",
"extension": ".md",
"defaultLanguage": "zh"
},
{
"id": "pr-description",
"name": "PR/Code Review 说明",
"description": "生成包含 AI 交互上下文的 PR 描述",
"extension": ".md",
"defaultLanguage": "zh"
},
{
"id": "jsonl",
"name": "JSONL 原始数据",
"description": "完整的结构化数据,便于自定义分析",
"extension": ".jsonl",
"defaultLanguage": null
},
{
"id": "csv",
"name": "CSV 表格",
"description": "表格格式,便于 Excel 处理和分析",
"extension": ".csv",
"defaultLanguage": null
}
]
}
}

生成导出内容

POST /api/export
Content-Type: application/json

请求体

{
"format": "weekly-report",
"language": "zh",
"startDate": "2025-03-23",
"endDate": "2025-03-29",
"filters": {
"providers": ["deepseek", "openai"],
"sources": ["cline", "cursor"],
"workspacePaths": ["/projects/my-app"],
"tags": ["重构", "bugfix"]
},
"options": {
"groupBy": "project",
"includeDetails": true,
"maxSessions": 50
}
}

预览导出内容

POST /api/export/preview
Content-Type: application/json

请求体:与导出接口相同,但只返回前 50 行内容。

MCP 工具 API

以下 API 主要供 MCP Server 内部使用,也可直接调用。

创建 MCP 会话(简化)

POST /api/mcp/sessions
Content-Type: application/json

请求体

{
"model": "deepseek-r1",
"source": "mcp-tool-call",
"workspacePath": "/projects/my-app",
"transcript": [
{
"role": "user",
"content": "请帮我重构...",
"timestamp": "2025-03-29T10:00:00.000Z"
}
]
}

估算 Token 用量

POST /api/mcp/estimate-tokens
Content-Type: application/json

请求体

{
"text": "请帮我重构这个函数...",
"model": "deepseek-r1"
}

响应

{
"success": true,
"data": {
"estimatedTokens": 28,
"characters": 112
}
}

错误处理

错误响应格式

{
"success": false,
"error": "错误描述",
"code": "ERROR_CODE",
"details": {
"field": "具体的错误信息"
}
}

常见错误码

错误码HTTP 状态说明
VALIDATION_ERROR400请求参数验证失败
SESSION_NOT_FOUND404会话不存在
COMMIT_NOT_FOUND404Commit 不存在
DATABASE_ERROR500数据库操作失败
GIT_HOOK_ERROR500Git Hook 操作失败
EXPORT_ERROR500导出操作失败
MCP_ERROR500MCP 相关错误

使用示例

cURL 示例

创建会话

curl -X POST http://localhost:7892/api/sessions \
-H "Content-Type: application/json" \
-d '{
"provider": "deepseek",
"model": "deepseek-r1",
"source": "cline",
"workspacePath": "/projects/my-app",
"prompt": "测试请求",
"response": "测试响应",
"affectedFiles": ["test.ts"]
}'

查询最近会话

curl "http://localhost:7892/api/sessions?page=1&pageSize=10"

生成周报

curl -X POST http://localhost:7892/api/export \
-H "Content-Type: application/json" \
-d '{
"format": "weekly-report",
"language": "zh",
"startDate": "2025-03-23",
"endDate": "2025-03-29"
}' > weekly_report.md

JavaScript/TypeScript 示例

import axios from 'axios';

const agentlog = axios.create({
baseURL: 'http://localhost:7892/api',
});

// 创建会话
const createSession = async () => {
const response = await agentlog.post('/sessions', {
provider: 'deepseek',
model: 'deepseek-r1',
source: 'cline',
workspacePath: '/projects/my-app',
prompt: '请帮我重构...',
response: '我将帮你重构...',
affectedFiles: ['src/utils.ts']
});
return response.data.data.id;
};

// 查询统计
const getStats = async () => {
const response = await agentlog.get('/sessions/stats');
return response.data.data;
};

// 导出数据
const exportWeeklyReport = async () => {
const response = await agentlog.post('/export', {
format: 'weekly-report',
language: 'zh',
startDate: '2025-03-23',
endDate: '2025-03-29'
});
return response.data;
};

Python 示例

import requests
import json

BASE_URL = "http://localhost:7892/api"

def create_session():
response = requests.post(
f"{BASE_URL}/sessions",
json={
"provider": "deepseek",
"model": "deepseek-r1",
"source": "cline",
"workspacePath": "/projects/my-app",
"prompt": "请帮我重构...",
"response": "我将帮你重构...",
"affectedFiles": ["src/utils.ts"]
}
)
return response.json()["data"]["id"]

def get_recent_sessions():
response = requests.get(
f"{BASE_URL}/sessions",
params={"page": 1, "pageSize": 10}
)
return response.json()["data"]["data"]

注意事项

认证与安全

  • 默认仅允许本地访问(127.0.0.1)
  • 生产环境建议配置防火墙规则
  • 敏感操作(如删除)可添加确认机制

性能建议

  • 批量操作使用事务 API
  • 大量数据查询使用分页
  • 频繁访问的数据考虑缓存

版本兼容

  • API 遵循语义化版本控制
  • 不兼容变更会升级主版本号
  • 弃用的 API 会保留至少一个版本周期