新增: 执行中轨迹卡展开与占用期消息必达

- 执行中 step 卡支持点击展开(复用轨迹展开态, 实时过程工具卡回看)
- 占用期消息改落待发箱自动续投, 不再拒绝让用户重发(959)
- 待发项派发后完成结果回推来源飞书会话(35min 弃守)
- 961 轮次语义/960 聚合防抖设计要点登记
This commit is contained in:
lxy
2026-10-11 07:49:34 +08:00
parent 3dcb3c6fea
commit 461354d7f4
4 changed files with 126 additions and 11 deletions
+32 -3
View File
@@ -764,11 +764,40 @@ async fn handle_message(
let state = ctx.app.state::<crate::state::AppState>();
// #20 受理守卫:发票(受理卡)前先过引擎读侧闸。不可启动(前任务占用/压缩暂存/停止中)
// 直接回实况话术,不发票、不 spawn、不注册桥与流式任务,堵「受理卡已发后续零通知」
// 的伪受理断层(13:38 实证形态)
// 不发票、不 spawn、不注册桥与流式任务,堵「受理卡已发后续零通知」的伪受理断层。
// 959 必达改造(对齐 u-claw 收件箱续投):拒绝路径改落入待发箱(queue 尽快项),
// 前序任务完成调度器自动派发+结果回推本 chat——重试责任不在用户,不再让用户重发。
// 入队失败(写库异常等)降级回原占用话术,消息不丢语义不倒退
if !state.conv_states.can_accept_request(&conv_id) {
feishu_log(&format!("受理守卫拒绝 chat={chat_id} conv={conv_id}"));
deliver_result(&ctx.client, &placeholder_id, &message_id, &chat_id, QUEUE_BUSY_MSG).await;
match crate::commands::ai::outbox::enqueue_internal(
&ctx.app,
&state,
text.clone(),
None, // 尽快队列项:前序任务空闲即发
None,
None,
conv_id.clone(),
)
.await
{
Ok(_) => {
feishu_log(&format!("已入待发箱 chat={chat_id} conv={conv_id}"));
deliver_result(
&ctx.client,
&placeholder_id,
&message_id,
&chat_id,
"📥 已登记待发:前序任务完成后将自动发出,无需重发(期间可继续追加,均按补充登记)。",
)
.await;
}
Err(e) => {
feishu_log(&format!("待发箱入队失败 chat={chat_id}: {e}"));
deliver_result(&ctx.client, &placeholder_id, &message_id, &chat_id, QUEUE_BUSY_MSG)
.await;
}
}
return;
}
// 通知桥注册(#14):oneshot 接收端有意 drop——两段式下终版走事件广播