Skip to content

Claude/fix dmg creation error wd ckg#15

Open
baoxingjie wants to merge 16 commits into
UnicomAI:mainfrom
baoxingjie:claude/fix-dmg-creation-error-WdCKG
Open

Claude/fix dmg creation error wd ckg#15
baoxingjie wants to merge 16 commits into
UnicomAI:mainfrom
baoxingjie:claude/fix-dmg-creation-error-WdCKG

Conversation

@baoxingjie

Copy link
Copy Markdown
Collaborator

Problem

bash scripts/build-all.sh mac-arm64 fails at the [4/4] DMG creation step with
"hdiutil: create failed - 资源忙", which is actually ENOSPC (no space left on device)
misreported by create-dmg.

Root cause: Electron Framework uses hardlinks extensively. create-dmg estimates
the .app size via du, which counts hardlinked inodes only once. But hdiutil
copies each hardlinked file as an independent file, consuming more space than the
DMG was allocated, causing the copy to fail.

Fix

Stage the .app to a temp directory before passing it to create-dmg, breaking
hardlinks so du's size estimate matches the actual bytes written.

  • Use ditto (macOS-native) instead of rsync --no-hard-links, because macOS
    ships with BSD rsync 2.6.9 which does not support --no-hard-links.

Also added

  • scripts/uninstall-mac.sh: one-click uninstall script that removes the app,
    all data/caches/prefs, and the hexagent Lima VM instance.

claude and others added 13 commits March 26, 2026 08:40
create-dmg uses `du` to estimate app size, but Electron Framework's
hardlinks cause `du` to undercount. hdiutil copies each hardlinked file
independently, exhausting DMG space and failing with ENOSPC (misreported
as "resource busy"). Fix by staging the app with rsync --no-hard-links
to break hardlinks before passing to create-dmg.

https://claude.ai/code/session_01S1crsR6m3fZEHYGpCuDiEJ
macOS ships with BSD rsync 2.6.9 which does not support --no-hard-links.
Switch to `ditto`, a macOS-native tool that copies .app bundles correctly
(preserving xattrs, symlinks, resource forks) without preserving hardlinks,
ensuring create-dmg gets an accurate size estimate.

https://claude.ai/code/session_01S1crsR6m3fZEHYGpCuDiEJ
Removes HexAgent.app, all app data/caches/prefs, and the hexagent
Lima VM instance (stops if running, then deletes via limactl).
Supports --force flag to skip the confirmation prompt.

https://claude.ai/code/session_01S1crsR6m3fZEHYGpCuDiEJ
windows bug fix and new feature

---------

Co-authored-by: Codex Bot <codex-bot@example.com>
Co-authored-by: zhanghr136 <zhanghr136@noreply.gitcode.com>
Co-authored-by: Anqi (Anthony) Tang <anqi.tang.ai@gmail.com>
Troubleshooting and checklist docs are no longer needed.
Rename the display brand name across the frontend UI — page title,
sidebar, welcome screens, onboarding wizard, and Electron error dialog.
Internal package names, storage keys, and code identifiers unchanged.
Cowork is now the primary experience. Chat mode is hidden by default
and only appears when explicitly enabled via a toggle in Settings >
Sandbox, which also requires an E2B API key.

- Default mode changed from "chat" to "cowork" (frontend + backend)
- Added chat_enabled flag to SandboxConfig
- Mode toggle in header hidden unless chat_enabled && e2b_api_key set
- URL routing guards redirect /chat to /cowork when Chat unavailable
- Onboarding wizard no longer shows E2B setup (legacy feature)
- Settings sandbox tab: VM card first, Chat Mode card with toggle
- Brand color updated to red gradient matching new logo
Swap the old favicon SVG for the new uniai.png brand logo in the
sidebar header.
- WelcomeScreen: translate mounting/preparing status messages
- OnboardingWizard, SettingsModal: remove Chinese from restart-detection regex
- vmSetup: remove Chinese from restart regex and WSL status labels
Add 12 skill packages (data-insight-report, deep-research, doc,
email-mail-master, excel-xlsx, find-skills, frontend-dev, mcp-builder,
pdf, pptx-plus-linux, skill-creator, web-design-guidelines) to both
examples/ and public/ directories. Update .gitignore to track these
bundled skills.
…nnectable streams

Agent responses now run as background asyncio tasks that write SSE events
into a per-conversation buffer. This fixes the crash when users refresh
during streaming (RuntimeError: aclose() on running generator) and enables
reconnecting to in-flight streams after page refresh.

Key changes:
- Add StreamManager with ConversationStream (event buffer + fan-out)
- Extract _generate_events() from event_stream(), run via background task
- Add GET /api/chat/{id}/stream endpoint for reconnecting subscribers
- Frontend auto-reconnects to active streams on page load via subscribeToStream()
- Include server-side timestamps in SSE events for accurate thinking durations on replay
- Make STREAM_START idempotent to handle duplicate events during replay
@an7tang

an7tang commented Mar 27, 2026

Copy link
Copy Markdown
Collaborator

Rebase to latest main branch and ask @xuelin-cell to approve the PR

xuelin-cell and others added 3 commits March 28, 2026 10:04
Co-authored-by: Codex Bot <codex-bot@example.com>
Co-authored-by: zhanghr136 <zhanghr136@noreply.gitcode.com>
Co-authored-by: Anqi (Anthony) Tang <anqi.tang.ai@gmail.com>
…UnicomAI#19)

## Summary
- Add internationalization infrastructure using `react-i18next` with
namespaced JSON translation files
- Extract all hardcoded UI strings across 14 components into translation
keys with English and Simplified Chinese (简体中文)
- Language switcher in Settings > General tab, persists to both
localStorage and backend `config.json`

## Changes
- **Backend**: Added `language` field to `AppConfig` dataclass and
config API endpoint
- **Frontend infrastructure**: `i18n.ts` init, `useSettings` language
support, `ServerConfig.language`
- **16 translation files**: 8 namespaces (common, settings, sidebar,
welcome, chat, search, misc, onboarding) x 2 languages
- **14 components updated**: SettingsModal, Sidebar, WelcomeScreen,
ChatInput, ChatArea, SearchModal, InputSettingsMenu, FolderPicker,
ModelPicker, RightPanel, MessageBubble, RestartRequiredModal,
OnboardingWizard, VMSetupFloater

## Adding a new language
1. Copy `src/locales/en/` to `src/locales/{locale}/` and translate
values
2. Import in `src/i18n.ts` and add to `resources`
3. Add entry to `LANGUAGES` array in `SettingsModal.tsx`

## Test plan
- [ ] Build passes (`npm run build`)
- [ ] Default language is English, all text renders correctly
- [ ] Switch to 简体中文 in Settings > General > Language — all UI updates
- [ ] Refresh page — language persists (localStorage)
- [ ] Check `config.json` — `language` field updated
- [ ] Switch back to English — all text reverts
- [ ] Onboarding wizard flow works in both languages

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: xuelin-cell <xuelin2048@163.com>
@an7tang an7tang force-pushed the main branch 3 times, most recently from 2db4688 to 757bf3d Compare June 4, 2026 01:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants