diff --git a/apps/web/src/components/app-shell.tsx b/apps/web/src/components/app-shell.tsx index 2fbd949..4af70e2 100644 --- a/apps/web/src/components/app-shell.tsx +++ b/apps/web/src/components/app-shell.tsx @@ -10,11 +10,11 @@ import { useMobileViewport } from "../hooks/use-mobile-viewport"; import { EventProvider } from "../state/events"; import { ToastProvider } from "../state/toast"; import { NotificationProvider } from "../state/notifications"; -import { EventToastBridge } from "./event-toast-bridge"; -import { NotificationCenter } from "./notification-center"; +import { EventToastBridge } from "./features/notification/event-toast-bridge"; +import { NotificationCenter } from "./features/notification/notification-center"; import { Icon } from "./icon"; -import { MobileNav } from "./mobile-nav"; -import { StartToolFAB } from "./start-tool-fab"; +import { MobileNav } from "./features/mobile/mobile-nav"; +import { StartToolFAB } from "./features/tool/start-tool-fab"; import type { IconName } from "../utils/icons"; const NAV_ITEMS: { diff --git a/apps/web/src/components/features/git/commit-dialog.tsx b/apps/web/src/components/features/git/commit-dialog.tsx index 491142f..20d8a3e 100644 --- a/apps/web/src/components/features/git/commit-dialog.tsx +++ b/apps/web/src/components/features/git/commit-dialog.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface CommitDialogProps { isOpen: boolean; diff --git a/apps/web/src/components/features/git/commit-panel.tsx b/apps/web/src/components/features/git/commit-panel.tsx index 5f6c8af..5737294 100644 --- a/apps/web/src/components/features/git/commit-panel.tsx +++ b/apps/web/src/components/features/git/commit-panel.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; -import { commitChanges } from "../api/git-repositories"; +import { commitChanges } from "../../../api/git-repositories"; interface CommitPanelProps { projectId: string; diff --git a/apps/web/src/components/features/git/file-editor.tsx b/apps/web/src/components/features/git/file-editor.tsx index 8e0eff1..7bf2a11 100644 --- a/apps/web/src/components/features/git/file-editor.tsx +++ b/apps/web/src/components/features/git/file-editor.tsx @@ -1,12 +1,12 @@ import React, { useCallback, useEffect, useState } from "react"; import { useSearchParams } from "react-router-dom"; -import { apiClient } from "../api/client"; -import { useAuth } from "../state/auth"; -import { CodeEditor } from "../components/code-editor"; -import { CommitDialog } from "../components/features/git/commit-dialog"; -import { Icon } from "../components/icon"; -import { SyntaxHighlighter } from "../components/syntax-highlighter"; -import { detectLanguage } from "../utils/language"; +import { apiClient } from "../../../api/client"; +import { useAuth } from "../../../state/auth"; +import { CodeEditor } from "../../code-editor"; +import { CommitDialog } from "./commit-dialog"; +import { Icon } from "../../icon"; +import { SyntaxHighlighter } from "../../syntax-highlighter"; +import { detectLanguage } from "../../../utils/language"; interface FileEditorProps { projectId: string; diff --git a/apps/web/src/components/features/git/git-mount-editor.tsx b/apps/web/src/components/features/git/git-mount-editor.tsx index 6829955..35c2601 100644 --- a/apps/web/src/components/features/git/git-mount-editor.tsx +++ b/apps/web/src/components/features/git/git-mount-editor.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; -import { Icon } from "./icon"; -import { validateGitUrl } from "../api/config_profiles"; -import type { GitMount, GitMountMapping } from "../api/config_profiles"; +import { Icon } from "../../icon"; +import { validateGitUrl } from "../../../api/config_profiles"; +import type { GitMount, GitMountMapping } from "../../../api/config_profiles"; interface GitMountEditorProps { mounts: GitMount[]; diff --git a/apps/web/src/components/features/git/git-toolbar.tsx b/apps/web/src/components/features/git/git-toolbar.tsx index 97ce337..20eb705 100644 --- a/apps/web/src/components/features/git/git-toolbar.tsx +++ b/apps/web/src/components/features/git/git-toolbar.tsx @@ -8,8 +8,8 @@ import { pullRepository, pushRepository, type GitStatus, -} from "../api/git-repositories"; -import { Icon } from "./icon"; +} from "../../../api/git-repositories"; +import { Icon } from "../../icon"; import { MergeDialog } from "./merge-dialog"; interface GitToolbarProps { diff --git a/apps/web/src/components/features/git/merge-dialog.tsx b/apps/web/src/components/features/git/merge-dialog.tsx index 5dbab42..bdfdc64 100644 --- a/apps/web/src/components/features/git/merge-dialog.tsx +++ b/apps/web/src/components/features/git/merge-dialog.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; -import { mergeBranches } from "../api/git-repositories"; -import { Icon } from "./icon"; +import { mergeBranches } from "../../../api/git-repositories"; +import { Icon } from "../../icon"; interface MergeDialogProps { projectId: string; diff --git a/apps/web/src/components/features/mobile/mobile-action-sheet.tsx b/apps/web/src/components/features/mobile/mobile-action-sheet.tsx index 211d86a..e09b15d 100644 --- a/apps/web/src/components/features/mobile/mobile-action-sheet.tsx +++ b/apps/web/src/components/features/mobile/mobile-action-sheet.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef } from "react"; -import { Icon } from "./icon"; -import type { IconName } from "./icon"; +import { Icon } from "../../icon"; +import type { IconName } from "../../icon"; export interface MobileActionSheetItem { id: string; diff --git a/apps/web/src/components/features/mobile/mobile-detail-view.tsx b/apps/web/src/components/features/mobile/mobile-detail-view.tsx index fb47873..5ccd394 100644 --- a/apps/web/src/components/features/mobile/mobile-detail-view.tsx +++ b/apps/web/src/components/features/mobile/mobile-detail-view.tsx @@ -1,4 +1,4 @@ -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface Field { label: string; diff --git a/apps/web/src/components/features/mobile/mobile-fab.tsx b/apps/web/src/components/features/mobile/mobile-fab.tsx index 06765ac..d6aa659 100644 --- a/apps/web/src/components/features/mobile/mobile-fab.tsx +++ b/apps/web/src/components/features/mobile/mobile-fab.tsx @@ -1,4 +1,4 @@ -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface MobileFABProps { onClick: () => void; diff --git a/apps/web/src/components/features/mobile/mobile-list-view.tsx b/apps/web/src/components/features/mobile/mobile-list-view.tsx index ac55c71..45dc438 100644 --- a/apps/web/src/components/features/mobile/mobile-list-view.tsx +++ b/apps/web/src/components/features/mobile/mobile-list-view.tsx @@ -1,5 +1,5 @@ -import { Icon } from "./icon"; -import type { IconName } from "../utils/icons"; +import { Icon } from "../../icon"; +import type { IconName } from "../../../utils/icons"; interface MobileListItem { id: string; diff --git a/apps/web/src/components/features/mobile/mobile-nav.tsx b/apps/web/src/components/features/mobile/mobile-nav.tsx index ab3c67e..5edefd3 100644 --- a/apps/web/src/components/features/mobile/mobile-nav.tsx +++ b/apps/web/src/components/features/mobile/mobile-nav.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; import { NavLink, useLocation } from "react-router-dom"; -import { Icon } from "./icon"; -import { ToolsBottomSheet } from "./tools-bottom-sheet"; -import type { IconName } from "../utils/icons"; +import { Icon } from "../../icon"; +import { ToolsBottomSheet } from "../tool/tools-bottom-sheet"; +import type { IconName } from "../../../utils/icons"; interface MobileNavProps { sessionCount?: number; diff --git a/apps/web/src/components/features/mobile/mobile-page-header.tsx b/apps/web/src/components/features/mobile/mobile-page-header.tsx index 993b102..1e82e0c 100644 --- a/apps/web/src/components/features/mobile/mobile-page-header.tsx +++ b/apps/web/src/components/features/mobile/mobile-page-header.tsx @@ -1,6 +1,6 @@ import { useNavigate } from "react-router-dom"; -import { useMobileViewport } from "../hooks/use-mobile-viewport"; -import { Icon } from "./icon"; +import { useMobileViewport } from "../../../hooks/use-mobile-viewport"; +import { Icon } from "../../icon"; interface MobilePageHeaderProps { title: string; diff --git a/apps/web/src/components/features/mobile/mobile-terminal-header.tsx b/apps/web/src/components/features/mobile/mobile-terminal-header.tsx index a07c520..9cc95ff 100644 --- a/apps/web/src/components/features/mobile/mobile-terminal-header.tsx +++ b/apps/web/src/components/features/mobile/mobile-terminal-header.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface MobileTerminalHeaderProps { instanceName?: string; diff --git a/apps/web/src/components/features/mobile/mobile-terminal-wrapper.tsx b/apps/web/src/components/features/mobile/mobile-terminal-wrapper.tsx index 9c33925..12697eb 100644 --- a/apps/web/src/components/features/mobile/mobile-terminal-wrapper.tsx +++ b/apps/web/src/components/features/mobile/mobile-terminal-wrapper.tsx @@ -1,12 +1,12 @@ import React, { useState, useCallback } from "react"; -import { TerminalComponent } from "./terminal"; +import { TerminalComponent } from "../terminal/terminal"; import { MobileTerminalHeader } from "./mobile-terminal-header"; -import { SpecialKeysStrip } from "./special-keys-strip"; -import { SpecialKeysPanel } from "./special-keys-panel"; -import { useMobileViewport } from "../hooks/use-mobile-viewport"; -import { useVirtualKeyboard } from "../hooks/use-virtual-keyboard"; -import { useAutoHide } from "../hooks/use-auto-hide"; -import type { ModifierKey } from "../hooks/use-special-keys"; +import { SpecialKeysStrip } from "../terminal/special-keys-strip"; +import { SpecialKeysPanel } from "../terminal/special-keys-panel"; +import { useMobileViewport } from "../../../hooks/use-mobile-viewport"; +import { useVirtualKeyboard } from "../../../hooks/use-virtual-keyboard"; +import { useAutoHide } from "../../../hooks/use-auto-hide"; +import type { ModifierKey } from "../../../hooks/use-special-keys"; interface MobileTerminalWrapperProps { instanceId: string; diff --git a/apps/web/src/components/features/notification/event-toast-bridge.test.tsx b/apps/web/src/components/features/notification/event-toast-bridge.test.tsx index d66501f..03abd6a 100644 --- a/apps/web/src/components/features/notification/event-toast-bridge.test.tsx +++ b/apps/web/src/components/features/notification/event-toast-bridge.test.tsx @@ -2,15 +2,15 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { render, act } from "@testing-library/react"; import { EventToastBridge } from "./event-toast-bridge"; import { useEventContext } from "../state/events"; -import { getUserConfig } from "../api/settings"; +import { getUserConfig } from "../../../api/settings"; import { handleEventToast } from "./toast-rules"; -import type { InstanceEventPayload } from "../types/events"; +import type { InstanceEventPayload } from "../../../types/events"; vi.mock("../state/events", () => ({ useEventContext: vi.fn(), })); -vi.mock("../api/settings", () => ({ +vi.mock("../../../api/settings", () => ({ getUserConfig: vi.fn(), })); diff --git a/apps/web/src/components/features/notification/event-toast-bridge.tsx b/apps/web/src/components/features/notification/event-toast-bridge.tsx index b3a7247..528380c 100644 --- a/apps/web/src/components/features/notification/event-toast-bridge.tsx +++ b/apps/web/src/components/features/notification/event-toast-bridge.tsx @@ -1,12 +1,12 @@ import { useEffect, useRef, useState } from "react"; -import { useEventContext } from "../state/events"; +import { useEventContext } from "../../../state/events"; import { handleEventToast, mapEventToCategory, mapEventToSeverity, -} from "./toast-rules"; -import { getUserConfig } from "../api/settings"; -import type { UserConfig } from "../api/settings"; +} from "../../toast-rules"; +import { getUserConfig } from "../../../api/settings"; +import type { UserConfig } from "../../../api/settings"; interface ToastConfig { notification_toast_level: string; diff --git a/apps/web/src/components/features/notification/notification-center.test.tsx b/apps/web/src/components/features/notification/notification-center.test.tsx index 780e7b8..d3dd662 100644 --- a/apps/web/src/components/features/notification/notification-center.test.tsx +++ b/apps/web/src/components/features/notification/notification-center.test.tsx @@ -3,7 +3,7 @@ import { render, screen, fireEvent, cleanup } from "@testing-library/react"; import { NotificationCenter } from "./notification-center"; import { NotificationProvider } from "../state/notifications"; -vi.mock("../api/notifications", () => ({ +vi.mock("../../../api/notifications", () => ({ getNotifications: vi.fn(), getUnreadCount: vi.fn(), markNotificationRead: vi.fn(), @@ -12,7 +12,7 @@ vi.mock("../api/notifications", () => ({ clearAllNotifications: vi.fn(), })); -import { getNotifications, getUnreadCount } from "../api/notifications"; +import { getNotifications, getUnreadCount } from "../../../api/notifications"; const mockedGetNotifications = vi.mocked(getNotifications); const mockedGetUnreadCount = vi.mocked(getUnreadCount); @@ -142,7 +142,7 @@ describe("NotificationCenter", () => { fireEvent.click(screen.getByRole("button", { name: /mark all as read/i })); const { markAllNotificationsRead: mockMarkAll } = await import( - "../api/notifications" + "../../../api/notifications" ); expect(vi.mocked(mockMarkAll)).toHaveBeenCalled(); }); @@ -162,7 +162,7 @@ describe("NotificationCenter", () => { fireEvent.click(screen.getByRole("button", { name: /clear all/i })); const { clearAllNotifications: mockClearAll } = await import( - "../api/notifications" + "../../../api/notifications" ); expect(vi.mocked(mockClearAll)).toHaveBeenCalled(); }); diff --git a/apps/web/src/components/features/notification/notification-center.tsx b/apps/web/src/components/features/notification/notification-center.tsx index dc5f431..18e6b4b 100644 --- a/apps/web/src/components/features/notification/notification-center.tsx +++ b/apps/web/src/components/features/notification/notification-center.tsx @@ -1,7 +1,7 @@ import { useEffect, useRef } from "react"; -import { useNotifications } from "../hooks/use-notifications"; +import { useNotifications } from "../../../hooks/use-notifications"; import { NotificationItem } from "./notification-item"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface NotificationCenterProps { isMobileTerminal?: boolean; diff --git a/apps/web/src/components/features/notification/notification-item.tsx b/apps/web/src/components/features/notification/notification-item.tsx index 7266f01..ccaa4e4 100644 --- a/apps/web/src/components/features/notification/notification-item.tsx +++ b/apps/web/src/components/features/notification/notification-item.tsx @@ -1,6 +1,6 @@ -import { Icon } from "./icon"; -import { formatRelativeTime } from "../utils/time"; -import type { NotificationItem as NotificationItemType } from "../api/notifications"; +import { Icon } from "../../icon"; +import { formatRelativeTime } from "../../../utils/time"; +import type { NotificationItem as NotificationItemType } from "../../../api/notifications"; export interface NotificationItemProps { notification: NotificationItemType; @@ -8,7 +8,7 @@ export interface NotificationItemProps { onDismiss: (id: string) => void; } -import type { IconName } from "../utils/icons"; +import type { IconName } from "../../../utils/icons"; const severityIconMap: Record = { info: "info", diff --git a/apps/web/src/components/features/project/repositories-settings-tab.test.tsx b/apps/web/src/components/features/project/repositories-settings-tab.test.tsx index 881fb80..4c7702f 100644 --- a/apps/web/src/components/features/project/repositories-settings-tab.test.tsx +++ b/apps/web/src/components/features/project/repositories-settings-tab.test.tsx @@ -2,7 +2,7 @@ import { cleanup, fireEvent, render, screen, waitFor } from "@testing-library/re import { afterEach, describe, expect, it, vi } from "vitest"; import { RepositoriesSettingsTab } from "./repositories-settings-tab"; -import * as gitRepositoriesApi from "../api/git-repositories"; +import * as gitRepositoriesApi from "../../../api/git-repositories"; const mockRepositories = [ { diff --git a/apps/web/src/components/features/project/repositories-settings-tab.tsx b/apps/web/src/components/features/project/repositories-settings-tab.tsx index 83f1634..266e7e9 100644 --- a/apps/web/src/components/features/project/repositories-settings-tab.tsx +++ b/apps/web/src/components/features/project/repositories-settings-tab.tsx @@ -1,9 +1,9 @@ import React, { useCallback, useEffect, useState } from "react"; import { useParams } from "react-router-dom"; -import { deleteRepository, listRepositories, type GitRepository } from "../api/git-repositories"; +import { deleteRepository, listRepositories, type GitRepository } from "../../../api/git-repositories"; import { RepositoryCreateDialog } from "./repository-create-dialog"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; export const RepositoriesSettingsTab: React.FC = () => { const { projectId } = useParams<{ projectId: string }>(); diff --git a/apps/web/src/components/features/project/repository-create-dialog.tsx b/apps/web/src/components/features/project/repository-create-dialog.tsx index 9b97a81..4abd673 100644 --- a/apps/web/src/components/features/project/repository-create-dialog.tsx +++ b/apps/web/src/components/features/project/repository-create-dialog.tsx @@ -1,8 +1,8 @@ import { useEffect, useRef, useState } from "react"; -import { createRepository, parseGitUrl, type GitRepositoryCreate, type URLParseResult } from "../api/git-repositories"; -import { listSSHKeys, type SSHKey } from "../api/ssh-keys"; -import { Icon } from "./icon"; +import { createRepository, parseGitUrl, type GitRepositoryCreate, type URLParseResult } from "../../../api/git-repositories"; +import { listSSHKeys, type SSHKey } from "../../../api/ssh-keys"; +import { Icon } from "../../icon"; type CreateMode = "clone" | "blank"; type UrlValidationStatus = "idle" | "validating" | "valid" | "needs-parsing" | "invalid"; diff --git a/apps/web/src/components/features/session/create-session-form.tsx b/apps/web/src/components/features/session/create-session-form.tsx index e3622ca..eb20cf5 100644 --- a/apps/web/src/components/features/session/create-session-form.tsx +++ b/apps/web/src/components/features/session/create-session-form.tsx @@ -1,11 +1,11 @@ import { useState, useEffect } from "react"; -import { Icon } from "./icon"; -import { createInstance, startInstance, type ToolInstance } from "../api/sessions"; -import type { Project } from "../types"; -import { listRepositoryBranches, type GitRepository, type Branch } from "../api/git-repositories"; -import type { ToolType } from "../api/tool-types"; -import { listSSHKeys, type SSHKey } from "../api/ssh-keys"; -import { listConfigProfiles, type ConfigProfile } from "../api/config_profiles"; +import { Icon } from "../../icon"; +import { createInstance, startInstance, type ToolInstance } from "../../../api/sessions"; +import type { Project } from "../../../types"; +import { listRepositoryBranches, type GitRepository, type Branch } from "../../../api/git-repositories"; +import type { ToolType } from "../../../api/tool-types"; +import { listSSHKeys, type SSHKey } from "../../../api/ssh-keys"; +import { listConfigProfiles, type ConfigProfile } from "../../../api/config_profiles"; interface CreateSessionFormProps { projects: Project[]; diff --git a/apps/web/src/components/features/session/session-card.tsx b/apps/web/src/components/features/session/session-card.tsx index d9b62fe..79255f6 100644 --- a/apps/web/src/components/features/session/session-card.tsx +++ b/apps/web/src/components/features/session/session-card.tsx @@ -1,9 +1,9 @@ import { useState } from "react"; -import type { Session } from "../api/sessions"; -import { Icon } from "./icon"; -import { useMobileViewport } from "../hooks/use-mobile-viewport"; -import { MobileActionSheet } from "./mobile-action-sheet"; -import type { IconName } from "./icon"; +import type { Session } from "../../../api/sessions"; +import { Icon } from "../../icon"; +import { useMobileViewport } from "../../../hooks/use-mobile-viewport"; +import { MobileActionSheet } from "../mobile/mobile-action-sheet"; +import type { IconName } from "../../icon"; export interface SessionCardProps { session: Session; diff --git a/apps/web/src/components/features/session/session-list.tsx b/apps/web/src/components/features/session/session-list.tsx index 16af314..2164092 100644 --- a/apps/web/src/components/features/session/session-list.tsx +++ b/apps/web/src/components/features/session/session-list.tsx @@ -1,6 +1,6 @@ -import type { Session } from "../api/sessions"; +import type { Session } from "../../../api/sessions"; import { SessionCard } from "./session-card"; -import type { InstanceHealth } from "../api/sessions"; +import type { InstanceHealth } from "../../../api/sessions"; export interface SessionListProps { sessions: Session[]; diff --git a/apps/web/src/components/features/terminal/special-keys-panel.tsx b/apps/web/src/components/features/terminal/special-keys-panel.tsx index d50a672..39a158b 100644 --- a/apps/web/src/components/features/terminal/special-keys-panel.tsx +++ b/apps/web/src/components/features/terminal/special-keys-panel.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { getSequenceWithModifier, type SpecialKey, type ModifierKey } from "../hooks/use-special-keys"; +import { getSequenceWithModifier, type SpecialKey, type ModifierKey } from "../../../hooks/use-special-keys"; interface SpecialKeysPanelProps { onSend: (data: string) => void; diff --git a/apps/web/src/components/features/terminal/special-keys-strip.tsx b/apps/web/src/components/features/terminal/special-keys-strip.tsx index cae6f80..80e766f 100644 --- a/apps/web/src/components/features/terminal/special-keys-strip.tsx +++ b/apps/web/src/components/features/terminal/special-keys-strip.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { getSequenceWithModifier, type SpecialKey, type ModifierKey } from "../hooks/use-special-keys"; +import { getSequenceWithModifier, type SpecialKey, type ModifierKey } from "../../../hooks/use-special-keys"; interface SpecialKeysStripProps { onSend: (data: string) => void; diff --git a/apps/web/src/components/features/terminal/terminal.tsx b/apps/web/src/components/features/terminal/terminal.tsx index 4d6d491..289ef59 100644 --- a/apps/web/src/components/features/terminal/terminal.tsx +++ b/apps/web/src/components/features/terminal/terminal.tsx @@ -14,7 +14,7 @@ import "xterm/css/xterm.css"; import { applyModifierToChar, type ModifierKey, -} from "../hooks/use-special-keys"; +} from "../../../hooks/use-special-keys"; export interface TerminalProps { instanceId: string; diff --git a/apps/web/src/components/features/tool/instance-list.tsx b/apps/web/src/components/features/tool/instance-list.tsx index f990254..527b427 100644 --- a/apps/web/src/components/features/tool/instance-list.tsx +++ b/apps/web/src/components/features/tool/instance-list.tsx @@ -1,19 +1,19 @@ import { useCallback, useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; -import { Icon } from "./icon"; -import type { ToolInstance } from "../api/sessions"; +import { Icon } from "../../icon"; +import type { ToolInstance } from "../../../api/sessions"; import { deleteInstance, listInstances, restartInstance, startInstance, stopInstance, -} from "../api/sessions"; -import type { ToolType } from "../api/tool-types"; -import { CreateSessionForm } from "./create-session-form"; -import { listConfigProfiles, type ConfigProfile } from "../api/config_profiles"; -import { listSSHKeys, type SSHKey } from "../api/ssh-keys"; -import { useEventContext } from "../state/events"; +} from "../../../api/sessions"; +import type { ToolType } from "../../../api/tool-types"; +import { CreateSessionForm } from "../session/create-session-form"; +import { listConfigProfiles, type ConfigProfile } from "../../../api/config_profiles"; +import { listSSHKeys, type SSHKey } from "../../../api/ssh-keys"; +import { useEventContext } from "../../../state/events"; const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? "http://localhost:8000"; diff --git a/apps/web/src/components/features/tool/manifest-editor.tsx b/apps/web/src/components/features/tool/manifest-editor.tsx index 11a3111..3d33196 100644 --- a/apps/web/src/components/features/tool/manifest-editor.tsx +++ b/apps/web/src/components/features/tool/manifest-editor.tsx @@ -1,10 +1,10 @@ import { useState, useEffect, useCallback, useRef } from "react"; -import { Icon } from "./icon"; -import { extractErrorMessage } from "../utils/errors"; +import { Icon } from "../../icon"; +import { extractErrorMessage } from "../../../utils/errors"; import { compileToolDefinition, type ToolDefinitionManifest, -} from "../api/tool_definitions"; +} from "../../../api/tool_definitions"; interface PackageEntry { name: string; diff --git a/apps/web/src/components/features/tool/start-tool-fab.tsx b/apps/web/src/components/features/tool/start-tool-fab.tsx index 36e0bcc..f28521a 100644 --- a/apps/web/src/components/features/tool/start-tool-fab.tsx +++ b/apps/web/src/components/features/tool/start-tool-fab.tsx @@ -1,10 +1,10 @@ /** Floating action button to start a tool from any page. */ import { useState } from "react"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; import { ToolStarter } from "./tool-starter"; -import type { Workspace } from "../types/workspace"; -import { listAllWorkspaces } from "../api/workspaces"; +import type { Workspace } from "../../../types/workspace"; +import { listAllWorkspaces } from "../../../api/workspaces"; export function StartToolFAB() { const [open, setOpen] = useState(false); diff --git a/apps/web/src/components/features/tool/start-tool-modal.tsx b/apps/web/src/components/features/tool/start-tool-modal.tsx index dc68c5e..3847aab 100644 --- a/apps/web/src/components/features/tool/start-tool-modal.tsx +++ b/apps/web/src/components/features/tool/start-tool-modal.tsx @@ -1,10 +1,10 @@ /** Modal for starting a tool on a workspace. */ import { useState } from "react"; -import { Icon } from "./icon"; -import { listToolTypes, type ToolType } from "../api/tool-types"; -import { useAsyncData } from "../hooks/use-async-data"; -import type { Workspace } from "../types/workspace"; +import { Icon } from "../../icon"; +import { listToolTypes, type ToolType } from "../../../api/tool-types"; +import { useAsyncData } from "../../../hooks/use-async-data"; +import type { Workspace } from "../../../types/workspace"; export interface StartToolModalProps { workspace: Workspace; diff --git a/apps/web/src/components/features/tool/tool-starter.tsx b/apps/web/src/components/features/tool/tool-starter.tsx index cec6188..a6102f2 100644 --- a/apps/web/src/components/features/tool/tool-starter.tsx +++ b/apps/web/src/components/features/tool/tool-starter.tsx @@ -1,12 +1,12 @@ /** Unified tool starter — workspace-first, fetches real tool types and config profiles. */ import { useState, useEffect, useCallback } from "react"; -import { Icon } from "./icon"; -import { listToolTypes, type ToolType } from "../api/tool-types"; -import { listConfigProfiles, type ConfigProfile } from "../api/config_profiles"; -import { listSSHKeys, type SSHKey } from "../api/ssh-keys"; -import type { Workspace } from "../types/workspace"; -import type { ToolInstance } from "../api/sessions"; +import { Icon } from "../../icon"; +import { listToolTypes, type ToolType } from "../../../api/tool-types"; +import { listConfigProfiles, type ConfigProfile } from "../../../api/config_profiles"; +import { listSSHKeys, type SSHKey } from "../../../api/ssh-keys"; +import type { Workspace } from "../../../types/workspace"; +import type { ToolInstance } from "../../../api/sessions"; export interface ToolStarterProps { workspace: Workspace; @@ -114,7 +114,7 @@ export function ToolStarter({ setStarting(true); setError(null); try { - const { createInstance, startInstance } = await import("../api/sessions"); + const { createInstance, startInstance } = await import("../../../api/sessions"); const instance = await createInstance( workspace.project_id, workspace.repo_id, diff --git a/apps/web/src/components/features/tool/tools-bottom-sheet.tsx b/apps/web/src/components/features/tool/tools-bottom-sheet.tsx index 8db2630..f262217 100644 --- a/apps/web/src/components/features/tool/tools-bottom-sheet.tsx +++ b/apps/web/src/components/features/tool/tools-bottom-sheet.tsx @@ -1,5 +1,5 @@ import { useLocation, useNavigate } from "react-router-dom"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface ToolsBottomSheetProps { isOpen: boolean; diff --git a/apps/web/src/components/features/workspace/workspace-card.tsx b/apps/web/src/components/features/workspace/workspace-card.tsx index 79e86fe..627eb5f 100644 --- a/apps/web/src/components/features/workspace/workspace-card.tsx +++ b/apps/web/src/components/features/workspace/workspace-card.tsx @@ -1,9 +1,9 @@ /** Card component for displaying a workspace. */ import { Link } from "react-router-dom"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; import { WorkspaceInstanceChips } from "./workspace-instance-chips"; -import type { Workspace } from "../types/workspace"; +import type { Workspace } from "../../../types/workspace"; export interface WorkspaceCardProps { workspace: Workspace; diff --git a/apps/web/src/components/features/workspace/workspace-create-form.tsx b/apps/web/src/components/features/workspace/workspace-create-form.tsx index 53e3265..5b1d22e 100644 --- a/apps/web/src/components/features/workspace/workspace-create-form.tsx +++ b/apps/web/src/components/features/workspace/workspace-create-form.tsx @@ -1,13 +1,13 @@ /** Unified workspace creation form with project/repo/branch selectors. */ import { useState, useEffect, useCallback } from "react"; -import { Icon } from "./icon"; -import { listProjects } from "../api/projects"; -import { listRepositories } from "../api/git-repositories"; -import { createWorkspaceTopLevel } from "../api/workspaces"; -import { useGitRepo } from "../hooks/use-git-repo"; -import type { ProjectWithRepos } from "../types"; -import type { GitRepository } from "../api/git-repositories"; +import { Icon } from "../../icon"; +import { listProjects } from "../../../api/projects"; +import { listRepositories } from "../../../api/git-repositories"; +import { createWorkspaceTopLevel } from "../../../api/workspaces"; +import { useGitRepo } from "../../../hooks/use-git-repo"; +import type { ProjectWithRepos } from "../../../types"; +import type { GitRepository } from "../../../api/git-repositories"; export interface WorkspaceCreateFormProps { /** Called after successful creation. */ diff --git a/apps/web/src/components/features/workspace/workspace-header.tsx b/apps/web/src/components/features/workspace/workspace-header.tsx index 23c263d..a05a37d 100644 --- a/apps/web/src/components/features/workspace/workspace-header.tsx +++ b/apps/web/src/components/features/workspace/workspace-header.tsx @@ -1,5 +1,5 @@ import { Link } from "react-router-dom"; -import { Icon } from "./icon"; +import { Icon } from "../../icon"; interface WorkspaceHeaderProps { project: { diff --git a/apps/web/src/components/features/workspace/workspace-instance-chips.tsx b/apps/web/src/components/features/workspace/workspace-instance-chips.tsx index fa70a46..27ee546 100644 --- a/apps/web/src/components/features/workspace/workspace-instance-chips.tsx +++ b/apps/web/src/components/features/workspace/workspace-instance-chips.tsx @@ -1,8 +1,8 @@ /** Small component showing running instances for a workspace. */ import { useEffect, useState } from "react"; -import { listWorkspaceInstances } from "../api/workspace-instances"; -import type { ToolInstance } from "../api/sessions"; +import { listWorkspaceInstances } from "../../../api/workspace-instances"; +import type { ToolInstance } from "../../../api/sessions"; interface WorkspaceInstanceChipsProps { workspaceId: string;