mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 09:33:10 -07:00
using libraries to simplify complex app code, fully rely on mantine theming
This commit is contained in:
parent
95dafe66f8
commit
d298203338
14 changed files with 659 additions and 500 deletions
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "friendly-kobold",
|
||||
"productName": "Friendly Kobold",
|
||||
"version": "0.4.1",
|
||||
"version": "0.5.0",
|
||||
"description": "A modern Electron shell for KoboldCpp",
|
||||
"main": "out/main/index.js",
|
||||
"homepage": "./",
|
||||
|
|
@ -82,10 +82,14 @@
|
|||
"@mantine/core": "^8.2.5",
|
||||
"@mantine/hooks": "^8.2.5",
|
||||
"ansi-to-html": "^0.7.2",
|
||||
"execa": "^9.6.0",
|
||||
"got": "^14.4.7",
|
||||
"lucide-react": "^0.540.0",
|
||||
"react": "^19.1.1",
|
||||
"react-dom": "^19.1.1",
|
||||
"systeminformation": "^5.27.7",
|
||||
"winston": "^3.17.0",
|
||||
"winston-daily-rotate-file": "^5.0.0",
|
||||
"zustand": "^5.0.8"
|
||||
},
|
||||
"build": {
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@ import {
|
|||
Select,
|
||||
Title,
|
||||
Image,
|
||||
useMantineColorScheme,
|
||||
Tooltip,
|
||||
} from '@mantine/core';
|
||||
import { Settings, ArrowLeft } from 'lucide-react';
|
||||
import { StyledTooltip } from '@/components/StyledTooltip';
|
||||
import { soundAssets, playSound, initializeAudio } from '@/utils';
|
||||
import iconUrl from '/icon.png';
|
||||
|
||||
|
|
@ -37,7 +36,6 @@ export const AppHeader = ({
|
|||
const [logoClickCount, setLogoClickCount] = useState(0);
|
||||
const [isElephantMode, setIsElephantMode] = useState(false);
|
||||
const [isMouseSqueaking, setIsMouseSqueaking] = useState(false);
|
||||
const { colorScheme } = useMantineColorScheme();
|
||||
|
||||
const handleLogoClick = async () => {
|
||||
await initializeAudio();
|
||||
|
|
@ -66,16 +64,7 @@ export const AppHeader = ({
|
|||
};
|
||||
|
||||
return (
|
||||
<AppShell.Header
|
||||
style={{
|
||||
borderBottom: `1px solid var(--mantine-color-${colorScheme === 'dark' ? 'dark-4' : 'gray-3'})`,
|
||||
background:
|
||||
colorScheme === 'dark'
|
||||
? 'var(--mantine-color-dark-7)'
|
||||
: 'var(--mantine-color-white)',
|
||||
transition: 'all 200ms ease',
|
||||
}}
|
||||
>
|
||||
<AppShell.Header>
|
||||
<Group h="100%" px="md" justify="space-between" align="center">
|
||||
<div style={{ minWidth: '100px' }}>
|
||||
{currentScreen === 'interface' ? (
|
||||
|
|
@ -152,7 +141,7 @@ export const AppHeader = ({
|
|||
justifyContent: 'flex-end',
|
||||
}}
|
||||
>
|
||||
<StyledTooltip label="Settings" position="bottom">
|
||||
<Tooltip label="Settings" position="bottom">
|
||||
<ActionIcon
|
||||
variant="subtle"
|
||||
color="gray"
|
||||
|
|
@ -165,7 +154,7 @@ export const AppHeader = ({
|
|||
>
|
||||
<Settings style={{ width: rem(20), height: rem(20) }} />
|
||||
</ActionIcon>
|
||||
</StyledTooltip>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</Group>
|
||||
</AppShell.Header>
|
||||
|
|
|
|||
|
|
@ -106,8 +106,11 @@ export const DownloadCard = ({
|
|||
withBorder
|
||||
radius="sm"
|
||||
padding="sm"
|
||||
bd={isCurrent ? '2px solid var(--mantine-color-blue-filled)' : undefined}
|
||||
bg={isCurrent ? 'var(--mantine-color-blue-light)' : undefined}
|
||||
{...(isCurrent && {
|
||||
c: 'blue',
|
||||
bg: 'blue.0',
|
||||
bd: '2px solid blue',
|
||||
})}
|
||||
>
|
||||
<Group justify="space-between" align="center">
|
||||
<div className={styles.flex1}>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import { ActionIcon } from '@mantine/core';
|
||||
import { ActionIcon, Tooltip } from '@mantine/core';
|
||||
import { Info } from 'lucide-react';
|
||||
import { StyledTooltip } from '@/components/StyledTooltip';
|
||||
|
||||
interface InfoTooltipProps {
|
||||
label: string;
|
||||
|
|
@ -13,9 +12,9 @@ export const InfoTooltip = ({
|
|||
multiline = true,
|
||||
width = 300,
|
||||
}: InfoTooltipProps) => (
|
||||
<StyledTooltip label={label} multiline={multiline} w={width}>
|
||||
<Tooltip label={label} multiline={multiline} w={width}>
|
||||
<ActionIcon variant="subtle" size="xs" color="gray">
|
||||
<Info size={14} />
|
||||
</ActionIcon>
|
||||
</StyledTooltip>
|
||||
</Tooltip>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
import type { ReactNode } from 'react';
|
||||
import { Tooltip, useMantineColorScheme } from '@mantine/core';
|
||||
import type { TooltipProps } from '@mantine/core';
|
||||
|
||||
interface StyledTooltipProps extends Omit<TooltipProps, 'styles' | 'color'> {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
export const StyledTooltip = ({ children, ...props }: StyledTooltipProps) => {
|
||||
const { colorScheme } = useMantineColorScheme();
|
||||
const isDark = colorScheme === 'dark';
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
withArrow
|
||||
color={isDark ? 'dark' : 'gray'}
|
||||
styles={{
|
||||
tooltip: {
|
||||
backgroundColor: isDark
|
||||
? 'var(--mantine-color-dark-6)'
|
||||
: 'var(--mantine-color-gray-1)',
|
||||
color: isDark
|
||||
? 'var(--mantine-color-gray-0)'
|
||||
: 'var(--mantine-color-dark-7)',
|
||||
border: isDark
|
||||
? '1px solid var(--mantine-color-dark-4)'
|
||||
: '1px solid var(--mantine-color-gray-3)',
|
||||
},
|
||||
}}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
|
@ -6,7 +6,6 @@ import {
|
|||
Button,
|
||||
Card,
|
||||
Loader,
|
||||
useMantineColorScheme,
|
||||
Anchor,
|
||||
Progress,
|
||||
} from '@mantine/core';
|
||||
|
|
@ -36,7 +35,6 @@ export const UpdateAvailableModal = ({
|
|||
downloadProgress = 0,
|
||||
}: UpdateAvailableModalProps) => {
|
||||
const [isUpdating, setIsUpdating] = useState(false);
|
||||
const { colorScheme } = useMantineColorScheme();
|
||||
|
||||
const handleUpdate = async () => {
|
||||
try {
|
||||
|
|
@ -61,19 +59,7 @@ export const UpdateAvailableModal = ({
|
|||
closeOnEscape={!isDownloading && !isUpdating}
|
||||
>
|
||||
<Stack gap="md">
|
||||
<Card
|
||||
withBorder
|
||||
radius="md"
|
||||
p="md"
|
||||
bg={colorScheme === 'dark' ? 'dark.6' : 'gray.0'}
|
||||
style={{
|
||||
borderColor:
|
||||
colorScheme === 'dark'
|
||||
? 'var(--mantine-color-orange-7)'
|
||||
: 'var(--mantine-color-orange-3)',
|
||||
borderWidth: '2px',
|
||||
}}
|
||||
>
|
||||
<Card withBorder radius="md" p="md" bd="2px solid orange">
|
||||
<Stack gap="xs">
|
||||
<Group gap="md" align="center">
|
||||
<div>
|
||||
|
|
@ -85,11 +71,7 @@ export const UpdateAvailableModal = ({
|
|||
</Text>
|
||||
</div>
|
||||
|
||||
<Text
|
||||
size="lg"
|
||||
c={colorScheme === 'dark' ? 'orange.4' : 'orange.6'}
|
||||
fw={500}
|
||||
>
|
||||
<Text size="lg" c="orange" fw={500}>
|
||||
→
|
||||
</Text>
|
||||
|
||||
|
|
@ -97,11 +79,7 @@ export const UpdateAvailableModal = ({
|
|||
<Text size="xs" c="dimmed">
|
||||
Available Version
|
||||
</Text>
|
||||
<Text
|
||||
fw={500}
|
||||
size="sm"
|
||||
c={colorScheme === 'dark' ? 'orange.4' : 'orange.6'}
|
||||
>
|
||||
<Text fw={500} size="sm" c="orange">
|
||||
{availableUpdate.version}
|
||||
</Text>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import { ReactNode } from 'react';
|
||||
import { Group, useMantineTheme, List } from '@mantine/core';
|
||||
import { Group, useMantineTheme, List, Tooltip } from '@mantine/core';
|
||||
import { AlertTriangle, Info } from 'lucide-react';
|
||||
import { StyledTooltip } from '@/components/StyledTooltip';
|
||||
|
||||
interface WarningItem {
|
||||
type: 'warning' | 'info';
|
||||
|
|
@ -26,7 +25,7 @@ export const WarningDisplay = ({ warnings, children }: WarningDisplayProps) => {
|
|||
return (
|
||||
<Group gap="xs" align="center">
|
||||
{warningMessages.length > 0 && (
|
||||
<StyledTooltip
|
||||
<Tooltip
|
||||
label={
|
||||
warningMessages.length === 1 ? (
|
||||
warningMessages[0].message
|
||||
|
|
@ -42,10 +41,10 @@ export const WarningDisplay = ({ warnings, children }: WarningDisplayProps) => {
|
|||
maw={320}
|
||||
>
|
||||
<AlertTriangle size={18} color={theme.colors.orange[6]} />
|
||||
</StyledTooltip>
|
||||
</Tooltip>
|
||||
)}
|
||||
{infoMessages.length > 0 && (
|
||||
<StyledTooltip
|
||||
<Tooltip
|
||||
label={
|
||||
infoMessages.length === 1 ? (
|
||||
infoMessages[0].message
|
||||
|
|
@ -61,7 +60,7 @@ export const WarningDisplay = ({ warnings, children }: WarningDisplayProps) => {
|
|||
maw={320}
|
||||
>
|
||||
<Info size={18} color={theme.colors.blue[6]} />
|
||||
</StyledTooltip>
|
||||
</Tooltip>
|
||||
)}
|
||||
{children}
|
||||
</Group>
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ export const TerminalTab = ({ onServerReady }: TerminalTabProps) => {
|
|||
flexDirection: 'column',
|
||||
backgroundColor:
|
||||
colorScheme === 'dark'
|
||||
? 'var(--mantine-color-dark-8)'
|
||||
? 'var(--mantine-color-dark-filled)'
|
||||
: 'var(--mantine-color-gray-0)',
|
||||
borderRadius: 'inherit',
|
||||
position: 'relative',
|
||||
|
|
@ -149,7 +149,7 @@ export const TerminalTab = ({ onServerReady }: TerminalTabProps) => {
|
|||
color:
|
||||
colorScheme === 'dark'
|
||||
? 'var(--mantine-color-gray-0)'
|
||||
: 'var(--mantine-color-dark-9)',
|
||||
: 'var(--mantine-color-dark-filled)',
|
||||
whiteSpace: 'pre-wrap',
|
||||
wordBreak: 'break-word',
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import { Stack, Text, Group, SegmentedControl, rem } from '@mantine/core';
|
||||
import { useMantineColorScheme } from '@mantine/core';
|
||||
import { Sun, Moon, Monitor } from 'lucide-react';
|
||||
import { useTheme, type ThemeMode } from '@/contexts/ThemeContext';
|
||||
|
||||
export const AppearanceTab = () => {
|
||||
const { themeMode, setThemeMode } = useTheme();
|
||||
const { colorScheme, setColorScheme } = useMantineColorScheme();
|
||||
|
||||
return (
|
||||
<Stack gap="lg" h="100%">
|
||||
|
|
@ -16,8 +16,23 @@ export const AppearanceTab = () => {
|
|||
</Text>
|
||||
<SegmentedControl
|
||||
fullWidth
|
||||
value={themeMode}
|
||||
onChange={(value) => setThemeMode(value as ThemeMode)}
|
||||
value={colorScheme}
|
||||
onChange={(value) =>
|
||||
setColorScheme(value as 'light' | 'dark' | 'auto')
|
||||
}
|
||||
styles={(theme) => ({
|
||||
indicator: {
|
||||
backgroundColor:
|
||||
colorScheme === 'dark'
|
||||
? theme.colors.dark[5]
|
||||
: theme.colors.gray[2],
|
||||
border: `1px solid ${
|
||||
colorScheme === 'dark'
|
||||
? theme.colors.dark[4]
|
||||
: theme.colors.gray[4]
|
||||
}`,
|
||||
},
|
||||
})}
|
||||
data={[
|
||||
{
|
||||
label: (
|
||||
|
|
@ -44,7 +59,7 @@ export const AppearanceTab = () => {
|
|||
<span>System</span>
|
||||
</Group>
|
||||
),
|
||||
value: 'system',
|
||||
value: 'auto',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,82 +0,0 @@
|
|||
import {
|
||||
createContext,
|
||||
useContext,
|
||||
useEffect,
|
||||
useState,
|
||||
ReactNode,
|
||||
} from 'react';
|
||||
import { MantineColorScheme } from '@mantine/core';
|
||||
|
||||
export type ThemeMode = 'light' | 'dark' | 'system';
|
||||
|
||||
interface ThemeContextType {
|
||||
themeMode: ThemeMode;
|
||||
effectiveTheme: MantineColorScheme;
|
||||
setThemeMode: (mode: ThemeMode) => void;
|
||||
}
|
||||
|
||||
const ThemeContext = createContext<ThemeContextType | undefined>(undefined);
|
||||
|
||||
const THEME_STORAGE_KEY = 'friendly-kobold-theme';
|
||||
|
||||
// eslint-disable-next-line react-refresh/only-export-components
|
||||
export const useTheme = () => {
|
||||
const context = useContext(ThemeContext);
|
||||
if (context === undefined) {
|
||||
throw new Error('useTheme must be used within a ThemeProvider');
|
||||
}
|
||||
return context;
|
||||
};
|
||||
|
||||
const getSystemTheme = (): MantineColorScheme => {
|
||||
if (typeof window !== 'undefined' && window.matchMedia) {
|
||||
return window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
? 'dark'
|
||||
: 'light';
|
||||
}
|
||||
return 'light';
|
||||
};
|
||||
|
||||
const getStoredTheme = (): ThemeMode => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const stored = localStorage.getItem(THEME_STORAGE_KEY);
|
||||
if (stored === 'light' || stored === 'dark' || stored === 'system') {
|
||||
return stored;
|
||||
}
|
||||
}
|
||||
return 'system';
|
||||
};
|
||||
|
||||
interface ThemeProviderProps {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
export const ThemeProvider = ({ children }: ThemeProviderProps) => {
|
||||
const [themeMode, setThemeModeState] = useState<ThemeMode>(getStoredTheme);
|
||||
const [systemTheme, setSystemTheme] =
|
||||
useState<MantineColorScheme>(getSystemTheme);
|
||||
|
||||
const effectiveTheme: MantineColorScheme =
|
||||
themeMode === 'system' ? systemTheme : themeMode;
|
||||
|
||||
const setThemeMode = (mode: ThemeMode) => {
|
||||
setThemeModeState(mode);
|
||||
localStorage.setItem(THEME_STORAGE_KEY, mode);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
const handleChange = (e: MediaQueryListEvent) => {
|
||||
setSystemTheme(e.matches ? 'dark' : 'light');
|
||||
};
|
||||
|
||||
mediaQuery.addEventListener('change', handleChange);
|
||||
return () => mediaQuery.removeEventListener('change', handleChange);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ThemeContext.Provider value={{ themeMode, effectiveTheme, setThemeMode }}>
|
||||
{children}
|
||||
</ThemeContext.Provider>
|
||||
);
|
||||
};
|
||||
20
src/main.tsx
20
src/main.tsx
|
|
@ -1,27 +1,13 @@
|
|||
/* eslint-disable react-refresh/only-export-components */
|
||||
import { StrictMode } from 'react';
|
||||
import { createRoot } from 'react-dom/client';
|
||||
import { MantineProvider } from '@mantine/core';
|
||||
import { App } from '@/App.tsx';
|
||||
import { ThemeProvider, useTheme } from '@/contexts/ThemeContext';
|
||||
import '@/styles/index.css';
|
||||
|
||||
const AppWithTheme = () => {
|
||||
const { effectiveTheme } = useTheme();
|
||||
|
||||
return (
|
||||
<MantineProvider
|
||||
forceColorScheme={effectiveTheme === 'auto' ? undefined : effectiveTheme}
|
||||
>
|
||||
<App />
|
||||
</MantineProvider>
|
||||
);
|
||||
};
|
||||
|
||||
createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<ThemeProvider>
|
||||
<AppWithTheme />
|
||||
</ThemeProvider>
|
||||
<MantineProvider defaultColorScheme="auto">
|
||||
<App />
|
||||
</MantineProvider>
|
||||
</StrictMode>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ import {
|
|||
} from 'fs';
|
||||
import { rm } from 'fs/promises';
|
||||
import { dialog } from 'electron';
|
||||
import { execa } from 'execa';
|
||||
import { got } from 'got';
|
||||
import { pipeline } from 'stream/promises';
|
||||
import { GitHubService } from '@/main/services/GitHubService';
|
||||
import { ConfigManager } from '@/main/managers/ConfigManager';
|
||||
import { LogManager } from '@/main/managers/LogManager';
|
||||
|
|
@ -102,45 +105,24 @@ export class KoboldCppManager {
|
|||
}
|
||||
}
|
||||
|
||||
const response = await fetch(asset.browser_download_url);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
const totalBytes = asset.size;
|
||||
let downloadedBytes = 0;
|
||||
|
||||
const reader = response.body?.getReader();
|
||||
if (!reader) {
|
||||
throw new Error('Failed to get response reader');
|
||||
}
|
||||
|
||||
const writer = createWriteStream(tempPackedFilePath);
|
||||
let downloadedBytes = 0;
|
||||
const totalBytes = asset.size;
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
|
||||
if (done) break;
|
||||
|
||||
downloadedBytes += value.length;
|
||||
|
||||
writer.write(value);
|
||||
|
||||
if (onProgress && totalBytes > 0) {
|
||||
onProgress((downloadedBytes / totalBytes) * 100);
|
||||
}
|
||||
}
|
||||
|
||||
writer.end();
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
writer.on('finish', () => resolve());
|
||||
writer.on('error', reject);
|
||||
});
|
||||
} finally {
|
||||
reader.releaseLock();
|
||||
await pipeline(
|
||||
got
|
||||
.stream(asset.browser_download_url)
|
||||
.on('downloadProgress', (progress) => {
|
||||
downloadedBytes = progress.transferred;
|
||||
if (onProgress && totalBytes > 0) {
|
||||
onProgress((downloadedBytes / totalBytes) * 100);
|
||||
}
|
||||
}),
|
||||
writer
|
||||
);
|
||||
} catch (error) {
|
||||
throw new Error(`Download failed: ${(error as Error).message}`);
|
||||
}
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
|
|
@ -190,48 +172,21 @@ export class KoboldCppManager {
|
|||
packedPath: string,
|
||||
unpackDir: string
|
||||
): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const unpackProcess = spawn(packedPath, ['--unpack', unpackDir], {
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
try {
|
||||
await execa(packedPath, ['--unpack', unpackDir], {
|
||||
timeout: 30000,
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
});
|
||||
|
||||
let output = '';
|
||||
let errorOutput = '';
|
||||
|
||||
unpackProcess.stdout?.on('data', (data) => {
|
||||
output += data.toString();
|
||||
});
|
||||
|
||||
unpackProcess.stderr?.on('data', (data) => {
|
||||
errorOutput += data.toString();
|
||||
});
|
||||
|
||||
unpackProcess.on('close', (code) => {
|
||||
if (code === 0) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(
|
||||
new Error(
|
||||
`Unpack failed with code ${code}: ${errorOutput || output}`
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
unpackProcess.on('error', (error) => {
|
||||
reject(error);
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
try {
|
||||
unpackProcess.kill('SIGTERM');
|
||||
} catch {
|
||||
void 0;
|
||||
}
|
||||
reject(new Error('Unpack process timed out'));
|
||||
}, 30000);
|
||||
});
|
||||
} catch (error) {
|
||||
const execaError = error as {
|
||||
stderr?: string;
|
||||
stdout?: string;
|
||||
message: string;
|
||||
};
|
||||
const errorMessage =
|
||||
execaError.stderr || execaError.stdout || execaError.message;
|
||||
throw new Error(`Unpack failed: ${errorMessage}`);
|
||||
}
|
||||
}
|
||||
|
||||
private getLauncherPath(unpackedDir: string): string | null {
|
||||
|
|
@ -501,72 +456,40 @@ export class KoboldCppManager {
|
|||
}
|
||||
|
||||
async getVersionFromBinary(binaryPath: string): Promise<string | null> {
|
||||
return new Promise((resolve) => {
|
||||
try {
|
||||
if (!existsSync(binaryPath)) {
|
||||
resolve(null);
|
||||
return;
|
||||
}
|
||||
|
||||
const process = spawn(binaryPath, ['--version'], {
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
timeout: 10000,
|
||||
detached: false,
|
||||
});
|
||||
|
||||
let output = '';
|
||||
let errorOutput = '';
|
||||
|
||||
process.stdout.on('data', (data) => {
|
||||
output += data.toString();
|
||||
});
|
||||
|
||||
process.stderr.on('data', (data) => {
|
||||
errorOutput += data.toString();
|
||||
});
|
||||
|
||||
process.on('close', () => {
|
||||
const allOutput = (output + errorOutput).trim();
|
||||
|
||||
if (/^\d+\.\d+/.test(allOutput)) {
|
||||
const versionParts = allOutput.split(/\s+/)[0];
|
||||
if (versionParts && /^\d+\.\d+/.test(versionParts)) {
|
||||
resolve(versionParts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const lines = allOutput.split('\n');
|
||||
for (const line of lines) {
|
||||
const trimmedLine = line.trim();
|
||||
if (/^\d+\.\d+/.test(trimmedLine)) {
|
||||
const versionPart = trimmedLine.split(/\s+/)[0];
|
||||
if (versionPart) {
|
||||
resolve(versionPart);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resolve(null);
|
||||
});
|
||||
|
||||
process.on('error', () => {
|
||||
resolve(null);
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
try {
|
||||
process.kill('SIGTERM');
|
||||
} catch {
|
||||
void 0;
|
||||
}
|
||||
resolve(null);
|
||||
}, 10000);
|
||||
} catch {
|
||||
resolve(null);
|
||||
try {
|
||||
if (!existsSync(binaryPath)) {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
const result = await execa(binaryPath, ['--version'], {
|
||||
timeout: 10000,
|
||||
stdio: ['ignore', 'pipe', 'pipe'],
|
||||
});
|
||||
|
||||
const allOutput = (result.stdout + result.stderr).trim();
|
||||
|
||||
if (/^\d+\.\d+/.test(allOutput)) {
|
||||
const versionParts = allOutput.split(/\s+/)[0];
|
||||
if (versionParts && /^\d+\.\d+/.test(versionParts)) {
|
||||
return versionParts;
|
||||
}
|
||||
}
|
||||
|
||||
const lines = allOutput.split('\n');
|
||||
for (const line of lines) {
|
||||
const trimmedLine = line.trim();
|
||||
if (/^\d+\.\d+/.test(trimmedLine)) {
|
||||
const versionPart = trimmedLine.split(/\s+/)[0];
|
||||
if (versionPart) {
|
||||
return versionPart;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
getCurrentInstallDir() {
|
||||
|
|
@ -733,41 +656,25 @@ export class KoboldCppManager {
|
|||
};
|
||||
}
|
||||
|
||||
const totalBytes = rocmInfo.size;
|
||||
let downloadedBytes = 0;
|
||||
|
||||
const reader = response.body?.getReader();
|
||||
if (!reader) {
|
||||
return {
|
||||
success: false,
|
||||
error: 'Failed to get response reader',
|
||||
};
|
||||
}
|
||||
|
||||
const writer = createWriteStream(tempPackedFilePath);
|
||||
let downloadedBytes = 0;
|
||||
const totalBytes = rocmInfo.size;
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
|
||||
if (done) break;
|
||||
|
||||
downloadedBytes += value.length;
|
||||
writer.write(value);
|
||||
|
||||
if (onProgress && totalBytes > 0) {
|
||||
onProgress((downloadedBytes / totalBytes) * 100);
|
||||
}
|
||||
}
|
||||
|
||||
writer.end();
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
writer.on('finish', resolve);
|
||||
writer.on('error', reject);
|
||||
});
|
||||
} finally {
|
||||
reader.releaseLock();
|
||||
await pipeline(
|
||||
got.stream(rocmInfo.url).on('downloadProgress', (progress) => {
|
||||
downloadedBytes = progress.transferred;
|
||||
if (onProgress && totalBytes > 0) {
|
||||
onProgress((downloadedBytes / totalBytes) * 100);
|
||||
}
|
||||
}),
|
||||
writer
|
||||
);
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
error: `Download failed: ${(error as Error).message}`,
|
||||
};
|
||||
}
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
|
|
|
|||
|
|
@ -1,147 +1,53 @@
|
|||
/* eslint-disable no-console */
|
||||
import { app } from 'electron';
|
||||
import { join } from 'path';
|
||||
import { appendFile, existsSync, mkdirSync, statSync } from 'fs';
|
||||
import winston from 'winston';
|
||||
import 'winston-daily-rotate-file';
|
||||
|
||||
export class LogManager {
|
||||
private logFilePath: string;
|
||||
private maxLogSize = 10 * 1024 * 1024;
|
||||
private maxLogFiles = 5;
|
||||
private writeQueue: string[] = [];
|
||||
private isWriting = false;
|
||||
private logger: winston.Logger;
|
||||
|
||||
constructor() {
|
||||
const logsDir = join(app.getPath('userData'), 'logs');
|
||||
|
||||
if (!existsSync(logsDir)) {
|
||||
mkdirSync(logsDir, { recursive: true });
|
||||
}
|
||||
this.logger = winston.createLogger({
|
||||
level: process.env.NODE_ENV === 'development' ? 'debug' : 'info',
|
||||
format: winston.format.combine(
|
||||
winston.format.timestamp(),
|
||||
winston.format.printf(({ timestamp, level, message, error }) => {
|
||||
const processInfo = `[${process.type || 'unknown'}:${process.pid}]`;
|
||||
let logEntry = `${timestamp} ${processInfo} [${level.toUpperCase()}] ${message}`;
|
||||
|
||||
this.logFilePath = join(logsDir, 'friendly-kobold.log');
|
||||
this.initializeLogging();
|
||||
}
|
||||
|
||||
private initializeLogging() {
|
||||
this.rotateLogsIfNeeded();
|
||||
}
|
||||
|
||||
private rotateLogsIfNeeded() {
|
||||
if (!existsSync(this.logFilePath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const stats = statSync(this.logFilePath);
|
||||
if (stats.size >= this.maxLogSize) {
|
||||
this.rotateLogs();
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to check log file size:', error);
|
||||
}
|
||||
}
|
||||
|
||||
private rotateLogs() {
|
||||
const logsDir = join(app.getPath('userData'), 'logs');
|
||||
const baseName = 'friendly-kobold';
|
||||
|
||||
try {
|
||||
for (let i = this.maxLogFiles - 1; i >= 1; i--) {
|
||||
const oldPath = join(logsDir, `${baseName}.${i}.log`);
|
||||
const newPath = join(logsDir, `${baseName}.${i + 1}.log`);
|
||||
|
||||
if (existsSync(oldPath)) {
|
||||
if (i === this.maxLogFiles - 1) {
|
||||
try {
|
||||
require('fs').unlinkSync(oldPath);
|
||||
} catch (error) {
|
||||
console.warn(`Failed to delete old log file: ${oldPath}`, error);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
require('fs').renameSync(oldPath, newPath);
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
`Failed to rotate log file: ${oldPath} -> ${newPath}`,
|
||||
error
|
||||
);
|
||||
if (error && error instanceof Error) {
|
||||
logEntry += `\n Error: ${error.message}`;
|
||||
if (error.stack) {
|
||||
logEntry += `\n Stack: ${error.stack}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const rotatedPath = join(logsDir, `${baseName}.1.log`);
|
||||
try {
|
||||
require('fs').renameSync(this.logFilePath, rotatedPath);
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
`Failed to rotate current log file: ${this.logFilePath} -> ${rotatedPath}`,
|
||||
error
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to rotate logs:', error);
|
||||
}
|
||||
}
|
||||
return logEntry;
|
||||
})
|
||||
),
|
||||
transports: [
|
||||
new winston.transports.DailyRotateFile({
|
||||
filename: join(logsDir, 'friendly-kobold-%DATE%.log'),
|
||||
datePattern: 'YYYY-MM-DD',
|
||||
maxSize: '10m',
|
||||
maxFiles: '5d',
|
||||
createSymlink: true,
|
||||
symlinkName: 'friendly-kobold.log',
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
private formatLogEntry(
|
||||
level: string,
|
||||
message: string,
|
||||
error?: Error
|
||||
): string {
|
||||
const timestamp = new Date().toISOString();
|
||||
const processInfo = `[${process.type || 'unknown'}:${process.pid}]`;
|
||||
|
||||
let logEntry = `${timestamp} ${processInfo} [${level}] ${message}`;
|
||||
|
||||
if (error) {
|
||||
logEntry += `\n Error: ${error.message}`;
|
||||
if (error.stack) {
|
||||
logEntry += `\n Stack: ${error.stack}`;
|
||||
}
|
||||
}
|
||||
|
||||
return logEntry + '\n';
|
||||
}
|
||||
|
||||
private writeToLog(entry: string) {
|
||||
this.writeQueue.push(entry);
|
||||
this.processWriteQueue();
|
||||
}
|
||||
|
||||
private async processWriteQueue() {
|
||||
if (this.isWriting || this.writeQueue.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.isWriting = true;
|
||||
|
||||
while (this.writeQueue.length > 0) {
|
||||
const entry = this.writeQueue.shift()!;
|
||||
try {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
appendFile(this.logFilePath, entry, 'utf8', (err) => {
|
||||
if (err) reject(err);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
console.warn('Failed to write to log file:', error);
|
||||
}
|
||||
}
|
||||
|
||||
this.isWriting = false;
|
||||
this.setupGlobalErrorHandlers();
|
||||
}
|
||||
|
||||
public logError(message: string, error?: Error) {
|
||||
const entry = this.formatLogEntry('ERROR', message, error);
|
||||
this.writeToLog(entry);
|
||||
this.logger.error(message, { error });
|
||||
}
|
||||
|
||||
public logDebug(message: string) {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const entry = this.formatLogEntry('DEBUG', message);
|
||||
this.writeToLog(entry);
|
||||
}
|
||||
this.logger.debug(message);
|
||||
}
|
||||
|
||||
public setupGlobalErrorHandlers() {
|
||||
|
|
@ -158,7 +64,7 @@ export class LogManager {
|
|||
}
|
||||
|
||||
public getLogFilePath(): string {
|
||||
return this.logFilePath;
|
||||
return join(app.getPath('userData'), 'logs', 'friendly-kobold.log');
|
||||
}
|
||||
|
||||
public getLogsDirectory(): string {
|
||||
|
|
|
|||
504
yarn.lock
504
yarn.lock
|
|
@ -244,6 +244,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0":
|
||||
version: 1.6.0
|
||||
resolution: "@colors/colors@npm:1.6.0"
|
||||
checksum: 10c0/9328a0778a5b0db243af54455b79a69e3fb21122d6c15ef9e9fcc94881d8d17352d8b2b2590f9bdd46fac5c2d6c1636dcfc14358a20c70e22daf89e1a759b629
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@cspell/cspell-bundled-dicts@npm:9.2.0":
|
||||
version: 9.2.0
|
||||
resolution: "@cspell/cspell-bundled-dicts@npm:9.2.0"
|
||||
|
|
@ -809,6 +816,17 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@dabh/diagnostics@npm:^2.0.2":
|
||||
version: 2.0.3
|
||||
resolution: "@dabh/diagnostics@npm:2.0.3"
|
||||
dependencies:
|
||||
colorspace: "npm:1.1.x"
|
||||
enabled: "npm:2.0.x"
|
||||
kuler: "npm:^2.0.0"
|
||||
checksum: 10c0/a5133df8492802465ed01f2f0a5784585241a1030c362d54a602ed1839816d6c93d71dde05cf2ddb4fd0796238c19774406bd62fa2564b637907b495f52425fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@develar/schema-utils@npm:~2.6.5":
|
||||
version: 2.6.5
|
||||
resolution: "@develar/schema-utils@npm:2.6.5"
|
||||
|
|
@ -1682,6 +1700,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sec-ant/readable-stream@npm:^0.4.1":
|
||||
version: 0.4.1
|
||||
resolution: "@sec-ant/readable-stream@npm:0.4.1"
|
||||
checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sindresorhus/is@npm:^4.0.0":
|
||||
version: 4.6.0
|
||||
resolution: "@sindresorhus/is@npm:4.6.0"
|
||||
|
|
@ -1689,6 +1714,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sindresorhus/is@npm:^7.0.1":
|
||||
version: 7.0.2
|
||||
resolution: "@sindresorhus/is@npm:7.0.2"
|
||||
checksum: 10c0/50881c9b651e189972087de9104e0d259a2a0dc93c604e863b3be1847e31c3dce685e76a41c0ae92198ae02b36d30d07b723a2d72015ce3cf910afc6dc337ff5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sindresorhus/merge-streams@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@sindresorhus/merge-streams@npm:4.0.0"
|
||||
checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@szmarczak/http-timer@npm:^4.0.5":
|
||||
version: 4.0.6
|
||||
resolution: "@szmarczak/http-timer@npm:4.0.6"
|
||||
|
|
@ -1698,6 +1737,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@szmarczak/http-timer@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "@szmarczak/http-timer@npm:5.0.1"
|
||||
dependencies:
|
||||
defer-to-connect: "npm:^2.0.1"
|
||||
checksum: 10c0/4629d2fbb2ea67c2e9dc03af235c0991c79ebdddcbc19aed5d5732fb29ce01c13331e9b1a491584b9069bd6ecde6581dcbf871f11b7eefdebbab34de6cf2197e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@tootallnate/once@npm:2":
|
||||
version: 2.0.0
|
||||
resolution: "@tootallnate/once@npm:2.0.0"
|
||||
|
|
@ -1783,7 +1831,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/http-cache-semantics@npm:*":
|
||||
"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "@types/http-cache-semantics@npm:4.0.4"
|
||||
checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6
|
||||
|
|
@ -1875,6 +1923,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/triple-beam@npm:^1.3.2":
|
||||
version: 1.3.5
|
||||
resolution: "@types/triple-beam@npm:1.3.5"
|
||||
checksum: 10c0/d5d7f25da612f6d79266f4f1bb9c1ef8f1684e9f60abab251e1261170631062b656ba26ff22631f2760caeafd372abc41e64867cde27fba54fafb73a35b9056a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/verror@npm:^1.10.3":
|
||||
version: 1.10.11
|
||||
resolution: "@types/verror@npm:1.10.11"
|
||||
|
|
@ -2390,7 +2445,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"async@npm:^3.2.6":
|
||||
"async@npm:^3.2.3, async@npm:^3.2.6":
|
||||
version: 3.2.6
|
||||
resolution: "async@npm:3.2.6"
|
||||
checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70
|
||||
|
|
@ -2627,6 +2682,28 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacheable-lookup@npm:^7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "cacheable-lookup@npm:7.0.0"
|
||||
checksum: 10c0/63a9c144c5b45cb5549251e3ea774c04d63063b29e469f7584171d059d3a88f650f47869a974e2d07de62116463d742c287a81a625e791539d987115cb081635
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacheable-request@npm:^12.0.1":
|
||||
version: 12.0.1
|
||||
resolution: "cacheable-request@npm:12.0.1"
|
||||
dependencies:
|
||||
"@types/http-cache-semantics": "npm:^4.0.4"
|
||||
get-stream: "npm:^9.0.1"
|
||||
http-cache-semantics: "npm:^4.1.1"
|
||||
keyv: "npm:^4.5.4"
|
||||
mimic-response: "npm:^4.0.0"
|
||||
normalize-url: "npm:^8.0.1"
|
||||
responselike: "npm:^3.0.0"
|
||||
checksum: 10c0/3ccc26519c8dd0821fcb21fa00781e55f05ab6e1da1487fbbee9c8c03435a3cf72c29a710a991cebe398fb9a5274e2a772fc488546d402db8dc21310764ed83a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cacheable-request@npm:^7.0.2":
|
||||
version: 7.0.4
|
||||
resolution: "cacheable-request@npm:7.0.4"
|
||||
|
|
@ -2838,6 +2915,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-convert@npm:^1.9.3":
|
||||
version: 1.9.3
|
||||
resolution: "color-convert@npm:1.9.3"
|
||||
dependencies:
|
||||
color-name: "npm:1.1.3"
|
||||
checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-convert@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "color-convert@npm:2.0.1"
|
||||
|
|
@ -2847,13 +2933,40 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-name@npm:~1.1.4":
|
||||
"color-name@npm:1.1.3":
|
||||
version: 1.1.3
|
||||
resolution: "color-name@npm:1.1.3"
|
||||
checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-name@npm:^1.0.0, color-name@npm:~1.1.4":
|
||||
version: 1.1.4
|
||||
resolution: "color-name@npm:1.1.4"
|
||||
checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-string@npm:^1.6.0":
|
||||
version: 1.9.1
|
||||
resolution: "color-string@npm:1.9.1"
|
||||
dependencies:
|
||||
color-name: "npm:^1.0.0"
|
||||
simple-swizzle: "npm:^0.2.2"
|
||||
checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color@npm:^3.1.3":
|
||||
version: 3.2.1
|
||||
resolution: "color@npm:3.2.1"
|
||||
dependencies:
|
||||
color-convert: "npm:^1.9.3"
|
||||
color-string: "npm:^1.6.0"
|
||||
checksum: 10c0/39345d55825884c32a88b95127d417a2c24681d8b57069413596d9fcbb721459ef9d9ec24ce3e65527b5373ce171b73e38dbcd9c830a52a6487e7f37bf00e83c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"colorette@npm:^2.0.20":
|
||||
version: 2.0.20
|
||||
resolution: "colorette@npm:2.0.20"
|
||||
|
|
@ -2861,6 +2974,16 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"colorspace@npm:1.1.x":
|
||||
version: 1.1.4
|
||||
resolution: "colorspace@npm:1.1.4"
|
||||
dependencies:
|
||||
color: "npm:^3.1.3"
|
||||
text-hex: "npm:1.0.x"
|
||||
checksum: 10c0/af5f91ff7f8e146b96e439ac20ed79b197210193bde721b47380a75b21751d90fa56390c773bb67c0aedd34ff85091883a437ab56861c779bd507d639ba7e123
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"combined-stream@npm:^1.0.8":
|
||||
version: 1.0.8
|
||||
resolution: "combined-stream@npm:1.0.8"
|
||||
|
|
@ -3192,7 +3315,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"defer-to-connect@npm:^2.0.0":
|
||||
"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "defer-to-connect@npm:2.0.1"
|
||||
checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782
|
||||
|
|
@ -3455,6 +3578,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"enabled@npm:2.0.x":
|
||||
version: 2.0.0
|
||||
resolution: "enabled@npm:2.0.0"
|
||||
checksum: 10c0/3b2c2af9bc7f8b9e291610f2dde4a75cf6ee52a68f4dd585482fbdf9a55d65388940e024e56d40bb03e05ef6671f5f53021fa8b72a20e954d7066ec28166713f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"encoding@npm:^0.1.13":
|
||||
version: 0.1.13
|
||||
resolution: "encoding@npm:0.1.13"
|
||||
|
|
@ -4018,6 +4148,26 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"execa@npm:^9.6.0":
|
||||
version: 9.6.0
|
||||
resolution: "execa@npm:9.6.0"
|
||||
dependencies:
|
||||
"@sindresorhus/merge-streams": "npm:^4.0.0"
|
||||
cross-spawn: "npm:^7.0.6"
|
||||
figures: "npm:^6.1.0"
|
||||
get-stream: "npm:^9.0.0"
|
||||
human-signals: "npm:^8.0.1"
|
||||
is-plain-obj: "npm:^4.1.0"
|
||||
is-stream: "npm:^4.0.1"
|
||||
npm-run-path: "npm:^6.0.0"
|
||||
pretty-ms: "npm:^9.2.0"
|
||||
signal-exit: "npm:^4.1.0"
|
||||
strip-final-newline: "npm:^4.0.0"
|
||||
yoctocolors: "npm:^2.1.1"
|
||||
checksum: 10c0/2c44a33142f77d3a6a590a3b769b49b27029a76768593bac1f26fed4dd1330e9c189ee61eba6a8c990fb77e37286c68c7445472ebf24c22b31e9ff320e73d7ac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"exponential-backoff@npm:^3.1.1":
|
||||
version: 3.1.2
|
||||
resolution: "exponential-backoff@npm:3.1.2"
|
||||
|
|
@ -4120,6 +4270,22 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fecha@npm:^4.2.0":
|
||||
version: 4.2.3
|
||||
resolution: "fecha@npm:4.2.3"
|
||||
checksum: 10c0/0e895965959cf6a22bb7b00f0bf546f2783836310f510ddf63f463e1518d4c96dec61ab33fdfd8e79a71b4856a7c865478ce2ee8498d560fe125947703c9b1cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"figures@npm:^6.1.0":
|
||||
version: 6.1.0
|
||||
resolution: "figures@npm:6.1.0"
|
||||
dependencies:
|
||||
is-unicode-supported: "npm:^2.0.0"
|
||||
checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"file-entry-cache@npm:^8.0.0":
|
||||
version: 8.0.0
|
||||
resolution: "file-entry-cache@npm:8.0.0"
|
||||
|
|
@ -4129,6 +4295,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"file-stream-rotator@npm:^0.6.1":
|
||||
version: 0.6.1
|
||||
resolution: "file-stream-rotator@npm:0.6.1"
|
||||
dependencies:
|
||||
moment: "npm:^2.29.1"
|
||||
checksum: 10c0/ebb53cc22a33b0b57457c49df96ac96d8f7bace5e495f19577b37c4d87712b5fbe3539724de384852f2f6221aa0f2045e81e1f09a991fcf190f8954ef83caca1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"filelist@npm:^1.0.4":
|
||||
version: 1.0.4
|
||||
resolution: "filelist@npm:1.0.4"
|
||||
|
|
@ -4174,6 +4349,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fn.name@npm:1.x.x":
|
||||
version: 1.1.0
|
||||
resolution: "fn.name@npm:1.1.0"
|
||||
checksum: 10c0/8ad62aa2d4f0b2a76d09dba36cfec61c540c13a0fd72e5d94164e430f987a7ce6a743112bbeb14877c810ef500d1f73d7f56e76d029d2e3413f20d79e3460a9a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"for-each@npm:^0.3.3, for-each@npm:^0.3.5":
|
||||
version: 0.3.5
|
||||
resolution: "for-each@npm:0.3.5"
|
||||
|
|
@ -4193,6 +4375,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"form-data-encoder@npm:^4.0.2":
|
||||
version: 4.1.0
|
||||
resolution: "form-data-encoder@npm:4.1.0"
|
||||
checksum: 10c0/cbd655aa8ffff6f7c2733b1d8e95fa9a2fe8a88a90bde29fb54b8e02c9406e51f32a014bfe8297d67fbac9f77614d14a8b4bbc4fd0352838e67e97a881d06332
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^4.0.0":
|
||||
version: 4.0.4
|
||||
resolution: "form-data@npm:4.0.4"
|
||||
|
|
@ -4233,7 +4422,9 @@ __metadata:
|
|||
eslint-plugin-react-hooks: "npm:^5.2.0"
|
||||
eslint-plugin-react-refresh: "npm:^0.4.20"
|
||||
eslint-plugin-sonarjs: "npm:^3.0.4"
|
||||
execa: "npm:^9.6.0"
|
||||
globals: "npm:^16.3.0"
|
||||
got: "npm:^14.4.7"
|
||||
husky: "npm:^9.1.7"
|
||||
jiti: "npm:^2.5.1"
|
||||
lint-staged: "npm:^16.1.5"
|
||||
|
|
@ -4245,6 +4436,8 @@ __metadata:
|
|||
systeminformation: "npm:^5.27.7"
|
||||
typescript: "npm:^5.9.2"
|
||||
vite: "npm:^7.1.3"
|
||||
winston: "npm:^3.17.0"
|
||||
winston-daily-rotate-file: "npm:^5.0.0"
|
||||
zustand: "npm:^5.0.8"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
|
@ -4445,6 +4638,16 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-stream@npm:^9.0.0, get-stream@npm:^9.0.1":
|
||||
version: 9.0.1
|
||||
resolution: "get-stream@npm:9.0.1"
|
||||
dependencies:
|
||||
"@sec-ant/readable-stream": "npm:^0.4.1"
|
||||
is-stream: "npm:^4.0.1"
|
||||
checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"get-symbol-description@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "get-symbol-description@npm:1.1.0"
|
||||
|
|
@ -4590,6 +4793,25 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"got@npm:^14.4.7":
|
||||
version: 14.4.7
|
||||
resolution: "got@npm:14.4.7"
|
||||
dependencies:
|
||||
"@sindresorhus/is": "npm:^7.0.1"
|
||||
"@szmarczak/http-timer": "npm:^5.0.1"
|
||||
cacheable-lookup: "npm:^7.0.0"
|
||||
cacheable-request: "npm:^12.0.1"
|
||||
decompress-response: "npm:^6.0.0"
|
||||
form-data-encoder: "npm:^4.0.2"
|
||||
http2-wrapper: "npm:^2.2.1"
|
||||
lowercase-keys: "npm:^3.0.0"
|
||||
p-cancelable: "npm:^4.0.1"
|
||||
responselike: "npm:^3.0.0"
|
||||
type-fest: "npm:^4.26.1"
|
||||
checksum: 10c0/9b5b8dbc0642c78dbc64ab5ff6f12f6edab3e0cb80e89a3a69623a79ba3986f0ff0066a116fba47c0aacce4b0ba1eccf72f923f7fac13a31ce852bf9e2cb8f81
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
|
||||
version: 4.2.11
|
||||
resolution: "graceful-fs@npm:4.2.11"
|
||||
|
|
@ -4715,6 +4937,16 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"http2-wrapper@npm:^2.2.1":
|
||||
version: 2.2.1
|
||||
resolution: "http2-wrapper@npm:2.2.1"
|
||||
dependencies:
|
||||
quick-lru: "npm:^5.1.1"
|
||||
resolve-alpn: "npm:^1.2.0"
|
||||
checksum: 10c0/7207201d3c6e53e72e510c9b8912e4f3e468d3ecc0cf3bf52682f2aac9cd99358b896d1da4467380adc151cf97c412bedc59dc13dae90c523f42053a7449eedb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"https-proxy-agent@npm:^5.0.0":
|
||||
version: 5.0.1
|
||||
resolution: "https-proxy-agent@npm:5.0.1"
|
||||
|
|
@ -4735,6 +4967,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"human-signals@npm:^8.0.1":
|
||||
version: 8.0.1
|
||||
resolution: "human-signals@npm:8.0.1"
|
||||
checksum: 10c0/195ac607108c56253757717242e17cd2e21b29f06c5d2dad362e86c672bf2d096e8a3bbb2601841c376c2301c4ae7cff129e87f740aa4ebff1390c163114c7c4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"humanize-ms@npm:^1.2.1":
|
||||
version: 1.2.1
|
||||
resolution: "humanize-ms@npm:1.2.1"
|
||||
|
|
@ -4884,6 +5123,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-arrayish@npm:^0.3.1":
|
||||
version: 0.3.2
|
||||
resolution: "is-arrayish@npm:0.3.2"
|
||||
checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-async-function@npm:^2.0.0":
|
||||
version: 2.1.1
|
||||
resolution: "is-async-function@npm:2.1.1"
|
||||
|
|
@ -5067,6 +5313,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-plain-obj@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "is-plain-obj@npm:4.1.0"
|
||||
checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-regex@npm:^1.2.1":
|
||||
version: 1.2.1
|
||||
resolution: "is-regex@npm:1.2.1"
|
||||
|
|
@ -5095,6 +5348,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-stream@npm:^2.0.0":
|
||||
version: 2.0.1
|
||||
resolution: "is-stream@npm:2.0.1"
|
||||
checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-stream@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "is-stream@npm:4.0.1"
|
||||
checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-string@npm:^1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "is-string@npm:1.1.1"
|
||||
|
|
@ -5132,6 +5399,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-unicode-supported@npm:^2.0.0":
|
||||
version: 2.1.0
|
||||
resolution: "is-unicode-supported@npm:2.1.0"
|
||||
checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-weakmap@npm:^2.0.2":
|
||||
version: 2.0.2
|
||||
resolution: "is-weakmap@npm:2.0.2"
|
||||
|
|
@ -5372,6 +5646,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"kuler@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "kuler@npm:2.0.0"
|
||||
checksum: 10c0/0a4e99d92ca373f8f74d1dc37931909c4d0d82aebc94cf2ba265771160fc12c8df34eaaac80805efbda367e2795cb1f1dd4c3d404b6b1cf38aec94035b503d2d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lazy-val@npm:^1.0.5":
|
||||
version: 1.0.5
|
||||
resolution: "lazy-val@npm:1.0.5"
|
||||
|
|
@ -5476,6 +5757,20 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"logform@npm:^2.7.0":
|
||||
version: 2.7.0
|
||||
resolution: "logform@npm:2.7.0"
|
||||
dependencies:
|
||||
"@colors/colors": "npm:1.6.0"
|
||||
"@types/triple-beam": "npm:^1.3.2"
|
||||
fecha: "npm:^4.2.0"
|
||||
ms: "npm:^2.1.1"
|
||||
safe-stable-stringify: "npm:^2.3.1"
|
||||
triple-beam: "npm:^1.3.0"
|
||||
checksum: 10c0/4789b4b37413c731d1835734cb799240d31b865afde6b7b3e06051d6a4127bfda9e88c99cfbf296d084a315ccbed2647796e6a56b66e725bcb268c586f57558f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"loose-envify@npm:^1.4.0":
|
||||
version: 1.4.0
|
||||
resolution: "loose-envify@npm:1.4.0"
|
||||
|
|
@ -5494,6 +5789,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lowercase-keys@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "lowercase-keys@npm:3.0.0"
|
||||
checksum: 10c0/ef62b9fa5690ab0a6e4ef40c94efce68e3ed124f583cc3be38b26ff871da0178a28b9a84ce0c209653bb25ca135520ab87fea7cd411a54ac4899cb2f30501430
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
|
||||
version: 10.4.3
|
||||
resolution: "lru-cache@npm:10.4.3"
|
||||
|
|
@ -5673,6 +5975,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mimic-response@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "mimic-response@npm:4.0.0"
|
||||
checksum: 10c0/761d788d2668ae9292c489605ffd4fad220f442fbae6832adce5ebad086d691e906a6d5240c290293c7a11e99fbdbbef04abbbed498bf8699a4ee0f31315e3fb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minimatch@npm:9.0.5, minimatch@npm:^9.0.3, minimatch@npm:^9.0.4":
|
||||
version: 9.0.5
|
||||
resolution: "minimatch@npm:9.0.5"
|
||||
|
|
@ -5851,6 +6160,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"moment@npm:^2.29.1":
|
||||
version: 2.30.1
|
||||
resolution: "moment@npm:2.30.1"
|
||||
checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3":
|
||||
version: 2.1.3
|
||||
resolution: "ms@npm:2.1.3"
|
||||
|
|
@ -5978,6 +6294,23 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"normalize-url@npm:^8.0.1":
|
||||
version: 8.0.2
|
||||
resolution: "normalize-url@npm:8.0.2"
|
||||
checksum: 10c0/1c62eee6ce184ad4a463ff2984ce5e440a5058c9dd7c5ef80c0a7696bbb1d3638534e266afb14ef9678dfa07fb6c980ef4cde990c80eeee55900c378b7970584
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"npm-run-path@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "npm-run-path@npm:6.0.0"
|
||||
dependencies:
|
||||
path-key: "npm:^4.0.0"
|
||||
unicorn-magic: "npm:^0.3.0"
|
||||
checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
|
|
@ -5985,6 +6318,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-hash@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "object-hash@npm:3.0.0"
|
||||
checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4":
|
||||
version: 1.13.4
|
||||
resolution: "object-inspect@npm:1.13.4"
|
||||
|
|
@ -6069,6 +6409,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"one-time@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "one-time@npm:1.0.0"
|
||||
dependencies:
|
||||
fn.name: "npm:1.x.x"
|
||||
checksum: 10c0/6e4887b331edbb954f4e915831cbec0a7b9956c36f4feb5f6de98c448ac02ff881fd8d9b55a6b1b55030af184c6b648f340a76eb211812f4ad8c9b4b8692fdaa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"onetime@npm:^5.1.0":
|
||||
version: 5.1.2
|
||||
resolution: "onetime@npm:5.1.2"
|
||||
|
|
@ -6147,6 +6496,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"p-cancelable@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "p-cancelable@npm:4.0.1"
|
||||
checksum: 10c0/12636623f46784ba962b6fe7a1f34d021f1d9a2cc12c43e270baa715ea872d5c8c7d9f086ed420b8b9817e91d9bbe92c14c90e5dddd4a9968c81a2a7aef7089d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0 ":
|
||||
version: 3.1.0
|
||||
resolution: "p-limit@npm:3.1.0"
|
||||
|
|
@ -6206,6 +6562,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"parse-ms@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "parse-ms@npm:4.0.0"
|
||||
checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-exists@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "path-exists@npm:4.0.0"
|
||||
|
|
@ -6227,6 +6590,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-key@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "path-key@npm:4.0.0"
|
||||
checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-parse@npm:^1.0.7":
|
||||
version: 1.0.7
|
||||
resolution: "path-parse@npm:1.0.7"
|
||||
|
|
@ -6333,6 +6703,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"pretty-ms@npm:^9.2.0":
|
||||
version: 9.2.0
|
||||
resolution: "pretty-ms@npm:9.2.0"
|
||||
dependencies:
|
||||
parse-ms: "npm:^4.0.0"
|
||||
checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"proc-log@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "proc-log@npm:2.0.1"
|
||||
|
|
@ -6530,7 +6909,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"readable-stream@npm:^3.4.0":
|
||||
"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2":
|
||||
version: 3.6.2
|
||||
resolution: "readable-stream@npm:3.6.2"
|
||||
dependencies:
|
||||
|
|
@ -6613,7 +6992,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"resolve-alpn@npm:^1.0.0":
|
||||
"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0":
|
||||
version: 1.2.1
|
||||
resolution: "resolve-alpn@npm:1.2.1"
|
||||
checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4
|
||||
|
|
@ -6695,6 +7074,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"responselike@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "responselike@npm:3.0.0"
|
||||
dependencies:
|
||||
lowercase-keys: "npm:^3.0.0"
|
||||
checksum: 10c0/8af27153f7e47aa2c07a5f2d538cb1e5872995f0e9ff77def858ecce5c3fe677d42b824a62cde502e56d275ab832b0a8bd350d5cd6b467ac0425214ac12ae658
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"restore-cursor@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "restore-cursor@npm:3.1.0"
|
||||
|
|
@ -6908,6 +7296,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safe-stable-stringify@npm:^2.3.1":
|
||||
version: 2.5.0
|
||||
resolution: "safe-stable-stringify@npm:2.5.0"
|
||||
checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"safer-buffer@npm:>= 2.1.2 < 3.0.0":
|
||||
version: 2.1.2
|
||||
resolution: "safer-buffer@npm:2.1.2"
|
||||
|
|
@ -7107,6 +7502,15 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"simple-swizzle@npm:^0.2.2":
|
||||
version: 0.2.2
|
||||
resolution: "simple-swizzle@npm:0.2.2"
|
||||
dependencies:
|
||||
is-arrayish: "npm:^0.3.1"
|
||||
checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"simple-update-notifier@npm:2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "simple-update-notifier@npm:2.0.0"
|
||||
|
|
@ -7249,6 +7653,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"stack-trace@npm:0.0.x":
|
||||
version: 0.0.10
|
||||
resolution: "stack-trace@npm:0.0.10"
|
||||
checksum: 10c0/9ff3dabfad4049b635a85456f927a075c9d0c210e3ea336412d18220b2a86cbb9b13ec46d6c37b70a302a4ea4d49e30e5d4944dd60ae784073f1cde778ac8f4b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"stat-mode@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "stat-mode@npm:1.0.0"
|
||||
|
|
@ -7409,6 +7820,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"strip-final-newline@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "strip-final-newline@npm:4.0.0"
|
||||
checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"strip-json-comments@npm:^3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "strip-json-comments@npm:3.1.1"
|
||||
|
|
@ -7505,6 +7923,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"text-hex@npm:1.0.x":
|
||||
version: 1.0.0
|
||||
resolution: "text-hex@npm:1.0.0"
|
||||
checksum: 10c0/57d8d320d92c79d7c03ffb8339b825bb9637c2cbccf14304309f51d8950015c44464b6fd1b6820a3d4821241c68825634f09f5a2d9d501e84f7c6fd14376860d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tiny-async-pool@npm:1.3.0":
|
||||
version: 1.3.0
|
||||
resolution: "tiny-async-pool@npm:1.3.0"
|
||||
|
|
@ -7549,6 +7974,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"triple-beam@npm:^1.3.0, triple-beam@npm:^1.4.1":
|
||||
version: 1.4.1
|
||||
resolution: "triple-beam@npm:1.4.1"
|
||||
checksum: 10c0/4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"truncate-utf8-bytes@npm:^1.0.0":
|
||||
version: 1.0.2
|
||||
resolution: "truncate-utf8-bytes@npm:1.0.2"
|
||||
|
|
@ -7602,7 +8034,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-fest@npm:^4.27.0":
|
||||
"type-fest@npm:^4.26.1, type-fest@npm:^4.27.0":
|
||||
version: 4.41.0
|
||||
resolution: "type-fest@npm:4.41.0"
|
||||
checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4
|
||||
|
|
@ -7708,6 +8140,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unicorn-magic@npm:^0.3.0":
|
||||
version: 0.3.0
|
||||
resolution: "unicorn-magic@npm:0.3.0"
|
||||
checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"unique-filename@npm:^2.0.0":
|
||||
version: 2.0.1
|
||||
resolution: "unique-filename@npm:2.0.1"
|
||||
|
|
@ -8036,6 +8475,50 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"winston-daily-rotate-file@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "winston-daily-rotate-file@npm:5.0.0"
|
||||
dependencies:
|
||||
file-stream-rotator: "npm:^0.6.1"
|
||||
object-hash: "npm:^3.0.0"
|
||||
triple-beam: "npm:^1.4.1"
|
||||
winston-transport: "npm:^4.7.0"
|
||||
peerDependencies:
|
||||
winston: ^3
|
||||
checksum: 10c0/c6dfd8ceff8d3801ca702efabaf696bb82919a62c4fbeded8cbf7d2cb188960872eb7a412547af86f12f7257061088a25bac9e318af8932719a2ccba215d7d3f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"winston-transport@npm:^4.7.0, winston-transport@npm:^4.9.0":
|
||||
version: 4.9.0
|
||||
resolution: "winston-transport@npm:4.9.0"
|
||||
dependencies:
|
||||
logform: "npm:^2.7.0"
|
||||
readable-stream: "npm:^3.6.2"
|
||||
triple-beam: "npm:^1.3.0"
|
||||
checksum: 10c0/e2990a172e754dbf27e7823772214a22dc8312f7ec9cfba831e5ef30a5d5528792e5ea8f083c7387ccfc5b2af20e3691f64738546c8869086110a26f98671095
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"winston@npm:^3.17.0":
|
||||
version: 3.17.0
|
||||
resolution: "winston@npm:3.17.0"
|
||||
dependencies:
|
||||
"@colors/colors": "npm:^1.6.0"
|
||||
"@dabh/diagnostics": "npm:^2.0.2"
|
||||
async: "npm:^3.2.3"
|
||||
is-stream: "npm:^2.0.0"
|
||||
logform: "npm:^2.7.0"
|
||||
one-time: "npm:^1.0.0"
|
||||
readable-stream: "npm:^3.4.0"
|
||||
safe-stable-stringify: "npm:^2.3.1"
|
||||
stack-trace: "npm:0.0.x"
|
||||
triple-beam: "npm:^1.3.0"
|
||||
winston-transport: "npm:^4.9.0"
|
||||
checksum: 10c0/ec8eaeac9a72b2598aedbff50b7dac82ce374a400ed92e7e705d7274426b48edcb25507d78cff318187c4fb27d642a0e2a39c57b6badc9af8e09d4a40636a5f7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"word-wrap@npm:^1.2.5":
|
||||
version: 1.2.5
|
||||
resolution: "word-wrap@npm:1.2.5"
|
||||
|
|
@ -8173,6 +8656,13 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yoctocolors@npm:^2.1.1":
|
||||
version: 2.1.2
|
||||
resolution: "yoctocolors@npm:2.1.2"
|
||||
checksum: 10c0/b220f30f53ebc2167330c3adc86a3c7f158bcba0236f6c67e25644c3188e2571a6014ffc1321943bb619460259d3d27eb4c9cc58c2d884c1b195805883ec7066
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"zustand@npm:^5.0.8":
|
||||
version: 5.0.8
|
||||
resolution: "zustand@npm:5.0.8"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue