# jasonlat-dot/ai-ssh-terminal-server architecture

> Architecture diagram of the GitHub repository jasonlat-dot/ai-ssh-terminal-server, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jasonlat-dot/ai-ssh-terminal-server
- Repository: https://github.com/jasonlat-dot/ai-ssh-terminal-server

## Overview

AI SSH Terminal Server is a backend for a desktop SSH client. The client manages saved connections, opens terminals, and performs SFTP file operations; it can also submit chat requests to an operations agent and receive responses and events. The agent enriches prompts with intent and session context, then can use SSH and other tools; chat history and attachments are persisted separately. The README documents these capabilities, while the sampled excerpts clarify selected domain-layer interactions. Controller routing and several infrastructure implementations are not present in the supplied tree, so their wiring is left unspecified.

Main entry points: [`ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/react/AIAgentReActServiceCase.java`](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/react/AIAgentReActServiceCase.java) (ReAct workflow), [`ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/IChatHistoryRepository.java`](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/IChatHistoryRepository.java) (Chat history), [`ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/chat/ChatService.java`](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/chat/ChatService.java) (Chat sessions), [`ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/memory/LongTermMemoryService.java`](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/memory/LongTermMemoryService.java) (Long-term memory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Client API"]
  node_agent_api["Agent API<br/>[IAgentService.java]"]
  node_ssh_api["SSH API"]
  node_terminal_api["Terminal API"]
end

subgraph group_ssh["SSH Operations"]
  node_ssh_connection["Connections"]
  node_terminal["Terminal sessions"]
  node_sftp["SFTP operations<br/>[SftpService.java]"]
end

subgraph group_agent["Agent Runtime"]
  node_chat["Chat sessions<br/>[ChatService.java]"]
  node_react["ReAct workflow"]
  node_intent["Intent routing<br/>[IntentService.java]"]
  node_prompt["Prompt assembly<br/>[PromptService.java]"]
  node_context["Context assembly"]
  node_tool_assembly["Agent tools"]
end

subgraph group_files["Attachments"]
  node_file_case["File service case"]
  node_file_service["Attachment service<br/>[FileService.java]"]
  node_object_store["MinIO storage"]
end

subgraph group_state["Conversation State"]
  node_memory["Long-term memory"]
  node_history_repo["Chat history"]
  node_memory_repo["Memory repository"]
end

node_client(("Desktop client"))
node_ssh_host(("SSH host"))
node_model(("AI model service"))
node_minio[("MinIO")]
node_mysql[("MySQL")]

node_client -->|"submits chat"| node_agent_api
node_client -->|"manages connections"| node_ssh_api
node_client -->|"controls terminal"| node_terminal_api
node_ssh_connection -->|"tests connection"| node_ssh_host
node_terminal -->|"opens session"| node_ssh_host
node_sftp -->|"transfers files"| node_ssh_host
node_client -->|"manages files"| node_sftp
node_chat -->|"runs agent"| node_react
node_react -->|"classifies intent"| node_intent
node_react -->|"builds prompt"| node_prompt
node_prompt -->|"assembles context"| node_context
node_react -->|"uses tools"| node_tool_assembly
node_react -->|"requests completion"| node_model
node_file_case -->|"handles upload"| node_file_service
node_file_service -->|"stores object"| node_object_store
node_object_store -->|"reads and writes"| node_minio
node_chat -->|"reads and writes"| node_history_repo
node_memory -->|"reads messages"| node_history_repo
node_memory -->|"reads and writes"| node_memory_repo
node_history_repo -->|"persists history"| node_mysql
node_memory_repo -->|"persists memory"| node_mysql

click node_agent_api "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/IAgentService.java"
click node_ssh_api "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshConnectionService.java"
click node_terminal_api "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshTerminalService.java"
click node_ssh_connection "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/connection/SshConnectionService.java"
click node_terminal "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/terminal/SshTerminalService.java"
click node_sftp "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/sftp/service/SftpService.java"
click node_chat "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/chat/ChatService.java"
click node_react "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/react/AIAgentReActServiceCase.java"
click node_intent "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/intent/IntentService.java"
click node_prompt "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/prompt/PromptService.java"
click node_context "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/context/ChatContextService.java"
click node_tool_assembly "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/amory/matter/tool/assembly/AgentToolAssemblerService.java"
click node_file_case "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/file/FileServiceCase.java"
click node_file_service "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/file/FileService.java"
click node_object_store "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/storage/MinioIObjectStorageService.java"
click node_memory "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/memory/LongTermMemoryService.java"
click node_history_repo "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/IChatHistoryRepository.java"
click node_memory_repo "https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/ILongTermMemoryRepository.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_agent_api,node_ssh_api,node_terminal_api,node_client toneBlue
class node_ssh_connection,node_terminal,node_sftp,node_minio,node_mysql toneAmber
class node_chat,node_react,node_intent,node_prompt,node_context,node_tool_assembly toneMint
class node_file_case,node_file_service,node_object_store toneRose
class node_memory,node_history_repo,node_memory_repo,node_ssh_host,node_model toneIndigo
```

## Components

### Client API

- [Agent API](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/IAgentService.java): `ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/IAgentService.java`
- [SSH API](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshConnectionService.java): `ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshConnectionService.java`
- [Terminal API](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshTerminalService.java): `ai-ssh-terminal-server-api/src/main/java/com/jasonlat/ai/trigger/api/ISshTerminalService.java`

### SSH Operations

- [Connections](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/connection/SshConnectionService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/connection/SshConnectionService.java`
- [Terminal sessions](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/terminal/SshTerminalService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/ssh/service/terminal/SshTerminalService.java`
- [SFTP operations](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/sftp/service/SftpService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/sftp/service/SftpService.java`

### Agent Runtime

- [Chat sessions](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/chat/ChatService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/chat/ChatService.java`
- [ReAct workflow](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/react/AIAgentReActServiceCase.java): `ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/react/AIAgentReActServiceCase.java`
- [Intent routing](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/intent/IntentService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/intent/IntentService.java`
- [Prompt assembly](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/prompt/PromptService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/prompt/PromptService.java`
- [Context assembly](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/context/ChatContextService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/context/ChatContextService.java`
- [Agent tools](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/amory/matter/tool/assembly/AgentToolAssemblerService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/amory/matter/tool/assembly/AgentToolAssemblerService.java`

### Attachments

- [File service case](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/file/FileServiceCase.java): `ai-ssh-terminal-server-case/src/main/java/com/jasonlat/ai/cases/file/FileServiceCase.java`
- [Attachment service](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/file/FileService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/file/FileService.java`
- [MinIO storage](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/storage/MinioIObjectStorageService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/file/service/storage/MinioIObjectStorageService.java`

### Conversation State

- [Long-term memory](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/memory/LongTermMemoryService.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/service/memory/LongTermMemoryService.java`
- [Chat history](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/IChatHistoryRepository.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/IChatHistoryRepository.java`
- [Memory repository](https://github.com/jasonlat-dot/ai-ssh-terminal-server/blob/main/ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/ILongTermMemoryRepository.java): `ai-ssh-terminal-server-domain/src/main/java/com/jasonlat/ai/domain/agent/adapter/repository/ILongTermMemoryRepository.java`

### Other components

- **Desktop client**
- **SSH host**
- **AI model service**
- **MinIO**
- **MySQL**

## Connections

- Desktop client → Agent API: submits chat
- Desktop client → SSH API: manages connections
- Desktop client → Terminal API: controls terminal
- Connections → SSH host: tests connection
- Terminal sessions → SSH host: opens session
- SFTP operations → SSH host: transfers files
- Desktop client → SFTP operations: manages files
- Chat sessions → ReAct workflow: runs agent
- ReAct workflow → Intent routing: classifies intent
- ReAct workflow → Prompt assembly: builds prompt
- Prompt assembly → Context assembly: assembles context
- ReAct workflow → Agent tools: uses tools
- ReAct workflow → AI model service: requests completion
- File service case → Attachment service: handles upload
- Attachment service → MinIO storage: stores object
- MinIO storage → MinIO: reads and writes
- Chat sessions → Chat history: reads and writes
- Long-term memory → Chat history: reads messages
- Long-term memory → Memory repository: reads and writes
- Chat history → MySQL: persists history
- Memory repository → MySQL: persists memory
