fix(extensions): finalize stash merge reconciliation

This commit is contained in:
777genius 2026-04-18 11:44:55 +03:00
parent 51376e2620
commit 0eb38387a3
10 changed files with 14 additions and 16 deletions

View file

@ -21,7 +21,6 @@ async function buildManagementCliEnvForBinary(binaryPath: string): Promise<NodeJ
});
return env;
}
export interface ExtensionsRuntimeAdapter {
readonly flavor: CliFlavor;
buildManagementCliEnv(binaryPath: string): Promise<NodeJS.ProcessEnv>;

View file

@ -48,7 +48,6 @@ function isSensitiveCliFlag(flag: string): boolean {
const normalizedFlag = flag.toLowerCase().replace(/^--/, '').replace(/[-_]/g, '');
return SENSITIVE_FLAG_NAMES.has(normalizedFlag);
}
function extractJsonObject<T>(raw: string): T {
const trimmed = raw.trim();
try {

View file

@ -11,12 +11,12 @@ import { Button } from '@renderer/components/ui/button';
import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
import { useStore } from '@renderer/store';
import { formatCompactNumber, formatRelativeTime } from '@renderer/utils/formatters';
import { getDefaultMcpSharedScope } from '@shared/utils/mcpScopes';
import {
getMcpInstallationSummaryLabel,
getMcpOperationKey,
sanitizeMcpServerName,
} from '@shared/utils/extensionNormalizers';
import { getDefaultMcpSharedScope } from '@shared/utils/mcpScopes';
import { Clock, Cloud, Globe, KeyRound, Lock, Monitor, Star, Tag, Wrench } from 'lucide-react';
import { Github as GithubIcon } from 'lucide-react';

View file

@ -25,18 +25,18 @@ import {
SelectValue,
} from '@renderer/components/ui/select';
import { useStore } from '@renderer/store';
import {
getMcpInstallationSummaryLabel,
getMcpOperationKey,
getPreferredMcpInstallationEntry,
sanitizeMcpServerName,
} from '@shared/utils/extensionNormalizers';
import {
getDefaultMcpSharedScope,
getMcpScopeLabel,
isProjectScopedMcpScope,
isSharedMcpScope,
} from '@shared/utils/mcpScopes';
import {
getMcpInstallationSummaryLabel,
getMcpOperationKey,
getPreferredMcpInstallationEntry,
sanitizeMcpServerName,
} from '@shared/utils/extensionNormalizers';
import { ExternalLink, Lock, Plus, Star, Trash2, Wrench } from 'lucide-react';
import { InstallButton } from '../common/InstallButton';

View file

@ -16,8 +16,8 @@ import {
SelectValue,
} from '@renderer/components/ui/select';
import { useStore } from '@renderer/store';
import { inferCapabilities, normalizeCategory } from '@shared/utils/extensionNormalizers';
import { getCliProviderExtensionCapability } from '@shared/utils/providerExtensionCapabilities';
import { inferCapabilities, normalizeCategory } from '@shared/utils/extensionNormalizers';
import { ArrowUpDown, Filter, Puzzle, Search } from 'lucide-react';
import { useShallow } from 'zustand/react/shallow';

View file

@ -29,7 +29,7 @@ import { useShallow } from 'zustand/react/shallow';
import { resolveSkillProjectPath } from './skillProjectUtils';
import type { SkillValidationIssue } from '@shared/types';
import type { SkillValidationIssue } from '@shared/types/extensions';
interface SkillDetailDialogProps {
skillId: string | null;

View file

@ -41,8 +41,8 @@ import { validateSkillFolderName } from './skillValidationUtils';
import type {
SkillDetail,
SkillInvocationMode,
SkillReviewPreview,
SkillRootKind,
SkillReviewPreview,
} from '@shared/types/extensions';
type EditorMode = 'create' | 'edit';

View file

@ -127,7 +127,7 @@ function formatRuntimeAudienceLabel(providerNames: readonly string[]): string {
return 'the configured runtime';
}
if (providerNames.length === 1) {
return providerNames[0];
return providerNames[0]!;
}
if (providerNames.length === 2) {
return `${providerNames[0]} and ${providerNames[1]}`;

View file

@ -21,14 +21,15 @@ vi.mock('@main/utils/pathDecoder', () => ({
const windowsRoot = cwd.match(/^[A-Za-z]:[\\/]/)?.[0] ?? null;
const root = windowsRoot ?? '/';
const sep = windowsRoot ? '\\' : '/';
return `${root}tmp${sep}mock-home`.replaceAll('//', '/');
return `${root}${root.endsWith(sep) ? '' : sep}tmp${sep}mock-home`;
},
getClaudeBasePath: () => {
const cwd = process.cwd();
const windowsRoot = cwd.match(/^[A-Za-z]:[\\/]/)?.[0] ?? null;
const root = windowsRoot ?? '/';
const sep = windowsRoot ? '\\' : '/';
return `${root}tmp${sep}mock-home${sep}.claude`.replaceAll('//', '/');
const mockHome = `${root}${root.endsWith(sep) ? '' : sep}tmp${sep}mock-home`;
return `${mockHome}${sep}.claude`;
},
setClaudeBasePathOverride: vi.fn(),
}));

View file

@ -5,7 +5,6 @@ import {
getVisibleMultimodelProviders,
isMultimodelRuntimeStatus,
} from '@renderer/utils/multimodelProviderVisibility';
import type { CliInstallationStatus, CliProviderStatus } from '@shared/types';
import { createDefaultCliExtensionCapabilities } from '@shared/utils/providerExtensionCapabilities';