myrlin-workbook 0.8.10 → 0.9.1
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 +2 -0
- package/package.json +64 -64
- package/src/gui.js +5 -2
- package/src/web/auth.js +399 -308
- package/src/web/pty-manager.js +4 -1
- package/src/web/public/app.js +222 -95
- package/src/web/public/index.html +13 -6
- package/src/web/public/styles.css +161 -41
- package/src/web/public/terminal.js +5 -0
- package/src/web/server.js +230 -0
- package/cron-full.json +0 -813
- package/cron-runs.json +0 -813
- package/logo-cropped.png +0 -0
- package/src/web/public/logo-cropped.png +0 -0
package/README.md
CHANGED
|
@@ -54,6 +54,8 @@ CWM_PASSWORD=mypassword npx myrlin-workbook
|
|
|
54
54
|
|
|
55
55
|
Password lookup order: `CWM_PASSWORD` env var > `~/.myrlin/config.json` > `./state/config.json` > auto-generate.
|
|
56
56
|
|
|
57
|
+
On startup, the console prints a clickable URL with a one-time token (e.g., `http://127.0.0.1:3456?token=<random>`). Click it to auto-login — the token is single-use and expires after 60 seconds, so it's safe even if it appears in terminal logs. The token is stripped from the URL bar immediately after login.
|
|
58
|
+
|
|
57
59
|
### Prerequisites
|
|
58
60
|
|
|
59
61
|
- **Node.js 18+** ([download](https://nodejs.org))
|
package/package.json
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "myrlin-workbook",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Browser-based project manager for Claude Code sessions - session discovery, multi-terminal, cost tracking, docs, and kanban board",
|
|
5
|
-
"main": "src/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"myrlin-workbook": "./src/gui.js",
|
|
8
|
-
"myrlin": "./src/gui.js",
|
|
9
|
-
"myrlin-tui": "./src/index.js",
|
|
10
|
-
"cwm": "./src/index.js"
|
|
11
|
-
},
|
|
12
|
-
"scripts": {
|
|
13
|
-
"start": "node src/index.js",
|
|
14
|
-
"demo": "node src/demo.js",
|
|
15
|
-
"gui": "node src/supervisor.js",
|
|
16
|
-
"gui:bare": "node src/gui.js",
|
|
17
|
-
"gui:demo": "node src/supervisor.js --demo",
|
|
18
|
-
"test": "node test/run.js",
|
|
19
|
-
"mcp:visual-qa": "node src/mcp/visual-qa.js",
|
|
20
|
-
"gui:cdp": "node src/supervisor.js --cdp",
|
|
21
|
-
"postinstall": "node scripts/postinstall.js",
|
|
22
|
-
"restart": "bash scripts/restart-gui.sh"
|
|
23
|
-
},
|
|
24
|
-
"repository": {
|
|
25
|
-
"type": "git",
|
|
26
|
-
"url": "https://github.com/therealarthur/myrlin-workbook.git"
|
|
27
|
-
},
|
|
28
|
-
"homepage": "https://github.com/therealarthur/myrlin-workbook",
|
|
29
|
-
"engines": {
|
|
30
|
-
"node": ">=18.0.0"
|
|
31
|
-
},
|
|
32
|
-
"keywords": [
|
|
33
|
-
"claude",
|
|
34
|
-
"workspace",
|
|
35
|
-
"manager",
|
|
36
|
-
"terminal",
|
|
37
|
-
"tui",
|
|
38
|
-
"ai",
|
|
39
|
-
"coding-assistant",
|
|
40
|
-
"session-manager",
|
|
41
|
-
"developer-tools",
|
|
42
|
-
"xterm",
|
|
43
|
-
"myrlin"
|
|
44
|
-
],
|
|
45
|
-
"author": "Arthur",
|
|
46
|
-
"license": "AGPL-3.0-only",
|
|
47
|
-
"dependencies": {
|
|
48
|
-
"blessed": "^0.1.81",
|
|
49
|
-
"blessed-contrib": "^4.11.0",
|
|
50
|
-
"chalk": "^5.6.2",
|
|
51
|
-
"chrome-remote-interface": "^0.34.0",
|
|
52
|
-
"express": "^5.2.1",
|
|
53
|
-
"node-pty": "^1.1.0",
|
|
54
|
-
"ws": "^8.19.0"
|
|
55
|
-
},
|
|
56
|
-
"devDependencies": {
|
|
57
|
-
"@playwright/test": "^1.58.2",
|
|
58
|
-
"@xterm/addon-fit": "^0.11.0",
|
|
59
|
-
"@xterm/addon-web-links": "^0.12.0",
|
|
60
|
-
"@xterm/xterm": "^6.0.0",
|
|
61
|
-
"ffmpeg-static": "^5.3.0",
|
|
62
|
-
"sharp": "^0.34.5"
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "myrlin-workbook",
|
|
3
|
+
"version": "0.9.1",
|
|
4
|
+
"description": "Browser-based project manager for Claude Code sessions - session discovery, multi-terminal, cost tracking, docs, and kanban board",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"myrlin-workbook": "./src/gui.js",
|
|
8
|
+
"myrlin": "./src/gui.js",
|
|
9
|
+
"myrlin-tui": "./src/index.js",
|
|
10
|
+
"cwm": "./src/index.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"start": "node src/index.js",
|
|
14
|
+
"demo": "node src/demo.js",
|
|
15
|
+
"gui": "node src/supervisor.js",
|
|
16
|
+
"gui:bare": "node src/gui.js",
|
|
17
|
+
"gui:demo": "node src/supervisor.js --demo",
|
|
18
|
+
"test": "node test/run.js",
|
|
19
|
+
"mcp:visual-qa": "node src/mcp/visual-qa.js",
|
|
20
|
+
"gui:cdp": "node src/supervisor.js --cdp",
|
|
21
|
+
"postinstall": "node scripts/postinstall.js",
|
|
22
|
+
"restart": "bash scripts/restart-gui.sh"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/therealarthur/myrlin-workbook.git"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/therealarthur/myrlin-workbook",
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18.0.0"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"claude",
|
|
34
|
+
"workspace",
|
|
35
|
+
"manager",
|
|
36
|
+
"terminal",
|
|
37
|
+
"tui",
|
|
38
|
+
"ai",
|
|
39
|
+
"coding-assistant",
|
|
40
|
+
"session-manager",
|
|
41
|
+
"developer-tools",
|
|
42
|
+
"xterm",
|
|
43
|
+
"myrlin"
|
|
44
|
+
],
|
|
45
|
+
"author": "Arthur",
|
|
46
|
+
"license": "AGPL-3.0-only",
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"blessed": "^0.1.81",
|
|
49
|
+
"blessed-contrib": "^4.11.0",
|
|
50
|
+
"chalk": "^5.6.2",
|
|
51
|
+
"chrome-remote-interface": "^0.34.0",
|
|
52
|
+
"express": "^5.2.1",
|
|
53
|
+
"node-pty": "^1.1.0",
|
|
54
|
+
"ws": "^8.19.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@playwright/test": "^1.58.2",
|
|
58
|
+
"@xterm/addon-fit": "^0.11.0",
|
|
59
|
+
"@xterm/addon-web-links": "^0.12.0",
|
|
60
|
+
"@xterm/xterm": "^6.0.0",
|
|
61
|
+
"ffmpeg-static": "^5.3.0",
|
|
62
|
+
"sharp": "^0.34.5"
|
|
63
|
+
}
|
|
64
|
+
}
|
package/src/gui.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
const { getStore } = require('./state/store');
|
|
17
17
|
const { startServer, getPtyManager } = require('./web/server');
|
|
18
18
|
const { backupFrontend } = require('./web/backup');
|
|
19
|
+
const { generateStartupToken } = require('./web/auth');
|
|
19
20
|
|
|
20
21
|
// ─── Initialize Store ──────────────────────────────────────
|
|
21
22
|
|
|
@@ -92,7 +93,9 @@ const port = parseInt(process.env.PORT, 10) || 3456;
|
|
|
92
93
|
const host = process.env.CWM_HOST || '127.0.0.1';
|
|
93
94
|
const server = startServer(port, host);
|
|
94
95
|
|
|
95
|
-
|
|
96
|
+
const startupToken = generateStartupToken();
|
|
97
|
+
const authUrl = `http://${host}:${port}?token=${encodeURIComponent(startupToken)}`;
|
|
98
|
+
console.log(`CWM GUI running at ${authUrl}`);
|
|
96
99
|
console.log('Press Ctrl+C to stop.');
|
|
97
100
|
|
|
98
101
|
// Snapshot frontend files as "last known good" on successful start
|
|
@@ -167,7 +170,7 @@ function openBrowserWithCDP(url, cdpPort) {
|
|
|
167
170
|
if (!process.env.CWM_NO_OPEN) {
|
|
168
171
|
const cdpEnabled = process.argv.includes('--cdp');
|
|
169
172
|
const cdpPort = parseInt(process.env.CDP_PORT, 10) || 9222;
|
|
170
|
-
const url =
|
|
173
|
+
const url = authUrl;
|
|
171
174
|
|
|
172
175
|
if (cdpEnabled) {
|
|
173
176
|
openBrowserWithCDP(url, cdpPort);
|