← Về thư mục
📄 / / profiles / r-and-d / raw_evidence / OpenAI4S / frontend / src / features / send / README_zh.md

frontend/src/features/send

English

F-11 发送全链与现场卡片。作曲框 send()、turn ticket、步骤 / 计划 / 权限 / 候选卡片、附件与 @-引用问题卡、admission 追踪器。window 名字(send、buildStepCard、renderAttachmentProblems、renderRefProblems、searchResultHttpUrl、admissionSettled、forgetAdmission、outstandingAdmissions、reconcileLastAdmission、rememberAdmission)由本模块赋值,不再留给 F-05 占位。frame_update 仍归 F-06;turn-ticket 体通过 setFrameUpdateTurnHandler 注入。

文件

文件 职责
admission.ts Admission 追踪器。独立键 openai4s.admission.{fid}.{id};legacy key 迁移;60 秒 grace。
admission.test.ts 前缀、legacy 迁移、grace 窗口、settled 状态。
bind.test.ts bindComposer 只绑一次;installSend 不碰 DOM;Enter 派发文本;同一时刻只有一个 dispatch 在途。
candidate.ts Review 门控三态时序:markCandidateReady → applyCandidateResolution → applyFinalReviewStatus。
candidate.test.ts 三态顺序、禁止把 verified 降级、durable 回执规则。
first-send.test.ts 新会话的第一条消息只在共享创建流程打开对话之后才派发,openConversation 的重置不会落在回合中间;票据与运行态得以保留。
refused-send.test.ts 服务端在准入之前拒绝的发送(409 model_profile_needs_key / model_revision_unavailable / model_profile_needs_active):文字回到输入框、移除乐观气泡(若输入框里已有新内容,则保留该气泡并标为未发送,被拒绝的文字不会丢失),提示保留服务端给出的原因而不是「本轮失败」;改绑成功后的提示说明实际绑定了什么(rebindDoneText);改绑确认框依据服务端的 code 与消息说明真实原因(rebindConfirmText:配置已改指其他提供商或端点、缺少密钥、固定配置无法读取、匹配不唯一;只有服务端明确说"已不存在"时才这样说,其余情况用中性的"已不可用")。
environment.ts send() / turnDone 用的 standard-profile 就绪横幅。
handlers.ts cards / candidate / step / plan / permission 的 WS 类型;handleFrameUpdateTurn。
host.ts 用 isReady 查 window(callLane / hostFn);取消按钮显隐。
icon.ts 步骤 / 计划 / 权限多出来的图标(globe、list-check、lock 等)。
index.ts installSend 往 window 赋值、注册 WS handler。不碰 DOM:作曲框由 main.tsx 在 render 之后绑定。
install.test.ts 十个契约名字通过 isReady;不注册 frame_update。
permission.ts 权限门卡片。冻结 DOM 类名 .perm-card / .resolved / .allowed / .denied。
plan.ts 结构化计划卡、进度、批准 / 修订 / 丢弃 / 恢复。仍为 in_progress 的步骤只在计划执行中时才闪烁;completed 计划若仍带着这样的步骤(服务端开始拒绝这种组合之前写下的行),会用本功能自带的文案表标成「已结束、有步骤未确认完成」。
plan.test.ts 结束态计划卡:带着进行中步骤的已完成计划不显示为完成;执行中仍保留实时图标;步骤全部有结论的计划照常显示完成。
problems.ts 附件问题卡(客户端文案)与 @-引用问题卡(服务端文案)。
send.ts 作曲框发送全链。计划模式 payload 走 F-07 planModePayload。bindComposer(由 main.tsx 在 render 之后调用)。
step.ts 语义活动步骤、buildStepCard、searchResultHttpUrl。
ticket.ts Turn ticket 世代、acceptTurnTicket / activateTurnTicket、resumeWatch。
turn.ts turnDone 收尾;调用 F-14 的 notebookOnTurnDone();收尾仍显示运行中的活动卡片(messages/cardState.ts)。