diff --git a/packages/app/src/components/settings-v2/developer-tools-controller.ts b/packages/app/src/components/settings-v2/developer-tools-controller.ts index 162e99e1e..934ef3db6 100644 --- a/packages/app/src/components/settings-v2/developer-tools-controller.ts +++ b/packages/app/src/components/settings-v2/developer-tools-controller.ts @@ -26,13 +26,35 @@ export function createDeveloperToolsController() { const [rebuildState, setRebuildState] = createSignal("idle") const [rebuildError, setRebuildError] = createSignal(undefined) - // On mount, check if we just came back from a successful rebuild reload + // On mount, check if we just came back from a rebuild (successful or in-progress). + // The "rebuilding" flag survives iframe reloads caused by file-watcher churn + // (e.g. git checkout in a watched workspace folder during remote rebuild). onMount(() => { try { - if (localStorage.getItem("amicode:devtools-rebuilt") === "1") { + const wasRebuilding = localStorage.getItem("amicode:devtools-rebuilding") === "1" + const didFinish = localStorage.getItem("amicode:devtools-rebuilt") === "1" + + if (wasRebuilding && didFinish) { + // Rebuild completed during a reload — show success + localStorage.removeItem("amicode:devtools-rebuilding") + localStorage.removeItem("amicode:devtools-rebuilt") + setRebuildState("rebuilt") + setTimeout(() => setRebuildState("idle"), 5000) + } else if (wasRebuilding) { + // Still rebuilding — restore the indicator (iframe reloaded mid-rebuild) + setRebuildState("rebuilding") + // Safety timeout: clear after 5 min to avoid permanently stuck state + setTimeout(() => { + if (rebuildState() === "rebuilding") { + try { localStorage.removeItem("amicode:devtools-rebuilding") } catch {} + setRebuildState("failed") + setRebuildError("Rebuild timed out") + } + }, 300_000) + } else if (didFinish) { + // Legacy path (rebuilding flag missing but rebuilt is set) localStorage.removeItem("amicode:devtools-rebuilt") setRebuildState("rebuilt") - // Clear the "rebuilt" badge after 5 seconds setTimeout(() => setRebuildState("idle"), 5000) } } catch { @@ -74,10 +96,13 @@ export function createDeveloperToolsController() { setRebuildState("rebuilding") setRebuildError(undefined) } else if (d.state === "failed") { + try { localStorage.removeItem("amicode:devtools-rebuilding") } catch {} setRebuildState("failed") setRebuildError(d.error ?? "Unknown error") + } else if (d.state === "done") { + try { localStorage.removeItem("amicode:devtools-rebuilding") } catch {} + // The window reload follows shortly — "rebuilt" flag is read on next mount } - // "done" state triggers a reload — the "rebuilt" flag is read on next mount } } @@ -108,6 +133,7 @@ export function createDeveloperToolsController() { setRebuildState("rebuilding") setRebuildError(undefined) try { + localStorage.setItem("amicode:devtools-rebuilding", "1") localStorage.setItem("amicode:devtools-reopen", "1") localStorage.setItem("amicode:devtools-rebuilt", "1") } catch { diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index eabf42843..25cba3656 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -773,7 +773,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "ملاحظات الإصدار", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index b9afab02d..66381cb5e 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -785,7 +785,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Notas da versão", diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts index 2aaa1abde..1feeb6255 100644 --- a/packages/app/src/i18n/bs.ts +++ b/packages/app/src/i18n/bs.ts @@ -851,7 +851,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Bilješke o izdanju", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 5da01ace6..533cec05d 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -843,7 +843,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Udgivelsesnoter", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index c573cbd8e..b132f92f3 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -797,7 +797,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Versionshinweise", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 57ab09cc6..c9f2ba559 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -1028,7 +1028,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 398b91313..ab1145a2e 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -856,7 +856,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Notas de la versión", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index a9b6365ef..88703a476 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -795,7 +795,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Notes de version", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index c5f858498..023274235 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -780,7 +780,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "リリースノート", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index eee280c33..8a2bfaf14 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -622,7 +622,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "릴리스 노트", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index 30aabc422..400af7d06 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -696,7 +696,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Utgivelsesnotater", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index 2a738841d..0c6b0b5dc 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -785,7 +785,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Informacje o wydaniu", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index 9ee6ae4d1..8dd2d9ba6 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -852,7 +852,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Примечания к выпуску", diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts index cf1b02b85..a8a7b40f3 100644 --- a/packages/app/src/i18n/th.ts +++ b/packages/app/src/i18n/th.ts @@ -839,7 +839,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "บันทึกการอัปเดต", diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts index e3d965fbd..bacd71f2b 100644 --- a/packages/app/src/i18n/tr.ts +++ b/packages/app/src/i18n/tr.ts @@ -858,7 +858,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Sürüm notları", diff --git a/packages/app/src/i18n/uk.ts b/packages/app/src/i18n/uk.ts index 9423b04a3..eb5046cf9 100644 --- a/packages/app/src/i18n/uk.ts +++ b/packages/app/src/i18n/uk.ts @@ -945,7 +945,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "Нотатки до релізу", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 45f88e027..98adf1ee2 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -832,7 +832,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "发行说明", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index f1205da20..8c6a7d4b8 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -829,7 +829,7 @@ export const dict = { "settings.general.row.amicodePath.building": "Building extension…", "settings.general.row.amicodePath.reloadNeeded": "Reload to apply", "settings.general.row.devTools.rebuildLocally": "Rebuild Locally", - "settings.general.row.devTools.rebuildRemotely": "Rebuild Remotely", + "settings.general.row.devTools.rebuildRemotely": "Rebuild from Latest", "settings.general.row.devTools.rebuilding": "Rebuilding…", "settings.general.row.devTools.rebuilt": "Rebuilt!", "settings.general.row.releaseNotes.title": "發行說明",