Skip to content

Commit a54e936

Browse files
authored
feat: live reloading on changes to agent (#165)
restart the app on changes to the agent package
1 parent c48eb02 commit a54e936

File tree

6 files changed

+96
-5
lines changed

6 files changed

+96
-5
lines changed

apps/array/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,10 @@
116116
"@xterm/addon-web-links": "^0.11.0",
117117
"@xterm/xterm": "^5.5.0",
118118
"ai": "^5.0.75",
119+
"chokidar": "^5.0.0",
119120
"cmdk": "^1.1.1",
120121
"date-fns": "^3.3.1",
122+
"electron-store": "^11.0.0",
121123
"idb-keyval": "^6.2.2",
122124
"node-addon-api": "^8.5.0",
123125
"node-pty": "1.1.0-beta39",
@@ -133,7 +135,6 @@
133135
"sonner": "^2.0.7",
134136
"uuid": "^9.0.1",
135137
"zod": "^4.1.12",
136-
"zustand": "^4.5.0",
137-
"electron-store": "^11.0.0"
138+
"zustand": "^4.5.0"
138139
}
139140
}

apps/array/src/main/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import {
1212
} from "electron";
1313
import { ANALYTICS_EVENTS } from "../types/analytics.js";
1414
import { registerAgentIpc, type TaskController } from "./services/agent.js";
15-
import { registerFoldersIpc } from "./services/folders.js";
16-
import { registerWorktreeIpc } from "./services/worktree.js";
17-
import "./services/index.js";
15+
import { setupAgentHotReload } from "./services/dev-reload.js";
1816
import { registerFileWatcherIpc } from "./services/fileWatcher.js";
17+
import { registerFoldersIpc } from "./services/folders.js";
1918
import { registerFsIpc } from "./services/fs.js";
2019
import { registerGitIpc } from "./services/git.js";
20+
import "./services/index.js";
2121
import { registerOAuthHandlers } from "./services/oauth.js";
2222
import { registerOsIpc } from "./services/os.js";
2323
import { registerPosthogIpc } from "./services/posthog.js";
@@ -28,6 +28,7 @@ import {
2828
} from "./services/posthog-analytics.js";
2929
import { registerShellIpc } from "./services/shell.js";
3030
import { registerAutoUpdater } from "./services/updates.js";
31+
import { registerWorktreeIpc } from "./services/worktree.js";
3132

3233
const __filename = fileURLToPath(import.meta.url);
3334
const __dirname = path.dirname(__filename);
@@ -183,6 +184,11 @@ app.whenReady().then(() => {
183184
// Initialize PostHog analytics
184185
initializePostHog();
185186
trackAppEvent(ANALYTICS_EVENTS.APP_STARTED);
187+
188+
// Dev mode: Watch agent package and restart via mprocs
189+
if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
190+
setupAgentHotReload();
191+
}
186192
});
187193

188194
app.on("window-all-closed", async () => {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import path from "node:path";
2+
import { app } from "electron";
3+
import { watch, type FSWatcher } from "chokidar";
4+
5+
let watcher: FSWatcher | null = null;
6+
7+
export function setupAgentHotReload(): void {
8+
if (watcher) return;
9+
10+
const monorepoRoot = path.resolve(app.getAppPath(), "../..");
11+
const agentDistPath = path.join(monorepoRoot, "packages/agent/dist");
12+
13+
console.log(`[dev] Watching agent package: ${agentDistPath}`);
14+
15+
let debounceTimeout: NodeJS.Timeout | null = null;
16+
17+
watcher = watch(agentDistPath, {
18+
ignoreInitial: true,
19+
ignored: /node_modules/,
20+
});
21+
22+
watcher.on("change", (filePath) => {
23+
if (debounceTimeout) clearTimeout(debounceTimeout);
24+
debounceTimeout = setTimeout(() => {
25+
console.log(`[dev] Agent rebuilt: ${path.basename(filePath)}`);
26+
console.log("[dev] Exiting for mprocs to restart...");
27+
process.exit(0);
28+
}, 1000);
29+
});
30+
}

apps/array/src/main/services/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import "./agent.js";
77
import "./contextMenu.js";
8+
import "./dev-reload.js";
89
import "./fileWatcher.js";
910
import "./folders.js";
1011
import "./fs.js";

mprocs.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ procs:
88
cmd: ["pnpm", "--filter", "array", "run", "start"]
99
cwd: .
1010
color: blue
11+
autorestart: true
1112
depends_on:
1213
- agent

pnpm-lock.yaml

Lines changed: 52 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)