From c3e0184167add5ef961be29f335a4c524700ec09 Mon Sep 17 00:00:00 2001
From: Arjun <6592213+arkml@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:01:16 +0530
Subject: [PATCH 1/8] fix onboarding losing focus
---
.../src/components/onboarding-modal.tsx | 21 +++++++++----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/apps/x/apps/renderer/src/components/onboarding-modal.tsx b/apps/x/apps/renderer/src/components/onboarding-modal.tsx
index 6a1290dc..d8d344db 100644
--- a/apps/x/apps/renderer/src/components/onboarding-modal.tsx
+++ b/apps/x/apps/renderer/src/components/onboarding-modal.tsx
@@ -78,6 +78,7 @@ export function OnboardingModal({ open, onComplete }: OnboardingModalProps) {
// Granola state
const [granolaEnabled, setGranolaEnabled] = useState(false)
const [granolaLoading, setGranolaLoading] = useState(true)
+ const [showMoreProviders, setShowMoreProviders] = useState(false)
// Composio/Slack state
const [composioApiKeyOpen, setComposioApiKeyOpen] = useState(false)
@@ -445,8 +446,8 @@ export function OnboardingModal({ open, onComplete }: OnboardingModalProps) {
startConnect('google', clientId)
}, [startConnect])
- // Step indicator component
- const StepIndicator = () => (
+ // Step indicator
+ const renderStepIndicator = () => (
{[0, 1, 2].map((step) => (
{
- const [showMoreProviders, setShowMoreProviders] = useState(false)
-
+ const renderLlmSetupStep = () => {
const primaryProviders: Array<{ id: LlmProviderFlavor; name: string; description: string }> = [
{ id: "openai", name: "OpenAI", description: "Use your OpenAI API key" },
{ id: "anthropic", name: "Anthropic", description: "Use your Anthropic API key" },
@@ -745,7 +744,7 @@ export function OnboardingModal({ open, onComplete }: OnboardingModalProps) {
}
// Step 1: Connect Accounts
- const AccountConnectionStep = () => (
+ const renderAccountConnectionStep = () => (
Connect Your Accounts
@@ -796,7 +795,7 @@ export function OnboardingModal({ open, onComplete }: OnboardingModalProps) {
)
// Step 2: Completion
- const CompletionStep = () => {
+ const renderCompletionStep = () => {
const hasConnections = connectedProviders.length > 0 || granolaEnabled || slackConnected
return (
@@ -877,10 +876,10 @@ export function OnboardingModal({ open, onComplete }: OnboardingModalProps) {
onPointerDownOutside={(e) => e.preventDefault()}
onEscapeKeyDown={(e) => e.preventDefault()}
>
-
- {currentStep === 0 && }
- {currentStep === 1 && }
- {currentStep === 2 && }
+ {renderStepIndicator()}
+ {currentStep === 0 && renderLlmSetupStep()}
+ {currentStep === 1 && renderAccountConnectionStep()}
+ {currentStep === 2 && renderCompletionStep()}
>
From 6c9ccc0f95dbc9dd4b1e0f07e83bae0ea2eaf9a9 Mon Sep 17 00:00:00 2001
From: Arjun <6592213+arkml@users.noreply.github.com>
Date: Thu, 12 Feb 2026 11:40:55 +0530
Subject: [PATCH 2/8] fixed ollama
---
apps/x/packages/core/src/models/models.ts | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/apps/x/packages/core/src/models/models.ts b/apps/x/packages/core/src/models/models.ts
index 482931df..ab332fb6 100644
--- a/apps/x/packages/core/src/models/models.ts
+++ b/apps/x/packages/core/src/models/models.ts
@@ -39,11 +39,17 @@ export function createProvider(config: z.infer): ProviderV2 {
baseURL,
headers,
});
- case "ollama":
+ case "ollama": {
+ // ollama-ai-provider-v2 expects baseURL to include /api
+ let ollamaURL = baseURL;
+ if (ollamaURL && !ollamaURL.replace(/\/+$/, '').endsWith('/api')) {
+ ollamaURL = ollamaURL.replace(/\/+$/, '') + '/api';
+ }
return createOllama({
- baseURL,
+ baseURL: ollamaURL,
headers,
});
+ }
case "openai-compatible":
return createOpenAICompatible({
name: "openai-compatible",
@@ -65,10 +71,12 @@ export function createProvider(config: z.infer): ProviderV2 {
export async function testModelConnection(
providerConfig: z.infer,
model: string,
- timeoutMs: number = 8000,
+ timeoutMs?: number,
): Promise<{ success: boolean; error?: string }> {
+ const isLocal = providerConfig.flavor === "ollama" || providerConfig.flavor === "openai-compatible";
+ const effectiveTimeout = timeoutMs ?? (isLocal ? 60000 : 8000);
const controller = new AbortController();
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
+ const timeout = setTimeout(() => controller.abort(), effectiveTimeout);
try {
const provider = createProvider(providerConfig);
const languageModel = provider.languageModel(model);
From b905a197470f26905c16be53ffd41feaabf3c2ac Mon Sep 17 00:00:00 2001
From: tusharmagar
Date: Thu, 12 Feb 2026 16:43:02 +0530
Subject: [PATCH 3/8] fix: traffic light placeholder
---
apps/x/apps/renderer/src/App.tsx | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/apps/x/apps/renderer/src/App.tsx b/apps/x/apps/renderer/src/App.tsx
index bc9bb6cc..f5868166 100644
--- a/apps/x/apps/renderer/src/App.tsx
+++ b/apps/x/apps/renderer/src/App.tsx
@@ -125,6 +125,8 @@ const graphPalette = [
{ hue: 0, sat: 72, light: 52 },
]
+const MACOS_TRAFFIC_LIGHTS_RESERVED_PX = 12 + 12 * 3 + 8 * 2
+
const clampNumber = (value: number, min: number, max: number) =>
Math.min(max, Math.max(min, value))
@@ -461,32 +463,29 @@ function viewStatesEqual(a: ViewState, b: ViewState): boolean {
return true // both graph
}
-/** Traffic light placeholders + toggle button + back/forward nav, fixed next to macOS traffic lights */
+/** Sidebar toggle + back/forward nav */
function FixedSidebarToggle({
onNavigateBack,
onNavigateForward,
canNavigateBack,
canNavigateForward,
+ leftInsetPx,
}: {
onNavigateBack: () => void
onNavigateForward: () => void
canNavigateBack: boolean
canNavigateForward: boolean
+ leftInsetPx: number
}) {
const { toggleSidebar } = useSidebar()
return (
- {/* Placeholder dots that show through when traffic lights are hidden (window unfocused) */}
-
+
{/* Sidebar toggle */}