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>
This commit is contained in:
@@ -21,7 +21,6 @@ export 'toolchain_paths.dart';
|
||||
class Toolchain extends ChangeNotifier implements ToolchainView {
|
||||
String? _git;
|
||||
String? _pql;
|
||||
String? _tmux;
|
||||
String? _shell;
|
||||
Map<String, String>? _gitEnv;
|
||||
bool _resolved = false;
|
||||
@@ -31,8 +30,6 @@ class Toolchain extends ChangeNotifier implements ToolchainView {
|
||||
@override
|
||||
String get pql => _pql ?? 'pql';
|
||||
@override
|
||||
String get tmux => _tmux ?? 'tmux';
|
||||
@override
|
||||
String get shell => _shell ?? (Platform.isWindows ? 'powershell.exe' : '/bin/bash');
|
||||
|
||||
/// Extra environment variables for git (e.g. GIT_EXEC_PATH for dugite).
|
||||
@@ -45,13 +42,7 @@ class Toolchain extends ChangeNotifier implements ToolchainView {
|
||||
bool get allOk => _resolved && missing.isEmpty;
|
||||
|
||||
@override
|
||||
List<String> get missing => [
|
||||
if (_git == null) 'git',
|
||||
if (_pql == null) 'pql',
|
||||
// tmux has no Windows build; its absence there is the documented
|
||||
// no-tmux mode, not a missing tool.
|
||||
if (_tmux == null && !Platform.isWindows) 'tmux',
|
||||
];
|
||||
List<String> get missing => [if (_git == null) 'git', if (_pql == null) 'pql'];
|
||||
|
||||
/// Returns a Future that completes when resolution finishes.
|
||||
Future<void> waitForResolution() {
|
||||
@@ -72,7 +63,6 @@ class Toolchain extends ChangeNotifier implements ToolchainView {
|
||||
void applyResolved(ResolvedPaths p) {
|
||||
_git = p.git;
|
||||
_pql = p.pql;
|
||||
_tmux = p.tmux;
|
||||
_shell = p.shell;
|
||||
_gitEnv = p.gitEnv;
|
||||
_resolved = true;
|
||||
|
||||
@@ -12,11 +12,10 @@ import 'dart:io';
|
||||
|
||||
/// Serializable result of tool resolution (crosses isolate boundary).
|
||||
class ResolvedPaths {
|
||||
const ResolvedPaths({this.git, this.pql, this.tmux, this.shell, this.gitEnv});
|
||||
const ResolvedPaths({this.git, this.pql, this.shell, this.gitEnv});
|
||||
|
||||
final String? git;
|
||||
final String? pql;
|
||||
final String? tmux;
|
||||
final String? shell;
|
||||
final Map<String, String>? gitEnv;
|
||||
}
|
||||
@@ -32,7 +31,6 @@ abstract class ToolchainView {
|
||||
|
||||
String get git;
|
||||
String get pql;
|
||||
String get tmux;
|
||||
String get shell;
|
||||
Map<String, String>? get gitEnv;
|
||||
bool get resolved;
|
||||
@@ -50,8 +48,6 @@ class _StaticToolchain implements ToolchainView {
|
||||
@override
|
||||
String get pql => _paths.pql ?? 'pql';
|
||||
@override
|
||||
String get tmux => _paths.tmux ?? 'tmux';
|
||||
@override
|
||||
String get shell => _paths.shell ?? (Platform.isWindows ? 'powershell.exe' : '/bin/bash');
|
||||
@override
|
||||
Map<String, String>? get gitEnv => _paths.gitEnv;
|
||||
@@ -60,13 +56,7 @@ class _StaticToolchain implements ToolchainView {
|
||||
@override
|
||||
bool get allOk => missing.isEmpty;
|
||||
@override
|
||||
List<String> get missing => [
|
||||
if (_paths.git == null) 'git',
|
||||
if (_paths.pql == null) 'pql',
|
||||
// tmux has no Windows build; its absence there is the documented
|
||||
// no-tmux mode, not a missing tool.
|
||||
if (_paths.tmux == null && !Platform.isWindows) 'tmux',
|
||||
];
|
||||
List<String> get missing => [if (_paths.git == null) 'git', if (_paths.pql == null) 'pql'];
|
||||
}
|
||||
|
||||
/// Top-level function for compute/isolate use. Returns a plain-data
|
||||
@@ -89,7 +79,7 @@ ResolvedPaths resolveToolchainPaths() {
|
||||
git = _findOnPath('git');
|
||||
}
|
||||
|
||||
return ResolvedPaths(git: git, pql: _findOnPath('pql'), tmux: _findOnPath('tmux'), shell: _resolveShell(), gitEnv: gitEnv);
|
||||
return ResolvedPaths(git: git, pql: _findOnPath('pql'), shell: _resolveShell(), gitEnv: gitEnv);
|
||||
}
|
||||
|
||||
/// The user's interactive shell. POSIX honours `$SHELL`; Windows has
|
||||
|
||||
@@ -41,7 +41,7 @@ const Map<String, String> clidePtyEnvDefaults = {
|
||||
'COLORTERM': 'truecolor',
|
||||
// Encourages 24-bit emission from tooling that checks this:
|
||||
'CLICOLOR_FORCE': '1',
|
||||
// tmux inherits these when clide spawns tmux; safe to propagate.
|
||||
// UTF-8 locale for the child and anything it spawns; safe to propagate.
|
||||
'LANG': 'en_US.UTF-8',
|
||||
'LC_ALL': 'en_US.UTF-8',
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/// PTY subsystem — spawn child processes under a PTY and expose their
|
||||
/// output as a byte stream. POSIX uses posix_openpt() + posix_spawn();
|
||||
/// Windows uses ConPTY. Desktop IDE's pane model (terminal / Claude /
|
||||
/// future tmux wrappers) rides on this.
|
||||
/// future PTY-backed panes) rides on this.
|
||||
library;
|
||||
|
||||
export 'env.dart' show clidePtyEnvDefaults, mergePtyEnv;
|
||||
|
||||
@@ -113,22 +113,17 @@ class _ClideTestAppState extends State<ClideTestApp> {
|
||||
_say('--- toolchain ---');
|
||||
_log('toolchain.git', tc.git);
|
||||
_log('toolchain.pql', tc.pql);
|
||||
_log('toolchain.tmux', tc.tmux);
|
||||
_log('toolchain.shell', tc.shell);
|
||||
_log('toolchain.missing', tc.missing.isEmpty ? 'none' : tc.missing.join(', '));
|
||||
_say('');
|
||||
|
||||
await _testExists('git', tc.git);
|
||||
await _testExists('pql', tc.pql);
|
||||
// tmux has no Windows build — its absence there is the documented
|
||||
// no-tmux mode, so the probes would only report a non-failure.
|
||||
if (!Platform.isWindows) await _testExists('tmux', tc.tmux);
|
||||
await _testExists('shell', tc.shell);
|
||||
_say('');
|
||||
|
||||
await _testExec('git --version', tc.git, ['--version'], workDir);
|
||||
await _testExec('pql --version', tc.pql, ['--version'], workDir);
|
||||
if (!Platform.isWindows) await _testExec('tmux -V', tc.tmux, ['-V'], workDir);
|
||||
// PowerShell has no --version flag; ask for the version variable
|
||||
// through the same -c path the passthrough tests use.
|
||||
await _testExec('shell --version', tc.shell, Platform.isWindows ? ['-c', r'$PSVersionTable.PSVersion.ToString()'] : ['--version'], workDir);
|
||||
@@ -141,7 +136,6 @@ class _ClideTestAppState extends State<ClideTestApp> {
|
||||
String shellCall(String exe, String args) => Platform.isWindows ? "& '$exe' $args" : '$exe $args';
|
||||
await _testExec('shell -c git', tc.shell, ['-c', shellCall(tc.git, '--version')], workDir);
|
||||
await _testExec('shell -c pql', tc.shell, ['-c', shellCall(tc.pql, '--version')], workDir);
|
||||
if (!Platform.isWindows) await _testExec('shell -c tmux', tc.shell, ['-c', shellCall(tc.tmux, '-V')], workDir);
|
||||
await _testExec('shell -c git (bare)', tc.shell, ['-c', 'git --version'], workDir);
|
||||
_say('');
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ typedef MultitabEntryCallback<T> = void Function(MultitabEntry<T> entry);
|
||||
///
|
||||
/// The widget is generic and domain-free: it never knows what's
|
||||
/// inside a tab. Hosts pick `T` and decide what add / close mean
|
||||
/// (e.g. spawning or killing a tmux session for the Claude pane).
|
||||
/// (e.g. spawning or killing a Claude session for the Claude pane).
|
||||
///
|
||||
/// See `docs/design/multitab-pane.md` for the design rationale.
|
||||
class MultitabPane<T> extends StatelessWidget {
|
||||
|
||||
Reference in New Issue
Block a user