clitrigger 0.2.42 → 0.2.44
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/bin/clitrigger.js +37 -1
- package/dist/client/assets/{AnalyticsPanel-D23MrC-n.js → AnalyticsPanel-DGCF_BEm.js} +1 -1
- package/dist/client/assets/{FloatingComposerController-5A3GJtK4-BFL3smk1.js → FloatingComposerController-5A3GJtK4-BlpEA-23.js} +1 -1
- package/dist/client/assets/{PlannerPageEditor-DIjZzUkT.js → PlannerPageEditor-DwwaEKY1.js} +3 -3
- package/dist/client/assets/{TaskGraph-BZAHT_BE.js → TaskGraph-Ca07vnOX.js} +1 -1
- package/dist/client/assets/{VaultLayout-O60KqfI7.js → VaultLayout-DU3NANHL.js} +1 -1
- package/dist/client/assets/index-Dj9la68m.js +703 -0
- package/dist/client/assets/{style-FQ6M7Rf_.js → style-D4pTk2LJ.js} +1 -1
- package/dist/client/assets/{with-selector-CVNNI2E_.js → with-selector-DogHmvA_.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/routes/projects.d.ts.map +1 -1
- package/dist/server/routes/projects.js +19 -24
- package/dist/server/routes/projects.js.map +1 -1
- package/dist/server/routes/sessions.d.ts.map +1 -1
- package/dist/server/routes/sessions.js +8 -1
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/services/session-manager.d.ts +3 -0
- package/dist/server/services/session-manager.d.ts.map +1 -1
- package/dist/server/services/session-manager.js +34 -19
- package/dist/server/services/session-manager.js.map +1 -1
- package/dist/server/services/vault-watcher.d.ts +8 -3
- package/dist/server/services/vault-watcher.d.ts.map +1 -1
- package/dist/server/services/vault-watcher.js +36 -12
- package/dist/server/services/vault-watcher.js.map +1 -1
- package/dist/server/websocket/events.d.ts +3 -0
- package/dist/server/websocket/events.d.ts.map +1 -1
- package/dist/server/websocket/index.d.ts.map +1 -1
- package/dist/server/websocket/index.js +11 -1
- package/dist/server/websocket/index.js.map +1 -1
- package/electron/main.cjs +43 -2
- package/electron/preload.cjs +4 -0
- package/package.json +1 -1
- package/dist/client/assets/index-DOl6hFR0.js +0 -703
|
@@ -5,15 +5,24 @@ import { DEFAULT_EXCLUDES } from './file-scanner.js';
|
|
|
5
5
|
// Throttle window for change broadcasts. Clients rescan the whole tree on
|
|
6
6
|
// each event, so one coalesced event per window is enough.
|
|
7
7
|
const BROADCAST_DELAY_MS = 500;
|
|
8
|
-
// Watches project roots
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
8
|
+
// Watches project roots and broadcasts a coalesced change event. Two
|
|
9
|
+
// instances exist: `vaultWatcher` (docs tab) and `gitWatcher` (git UIs) —
|
|
10
|
+
// same fs.watch/refcount machinery, different event type and path filter.
|
|
11
|
+
// A project is only watched while at least one client subscribed
|
|
12
|
+
// (`vault:watch`/`git:watch` WS messages), so the idle cost is zero.
|
|
13
|
+
class FsChangeWatcher {
|
|
14
|
+
eventType;
|
|
15
|
+
accepts;
|
|
13
16
|
entries = new Map();
|
|
17
|
+
constructor(eventType,
|
|
18
|
+
// Path filter over the change's relative path segments.
|
|
19
|
+
accepts) {
|
|
20
|
+
this.eventType = eventType;
|
|
21
|
+
this.accepts = accepts;
|
|
22
|
+
}
|
|
14
23
|
/** Start watching a project's root for this client. Silently no-ops when
|
|
15
24
|
* the project is unknown or fs.watch fails (e.g. inotify limits on large
|
|
16
|
-
* Linux trees) — the
|
|
25
|
+
* Linux trees) — the UI then degrades to manual refresh. */
|
|
17
26
|
watch(projectId, ws) {
|
|
18
27
|
let entry = this.entries.get(projectId);
|
|
19
28
|
if (!entry) {
|
|
@@ -64,12 +73,9 @@ class VaultWatcher {
|
|
|
64
73
|
catch { /* already closed */ }
|
|
65
74
|
}
|
|
66
75
|
onChange(projectId, filename) {
|
|
67
|
-
// Skip churn in build/VCS directories (npm install, git operations, …).
|
|
68
|
-
// ponytail: coarse segment filter only — .vaultignore'd paths still count
|
|
69
|
-
// as changes because the explorer shows them as hidden entries.
|
|
70
76
|
if (filename) {
|
|
71
77
|
const parts = filename.toString().split(/[\\/]/);
|
|
72
|
-
if (
|
|
78
|
+
if (!this.accepts(parts))
|
|
73
79
|
return;
|
|
74
80
|
}
|
|
75
81
|
const entry = this.entries.get(projectId);
|
|
@@ -77,9 +83,27 @@ class VaultWatcher {
|
|
|
77
83
|
return;
|
|
78
84
|
entry.timer = setTimeout(() => {
|
|
79
85
|
entry.timer = null;
|
|
80
|
-
broadcaster.broadcast({ type:
|
|
86
|
+
broadcaster.broadcast({ type: this.eventType, projectId });
|
|
81
87
|
}, BROADCAST_DELAY_MS);
|
|
82
88
|
}
|
|
83
89
|
}
|
|
84
|
-
|
|
90
|
+
// Skip churn in build/VCS directories (npm install, git operations, …).
|
|
91
|
+
// ponytail: coarse segment filter only — .vaultignore'd paths still count
|
|
92
|
+
// as changes because the explorer shows them as hidden entries.
|
|
93
|
+
export const vaultWatcher = new FsChangeWatcher('vault:changed', (parts) => !parts.some((part) => DEFAULT_EXCLUDES.includes(part)));
|
|
94
|
+
// Git filter: unlike vault, `.worktrees` counts (session worktrees are
|
|
95
|
+
// exactly what the git UIs show) and `.git` is limited to ref/state moves.
|
|
96
|
+
// `.git/index` MUST stay excluded: reading status can itself rewrite the
|
|
97
|
+
// index (racily-clean refresh), so including it would loop
|
|
98
|
+
// fetch → event → fetch. Staging-only changes (`git add` with no commit)
|
|
99
|
+
// therefore don't fire — the commit that follows does.
|
|
100
|
+
const GIT_EXCLUDES = DEFAULT_EXCLUDES.filter((d) => d !== '.worktrees' && d !== '.git');
|
|
101
|
+
const GIT_STATE_FILES = new Set(['HEAD', 'ORIG_HEAD', 'MERGE_HEAD', 'CHERRY_PICK_HEAD', 'REBASE_HEAD']);
|
|
102
|
+
export function gitWatchAccepts(parts) {
|
|
103
|
+
if (parts[0] === '.git') {
|
|
104
|
+
return GIT_STATE_FILES.has(parts[parts.length - 1]) || parts.includes('refs');
|
|
105
|
+
}
|
|
106
|
+
return !parts.some((part) => GIT_EXCLUDES.includes(part));
|
|
107
|
+
}
|
|
108
|
+
export const gitWatcher = new FsChangeWatcher('git:changed', gitWatchAccepts);
|
|
85
109
|
//# sourceMappingURL=vault-watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-watcher.js","sourceRoot":"","sources":["../../../src/server/services/vault-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,0EAA0E;AAC1E,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAQ/B,0EAA0E;AAC1E,
|
|
1
|
+
{"version":3,"file":"vault-watcher.js","sourceRoot":"","sources":["../../../src/server/services/vault-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/server/websocket/events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/server/websocket/events.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1I;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACjK;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpG;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAChI;IAAE,IAAI,EAAE,4BAA4B,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClJ;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxH;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3G;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjI;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1C;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAUnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAUnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAmNlD"}
|
|
@@ -3,7 +3,7 @@ import { broadcaster, encodeSessionFrame } from './broadcaster.js';
|
|
|
3
3
|
import { sessionMiddleware } from '../middleware/auth.js';
|
|
4
4
|
import { claudeManager } from '../services/claude-manager.js';
|
|
5
5
|
import { sessionManager } from '../services/session-manager.js';
|
|
6
|
-
import { vaultWatcher } from '../services/vault-watcher.js';
|
|
6
|
+
import { vaultWatcher, gitWatcher } from '../services/vault-watcher.js';
|
|
7
7
|
import { getTodoById, createTaskLog, getSessionById, createSessionLog, getSessionRawChunks } from '../db/queries.js';
|
|
8
8
|
import { getSetting } from '../db/app-settings.js';
|
|
9
9
|
export function initWebSocket(server) {
|
|
@@ -67,11 +67,13 @@ export function initWebSocket(server) {
|
|
|
67
67
|
ws.on('close', () => {
|
|
68
68
|
broadcaster.removeClient(ws);
|
|
69
69
|
vaultWatcher.removeClient(ws);
|
|
70
|
+
gitWatcher.removeClient(ws);
|
|
70
71
|
});
|
|
71
72
|
ws.on('error', (err) => {
|
|
72
73
|
console.error('WebSocket error:', err);
|
|
73
74
|
broadcaster.removeClient(ws);
|
|
74
75
|
vaultWatcher.removeClient(ws);
|
|
76
|
+
gitWatcher.removeClient(ws);
|
|
75
77
|
});
|
|
76
78
|
// Handle incoming messages (stdin for interactive mode)
|
|
77
79
|
ws.on('message', (raw) => {
|
|
@@ -159,6 +161,14 @@ export function initWebSocket(server) {
|
|
|
159
161
|
if (msg.type === 'vault:unwatch' && typeof msg.projectId === 'string') {
|
|
160
162
|
vaultWatcher.unwatch(msg.projectId, ws);
|
|
161
163
|
}
|
|
164
|
+
// Git UIs (Git tab, session diff panel) — same lifecycle as vault:
|
|
165
|
+
// watched only while a subscribing panel is open.
|
|
166
|
+
if (msg.type === 'git:watch' && typeof msg.projectId === 'string') {
|
|
167
|
+
gitWatcher.watch(msg.projectId, ws);
|
|
168
|
+
}
|
|
169
|
+
if (msg.type === 'git:unwatch' && typeof msg.projectId === 'string') {
|
|
170
|
+
gitWatcher.unwatch(msg.projectId, ws);
|
|
171
|
+
}
|
|
162
172
|
// Raw keystrokes from xterm.js (CR, arrow keys, Ctrl+C, etc).
|
|
163
173
|
// Bypasses the `\n → submitSeq` translation that `writeToStdin` applies.
|
|
164
174
|
if (msg.type === 'session:terminal-input' && typeof msg.sessionId === 'string' && typeof msg.input === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"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"}
|
package/electron/main.cjs
CHANGED
|
@@ -374,6 +374,14 @@ ipcMain.on('window:focus-self', (event) => {
|
|
|
374
374
|
imeDebugLog('window:focus-self', { event: 'ime-rebind' });
|
|
375
375
|
});
|
|
376
376
|
|
|
377
|
+
// Minimize the sender's OS window. Frameless popouts render their own top bar
|
|
378
|
+
// (no native minimize button) and the web platform offers no equivalent.
|
|
379
|
+
ipcMain.on('window:minimize-self', (event) => {
|
|
380
|
+
const win = BrowserWindow.fromWebContents(event.sender);
|
|
381
|
+
if (!win || win.isDestroyed() || !win.isMinimizable()) return;
|
|
382
|
+
win.minimize();
|
|
383
|
+
});
|
|
384
|
+
|
|
377
385
|
ipcMain.on('ime:reset', (event, payload) => {
|
|
378
386
|
// Route the focus call to the sender's webContents so popout child
|
|
379
387
|
// windows reclaim their own keyboard focus, not the main window's.
|
|
@@ -391,13 +399,15 @@ ipcMain.on('ime:reset', (event, payload) => {
|
|
|
391
399
|
const force = payload && payload.force;
|
|
392
400
|
const sender = event && event.sender;
|
|
393
401
|
if (sender && !sender.isDestroyed()) {
|
|
394
|
-
|
|
402
|
+
// blurWebView() lives on BrowserWindow, not webContents.
|
|
403
|
+
const win = force ? BrowserWindow.fromWebContents(sender) : null;
|
|
404
|
+
if (win && !win.isDestroyed()) win.blurWebView();
|
|
395
405
|
sender.focus();
|
|
396
406
|
imeDebugLog('ime:reset', { force: !!force, target: 'sender' });
|
|
397
407
|
return;
|
|
398
408
|
}
|
|
399
409
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
|
400
|
-
if (force) mainWindow.
|
|
410
|
+
if (force) mainWindow.blurWebView();
|
|
401
411
|
mainWindow.webContents.focus();
|
|
402
412
|
imeDebugLog('ime:reset', { force: !!force, target: 'mainWindow' });
|
|
403
413
|
}
|
|
@@ -475,6 +485,32 @@ function setupAutoUpdater() {
|
|
|
475
485
|
setTimeout(() => checkForUpdates({ silent: true }), 5000);
|
|
476
486
|
}
|
|
477
487
|
|
|
488
|
+
async function resetWebPassword() {
|
|
489
|
+
const { response } = await dialog.showMessageBox(mainWindow, {
|
|
490
|
+
type: 'warning',
|
|
491
|
+
buttons: ['초기화', '취소'],
|
|
492
|
+
defaultId: 1,
|
|
493
|
+
cancelId: 1,
|
|
494
|
+
message: '비밀번호를 초기화할까요?',
|
|
495
|
+
detail:
|
|
496
|
+
'초기화 후 앱 화면에서 새 비밀번호를 설정합니다. 터널이 켜져 있다면 새 비밀번호를 설정하기 전까지 외부 접속자가 먼저 설정할 수 있습니다.',
|
|
497
|
+
});
|
|
498
|
+
if (response !== 0) return;
|
|
499
|
+
try {
|
|
500
|
+
// The server runs in-process, so reuse its already-open DB connection.
|
|
501
|
+
const connectionJs = path.join(path.dirname(resolveServerEntry()), 'db', 'connection.js');
|
|
502
|
+
const { getDatabase } = await import(pathToFileURL(connectionJs).href);
|
|
503
|
+
const db = getDatabase();
|
|
504
|
+
db.prepare(
|
|
505
|
+
"DELETE FROM app_settings WHERE key IN ('auth.password_hash', 'auth.password_changed_at')"
|
|
506
|
+
).run();
|
|
507
|
+
db.prepare('DELETE FROM auth_sessions').run();
|
|
508
|
+
mainWindow?.reload();
|
|
509
|
+
} catch (err) {
|
|
510
|
+
dialog.showErrorBox('비밀번호 초기화 실패', String(err));
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
478
514
|
function buildMenu() {
|
|
479
515
|
const isMac = process.platform === 'darwin';
|
|
480
516
|
const template = [
|
|
@@ -500,6 +536,11 @@ function buildMenu() {
|
|
|
500
536
|
},
|
|
501
537
|
},
|
|
502
538
|
{ type: 'separator' },
|
|
539
|
+
{
|
|
540
|
+
label: '비밀번호 초기화',
|
|
541
|
+
click: () => resetWebPassword(),
|
|
542
|
+
},
|
|
543
|
+
{ type: 'separator' },
|
|
503
544
|
{
|
|
504
545
|
label: '업데이트 확인',
|
|
505
546
|
click: () => checkForUpdates({ silent: false }),
|
package/electron/preload.cjs
CHANGED
|
@@ -24,6 +24,10 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|
|
24
24
|
// activation the caller doesn't have when reacting to a bus message. Used
|
|
25
25
|
// by popout windows when the main window's dock chip asks them to front.
|
|
26
26
|
windowFocus: () => ipcRenderer.send('window:focus-self'),
|
|
27
|
+
// Minimize this window's BrowserWindow. Frameless popouts have no native
|
|
28
|
+
// titlebar buttons, so their own top bar needs this bridge — the web
|
|
29
|
+
// platform has no window.minimize().
|
|
30
|
+
windowMinimize: () => ipcRenderer.send('window:minimize-self'),
|
|
27
31
|
// Ctrl+wheel / pinch is consumed by Chromium's browser process as a page-zoom
|
|
28
32
|
// gesture and never reaches the renderer as a DOM `wheel` event, so the
|
|
29
33
|
// terminal's own Ctrl+wheel font-zoom silently never fires in the exe. Main
|