Files
leookun a5437e60fe feat(cursor): add contributor profile link and improve UI for Cursor account card
- Integrated a tooltip with a button to open the contributor's GitHub profile in the CursorAccountCard component.
- Updated the layout of the account card for better visual organization.
- Removed routing mode options from the configuration view and adjusted related translations in multiple languages.
- Cleaned up unused routing mode logic in the app state management.
2026-08-02 22:53:57 +08:00

149 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Backend 架构说明
`internal/backend` 只支持本地助手模式。
关于 backend agent「最小事实集合」的第一阶段研究文档,见 [`../../docs/backend-agent-minimum-facts-phase1.md`](../../docs/backend-agent-minimum-facts-phase1.md)。
核心边界:
- `server`
- 本地 HTTP/Connect 入口层
- 负责路由、中间件、错误编码和少量本地 mock
- `forwarder`
- 本地协议兼容与 LLM 转发内核
- 负责 `BidiAppend``RunSSE`、history JSON、prompt 编译、provider 流式调用和广播
- `host`
- 唯一组装点
- 负责把 `server/config.Manager``forwarder.Module` 和根路由装起来
当前实现不再支持:
- Pro / `cursor-byok`
- HTTP/protocol trace debug UI
- DB-backed store、会话索引和 searchable conversation memory
## 目录结构
```text
internal/backend/
README.md
host.go
server/
context.go
errors.go
local.go
middleware.go
route.go
url.go
config/
manager.go
store.go
types.go
legacy_runtime.go
resolver.go
upstream/
action.go
mocks.go
types.go
forwarder/
artifacts.go
broker.go
compiler.go
events.go
file_store.go
legacy_stream.go
module.go
projector.go
provider.go
reminders.go
service.go
tool_catalog.go
types.go
agent/
bridge/
exec/
bridge.go
interaction/
bridge.go
core/
types.go
model/
router.go
openai.go
anthropic.go
artifacts.go
provider_limits.go
http_error.go
types.go
prompt/
engine.go
replay.go
protocol/
inbound.go
```
## 持久化布局
助手目录固定为:
- `~/.cursor-local-assistant-v2/config.yaml`
- `~/.cursor-local-assistant-v2/data/ca.crt`
- `~/.cursor-local-assistant-v2/data/ads/`
- `~/.cursor-local-assistant-v2/history/`
- `~/.cursor-local-assistant-v2/logs/`
约定:
- `config.yaml` 是用户配置
- `data/ca.crt` 是注入给宿主的 CA 证书
- `data/ads/` 是广告包与资源缓存目录
- `history/` 是会话事实与全局 usage JSON 目录,不属于日志
- `logs/` 只保留必要文本运行日志
当前 `history/` 目录布局:
```text
history/
usage.json
<conversation_id>/
state.json
context.json
conversation.lock
```
`state.json` 只表达当前 loop 状态与持久化内存,不保存可投射给 LLM 的历史内容。当前 loop status 语义为:
- `idle`:没有正在推进的 loop。
- `running`:已落入本轮输入或中间上下文,正在等待/发起模型推进。
- `waiting_tool`:已落完整 tool call,正在等待工具结果。
- `completed`:本轮已正常完成。
- `canceled`:本轮被取消,不制造 assistant 输出。
- `provider_error`provider/LLM 调用失败,错误作为 context tag 记录。
- `failed`:本地内部失败,例如投影、持久化、usage JSON 写入或桥接收口失败;它不等同于 provider 错误。
## 请求流
1. 请求进入 backend 根路由。
2. `ServerContext` 解析 MITM 带入的原始目标地址,路由始终执行本地 action。
3. `BidiAppend` / `RunSSE` 进入 `forwarder`
4. `forwarder` 先把当前 loop 状态写入 `state.json`,再把已发生语义事件追加到 `context.json`
5. 发给 LLM 的 prompt 只由 `context.json` 投射生成;`state.json` 不保存可投射历史。
6. provider usage/cache 与聚合统计写入 `history/usage.json`,不从 conversation 文件现场扫描。
7. `checkpoint` 只表示同一 backend 进程内的 live state。
## 模型渠道
- 用户在配置里填写 `displayName``baseURL``apiKey``modelID`
- 运行时渠道唯一 ID 不再由 `modelID` 决定
- 当前唯一 ID 是 `url + modelID + key + name` 的短 `SHA-256` hash(前 16 个十六进制字符)
- `modelID` 仅表示 provider model