mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-01 08:13:37 +00:00
Compare commits
8 Commits
cf35ca8650
...
v0.14.0rc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8fa7fc579 | ||
|
|
7fb0d0f2ca | ||
|
|
f15725f28a | ||
|
|
7d7d152d4e | ||
|
|
1a460c301a | ||
|
|
c1f480fe49 | ||
|
|
ef3f8de33b | ||
|
|
d379bf412a |
@@ -30,11 +30,16 @@ import net from 'net';
|
||||
|
||||
describe('dev-server-service.ts', () => {
|
||||
let testDir: string;
|
||||
let originalHostname: string | undefined;
|
||||
|
||||
beforeEach(async () => {
|
||||
vi.clearAllMocks();
|
||||
vi.resetModules();
|
||||
|
||||
// Store and set HOSTNAME for consistent test behavior
|
||||
originalHostname = process.env.HOSTNAME;
|
||||
process.env.HOSTNAME = 'localhost';
|
||||
|
||||
testDir = path.join(os.tmpdir(), `dev-server-test-${Date.now()}`);
|
||||
await fs.mkdir(testDir, { recursive: true });
|
||||
|
||||
@@ -56,6 +61,13 @@ describe('dev-server-service.ts', () => {
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
// Restore original HOSTNAME
|
||||
if (originalHostname === undefined) {
|
||||
delete process.env.HOSTNAME;
|
||||
} else {
|
||||
process.env.HOSTNAME = originalHostname;
|
||||
}
|
||||
|
||||
try {
|
||||
await fs.rm(testDir, { recursive: true, force: true });
|
||||
} catch {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useState, useCallback, useEffect } from 'react';
|
||||
import { Plus, Bug, FolderOpen, BookOpen } from 'lucide-react';
|
||||
import { useNavigate, useLocation } from '@tanstack/react-router';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { cn, isMac } from '@/lib/utils';
|
||||
import { useAppStore } from '@/store/app-store';
|
||||
import { useOSDetection } from '@/hooks/use-os-detection';
|
||||
import { ProjectSwitcherItem } from './components/project-switcher-item';
|
||||
@@ -11,9 +11,12 @@ import { NotificationBell } from './components/notification-bell';
|
||||
import { NewProjectModal } from '@/components/dialogs/new-project-modal';
|
||||
import { OnboardingDialog } from '@/components/layout/sidebar/dialogs';
|
||||
import { useProjectCreation } from '@/components/layout/sidebar/hooks';
|
||||
import { SIDEBAR_FEATURE_FLAGS } from '@/components/layout/sidebar/constants';
|
||||
import {
|
||||
MACOS_ELECTRON_TOP_PADDING_CLASS,
|
||||
SIDEBAR_FEATURE_FLAGS,
|
||||
} from '@/components/layout/sidebar/constants';
|
||||
import type { Project } from '@/lib/electron';
|
||||
import { getElectronAPI } from '@/lib/electron';
|
||||
import { getElectronAPI, isElectron } from '@/lib/electron';
|
||||
import { initializeProject, hasAppSpec, hasAutomakerDir } from '@/lib/project-init';
|
||||
import { toast } from 'sonner';
|
||||
import { CreateSpecDialog } from '@/components/views/spec-view/dialogs';
|
||||
@@ -279,7 +282,12 @@ export function ProjectSwitcher() {
|
||||
data-testid="project-switcher"
|
||||
>
|
||||
{/* Automaker Logo and Version */}
|
||||
<div className="flex flex-col items-center pt-3 pb-2 px-2">
|
||||
<div
|
||||
className={cn(
|
||||
'flex flex-col items-center pb-2 px-2',
|
||||
isMac && isElectron() ? MACOS_ELECTRON_TOP_PADDING_CLASS : 'pt-3'
|
||||
)}
|
||||
>
|
||||
<button
|
||||
onClick={() => navigate({ to: '/dashboard' })}
|
||||
className="group flex flex-col items-center gap-0.5"
|
||||
|
||||
@@ -6,6 +6,7 @@ import type { LucideIcon } from 'lucide-react';
|
||||
import { cn, isMac } from '@/lib/utils';
|
||||
import { formatShortcut } from '@/store/app-store';
|
||||
import { isElectron, type Project } from '@/lib/electron';
|
||||
import { MACOS_ELECTRON_TOP_PADDING_CLASS } from '../constants';
|
||||
import { getAuthenticatedImageUrl } from '@/lib/api-fetch';
|
||||
import { useAppStore } from '@/store/app-store';
|
||||
import {
|
||||
@@ -89,7 +90,7 @@ export function SidebarHeader({
|
||||
<div
|
||||
className={cn(
|
||||
'shrink-0 flex flex-col items-center relative px-2 pt-3 pb-2',
|
||||
isMac && isElectron() && 'pt-[10px]'
|
||||
isMac && isElectron() && MACOS_ELECTRON_TOP_PADDING_CLASS
|
||||
)}
|
||||
>
|
||||
<Tooltip>
|
||||
@@ -240,7 +241,7 @@ export function SidebarHeader({
|
||||
<div
|
||||
className={cn(
|
||||
'shrink-0 flex flex-col relative px-3 pt-3 pb-2',
|
||||
isMac && isElectron() && 'pt-[10px]'
|
||||
isMac && isElectron() && MACOS_ELECTRON_TOP_PADDING_CLASS
|
||||
)}
|
||||
>
|
||||
{/* Header with logo and project dropdown */}
|
||||
|
||||
@@ -3,7 +3,9 @@ import type { NavigateOptions } from '@tanstack/react-router';
|
||||
import { ChevronDown, Wrench, Github, Folder } from 'lucide-react';
|
||||
import * as LucideIcons from 'lucide-react';
|
||||
import type { LucideIcon } from 'lucide-react';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { cn, isMac } from '@/lib/utils';
|
||||
import { isElectron } from '@/lib/electron';
|
||||
import { MACOS_ELECTRON_TOP_PADDING_CLASS } from '../constants';
|
||||
import { formatShortcut, useAppStore } from '@/store/app-store';
|
||||
import { getAuthenticatedImageUrl } from '@/lib/api-fetch';
|
||||
import type { NavSection } from '../types';
|
||||
@@ -117,7 +119,12 @@ export function SidebarNavigation({
|
||||
className={cn(
|
||||
'flex-1 overflow-y-auto scrollbar-hide px-3 pb-2',
|
||||
// Add top padding in discord mode since there's no header
|
||||
sidebarStyle === 'discord' ? 'pt-3' : 'mt-1'
|
||||
// Extra padding for macOS Electron to avoid traffic light overlap
|
||||
sidebarStyle === 'discord'
|
||||
? isMac && isElectron()
|
||||
? MACOS_ELECTRON_TOP_PADDING_CLASS
|
||||
: 'pt-3'
|
||||
: 'mt-1'
|
||||
)}
|
||||
>
|
||||
{/* Project name display for classic/discord mode */}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import { darkThemes, lightThemes } from '@/config/theme-options';
|
||||
|
||||
/**
|
||||
* Tailwind class for top padding on macOS Electron to avoid overlapping with traffic light window controls.
|
||||
* This padding is applied conditionally when running on macOS in Electron.
|
||||
*/
|
||||
export const MACOS_ELECTRON_TOP_PADDING_CLASS = 'pt-[38px]';
|
||||
|
||||
/**
|
||||
* Shared constants for theme submenu positioning and layout.
|
||||
* Used across project-context-menu and project-selector-with-options components
|
||||
|
||||
@@ -116,9 +116,8 @@ const PROVIDER_ICON_DEFINITIONS: Record<ProviderIconKey, ProviderIconDefinition>
|
||||
},
|
||||
copilot: {
|
||||
viewBox: '0 0 98 96',
|
||||
// Official GitHub Octocat logo mark
|
||||
// Official GitHub Octocat logo mark (theme-aware via currentColor)
|
||||
path: 'M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z',
|
||||
fill: '#ffffff',
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -2512,7 +2512,7 @@ export const useAppStore = create<AppState & AppActions>()((set, get) => ({
|
||||
authMethod?: string;
|
||||
}>;
|
||||
error?: string;
|
||||
}>('/api/opencode/models');
|
||||
}>('/api/setup/opencode/models');
|
||||
|
||||
if (data.success && data.models) {
|
||||
// Filter out Bedrock models
|
||||
|
||||
Reference in New Issue
Block a user