Update the rebranding and fix issues
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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",
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -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",
|
||||
);
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -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",
|
||||
);
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -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");
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
}
|
||||
>
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user