Skip to content

Commit 88cc5bb

Browse files
Align current-main Chat terminology
1 parent 9a29832 commit 88cc5bb

10 files changed

Lines changed: 111 additions & 111 deletions

apps/web/src/chat/chat.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* The chat pane.
33
*
44
* Drives the agent, and shows what it is doing. The composer stays live while
5-
* a turn runs — a turn owns the plan, not the conversation — and anything sent
5+
* a turn runs — a turn owns the plan, not the chat — and anything sent
66
* to the agent meanwhile is queued in order, with its author's name on it, so
77
* nobody is silenced because a colleague prompted first.
88
*
@@ -51,7 +51,7 @@ export type ChatProps = {
5151
repository: Pick<Repository, "id" | "name" | "owner">;
5252
room: string;
5353
sendAcknowledgements: boolean;
54-
/** Hosted mode keeps the shared conversation while repository-scoped agent work is disabled. */
54+
/** Hosted mode keeps the shared chat while repository-scoped agent work is disabled. */
5555
agent?: boolean;
5656
active?: boolean;
5757
onActivity?: (event: { type: "message" | "working"; busy: boolean }) => void;

apps/web/src/theme.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,9 @@ describe("feedback motion", () => {
260260
expect(THEME).not.toContain("@keyframes feedback-");
261261
});
262262

263-
it("uses the short control transition for Conversation hover glyphs", () => {
263+
it("uses the short control transition for Chat hover glyphs", () => {
264264
expect(THEME).toMatch(
265-
/:root\[data-motion-input="pointer"\] \.conversation-toggle-icon\s*{[^}]*opacity var\(--duration-fast\) var\(--ease-out\)/s,
265+
/:root\[data-motion-input="pointer"\] \.chat-toggle-icon\s*{[^}]*opacity var\(--duration-fast\) var\(--ease-out\)/s,
266266
);
267267
});
268268

apps/web/src/workspace-feedback.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import { expect, test } from "bun:test";
22
import { createElement } from "react";
33
import { renderToStaticMarkup } from "react-dom/server";
44

5-
import { ConversationToggle } from "./workspace";
5+
import { ChatToggle } from "./workspace";
66

7-
test("conversation state swaps use purposeful icon feedback", () => {
7+
test("chat state swaps use purposeful icon feedback", () => {
88
let markup = renderToStaticMarkup(
9-
createElement(ConversationToggle, {
9+
createElement(ChatToggle, {
1010
activity: { busy: false, unread: 0 },
11-
controls: "conversation",
11+
controls: "chat",
1212
onToggle: () => {},
1313
open: false,
1414
}),
@@ -18,32 +18,32 @@ test("conversation state swaps use purposeful icon feedback", () => {
1818
expect(markup).toContain("motion-feedback");
1919
});
2020

21-
test("the open conversation hover swap crossfades without display changes", () => {
21+
test("the open chat hover swap crossfades without display changes", () => {
2222
let markup = renderToStaticMarkup(
23-
createElement(ConversationToggle, {
23+
createElement(ChatToggle, {
2424
activity: { busy: false, unread: 0 },
25-
controls: "conversation",
25+
controls: "chat",
2626
onToggle: () => {},
2727
open: true,
2828
swapOnHover: true,
2929
}),
3030
);
3131

32-
expect(markup.match(/class="conversation-toggle-icon/g)).toHaveLength(2);
32+
expect(markup.match(/class="chat-toggle-icon/g)).toHaveLength(2);
3333
expect(markup).not.toContain("group-hover:hidden");
3434
expect(markup).not.toContain("group-hover:block");
3535
});
3636

3737
test("live busy feedback stays immediate", () => {
3838
let markup = renderToStaticMarkup(
39-
createElement(ConversationToggle, {
39+
createElement(ChatToggle, {
4040
activity: { busy: true, unread: 0 },
41-
controls: "conversation",
41+
controls: "chat",
4242
onToggle: () => {},
4343
open: false,
4444
}),
4545
);
4646

47-
expect(markup).toContain('aria-label="Show conversation pane, Planner working"');
47+
expect(markup).toContain('aria-label="Show chat pane, Planner working"');
4848
expect(markup).not.toContain('data-motion-feedback="count"');
4949
});

docs/channels.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Back, Escape, and the child close control return to the parent and restore its
224224
scroll, selection, and opener focus.
225225

226226
Project lists, the repository document picker, cross-project document search,
227-
and conversation document-reference pickers show generated descriptions when
227+
and Chat document-reference pickers show generated descriptions when
228228
present. Search uses the server's title-or-description matching rather than
229229
filtering only the currently loaded page.
230230

docs/hosted-agent.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Available capabilities are:
5252
captured when the SDK session is created;
5353
- repository-scoped code search, post-filtered by repository node ID; and
5454
- bounded reads of document and historical research references attached to the
55-
current conversation context; and
55+
current Chat context; and
5656
- repository-bound, read-only pull-request MCP calls.
5757

5858
Issue and general search MCP tools are refused because linked objects and

e2e/hosted.e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ test("an authenticated user adds a Project and creates its first document", asyn
7979
let activeRoute = page.locator("[data-content-swap-state]:not([inert])").filter({
8080
has: page.getByRole("banner", { includeHidden: true }),
8181
});
82-
await expect(activeRoute.getByRole("complementary", { name: "Conversation" })).toBeVisible();
82+
await expect(activeRoute.getByRole("complementary", { name: "Chat" })).toBeVisible();
8383
await expect(activeRoute.getByRole("textbox", { name: "editable markdown" })).toBeVisible();
8484
await expect(activeRoute.locator("[data-plan-decisions-scroll]")).toBeAttached();
8585
});

e2e/research-child-surface.e2e.ts

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -101,24 +101,24 @@ test("a parent-owned child keeps the parent chrome and nested geometry", async (
101101
expect(await surface.evaluate(element => getComputedStyle(element).boxShadow)).not.toBe("none");
102102

103103
let childClose = surface.getByRole("button", { name: `Close ${childTitle}`, exact: true });
104-
let childConversationToggle = surface.getByRole("button", {
105-
name: "Show conversation pane",
104+
let childChatToggle = surface.getByRole("button", {
105+
name: "Show chat pane",
106106
exact: true,
107107
});
108-
await expect(childConversationToggle).toBeVisible();
108+
await expect(childChatToggle).toBeVisible();
109109
let closeHandle = await childClose.elementHandle();
110110
expect(closeHandle).not.toBeNull();
111111
expect(
112-
await childConversationToggle.evaluate(
112+
await childChatToggle.evaluate(
113113
(toggle, close) => toggle.nextElementSibling === close,
114114
closeHandle,
115115
),
116116
).toBe(true);
117-
let conversationToggleBox = await childConversationToggle.boundingBox();
117+
let chatToggleBox = await childChatToggle.boundingBox();
118118
let childCloseBox = await childClose.boundingBox();
119-
expect(conversationToggleBox).not.toBeNull();
119+
expect(chatToggleBox).not.toBeNull();
120120
expect(childCloseBox).not.toBeNull();
121-
expect(conversationToggleBox!.x + conversationToggleBox!.width)
121+
expect(chatToggleBox!.x + chatToggleBox!.width)
122122
.toBeLessThanOrEqual(childCloseBox!.x);
123123

124124
let resize = page.getByRole("separator", { name: "Resize Projects sidebar" });
@@ -152,15 +152,15 @@ test("a child isolates chat and decisions across every parent-owned close path",
152152
await page.setViewportSize({ width: 1920, height: 1080 });
153153
await join("ana");
154154
let parent = page.locator(`[data-workspace-room="${room}"]`);
155-
let parentConversation = parent.getByRole("complementary", {
156-
name: "Conversation",
155+
let parentChat = parent.getByRole("complementary", {
156+
name: "Chat",
157157
includeHidden: true,
158158
});
159159
let parentRoomMessage = `Parent room message ${room.slice(0, 8)}`;
160-
let parentDraft = parentConversation.getByPlaceholder("Use @chopin to ask Chopin");
160+
let parentDraft = parentChat.getByPlaceholder("Use @chopin to ask Chopin");
161161
await parentDraft.fill(parentRoomMessage);
162-
await parentConversation.getByRole("button", { name: "Send message" }).click();
163-
await expect(parentConversation.getByText(parentRoomMessage, { exact: true })).toBeVisible();
162+
await parentChat.getByRole("button", { name: "Send message" }).click();
163+
await expect(parentChat.getByText(parentRoomMessage, { exact: true })).toBeVisible();
164164

165165
let parentScroll = parent.locator("[data-plan-scroll]");
166166
await parentScroll.evaluate(element => element.scrollTop = 180);
@@ -172,45 +172,45 @@ test("a child isolates chat and decisions across every parent-owned close path",
172172
let surface = page.getByRole("region", { name: `Child document: ${childTitle}` });
173173
let parentHeader = parent.locator(".room-header");
174174
let childClose = surface.getByRole("button", { name: `Close ${childTitle}`, exact: true });
175-
let childConversationToggle = surface.getByRole("button", {
176-
name: "Show conversation pane",
175+
let childChatToggle = surface.getByRole("button", {
176+
name: "Show chat pane",
177177
exact: true,
178178
});
179-
let childConversation = surface.getByRole("complementary", { name: "Conversation" });
180-
await expect(childConversationToggle).toBeVisible();
181-
await expect(childConversation).toBeHidden();
182-
183-
await childConversationToggle.click();
184-
await expect(childConversation).toBeVisible();
185-
await expect(childConversation).not.toContainText(parentRoomMessage);
186-
await expect(parentConversation).toContainText(parentRoomMessage);
179+
let childChat = surface.getByRole("complementary", { name: "Chat" });
180+
await expect(childChatToggle).toBeVisible();
181+
await expect(childChat).toBeHidden();
182+
183+
await childChatToggle.click();
184+
await expect(childChat).toBeVisible();
185+
await expect(childChat).not.toContainText(parentRoomMessage);
186+
await expect(parentChat).toContainText(parentRoomMessage);
187187
let childRoomMessage = `Child room message ${room.slice(0, 8)}`;
188188
let childPlannerMessage = `@chopin Child Planner message ${room.slice(0, 8)}`;
189189
let childPlannerTranscript = childPlannerMessage.replace("@chopin ", "");
190-
let childDraft = childConversation.getByPlaceholder("Use @chopin to ask Chopin");
190+
let childDraft = childChat.getByPlaceholder("Use @chopin to ask Chopin");
191191
await childDraft.fill(childRoomMessage);
192-
await childConversation.getByRole("button", { name: "Send message" }).click();
193-
await expect(childConversation.getByText(childRoomMessage, { exact: true })).toBeVisible();
192+
await childChat.getByRole("button", { name: "Send message" }).click();
193+
await expect(childChat.getByText(childRoomMessage, { exact: true })).toBeVisible();
194194
await expect.poll(chatSends).toContainEqual({
195195
channelId: child.id,
196196
text: childRoomMessage,
197197
to: "room",
198198
});
199199
await childDraft.fill(childPlannerMessage);
200-
await childConversation.getByRole("button", { name: "Send message" }).click();
201-
await expect(childConversation.getByText(childPlannerTranscript, { exact: true })).toBeVisible();
200+
await childChat.getByRole("button", { name: "Send message" }).click();
201+
await expect(childChat.getByText(childPlannerTranscript, { exact: true })).toBeVisible();
202202
await expect.poll(chatSends).toContainEqual({
203203
channelId: child.id,
204204
text: childPlannerMessage,
205205
to: "planner",
206206
});
207-
await expect(parentConversation).not.toContainText(childRoomMessage);
208-
await expect(parentConversation).not.toContainText(childPlannerTranscript);
209-
await childConversation.getByRole("button", {
210-
name: "Hide conversation pane",
207+
await expect(parentChat).not.toContainText(childRoomMessage);
208+
await expect(parentChat).not.toContainText(childPlannerTranscript);
209+
await childChat.getByRole("button", {
210+
name: "Hide chat pane",
211211
exact: true,
212212
}).click();
213-
await expect(childConversation).toBeHidden();
213+
await expect(childChat).toBeHidden();
214214

215215
let childEditor = surface.getByRole("textbox", { name: "editable markdown" });
216216
await childEditor.locator("p").first().selectText();
@@ -235,19 +235,19 @@ test("a child isolates chat and decisions across every parent-owned close path",
235235
await expect.poll(() => parentScroll.evaluate(element => element.scrollTop)).toBe(
236236
parentScrollTop,
237237
);
238-
await expect(parentConversation).toContainText(parentRoomMessage);
238+
await expect(parentChat).toContainText(parentRoomMessage);
239239

240240
await childLink.click();
241241
await expect(surface).toBeVisible();
242-
await expect(childConversationToggle).toBeVisible();
243-
await expect(childConversation).toBeHidden();
244-
await childConversationToggle.click();
245-
await expect(childConversation).not.toContainText(parentRoomMessage);
246-
await expect(parentConversation).toContainText(parentRoomMessage);
247-
await expect(childConversation.getByText(childRoomMessage, { exact: true })).toBeVisible();
248-
await expect(childConversation.getByText(childPlannerTranscript, { exact: true })).toBeVisible();
249-
await childConversation.getByRole("button", {
250-
name: "Hide conversation pane",
242+
await expect(childChatToggle).toBeVisible();
243+
await expect(childChat).toBeHidden();
244+
await childChatToggle.click();
245+
await expect(childChat).not.toContainText(parentRoomMessage);
246+
await expect(parentChat).toContainText(parentRoomMessage);
247+
await expect(childChat.getByText(childRoomMessage, { exact: true })).toBeVisible();
248+
await expect(childChat.getByText(childPlannerTranscript, { exact: true })).toBeVisible();
249+
await childChat.getByRole("button", {
250+
name: "Hide chat pane",
251251
exact: true,
252252
}).click();
253253
await parentHeader.getByRole("button", { name: `Return to Test ${room.slice(0, 8)}` }).click();
@@ -308,17 +308,17 @@ test("an in-app child preserves and restores its mounted parent", async ({ baseU
308308
await join("ana");
309309

310310
let parent = page.locator(`[data-workspace-room="${room}"]`);
311-
let parentConversation = parent.getByRole("complementary", {
312-
name: "Conversation",
311+
let parentChat = parent.getByRole("complementary", {
312+
name: "Chat",
313313
includeHidden: true,
314314
});
315315
await expect(parent.getByRole("button", { name: "Background Work", exact: true })).toHaveCount(
316316
0,
317317
);
318318
let parentScroll = parent.locator("[data-plan-scroll]");
319-
await expect(parent.getByRole("separator", { name: "Resize the conversation" }))
319+
await expect(parent.getByRole("separator", { name: "Resize chat" }))
320320
.toHaveAttribute("aria-valuenow", "384");
321-
await expect(parentConversation).toBeVisible();
321+
await expect(parentChat).toBeVisible();
322322
await page.evaluate(() => localStorage.setItem("chopin:view:document", "decisions"));
323323
await parent.evaluate(element => element.setAttribute("data-mount-token", "preserved"));
324324
await parentScroll.evaluate(element => element.scrollTop = 240);
@@ -336,14 +336,14 @@ test("an in-app child preserves and restores its mounted parent", async ({ baseU
336336
await expect(parent).toHaveAttribute("data-mount-token", "preserved");
337337
await expect(parent.locator(".workspace-frame")).toHaveAttribute("inert", "");
338338
await expect(parent.locator(".workspace-frame")).toHaveAttribute("aria-hidden", "true");
339-
let childConversationToggle = surface.getByRole("button", {
340-
name: "Show conversation pane",
339+
let childChatToggle = surface.getByRole("button", {
340+
name: "Show chat pane",
341341
exact: true,
342342
});
343-
let childConversation = surface.getByRole("complementary", { name: "Conversation" });
344-
await expect(childConversationToggle).toBeVisible();
345-
await expect(childConversation).toBeHidden();
346-
await expect(parentConversation).toBeVisible();
343+
let childChat = surface.getByRole("complementary", { name: "Chat" });
344+
await expect(childChatToggle).toBeVisible();
345+
await expect(childChat).toBeHidden();
346+
await expect(parentChat).toBeVisible();
347347
await expect(surface.getByRole("button", { name: "Decisions", exact: true })).toBeVisible();
348348
await expect(surface.getByRole("button", { name: "Background Work", exact: true })).toHaveCount(
349349
0,
@@ -354,21 +354,21 @@ test("an in-app child preserves and restores its mounted parent", async ({ baseU
354354
await expect(surface.locator(`[data-workspace-room="${child.id}"]`)).toBeVisible();
355355
await expect(surface.locator('[data-document-view="plan"]')).toBeVisible();
356356
await expect(surface.locator('[data-document-view="decisions"]')).toBeHidden();
357-
await childConversationToggle.click();
358-
await expect(childConversation).toBeVisible();
359-
await expect(parentConversation).toBeVisible();
360-
await childConversation.getByRole("button", {
361-
name: "Hide conversation pane",
357+
await childChatToggle.click();
358+
await expect(childChat).toBeVisible();
359+
await expect(parentChat).toBeVisible();
360+
await childChat.getByRole("button", {
361+
name: "Hide chat pane",
362362
exact: true,
363363
}).click();
364-
await expect(childConversation).toBeHidden();
365-
await expect(parentConversation).toBeVisible();
364+
await expect(childChat).toBeHidden();
365+
await expect(parentChat).toBeVisible();
366366

367367
await surface.getByRole("button", { name: "Decisions", exact: true }).click();
368368
await expect(surface.locator('[data-document-view="decisions"]')).toBeVisible();
369369
await expect(parent.locator('[data-document-view="decisions"]')).toBeHidden();
370370
await surface.getByRole("button", { name: "Document", exact: true }).click();
371-
await expect(childConversationToggle).toBeVisible();
371+
await expect(childChatToggle).toBeVisible();
372372

373373
await page.keyboard.press("Escape");
374374
await expect(page).toHaveURL(url =>
@@ -379,13 +379,13 @@ test("an in-app child preserves and restores its mounted parent", async ({ baseU
379379
await expect(surface).toHaveCount(0);
380380
await expect(childLink).toBeFocused();
381381
await expect.poll(() => parentScroll.evaluate(element => element.scrollTop)).toBe(originalScroll);
382-
await expect(parentConversation).toBeVisible();
382+
await expect(parentChat).toBeVisible();
383383

384384
await childLink.click();
385385
await expect(surface).toBeVisible();
386-
await expect(childConversationToggle).toBeVisible();
387-
await expect(childConversation).toBeHidden();
388-
await expect(parentConversation).toBeVisible();
386+
await expect(childChatToggle).toBeVisible();
387+
await expect(childChat).toBeHidden();
388+
await expect(parentChat).toBeVisible();
389389
await page.goBack();
390390
await expect(surface).toHaveCount(0);
391391
await expect(childLink).toBeFocused();
@@ -588,10 +588,10 @@ test("a recovered child id enters the canonical anchored child workspace", async
588588
await expect(parent).toBeVisible();
589589
await expect(surface.locator(`[data-workspace-room="${child.id}"]`)).toBeVisible();
590590
await expect(surface.getByRole("button", {
591-
name: "Show conversation pane",
591+
name: "Show chat pane",
592592
exact: true,
593593
})).toBeVisible();
594-
await expect(surface.getByRole("complementary", { name: "Conversation" })).toBeHidden();
594+
await expect(surface.getByRole("complementary", { name: "Chat" })).toBeHidden();
595595
let close = surface.getByRole("button", { name: `Close ${childTitle}`, exact: true });
596596
await expect(close).toBeVisible();
597597
await expect(
@@ -686,14 +686,14 @@ test("a direct compact child fills the canvas and reduces motion to a crossfade"
686686
let navigation = surface.getByRole("navigation", { name: "Workspace view" });
687687
let destinations = navigation.getByRole("button");
688688
await expect(destinations).toHaveCount(3);
689-
await expect(navigation.getByRole("button", { name: /^Conversation/ })).toBeVisible();
689+
await expect(navigation.getByRole("button", { name: /^Chat/ })).toBeVisible();
690690
await expect(navigation.getByRole("button", { name: "Document", exact: true })).toBeVisible();
691691
await expect(navigation.getByRole("button", { name: /^Decisions/ })).toBeVisible();
692-
await navigation.getByRole("button", { name: /^Conversation/ }).click();
693-
await expect(surface.getByRole("complementary", { name: "Conversation" })).toBeVisible();
692+
await navigation.getByRole("button", { name: /^Chat/ }).click();
693+
await expect(surface.getByRole("complementary", { name: "Chat" })).toBeVisible();
694694
await expect(surface.locator('[data-document-view="plan"]')).toBeHidden();
695695
await navigation.getByRole("button", { name: "Document", exact: true }).click();
696-
await expect(surface.getByRole("complementary", { name: "Conversation" })).toBeHidden();
696+
await expect(surface.getByRole("complementary", { name: "Chat" })).toBeHidden();
697697
await expect(surface.locator('[data-document-view="plan"]')).toBeVisible();
698698
let projects = page.getByRole("button", { name: "Open Projects sidebar" });
699699
await projects.click();

0 commit comments

Comments
 (0)