@tom2012/cc-web 2026.6.13-c → 2026.6.13-e
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.json +2 -0
- package/backend/dist/__tests__/login-events.test.d.ts +2 -0
- package/backend/dist/__tests__/login-events.test.d.ts.map +1 -0
- package/backend/dist/__tests__/login-events.test.js +90 -0
- package/backend/dist/__tests__/login-events.test.js.map +1 -0
- package/backend/dist/__tests__/project-status.test.d.ts +2 -0
- package/backend/dist/__tests__/project-status.test.d.ts.map +1 -0
- package/backend/dist/__tests__/project-status.test.js +102 -0
- package/backend/dist/__tests__/project-status.test.js.map +1 -0
- package/backend/dist/config.d.ts +9 -0
- package/backend/dist/config.d.ts.map +1 -1
- package/backend/dist/config.js +17 -0
- package/backend/dist/config.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +74 -0
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/login-events.d.ts +27 -0
- package/backend/dist/login-events.d.ts.map +1 -0
- package/backend/dist/login-events.js +68 -0
- package/backend/dist/login-events.js.map +1 -0
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +58 -18
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/terminal-manager.js +6 -6
- package/backend/dist/terminal-manager.js.map +1 -1
- package/bin/ccweb.js +35 -13
- package/frontend/dist/assets/{ChatOverlay-BRKFIdip.js → ChatOverlay-DCDmC0Ig.js} +3 -3
- package/frontend/dist/assets/{ClaudeMemPage-BJXNbVri.js → ClaudeMemPage-CK2Ceogj.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-DWkoBDw7.js → GraphPreview-yUeV2YPI.js} +1 -1
- package/frontend/dist/assets/{MobilePage-xWYQCVpe.js → MobilePage-D62Dze6k.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-mG-c3-eD.js → OfficePreview-OCMu15Es.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-LpHVDc0B.js → PdfPreview-D9BTZyNH.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-5iSt8qJ0.js → ProjectPage-BrudnOeN.js} +3 -3
- package/frontend/dist/assets/{ProjectSettingsPage-CHpaFSH9.js → ProjectSettingsPage-DsS6M9fI.js} +1 -1
- package/frontend/dist/assets/{SettingsPage-DB0DKGyP.js → SettingsPage-CPP6ljrA.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-ldsS5_lE.js → SkillHubPage-BePTeB2c.js} +1 -1
- package/frontend/dist/assets/{check-circle-2-CZX-PYDg.js → check-circle-2-fJ0bVOko.js} +1 -1
- package/frontend/dist/assets/{chevron-down-Baaa_7Xz.js → chevron-down-CiltYw1c.js} +1 -1
- package/frontend/dist/assets/{file-text-Bce74_ZZ.js → file-text-Cq5RdypO.js} +1 -1
- package/frontend/dist/assets/{index-Vc7KSrAS.js → index-Bi6It4s6.js} +1 -1
- package/frontend/dist/assets/{index-Do7n5H3P.js → index-DLVgSsZT.js} +1 -1
- package/frontend/dist/assets/{index---z4AYZg.js → index-iDUel6Zw.js} +3 -3
- package/frontend/dist/assets/{jszip.min-ROgSua4f.js → jszip.min-Z9DNjLJt.js} +1 -1
- package/frontend/dist/assets/{save-DEyMBCOK.js → save-I4MvlX-M.js} +1 -1
- package/frontend/dist/assets/{search-BR_ML1Dg.js → search-YZPbiA4P.js} +1 -1
- package/frontend/dist/assets/{select-DgXuPzBS.js → select-CmSO1dzX.js} +1 -1
- package/frontend/dist/assets/{tabs-BYtX_ERm.js → tabs-DRHp9DRE.js} +1 -1
- package/frontend/dist/assets/{textarea-BOdMOgcu.js → textarea-GNyMOMRD.js} +1 -1
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export interface LoginEvent {
|
|
3
|
+
username: string;
|
|
4
|
+
ip: string;
|
|
5
|
+
userAgent: string;
|
|
6
|
+
at: string;
|
|
7
|
+
/** Audit only. Absent on the real-time 'login' event (always a success). */
|
|
8
|
+
result?: 'success' | 'fail';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Emitted on every successful login. index.ts subscribes and pushes a
|
|
12
|
+
* `login_alert` to all live alert-WS sockets of the SAME user, so any other
|
|
13
|
+
* device/tab gets a real-time popup — mirrors the syncEvents/cliPromptDetector
|
|
14
|
+
* pattern so route handlers don't need access to the WS registry.
|
|
15
|
+
*/
|
|
16
|
+
declare class LoginEvents extends EventEmitter {
|
|
17
|
+
}
|
|
18
|
+
export declare const loginEvents: LoginEvents;
|
|
19
|
+
/**
|
|
20
|
+
* Append a durable, rotation-proof record of the login. The daily rolling
|
|
21
|
+
* logs already carry `successful login` lines, but those age out; this
|
|
22
|
+
* append-only file is the long-term forensic trail of who logged in from
|
|
23
|
+
* which IP. Login events are rare, so unbounded growth is a non-issue.
|
|
24
|
+
*/
|
|
25
|
+
export declare function recordLoginAudit(ev: LoginEvent): void;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=login-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-events.d.ts","sourceRoot":"","sources":["../src/login-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,cAAM,WAAY,SAAQ,YAAY;CAAG;AACzC,eAAO,MAAM,WAAW,aAAoB,CAAC;AAI7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAMrD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loginEvents = void 0;
|
|
37
|
+
exports.recordLoginAudit = recordLoginAudit;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const events_1 = require("events");
|
|
41
|
+
const config_1 = require("./config");
|
|
42
|
+
const logger_1 = require("./logger");
|
|
43
|
+
const log = (0, logger_1.modLogger)('login-events');
|
|
44
|
+
/**
|
|
45
|
+
* Emitted on every successful login. index.ts subscribes and pushes a
|
|
46
|
+
* `login_alert` to all live alert-WS sockets of the SAME user, so any other
|
|
47
|
+
* device/tab gets a real-time popup — mirrors the syncEvents/cliPromptDetector
|
|
48
|
+
* pattern so route handlers don't need access to the WS registry.
|
|
49
|
+
*/
|
|
50
|
+
class LoginEvents extends events_1.EventEmitter {
|
|
51
|
+
}
|
|
52
|
+
exports.loginEvents = new LoginEvents();
|
|
53
|
+
const AUDIT_FILE = path.join(config_1.DATA_DIR, 'login-audit.jsonl');
|
|
54
|
+
/**
|
|
55
|
+
* Append a durable, rotation-proof record of the login. The daily rolling
|
|
56
|
+
* logs already carry `successful login` lines, but those age out; this
|
|
57
|
+
* append-only file is the long-term forensic trail of who logged in from
|
|
58
|
+
* which IP. Login events are rare, so unbounded growth is a non-issue.
|
|
59
|
+
*/
|
|
60
|
+
function recordLoginAudit(ev) {
|
|
61
|
+
try {
|
|
62
|
+
fs.appendFileSync(AUDIT_FILE, JSON.stringify(ev) + '\n', 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
log.warn({ err }, 'failed to append login audit');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=login-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-events.js","sourceRoot":"","sources":["../src/login-events.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,4CAMC;AAxCD,uCAAyB;AACzB,2CAA6B;AAC7B,mCAAsC;AACtC,qCAAoC;AACpC,qCAAqC;AAErC,MAAM,GAAG,GAAG,IAAA,kBAAS,EAAC,cAAc,CAAC,CAAC;AAWtC;;;;;GAKG;AACH,MAAM,WAAY,SAAQ,qBAAY;CAAG;AAC5B,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAQ,EAAE,mBAAmB,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,EAAc;IAC7C,IAAI,CAAC;QACH,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA+IxB,eAAe,MAAM,CAAC"}
|
|
@@ -38,33 +38,51 @@ const bcrypt = __importStar(require("bcryptjs"));
|
|
|
38
38
|
const jwt = __importStar(require("jsonwebtoken"));
|
|
39
39
|
const config_1 = require("../config");
|
|
40
40
|
const auth_1 = require("../auth");
|
|
41
|
+
const login_events_1 = require("../login-events");
|
|
41
42
|
const logger_1 = require("../logger");
|
|
42
43
|
const log = (0, logger_1.modLogger)('auth');
|
|
43
44
|
const router = (0, express_1.Router)();
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
// ── Brute-force throttling ──────────────────────────────────────────────────
|
|
46
|
+
// Two independent counters, both with a 15-minute sliding window:
|
|
47
|
+
// • per-IP (MAX_IP_ATTEMPTS) — stops a single host hammering credentials.
|
|
48
|
+
// • per-user (MAX_USER_ATTEMPTS)— caps *distributed* guessing: an attacker
|
|
49
|
+
// rotating through many IPs is still bounded to a handful of guesses
|
|
50
|
+
// against any one account, which the per-IP limiter alone cannot do.
|
|
51
|
+
// A login is blocked if EITHER counter is tripped.
|
|
52
|
+
//
|
|
53
|
+
// Tradeoff (documented, accepted): the per-user counter lets an attacker lock
|
|
54
|
+
// the legitimate user out for up to 15 min by deliberately failing logins.
|
|
55
|
+
// With effectively a single account this is a real DoS lever, but the admin
|
|
56
|
+
// can always reach the daemon locally (GET /api/auth/local-token bypasses
|
|
57
|
+
// /login entirely), the lockout is short, and the alternative — no cap on
|
|
58
|
+
// distributed brute force — is worse for the stated goal.
|
|
59
|
+
const ipAttempts = new Map();
|
|
60
|
+
const userAttempts = new Map();
|
|
61
|
+
const MAX_IP_ATTEMPTS = 5;
|
|
62
|
+
const MAX_USER_ATTEMPTS = 10;
|
|
47
63
|
const RATE_LIMIT_WINDOW_MS = 15 * 60 * 1000; // 15 minutes
|
|
48
64
|
// Prune expired entries periodically (every 5 min) instead of on every request
|
|
49
65
|
setInterval(() => {
|
|
50
66
|
const now = Date.now();
|
|
51
|
-
for (const [
|
|
52
|
-
|
|
53
|
-
|
|
67
|
+
for (const map of [ipAttempts, userAttempts]) {
|
|
68
|
+
for (const [key, val] of map) {
|
|
69
|
+
if (now > val.resetAt)
|
|
70
|
+
map.delete(key);
|
|
71
|
+
}
|
|
54
72
|
}
|
|
55
73
|
}, 5 * 60 * 1000).unref();
|
|
56
|
-
function
|
|
74
|
+
function isTripped(map, key, max) {
|
|
57
75
|
const now = Date.now();
|
|
58
|
-
const entry =
|
|
76
|
+
const entry = map.get(key);
|
|
59
77
|
if (!entry || now > entry.resetAt)
|
|
60
78
|
return false;
|
|
61
|
-
return entry.count >=
|
|
79
|
+
return entry.count >= max;
|
|
62
80
|
}
|
|
63
|
-
function
|
|
81
|
+
function recordFail(map, key) {
|
|
64
82
|
const now = Date.now();
|
|
65
|
-
const entry =
|
|
83
|
+
const entry = map.get(key);
|
|
66
84
|
if (!entry || now > entry.resetAt) {
|
|
67
|
-
|
|
85
|
+
map.set(key, { count: 1, resetAt: now + RATE_LIMIT_WINDOW_MS });
|
|
68
86
|
}
|
|
69
87
|
else {
|
|
70
88
|
entry.count++;
|
|
@@ -86,7 +104,8 @@ router.get('/local-token', (req, res) => {
|
|
|
86
104
|
});
|
|
87
105
|
router.post('/login', async (req, res) => {
|
|
88
106
|
const ip = req.ip || req.socket.remoteAddress || 'unknown';
|
|
89
|
-
|
|
107
|
+
const userAgent = (req.headers['user-agent'] || 'unknown').toString().slice(0, 300);
|
|
108
|
+
if (isTripped(ipAttempts, ip, MAX_IP_ATTEMPTS)) {
|
|
90
109
|
res.status(429).json({ error: 'Too many login attempts. Try again later.' });
|
|
91
110
|
return;
|
|
92
111
|
}
|
|
@@ -95,6 +114,18 @@ router.post('/login', async (req, res) => {
|
|
|
95
114
|
res.status(400).json({ error: 'Username and password are required' });
|
|
96
115
|
return;
|
|
97
116
|
}
|
|
117
|
+
// Normalized key for the per-account counter ONLY (the credential lookup
|
|
118
|
+
// below stays exact). Without this, an attacker could fragment the account
|
|
119
|
+
// counter — and dodge the cap — with case/whitespace variants ("Admin",
|
|
120
|
+
// " admin").
|
|
121
|
+
const userKey = username.trim().toLowerCase();
|
|
122
|
+
// Account-scoped throttle: block before touching the password hash so a
|
|
123
|
+
// distributed (IP-rotating) attack against this username is capped too.
|
|
124
|
+
if (isTripped(userAttempts, userKey, MAX_USER_ATTEMPTS)) {
|
|
125
|
+
log.warn({ user: username, ip }, 'login blocked — account temporarily throttled');
|
|
126
|
+
res.status(429).json({ error: 'Too many login attempts. Try again later.' });
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
98
129
|
let config;
|
|
99
130
|
try {
|
|
100
131
|
config = (0, config_1.getConfig)();
|
|
@@ -115,19 +146,28 @@ router.post('/login', async (req, res) => {
|
|
|
115
146
|
}
|
|
116
147
|
}
|
|
117
148
|
if (!passwordHash) {
|
|
118
|
-
|
|
149
|
+
recordFail(ipAttempts, ip);
|
|
150
|
+
recordFail(userAttempts, userKey);
|
|
151
|
+
(0, login_events_1.recordLoginAudit)({ username, ip, userAgent, at: new Date().toISOString(), result: 'fail' });
|
|
119
152
|
res.status(401).json({ error: 'Invalid credentials' });
|
|
120
153
|
return;
|
|
121
154
|
}
|
|
122
155
|
const valid = await bcrypt.compare(password, passwordHash);
|
|
123
156
|
if (!valid) {
|
|
124
|
-
|
|
157
|
+
recordFail(ipAttempts, ip);
|
|
158
|
+
recordFail(userAttempts, userKey);
|
|
159
|
+
(0, login_events_1.recordLoginAudit)({ username, ip, userAgent, at: new Date().toISOString(), result: 'fail' });
|
|
125
160
|
res.status(401).json({ error: 'Invalid credentials' });
|
|
126
161
|
return;
|
|
127
162
|
}
|
|
128
|
-
// Successful login — clear
|
|
129
|
-
|
|
130
|
-
|
|
163
|
+
// Successful login — clear throttle counters for this IP + account
|
|
164
|
+
ipAttempts.delete(ip);
|
|
165
|
+
userAttempts.delete(userKey);
|
|
166
|
+
log.info({ user: username, ip, userAgent }, 'successful login');
|
|
167
|
+
// Durable audit trail + real-time alert to the user's other live sessions.
|
|
168
|
+
const at = new Date().toISOString();
|
|
169
|
+
(0, login_events_1.recordLoginAudit)({ username, ip, userAgent, at, result: 'success' });
|
|
170
|
+
login_events_1.loginEvents.emit('login', { username, ip, userAgent, at });
|
|
131
171
|
const token = jwt.sign({ username }, config.jwtSecret, { expiresIn: '30d' });
|
|
132
172
|
res.json({ token });
|
|
133
173
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAoD;AACpD,iDAAmC;AACnC,kDAAoC;AACpC,sCAA0D;AAC1D,kCAA6D;AAC7D,sCAAsC;AAEtC,MAAM,GAAG,GAAG,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;AAE9B,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,7 +127,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
127
127
|
session_manager_1.sessionManager.stopWatcherForProject(projectId);
|
|
128
128
|
(0, memory_watcher_1.stopMemoryWatcher)(projectId);
|
|
129
129
|
instance.project.status = 'stopped';
|
|
130
|
-
(0, config_1.
|
|
130
|
+
(0, config_1.updateProjectStatus)(projectId, 'stopped');
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Tear down the existing PTY (if any) and spawn a new one with the project's
|
|
@@ -232,7 +232,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
232
232
|
// Terminal-only projects: mark stopped instead of resuming (no session to continue)
|
|
233
233
|
if (project.cliTool === 'terminal') {
|
|
234
234
|
project.status = 'stopped';
|
|
235
|
-
(0, config_1.
|
|
235
|
+
(0, config_1.updateProjectStatus)(project.id, 'stopped');
|
|
236
236
|
continue;
|
|
237
237
|
}
|
|
238
238
|
log.info({ projectId: project.id, projectName: project.name }, 'resuming terminal with --continue');
|
|
@@ -273,7 +273,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
273
273
|
catch (err) {
|
|
274
274
|
log.error({ err, projectId: project.id, cliTool: project.cliTool }, 'pty spawn failed');
|
|
275
275
|
project.status = 'stopped';
|
|
276
|
-
(0, config_1.
|
|
276
|
+
(0, config_1.updateProjectStatus)(project.id, 'stopped');
|
|
277
277
|
// Clear the gate so the next /start can fall back again. Without this,
|
|
278
278
|
// a fallback-triggered startTerminal that fails at spawn() would leave
|
|
279
279
|
// continueFallbackDone set forever for this project.
|
|
@@ -297,7 +297,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
297
297
|
if (!isRetry)
|
|
298
298
|
this.crashCounts.delete(project.id);
|
|
299
299
|
project.status = 'running';
|
|
300
|
-
(0, config_1.
|
|
300
|
+
(0, config_1.updateProjectStatus)(project.id, 'running');
|
|
301
301
|
// Terminal-only projects have no session files to watch
|
|
302
302
|
if (project.cliTool !== 'terminal') {
|
|
303
303
|
session_manager_1.sessionManager.startSession(project.id, project.folderPath, project.cliTool ?? 'claude');
|
|
@@ -388,7 +388,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
388
388
|
if (crashes > MAX_RESTART_RETRIES) {
|
|
389
389
|
log.error({ projectId, crashes, maxRetries: MAX_RESTART_RETRIES }, 'giving up auto-restart');
|
|
390
390
|
project.status = 'stopped';
|
|
391
|
-
(0, config_1.
|
|
391
|
+
(0, config_1.updateProjectStatus)(projectId, 'stopped');
|
|
392
392
|
rawBroadcast(`\r\n\x1b[31m[Terminal crashed ${crashes} times — auto-restart disabled. Please restart manually.]\x1b[0m\r\n`);
|
|
393
393
|
this.crashCounts.delete(projectId);
|
|
394
394
|
// Give-up ends this PTY lifecycle; clear the one-shot fallback gate so a
|
|
@@ -403,7 +403,7 @@ class TerminalManager extends events_1.EventEmitter {
|
|
|
403
403
|
const delay = RESTART_BASE_DELAY_MS * Math.pow(2, crashes - 1);
|
|
404
404
|
const delaySec = Math.round(delay / 1000);
|
|
405
405
|
project.status = 'restarting';
|
|
406
|
-
(0, config_1.
|
|
406
|
+
(0, config_1.updateProjectStatus)(projectId, 'restarting');
|
|
407
407
|
rawBroadcast(`\r\n\x1b[33m[Terminal exited — restarting${continueHint} in ${delaySec}s… (attempt ${crashes}/${MAX_RESTART_RETRIES})]\x1b[0m\r\n`);
|
|
408
408
|
log.info({
|
|
409
409
|
projectId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../src/terminal-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../src/terminal-manager.ts"],"names":[],"mappings":"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"}
|
package/bin/ccweb.js
CHANGED
|
@@ -9,7 +9,7 @@ if (process.platform === 'win32') {
|
|
|
9
9
|
process.exit(1);
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
const { fork, execSync, execFileSync } = require('child_process');
|
|
12
|
+
const { fork, spawn, execSync, execFileSync } = require('child_process');
|
|
13
13
|
const path = require('path');
|
|
14
14
|
const fs = require('fs');
|
|
15
15
|
const os = require('os');
|
|
@@ -112,20 +112,42 @@ function isWSL() {
|
|
|
112
112
|
try { return fs.readFileSync('/proc/version', 'utf-8').toLowerCase().includes('microsoft'); } catch { return false; }
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
function hasCmd(cmd) {
|
|
116
|
+
try { execSync(`command -v ${cmd}`, { stdio: 'ignore' }); return true; } catch { return false; }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Resolve the [command, argPrefix] that opens a URL in the user's browser.
|
|
121
|
+
* On WSL we prefer `wslview` (opens the Windows-side browser) so we never
|
|
122
|
+
* launch a Linux chromium GUI at all; `sensible-browser` is the next-best.
|
|
123
|
+
*/
|
|
124
|
+
function browserCommand() {
|
|
125
|
+
if (process.platform === 'darwin') return ['open', []];
|
|
126
|
+
if (process.platform === 'win32') return ['cmd', ['/c', 'start', '']];
|
|
127
|
+
if (isWSL()) {
|
|
128
|
+
if (hasCmd('wslview')) return ['wslview', []];
|
|
129
|
+
if (hasCmd('sensible-browser')) return ['sensible-browser', []];
|
|
130
|
+
}
|
|
131
|
+
return ['xdg-open', []];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Open a URL WITHOUT blocking this CLI or tying the browser's lifetime to it.
|
|
136
|
+
*
|
|
137
|
+
* Was a blocking `execSync`. On WSL with a native Linux chromium installed,
|
|
138
|
+
* xdg-open/sensible-browser foreground-launch chromium as a child of this
|
|
139
|
+
* process group: execSync never returned, so even `--daemon` mode never reached
|
|
140
|
+
* `process.exit(0)` (terminal stayed attached) and closing the chromium window
|
|
141
|
+
* took ccweb down with it. spawn(detached, ignore-stdio) + unref() decouples
|
|
142
|
+
* the browser process entirely — the CLI returns immediately and the daemon is
|
|
143
|
+
* unaffected by what the user does with the browser window.
|
|
144
|
+
*/
|
|
115
145
|
function openBrowser(url) {
|
|
116
146
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
} else if (isWSL()) {
|
|
122
|
-
// WSL: try wslview (wslu package), then sensible-browser, then xdg-open
|
|
123
|
-
try { execSync(`wslview ${url}`, { stdio: 'ignore' }); }
|
|
124
|
-
catch { try { execSync(`sensible-browser ${url}`, { stdio: 'ignore' }); }
|
|
125
|
-
catch { execSync(`xdg-open ${url}`, { stdio: 'ignore' }); } }
|
|
126
|
-
} else {
|
|
127
|
-
execSync(`xdg-open ${url}`, { stdio: 'ignore' });
|
|
128
|
-
}
|
|
147
|
+
const [cmd, prefix] = browserCommand();
|
|
148
|
+
const child = spawn(cmd, [...prefix, url], { detached: true, stdio: 'ignore' });
|
|
149
|
+
child.on('error', () => { /* opener missing — best-effort */ });
|
|
150
|
+
child.unref();
|
|
129
151
|
} catch { /* ignore — browser open is best-effort */ }
|
|
130
152
|
}
|
|
131
153
|
|