@chenbihao/pomasa-dashboard 1.0.0 → 1.0.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.
Files changed (3) hide show
  1. package/README.md +45 -61
  2. package/dist/cli.js +13 -5
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,73 +1,57 @@
1
- # React + TypeScript + Vite
1
+ # POMASA Dashboard
2
2
 
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
3
+ A web-based control panel for visualizing and monitoring POMASA multi-agent system (MAS) execution.
4
4
 
5
- Currently, two official plugins are available:
5
+ ## Quick Start
6
6
 
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
7
+ ```bash
8
+ npx @chenbihao/pomasa-dashboard
9
+ ```
9
10
 
10
- ## React Compiler
11
+ The dashboard will start at `http://localhost:3001` and open in your browser automatically.
11
12
 
12
- The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
13
+ ### Options
13
14
 
14
- ## Expanding the ESLint configuration
15
+ ```bash
16
+ # Custom port
17
+ npx @chenbihao/pomasa-dashboard --port 8080
15
18
 
16
- If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
19
+ # Or via environment variable
20
+ PORT=8080 npx @chenbihao/pomasa-dashboard
21
+ ```
17
22
 
18
- ```js
19
- export default defineConfig([
20
- globalIgnores(['dist']),
21
- {
22
- files: ['**/*.{ts,tsx}'],
23
- extends: [
24
- // Other configs...
23
+ ## Features
25
24
 
26
- // Remove tseslint.configs.recommended and replace with this
27
- tseslint.configs.recommendedTypeChecked,
28
- // Alternatively, use this for stricter rules
29
- tseslint.configs.strictTypeChecked,
30
- // Optionally, add this for stylistic rules
31
- tseslint.configs.stylisticTypeChecked,
25
+ - **Project Overview** card grid with stats (total, running, completed, alerts), progress bars, and status badges
26
+ - **Pipeline Visualization** — interactive DAG view of agent execution pipelines
27
+ - **Event Timeline** real-time event and log monitoring
28
+ - **File Viewer** — browse and view project files with syntax highlighting
29
+ - **Embedded Terminal** built-in web terminal for interacting with projects
30
+ - **Project Creation** — create new MAS projects from templates
31
+ - **i18n** — English and Chinese interface
32
32
 
33
- // Other configs...
34
- ],
35
- languageOptions: {
36
- parserOptions: {
37
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
38
- tsconfigRootDir: import.meta.dirname,
39
- },
40
- // other options...
41
- },
42
- },
43
- ])
44
- ```
33
+ ## Development
34
+
35
+ ```bash
36
+ # Install dependencies
37
+ npm install
38
+
39
+ # Start dev server (frontend + backend with hot reload)
40
+ npm run dev
45
41
 
46
- You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
47
-
48
- ```js
49
- // eslint.config.js
50
- import reactX from 'eslint-plugin-react-x'
51
- import reactDom from 'eslint-plugin-react-dom'
52
-
53
- export default defineConfig([
54
- globalIgnores(['dist']),
55
- {
56
- files: ['**/*.{ts,tsx}'],
57
- extends: [
58
- // Other configs...
59
- // Enable lint rules for React
60
- reactX.configs['recommended-typescript'],
61
- // Enable lint rules for React DOM
62
- reactDom.configs.recommended,
63
- ],
64
- languageOptions: {
65
- parserOptions: {
66
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
67
- tsconfigRootDir: import.meta.dirname,
68
- },
69
- // other options...
70
- },
71
- },
72
- ])
42
+ # Build for production
43
+ npm run build
44
+
45
+ # Lint
46
+ npm run lint
73
47
  ```
48
+
49
+ ## Tech Stack
50
+
51
+ - **Frontend**: React 19, TypeScript, Vite, Tailwind CSS, ReactFlow
52
+ - **Backend**: Express 5, WebSocket, node-pty
53
+ - **Terminal**: xterm.js with WebGL renderer
54
+
55
+ ## License
56
+
57
+ MIT
package/dist/cli.js CHANGED
@@ -995,19 +995,19 @@ function createApp() {
995
995
  });
996
996
  return { app, server };
997
997
  }
998
- function startServer(port2, maxRetries = 10) {
998
+ function startServer(port2, host2 = "127.0.0.1", maxRetries = 10) {
999
999
  const { server } = createApp();
1000
1000
  return new Promise((resolve, reject) => {
1001
1001
  server.on("error", (err) => {
1002
1002
  if (err.code === "EADDRINUSE" && maxRetries > 0) {
1003
1003
  console.log(`Port ${port2} in use, trying ${port2 + 1}...`);
1004
1004
  server.removeAllListeners("error");
1005
- startServer(port2 + 1, maxRetries - 1).then(resolve).catch(reject);
1005
+ startServer(port2 + 1, host2, maxRetries - 1).then(resolve).catch(reject);
1006
1006
  } else {
1007
1007
  reject(err);
1008
1008
  }
1009
1009
  });
1010
- server.listen(port2, () => {
1010
+ server.listen(port2, host2, () => {
1011
1011
  console.log(`POMASA Dashboard running at http://localhost:${port2}`);
1012
1012
  console.log(`API at http://localhost:${port2}/api`);
1013
1013
  console.log(`WebSocket terminal at ws://localhost:${port2}/api/terminal`);
@@ -1030,8 +1030,16 @@ if (portArg !== -1 && process.argv[portArg + 1]) {
1030
1030
  } else if (process.env.PORT) {
1031
1031
  port = parseInt(process.env.PORT, 10);
1032
1032
  }
1033
- startServer(port).then(async () => {
1034
- const url = `http://localhost:${port}`;
1033
+ var host = "127.0.0.1";
1034
+ var hostArg = process.argv.indexOf("--host");
1035
+ if (hostArg !== -1 && process.argv[hostArg + 1]) {
1036
+ host = process.argv[hostArg + 1];
1037
+ } else if (process.env.HOST) {
1038
+ host = process.env.HOST;
1039
+ }
1040
+ startServer(port, host).then(async () => {
1041
+ const displayHost = host === "0.0.0.0" ? "localhost" : host;
1042
+ const url = `http://${displayHost}:${port}`;
1035
1043
  try {
1036
1044
  const open = (await import("open")).default;
1037
1045
  await open(url);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenbihao/pomasa-dashboard",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "POMASA Multi-Agent System Dashboard",
5
5
  "repository": {
6
6
  "type": "git",