flying-lobster 1.9.2 → 1.9.4

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 ADDED
@@ -0,0 +1,33 @@
1
+ # 🦞 Flying Lobster
2
+
3
+ **Always-on-top chat window for OpenClaw AI agents.**
4
+
5
+ A lightweight macOS desktop app that keeps your AI assistant one keystroke away. Floats above all windows, toggles with a global hotkey, and connects to any OpenClaw gateway.
6
+
7
+ ## Features
8
+
9
+ - **Always-on-top** — Stays visible over fullscreen apps
10
+ - **Global hotkey** — Toggle with `⌘⇧Space` (customizable)
11
+ - **Switch agents instantly** — Add multiple gateways, swap between AI agents with one click
12
+ - **Dark/Light mode** — Syncs with your system or toggle manually
13
+ - **Minimal UI** — Just you and your AI, no clutter
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ npx flying-lobster install
19
+ ```
20
+
21
+ Drag to Applications, done.
22
+
23
+ ## Requirements
24
+
25
+ - macOS 12+
26
+ - An OpenClaw gateway URL (get one at [openclaw.ai](https://openclaw.ai))
27
+
28
+ ## Usage
29
+
30
+ 1. Launch Flying Lobster
31
+ 2. Click the 🦞 tray icon → Add Gateway
32
+ 3. Enter your gateway URL and name
33
+ 4. Press `⌘⇧Space` to toggle the window
package/package.json CHANGED
@@ -1,9 +1,22 @@
1
1
  {
2
2
  "name": "flying-lobster",
3
- "version": "1.9.2",
3
+ "version": "1.9.4",
4
4
  "description": "Always-on-top chat window for OpenClaw gateways 🦞",
5
5
  "author": "Rootlab.ai",
6
6
  "license": "MIT",
7
+ "keywords": [
8
+ "openclaw",
9
+ "moltbot",
10
+ "clawdbot",
11
+ "ai-assistant",
12
+ "ai-agents",
13
+ "agent-switcher",
14
+ "always-on-top",
15
+ "chat",
16
+ "claude",
17
+ "llm",
18
+ "productivity"
19
+ ],
7
20
  "main": "src/main/index.js",
8
21
  "bin": {
9
22
  "flying-lobster": "./bin/cli.js"
@@ -165,9 +165,13 @@ async function startUpdate() {
165
165
  updateState.progress = 'Downloading latest version...';
166
166
  notifyRenderer();
167
167
 
168
- const npxProcess = spawn('npx', ['flying-lobster@latest', 'install'], {
168
+ // Use full shell command to ensure npx is found
169
+ const command = 'npx flying-lobster@latest install';
170
+ console.log('[Updater] Running:', command);
171
+
172
+ const npxProcess = spawn(command, [], {
169
173
  shell: true,
170
- env: { ...process.env, FORCE_COLOR: '0' }
174
+ env: { ...process.env, FORCE_COLOR: '0', PATH: process.env.PATH + ':/usr/local/bin:/opt/homebrew/bin' }
171
175
  });
172
176
 
173
177
  let output = '';
@@ -194,6 +198,19 @@ async function startUpdate() {
194
198
  const text = data.toString();
195
199
  output += text;
196
200
  console.log('[Updater stderr]', text);
201
+ // Show stderr as progress if it looks like status
202
+ if (text.includes('npm') || text.includes('npx')) {
203
+ updateState.progress = 'Downloading...';
204
+ notifyRenderer();
205
+ }
206
+ });
207
+
208
+ // Handle spawn error immediately
209
+ npxProcess.on('error', (err) => {
210
+ console.error('[Updater] Spawn error:', err);
211
+ updateState.updating = false;
212
+ updateState.error = 'Failed to start update: ' + err.message;
213
+ notifyRenderer();
197
214
  });
198
215
 
199
216
  await new Promise((resolve, reject) => {