Skip to content

Resolve PR#1: Merge upstream multi-terminal architecture from thebaselab/codeapp#3

Merged
vickiegpt merged 35 commits intomainfrom
copilot/resolve-pr1-issues
Mar 18, 2026
Merged

Resolve PR#1: Merge upstream multi-terminal architecture from thebaselab/codeapp#3
vickiegpt merged 35 commits intomainfrom
copilot/resolve-pr1-issues

Conversation

Copy link

Copilot AI commented Mar 18, 2026

PR#1 was blocked (mergeable_state: dirty) due to conflicts between the upstream multi-terminal feature branch and CodifyOne's fork-specific changes (project rename, UUID reorganization). This resolves all conflicts and completes the merge.

Conflict Resolutions

Code.xcodeproj/project.pbxproj (7 conflict regions)

Localization files (en, de, ja, ko, ru, zh-Hans)

  • Kept # CodifyOne branding in welcome message header
  • Adopted upstream's v1.12.0 version string and February 2026 dates

Upstream Features Merged

  • TerminalManager.swift — multi-terminal lifecycle, active terminal switching, remote terminal tracking
  • TerminalTabBar.swift — tab bar UI for creating/switching/closing terminals
  • TerminalKeyboardToolbar.swift — Ctrl/Alt modifier toggle/lock with JS state sync
  • MainApp/MainScene/RemoteContainer/ActivityBar — wired through TerminalManager instead of singleton
  • WorkSpaceStorage — remote disconnect callback hook
  • Executor — configurable session identifier, display names for states
  • terminal.bundle/index.html — modifier key state tracking applied to input sequences

Additional Fixes

  • Corrected upstream typos: FeburaryFebruary in all changelogs; exepctexcept in TerminalManager comment
  • Added explicit permissions: contents: read to test.yml (CodeQL: missing workflow permissions)

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

bummoblizard and others added 30 commits January 11, 2026 23:43
Introduces Escape, Delete, and Control and Alt modifier buttons to the terminal keyboard toolbar, allowing users to send modified key sequences. Updates the Swift and JavaScript code to track modifier state, apply modifiers to terminal input, and synchronize state between the UI and the terminal. Modifier states are reset after use, and notifications are used to keep the UI in sync.
Added a check to exclude ESC[200~ and ESC[201~ keycodes from being modified, preserving the integrity of the bracketed paste protocol in the terminal.
TerminalInstance now handles 'ControlReset' and 'AltReset' events, posting notifications with generation info. Also refactored cursor movement to use inputWithModifiers, with corresponding helper added in terminal.bundle/index.html.
Replaces the call to term.input with inputWithModifiers in the type(text:) method to handle input with modifier keys. This may improve support for complex input scenarios in the terminal.

Add lock functionality for Ctrl and Alt modifiers in terminal

Introduces the ability to lock the Control and Alt modifier keys in the terminal keyboard toolbar via double-tap, with visual feedback and state management. Updates Swift and JavaScript code to support locked states, ensuring modifiers remain active until explicitly unlocked, and modifies reset logic to respect locked states.
Refactors terminal data routing to use a tracked remote terminal for consistency, adds a cleanup method to TerminalInstance for resource management, and enhances TerminalManager with unique terminal naming and remote terminal tracking. Also updates TerminalTabBar for better accessibility and code organization, and removes the unused 'Go to Parent Folder' action from ExplorerFileTreeSection.

Add multi-terminal support with TerminalManager

Introduces TerminalManager to manage multiple terminal instances, refactors codebase to use terminalManager instead of a single terminalInstance, and adds a TerminalTabBar UI for switching between terminals. Updates related views, containers, and extensions to support multi-terminal workflows, including keyboard toolbar and local execution. Maintains backward compatibility for terminalInstance references and ensures UI updates on terminal changes.

Improve terminal management and UX for busy terminals

Adds confirmation dialog when killing a terminal with a running process, improves cleanup of terminal resources, and optimizes rendering to only show the active terminal. Also refactors terminal options handling and enhances data routing for remote terminals.

Improve terminal management and add logging

Refactored terminal options loading to use a helper for safer initialization. Added main thread assertions in TerminalManager for thread safety in debug builds. Enhanced terminal naming with localization support and improved duplicate handling. Introduced os.log-based logging for dropped remote terminal data and general terminal management events.

Improve terminal naming and UI interactions

TerminalManager now generates unique terminal names by reusing gaps from closed terminals, ensuring the lowest available number is used. Terminal actions in ToolbarView now target the active terminal, and MultiTerminalView adds a smooth animation for the tab bar when multiple terminals are present.

Add session identifier and service provider support

Executor now accepts a customizable sessionIdentifier, allowing unique identification for each terminal instance. TerminalManager tracks and propagates a TerminalServiceProvider to all TerminalInstance objects, improving remote connection handling and service management.

Improve terminal management logging and error handling

Adds detailed logging to terminal creation, closing, and switching in TerminalManager for better traceability. Enhances error handling in LocalExecutionExtension by providing user notifications for missing or busy executors. Refactors TerminalExtension to avoid repeated lookups of the active terminal when executing scripts.

Improve terminal initialization and accessibility handling

Adds a displayName property to Executor.State for better user messages, ensures terminal fitAddon is called only when ready, and posts a notification when a terminal is initialized. Refines accessibility labels for terminal tabs and improves active terminal management logic. Also prevents redundant open editor configuration in MainApp.

Refactor terminal management and rendering logic

Updated TerminalManager to set the terminal service provider only on the active terminal and improved remote terminal tracking. Refactored MultiTerminalView to render all terminals in a ZStack, showing only the active one, to support better view transitions and state management.

Improve terminal management and accessibility handling

Refactored terminal cleanup and service provider logic for better resource management and reliability. Enhanced terminal naming to avoid duplicates and added logging for failed active terminal assignments. Updated accessibility label construction in TerminalTabBar for clarity. Fixed command evaluation in LocalExecutionExtension to use the correct executor.
Refactored several long lines in MainApp.swift, TerminalManager.swift, and TerminalTabBar.swift to improve readability and maintain consistent code style. No functional changes were made.
Deleted Python virtual environment scripts and related files from LanguageResources/Library/lib/python3.9/venv. Updated npm package-lock files, removing several dependencies, likely as a result of cleaning up unused or deprecated packages.
…d add changelog entries for multi-terminal support and key modifiers
Copilot AI added 3 commits March 18, 2026 23:41
- Add TerminalManager for multi-terminal support
- Add TerminalTabBar UI for switching/closing terminals
- Add TerminalKeyboardToolbar with Ctrl/Alt modifier keys
- Update MainApp, MainScene, RemoteContainer, ActivityBar for multi-terminal
- Update WorkSpaceStorage with remote disconnect callback
- Update Executor with configurable session identifier
- Update terminal.bundle with modifier key tracking
- Update localization files (keep CodifyOne branding, update to v1.12.0)
- Update CI workflows (test.yml, production.yml)

Conflict resolutions:
- Localization files: kept CodifyOne name, adopted v1.12.0 version string
- project.pbxproj: kept CodifyOne UUID scheme, added new file references for
  TerminalManager.swift and TerminalTabBar.swift
Copilot AI changed the title [WIP] Fix issues in PR#1 Resolve PR#1: Merge upstream multi-terminal architecture from thebaselab/codeapp Mar 18, 2026
Copilot AI requested a review from vickiegpt March 18, 2026 23:45
@vickiegpt vickiegpt marked this pull request as ready for review March 18, 2026 23:46
@vickiegpt vickiegpt merged commit 3e991cc into main Mar 18, 2026
1 check failed
@vickiegpt vickiegpt deleted the copilot/resolve-pr1-issues branch March 18, 2026 23:47
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.

4 participants