mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-09 00:49:41 +02:00
fix(ultracode): pop floating windows on fresh devices loading mid-run (v1.1.6)
Re-run syncAllUltracodeFloatingWindows() after server settings load so a first-time device whose getLightState run snapshot arrives before the async settings fetch resolves still pops an already-active run's window immediately, instead of waiting for the next ~10s watcher tick. Also fixes a stale @fileoverview comment that named the wrong gating setting. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,15 @@
|
|||||||
# aicodeman
|
# aicodeman
|
||||||
|
|
||||||
|
## 1.1.6
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Fix: ultracode floating run windows now pop on a fresh device/browser that loads while a run is already active.
|
||||||
|
|
||||||
|
`ultracodeFloatingWindows` syncs from the server (it's a non-display setting), but on a first-time device the SSE `getLightState` run snapshot can seed the run list BEFORE the async settings load resolves — so the floating-window gate read `false` at that instant and skipped any already-active run, leaving the window un-popped until the next ~10s watcher tick. The app now re-runs `syncAllUltracodeFloatingWindows()` once server settings finish loading (in the `loadAppSettingsFromServer().then()` callback), so an in-flight run pops its window immediately. Idempotent: open windows are left as-is, and if the setting is off any premature windows are torn down. Verified end-to-end against a real in-flight run on an isolated instance — a pristine browser (empty localStorage) seeds the setting from the server and pops the active run's window ~0.4s after first paint.
|
||||||
|
|
||||||
|
Also corrected a stale `@fileoverview` comment in `ultracode-windows.js` that claimed the floating windows are gated on `showUltracodeAgents`; they are gated on the dedicated `ultracodeFloatingWindows` toggle (only the docked "Ultracode Agents" panel uses `showUltracodeAgents`).
|
||||||
|
|
||||||
## 1.1.5
|
## 1.1.5
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -56,7 +56,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.
|
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.1.5 (must match `package.json`)
|
**Version**: 1.1.6 (must match `package.json`)
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "aicodeman",
|
"name": "aicodeman",
|
||||||
"version": "1.1.5",
|
"version": "1.1.6",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "aicodeman",
|
"name": "aicodeman",
|
||||||
"version": "1.1.5",
|
"version": "1.1.6",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "aicodeman",
|
"name": "aicodeman",
|
||||||
"version": "1.1.5",
|
"version": "1.1.6",
|
||||||
"description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence",
|
"description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
|||||||
@@ -665,6 +665,16 @@ class CodemanApp {
|
|||||||
this.applySkin();
|
this.applySkin();
|
||||||
this.applyTabWrapSettings();
|
this.applyTabWrapSettings();
|
||||||
this.applyMonitorVisibility();
|
this.applyMonitorVisibility();
|
||||||
|
// ultracodeFloatingWindows syncs from the server (non-display key), but on a
|
||||||
|
// FRESH device the getLightState run snapshot can seed workflowRuns BEFORE this
|
||||||
|
// async settings load resolves — so the floating-window gate read false then and
|
||||||
|
// skipped any already-active run. Re-sync now that the real setting is loaded so
|
||||||
|
// an in-flight run pops its window immediately instead of waiting for the next
|
||||||
|
// ~10s SSE tick. Idempotent: open windows are left as-is; if the setting is off
|
||||||
|
// it tears any premature windows down.
|
||||||
|
if (typeof this.syncAllUltracodeFloatingWindows === 'function') {
|
||||||
|
this.syncAllUltracodeFloatingWindows();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
// Hide loading skeleton now that the app shell is ready
|
// Hide loading skeleton now that the app shell is ready
|
||||||
document.body.classList.add('app-loaded');
|
document.body.classList.add('app-loaded');
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
*
|
*
|
||||||
* This is the "floating thing" companion to the docked master-detail panel in
|
* This is the "floating thing" companion to the docked master-detail panel in
|
||||||
* `ultracode-panel.js` (the dock panel stays — these windows are ADDITIONAL).
|
* `ultracode-panel.js` (the dock panel stays — these windows are ADDITIONAL).
|
||||||
* When the `showUltracodeAgents` setting is on, a small floating window pops up
|
* When the `ultracodeFloatingWindows` setting is on (a DEDICATED toggle, separate
|
||||||
|
* from the dock panel's `showUltracodeAgents` — see `_ultracodeFloatingEnabled`),
|
||||||
|
* a small floating window pops up
|
||||||
* for each ACTIVE ultracode/Workflow run (status not completed/killed/failed),
|
* for each ACTIVE ultracode/Workflow run (status not completed/killed/failed),
|
||||||
* mirroring the live agent grid, and is connected by a glowing line to the
|
* mirroring the live agent grid, and is connected by a glowing line to the
|
||||||
* Codeman tab whose `claudeSessionId` matches the run's `sessionUuid` — the same
|
* Codeman tab whose `claudeSessionId` matches the run's `sessionUuid` — the same
|
||||||
|
|||||||
Reference in New Issue
Block a user