Skip to content

Refresh PRAW with a calmer Manus-inspired workspace shell - #8

Open
texiwustion wants to merge 13 commits into
mainfrom
feat/manus-workspace-redesign
Open

Refresh PRAW with a calmer Manus-inspired workspace shell#8
texiwustion wants to merge 13 commits into
mainfrom
feat/manus-workspace-redesign

Conversation

@texiwustion

Copy link
Copy Markdown
Collaborator

Summary\n- fix the zsh startup hook regression that leaked math errors into fresh sessions\n- document the Manus-inspired workspace direction and execution plan\n- ship the first graphite-blue workspace refresh across tokens, pane chrome, transcript copy, and live console styling\n- keep layout divider sizing aligned with existing geometry while softening pane seams\n\n## Testing\n- npm test\n- npm run typecheck\n- npm run build\n- cargo test\n

The shell integration script assumed preexec/precmd hook arrays already existed, which let zsh emit bad math expression errors on clean startup. Initializing those arrays keeps PRAW's own startup path quiet and stops accidental session-output pollution before the user runs a command.

Constraint: Keep the existing shell integration approach and prompt marker flow intact
Rejected: Rewrite zsh hook registration around add-zsh-hook | larger behavior change than needed for the regression
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If zsh hook registration changes again, keep a runtime test that asserts startup produces no shell math errors
Tested: cargo test; npm test; npm run typecheck; npm run build
Not-tested: Finder-launched macOS bundle runtime after this exact patch
The redesign needs a stable product lens before implementation starts. This spec locks the chosen direction: Manus-inspired restraint, graphite-blue dual themes, quieter pane chrome, and a more intentional treatment of transcript, live console, and shell-output context.

Constraint: Must preserve PRAW's terminal-native workspace semantics rather than imitating a marketing page structure
Rejected: Directly clone Manus page styling verbatim | would blur product identity and confuse component semantics
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep future UI edits aligned with this token-first, restraint-first direction unless a new design spec explicitly replaces it
Tested: Manual spec self-review for scope, consistency, and ambiguity
Not-tested: Implementation viability against current CSS until planning/execution
The redesign now has a concrete task sequence: lock expectations in tests, rebuild tokens, refactor shell CSS, polish transcript/live console/settings, then verify and publish. This keeps the visual rewrite incremental instead of turning into an unbounded styling sweep.

Constraint: Must preserve ongoing branch momentum while keeping each redesign slice reviewable
Rejected: Implement the visual rewrite in one large styling pass | too hard to verify or bisect if regressions appear
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Follow the plan task order unless new evidence shows a dependency was misunderstood
Tested: Manual plan review for task order, file scope, and verification coverage
Not-tested: Actual implementation outcomes until execution
This first visual pass swaps the harsher black-box shell language for a graphite-blue system, softens pane chrome, and makes transcript context blocks feel intentional instead of error-like. It keeps the same workspace semantics while moving the product closer to the Manus-inspired restraint captured in the design spec.

Constraint: Preserve current pane and terminal behavior while changing mostly tokens, copy, and CSS surfaces
Rejected: Rebuild component structure around a brand-new layout shell | too much behavior risk for the first polish pass
Confidence: medium
Scope-risk: moderate
Reversibility: clean
Directive: Keep future polish passes additive to this token system instead of reintroducing hard black borders or loud accent states
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Human visual QA in a real desktop window after this exact CSS pass
The first visual pass widened split dividers and rounded every pane edge, but those choices conflicted with the layout engine's fixed 6px divider math and left inner flush seams vulnerable. This follow-up keeps the calmer visual language while restoring geometry consistency and cleaning up shared-edge radii.

Constraint: Must preserve the current layout engine's divider calculations without reopening geometry code
Rejected: Change SPLIT_DIVIDER_SIZE_PX and all related layout assumptions to match the CSS experiment | unnecessary behavior risk for a polish-only fix
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep divider sizing and pane seam styling coordinated with layout geometry any time pane chrome changes
Tested: npm test; npm run typecheck; npm run build
Not-tested: Manual drag-resize feel in a real desktop window after this seam fix
The first Manus-inspired pass still left two sharp edges: the light palette felt too cold-blue, and blank startup noise could still materialize as shell-output blocks across panes. This follow-up shifts light mode toward a bone-white workspace, softens divider polish, and suppresses whitespace-only startup transcript blocks so the interface feels more intentional.

Constraint: Keep genuine non-command shell output visible while filtering only empty startup clutter
Rejected: Hide all session-scoped shell output by default | would bury legitimate shell context and make debugging harder
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If shell-output presentation changes again, keep behavior tests around whitespace-only startup suppression
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual visual QA across multiple pane split topologies after the warmer light-theme pass
Startup shell chrome still felt too present: panes could open with shell output labels and prompt residue, and the rounded geometry remained softer than desired. This pass suppresses all pre-first-command startup transcript blocks, warms light mode further toward bone white, and tightens the shared radius scale so the workspace opens quieter and more composed.

Constraint: Preserve post-command session output behavior while keeping first-open panes visually blank
Rejected: Special-case only '%' prompts in transcript rendering | too brittle compared with suppressing all pre-first-command startup output
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Treat the pre-first-command workspace as a blank canvas unless a future product decision explicitly reintroduces startup context
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual visual QA of nested split layouts after the tighter radius pass
The seam presentation only marked the trailing child edge as flush, which left the original pane with a square cut whenever a split was created. This update marks both sides of each shared seam, keeps a tighter seam radius instead of flattening it entirely, and adds a final light polish pass to the pane chrome and settings surfaces so the workspace reads calmer.

Constraint: Keep the existing layout geometry and divider hit targets intact

Rejected: Widen the divider gutter or rewrite LayoutTree structure | too much layout risk for a visual defect

Confidence: high

Scope-risk: narrow

Reversibility: clean

Directive: Shared seam styling depends on both adjacent panes receiving flush masks; do not revert to one-sided masks without rechecking split visuals

Tested: npm test

Tested: npm run typecheck

Tested: npm run build

Tested: cargo test
Deferred live-console capture was replaying the echoed command line back into the finished command block, and ANSI-only prompt residue could still create an empty shell-output block after completion. This made simple commands like cd feel wrong even though the shell session itself was healthy.

The fix normalizes deferred command output at command-end, drops a leading echoed command line when it matches the submitted command, trims a stray bare prompt symbol, and ignores visually blank post-command output after stripping ANSI escape sequences.

Constraint: Preserve legitimate non-command session output after a user has run commands
Rejected: Hide all session-scoped output blocks | would discard real shell context that still matters
Confidence: medium
Scope-risk: narrow
Reversibility: clean
Directive: Keep transcript cleanup tied to shell echo/prompt artifacts only; do not broaden the heuristics without a concrete reproduction
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual GUI confirmation on the user's exact local shell prompt theme
The previous pane styling was still carrying too much of the softer workspace language. After visual review, the pane shell now leans into GitHub-like card chrome: paler utility headers, tighter title weight, quieter action buttons, and cleaner white pane bodies.

The split seam keeps the same resize hit area but reduces the visible separator to a very thin line, while the seam masks stay rounded and restrained so split panes do not collapse back into harsh square cuts.

Constraint: Keep resize affordances usable while making the seam itself visually minimal
Rejected: Turn the seam into a thicker pill divider | looked decorative and too heavy for the requested GitHub direction
Confidence: medium
Scope-risk: narrow
Reversibility: clean
Directive: If pane chrome is refined again, keep the seam line optically thin and avoid reintroducing wrapper chips around header actions
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual pixel-level comparison against the user's local split layout on every theme
The seam still reacted too loudly on hover because both the divider and edge-resize handles were drawing visual affordances. That made the split feel thicker than intended even after the GitHub-style pane cleanup.

This change removes the visual hover/active overlays from seam-adjacent resize affordances and leaves only the cursor feedback. It also reworks AI workflow panes so they stay within the same GitHub-like card system: normal pane body, gentler header tint, and a compact AI state marker instead of a special badge block.

Constraint: Preserve resize usability without adding visual noise at the seam
Rejected: Keep a highlighted seam only while dragging | still read as unnecessary decoration next to the requested ultra-thin divider
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Treat AI mode as a pane state, not a separate visual surface family, unless product semantics change materially
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual visual review on the user's exact display scaling and theme mix
The user preferred a GitHub-like focus treatment where the pane stays structurally quiet and the header carries the focus signal. The previous version still left a pane-wide accent ring that read too much like a code editor selection state.

This change removes the active-pane outer accent treatment and shifts focus emphasis into the header background and divider line. AI workflow panes follow the same rule with their own gentler tint, so focus stays consistent without turning AI panes into separate chrome.

Constraint: Preserve a clearly readable active pane state without reverting to heavy pane-wide outlines
Rejected: Keep both header emphasis and outer accent ring | visually redundant and louder than requested
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep future focus tweaks localized to header rhythm first; only reintroduce pane-wide emphasis with a fresh visual need
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual review against every pane density/state combination in the running app
The previous AI pane highlight was still leaning too blue and a little too present in the header. The updated treatment follows the approved Whisper Lavender direction: lighter violet tint, gentler active emphasis, and a calmer AI label tone.

To make the visual change actually reach existing local setups, the old built-in blue AI defaults are migrated to the new lavender defaults during config normalization, while still preserving user-chosen custom colors.

Constraint: Preserve AI color configurability while ensuring legacy default blue installations adopt the new visual direction
Rejected: Hardcode a fixed purple only in CSS | would leave existing saved default-blue configs unchanged and create a mismatch with settings
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep AI pane distinction in the header layer; do not spread lavender tint into the full pane body unless product semantics change
Tested: npm test; npm run typecheck; npm run build; cargo test
Not-tested: Manual review on a machine with a deliberately custom non-default AI theme color
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant