- Remove Firefox build support (CI, Makefile, wxt config)
- Fix chrome.alarms undefined error (add 'alarms' permission)
- Add Chat tab to side panel connected to Studio API (/api/chat)
- Streaming SSE, tool calls, code blocks, thinking display
- Shared chat history with desktop Studio
- New lib/api.js client for extension chat endpoints
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Adds a WXT-based browser extension that replaces manual JS snippet
injection for AI-driven browser testing. The extension auto-connects
to the Muyue server via WebSocket on every page, using the exact
same protocol as the existing snippet — zero backend changes needed.
- Chrome/Edge (MV3) + Firefox (MV2) from single codebase via WXT
- Content script: auto-connect WS, console capture, URL tracking, RPC
- Background service worker: token management, screenshots, badge
- Popup + side panel with server status, sessions, URL config
- CI workflows: build extension, attach .zip to releases
- Makefile targets: ext, ext-chrome, ext-firefox, ext-zip
- Version bumped to 0.8.0
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
User reported v0.7.6 install silently no-op'd when v0.7.5 was still
running:
$dest = "$env:LOCALAPPDATA\Muyue"
Expand-Archive -Path "$env:TEMP\muyue.zip" -DestinationPath $dest -Force
# No error, but the running v0.7.5 .exe stays in place because
# Windows refuses to overwrite a locked file. After 'install', the
# 'muyue' command still launches v0.7.5.
Add a Stop-Process step at the top of the install snippet:
Get-Process muyue, muyue-windows-amd64 -ErrorAction SilentlyContinue |
Stop-Process -Force
Start-Sleep -Milliseconds 500
-ErrorAction SilentlyContinue makes it idempotent (no error on a
clean first install). The 500ms sleep gives Windows time to release
the file handle before Expand-Archive opens the destination paths.
Snippet bumps to 6 lines; explanatory note added so users updating
from a previous version know why this step matters.
- internal/version/version.go: 0.7.6 → 0.7.7
- CHANGELOG.md: v0.7.7 entry
Three Windows install/launch issues reported by the user:
1. Double-click on Desktop shortcut → dialog "This is a command line
tool. You need to open cmd.exe and run it from there."
Cause: charmbracelet/huh detects no TTY when launched via Explorer
and aborts. Fix:
- cmd/muyue/commands/root.go: skip RunFirstTimeSetup when
os.Stdin is not a character device; persist config.Default()
and let the React onboarding wizard handle first-run UX.
- ci-{main,develop}.yml: build Windows binaries with
-ldflags="-H=windowsgui" so the .exe is a GUI subsystem app —
no console window flashes on double-click.
2. CLI sub-commands (`muyue scan`, `muyue install-shortcuts`, etc.)
would lose all output under -H=windowsgui when launched from
cmd.exe / PowerShell. Mitigation:
- cmd/muyue/console_windows.go (new, build-tagged): on init(),
call kernel32!AttachConsole(ATTACH_PARENT_PROCESS). If the
parent has a console, rebind os.Stdout/os.Stderr/os.Stdin to
it and call log.SetOutput(os.Stderr) so existing log.Printf
calls surface. If no parent console (Explorer), exit silently.
3. After install, `muyue` not recognized in PowerShell.
Causes: (a) the extracted binary is muyue-windows-amd64.exe, not
muyue.exe; (b) the user PATH update by install-shortcuts doesn't
propagate to the existing PowerShell session.
Fix in install-shortcuts:
- Copy self to <installDir>/muyue.exe (rename impossible — the
running .exe is locked on Windows) so `muyue` resolves once
PATH is set.
- Update Desktop + Start Menu .lnk to target the canonical
muyue.exe rather than the platform-suffixed binary.
- Print the line `$env:Path += ';<installDir>'` for the user to
paste, refreshing the current session immediately.
- ci-main.yml install snippet bumps to 5 lines, last being
`$env:Path += ";$dest"`.
- internal/version/version.go: 0.7.4 → 0.7.5
- CHANGELOG.md: v0.7.5 entry covers all three fixes
Logo dropped at project root by user. Bake it everywhere it matters:
Assets:
- assets/muyue.ico — multi-res (16/24/32/48/64/128/256) generated via PIL
- assets/muyue-{16,32,64,128,256,512}.png — clean PNG resizes
- LogoMuyue.png kept at root as the source of truth
Windows binary (.exe):
- CI runs `rsrc -ico assets/muyue.ico -arch {amd64,arm64} -o cmd/muyue/rsrc_windows_{amd64,arm64}.syso`
before `go build` (both ci-main.yml and ci-develop.yml)
- Go automatically links *.syso files matching the target GOOS/GOARCH —
no code change in the cmd/muyue main package
- .syso files are gitignored: regenerated at every build, never committed
- Existing install-shortcuts subcommand already uses IconLocation =
"$exe,0" so the embedded icon flows automatically into Desktop +
Start Menu .lnk files
Web UI:
- web/public/favicon-{16,32}.png + muyue.png + muyue-64.png
- web/index.html: real <link rel="icon"> tags (16/32 PNG + apple-touch),
replacing the placeholder SVG hexagon
- App.jsx header: 22×22 logo image rendered next to the "MUYUE" wordmark
(rounded 4px corners for visual consistency with the source logo)
Install snippet (ci-main.yml changelog template):
- Idempotent first line: `New-Item -ItemType Directory -Force -Path $dest`
to handle the case where the user re-runs after a partial install
Versioning unchanged (still v0.7.3 — these additions stay on the same
release branch / PR #9).
Two user-reported pain points:
1. First-run setup proposed only MiniMax (no MiMo step). Onboarding
now offers both keys side-by-side under a single "apikey" step,
with per-key Validate buttons. At least one must be valid to
proceed; the rest of the providers (OpenAI/Anthropic/Z.AI/Ollama)
are not shown in the wizard — they're configured later via the
Config tab. Active provider = MiniMax if valid, else MiMo.
2. Windows install instructions failed: Move-Item to C:\Windows
requires admin. Replaced with a no-admin 4-line snippet that
installs to %LOCALAPPDATA%\Muyue and calls a new subcommand
`muyue install-shortcuts` to create Desktop + Start Menu .lnk
files and add the install dir to the user PATH. Shortcut creation
uses WScript.Shell COM via PowerShell — keeps Go binary
dependency-free. Folder paths resolved through
[Environment]::GetFolderPath so OneDrive/redirected profiles
work too.
- cmd/muyue/commands/install_shortcuts.go: new file
- web/src/components/OnboardingWizard.jsx: 2-key apikey step
- .gitea/workflows/ci-main.yml: updated install snippet
- internal/version/version.go: 0.7.2 → 0.7.3
- CHANGELOG.md: v0.7.3 entry
- Add dedicated AI Terminal tab (non-deletable) shared between user and AI
- Add Z.AI quota display on dashboard via /api/monitor/usage/quota/limit
- Add /model change command in Studio to toggle MiniMax/ZAI
- Apply Studio formatting (formatText, renderContent) to Shell AI messages
- Add render tick refresh for Shell (1s streaming, 5s idle)
- Add analysis viewer modal (Eye button) in Shell panel
- Fix multi-shell tab creation with retry init and settings ref
- Persist shell tabs to localStorage
- Fix line spacing in Studio (line-height 1.7→1.5, cleanup stray <br/>)
- Redirect Config updates to AI terminal via custom events
- Fix CI: delete existing release before recreating
- Bump version to 0.3.4
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Break down the 627-line handlers.go into specialized modules:
- handlers_chat.go: chat and streaming endpoints
- handlers_config.go: configuration endpoints
- handlers_common.go: shared utilities
- handlers_info.go: info and status endpoints
- handlers_terminal.go: terminal/shell endpoints
- handlers_tools.go: tool-related endpoints
Also includes config improvements, orchestrator enhancements, and
web component updates.
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Merge muyue + muyue-desktop into one binary (13MB)
- `muyue` starts TUI, `muyue desktop` launches web UI in browser
- Move frontend from cmd/muyue-desktop/frontend/ to web/ (standard Go layout)
- Add web/embed.go with //go:embed all:dist for frontend assets
- Add internal/desktop/ package (server, browser open, SPA routing, signals)
- Split internal/api/api.go into server.go + handlers.go
- Add internal/desktop/desktop.go with SPA fallback and --port/--no-open flags
- Clean package.json: remove unused @xterm/xterm, switch to ESM
- Fix vite.config.js proxy to use port 8095 for dev mode
- Add Makefile targets: frontend, desktop, dev-desktop
- Update all CI workflows: single binary build, web/ paths
- Remove cmd/muyue-desktop/ entirely
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
All three CI workflows now build the React frontend (npm ci && npm run
build) before any Go steps, so the go:embed directive in
cmd/muyue-desktop/main.go finds the dist/ directory.
- ci-develop.yml: already rewritten, included in this commit
- ci-main.yml: add Node 22 setup, cache, frontend build, desktop binary
builds for all platforms, updated changelog download table
- ci-pr.yml: add Node 22 setup, cache, frontend build, desktop binary
build check
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Add develop branch for integration
- Replace single ci.yml with 3 workflows: ci-pr (PR checks), ci-develop (beta releases), ci-main (stable releases)
- Add prerelease support in version.go (ldflags injection)
- Add tests for prerelease version formatting
- Document full GitFlow process, versioning, and contributing guide in README
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Split monolithic app.go into focused modules (dashboard, chat, workflow,
config, agents, terminal, commands, handlers). Add proper error handling
for installer commands, proxy pipes, and MCP config parsing. Fix daemon
channel buffer, cap orchestrator history, compile think regex once, and
set HTTP timeouts on preview server. Improve CI with Go module caching,
dependency download step, and test stage with race detection.
😘 Generated with Crush
Assisted-by: GLM-5-Turbo via Crush <crush@charm.land>
Gitea 1.25.2 does not support workflow_dispatch, which silently
prevented the workflow from being parsed. Also added if conditions
on release steps so they only run on push to main, not on PRs.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Simplify CI: one job does build, vet, cross-compile, then replaces
the "latest" release every push to main. No more separate jobs.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Gitea Actions wasn't running the separate release.yml. Now both build
and release are in ci.yml as two jobs: build then release (release only
on push to main, not on PRs).
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Remove the skip-if-tag-exists check. Instead, delete old release+tag
for the version before creating a fresh one (like before but per-version).
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Replace 'q' quit with Ctrl+C confirmation dialog (Yes/No overlay)
Second Ctrl+C within 2s force quits
- Redesign TUI with Charm bubbles components: spinner, progress bar,
help bar, key bindings, better color palette, rounded borders
- Add Shift+Tab to cycle tabs backward
- Fix version: bump to 0.2.0, release workflow checks existing tags
before publishing (no more overwriting releases)
- Handle sudo: CLI auto-relaunches with sudo/pkexec for tools that
need elevated privileges, TUI shows clear error message
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Skip delete step gracefully if no releases exist
- Check GITEA_TOKEN is set before attempting API calls
- Add clear error message if secret is missing
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
GITEA_ENV/GITHUB_ENV doesn't take effect in the same step with
act_runner. Added explicit 'export PATH=/usr/local/go/bin:$PATH'
in every step that uses go.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Use actions/checkout@v4 (works with Gitea runner)
- Simplified CI: build + vet
- Release: auto on push to main, creates/updates "latest" release
- Cleaned up archive step
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Replaced actions/checkout with native git fetch (fixes directory not found)
- Release workflow now triggers on every push to main (no tags needed)
- Auto-creates/updates "latest" release with 6 cross-compiled binaries
- Includes checksums, install instructions, and recent commit log
- Requires GITEA_TOKEN secret in repo settings
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Replaced GitHub Actions with Gitea-compatible workflows:
- CI: build + test + vet on ubuntu-latest (self-hosted runner)
- Release: cross-compile 6 binaries (linux/darwin/windows x amd64/arm64)
with Gitea API release creation and asset uploads
- Removed .github/workflows in favor of .gitea/workflows
Requires Gitea secrets: GITEA_TOKEN, GITEA_SERVER, GITEA_REPO
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>