Merge branch 'main' into readme-seo

This commit is contained in:
Wendong-Fan 2026-01-23 08:29:05 +08:00 committed by GitHub
commit ced05ef9d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 45 additions and 6 deletions

View file

@ -14,7 +14,7 @@ jobs:
strategy:
matrix:
include:
- os: [self-hosted, macOS, ARM64]
- os: macos-latest
arch: arm64
artifact_name: macos-arm64
- os: windows-latest
@ -85,7 +85,13 @@ jobs:
- name: Build Release Files (macOS with signing)
if: runner.os == 'macOS'
timeout-minutes: 90
run: npm run build -- --arch ${{ matrix.arch }}
run: |
# Increase file descriptor limit to prevent EMFILE errors during signing
# This is needed because electron-builder signs all files recursively,
# and Python venvs contain thousands of files
ulimit -n 65536 || ulimit -n 10240
echo "File descriptor limit set to: $(ulimit -n)"
npm run build -- --arch ${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.CERT_P12 }}

View file

@ -92,7 +92,11 @@ jobs:
# Step for macOS builds with signing
- name: Build Release Files (macOS with signing)
if: runner.os == 'macOS'
run: npm run build -- --arch ${{ matrix.arch }}
run: |
# Increase file descriptor limit to prevent EMFILE errors during signing
ulimit -n 65536 || ulimit -n 10240
echo "File descriptor limit set to: $(ulimit -n)"
npm run build -- --arch ${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_LINK: ${{ secrets.CERT_P12 }}

View file

@ -65,6 +65,26 @@
"hardenedRuntime": true,
"gatekeeperAssess": false,
"notarize": false,
"signIgnore": [
".*\\.py$",
".*\\.pyc$",
".*\\.pyo$",
".*\\.pyi$",
".*\\.typed$",
".*\\.txt$",
".*\\.md$",
".*\\.rst$",
".*\\.json$",
".*\\.yaml$",
".*\\.yml$",
".*\\.toml$",
".*\\.cfg$",
".*\\.ini$",
".*\\.csv$",
".*\\.html$",
".*\\.css$",
".*\\.map$"
],
"extendInfo": {
"CFBundleURLTypes": [
{

View file

@ -48,6 +48,7 @@ export interface BoxHeaderConfirmProps {
onStartTask?: () => void;
onEdit?: () => void;
className?: string;
loading?: boolean;
}
export const BoxHeaderConfirm = ({
@ -55,6 +56,7 @@ export const BoxHeaderConfirm = ({
onStartTask,
onEdit,
className,
loading = false,
}: BoxHeaderConfirmProps) => {
return (
<div
@ -88,6 +90,7 @@ export const BoxHeaderConfirm = ({
size="sm"
className="rounded-full"
onClick={onStartTask}
disabled={loading}
>
Start Task
</Button>

View file

@ -93,6 +93,7 @@ export default function BottomBox({
subtitle={subtitle}
onStartTask={onStartTask}
onEdit={onEdit}
loading={loading}
/>
)}

View file

@ -16,9 +16,10 @@ interface Props {
onOpenChange: (open: boolean) => void;
trigger?: React.ReactNode;
onConfirm: () => void;
loading?: boolean;
}
export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm }: Props) {
export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm, loading = false }: Props) {
const { t } = useTranslation();
const onSubmit = useCallback(() => {
onConfirm();
@ -36,9 +37,9 @@ export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm
</div>
<DialogFooter className="bg-white-100% !rounded-b-xl p-md">
<DialogClose asChild>
<Button variant="ghost" size="md">{t("layout.cancel")}</Button>
<Button variant="ghost" size="md" disabled={loading}>{t("layout.cancel")}</Button>
</DialogClose>
<Button size="md" onClick={onSubmit} variant="cuation">{t("layout.yes-end-project")}</Button>
<Button size="md" onClick={onSubmit} variant="cuation" disabled={loading}>{t("layout.yes-end-project")}</Button>
</DialogFooter>
</DialogContent>
</Dialog>

View file

@ -48,6 +48,7 @@ function HeaderWin() {
const [isFullscreen, setIsFullscreen] = useState(false);
const { token } = getAuthStore();
const [endDialogOpen, setEndDialogOpen] = useState(false);
const [endProjectLoading, setEndProjectLoading] = useState(false);
useEffect(() => {
const p = window.electronAPI.getPlatform();
setPlatform(p);
@ -150,6 +151,7 @@ function HeaderWin() {
const historyId = projectId ? projectStore.getHistoryId(projectId) : null;
setEndProjectLoading(true);
try {
const task = chatStore.tasks[taskId];
@ -197,6 +199,7 @@ function HeaderWin() {
closeButton: true,
});
} finally {
setEndProjectLoading(false);
setEndDialogOpen(false);
}
};
@ -414,6 +417,7 @@ function HeaderWin() {
open={endDialogOpen}
onOpenChange={setEndDialogOpen}
onConfirm={handleEndProject}
loading={endProjectLoading}
/>
</div>
);