fix(sync): harden detached launch, bounded --check probes, and pipe-clos

- `sync --ui` now launches detached; closing standalone Sync window exits app
- `--check` uses BatchMode + ConnectTimeout + 15s timeoutMs on all SSH calls
- `runSyncLauncher` settles on `exit` (not just `close`) for Electron pipe inheritance
- Added `timeoutMs` to `runSyncLauncher`; check-host passes 30s deadline
- `handleSyncCliAtEntry` wraps exit deps for testability; fixes Linux AppImage GUI fallthrough
- `config-settings-window` gains optional `onClosed` hook
- Added preload-syncui bundle to `build:syncui` script
This commit is contained in:
2026-07-12 19:42:34 -07:00
parent a4c12165af
commit 5d8673f299
20 changed files with 246 additions and 68 deletions
+15 -1
View File
@@ -351,11 +351,17 @@ test('runHostSync records host sync results for saved-host bookkeeping', async (
test('runCheckMode --json reports ssh and remote SubMiner status', async () => {
const lines: string[] = [];
const sshOptions: unknown[] = [];
const deps = makeDeps({
consoleLog: (line) => {
lines.push(line);
},
runSsh: (_host, command) => {
resolveRemoteSubminerCommand: (host, _preferred, _flavor, runRemote) => {
runRemote!(host, 'subminer --help');
return 'subminer';
},
runSsh: (_host, command, options) => {
sshOptions.push(options);
if (command.includes('--version')) return ok('SubMiner 0.18.0\n');
return ok('subminer-check-ok\n');
},
@@ -380,6 +386,14 @@ test('runCheckMode --json reports ssh and remote SubMiner status', async () => {
assert.equal(check.remoteVersion, 'SubMiner 0.18.0');
assert.equal(check.ok, true);
assert.equal(check.error, null);
assert.equal(sshOptions.length, 3);
assert.ok(
sshOptions.every(
(options) =>
JSON.stringify(options) ===
JSON.stringify({ batchMode: true, connectTimeoutSeconds: 10, timeoutMs: 15_000 }),
),
);
const failLines: string[] = [];
await assert.rejects(() =>