Update the rebranding and fix issues

This commit is contained in:
Kunthawat Greethong
2025-12-22 10:14:05 +07:00
parent 29248688f3
commit 68189db3b3
917 changed files with 2371 additions and 138265 deletions

View File

@@ -125,7 +125,7 @@ export function AppUpgrades({ appId }: { appId: number | null }) {
onClick={(e) => {
e.stopPropagation();
IpcClient.getInstance().openExternalUrl(
upgrade.manualUpgradeUrl ?? "https://moreminimore.com/docs",
upgrade.manualUpgradeUrl ?? "https://MoreMinimore.com/docs",
);
}}
className="underline font-medium hover:dark:text-red-200"

View File

@@ -136,7 +136,7 @@ export function CapacitorControls({ appId }: CapacitorControlsProps) {
onClick={() => {
// TODO: Add actual help link
IpcClient.getInstance().openExternalUrl(
"https://moreminimore.com/docs/guides/mobile-app#troubleshooting",
"https://MoreMinimore.com/docs/guides/mobile-app#troubleshooting",
);
}}
className="text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 flex items-center gap-1"

View File

@@ -59,7 +59,7 @@ ${debugInfo.logs.slice(-3_500) || "No logs available"}
const encodedTitle = encodeURIComponent(
"[bug] Error in MoreMinimore application",
);
const githubIssueUrl = `https://github.com/dyad-sh/dyad/issues/new?title=${encodedTitle}&labels=bug,filed-from-app,client-error&body=${encodedBody}`;
const githubIssueUrl = `https://github.com/kunthawat/moreminimore-vibe/issues/new?title=${encodedTitle}&labels=bug,filed-from-app,client-error&body=${encodedBody}`;
// Open the pre-filled GitHub issue page
await IpcClient.getInstance().openExternalUrl(githubIssueUrl);
@@ -67,7 +67,7 @@ ${debugInfo.logs.slice(-3_500) || "No logs available"}
console.error("Failed to prepare bug report:", err);
// Fallback to opening the regular GitHub issue page
IpcClient.getInstance().openExternalUrl(
"https://github.com/dyad-sh/dyad/issues/new",
"https://github.com/kunthawat/moreminimore-vibe/issues/new",
);
} finally {
setIsLoading(false);

View File

@@ -204,7 +204,7 @@ function ConnectedGitHubConnector({
onClick={(e) => {
e.preventDefault();
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/docs/integrations/github#troubleshooting",
"https://www.MoreMinimore.com/docs/integrations/github#troubleshooting",
);
}}
className="cursor-pointer text-blue-600 hover:underline dark:text-blue-400"

View File

@@ -121,7 +121,7 @@ ${debugInfo.logs.slice(-3_500) || "No logs available"}
if (isMoreMinimoreProUser) {
labels.push("pro");
}
const githubIssueUrl = `https://github.com/dyad-sh/dyad/issues/new?title=${encodedTitle}&labels=${labels}&body=${encodedBody}`;
const githubIssueUrl = `https://github.com/kunthawat/moreminimore-vibe/issues/new?title=${encodedTitle}&labels=${labels}&body=${encodedBody}`;
// Open the pre-filled GitHub issue page
IpcClient.getInstance().openExternalUrl(githubIssueUrl);
@@ -129,7 +129,7 @@ ${debugInfo.logs.slice(-3_500) || "No logs available"}
console.error("Failed to prepare bug report:", error);
// Fallback to opening the regular GitHub issue page
IpcClient.getInstance().openExternalUrl(
"https://github.com/dyad-sh/dyad/issues/new",
"https://github.com/kunthawat/moreminimore-vibe/issues/new",
);
} finally {
setIsLoading(false);
@@ -246,7 +246,7 @@ Pro User ID: ${userBudget?.redactedUserId || "n/a"}
if (isMoreMinimoreProUser) {
labels.push("pro");
}
const githubIssueUrl = `https://github.com/dyad-sh/dyad/issues/new?title=${encodedTitle}&labels=${labels}&body=${encodedBody}`;
const githubIssueUrl = `https://github.com/kunthawat/moreminimore-vibe/issues/new?title=${encodedTitle}&labels=${labels}&body=${encodedBody}`;
IpcClient.getInstance().openExternalUrl(githubIssueUrl);
handleClose();
@@ -390,7 +390,7 @@ Pro User ID: ${userBudget?.redactedUserId || "n/a"}
<Dialog open={isOpen} onOpenChange={handleClose}>
<DialogContent>
<DialogHeader>
<DialogTitle>Need help with MoreMinimore?</DialogTitle>
<DialogTitle>Need help with Moreminimore?</DialogTitle>
</DialogHeader>
<DialogDescription className="">
If you need help or want to report an issue, here are some options:
@@ -405,11 +405,11 @@ Pro User ID: ${userBudget?.redactedUserId || "n/a"}
}}
className="w-full py-6 border-primary/50 shadow-sm shadow-primary/10 transition-all hover:shadow-md hover:shadow-primary/15"
>
<SparklesIcon className="mr-2 h-5 w-5" /> Chat with MoreMinimore help
<SparklesIcon className="mr-2 h-5 w-5" /> Chat with Moreminimore help
bot (Pro)
</Button>
<p className="text-sm text-muted-foreground px-2">
Opens an in-app help chat assistant that searches through MoreMinimore's
Opens an in-app help chat assistant that searches through Moreminimore's
docs.
</p>
</div>
@@ -419,7 +419,7 @@ Pro User ID: ${userBudget?.redactedUserId || "n/a"}
variant="outline"
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/docs",
"https://www.MoreMinimore.com/docs",
);
}}
className="w-full py-6 bg-(--background-lightest)"

View File

@@ -43,7 +43,7 @@ export const PortalMigrate = ({ appId }: PortalMigrateProps) => {
const openDocs = () => {
const ipcClient = IpcClient.getInstance();
ipcClient.openExternalUrl(
"https://www.moreminimore.com/docs/templates/portal#create-a-database-migration",
"https://www.MoreMinimore.com/docs/templates/portal#create-a-database-migration",
);
};

View File

@@ -85,7 +85,7 @@ export function AiAccessBanner() {
className="w-full py-2 sm:py-2.5 md:py-3 rounded-lg bg-gradient-to-br from-white via-indigo-50 to-sky-100 dark:from-indigo-700 dark:via-indigo-700 dark:to-indigo-900 flex items-center justify-center relative overflow-hidden ring-1 ring-inset ring-black/5 dark:ring-white/10 shadow-sm cursor-pointer transition-all duration-200 hover:shadow-md hover:-translate-y-[1px]"
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-ai-access",
"https://www.MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-ai-access",
);
}}
>
@@ -151,7 +151,7 @@ export function SmartContextBanner() {
className="w-full py-2 sm:py-2.5 md:py-3 rounded-lg bg-gradient-to-br from-emerald-50 via-emerald-100 to-emerald-200 dark:from-emerald-700 dark:via-emerald-700 dark:to-emerald-900 flex items-center justify-center relative overflow-hidden ring-1 ring-inset ring-emerald-900/10 dark:ring-white/10 shadow-sm cursor-pointer transition-all duration-200 hover:shadow-md hover:-translate-y-[1px]"
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-smart-context",
"https://www.MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-smart-context",
);
}}
>
@@ -192,7 +192,7 @@ export function TurboBanner() {
className="w-full py-2 sm:py-2.5 md:py-3 rounded-lg bg-gradient-to-br from-rose-50 via-rose-100 to-rose-200 dark:from-rose-800 dark:via-fuchsia-800 dark:to-rose-800 flex items-center justify-center relative overflow-hidden ring-1 ring-inset ring-rose-900/10 dark:ring-white/5 shadow-sm cursor-pointer transition-all duration-200 hover:shadow-md hover:-translate-y-[1px]"
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-turbo",
"https://www.MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=in-app-banner-turbo",
);
}}
>

View File

@@ -94,7 +94,7 @@ export function ProModeSelector() {
className="inline-flex items-center justify-center gap-2 rounded-md border border-primary/30 bg-primary/10 px-3 py-2 text-sm font-medium text-primary shadow-sm transition-colors hover:bg-primary/20 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring cursor-pointer"
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://moreminimore.com/pro#ai",
"https://MoreMinimore.com/pro#ai",
);
}}
>

View File

@@ -27,7 +27,7 @@ export function ReleaseChannelSelector() {
action: {
label: "Download Stable",
onClick: () => {
IpcClient.getInstance().openExternalUrl("https://moreminimore.com/download");
IpcClient.getInstance().openExternalUrl("https://MoreMinimore.com/download");
},
},
});

View File

@@ -30,7 +30,7 @@ import { useLanguageModelProviders } from "@/hooks/useLanguageModelProviders";
import { useScrollAndNavigateTo } from "@/hooks/useScrollAndNavigateTo";
// @ts-ignore
import logo from "../../assets/logo.svg";
// // import { OnboardingBanner } from "./home/OnboardingBanner";
// // // // // import { OnboardingBanner } from "./home/OnboardingBanner";
import { showError } from "@/lib/toast";
import { useSettings } from "@/hooks/useSettings";
@@ -174,7 +174,7 @@ export function SetupBanner() {
<p className="text-xl font-medium text-zinc-700 dark:text-zinc-300 p-4">
Setup MoreMinimore
</p>
{/* {/* <OnboardingBanner
{/* {/* {/* {/* {/* <OnboardingBanner
isVisible={isOnboardingVisible}
setIsVisible={setIsOnboardingVisible}
/> */}
@@ -374,7 +374,7 @@ function NodeJsHelpCallout() {
<a
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/docs/help/nodejs",
"https://www.MoreMinimore.com/docs/help/nodejs",
);
}}
className="text-blue-600 dark:text-blue-400 hover:underline font-medium"

View File

@@ -33,7 +33,7 @@ export function PrivacyBanner() {
<a
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://moreminimore.com/docs/policies/privacy-policy",
"https://MoreMinimore.com/docs/policies/privacy-policy",
);
}}
className="cursor-pointer text-sm text-blue-600 dark:text-blue-400 hover:underline"

View File

@@ -23,7 +23,7 @@ export function ChatErrorBox({
{error}
<span className="ml-1">
<ExternalLink
href="https://moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=free-quota-error"
href="https://MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=free-quota-error"
variant="primary"
>
Access with MoreMinimore Pro
@@ -51,13 +51,13 @@ export function ChatErrorBox({
{error}
<div className="mt-2 space-y-2 space-x-2">
<ExternalLink
href="https://moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=rate-limit-error"
href="https://MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=rate-limit-error"
variant="primary"
>
Upgrade to MoreMinimore Pro
</ExternalLink>
<ExternalLink href="https://moreminimore.com/docs/help/ai-rate-limit">
<ExternalLink href="https://MoreMinimore.com/docs/help/ai-rate-limit">
Troubleshooting guide
</ExternalLink>
</div>
@@ -71,7 +71,7 @@ export function ChatErrorBox({
<span>
Looks like you don't have a valid MoreMinimore Pro key.{" "}
<ExternalLink
href="https://moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=invalid-pro-key-error"
href="https://MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=invalid-pro-key-error"
variant="primary"
>
Upgrade to MoreMinimore Pro
@@ -101,7 +101,7 @@ export function ChatErrorBox({
//
// We are matching "Fallbacks=[{" and not just "Fallbacks=" because the fallback
// model itself can error and we want to include the fallback model error in the error message.
// Example: https://github.com/dyad-sh/dyad/issues/1849#issuecomment-3590685911
// Example: https://github.com/kunthawat/moreminimore-vibe/issues/1849#issuecomment-3590685911
const fallbackPrefix = "Fallbacks=[{";
if (error.includes(fallbackPrefix)) {
error = error.split(fallbackPrefix)[0];
@@ -114,13 +114,13 @@ export function ChatErrorBox({
error.includes(AI_STREAMING_ERROR_MESSAGE_PREFIX) &&
!error.includes("TypeError: terminated") && (
<ExternalLink
href="https://moreminimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=general-error"
href="https://MoreMinimore.com/pro?utm_source=dyad-app&utm_medium=app&utm_campaign=general-error"
variant="primary"
>
Upgrade to MoreMinimore Pro
</ExternalLink>
)}
<ExternalLink href="https://www.moreminimore.com/docs/faq">
<ExternalLink href="https://www.MoreMinimore.com/docs/faq">
Read docs
</ExternalLink>
</div>

View File

@@ -356,7 +356,7 @@ export function ChatInput({ chatId }: { chatId?: number }) {
<button
onClick={() => {
IpcClient.getInstance().openExternalUrl(
"https://moreminimore.com/pro",
"https://MoreMinimore.com/pro",
);
}}
className="flex items-center gap-2 text-sm text-muted-foreground hover:text-primary transition-colors cursor-pointer"

View File

@@ -18,7 +18,7 @@ export const AIThink: React.FC<AIThinkProps> = ({ children, node }) => {
const tokenSavingsMatch =
typeof children === "string"
? children.match(
/^dyad-token-savings\?original-tokens=([0-9.]+)&smart-context-tokens=([0-9.]+)$/,
/^MoreMinimore-token-savings\?original-tokens=([0-9.]+)&smart-context-tokens=([0-9.]+)$/,
)
: null;

View File

@@ -18,7 +18,7 @@ export const MoreMinimoreThink: React.FC<AIThinkProps> = ({ children, node }) =>
const tokenSavingsMatch =
typeof children === "string"
? children.match(
/^dyad-token-savings\?original-tokens=([0-9.]+)&smart-context-tokens=([0-9.]+)$/,
/^MoreMinimore-token-savings\?original-tokens=([0-9.]+)&smart-context-tokens=([0-9.]+)$/,
)
: null;

View File

@@ -56,7 +56,7 @@ export function Message({ spans }: MessageConfig) {
export const TURBO_EDITS_PROMO_MESSAGE: MessageConfig = {
spans: [
{ type: "text", content: "Tired of waiting on AI?" },
{ type: "link", content: " Get MoreMinimore Pro", url: "https://moreminimore.com/pro#ai" },
{ type: "link", content: " Get MoreMinimore Pro", url: "https://MoreMinimore.com/pro#ai" },
{ type: "text", content: " for faster edits with Turbo Edits." },
],
};
@@ -67,7 +67,7 @@ export const SMART_CONTEXT_PROMO_MESSAGE: MessageConfig = {
{
type: "link",
content: "MoreMinimore Pro's Smart Context",
url: "https://moreminimore.com/pro#ai",
url: "https://MoreMinimore.com/pro#ai",
},
],
};
@@ -138,12 +138,12 @@ export const DEBUGGING_TIPS_TIP: MessageConfig = {
{
type: "link",
content: "debugging tips",
url: "https://www.moreminimore.com/docs/guides/debugging",
url: "https://www.MoreMinimore.com/docs/guides/debugging",
},
],
};
// Advanced tip: Customize your AI rules https://www.moreminimore.com/docs/guides/ai-rules
// Advanced tip: Customize your AI rules https://www.MoreMinimore.com/docs/guides/ai-rules
export const AI_RULES_TIP: MessageConfig = {
spans: [
{
@@ -153,7 +153,7 @@ export const AI_RULES_TIP: MessageConfig = {
{
type: "link",
content: "AI rules",
url: "https://www.moreminimore.com/docs/guides/ai-rules",
url: "https://www.MoreMinimore.com/docs/guides/ai-rules",
},
],
};
@@ -167,7 +167,7 @@ export const NEW_CHAT_TIP: MessageConfig = {
],
};
// Want to know what's next? Checkout our roadmap https://www.moreminimore.com/docs/roadmap
// Want to know what's next? Checkout our roadmap https://www.MoreMinimore.com/docs/roadmap
export const ROADMAP_TIP: MessageConfig = {
spans: [
{
@@ -177,12 +177,12 @@ export const ROADMAP_TIP: MessageConfig = {
{
type: "link",
content: "roadmap",
url: "https://www.moreminimore.com/docs/roadmap",
url: "https://www.MoreMinimore.com/docs/roadmap",
},
],
};
// Like MoreMinimore? Star it on GitHub https://github.com/dyad-sh/dyad/
// Like MoreMinimore? Star it on GitHub https://github.com/kunthawat/moreminimore-vibe/
export const GITHUB_TIP: MessageConfig = {
spans: [
{
@@ -192,7 +192,7 @@ export const GITHUB_TIP: MessageConfig = {
{
type: "link",
content: "GitHub",
url: "https://github.com/dyad-sh/dyad",
url: "https://github.com/kunthawat/moreminimore-vibe",
},
],
};

View File

@@ -137,10 +137,10 @@ export function TokenBar({ chatId }: TokenBarProps) {
onClick={() =>
settings?.enableMoreMinimorePro
? IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/docs/guides/ai-models/pro-modes#smart-context",
"https://www.MoreMinimore.com/docs/guides/ai-models/pro-modes#smart-context",
)
: IpcClient.getInstance().openExternalUrl(
"https://moreminimore.com/pro#ai",
"https://MoreMinimore.com/pro#ai",
)
}
className="text-blue-500 dark:text-blue-400 cursor-pointer hover:underline"

View File

@@ -8,7 +8,7 @@ interface AnnotatorOnlyForProProps {
export const AnnotatorOnlyForPro = ({ onGoBack }: AnnotatorOnlyForProProps) => {
const handleGetPro = () => {
IpcClient.getInstance().openExternalUrl("https://moreminimore.com/pro");
IpcClient.getInstance().openExternalUrl("https://MoreMinimore.com/pro");
};
return (

View File

@@ -251,7 +251,7 @@ function SecurityHeader({
className="text-blue-600 dark:text-blue-400 hover:underline cursor-pointer"
onClick={() =>
IpcClient.getInstance().openExternalUrl(
"https://www.moreminimore.com/docs/guides/security-review",
"https://www.MoreMinimore.com/docs/guides/security-review",
)
}
>

View File

@@ -35,8 +35,8 @@ function getKeyButtonText({
}) {
if (isMoreMinimore) {
return isConfigured
? "Manage MoreMinimore Pro Subscription"
: "Setup MoreMinimore Pro Subscription";
? "Manage Moreminimore AI"
: "Setup Moreminimore AI";
}
return isConfigured ? "Manage API Keys" : "Setup API Key";
}

View File

@@ -55,22 +55,16 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
const supportsCustomModels =
providerData?.type === "custom" || providerData?.type === "cloud";
const isMoreMinimore = provider === "auto";
const [apiKeyInput, setApiKeyInput] = useState("");
const [isSaving, setIsSaving] = useState(false);
const [saveError, setSaveError] = useState<string | null>(null);
const router = useRouter();
// Use fetched data (or defaults for MoreMinimore)
const providerDisplayName = isMoreMinimore
? "MoreMinimore"
: (providerData?.name ?? "Unknown Provider");
const providerWebsiteUrl = isMoreMinimore
? "https://academy.dyad.sh/settings"
: providerData?.websiteUrl;
const hasFreeTier = isMoreMinimore ? false : providerData?.hasFreeTier;
const envVarName = isMoreMinimore ? undefined : providerData?.envVarName;
// Use fetched data
const providerDisplayName = providerData?.name ?? "Unknown Provider";
const providerWebsiteUrl = providerData?.websiteUrl;
const hasFreeTier = providerData?.hasFreeTier;
const envVarName = providerData?.envVarName;
// Use provider ID (which is the 'provider' prop)
const userApiKey = settings?.providerSettings?.[provider]?.apiKey?.value;
@@ -137,9 +131,6 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
},
},
};
if (isMoreMinimore) {
settingsUpdate.enableMoreMinimorePro = true;
}
await updateSettings(settingsUpdate);
setApiKeyInput(""); // Clear input on success
// Optionally show a success message
@@ -174,19 +165,6 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
}
};
// --- Toggle MoreMinimore Pro Handler ---
const handleToggleMoreMinimorePro = async (enabled: boolean) => {
setIsSaving(true);
try {
await updateSettings({
enableMoreMinimorePro: enabled,
});
} catch (error: any) {
showError(`Error toggling MoreMinimore Pro: ${error}`);
} finally {
setIsSaving(false);
}
};
// Effect to clear input error when input changes
useEffect(() => {
@@ -241,7 +219,7 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
}
// Handle case where provider is not found (e.g., invalid ID in URL)
if (!providerData && !isMoreMinimore) {
if (!providerData) {
return (
<div className="min-h-screen px-8 py-4">
<div className="max-w-4xl mx-auto">
@@ -278,7 +256,7 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
isLoading={settingsLoading}
hasFreeTier={hasFreeTier}
providerWebsiteUrl={providerWebsiteUrl}
isMoreMinimore={isMoreMinimore}
isMoreMinimore={provider === "moreminimore"}
onBackClick={() => router.history.back()}
/>
@@ -306,29 +284,13 @@ export function ProviderSettingsPage({ provider }: ProviderSettingsPageProps) {
onApiKeyInputChange={setApiKeyInput}
onSaveKey={handleSaveKey}
onDeleteKey={handleDeleteKey}
isMoreMinimore={isMoreMinimore}
isMoreMinimore={provider === "moreminimore"}
updateSettings={updateSettings}
/>
)}
{isMoreMinimore && !settingsLoading && (
<div className="mt-6 flex items-center justify-between p-4 bg-(--background-lightest) rounded-lg border">
<div>
<h3 className="font-medium">Enable MoreMinimore Pro</h3>
<p className="text-sm text-gray-600 dark:text-gray-400">
Toggle to enable MoreMinimore Pro
</p>
</div>
<Switch
checked={settings?.enableMoreMinimorePro}
onCheckedChange={handleToggleMoreMinimorePro}
disabled={isSaving}
/>
</div>
)}
{/* Conditionally render CustomModelsSection */}
{supportsCustomModels && providerData && (
{/* Conditionally render CustomModelsSection - hide for Moreminimore */}
{supportsCustomModels && providerData && provider !== "moreminimore" && (
<ModelsSection providerId={providerData.id} />
)}
<div className="h-24"></div>

View File

@@ -20,14 +20,14 @@ const availableUpgrades: Omit<AppUpgrade, "isNeeded">[] = [
title: "Enable select component to edit",
description:
"Installs the MoreMinimore component tagger Vite plugin and its dependencies.",
manualUpgradeUrl: "https://moreminimore.com/docs/upgrades/select-component",
manualUpgradeUrl: "https://MoreMinimore.com/docs/upgrades/select-component",
},
{
id: "capacitor",
title: "Upgrade to hybrid mobile app with Capacitor",
description:
"Adds Capacitor to your app lets it run on iOS and Android in addition to the web.",
manualUpgradeUrl: "https://moreminimore.com/docs/guides/mobile-app#upgrade-your-app",
manualUpgradeUrl: "https://MoreMinimore.com/docs/guides/mobile-app#upgrade-your-app",
},
];

View File

@@ -3,7 +3,6 @@ import { LanguageModel } from "../ipc_types";
export const PROVIDERS_THAT_SUPPORT_THINKING: (keyof typeof MODEL_OPTIONS)[] = [
"google",
"vertex",
"auto",
];
export interface ModelOption {
@@ -281,49 +280,15 @@ export const MODEL_OPTIONS: Record<string, ModelOption[]> = {
dollarSigns: 2,
},
],
auto: [
moreminimore: [
{
name: "auto",
displayName: "Auto",
description: "Automatically selects the best model",
tag: "Default",
// The following is reasonable defaults.
name: "zai-org/GLM-4.6",
displayName: "Moreminimore",
description: "Moreminimore AI service",
maxOutputTokens: 32_000,
contextWindow: 200_000,
temperature: 0,
},
{
name: "free",
displayName: "Free (OpenRouter)",
description: "Selects from one of the free OpenRouter models",
tag: "Free",
// These are below Gemini 2.5 Pro & Flash limits
// which are the ones defaulted to for both regular auto
// and smart auto.
maxOutputTokens: 32_000,
contextWindow: 128_000,
temperature: 0,
},
{
name: "turbo",
displayName: "Turbo (Pro)",
description: "Use very fast open-source frontier models",
maxOutputTokens: 32_000,
contextWindow: 256_000,
temperature: 0,
tag: "Fast",
tagColor: "bg-rose-800 text-white",
},
{
name: "value",
displayName: "Super Value (Pro)",
description: "Uses the most cost-effective models available",
maxOutputTokens: 32_000,
contextWindow: 256_000,
temperature: 0,
tag: "Budget",
tagColor: "bg-emerald-700 text-white",
},
],
azure: [
{
@@ -529,10 +494,10 @@ export const CLOUD_PROVIDERS: Record<
websiteUrl: "https://openrouter.ai/settings/keys",
gatewayPrefix: "openrouter/",
},
auto: {
displayName: "MoreMinimore",
moreminimore: {
displayName: "Moreminimore",
websiteUrl: "https://moreminimore.com/settings",
gatewayPrefix: "moreminimore/",
gatewayPrefix: "https://llmproxy.moreminimore.com",
},
azure: {
displayName: "Azure OpenAI",

View File

@@ -81,7 +81,7 @@ export async function getModelClient(
);
// Fall through to regular provider logic
}
// Handle 'auto' provider by trying each model in AUTO_MODELS until one works
// Handle 'auto' provider - route to Moreminimore AI server
if (model.provider === "auto") {
if (model.name === "free") {
const openRouterProvider = allProviders.find(
@@ -107,6 +107,25 @@ export async function getModelClient(
isEngineEnabled: false,
};
}
// Check for Moreminimore AI API key first
if (dyadApiKey) {
logger.log("Using Moreminimore AI provider");
const provider = createOpenAICompatible({
name: "moreminimore",
baseURL: "https://llmproxy.moreminimore.com/v1",
apiKey: dyadApiKey,
});
return {
modelClient: {
model: provider("gpt-4"), // Use a default model name
builtinProviderId: "auto",
},
isEngineEnabled: false,
};
}
// Fallback to other providers if no Moreminimore API key
for (const autoModel of AUTO_MODELS) {
const providerInfo = allProviders.find(
(p) => p.id === autoModel.provider,
@@ -346,6 +365,25 @@ function getRegularModelClient(
backupModelClients: [],
};
}
case "moreminimore": {
if (!apiKey) {
throw new Error(
"Moreminimore API key is required. Please configure it in Settings.",
);
}
const provider = createOpenAICompatible({
name: "moreminimore",
baseURL: "https://llmproxy.moreminimore.com/v1",
apiKey,
});
return {
modelClient: {
model: provider(model.name),
builtinProviderId: providerId,
},
backupModelClients: [],
};
}
default: {
// Handle custom providers
if (providerConfig.type === "custom") {

View File

@@ -66,12 +66,12 @@ if (fs.existsSync(gitDir)) {
// https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app#main-process-mainjs
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient("moreminimore", process.execPath, [
app.setAsDefaultProtocolClient("MoreMinimore", process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient("moreminimore");
app.setAsDefaultProtocolClient("MoreMinimore");
}
export async function onReady() {
@@ -306,10 +306,10 @@ function handleDeepLinkReturn(url: string) {
"hostname",
parsed.hostname,
);
if (parsed.protocol !== "moreminimore:") {
if (parsed.protocol !== "MoreMinimore:") {
dialog.showErrorBox(
"Invalid Protocol",
`Expected moreminimore://, got ${parsed.protocol}. Full URL: ${url}`,
`Expected MoreMinimore://, got ${parsed.protocol}. Full URL: ${url}`,
);
return;
}

View File

@@ -54,12 +54,12 @@ export const localTemplatesData: Template[] = [
requiresNeon: true,
},
{
id: "moreminimore-custom",
id: "MoreMinimore-custom",
title: "MoreMinimore Custom",
description: "Custom MoreMinimore template with enhanced features and debranded experience.",
imageUrl:
"https://github.com/user-attachments/assets/5b700eab-b28c-498e-96de-8649b14c16d9",
githubUrl: "https://github.com/kunthawat/moreminimore-vibe",
githubUrl: "https://github.com/kunthawat/MoreMinimore-vibe",
isOfficial: false,
isExperimental: false,
},

View File

@@ -26,7 +26,7 @@ async function getPublishableKey({ projectId }: { projectId: string }) {
if (!publishableKey) {
throw new Error(
"No publishable key found for project. Make sure you are connected to the correct Supabase account and project. See https://moreminimore.com/docs/integrations/supabase#no-publishable-keys",
"No publishable key found for project. Make sure you are connected to the correct Supabase account and project. See https://MoreMinimore.com/docs/integrations/supabase#no-publishable-keys",
);
}
return publishableKey.api_key;

View File

@@ -43,9 +43,9 @@ const ALLOWED_EXTENSIONS = [
".gradle",
".swift",
// Edge cases
// https://github.com/dyad-sh/dyad/issues/880
// https://github.com/kunthawat/moreminimore-vibe/issues/880
".py",
// https://github.com/dyad-sh/dyad/issues/1221
// https://github.com/kunthawat/moreminimore-vibe/issues/1221
".php",
];
@@ -54,7 +54,7 @@ const ALLOWED_EXTENSIONS = [
// people don't have their gitignore setup correctly so we want to
// be conservative and never include these directories.
//
// ex: https://github.com/dyad-sh/dyad/issues/727
// ex: https://github.com/kunthawat/moreminimore-vibe/issues/727
const EXCLUDED_DIRS = [
"node_modules",
".git",