Resolve PR#1: Merge upstream multi-terminal architecture from thebaselab/codeapp#3
Merged
Resolve PR#1: Merge upstream multi-terminal architecture from thebaselab/codeapp#3
Conversation
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.
This reverts commit 3c7f54f.
…e toolbar button visibility
…et button in ToolbarView
…d add changelog entries for multi-terminal support and key modifiers
Multi-terminal feature
- 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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)TerminalManager.swiftandTerminalTabBar.swiftLocalization files (
en,de,ja,ko,ru,zh-Hans)# CodifyOnebranding in welcome message headerUpstream Features Merged
TerminalManager.swift— multi-terminal lifecycle, active terminal switching, remote terminal trackingTerminalTabBar.swift— tab bar UI for creating/switching/closing terminalsTerminalKeyboardToolbar.swift— Ctrl/Alt modifier toggle/lock with JS state syncMainApp/MainScene/RemoteContainer/ActivityBar— wired throughTerminalManagerinstead of singletonWorkSpaceStorage— remote disconnect callback hookExecutor— configurable session identifier, display names for statesterminal.bundle/index.html— modifier key state tracking applied to input sequencesAdditional Fixes
Feburary→Februaryin all changelogs;exepct→exceptinTerminalManagercommentpermissions: contents: readtotest.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.