Nothing has spawned tmux since D-77 moved Claude session persistence to `--resume`; Claude and terminal panes spawn `claude` or the shell directly. But the toolchain still resolved tmux and listed it in `missing`, so on mac/linux a box without tmux showed a spurious "tmux not found" warning in the welcome view + status bar. The windows-support branch had special-cased that away with a `!Platform.isWindows` guard — the tell that the requirement was dead everywhere, not platform-specific. Drop tmux from ResolvedPaths / ToolchainView / Toolchain (field, getter, `missing`, PATH resolution) on every platform, removing the Windows guards with it. Strip the testmode tmux probes and the comments / CLAUDE.md line that claimed clide spawns tmux. (The dead ToolCheck class that also gated on tmux was already deleted on main and dropped in the preceding merge.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
2.2 KiB
Dart
77 lines
2.2 KiB
Dart
/// Centralized binary resolution for external tools.
|
|
///
|
|
/// Resolution runs in a background isolate via [Toolchain.resolvePaths]
|
|
/// to avoid blocking the merged UI/platform thread on macOS. The result
|
|
/// is applied on the main thread via [Toolchain.applyResolved].
|
|
///
|
|
/// The Flutter-free data types ([ResolvedPaths], [ToolchainView]) and
|
|
/// the isolate-side resolver ([resolveToolchainPaths]) live in
|
|
/// `toolchain_paths.dart` and are re-exported here for convenience.
|
|
library;
|
|
|
|
import 'dart:async';
|
|
import 'dart:io' show Platform;
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'toolchain_paths.dart';
|
|
|
|
export 'toolchain_paths.dart';
|
|
|
|
class Toolchain extends ChangeNotifier implements ToolchainView {
|
|
String? _git;
|
|
String? _pql;
|
|
String? _shell;
|
|
Map<String, String>? _gitEnv;
|
|
bool _resolved = false;
|
|
|
|
@override
|
|
String get git => _git ?? 'git';
|
|
@override
|
|
String get pql => _pql ?? 'pql';
|
|
@override
|
|
String get shell => _shell ?? (Platform.isWindows ? 'powershell.exe' : '/bin/bash');
|
|
|
|
/// Extra environment variables for git (e.g. GIT_EXEC_PATH for dugite).
|
|
@override
|
|
Map<String, String>? get gitEnv => _gitEnv;
|
|
|
|
@override
|
|
bool get resolved => _resolved;
|
|
@override
|
|
bool get allOk => _resolved && missing.isEmpty;
|
|
|
|
@override
|
|
List<String> get missing => [if (_git == null) 'git', if (_pql == null) 'pql'];
|
|
|
|
/// Returns a Future that completes when resolution finishes.
|
|
Future<void> waitForResolution() {
|
|
if (_resolved) return Future.value();
|
|
final c = Completer<void>();
|
|
void listener() {
|
|
if (_resolved) {
|
|
removeListener(listener);
|
|
if (!c.isCompleted) c.complete();
|
|
}
|
|
}
|
|
|
|
addListener(listener);
|
|
return c.future;
|
|
}
|
|
|
|
/// Apply paths resolved in a background isolate.
|
|
void applyResolved(ResolvedPaths p) {
|
|
_git = p.git;
|
|
_pql = p.pql;
|
|
_shell = p.shell;
|
|
_gitEnv = p.gitEnv;
|
|
_resolved = true;
|
|
notifyListeners();
|
|
}
|
|
|
|
/// Pure function — runs in a background isolate. All file I/O happens
|
|
/// here, off the main thread. Delegates to the Flutter-free
|
|
/// [resolveToolchainPaths]. Takes no workspace argument: see T-98.
|
|
static ResolvedPaths resolvePaths() => resolveToolchainPaths();
|
|
}
|