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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,6 @@ deploy/charts/*/charts/*.tgz
# tracked file matches either pattern.
*buzz-acp-steer-capture*
*buzz-acp-*.ndjson

# TypeScript incremental build state — regenerated by `tsc`, machine-local.
*.tsbuildinfo
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
> **This is Dreamforge**, a fork of [`block/buzz`](https://github.com/block/buzz).
>
> The product ships as Dreamforge and every screen says so. Everything below the
> surface deliberately keeps upstream's names — crates stay `buzz-*`, environment
> variables stay `BUZZ_*`, and on-the-wire tags (`buzz-channel`, `buzz-protect`,
> `buzz-visibility`) and event kinds are untouched.
>
> That split is intentional. Renaming an environment variable would make upstream
> code read one nobody sets — it compiles, runs, and silently takes a default.
> Renaming a wire tag would diverge the protocol with no error at all. Both fail
> quietly, and quiet failure is the thing this fork exists to remove. Renaming
> what people read costs nothing, because no code depends on it.
>
> The product name lives in `desktop/src/shared/constants/brand.ts`.
> Upstream documentation below is unchanged and still refers to Buzz.

<h1 align="center">Buzz 🐝</h1>

<p align="center">
Expand Down
2 changes: 1 addition & 1 deletion desktop/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Buzz",
"productName": "Dreamforge",
"version": "0.5.20",
"identifier": "xyz.block.buzz.app",
"build": {
Expand Down
6 changes: 3 additions & 3 deletions desktop/src/app/RootErrorBoundary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ export class RootErrorBoundary extends Component<
if (error) {
return (
<div className="flex h-screen w-screen flex-col items-center justify-center gap-3 bg-background px-6 text-foreground">
<p className="text-base font-semibold">Buzz failed to start</p>
<p className="text-base font-semibold">Dreamforge failed to start</p>
<p className="max-w-md text-center text-sm text-muted-foreground">
Reload Buzz to try again. If this keeps happening, check that Buzz
can access website data, then contact support.
Reload Dreamforge to try again. If this keeps happening, check that
Dreamforge can access website data, then contact support.
</p>
<button
type="button"
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/app/useCommunityNavigationTransitions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export function useCommunityNavigationTransitions({
if (!fallback) {
if (!markCommunityDiscoveryAfterLeave()) {
throw new Error(
"Membership was removed, but community discovery state could not be saved. Restart Buzz and try again.",
"Membership was removed, but community discovery state could not be saved. Restart Dreamforge and try again.",
);
}
await goHome({ replace: true });
Expand Down
4 changes: 2 additions & 2 deletions desktop/src/features/agents/ui/AgentCardMintDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -429,8 +429,8 @@ export function AgentCardMintDialog({
>
Minting calls the OpenAI API with your key and costs money —
typically well under a dollar per mint, billed by OpenAI. It runs
in the background (takes a few minutes); you can keep using Buzz
while it works.
in the background (takes a few minutes); you can keep using
Dreamforge while it works.
</p>
<FreeSharePathRow
disabled={false}
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/agents/ui/OtherSetupAgentMarker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Cloud } from "lucide-react";

import { cn } from "@/shared/lib/cn";

const OTHER_SETUP_LABEL = "From another Buzz setup";
const OTHER_SETUP_LABEL = "From another Dreamforge setup";

export function OtherSetupAgentMarker({
className,
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/agents/ui/RestartDiffBadge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { cn } from "@/shared/lib/cn";
* banner can import the same constants — the two surfaces must never drift.
*/
export const AUTO_RESTART_ON_BLURB =
"Configuration changed since this agent started. Buzz can restart it automatically after ~3 minutes idle, or stop and respawn it to apply now.";
"Configuration changed since this agent started. Dreamforge can restart it automatically after ~3 minutes idle, or stop and respawn it to apply now.";

export const AUTO_RESTART_OFF_BLURB =
"Configuration changed since this agent started. Automatic restart is off for this agent — stop and respawn it to apply the changes.";
Expand Down
5 changes: 3 additions & 2 deletions desktop/src/features/agents/ui/agentConfigOptions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type {
} from "@/shared/api/types";
import { BUZZ_AGENT_THINKING_EFFORT } from "./buzzAgentConfig";
import type { RuntimeFileConfigSubset } from "@/shared/api/tauri";
import { SHARED_COMPUTE_LABEL } from "@/shared/constants/brand";
// Dialogs import getDefaultPersonaRuntime via this re-export; lib code imports
// directly from lib/resolvePersonaRuntime.
export { getDefaultPersonaRuntime } from "../lib/resolvePersonaRuntime";
Expand Down Expand Up @@ -147,7 +148,7 @@ export const PERSONA_LLM_PROVIDER_OPTIONS: readonly PersonaModelOption[] = [
{ id: "openai", label: "OpenAI" },
{ id: "openai-compat", label: "OpenAI-compatible" },
{ id: "openrouter", label: "OpenRouter" },
{ id: "relay-mesh", label: "Buzz shared compute" },
{ id: "relay-mesh", label: SHARED_COMPUTE_LABEL },
{ id: "databricks", label: "Databricks" },
{ id: "databricks_v2", label: "Databricks v2" },
];
Expand Down Expand Up @@ -314,7 +315,7 @@ export function providerRequiresExplicitModel(
export function providerDisplayLabel(providerId: string) {
const trimmedProvider = providerId.trim();
return trimmedProvider === "relay-mesh"
? "Buzz shared compute"
? SHARED_COMPUTE_LABEL
: trimmedProvider;
}

Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/agents/ui/agentProfileSyncWarning.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ export function showAgentProfileSyncWarning(
) {
if (!profileSyncError) return;
toast.warning(
`${agentName} was saved locally, but relay sync failed: ${profileSyncError}. Remote users may still see the previous name or access policy until Buzz retries the sync.`,
`${agentName} was saved locally, but relay sync failed: ${profileSyncError}. Remote users may still see the previous name or access policy until Dreamforge retries the sync.`,
);
}
18 changes: 9 additions & 9 deletions desktop/src/features/agents/ui/agentSessionToolCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ export function getBuzzToolInfo(title: string): BuzzToolInfo | null {
return {
icon: Workflow,
label: isRead
? "Reads workflow state from Buzz."
: "Updates workflow state in Buzz.",
? "Reads workflow state from Dreamforge."
: "Updates workflow state in Dreamforge.",
tone: isWrite ? "write" : "read",
};
}
Expand All @@ -161,8 +161,8 @@ export function getBuzzToolInfo(title: string): BuzzToolInfo | null {
return {
icon: Hash,
label: isRead
? "Reads channel context from the Buzz relay."
: "Changes channel state in the Buzz relay.",
? "Reads channel context from the Dreamforge relay."
: "Changes channel state in the Dreamforge relay.",
tone: isWrite ? "write" : "read",
};
}
Expand All @@ -174,15 +174,15 @@ export function getBuzzToolInfo(title: string): BuzzToolInfo | null {
return {
icon: Users,
label: isRead
? "Reads Buzz identity or presence data."
: "Updates Buzz identity or membership data.",
? "Reads Dreamforge identity or presence data."
: "Updates Dreamforge identity or membership data.",
tone: isWrite ? "write" : "admin",
};
}
if (name.includes("search") || name === "get_feed") {
return {
icon: Search,
label: "Searches relay-visible Buzz history.",
label: "Searches relay-visible Dreamforge history.",
tone: "read",
};
}
Expand All @@ -193,14 +193,14 @@ export function getBuzzToolInfo(title: string): BuzzToolInfo | null {
) {
return {
icon: Send,
label: "Publishes relay-visible Buzz activity.",
label: "Publishes relay-visible Dreamforge activity.",
tone: "write",
};
}

return {
icon: MessageSquare,
label: isRead ? "Reads from Buzz." : "Writes to Buzz.",
label: isRead ? "Reads from Dreamforge." : "Writes to Dreamforge.",
tone: isWrite ? "write" : "read",
};
}
Expand Down
6 changes: 3 additions & 3 deletions desktop/src/features/agents/ui/agentSessionToolClassifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ const BUZZ_CLI_READ_VERBS = new Set([

const TOOL_CLASS_LABELS: Record<AgentActivityRenderClass, string> = {
message: "Message",
"relay-op": "Buzz relay op",
"relay-op": "Dreamforge relay op",
"file-edit": "File edit",
"file-read": "File read",
"skill-read": "Skill read",
Expand Down Expand Up @@ -434,13 +434,13 @@ function buzzOperationObject(operation: string) {
if (isBuzzMessageSend(operation)) return "message";
if (operation.includes(".")) {
const [group] = operation.split(".");
return group ? group.replace(/[-_]+/g, " ") : "Buzz";
return group ? group.replace(/[-_]+/g, " ") : "Dreamforge";
}
const object = operation.replace(
/^(add|approve|archive|create|delete|edit|get|hide|join|leave|list|open|publish|remove|search|send|set|trigger|unarchive|update|vote)_/,
"",
);
return object ? object.replace(/[-_]+/g, " ") : "Buzz";
return object ? object.replace(/[-_]+/g, " ") : "Dreamforge";
}

function buzzCliTone(group: string, verb: string): AgentActivityTone {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ function sameKindLabel(item: TranscriptItem, count: number): string {
return `Read ${count} skill${count === 1 ? "" : "s"}`;
}
if (renderClass === "shell") return `Ran ${count} commands`;
if (renderClass === "relay-op") return `Ran ${count} Buzz relay ops`;
if (renderClass === "relay-op") return `Ran ${count} Dreamforge relay ops`;
return `${label} ×${count}`;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export function parsePromptText(text: string): {
return {
sections,
userText: eventContent,
userTitle: eventKind ? titleCase(eventKind) : "Buzz event",
userTitle: eventKind ? titleCase(eventKind) : "Dreamforge event",
userPubkey: eventAuthorPubkey,
userEventId: eventId,
};
Expand Down Expand Up @@ -469,9 +469,11 @@ function semanticTurnTitle(
return `${label} (${attributes.included} of ${attributes.total} messages${truncated})`;
}
case "buzz-event":
return attributes.type ? `Buzz event: ${attributes.type}` : "Buzz event";
return attributes.type
? `Dreamforge event: ${attributes.type}`
: "Dreamforge event";
case "buzz-events":
return `Buzz events — ${attributes.count} events`;
return `Dreamforge events — ${attributes.count} events`;
case "what-you-were-working-on":
return "What you were working on";
case "new-message-arrived-while-you-were-working":
Expand Down
8 changes: 4 additions & 4 deletions desktop/src/features/agents/ui/personaModelDiscoveryStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export function formatModelDiscoveryErrorStatus(
if (message.includes("waiting for the current member roster")) {
return {
message:
"Buzz is waiting for the relay's member roster. Try again shortly; if this persists, check the relay's membership configuration.",
"Dreamforge is waiting for the relay's member roster. Try again shortly; if this persists, check the relay's membership configuration.",
tone: "warning",
};
}
Expand All @@ -68,22 +68,22 @@ export function formatModelDiscoveryErrorStatus(
if (message.includes("shared compute is not available in this build")) {
return {
message:
"This version of Buzz cannot use shared compute. Update Buzz or choose another provider.",
"This version of Dreamforge cannot use shared compute. Update Dreamforge or choose another provider.",
tone: "warning",
};
}

if (message.includes("shared compute status is malformed")) {
return {
message:
"Buzz received an invalid shared compute status. Check the member machine, then try again.",
"Dreamforge received an invalid shared compute status. Check the member machine, then try again.",
tone: "warning",
};
}

return {
message:
"Buzz couldn't check shared compute through the relay. Check your relay connection and try again.",
"Dreamforge couldn't check shared compute through the relay. Check your relay connection and try again.",
tone: "warning",
};
}
Expand Down
7 changes: 5 additions & 2 deletions desktop/src/features/channels/ui/ChannelScreenHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
toggleTerminalPanel,
useTerminalPanel,
} from "@/features/terminal/terminalPanelStore";
import { TERMINAL_LABEL } from "@/shared/constants/brand";

const DM_HEADER_AVATAR_SIZE = 32;
const DM_HEADER_AVATAR_STATUS_GEOMETRY = scaleProfileAvatarStatusGeometry(
Expand Down Expand Up @@ -85,11 +86,13 @@ export function ChannelScreenHeader({
const terminalButton = activeChannel ? (
<Button
aria-label={
terminalPanel.mode === "closed" ? "Open Buzz Term" : "Hide Buzz Term"
terminalPanel.mode === "closed"
? `Open ${TERMINAL_LABEL}`
: `Hide ${TERMINAL_LABEL}`
}
onClick={toggleTerminalPanel}
size="icon"
title="Buzz Term (⌘J)"
title={`${TERMINAL_LABEL} (⌘J)`}
type="button"
variant={terminalPanel.mode === "closed" ? "outline" : "secondary"}
>
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/communities/communityStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ export function deriveCommunityName(relayUrl: string): string {
const parts = host.split(".");
// Detect staging environments (e.g. buzz-oss.stage.blox.sqprod.co)
if (parts.some((p) => p === "stage" || p === "staging")) {
return "Buzz (staging)";
return "Dreamforge (staging)";
}
// Use the first subdomain segment or the domain itself
if (parts.length >= 2) {
Expand Down
13 changes: 7 additions & 6 deletions desktop/src/features/communities/hostedCommunityApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,19 @@ export function hostedCommunityErrorMessage(
fallback: string,
) {
const messages: Record<string, string> = {
missing_mapping: "Connect your Buzz identity before creating a community.",
missing_mapping:
"Connect your Dreamforge identity before creating a community.",
invalid_name: "Use lowercase letters, numbers, and hyphens.",
taken: "That Buzz address is already taken.",
taken: "That Dreamforge address is already taken.",
limit_reached: `You've reached the limit of ${HOSTED_COMMUNITY_LIMIT} hosted communities.`,
relay_unavailable: "Community provisioning is temporarily unavailable.",
identity_already_bound:
"This Builderlab account is connected to another Buzz identity.",
"This Builderlab account is connected to another Dreamforge identity.",
pubkey_already_bound:
"This Buzz identity is connected to another Builderlab account.",
"This Dreamforge identity is connected to another Builderlab account.",
not_owner: "Only the community owner can do that.",
transferee_not_registered:
"That person needs a connected Buzz identity before you can transfer ownership to them.",
"That person needs a connected Dreamforge identity before you can transfer ownership to them.",
};
const message = messages[error?.code ?? ""] ?? error?.message ?? fallback;
return correlationId
Expand Down Expand Up @@ -120,7 +121,7 @@ export async function loadHostedCommunityAccount(): Promise<HostedCommunityAccou
hostedCommunityErrorMessage(
identityResponse.error,
identityResponse.correlation_id,
"Could not load the connected Buzz identity.",
"Could not load the connected Dreamforge identity.",
),
);
}
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/communities/ui/AddCommunityDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ export function AddCommunityDialog({
Create a new community
</span>
<span className="mt-0.5 block text-xs leading-5 text-muted-foreground">
Claim a Buzz address for your team.
Claim a Dreamforge address for your team.
</span>
</span>
<ChevronRight className="h-4 w-4 shrink-0 text-muted-foreground/60" />
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/features/communities/ui/CommunitySwitcher.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ export function CommunitySwitcher({
if (result?.status === "already-absent") {
toast("Community removed", {
description:
"You were no longer a member, so Buzz removed the community from this device.",
"You were no longer a member, so Dreamforge removed the community from this device.",
});
}
} catch (error) {
Expand Down
Loading