rufloui 0.3.1 → 0.3.2

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/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.2] - 2026-03-12
10
+
11
+ ### Changed
12
+
13
+ - **Port configuration** — Backend moved from 3001 to **28580**, frontend from 5173 to **28588**, daemon from 3002 to **28581**
14
+ - Avoids conflicts with reserved port ranges on Windows (Hyper-V, Docker, antivirus)
15
+ - All documentation, CORS config, WebSocket connections, and Vite proxy updated accordingly
16
+
17
+ ### Fixed
18
+
19
+ - **Workflow cancel** — Now properly updates local store, kills running processes, and cancels linked tasks
20
+ - **Task cancel** — Now kills running `claude -p` processes and cancels linked workflows
21
+ - **Workflow delete** — Removes from local store even when CLI fails
22
+
9
23
  ## [0.3.1] - 2026-03-11
10
24
 
11
25
  ### Added
package/CLAUDE.md CHANGED
@@ -14,13 +14,13 @@
14
14
 
15
15
  ```bash
16
16
  npm install
17
- npm run dev # Starts both frontend (Vite :5173) and backend (Express :3001)
17
+ npm run dev # Starts both frontend (Vite :28588) and backend (Express :28580)
18
18
  # Or individually:
19
- npm run dev:frontend # Vite dev server on port 5173
20
- npm run dev:backend # Express API on port 3001 (tsx watch, auto-reloads)
19
+ npm run dev:frontend # Vite dev server on port 28588
20
+ npm run dev:backend # Express API on port 28580 (tsx watch, auto-reloads)
21
21
  ```
22
22
 
23
- The frontend proxies `/api/*` and `/ws` to `localhost:3001` via Vite config.
23
+ The frontend proxies `/api/*` and `/ws` to `localhost:28580` via Vite config.
24
24
 
25
25
  ## Project Structure
26
26
 
@@ -141,7 +141,7 @@ The backend is a single Express file that wraps CLI commands, manages state, and
141
141
 
142
142
  ### WebSocket Events
143
143
 
144
- - Path: `ws://localhost:3001/ws`
144
+ - Path: `ws://localhost:28580/ws`
145
145
  - **Broadcast events**: `swarm:status`, `agent:activity`, `agent:output`, `task:added`, `task:updated`, `task:output`, `workflow:added`, `workflow:updated`, `session:list`, `performance:metrics`, `viz:update`, `swarm-monitor:update`, `log`
146
146
  - Frontend connects in `App.tsx` and dispatches to Zustand store
147
147
 
@@ -255,7 +255,7 @@ These are critical to understand when modifying the backend:
255
255
  - ALWAYS read a file before editing it
256
256
  - NEVER commit secrets, credentials, or .env files
257
257
  - Keep files under 500 lines where possible (server.ts is an exception at ~2200 lines)
258
- - After editing `server.ts`, the backend must be restarted: `npx kill-port 3001; npx tsx src/backend/server.ts`
258
+ - After editing `server.ts`, the backend must be restarted: `npx kill-port 28580; npx tsx src/backend/server.ts`
259
259
  - Frontend hot-reloads automatically via Vite
260
260
  - When API returns `{ items: [...] }` vs `[...]`, always normalize before setting store
261
261
 
package/README.md CHANGED
@@ -47,14 +47,18 @@ npm run dev
47
47
  ```
48
48
 
49
49
  This starts:
50
- - **Frontend** (Vite) on `http://localhost:5173`
51
- - **Backend** (Express + WebSocket) on `http://localhost:3001`
50
+ - **Frontend** (Vite) on `http://localhost:28588`
51
+ - **Backend** (Express + WebSocket) on `http://localhost:28580`
52
52
 
53
53
  The frontend proxies `/api/*` and `/ws` to the backend automatically.
54
54
 
55
- ### Install via GitHub Packages
55
+ ### Install via npm
56
56
 
57
- RuFloUI is also available as an npm package on GitHub Packages:
57
+ ```bash
58
+ npm install rufloui
59
+ ```
60
+
61
+ ### Install via GitHub Packages
58
62
 
59
63
  ```bash
60
64
  # Configure npm to use GitHub Packages for the @mario-pb scope
@@ -64,14 +68,14 @@ echo "@mario-pb:registry=https://npm.pkg.github.com" >> .npmrc
64
68
  npm install @mario-pb/rufloui
65
69
  ```
66
70
 
67
- > **Note:** You need a GitHub personal access token with `read:packages` scope.
71
+ > **Note:** GitHub Packages requires a personal access token with `read:packages` scope.
68
72
  > Add it to your `~/.npmrc`: `//npm.pkg.github.com/:_authToken=YOUR_TOKEN`
69
73
 
70
74
  ### Individual Services
71
75
 
72
76
  ```bash
73
- npm run dev:frontend # Vite dev server on port 5173
74
- npm run dev:backend # Express API on port 3001 (auto-reloads)
77
+ npm run dev:frontend # Vite dev server on port 28588
78
+ npm run dev:backend # Express API on port 28580 (auto-reloads)
75
79
  ```
76
80
 
77
81
  ### Production Build
@@ -123,7 +127,7 @@ src/
123
127
  ```
124
128
  Browser (React 19) Express Backend
125
129
  ┌────────────────────┐ ┌────────────────────────┐
126
- │ Vite :5173 │───REST /api──>│ Express :3001
130
+ │ Vite :28588 │───REST /api──>│ Express :28580
127
131
  │ Zustand Store │<──WebSocket──>│ WebSocket Server │
128
132
  │ sessionStorage │ │ │
129
133
  └────────────────────┘ │ ┌──────────────────┐ │
@@ -161,7 +165,7 @@ Once the app is running, here's how to go from zero to a working multi-agent swa
161
165
  2. **Spawn agents** — Go to **Agents**, select a type (e.g. `coder`), give it a name, and click **Spawn**. Repeat for other roles you need (`researcher`, `tester`, etc.).
162
166
  3. **Create a task** — Go to **Tasks**, click **Create Task**, fill in a title and description (e.g. "Write a fibonacci function in Python with tests").
163
167
  4. **Assign to swarm** — On the task card, click **Assign to Swarm**. The multi-agent pipeline kicks in: a coordinator plans subtasks, specialist agents execute them in parallel waves.
164
- 5. **Watch it live** — Switch to **Swarm Monitor** to see agent cards light up with real-time output and the orange working glow animation. Or open **Agent Viz** to see the full agent tree built from session logs.
168
+ 5. **Watch it live** — Switch to **Swarm Monitor** to see agent cards light up with real-time output and the orange working glow animation.
165
169
  6. **Continue if needed** — When a task completes, click **Continue Task** to send a follow-up instruction with full context from the previous run.
166
170
 
167
171
  ## Prerequisites
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rufloui",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "React 19 dashboard for claude-flow v3 multi-agent orchestration",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,27 @@
1
+ ## Port Configuration Change
2
+
3
+ Default ports changed to avoid conflicts with Windows reserved ranges (Hyper-V, Docker, antivirus):
4
+
5
+ | Service | Old | New |
6
+ |---------|-----|-----|
7
+ | Backend API | 3001 | **28580** |
8
+ | Frontend UI | 5173 | **28588** |
9
+ | Daemon | 3002 | **28581** |
10
+
11
+ ### Breaking Change
12
+
13
+ If you have bookmarks, scripts, or webhook URLs pointing to the old ports, update them.
14
+
15
+ ### Other Fixes
16
+
17
+ - **Workflow cancel** now properly kills running processes and cancels linked tasks
18
+ - **Task cancel** now kills `claude -p` processes and cancels linked workflows
19
+ - **Workflow delete** works even when CLI fails
20
+
21
+ ### Install
22
+
23
+ ```bash
24
+ npm install rufloui
25
+ ```
26
+
27
+ **Full Changelog**: https://github.com/Mario-PB/rufloui/compare/v0.3.1...v0.3.2
@@ -14,7 +14,7 @@ import { loadGitHubWebhookConfig, githubWebhookRoutes, updateWebhookEventByTaskI
14
14
 
15
15
  const execAsync = promisify(exec)
16
16
  const execFileAsync = promisify(execFile)
17
- const PORT = Number(process.env.PORT) || 3001
17
+ const PORT = Number(process.env.PORT) || 28580
18
18
  const CLI = process.env.RUFLO_CLI || 'npx -y @claude-flow/cli@latest'
19
19
  const CLI_PARTS = (process.env.RUFLO_CLI || 'npx -y @claude-flow/cli@latest').split(/\s+/)
20
20
  const CLI_BIN = CLI_PARTS[0]
@@ -452,10 +452,10 @@ function systemRoutes(): Router {
452
452
  checks.push({ id: 'persist-dir', name: 'Persistence (.ruflo/)', status: 'fail', detail: 'Cannot write to .ruflo/ directory', fix: 'Check file permissions in project directory' })
453
453
  }
454
454
 
455
- // 6. Port availability (3001 is us, check 3002 for daemon)
455
+ // 6. Port availability (28580 is us, check 28581 for daemon)
456
456
  try {
457
457
  await execAsync('npx -y @claude-flow/cli@latest status', { timeout: 15_000 })
458
- checks.push({ id: 'daemon', name: 'claude-flow daemon', status: 'ok', detail: 'Daemon reachable on port 3002' })
458
+ checks.push({ id: 'daemon', name: 'claude-flow daemon', status: 'ok', detail: 'Daemon reachable on port 28581' })
459
459
  } catch {
460
460
  checks.push({ id: 'daemon', name: 'claude-flow daemon', status: 'warn', detail: 'Daemon not running (will start on first use)', fix: 'The daemon starts automatically when needed' })
461
461
  }
@@ -536,8 +536,8 @@ async function ensureDaemon(): Promise<void> {
536
536
  try { await execCli('init', []) } catch (e) {
537
537
  console.log('[daemon] init skipped (may already exist):', e instanceof Error ? e.message : String(e))
538
538
  }
539
- // Start daemon on port 3002 (3001 is our API)
540
- const daemonPort = String(Number(process.env.DAEMON_PORT) || 3002)
539
+ // Start daemon on port 28581 (28580 is our API)
540
+ const daemonPort = String(Number(process.env.DAEMON_PORT) || 28581)
541
541
  await execCli('start', ['--daemon', '--port', daemonPort, '--skip-mcp'])
542
542
  daemonStarted = true
543
543
  } catch (err) {
@@ -2777,7 +2777,7 @@ function swarmMonitorRoutes(): Router {
2777
2777
 
2778
2778
  // Bootstrap
2779
2779
  const app = express()
2780
- app.use(cors({ origin: process.env.RUFLOUI_CORS_ORIGIN || 'http://localhost:5173' }))
2780
+ app.use(cors({ origin: process.env.RUFLOUI_CORS_ORIGIN || 'http://localhost:28588' }))
2781
2781
  app.use(express.json({
2782
2782
  verify: (req: any, _res, buf) => {
2783
2783
  // Preserve the raw body buffer for HMAC signature verification (webhook routes)
@@ -2966,7 +2966,7 @@ server.listen(PORT, async () => {
2966
2966
  await execCli('--version', [])
2967
2967
  console.log(' claude-flow CLI: [OK]')
2968
2968
  } catch { console.log(' claude-flow CLI: [WARN] First run may take longer (npx download)') }
2969
- console.log('Preflight complete. Dashboard: http://localhost:5173')
2969
+ console.log('Preflight complete. Dashboard: http://localhost:28588')
2970
2970
  })
2971
2971
 
2972
2972
  export { app, server }
@@ -85,7 +85,7 @@ export default function AgentsPanel() {
85
85
  // WebSocket for real-time agent activity
86
86
  useEffect(() => {
87
87
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
88
- const ws = new WebSocket(`${protocol}//${window.location.hostname}:3001/ws`)
88
+ const ws = new WebSocket(`${protocol}//${window.location.hostname}:28580/ws`)
89
89
  ws.onmessage = (evt) => {
90
90
  try {
91
91
  const msg = JSON.parse(evt.data)
@@ -337,7 +337,7 @@ export default function TasksPanel() {
337
337
  // WebSocket for live task output
338
338
  useEffect(() => {
339
339
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
340
- const ws = new WebSocket(`${protocol}//${window.location.hostname}:3001/ws`)
340
+ const ws = new WebSocket(`${protocol}//${window.location.hostname}:28580/ws`)
341
341
  wsRef.current = ws
342
342
  ws.onmessage = (evt) => {
343
343
  try {
@@ -234,7 +234,7 @@ export default function WorkflowsPanel() {
234
234
  // WebSocket for live workflow updates
235
235
  useEffect(() => {
236
236
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'
237
- const ws = new WebSocket(`${protocol}//${window.location.hostname}:3001/ws`)
237
+ const ws = new WebSocket(`${protocol}//${window.location.hostname}:28580/ws`)
238
238
  ws.onmessage = (evt) => {
239
239
  try {
240
240
  const msg = JSON.parse(evt.data)
package/vite.config.ts CHANGED
@@ -11,11 +11,11 @@ export default defineConfig({
11
11
  },
12
12
  },
13
13
  server: {
14
- port: 5173,
14
+ port: 28588,
15
15
  proxy: {
16
- '/api': 'http://localhost:3001',
16
+ '/api': 'http://localhost:28580',
17
17
  '/ws': {
18
- target: 'ws://localhost:3001',
18
+ target: 'ws://localhost:28580',
19
19
  ws: true,
20
20
  },
21
21
  },
package/{ ADDED
File without changes
package/{, ADDED
File without changes