docs: 更新协议文档,删除废弃计划文档
- 更新 http-error-codes, user-points-chat-data-protocol - 更新 divination-run-protocol, profile-protocol - 删除废弃的后端和前端设计计划文档
This commit is contained in:
@@ -10,7 +10,8 @@ Protocol verification status:
|
||||
|
||||
## Compatibility strategy
|
||||
|
||||
- Current strategy: additive evolution only.
|
||||
- Run/events contract: `backward-compatible` additive evolution.
|
||||
- History contract (`GET /agent/history`) currently `requires-migration` (see migration notes in this document).
|
||||
- Existing required fields cannot be removed or renamed without migration notes.
|
||||
- Canonical divination terminology values must remain Chinese.
|
||||
|
||||
@@ -19,6 +20,8 @@ Protocol verification status:
|
||||
- Submit run: `POST /api/v1/agent/runs`
|
||||
- Stream events: `GET /api/v1/agent/runs/{threadId}/events?runId=...`
|
||||
- History snapshot: `GET /api/v1/agent/history`
|
||||
- Delete session: `DELETE /api/v1/agent/sessions/{threadId}`
|
||||
- Audio transcribe: `POST /api/v1/agent/transcribe`
|
||||
|
||||
## Run request contract
|
||||
|
||||
@@ -85,14 +88,36 @@ Protocol verification status:
|
||||
- `yaoLines` item enum: `少阳 | 少阴 | 老阳 | 老阴`
|
||||
- Additional fields are forbidden.
|
||||
|
||||
### `runtime_mode` rules
|
||||
|
||||
- Allowed values: `chat | follow_up`.
|
||||
- `chat`: first run for a session.
|
||||
- `follow_up`: follow-up run in existing session.
|
||||
- Missing or invalid `runtime_mode` MUST return `422` with code `AGENT_RUNTIME_MODE_INVALID`.
|
||||
- Current backend behavior still requires `forwardedProps.divinationPayload` in both modes.
|
||||
|
||||
### Follow-up request note
|
||||
|
||||
- Follow-up submit still uses `POST /api/v1/agent/runs`.
|
||||
- Required differences from first run:
|
||||
- `threadId` must be existing session id.
|
||||
- `forwardedProps.runtime_mode` must be `follow_up`.
|
||||
- `messages[0].content` is follow-up question text.
|
||||
- If `threadId` does not exist, backend returns `404` (`AGENT_SESSION_NOT_FOUND`).
|
||||
|
||||
## Event output contract
|
||||
|
||||
During run streaming, backend emits standard AG-UI lifecycle events and two divination-relevant payload events:
|
||||
|
||||
- Lifecycle: `RUN_STARTED`, `RUN_FINISHED` or `RUN_ERROR`.
|
||||
- Step events: `STEP_STARTED`, `STEP_FINISHED` with `stepName` (for example: `worker`).
|
||||
- Payload events: `DIVINATION_DERIVED`, `TEXT_MESSAGE_END`.
|
||||
|
||||
### 1) `DIVINATION_DERIVED`
|
||||
|
||||
- Emitted once after backend derives hexagram data.
|
||||
- Payload field: `divination` (strict object).
|
||||
- Emitted only when `runtime_mode=chat`.
|
||||
|
||||
`divination` object:
|
||||
|
||||
@@ -160,7 +185,9 @@ During run streaming, backend emits standard AG-UI lifecycle events and two divi
|
||||
### 2) `TEXT_MESSAGE_END`
|
||||
|
||||
- Standard final answer event.
|
||||
- Existing fields remain canonical: `sign_level`, `conclusion`, `focus_points`, `advice`, `keywords`, `answer`.
|
||||
- `runtime_mode=chat` fields: `status`, `sign_level`, `conclusion`, `focus_points`, `advice`, `keywords`, `answer`, `error`, `divination_derived`.
|
||||
- `runtime_mode=follow_up` fields: `status`, `answer`, `error`.
|
||||
- `runtime_mode=follow_up` MUST NOT include `sign_level`, `conclusion`, `focus_points`, `advice`, `keywords`, `divination_derived`.
|
||||
- Language rule: `conclusion`, `focus_points`, `advice`, `keywords`, `answer` should follow user `ai_language` preference unless user explicitly requests otherwise.
|
||||
- Canonical six-yao terms remain Chinese in protocol text (for example: 世爻、应爻、动爻、静爻、六亲、六神、伏神、月建、日辰、月破、日冲、空亡、五行旺衰).
|
||||
|
||||
@@ -173,17 +200,22 @@ Frontend should combine:
|
||||
|
||||
`GET /api/v1/agent/history` is the canonical replay source for frontend history list and result reconstruction.
|
||||
|
||||
- When `threadId` is provided, backend returns full session messages ordered by `seq asc`.
|
||||
- When `threadId` is omitted, backend returns one latest assistant message per session for history list summary.
|
||||
- `threadId` is the session identifier (same value as AG-UI run/events path parameter).
|
||||
|
||||
### Required response shape
|
||||
|
||||
```json
|
||||
{
|
||||
"scope": "history_day",
|
||||
"scope": "history_session_full",
|
||||
"threadId": "uuid|null",
|
||||
"day": "2026-04-05|null",
|
||||
"day": null,
|
||||
"hasMore": false,
|
||||
"messages": [
|
||||
{
|
||||
"id": "uuid",
|
||||
"threadId": "session-uuid",
|
||||
"seq": 12,
|
||||
"role": "assistant",
|
||||
"content": "...",
|
||||
@@ -205,6 +237,7 @@ Frontend should combine:
|
||||
},
|
||||
{
|
||||
"id": "uuid",
|
||||
"threadId": "session-uuid",
|
||||
"seq": 11,
|
||||
"role": "user",
|
||||
"content": "我最近换工作是否合适?",
|
||||
@@ -222,17 +255,74 @@ Frontend should combine:
|
||||
|
||||
Rules:
|
||||
|
||||
- `scope=history_session_full` means full-thread replay with `messages` ordered by `seq`.
|
||||
- `scope=history_sessions_latest_assistant` means cross-session summary list.
|
||||
- Each `messages[i].threadId` is required and points to the owning session. Frontend must use this value to open detail replay and follow-up.
|
||||
- `day` and `hasMore` are retained for compatibility with old clients, but in `history_session_full` mode backend currently returns `day=null` and `hasMore=false`.
|
||||
- In `history_sessions_latest_assistant`, backend computes `hasMore` from `session_limit + 1` query.
|
||||
- `assistant` message MUST provide `agent_output` when backend has valid worker output metadata.
|
||||
- `agent_output.divination_derived` uses the same shape as `DIVINATION_DERIVED.divination` payload.
|
||||
- Frontend reconstructs divination result page from `agent_output` data, not from local mock data.
|
||||
- `agent_output.sign_level` allowed values: `上上签` / `中上签` / `中下签` / `下下签`.
|
||||
|
||||
### Breaking change note
|
||||
## Migration note (`requires-migration`)
|
||||
|
||||
- `ui_schema` is removed from history response and is no longer part of this project protocol.
|
||||
- This repository currently accepts non-backward-compatible protocol evolution (no production compatibility burden).
|
||||
### Change set
|
||||
|
||||
1. `GET /agent/history?threadId=...` now returns full session replay (`scope=history_session_full`) instead of day-window snapshot semantics.
|
||||
2. `messages[i].threadId` is now required.
|
||||
3. `ui_schema` is removed from history payload.
|
||||
4. `runtime_mode=follow_up` uses minimal `TEXT_MESSAGE_END` schema and no longer emits `DIVINATION_DERIVED`.
|
||||
5. Added `DELETE /api/v1/agent/sessions/{threadId}` with idempotent `204 No Content` (already deleted or not found also returns 204).
|
||||
|
||||
### Frontend migration steps
|
||||
|
||||
1. Parse history as ordered message stream by `messages[].seq`.
|
||||
2. Use `messages[].threadId` as session id for opening follow-up.
|
||||
3. Do not depend on `ui_schema` in history payload.
|
||||
4. Keep `day`/`hasMore` optional-read only; do not use them for pagination in thread replay mode.
|
||||
|
||||
### Rollback notes
|
||||
|
||||
- If backend rolls back to day-window semantics, frontend must switch detail replay back to day-based load logic and stop requiring `messages[].threadId`.
|
||||
- Keep legacy parser branch behind feature flag during staged rollout.
|
||||
|
||||
## Error contract linkage
|
||||
|
||||
- All errors use RFC7807 with extension `code` and optional `params`.
|
||||
- Error code registry source: `docs/protocols/common/http-error-codes.md`.
|
||||
|
||||
## Session delete contract
|
||||
|
||||
### `DELETE /api/v1/agent/sessions/{threadId}`
|
||||
|
||||
- Authorization: current user must own the session.
|
||||
- Semantics: soft delete session (`deleted_at`), history reads filter deleted sessions by default.
|
||||
- Success: `204 No Content`.
|
||||
- Idempotent: already deleted or not found also returns `204 No Content`.
|
||||
|
||||
## Transcribe contract
|
||||
|
||||
### `POST /api/v1/agent/transcribe`
|
||||
|
||||
Request:
|
||||
|
||||
- `multipart/form-data`
|
||||
- field name: `audio`
|
||||
- allowed content types: `audio/wav`, `audio/x-wav`, `audio/wave`
|
||||
- max payload bytes: `10MB`
|
||||
|
||||
Response:
|
||||
|
||||
```json
|
||||
{
|
||||
"transcript": "我今天适合出门谈合作吗?"
|
||||
}
|
||||
```
|
||||
|
||||
Error codes (see common registry):
|
||||
|
||||
- `AGENT_AUDIO_UNSUPPORTED_FORMAT`
|
||||
- `AGENT_AUDIO_TOO_LARGE`
|
||||
- `AGENT_AUDIO_EMPTY`
|
||||
- `AGENT_ASR_UNAVAILABLE`
|
||||
|
||||
Reference in New Issue
Block a user