zerogterm 0.7.0-alpha3 → 0.8.0-alpha
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 +7 -2
- package/dist/main/main/main.js +72 -4
- package/dist/renderer/assets/index-BPS6JAQV.js +142 -0
- package/dist/renderer/assets/{index-Qi5a1Xc8.css → index-p0gJDyuE.css} +1 -1
- package/dist/renderer/index.html +2 -2
- package/package.json +32 -2
- package/dist/renderer/assets/index-C2vLQpCh.js +0 -85
package/README.md
CHANGED
|
@@ -37,9 +37,9 @@ See the project walkthrough on [YouTube](https://youtu.be/4aJZCxLHD14).
|
|
|
37
37
|
|
|
38
38
|
## Release status
|
|
39
39
|
|
|
40
|
-
ZeroG Terminal is currently a public alpha. The current release is `0.
|
|
40
|
+
ZeroG Terminal is currently a public alpha. The current release is `0.8.0-alpha`; the version history is tracked in [versions.txt](versions.txt). The running version is shown beside the wordmark in the title bar, read from the app itself rather than written into the interface, so it is accurate in a packaged build too.
|
|
41
41
|
|
|
42
|
-
The
|
|
42
|
+
The GitHub Releases page provides a Windows x64 installer and portable executable for each desktop release. These alpha builds are intended for early adopters and testing rather than production use. The npm package remains available for developers who prefer to launch ZeroG from Node.js.
|
|
43
43
|
|
|
44
44
|
## Terminal shortcuts
|
|
45
45
|
|
|
@@ -413,6 +413,11 @@ required whichever shell you start them from.
|
|
|
413
413
|
for Windows and macOS, so a C/C++ toolchain is a Linux requirement rather than a
|
|
414
414
|
general one — there, `npm install` compiles it.
|
|
415
415
|
|
|
416
|
+
### Windows desktop release
|
|
417
|
+
|
|
418
|
+
Download the latest Windows x64 installer from [GitHub Releases](https://github.com/HappyMonkeyAI/ZeroGTerm/releases). The installer adds ZeroG Terminal to the current user's applications. The portable `.exe` can be run without installation.
|
|
419
|
+
|
|
420
|
+
These binaries are unsigned alpha builds, so Windows SmartScreen may show a warning on first launch. If you downloaded the release from the official repository, choose **More info → Run anyway**. Review the release notes before installing; SSH, WSL, PowerShell, Git Bash, and any remote `screen` sessions are provided by the host system rather than bundled with the app.
|
|
416
421
|
### Linux
|
|
417
422
|
|
|
418
423
|
```bash
|
package/dist/main/main/main.js
CHANGED
|
@@ -44,10 +44,53 @@ function parsePtySize(value) {
|
|
|
44
44
|
return undefined;
|
|
45
45
|
return { cols: cols, rows: rows };
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Software rendering, on the one platform that needs it.
|
|
49
|
+
*
|
|
50
|
+
* The GPU is unstable under Toolbox/Wayland, which is where this was found and
|
|
51
|
+
* why the switch exists. It was applied everywhere, though, and on Windows that
|
|
52
|
+
* is a straight loss: every pane is then rasterised on the CPU, and a window
|
|
53
|
+
* holding a dozen terminals can stall long enough for the compositor to grey it
|
|
54
|
+
* out — which reads to the user as a crash. Scoped to Linux, with an override in
|
|
55
|
+
* each direction so a machine that disagrees can say so.
|
|
56
|
+
*/
|
|
57
|
+
if (process.env.ZEROG_DISABLE_GPU === '1') {
|
|
58
|
+
app.disableHardwareAcceleration();
|
|
59
|
+
}
|
|
60
|
+
else if (process.platform === 'linux' && process.env.ZEROG_ENABLE_GPU !== '1') {
|
|
49
61
|
app.disableHardwareAcceleration();
|
|
50
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* How long the main process may block before it is worth saying so.
|
|
65
|
+
*
|
|
66
|
+
* Every pty write, every IPC reply and every window event goes through this one
|
|
67
|
+
* loop, so a stall here freezes the whole application however many panes are
|
|
68
|
+
* open. 250ms is well past a slow frame and well short of anything a person
|
|
69
|
+
* would call a hang, which makes it a warning rather than a report.
|
|
70
|
+
*/
|
|
71
|
+
const LOOP_STALL_MS = 250;
|
|
72
|
+
const LOOP_SAMPLE_MS = 500;
|
|
73
|
+
/**
|
|
74
|
+
* Watch the main process for stalls.
|
|
75
|
+
*
|
|
76
|
+
* A timer that knows when it should have fired is the whole instrument: the
|
|
77
|
+
* difference between that and when it did fire is time the loop spent unable to
|
|
78
|
+
* run anything. It cannot say what blocked — only that something did, and for
|
|
79
|
+
* how long, which is the fact that was missing when a frozen window had to be
|
|
80
|
+
* explained from a screenshot.
|
|
81
|
+
*/
|
|
82
|
+
function watchEventLoop() {
|
|
83
|
+
let due = Date.now() + LOOP_SAMPLE_MS;
|
|
84
|
+
const timer = setInterval(() => {
|
|
85
|
+
const now = Date.now();
|
|
86
|
+
const lag = now - due;
|
|
87
|
+
due = now + LOOP_SAMPLE_MS;
|
|
88
|
+
if (lag >= LOOP_STALL_MS)
|
|
89
|
+
console.warn(`[zerog] main process blocked for ${Math.round(lag)}ms`);
|
|
90
|
+
}, LOOP_SAMPLE_MS);
|
|
91
|
+
// Diagnostics must never be the reason the process stays alive.
|
|
92
|
+
timer.unref();
|
|
93
|
+
}
|
|
51
94
|
function createWindow() {
|
|
52
95
|
win = new BrowserWindow({
|
|
53
96
|
width: 1440,
|
|
@@ -95,8 +138,32 @@ function createWindow() {
|
|
|
95
138
|
win.webContents.on('preload-error', (_event, path, error) => {
|
|
96
139
|
console.error('[zerog] preload-error', path, error);
|
|
97
140
|
});
|
|
98
|
-
|
|
99
|
-
|
|
141
|
+
// The renderer's console, copied into this one — which is the only way a
|
|
142
|
+
// warning from the workspace reaches a log at all.
|
|
143
|
+
//
|
|
144
|
+
// Read from the event object rather than from the positional arguments that
|
|
145
|
+
// used to carry it. Electron still passes those, and says so on every start:
|
|
146
|
+
// "'console-message' arguments are deprecated and will be removed". When they
|
|
147
|
+
// go, a handler reading them would keep being called and print nothing, so the
|
|
148
|
+
// renderer would fall silent without anything appearing to break — the exact
|
|
149
|
+
// failure this logging exists to rule out.
|
|
150
|
+
win.webContents.on('console-message', (details) => {
|
|
151
|
+
console.log('[renderer]', details.message);
|
|
152
|
+
});
|
|
153
|
+
// The two ends of the symptom this instrumentation exists for. `unresponsive`
|
|
154
|
+
// is the window the desktop has started greying out; `render-process-gone` is
|
|
155
|
+
// the renderer having actually died, which is a different failure that looks
|
|
156
|
+
// similar from the outside. Only recorded here: what to *do* about either —
|
|
157
|
+
// offer a reload, reattach the panes — is a decision about the interface, not
|
|
158
|
+
// about diagnostics.
|
|
159
|
+
win.on('unresponsive', () => {
|
|
160
|
+
console.warn('[zerog] window unresponsive');
|
|
161
|
+
});
|
|
162
|
+
win.on('responsive', () => {
|
|
163
|
+
console.warn('[zerog] window responsive again');
|
|
164
|
+
});
|
|
165
|
+
win.webContents.on('render-process-gone', (_event, details) => {
|
|
166
|
+
console.error('[zerog] render-process-gone', details);
|
|
100
167
|
});
|
|
101
168
|
const devUrl = process.env.VITE_DEV_SERVER_URL;
|
|
102
169
|
if (devUrl) {
|
|
@@ -400,6 +467,7 @@ app.whenReady().then(() => {
|
|
|
400
467
|
// Keep the normal window chrome, but let the ZeroG UI occupy the full
|
|
401
468
|
// client area instead of showing Electron's default File/Edit/etc. menu.
|
|
402
469
|
Menu.setApplicationMenu(null);
|
|
470
|
+
watchEventLoop();
|
|
403
471
|
createWindow();
|
|
404
472
|
app.on('activate', () => {
|
|
405
473
|
if (!BrowserWindow.getAllWindows().length)
|