[Feature] XD Pages 删除站点后支持等待状态同步完成
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 背景
XD Pages 当前将 `pages_delete` 的 DELETE 请求收到 `2xx` 视为工具调用成功,但没有区分“删除请求已接受”和“站点已完成删除”。
实测删除返回成功后的约 12 秒内:
- `pages_info` 仍能查询到站点详情;
- `pages_list` 仍会列出该站点;
- 使用相同名称重新部署会返回 `SITE_NAME_TAKEN`;
- 等待十余秒后,详情才变成 `NOT_FOUND`,站点从列表消失,名称也可重新使用。
这会让调用方过早向用户表达“站点已删除”,并导致删除后立即查询或同名重部署时出现与成功提示不一致的结果。
## 源码定位
XD Pages 插件的实现位于:
- `apps/desktop/resources/builtin-ghosts/xd-pages/main.js`
当前行为:
1. `pagesDelete()` 完成站点名和 `confirm:true` 校验后,直接调用:
```js
return request('DELETE', '/site/' + encodeURIComponent(name));
```
2. `requestOnce()` 将服务端任意 `2xx` 收敛为:
```js
{ ok: true, data: parsed || {} }
```
3. 删除后没有继续确认以下终态:
- `pages_info` 返回 `NOT_FOUND`;
- 站点从 `pages_list` 消失;
- 名称占用已经释放。
4. 现有 5 秒重试只处理 `RATE_LIMITED` 和 `NETWORK_ERROR`,不是删除完成轮询。
5. `pages_info` 和 `pages_list` 每次都会重新请求服务端,没有发现插件内缓存;`SITE_NAME_TAKEN` 则由服务端 HTTP 409 映射而来。
当前客户端源码可以确认缺少删除终态确认能力,但本仓不包含服务端实现,因此约 12 秒的收敛时间究竟来自异步删除任务、读模型或缓存同步、名称索引延迟释放,仍需结合服务端契约确认。
## 期望能力
明确区分以下两种状态:
- 删除请求已被服务端接受;
- 站点已经完成删除。
可根据服务端契约选择一种处理方式:
1. 插件等待删除达到终态后,再返回“删除完成”;或
2. 如果服务端采用异步删除,插件返回明确的 `deleting` 状态、任务 ID、建议轮询间隔等信息,避免调用方误报完成。
等待超过合理时限时,应返回明确的处理中或超时结果,而不是继续表达为已经删除。
## 验收标准
- `pages_delete` 的返回结果能够区分“删除请求已接受”和“删除已完成”。
- 当插件返回“删除已完成”时:
- `pages_info` 已返回 `NOT_FOUND`;
- `pages_list` 已不包含该站点;
- 相同名称已经可以重新部署。
- 如果删除尚未完成或等待超时,返回明确、可供调用方确定性处理的状态或错误码。
- 增加删除请求已接受、删除中、删除完成和等待超时的回归测试。
- 明确服务端 DELETE 的 `200`、`202`、`204` 等响应语义,并使插件行为与该契约一致。
Contributor guide
Research direction
Start in apps/desktop/resources/builtin-ghosts/xd-pages/main.js, tracing pagesDelete(), requestOnce(), and the existing RATE_LIMITED and NETWORK_ERROR retry handling. Confirm the server contract for DELETE responses and deletion state before choosing polling or an explicit in-progress result. Done means accepted, deleting, completed, and timeout outcomes are distinguishable and covered by regression tests for the stated terminal conditions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- api
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100