feat(web): add interactive sidebar terminals

This commit is contained in:
Yichen Jiang committed 2026-09-09 16:40:58 +08:00
1 parent 6d99a8a53a
commit e15a9b1bec
132 files changed
+5985 -101

No files matched your search

+9
View File
@@ -125,6 +125,7 @@ export const SERVICE_PAGE: Record<string, string> = {
workspaceRegistry: 'workspace.md',
workspaceController: 'workspace.md',
workspaceFiles: 'workspace.md',
terminalController: 'workspace.md',
directoryPickerController: 'workspace.md',
}
@@ -147,6 +148,7 @@ export const SERVICE_PAGE: Record<string, string> = {
* to a model as `cordis_runtime_inspect what:"client"`).
*/
export const SERVICE_WALK_EXEMPTIONS: Record<string, string> = {
webTerminals: 'client-side terminal view models — packages/api/terminal-controller/README.md owns the API',
appReady: 'not a service: launcher-provided successful-startup signal — packages/boot/cmdline/README.md owns the launcher contract',
appExit: 'not a service: launcher-provided bounded process-exit callback — packages/boot/cmdline/README.md owns the launcher contract',
cmdlineArgs: 'not a service: launcher-provided immutable app argument accessor — packages/boot/cmdline/README.md owns the launcher contract',
@@ -394,6 +396,7 @@ export const LINK_MAP: Readonly<Record<string, string>> = {
SubprocessOutputReader: 'subprocess.md',
SubprocessSpawnSpec: 'subprocess.md',
SubprocessTerminalHandle: 'subprocess.md',
SubprocessTerminalEnvironment: 'subprocess.md',
SubprocessTerminalSpawnSpec: 'subprocess.md',
CodeRunRequest: 'code-runtime.md',
CodeRunResult: 'code-runtime.md',
@@ -771,6 +774,12 @@ export const TYPE_LINK_EXEMPTIONS: Readonly<Record<string, string>> = {
WorkspaceFileRange: 'Host workspace file endpoint contract is owned by packages/api/workspace-files/README.md',
WorkspaceFileStat: 'Host workspace file endpoint contract is owned by packages/api/workspace-files/README.md',
WorkspaceFileText: 'Host workspace file endpoint contract is owned by packages/api/workspace-files/README.md',
TerminalEnvironment: 'Browser terminal environment fields are owned by packages/api/terminal-controller/README.md',
WebTerminalInfo: 'Browser terminal metadata is owned by packages/api/terminal-controller/README.md',
TerminalCreateRequest: 'Browser terminal allocation fields are owned by packages/api/terminal-controller/README.md',
TerminalAttachmentId: 'Browser terminal input ownership is owned by packages/api/terminal-controller/README.md',
TerminalFrame: 'Browser terminal stream frames are owned by packages/api/terminal-controller/README.md',
WebTerminalId: 'Browser terminal identity is owned by packages/api/terminal-controller/README.md',
}
/** Repository data policy consumed by the Cordis catalog projector. */
+7
View File
@@ -199,6 +199,13 @@ const SERVICE_ROLES: ServiceRole[] = [
mode: 'core',
note: 'Serves stat, paged text, byte windows, directory listings, and the change feed for files inside a Session\'s workspace root, confined by lstat, containment, and a stat re-check.',
},
{
key: 'terminalController',
pkg: 'api-terminal-controller',
title: 'Session interactive terminal Remote controller',
mode: 'core',
note: 'Owns user terminal processes, default shell resolution and bounded screen recovery through the subprocess provider and typed Remote transport.',
},
{
key: 'workspaceController',
pkg: 'api-workspace-controller',
@@ -44,6 +44,8 @@ const NO_MODEL_EXPERIENCE_SECTION: Readonly<Record<string, string>> = {
* blocks. A package moves on or off this list with its context behavior.
*/
const SENTENCE_MODEL_EXPERIENCE: Readonly<Record<string, SentenceContract>> = {
'packages/api/terminal-controller': { kind: 'none', reason: 'User-owned terminal processes and screen streams never enter model requests or Session events.' },
'packages/client/ui-sidebar-terminal': { kind: 'none', reason: 'The browser renders user terminal screens without exposing them to the model.' },
'packages/attachment/attachment': { kind: 'indirect', reason: 'The storage seam delegates model request rendering to provider adapters.' },
'packages/attachment/attachment-local': { kind: 'indirect', reason: 'The local backend delegates model request rendering to provider adapters.' },
'packages/shell/shell': { kind: 'indirect', reason: 'The service interface delegates all model rendering to dsh-tool-bash.' },