Remove index-based CLI APIs, make commands workspace-relative (#89)
* Remove index-based CLI APIs and make commands workspace-relative Migrate 14 CLI commands from v1 text protocol to v2 JSON-RPC, making them workspace-relative via CMUX_WORKSPACE_ID env var fallback. Update 7 more commands to use normalize functions instead of legacy resolvers. Remove dead code (5 structs, 5 parsers, 3 functions). Add regression tests. Commands migrated v1→v2: send, send-key, send-panel, send-key-panel, new-split, new-pane, new-surface, close-surface, list-panes, list-pane-surfaces, list-panels, surface-health, focus-pane, focus-panel. Commands updated: move-workspace-to-window, list-workspaces, close-workspace, select-workspace, trigger-flash, resolveWorkspaceId, resolveSurfaceId. * Fix CMUX_SURFACE_ID env fallback when --workspace is overridden When --workspace is explicitly passed, don't fall back to CMUX_SURFACE_ID from the caller's environment. The caller's surface belongs to a different workspace, causing "surface not found" errors. Only use the env var fallback when the workspace is implicit (from CMUX_WORKSPACE_ID or server default). Affects: send, send-key, new-split, close-surface, trigger-flash, identify, notify, claude-hook. * Validate surface before close and respect -- option terminator in send P1: close-surface now validates the surface handle exists before sending surface.close, preventing silent fallback to focused surface when a stale or mistyped ref is provided. P2: parseOption now respects -- as an option terminator. send, send-key, send-panel, send-key-panel strip the -- marker from payload args. This prevents payload tokens like --workspace from being consumed as routing flags (e.g. `cmux send -- echo --workspace foo` sends all text correctly). * Fix test_send_workspace_relative: add to main() and send valid text The test was never called from main() and sent empty string which would raise immediately via _run_cli. Send a space character instead and add the test to the main() call list. * Respect --id-format in text output and resolve workspace refs across windows Text-mode list commands (list-workspaces, list-panes, list-panels, list-pane-surfaces, surface-health) now honor --id-format for plain output, not just --json. Added textHandle() helper that picks ref/id/both based on the selected format. resolveWorkspaceId now enumerates all windows when resolving a workspace ref, so notify/claude-hook work correctly in multi-window sessions where the target workspace may be in a non-active window. * Preserve escape-sequence semantics for send text The v1 server unescaped \n, \r, \t in send payloads before injecting into the terminal. The v2 surface.send_text handler sends text verbatim. Add CLI-side unescapeSendText() to restore the same behavior: \n and \r map to carriage return (Enter key), \t maps to tab. Applied to send and send-panel commands. * Reject malformed handles instead of passing through to server All four normalize functions (window, workspace, pane, surface) now throw a clear error for unrecognized handle formats instead of passing them through. Previously, a typo like `--panel foo` would forward `foo` to the server which would silently fall back to the focused surface. * Allow cross-workspace surface refs in close-surface and strip plural ID arrays Remove workspace-scoped pre-validation from close-surface so explicit surface refs/UUIDs from other workspaces work without requiring --workspace. The server resolves workspace from surface_id directly. Malformed handles are already caught by normalizeSurfaceHandle. Extend formatIDs to strip plural _ids/_refs array pairs (e.g. surface_ids/surface_refs in pane.list output) based on --id-format, matching the existing singular _id/_ref stripping behavior. * Honor explicit --window over CMUX_WORKSPACE_ID env fallback When --window is passed globally, skip the CMUX_WORKSPACE_ID env var fallback so commands operate on the targeted window's selected workspace instead of the caller's workspace from a different window. Affects all migrated commands that use workspaceFromArgsOrEnv or inline env fallback.
This commit is contained in:
parent
7ac7c37de2
commit
97085be775
3 changed files with 675 additions and 420 deletions
791
CLI/cmux.swift
791
CLI/cmux.swift
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue