diff --git a/.changeset/custom-name-bilingual-ui.md b/.changeset/custom-name-bilingual-ui.md deleted file mode 100644 index 5e7b1a51..00000000 --- a/.changeset/custom-name-bilingual-ui.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"aicodeman": patch ---- - -Add a synced custom display name and a per-device English/Simplified Chinese browser UI language picker under App Settings → Display. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f9b43d8..e9fcf901 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # aicodeman +## 1.7.0 + +### Minor Changes + +- Community release (thanks @shenlvkang-collab for all four PRs) plus documentation fixes. + - fix(mobile): per-device settings now key off a stable handheld classification (`MobileDetection.isHandheldDevice()`: touch plus UA form-factor tokens, with User-Agent Client Hints fallback) instead of the instantaneous viewport width, so an Android foldable that unfolds past the desktop breakpoint keeps `codeman-app-settings-mobile` and opt-ins such as the Response Viewer and Extended Keyboard Bar. Responsive layout stays width-driven. Adds an OPPO Find N5 (unfolded) device profile and a fold/unfold/reload Playwright regression test (mobile suite now 136 devices). (#162) + - fix(paths): `SAFE_PATH_PATTERN` now accepts Unicode letters and numbers (`\p{L}\p{N}` with the `u` flag), so working directories like `/mnt/d/AI/中文项目` validate in Create Session, Quick Run, and Scheduled Run. All shell-metacharacter, traversal, and absolute-path protections are unchanged. (#163) + - fix(ui): newly created run sessions render their tab immediately instead of waiting for the `session:created` SSE event (idempotent upsert from the POST response, with a `GET /api/sessions/:id` fallback for quick-start modes), and the Run button holds an in-flight lock (min 500 ms) so a double click cannot create duplicate sessions. (#164) + - feat(ui): the synced custom display name and per-device English/Simplified Chinese UI language are described in their own entry (#165); on top of that PR, `renderIndexHtml` no longer recomputes `windowTitle` on solo-session renders, so a detached window cannot reset the push-notification `hostTitle` prefix to the default name. + - docs: corrected the `sse-events.ts` fileoverview breakdown (148 event constants, was stale at 120; per-category counts refreshed, including Cron, Docker, Remote auto-reconnect, and Multi-user) and the CLAUDE.md SSE registry count; READMEs synced with the 1.6.2 installer behavior. + +### Patch Changes + +- 8d9fc41: Add a synced custom display name and a per-device English/Simplified Chinese browser UI language picker under App Settings → Display. + ## 1.6.2 ### Patch Changes diff --git a/CLAUDE.md b/CLAUDE.md index 2e5d6f65..419ffaf7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -60,7 +60,7 @@ When user says "COM": CI runs `npm run check:lockfile` on every push/PR, so lockfile drift fails the build even if the `version-packages` script is bypassed. -**Version**: 1.6.2 (must match `package.json`) +**Version**: 1.7.0 (must match `package.json`) ## Project Overview @@ -257,7 +257,7 @@ Frontend JS modules have `@fileoverview` with `@dependency`/`@loadorder` tags. L ### SSE Event Registry -~146 event types in `src/web/sse-events.ts` (backend) and `SSE_EVENTS` in `constants.js` (frontend), incl. `docker:exportComplete`/`exportFailed`/`importComplete` and `docker:imageBuildStarted`/`imageBuildProgress`/`imageBuildComplete`/`imageBuildFailed`. Both must be kept in sync. +148 event constants in `src/web/sse-events.ts` (backend) and `SSE_EVENTS` in `constants.js` (frontend), incl. `docker:exportComplete`/`exportFailed`/`importComplete` and `docker:imageBuildStarted`/`imageBuildProgress`/`imageBuildComplete`/`imageBuildFailed`. Both must be kept in sync. ### API Routes diff --git a/package-lock.json b/package-lock.json index 0038fb62..c08cfd79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aicodeman", - "version": "1.6.2", + "version": "1.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aicodeman", - "version": "1.6.2", + "version": "1.7.0", "hasInstallScript": true, "license": "MIT", "workspaces": [ diff --git a/package.json b/package.json index 05e32124..994ee833 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aicodeman", - "version": "1.6.2", + "version": "1.7.0", "description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/sse-events.ts b/src/web/sse-events.ts index becc90c9..c1c6f059 100644 --- a/src/web/sse-events.ts +++ b/src/web/sse-events.ts @@ -5,27 +5,31 @@ * and referenced by the frontend (`SSE_EVENTS` in `constants.js`). * Both files MUST be kept in sync. * - * 120 event constants organized by category: + * 148 event constants organized by category: * - **Core** (1): init - * - **Session lifecycle** (17): created, updated, deleted, terminal, idle, working, ... + * - **Session lifecycle** (23): created, updated, deleted, terminal, idle, working, ... * - **Session: Ralph** (6): ralphLoopUpdate, todoUpdate, completionDetected, ... * - **Session: Bash tools** (3): bashToolStart, bashToolEnd, bashToolsUpdate * - **Session: Plan** (4): planTaskUpdate, planCheckpoint, planRollback, planTaskAdded * - **Tasks** (4): created, completed, failed, updated * - **Mux** (4): created, killed, died, statsUpdated + * - **Remote auto-reconnect** (3): sessionDropped, sessionReconnected, reconnectExhausted * - **Respawn** (24): stateChanged, cycleStarted/Completed, step*, aiCheck*, planCheck*, timer*, log, ... * - **Subagents** (7): discovered, updated, tool_call, tool_result, progress, message, completed * - **Workflow runs** (3): run_discovered, run_updated, run_removed (ultracode / Workflow tool) * - **Scheduled** (6): created, updated, completed, stopped, log, deleted + * - **Cron jobs** (4): jobsChanged, jobDeleted, runCreated, runUpdated * - **Teams** (4): created, updated, removed, taskUpdated * - **Transcript** (4): complete, plan_mode, tool_start, tool_end * - **Plan orchestration** (5): started, progress, subagent, completed, cancelled * - **Tunnel** (7): started, stopped, progress, error, qrRotated, qrRegenerated, qrAuthUsed - * - **Image** (1): detected + * - **Image / attachments** (2): image:detected, attachment:detected * - **Hooks** (6): idle_prompt, permission_prompt, elicitation_dialog, stop, teammate_idle, task_completed * - **Orchestrator** (12): stateChanged, planProgress, planReady, phase*, verification, task*, completed, error * - **Clipboard** (1): write * - **Cases** (4): created, linked, deleted, order-changed + * - **Docker cases** (8): exportComplete/Failed, importComplete, imageBuild*, containerRecreated + * - **Multi-user** (3): admin:usersChanged, auth:passwordChangeRequired, session:orderChanged * * Naming convention: `domain:action` (e.g., `session:created`, `respawn:stateChanged`) *