Prechádzať zdrojové kódy

fix(client): reword composer placeholders around the / and @ triggers

The default and hero placeholders drop the ellipsis and name the / commands
and @ references as comma-separated actions; goldens and e2e assertions
refresh with the copy.
Yif 5 dní pred
rodič
commit
a49376a2ca
73 zmenil súbory, kde vykonal 87 pridanie a 87 odobranie
  1. 1 1
      apps/web/tests/command-image-envelope.expected.e2e.ts
  2. 1 1
      apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md
  3. 1 1
      apps/web/tests/expected/github-ready-review/conversation.expected.md
  4. 1 1
      apps/web/tests/expected/goal-command-presentation/ui.expected.md
  5. 1 1
      apps/web/tests/expected/markdown-cjk-strong/ui.expected.md
  6. 1 1
      apps/web/tests/expected/markdown-images/ui.expected.md
  7. 1 1
      apps/web/tests/expected/markdown-inline-code-links/ui.expected.md
  8. 1 1
      apps/web/tests/expected/math-rendering/ui.expected.md
  9. 1 1
      apps/web/tests/expected/reference-composer/order.expected.md
  10. 1 1
      apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md
  11. 1 1
      apps/web/tests/expected/skill-user-invoke/ui.expected.md
  12. 1 1
      apps/web/tests/expected/stats-paged-history/ui.expected.md
  13. 1 1
      apps/web/tests/expected/steer-all/mid-steer.expected.md
  14. 1 1
      apps/web/tests/expected/steer-all/settled-expanded.expected.md
  15. 1 1
      apps/web/tests/expected/steer-all/settled.expected.md
  16. 1 1
      apps/web/tests/goal-bar.e2e.ts
  17. 3 3
      apps/web/tests/image-display.expected.e2e.ts
  18. 1 1
      apps/web/tests/preview-boot.e2e.ts
  19. 1 1
      apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md
  20. 1 1
      apps/web/tests/startup-auto-selection.e2e.ts
  21. 3 3
      apps/web/tests/subagent-conversation.e2e.ts
  22. 1 1
      apps/web/tests/subagent-interrupt-ui.e2e.ts
  23. 2 2
      apps/web/tests/support.ts
  24. 4 4
      packages/client/ui-conversation/src/client/locales.ts
  25. 7 7
      packages/client/ui-conversation/tests/input-bar.client.spec.tsx
  26. 1 1
      snapshots/web/bash-abort-row/ui.expected.md
  27. 1 1
      snapshots/web/cordis-tool-round/ui.expected.md
  28. 1 1
      snapshots/web/feedback-command/ack-expanded.expected.md
  29. 1 1
      snapshots/web/feedback-command/ack.expected.md
  30. 1 1
      snapshots/web/feedback-release/ack-expanded.expected.md
  31. 1 1
      snapshots/web/feedback-release/ack.expected.md
  32. 1 1
      snapshots/web/fresh-round-trip/ui-expanded.expected.md
  33. 1 1
      snapshots/web/fresh-round-trip/ui.expected.md
  34. 1 1
      snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md
  35. 1 1
      snapshots/web/goal-multi-turn-actions/ui.expected.md
  36. 1 1
      snapshots/web/lifecycle-chrome/hero.expected.md
  37. 1 1
      snapshots/web/lifecycle-chrome/plan-active.expected.md
  38. 1 1
      snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md
  39. 1 1
      snapshots/web/lifecycle-chrome/reloaded.expected.md
  40. 1 1
      snapshots/web/live-interactions/cancel-expanded.expected.md
  41. 1 1
      snapshots/web/live-interactions/cancel.expected.md
  42. 1 1
      snapshots/web/live-interactions/error-auth.expected.md
  43. 1 1
      snapshots/web/live-interactions/loading.expected.md
  44. 1 1
      snapshots/web/live-interactions/retry-exhausted.expected.md
  45. 1 1
      snapshots/web/live-interactions/retry-expanded.expected.md
  46. 1 1
      snapshots/web/live-interactions/retry.expected.md
  47. 1 1
      snapshots/web/live-interactions/running-draft.expected.md
  48. 1 1
      snapshots/web/message-actions/ui.expected.md
  49. 1 1
      snapshots/web/minimal-preset/ui.expected.md
  50. 1 1
      snapshots/web/plan-review/approved-expanded.expected.md
  51. 1 1
      snapshots/web/plan-review/approved.expected.md
  52. 1 1
      snapshots/web/ptc-round/ui.expected.md
  53. 1 1
      snapshots/web/question-composer/answered-expanded.expected.md
  54. 1 1
      snapshots/web/question-composer/answered.expected.md
  55. 1 1
      snapshots/web/question-composer/cancelled.expected.md
  56. 1 1
      snapshots/web/queue-actions/preserved-expanded.expected.md
  57. 1 1
      snapshots/web/queue-actions/preserved.expected.md
  58. 1 1
      snapshots/web/queued-image/delivered.expected.md
  59. 1 1
      snapshots/web/seeded-history/command-row.expected.md
  60. 1 1
      snapshots/web/seeded-history/feedback-row.expected.md
  61. 1 1
      snapshots/web/seeded-history/ui-expanded.expected.md
  62. 1 1
      snapshots/web/seeded-history/ui.expected.md
  63. 1 1
      snapshots/web/skill-tool-row/ui.expected.md
  64. 1 1
      snapshots/web/steering/settled-expanded.expected.md
  65. 1 1
      snapshots/web/steering/settled.expected.md
  66. 1 1
      snapshots/web/subagent-conversation/ui-expanded.expected.md
  67. 1 1
      snapshots/web/subagent-conversation/ui.expected.md
  68. 1 1
      snapshots/web/turn-tail-actions/completed.expected.md
  69. 1 1
      snapshots/web/turn-tail-actions/focused.expected.md
  70. 1 1
      snapshots/web/turn-tail-actions/running.expected.md
  71. 1 1
      snapshots/web/turn-tail-actions/settled.expected.md
  72. 1 1
      snapshots/web/turn-tail-actions/usage-expanded.expected.md
  73. 1 1
      snapshots/web/web-search-round/ui.expected.md

+ 1 - 1
apps/web/tests/command-image-envelope.expected.e2e.ts

@@ -21,7 +21,7 @@ async function freshComposer(): Promise<HTMLElement> {
   fireEvent.click(start)
   return await waitFor(() => {
     const surface = document.querySelector<HTMLElement>(
-      '[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]',
+      '[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]',
     )
     if (surface === null) throw new Error('composer surface missing')
     return surface

+ 1 - 1
apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md

@@ -48,7 +48,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Read Only"': Read Only

+ 1 - 1
apps/web/tests/expected/github-ready-review/conversation.expected.md

@@ -40,7 +40,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Read Only"': Read Only

+ 1 - 1
apps/web/tests/expected/goal-command-presentation/ui.expected.md

@@ -14,7 +14,7 @@
   - img
   - img
   - text: "goal No goal is currently set. Usage: /goal [<objective>|clear|edit <objective>|pause|resume]"
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/markdown-cjk-strong/ui.expected.md

@@ -48,7 +48,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/markdown-images/ui.expected.md

@@ -27,7 +27,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/markdown-inline-code-links/ui.expected.md

@@ -39,7 +39,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/math-rendering/ui.expected.md

@@ -43,7 +43,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/reference-composer/order.expected.md

@@ -13,7 +13,7 @@
 - button "Session recall Research notes":
   - img
   - text: Session recall Research notes
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md

@@ -40,7 +40,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/skill-user-invoke/ui.expected.md

@@ -32,7 +32,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/stats-paged-history/ui.expected.md

@@ -459,7 +459,7 @@
 - text: 7/25 {{clock}}
 - button "Back to bottom":
   - img
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/steer-all/mid-steer.expected.md

@@ -31,7 +31,7 @@
 - text: "Interjection: include the word ORANGE in your final reply."
 - button "Copy":
   - img
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/steer-all/settled-expanded.expected.md

@@ -50,7 +50,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/expected/steer-all/settled.expected.md

@@ -38,7 +38,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/goal-bar.e2e.ts

@@ -45,7 +45,7 @@ describe('web e2e: goal bar clear convergence', () => {
     onTestFailed(() => saveFailureShot(page, 'web-e2e-goal-bar-clear'))
     // Startup reuses the fixture workspace's blank session, keeping this
     // command independent of alpha's running replay and pending question.
-    const input = page.locator('[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]')
+    const input = page.locator('[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]')
     await input.waitFor({ timeout: 10_000 })
     await input.fill('/goal guard rapid clear clicks')
     await input.press('Enter')

+ 3 - 3
apps/web/tests/image-display.expected.e2e.ts

@@ -90,7 +90,7 @@ it('accepts pasted images into the composer rail in order and removes them', asy
   // this assembled lane pins the intake chain over the built graph.
   const textarea = await waitFor(() => {
     const surface = document.querySelector<HTMLElement>(
-      '[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]',
+      '[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]',
     )
     if (surface === null) throw new Error('composer surface missing')
     return surface
@@ -165,7 +165,7 @@ it('accepts a whole-page drop under the limits-labeled overlay and refuses an ov
   fireEvent.click(start)
   const textarea = await waitFor(() => {
     const surface = document.querySelector<HTMLElement>(
-      '[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]',
+      '[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]',
     )
     if (surface === null) throw new Error('composer surface missing')
     return surface
@@ -220,7 +220,7 @@ it('renders a host dimension rejection with the projected 2000px limit', async (
 
   const textarea = await waitFor(() => {
     const surface = document.querySelector<HTMLElement>(
-      '[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]',
+      '[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]',
     )
     if (surface === null) throw new Error('composer surface missing')
     return surface

+ 1 - 1
apps/web/tests/preview-boot.e2e.ts

@@ -314,7 +314,7 @@ async function bootPreview(origin: string, browser: Browser): Promise<void> {
     const configureLater = page.getByRole('button', { name: 'Configure later' })
     await configureLater.waitFor({ timeout: 30_000 })
     await configureLater.click()
-    await page.locator('[data-composer-input][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]')
+    await page.locator('[data-composer-input][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]')
       .waitFor({ timeout: 30_000 })
 
     const exercised = await page.evaluate(async () => {

+ 1 - 1
apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md

@@ -24,7 +24,7 @@
 - button "Copy"
 - code: "const first: number = 1 const second = \"two\" let tail"
 - status: Deep diving...
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
apps/web/tests/startup-auto-selection.e2e.ts

@@ -130,7 +130,7 @@ describe('web e2e: startup auto-selection', () => {
       expect(await page.locator('[data-composer-input]').first().isVisible()).toBe(true)
 
       releaseOpening()
-      await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]')
+      await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]')
         .waitFor({ timeout: 15_000 })
       acknowledgeReloadConnectionLoss(tripwire, warningsBefore)
 

+ 3 - 3
apps/web/tests/subagent-conversation.e2e.ts

@@ -423,7 +423,7 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
       expect(await page.locator('[data-composer-seat]').evaluate(element =>
         getComputedStyle(element).visibility)).toBe('hidden')
       releaseCatalog()
-      const input = page.getByRole('textbox', { name: 'Message or run a task... / commands, @ files or sessions' })
+      const input = page.getByRole('textbox', { name: 'Message or run a task, run / commands, @ files or sessions' })
       await input.waitFor({ timeout: 15_000 })
       await expect.poll(() => input.isEnabled(), { timeout: 15_000 }).toBe(true)
       acknowledgeReloadConnectionLoss(tripwire, warningStart)
@@ -447,7 +447,7 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
         resolveEnded()
       })
     })
-    const input = page.getByRole('textbox', { name: 'Message or run a task... / commands, @ files or sessions' })
+    const input = page.getByRole('textbox', { name: 'Message or run a task, run / commands, @ files or sessions' })
     await input.fill(FOLLOWUP)
     await input.press('Enter')
     await expect.poll(
@@ -537,7 +537,7 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
       .click()
     await page.getByRole('button', { name: '3 subagents' }).hover()
     await page.getByRole('treeitem', { name: new RegExp(LABEL) }).click()
-    await page.getByRole('textbox', { name: 'Message or run a task... / commands, @ files or sessions' }).waitFor()
+    await page.getByRole('textbox', { name: 'Message or run a task, run / commands, @ files or sessions' }).waitFor()
     const forkResponse = page.waitForResponse(response =>
       new URL(response.url()).pathname === '/api/session/fork')
     await page.getByRole('button', { name: 'Branch into a new conversation' }).last().click()

+ 1 - 1
apps/web/tests/subagent-interrupt-ui.e2e.ts

@@ -263,7 +263,7 @@ describe.skipIf(MODE === 'record')('web e2e: composer interrupt for a running co
       .getByRole('button').first().click()
     await page.getByRole('button', { name: /1 subagent/ }).click()
     await page.getByRole('treeitem', { name: new RegExp(LABEL) }).click()
-    const input = page.getByRole('textbox', { name: 'Message or run a task... / commands, @ files or sessions' })
+    const input = page.getByRole('textbox', { name: 'Message or run a task, run / commands, @ files or sessions' })
     await input.waitFor({ timeout: 15_000 })
     expect(await input.isDisabled()).toBe(false)
 

+ 2 - 2
apps/web/tests/support.ts

@@ -112,7 +112,7 @@ export async function connectFreshWorkspace(page: Page, root: string, name = 'wo
   await dialog.getByRole('button', { name: 'Open', exact: true }).click()
   // The pick connected the workspace: the blank session's live composer
   // replaces the locked placeholder and enables.
-  await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="Describe what you want to build... / commands, @ files or sessions"]')
+  await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="Describe what you want to build, run / commands, @ files or sessions"]')
     .waitFor({ timeout: 15_000 })
 }
 
@@ -135,7 +135,7 @@ export async function connectFreshWorkspaceZh(page: Page, root: string, name = '
   await pathInput.fill(join(root, name))
   await pathInput.press('Enter')
   await dialog.getByRole('button', { name: '打开', exact: true }).click()
-  await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="描述你想要构建的内容… / 调用指令 @ 文件或对话"]')
+  await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="描述你想要构建的内容, / 调用指令, @ 文件或对话"]')
     .waitFor({ timeout: 15_000 })
 }
 

+ 4 - 4
packages/client/ui-conversation/src/client/locales.ts

@@ -13,10 +13,10 @@ export const zh = {
   'hint.goal': '输入目标,智能体将持续执行',
   'hint.goal.active': '当前目标进行中。可输入 edit 修改 / pause 暂停 / resume 继续 / clear 清除',
   'placeholder.plan': PLAN_NEXT_ACTION_ZH,
-  'placeholder.default': '发消息或做任务… / 调用指令 @ 文件或对话',
+  'placeholder.default': '发消息或创建任务, / 调用指令, @ 文件或对话',
   'placeholder.unavailable': '会话不可用',
   'placeholder.parentOffline': '父会话已离线,无法继续发送;仍可停止当前运行',
-  'placeholder.hero': '描述你想要构建的内容… / 调用指令 @ 文件或对话',
+  'placeholder.hero': '描述你想要构建的内容, / 调用指令, @ 文件或对话',
   'placeholder.workspace': '选择一个工作区开始',
   'placeholder.steerQueue': 'Cmd/Ctrl+Enter 插话发送全部排队消息',
   'input.commands': '指令',
@@ -164,10 +164,10 @@ export const en = {
   'hint.goal': 'describe the objective for a long-running task',
   'hint.goal.active': 'goal active — edit / pause / resume / clear',
   'placeholder.plan': PLAN_NEXT_ACTION_EN,
-  'placeholder.default': 'Message or run a task... / commands, @ files or sessions',
+  'placeholder.default': 'Message or run a task, run / commands, @ files or sessions',
   'placeholder.unavailable': 'Session unavailable',
   'placeholder.parentOffline': 'Parent session offline; sending is unavailable but you can still stop the run',
-  'placeholder.hero': 'Describe what you want to build... / commands, @ files or sessions',
+  'placeholder.hero': 'Describe what you want to build, run / commands, @ files or sessions',
   'placeholder.workspace': 'Choose a workspace to start',
   'placeholder.steerQueue': 'Cmd/Ctrl+Enter steers all queued messages',
   'input.commands': 'Commands',

+ 7 - 7
packages/client/ui-conversation/tests/input-bar.client.spec.tsx

@@ -459,9 +459,9 @@ describe('Enter semantics', () => {
   })
 
   it('keeps the owning placeholder or ordinary guidance when whole-queue steering is unavailable', () => {
-    expect(bench({ running: true }).placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
-    expect(bench({ queue: [row('q-1')] }).placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
-    expect(bench({ running: true, queue: [row('q-1')], draft: '消息' }).placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
+    expect(bench({ running: true }).placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
+    expect(bench({ queue: [row('q-1')] }).placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
+    expect(bench({ running: true, queue: [row('q-1')], draft: '消息' }).placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
     expect(bench({
       running: true,
       queue: [row('q-1')],
@@ -469,7 +469,7 @@ describe('Enter semantics', () => {
         address: { parentSessionId: 'parent' as SessionId, childSessionId: SID, mode: 'continuable' },
         parentAvailable: true,
       },
-    }).placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
+    }).placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
     expect(bench({
       running: true,
       queue: [row('q-1')],
@@ -481,7 +481,7 @@ describe('Enter semantics', () => {
       running: true,
       queue: [row('q-1')],
       commandMenuOpen: true,
-    }).placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
+    }).placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
     // The steer hint intentionally outranks the plan placeholder: while it
     // shows, the whole-queue gesture is genuinely available in plan mode.
     expect(bench({
@@ -977,7 +977,7 @@ describe('running and lock semantics', () => {
   it('disabled state shows the unavailable placeholder; custom placeholder wins', () => {
     expect(bench({ disabled: true }).placeholder).toBe('会话不可用')
     const live = bench()
-    expect(live.placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
+    expect(live.placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
     const custom = bench({ placeholder: 'Custom placeholder' })
     expect(custom.placeholder).toBe('Custom placeholder')
   })
@@ -1024,7 +1024,7 @@ describe('running and lock semantics', () => {
     expect(entering.placeholder).toBe('描述你的任务以生成计划')
     // Pending exit: target is default again.
     const leaving = bench({ plan: { active: true, pending: true } })
-    expect(leaving.placeholder).toBe('发消息或做任务… / 调用指令 @ 文件或对话')
+    expect(leaving.placeholder).toBe('发消息或创建任务, / 调用指令, @ 文件或对话')
     // Owner placeholder outranks the plan swap.
     const custom = bench({ plan: { active: true, pending: false }, placeholder: 'Custom placeholder' })
     expect(custom.placeholder).toBe('Custom placeholder')

+ 1 - 1
snapshots/web/bash-abort-row/ui.expected.md

@@ -26,7 +26,7 @@
 - 'button "Failed Bash Error: tool call aborted before dispatch"':
   - img
   - text: "Failed Bash Error: tool call aborted before dispatch"
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Full access"': Full access

+ 1 - 1
snapshots/web/cordis-tool-round/ui.expected.md

@@ -114,7 +114,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/feedback-command/ack-expanded.expected.md

@@ -44,7 +44,7 @@
   - img
   - img
   - text: "feedback Feedback recorded for session session-{{uuid}} Anonymous user: {{uuid}}. Session sharing is enabled."
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/feedback-command/ack.expected.md

@@ -36,7 +36,7 @@
   - img
   - img
   - text: "feedback Feedback recorded for session session-{{uuid}} Anonymous user: {{uuid}}. Session sharing is enabled."
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/feedback-release/ack-expanded.expected.md

@@ -44,7 +44,7 @@
   - img
   - img
   - text: "feedback Feedback recorded for session session-{{uuid}} Anonymous user: {{uuid}}. Session sharing is feedback-gated; recording feedback uploads the session records not yet shared."
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/feedback-release/ack.expected.md

@@ -36,7 +36,7 @@
   - img
   - img
   - text: "feedback Feedback recorded for session session-{{uuid}} Anonymous user: {{uuid}}. Session sharing is feedback-gated; recording feedback uploads the session records not yet shared."
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/fresh-round-trip/ui-expanded.expected.md

@@ -48,7 +48,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/fresh-round-trip/ui.expected.md

@@ -32,7 +32,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md

@@ -226,7 +226,7 @@
 - text: {{clock}}
 - button "Back to bottom":
   - img
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/goal-multi-turn-actions/ui.expected.md

@@ -114,7 +114,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/lifecycle-chrome/hero.expected.md

@@ -29,7 +29,7 @@
   - img
   - text: Standard mode
   - img
-- textbox "Describe what you want to build... / commands, @ files or sessions":
+- textbox "Describe what you want to build, run / commands, @ files or sessions":
   - paragraph
 - button "Commands":
   - img

+ 1 - 1
snapshots/web/lifecycle-chrome/plan-active.expected.md

@@ -29,7 +29,7 @@
   - img
   - text: Standard mode
   - img
-- textbox "Describe what you want to build... / commands, @ files or sessions"
+- textbox "Describe what you want to build, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md

@@ -40,7 +40,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/lifecycle-chrome/reloaded.expected.md

@@ -32,7 +32,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/cancel-expanded.expected.md

@@ -37,7 +37,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/cancel.expected.md

@@ -33,7 +33,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/error-auth.expected.md

@@ -23,7 +23,7 @@
 - status:
   - text: This turn failedAPI key is invalid
   - code: AUTH
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/loading.expected.md

@@ -22,7 +22,7 @@
   - text: Context injection @deepseek-ai/dsh-system-prompt
 - paragraph: partial
 - status: Deep diving...
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/retry-exhausted.expected.md

@@ -25,7 +25,7 @@
 - status:
   - text: This turn failedupstream 503
   - code: SERVER
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/retry-expanded.expected.md

@@ -42,7 +42,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/retry.expected.md

@@ -32,7 +32,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/live-interactions/running-draft.expected.md

@@ -22,7 +22,7 @@
   - text: Context injection @deepseek-ai/dsh-system-prompt
 - paragraph: partial
 - status: Deep diving...
-- textbox "Message or run a task... / commands, @ files or sessions":
+- textbox "Message or run a task, run / commands, @ files or sessions":
   - paragraph: Queue this follow-up while the current turn is running.
 - button "Commands":
   - img

+ 1 - 1
snapshots/web/message-actions/ui.expected.md

@@ -66,7 +66,7 @@
   - img
   - text: Ran for {{duration}}
 - text: 7/25 {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/minimal-preset/ui.expected.md

@@ -37,7 +37,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/plan-review/approved-expanded.expected.md

@@ -58,7 +58,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/plan-review/approved.expected.md

@@ -38,7 +38,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/ptc-round/ui.expected.md

@@ -53,7 +53,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/question-composer/answered-expanded.expected.md

@@ -50,7 +50,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/question-composer/answered.expected.md

@@ -32,7 +32,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/question-composer/cancelled.expected.md

@@ -29,7 +29,7 @@
 - list:
   - listitem: Which color do you prefer?
 - button "Inspect"
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/queue-actions/preserved-expanded.expected.md

@@ -56,7 +56,7 @@
       - img
     - button "Steer queued message" [disabled]:
       - img
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/queue-actions/preserved.expected.md

@@ -52,7 +52,7 @@
       - img
     - button "Steer queued message" [disabled]:
       - img
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/queued-image/delivered.expected.md

@@ -76,7 +76,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/seeded-history/command-row.expected.md

@@ -58,7 +58,7 @@
   - text: Context injection AGENTS.md
 - img
 - text: permission preset read-only
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Read Only"': Read Only

+ 1 - 1
snapshots/web/seeded-history/feedback-row.expected.md

@@ -62,7 +62,7 @@
   - img
   - text: "feedback Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}. Session sharing is not configured."
 - text: "Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}. Session sharing is not configured."
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Read Only"': Read Only

+ 1 - 1
snapshots/web/seeded-history/ui-expanded.expected.md

@@ -56,7 +56,7 @@
   - img
   - img
   - text: Context injection AGENTS.md
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/seeded-history/ui.expected.md

@@ -38,7 +38,7 @@
   - img
   - img
   - text: Context injection AGENTS.md
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/skill-tool-row/ui.expected.md

@@ -51,7 +51,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{date}} {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Full access"': Full access

+ 1 - 1
snapshots/web/steering/settled-expanded.expected.md

@@ -43,7 +43,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/steering/settled.expected.md

@@ -35,7 +35,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/subagent-conversation/ui-expanded.expected.md

@@ -75,7 +75,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Custom"': Custom

+ 1 - 1
snapshots/web/subagent-conversation/ui.expected.md

@@ -63,7 +63,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Custom"': Custom

+ 1 - 1
snapshots/web/turn-tail-actions/completed.expected.md

@@ -35,7 +35,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/turn-tail-actions/focused.expected.md

@@ -48,7 +48,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/turn-tail-actions/running.expected.md

@@ -32,7 +32,7 @@
   - text: Bash Print alpha to stdout
 - paragraph: partial
 - status: Deep diving...
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/turn-tail-actions/settled.expected.md

@@ -34,7 +34,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/turn-tail-actions/usage-expanded.expected.md

@@ -35,7 +35,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write

+ 1 - 1
snapshots/web/web-search-round/ui.expected.md

@@ -40,7 +40,7 @@
   - img
   - text: Ran for {{duration}}
 - text: {{clock}}
-- textbox "Message or run a task... / commands, @ files or sessions"
+- textbox "Message or run a task, run / commands, @ files or sessions"
 - button "Commands":
   - img
 - 'button "Access mode, current: Workspace Write"': Workspace Write