vibemon 1.9.2 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,8 +20,8 @@ The app launches in the system tray and listens on `http://127.0.0.1:19280`.
20
20
 
21
21
  ## Supported Tools
22
22
 
23
- - **Apto** - Personal AI coding assistant
24
23
  - **[Claude Code](https://claude.ai/code)** - Anthropic's AI coding assistant
24
+ - **[Codex](https://openai.com/codex)** - OpenAI's AI coding agent
25
25
  - **[Kiro](https://kiro.dev/)** - AWS's AI coding assistant
26
26
  - **[OpenClaw](https://openclaw.ai/)** - Open-source computer use agent
27
27
 
Binary file
package/main.js CHANGED
@@ -160,6 +160,22 @@ function handleWsStatusUpdate(data) {
160
160
  windowManager.sendToWindow(projectId, 'state-update', stateData);
161
161
  }
162
162
 
163
+ /**
164
+ * Handle project deletion from WebSocket ({type: 'delete', data: {project}}).
165
+ * Closes the window for the deleted project; windowManager.onWindowClosed
166
+ * cascades into stateManager.cleanupProject and tray refresh, so no extra
167
+ * bookkeeping is needed here. No-op when the project is unknown locally.
168
+ */
169
+ function handleWsStatusDelete(projectId) {
170
+ if (typeof projectId !== 'string' || projectId.length === 0) {
171
+ return;
172
+ }
173
+ if (!windowManager.getWindow(projectId)) {
174
+ return;
175
+ }
176
+ windowManager.closeWindow(projectId);
177
+ }
178
+
163
179
  // IPC handlers
164
180
  ipcMain.handle('get-version', () => {
165
181
  return app.getVersion();
@@ -321,6 +337,9 @@ app.whenReady().then(() => {
321
337
  wsClient.onStatusUpdate = (data) => {
322
338
  handleWsStatusUpdate(data);
323
339
  };
340
+ wsClient.onStatusDelete = (projectId) => {
341
+ handleWsStatusDelete(projectId);
342
+ };
324
343
  wsClient.onConnectionChange = () => {
325
344
  if (trayManager) {
326
345
  trayManager.updateMenu();
@@ -72,6 +72,18 @@ function createTrayIcon(state, character = 'clawd') {
72
72
  rect(13, 16, 3, 3, charColor); // Right leg
73
73
  rect(7, 10, 2, 2, '#40E0D0'); // Left eye (cyan)
74
74
  rect(13, 10, 2, 2, '#40E0D0'); // Right eye (cyan)
75
+ } else if (charName === 'codex') {
76
+ // Draw codex character (green terminal robot)
77
+ rect(8, 2, 6, 2, charColor); // Top cap
78
+ rect(6, 4, 10, 2, charColor); // Head taper
79
+ rect(5, 6, 12, 9, charColor); // Main body
80
+ rect(3, 9, 2, 5, charColor); // Left arm
81
+ rect(17, 9, 2, 5, charColor); // Right arm
82
+ rect(7, 15, 3, 4, charColor); // Left leg
83
+ rect(12, 15, 3, 4, charColor); // Right leg
84
+ rect(7, 9, 2, 2, COLOR_EYE); // Left eye
85
+ rect(12, 9, 2, 2, COLOR_EYE); // Right eye
86
+ rect(9, 12, 4, 1, COLOR_EYE); // Mouth
75
87
  } else {
76
88
  // Draw clawd character (default)
77
89
  rect(4, 6, 14, 8, charColor); // Body
@@ -41,6 +41,7 @@ class WsClient {
41
41
 
42
42
  // Callbacks
43
43
  this.onStatusUpdate = null; // Called when status message received
44
+ this.onStatusDelete = null; // Called when {type:'delete'} received with project name
44
45
  this.onConnectionChange = null; // Called when connection state changes
45
46
  }
46
47
 
@@ -240,6 +241,15 @@ class WsClient {
240
241
  return;
241
242
  }
242
243
 
244
+ // Handle project deletion (server sends {type: "delete", data: {project}})
245
+ // Emitted by DELETE /api/status?project=X on the server side.
246
+ if (message.type === 'delete' && message.data && typeof message.data.project === 'string') {
247
+ if (this.onStatusDelete) {
248
+ this.onStatusDelete(message.data.project);
249
+ }
250
+ return;
251
+ }
252
+
243
253
  // Handle status update (direct format: {state: "..."})
244
254
  if (message.state) {
245
255
  if (this.onStatusUpdate) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibemon",
3
- "version": "1.9.2",
3
+ "version": "1.10.0",
4
4
  "description": "AI assistant status monitor",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer.js CHANGED
@@ -24,10 +24,10 @@ async function init() {
24
24
  vibeMonEngine = createVibeMonEngine(container, {
25
25
  useEmoji,
26
26
  characterImageUrls: {
27
- apto: `${STATIC_BASE}/characters/apto.png`,
28
27
  clawd: `${STATIC_BASE}/characters/clawd.png`,
29
28
  kiro: `${STATIC_BASE}/characters/kiro.png`,
30
- claw: `${STATIC_BASE}/characters/claw.png`
29
+ claw: `${STATIC_BASE}/characters/claw.png`,
30
+ codex: `${STATIC_BASE}/characters/codex.png`
31
31
  }
32
32
  });
33
33
  await vibeMonEngine.init();
@@ -37,8 +37,8 @@
37
37
 
38
38
  "PROJECT_NAME_MAX_LENGTH": 20,
39
39
  "PROJECT_NAME_TRUNCATE_AT": 17,
40
- "MODEL_NAME_MAX_LENGTH": 14,
41
- "MODEL_NAME_TRUNCATE_AT": 11,
40
+ "MODEL_NAME_MAX_LENGTH": 20,
41
+ "MODEL_NAME_TRUNCATE_AT": 17,
42
42
 
43
43
  "MATRIX_STREAM_DENSITY": 0.7,
44
44
  "MATRIX_SPEED_MIN": 1,
@@ -63,13 +63,13 @@
63
63
 
64
64
  "VALID_STATES": ["start", "idle", "thinking", "planning", "working", "packing", "notification", "done", "sleep", "alert"],
65
65
 
66
- "CHARACTER_NAMES": ["apto", "clawd", "kiro", "claw"],
66
+ "CHARACTER_NAMES": ["clawd", "kiro", "claw", "codex"],
67
67
 
68
68
  "CHARACTER_COLORS": {
69
- "apto": "#797C98",
70
69
  "clawd": "#D97757",
71
70
  "kiro": "#FFFFFF",
72
- "claw": "#DD4444"
71
+ "claw": "#DD4444",
72
+ "codex": "#10A37F"
73
73
  },
74
74
 
75
75
  "STATE_COLORS": {
Binary file