feat: 统一 JSON API 到 /v1 前缀,移除旧邮件兼容路由

- 删除旧邮件查询兼容路由 GET /mail-api/messages、/mail-api/messages/{id}、/mail-api/search
- 所有 JSON API 统一使用 /v1/...:邮件、上下文记忆、动态页面创建和健康检查接口
- 页面路由保持非 /v1 地址:/mail、/mail/messages/{id}、/mail/{slug}、/web/{page_type}/{slug}、/updates
- AI 内部工具调用同步改用 /v1/web/pages 与 /v1/context/memories...
- 无数据库结构变化,新增 0.1.14 升级日志记录
This commit is contained in:
2026-07-06 21:39:56 +08:00
parent 25dd0daa8b
commit 2669861af1
29 changed files with 1845 additions and 89 deletions
+4 -4
View File
@@ -77,7 +77,7 @@ async fn remember_memory_inner(
"metadata": args.metadata.unwrap_or_else(|| json!({})),
}),
);
let value = request_json("POST", "/context/memories", payload).await?;
let value = request_json("POST", "/v1/context/memories", payload).await?;
let memory = value
.get("memory")
.ok_or_else(|| anyhow!("接口响应缺少 memory 字段"))?;
@@ -98,7 +98,7 @@ async fn query_memory_inner(channel: &ChannelMessage, arguments: &str) -> anyhow
"limit": args.limit.unwrap_or(20),
}),
);
let value = request_json("POST", "/context/memories/search", payload).await?;
let value = request_json("POST", "/v1/context/memories/search", payload).await?;
let memories = value
.get("memories")
.and_then(Value::as_array)
@@ -128,7 +128,7 @@ async fn update_memory_inner(channel: &ChannelMessage, arguments: &str) -> anyho
"metadata": args.metadata,
}),
);
let path = format!("/context/memories/{}", args.id);
let path = format!("/v1/context/memories/{}", args.id);
let value = request_json("PATCH", &path, payload).await?;
let memory = value
.get("memory")
@@ -144,7 +144,7 @@ async fn delete_memory_inner(channel: &ChannelMessage, arguments: &str) -> anyho
let args: DeleteMemoryArgs =
serde_json::from_str(arguments).context("解析 delete_memory 参数失败")?;
let payload = json_with_identity(channel, json!({}));
let path = format!("/context/memories/{}", args.id);
let path = format!("/v1/context/memories/{}", args.id);
let value = request_json("DELETE", &path, payload).await?;
let deleted = value
.get("deleted")
+1 -1
View File
@@ -50,7 +50,7 @@ async fn create_web_page_inner(arguments: &str) -> anyhow::Result<String> {
"metadata": args.metadata,
});
let base_url = web_base_url();
let endpoint = format!("{base_url}/web/pages");
let endpoint = format!("{base_url}/v1/web/pages");
let client = reqwest::Client::new();
let response = client
.post(&endpoint)