Skip to content

Feat/terminal application - #365

Open
Ahmedwaleed22 wants to merge 7 commits into
futrx-com:qafrom
Ahmedwaleed22:feat/terminal-application
Open

Ahmedwaleed22 wants to merge 7 commits into
futrx-com:qafrom
Ahmedwaleed22:feat/terminal-application

Conversation

@Ahmedwaleed22

@Ahmedwaleed22 Ahmedwaleed22 commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

What

Migrating Terminal to a Terminal application.

Why

Not all users need Terminal to be installed on their projects. The current Terminal implementation is running on the root server, which is very risky.

Fixes #359

How

Migrated Terminal to an application using Xterm.js with the ability to reconnect when disconnected.

Introduced drawers to be used for the terminal menu and other applications.

Looking to migrate the scheduled apps menu to a drawer too.

Touched Layers

Layer Changes
CMD Removing text mentioning terminal as a core part
Agent Mentioning docked drawer as a new component in the applications frontend API and mentioning Terminal Application instead of Terminal
Integration Mentioning Terminal Application instead of Terminal, and giving it ability to declare a web route
Transport Removal of old terminal integration
Frontend/ui Removal of old terminal icon and introducing a drawer
Frontend/src Design edits
Frontend Container Adding drawers support
Frontend Extentions Adding drawers support
Frontend Config Adding drawers variables and application routes support
Frontend Types Removal of old terminal types
Frontend Stores Adding drawers support
Frontend Hooks Adding drawers support, and removal of old terminal setup
Frontend/Package.json Removal of unused dependencies: Xterm
Frontend/dev Removed them (not needed anymore)
Frontend/Models Adding drawers support

…projects

A global install inside project containers now records one global
in-projects instance. The global Applications page lists it as installed,
project creation installs every such application into the new project, and
uninstalling the record uninstalls each project's copy.
…ject containers

A web route required scopes to be exactly ["project"]. An application whose
global install lands as a project copy in every project
(globallyInstalledInsideContainers) only ever produces project instances, which
is all the gateway routes to, so it may now list global as well. A global
install into a dedicated container still cannot declare web.
…tion

The built-in terminal was a core WebSocket wrapping lxc exec, with no
keepalive, reconnect or session persistence, and its header showed the host
path of the workspace.

It is now applications/terminal. A small service inside the project container
owns one shell per chat and serves the xterm page through the application's web
route; the shell outlives its connection, so the page reconnects to the same
shell while the drawer is open and recent output is replayed. The header shows
the container path (/workspace).

To keep the pane where it was, extensions get remote.ui.registerDrawer: a
resizable pane docked beside the chat, with the header, toggle, resize handle
and remembered width owned by Remote.

The core /ws/terminal socket, the terminal pane and its hooks, and the
frontend's xterm dependencies are removed. Projects have no terminal until the
application is installed.
Copilot AI balanced review requested due to automatic review settings October 10, 2026 22:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Ahmedwaleed22
Ahmedwaleed22 marked this pull request as ready for review October 10, 2026 23:51
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.

Migrate Terminal to an installable application

2 participants