Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 15 additions & 113 deletions bun.lock

Large diffs are not rendered by default.

3 changes: 0 additions & 3 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
"pages": [
"workspaces",
"workspaces/fork",
"workspaces/sharing",
"workspaces/muxignore",
{
"group": "Compaction",
Expand Down Expand Up @@ -166,8 +165,6 @@
{ "source": "/guides/compaction", "destination": "/workspaces/compaction" },
{ "source": "/guides/compaction/manual", "destination": "/workspaces/compaction/manual" },
{ "source": "/guides/compaction/automatic", "destination": "/workspaces/compaction/automatic" },
{ "source": "/sharing", "destination": "/workspaces/sharing" },
{ "source": "/guides/sharing", "destination": "/workspaces/sharing" },
{ "source": "/prompting-tips", "destination": "/agents/prompting-tips" },
{ "source": "/prompting-tips.html", "destination": "/agents/prompting-tips" },
{ "source": "/guides/prompting-tips", "destination": "/agents/prompting-tips" },
Expand Down
Binary file removed docs/img/message-sharing.webp
Binary file not shown.
6 changes: 0 additions & 6 deletions docs/reference/telemetry.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,6 @@ MUX_DISABLE_TELEMETRY=1 mux

This disables telemetry collection at the backend level.

<Note>
Disabling telemetry also hides the **Share** button on assistant messages. Link sharing uses
[mux.md](https://mux.md), a separate Mux service, and is gated on telemetry enablement to respect
your privacy preferences.
</Note>

## Source code

- **Payload definitions**: [`src/common/telemetry/payload.ts`](https://github.com/coder/mux/blob/main/src/common/telemetry/payload.ts)
Expand Down
100 changes: 0 additions & 100 deletions docs/workspaces/sharing.mdx

This file was deleted.

2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@

outputHashMode = "recursive";
# Marker used by scripts/update_flake_hash.sh to update this hash in place.
outputHash = "sha256-BlvooN6emK0yOaX6flxb7FtQm684NpF1P4e+TAaRQBs="; # mux-offline-cache-hash
outputHash = "sha256-aegNSZ3QGLP3GPdaRB4Baf22Rhxs4EqUQJyMBuryjTo="; # mux-offline-cache-hash
};

configurePhase = ''
Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@
"@ai-sdk/openai-compatible": "^2.0.46",
"@ai-sdk/xai": "^3.0.88",
"@aws-sdk/credential-providers": "^3.940.0",
"@coder/mux-md-client": "0.1.0-main.32",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
Expand Down Expand Up @@ -123,8 +122,8 @@
"quickjs-emscripten-core": "^0.31.0",
"react": "18.3.1",
"react-colorful": "^5.6.1",
"react-resizable-panels": "^3.0.6",
"react-dom": "18.3.1",
"react-resizable-panels": "^3.0.6",
"react-router-dom": "^7.11.0",
"recharts": "^2.15.3",
"rehype-harden": "^1.1.5",
Expand Down
21 changes: 9 additions & 12 deletions src/browser/components/AgentListItem/AgentListItem.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { useEffect } from "react";
import { AgentListItem } from "@/browser/components/AgentListItem/AgentListItem";
import { APIProvider } from "@/browser/contexts/API";
import { ProjectProvider } from "@/browser/contexts/ProjectContext";
import { TelemetryEnabledProvider } from "@/browser/contexts/TelemetryEnabledContext";
import { TitleEditProvider } from "@/browser/contexts/WorkspaceTitleEditContext";
import { DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";
Expand Down Expand Up @@ -183,17 +182,15 @@ function StoryScaffold(props: {
return (
<APIProvider client={api}>
<ProjectProvider>
<TelemetryEnabledProvider>
<TitleEditProvider onUpdateTitle={() => Promise.resolve({ success: true })}>
<TooltipProvider>
<DndProvider backend={HTML5Backend}>
<div className="border-border bg-surface-primary w-[360px] rounded-md border p-2">
<div className={props.rowContainerClassName ?? "space-y-1"}>{props.children}</div>
</div>
</DndProvider>
</TooltipProvider>
</TitleEditProvider>
</TelemetryEnabledProvider>
<TitleEditProvider onUpdateTitle={() => Promise.resolve({ success: true })}>
<TooltipProvider>
<DndProvider backend={HTML5Backend}>
<div className="border-border bg-surface-primary w-[360px] rounded-md border p-2">
<div className={props.rowContainerClassName ?? "space-y-1"}>{props.children}</div>
</div>
</DndProvider>
</TooltipProvider>
</TitleEditProvider>
</ProjectProvider>
</APIProvider>
);
Expand Down
8 changes: 0 additions & 8 deletions src/browser/components/AgentListItem/AgentListItem.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import type * as ReactDndModuleType from "react-dnd";
import type * as ReactDndHtml5BackendModuleType from "react-dnd-html5-backend";
import type * as APIModuleType from "@/browser/contexts/API";
import type * as ProjectContextModuleType from "@/browser/contexts/ProjectContext";
import type * as TelemetryEnabledContextModuleType from "@/browser/contexts/TelemetryEnabledContext";
import type * as WorkspaceTitleEditContextModuleType from "@/browser/contexts/WorkspaceTitleEditContext";
import type * as ContextMenuPositionModuleType from "@/browser/hooks/useContextMenuPosition";
import type * as ExperimentsModuleType from "@/browser/hooks/useExperiments";
Expand Down Expand Up @@ -136,8 +135,6 @@ function installAgentListItemTestDoubles() {
const actualApi = require("@/browser/contexts/API?real=1") as typeof APIModuleType;
const actualProjectContext =
require("@/browser/contexts/ProjectContext?real=1") as typeof ProjectContextModuleType;
const actualTelemetryEnabledContext =
require("@/browser/contexts/TelemetryEnabledContext?real=1") as typeof TelemetryEnabledContextModuleType;
const actualWorkspaceTitleEditContext =
require("@/browser/contexts/WorkspaceTitleEditContext?real=1") as typeof WorkspaceTitleEditContextModuleType;
const actualContextMenuPosition =
Expand Down Expand Up @@ -183,11 +180,6 @@ function installAgentListItemTestDoubles() {
}),
}));

void mock.module("@/browser/contexts/TelemetryEnabledContext", () => ({
...actualTelemetryEnabledContext,
useLinkSharingEnabled: () => false,
}));

void mock.module("@/browser/contexts/WorkspaceTitleEditContext", () => ({
...actualWorkspaceTitleEditContext,
useTitleEdit: () => ({
Expand Down
21 changes: 0 additions & 21 deletions src/browser/components/AgentListItem/AgentListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,7 @@ import {
WORKSPACE_DRAG_TYPE,
type WorkspaceDragItem,
} from "../WorkspaceSectionDropZone/WorkspaceSectionDropZone";
import { useLinkSharingEnabled } from "@/browser/contexts/TelemetryEnabledContext";
import { formatKeybind, KEYBINDS } from "@/browser/utils/ui/keybinds";
import { ShareTranscriptDialog } from "../ShareTranscriptDialog/ShareTranscriptDialog";
import { WorkspaceHeartbeatModal } from "../WorkspaceHeartbeatModal";
import { AutomationModal } from "../AutomationModal";
import { WorkspaceActionsMenuContent } from "../WorkspaceActionsMenuContent/WorkspaceActionsMenuContent";
Expand Down Expand Up @@ -510,8 +508,6 @@ function RegularAgentListItemInner(props: AgentListItemProps) {
const automationScheduleProjectPath =
projectWorkflowScheduleMatch?.projectPath ?? automationProjectPath;

const linkSharingEnabled = useLinkSharingEnabled();
const [shareTranscriptOpen, setShareTranscriptOpen] = useState(false);
const [automationModalOpen, setAutomationModalOpen] = useState(false);
const [heartbeatModalOpen, setHeartbeatModalOpen] = useState(false);
const overflowMenuButtonRef = useRef<HTMLButtonElement | null>(null);
Expand Down Expand Up @@ -572,9 +568,6 @@ function RegularAgentListItemInner(props: AgentListItemProps) {
node.focus();
}, []);

// SHARE_TRANSCRIPT keybind is handled in WorkspaceMenuBar (always mounted),
// so it works even when the sidebar is collapsed and list items are unmounted.

const startEditing = () => {
if (requestEdit(workspaceId, workspaceTitle)) {
setEditingTitle(workspaceTitle);
Expand Down Expand Up @@ -971,12 +964,10 @@ function RegularAgentListItemInner(props: AgentListItemProps) {
onForkChat={(anchorEl) => {
void onForkWorkspace(workspaceId, anchorEl);
}}
onShareTranscript={() => setShareTranscriptOpen(true)}
onArchiveChat={(anchorEl) => {
void onArchiveWorkspace(workspaceId, anchorEl);
}}
onCloseMenu={() => ctxMenu.close()}
linkSharingEnabled={linkSharingEnabled === true}
/>
{!isSelected && !isUnread && (
<PositionedMenuItem
Expand Down Expand Up @@ -1042,18 +1033,6 @@ function RegularAgentListItemInner(props: AgentListItemProps) {
onOpenChange={setHeartbeatModalOpen}
/>
)}
{/* Share transcript dialog – rendered as a sibling to the overflow menu.
Triggered by the menu item above or the Ctrl+Shift+L keybind.
Uses a Dialog (modal) so it stays visible regardless of popover dismissal. */}
{linkSharingEnabled === true && (
<ShareTranscriptDialog
workspaceId={workspaceId}
workspaceName={metadata.name}
workspaceTitle={displayTitle}
open={shareTranscriptOpen}
onOpenChange={setShareTranscriptOpen}
/>
)}
</ActionButtonWrapper>
)
)}
Expand Down
9 changes: 3 additions & 6 deletions src/browser/components/AppLoader/AppLoader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { PolicyBlockedScreen } from "@/browser/components/PolicyBlockedScreen/Po
import { APIProvider, useAPI, type APIClient } from "@/browser/contexts/API";
import { WorkspaceProvider, useWorkspaceContext } from "../../contexts/WorkspaceContext";
import { RouterProvider } from "../../contexts/RouterContext";
import { TelemetryEnabledProvider } from "../../contexts/TelemetryEnabledContext";
import {
hydrateUserPreferencesLocalCache,
UserPreferencesProvider,
Expand Down Expand Up @@ -269,11 +268,9 @@ function AppLoaderInner() {
transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3, ease: "easeOut" }}
className="bg-surface-primary h-full"
>
<TelemetryEnabledProvider>
<TerminalRouterProvider>
<App />
</TerminalRouterProvider>
</TelemetryEnabledProvider>
<TerminalRouterProvider>
<App />
</TerminalRouterProvider>
</motion.div>
)}
</AnimatePresence>
Expand Down
17 changes: 7 additions & 10 deletions src/browser/components/LeftSidebar/LeftSidebar.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import { SettingsProvider } from "@/browser/contexts/SettingsContext";
import { ConfirmDialogProvider } from "@/browser/contexts/ConfirmDialogContext";
import { ExperimentsProvider } from "@/browser/contexts/ExperimentsContext";
import { AboutDialogProvider } from "@/browser/contexts/AboutDialogContext";
import { TelemetryEnabledProvider } from "@/browser/contexts/TelemetryEnabledContext";
import { TooltipProvider } from "@/browser/components/Tooltip/Tooltip";
import { useWorkspaceRecency } from "@/browser/stores/WorkspaceStore";
import { buildSortedWorkspacesByProject } from "@/browser/utils/ui/workspaceFiltering";
Expand Down Expand Up @@ -161,15 +160,13 @@ function LeftSidebarStoryShell(props: LeftSidebarStoryShellProps) {
<TooltipProvider delayDuration={200}>
<SettingsProvider>
<AboutDialogProvider>
<TelemetryEnabledProvider>
<ConfirmDialogProvider>
<ProjectProvider>
<WorkspaceProvider>
<LeftSidebarStoryScene leftSidebarProps={props.leftSidebarProps} />
</WorkspaceProvider>
</ProjectProvider>
</ConfirmDialogProvider>
</TelemetryEnabledProvider>
<ConfirmDialogProvider>
<ProjectProvider>
<WorkspaceProvider>
<LeftSidebarStoryScene leftSidebarProps={props.leftSidebarProps} />
</WorkspaceProvider>
</ProjectProvider>
</ConfirmDialogProvider>
</AboutDialogProvider>
</SettingsProvider>
</TooltipProvider>
Expand Down
2 changes: 0 additions & 2 deletions src/browser/components/ProjectSidebar/ProjectSidebar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import type { AgentRowRenderMeta } from "@/browser/utils/ui/workspaceFiltering";
import type { FrontendWorkspaceMetadata } from "@/common/types/workspace";
import * as DesktopTitlebarModule from "@/browser/hooks/useDesktopTitlebar";
import * as ThemeContextModule from "@/browser/contexts/ThemeContext";
import * as TelemetryEnabledContextModule from "@/browser/contexts/TelemetryEnabledContext";
import * as APIModule from "@/browser/contexts/API";
import * as ConfirmDialogContextModule from "@/browser/contexts/ConfirmDialogContext";
import * as ProjectContextModule from "@/browser/contexts/ProjectContext";
Expand Down Expand Up @@ -456,7 +455,6 @@ function installProjectSidebarTestDoubles() {
)) as typeof ReactColorfulModule.HexColorPicker);

spyOn(DesktopTitlebarModule, "isDesktopMode").mockImplementation(() => false);
spyOn(TelemetryEnabledContextModule, "useLinkSharingEnabled").mockImplementation(() => false);
spyOn(ThemeContextModule, "useTheme").mockImplementation(() => ({
theme: "light",
themePreference: "light",
Expand Down
Loading
Loading