The Web composer now renders a request that declares the `plan-review` intent as its own surface: the waiting-approval card language — amber "Plan review" strip, the plan as the scrolling markdown body, the question as the card's accessible name — over one decision row of Chat about it / Refuse / Approve. Gone from that surface are the 1/1 pager, the numbered radio rows, the custom answer row, and Skip/Submit, which made approving a plan read as sitting an exam. Approve and Refuse answer with the asker's own option labels and keep its descriptions as tooltips; Chat about it cancels the request so the composer returns and the user can simply say what they want. Copy is bilingual under the existing `question` namespace. The shape choice lives inside the single composer entry rather than a second chain registration, so the two surfaces cannot race the same carrier, and `planReviewOf` falls back to the generic flow for any request it cannot render as a card — the client sits downstream of a wire boundary and every request must stay answerable.
39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
/** `question` namespace dictionaries. */
|
|
|
|
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
export const zh = {
|
|
'error.incomplete': '请先完成这道问题。',
|
|
'error.unanswered': '请选择一个选项或填写自定义答案。',
|
|
'nav.prev': '上一题',
|
|
'nav.next': '下一题',
|
|
'nav.cancel': '放弃整组问题',
|
|
'option.recommended': '推荐',
|
|
'custom.placeholder': '输入你的答案',
|
|
'action.skip': '跳过本题',
|
|
'action.next': '下一题',
|
|
'plan.header': '计划待审',
|
|
'plan.approve': '确认执行',
|
|
'plan.decline': '拒绝',
|
|
'plan.discuss': '去聊天里说',
|
|
} satisfies Record<string, string>
|
|
|
|
/** The question namespace key union. */
|
|
export type QuestionKey = keyof typeof zh
|
|
|
|
/** English dictionary, checked complete against the zh key set. */
|
|
export const en = {
|
|
'error.incomplete': 'Please complete this question first.',
|
|
'error.unanswered': 'Please select an option or enter a custom answer.',
|
|
'nav.prev': 'Previous question',
|
|
'nav.next': 'Next question',
|
|
'nav.cancel': 'Dismiss all questions',
|
|
'option.recommended': 'Recommended',
|
|
'custom.placeholder': 'Type your answer',
|
|
'action.skip': 'Skip this question',
|
|
'action.next': 'Next',
|
|
'plan.header': 'Plan review',
|
|
'plan.approve': 'Approve',
|
|
'plan.decline': 'Refuse',
|
|
'plan.discuss': 'Chat about it',
|
|
} satisfies Record<QuestionKey, string>
|