Files
clide/lib/kernel/src/toolchain.dart
T
jpmschweitzerandClaude Opus 4.8 431e26d659 remove tmux as a required tool (dead since D-77)
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>
2026-06-14 18:22:04 +02:00

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();
}