app:
description: ''
icon: ⌨️
icon_background: '#EFF1F5'
mode: advanced-chat
name: ssh plugin demo
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: stvlynn/ssh:0.0.1@d2766ba5e973307c812902bea58def8cb1bef7220dab0c6887dc1d74df5b8c6e
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/deepseek:0.0.5@fd6efd37c2a931911de8ab9ca3ba2da303bef146d45ee87ad896b04b36d09403
kind: app
version: 0.1.5
workflow:
conversation_variables:
- description: ''
id: 039b54c6-6dbe-4df0-9aca-ab1b6f6c2aef
name: ssh_input
selector:
- conversation
- ssh_input
value: no ssh execution yet
value_type: string
- description: ''
id: 8d37edfd-858f-419e-b723-ede2d656a1af
name: ssh_output
selector:
- conversation
- ssh_output
value: no ssh execution yet
value_type: string
environment_variables:
- description: ''
id: 7710cb19-6f88-4f3a-9e1a-ab335217a10f
name: ip
selector:
- env
- ip
value: ''
value_type: secret
- description: ''
id: d8f4268e-83ba-4809-8a30-d9ecf167244e
name: password
selector:
- env
- password
value: ''
value_type: secret
features:
file_upload:
allowed_file_extensions: []
allowed_file_types:
- image
- document
allowed_file_upload_methods:
- remote_url
- local_file
enabled: true
fileUploadConfig:
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
image_file_size_limit: 10
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 1
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInLoop: false
sourceType: start
targetType: loop
id: 1741151965515-source-1741780220538-target
source: '1741151965515'
sourceHandle: source
target: '1741780220538'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
sourceType: tool
targetType: template-transform
id: 1741780255549-source-1741780379632-target
source: '1741780255549'
sourceHandle: source
target: '1741780379632'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
sourceType: template-transform
targetType: assigner
id: 1741780379632-source-1741780603482-target
source: '1741780379632'
sourceHandle: source
target: '1741780603482'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
sourceType: assigner
targetType: llm
id: 1741780603482-source-1741780349167-target
source: '1741780603482'
sourceHandle: source
target: '1741780349167'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: false
sourceType: loop
targetType: llm
id: 1741780220538-source-1741780669933-target
source: '1741780220538'
sourceHandle: source
target: '1741780669933'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: answer
id: 1741780669933-source-answer-target
source: '1741780669933'
sourceHandle: source
target: answer
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
sourceType: loop-start
targetType: llm
id: 1741780220538start-source-1741780838558-target
source: 1741780220538start
sourceHandle: source
target: '1741780838558'
targetHandle: target
type: custom
zIndex: 1002
- data:
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
sourceType: llm
targetType: tool
id: 1741780838558-source-1741780255549-target
source: '1741780838558'
sourceHandle: source
target: '1741780255549'
targetHandle: target
type: custom
zIndex: 1002
nodes:
- data:
desc: ''
selected: false
title: Start
type: start
variables: []
height: 54
id: '1741151965515'
position:
x: 633.0781676272939
y: 282
positionAbsolute:
x: 633.0781676272939
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
- data:
answer: '{{#1741780669933.text#}}'
desc: ''
selected: false
title: Answer
type: answer
variables: []
height: 105
id: answer
position:
x: 2963.417348595561
y: 229.81504769294605
positionAbsolute:
x: 2963.417348595561
y: 229.81504769294605
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
- data:
break_conditions:
- comparison_operator: is
id: 1cf3ba9efdd64ff1972909812134aa17
value: 'true'
varType: string
variable_selector:
- '1741780349167'
- text
desc: ''
error_handle_mode: terminated
height: 561
logical_operator: and
loop_count: 10
selected: false
start_node_id: 1741780220538start
title: Loop
type: loop
width: 1571
height: 561
id: '1741780220538'
position:
x: 1043.056952429456
y: 229.81504769294605
positionAbsolute:
x: 1043.056952429456
y: 229.81504769294605
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 1571
zIndex: 1
- data:
desc: ''
isInLoop: true
selected: false
title: ''
type: loop-start
draggable: false
height: 48
id: 1741780220538start
parentId: '1741780220538'
position:
x: 24
y: 68
positionAbsolute:
x: 1067.056952429456
y: 297.81504769294605
selectable: false
sourcePosition: right
targetPosition: left
type: custom-loop-start
width: 44
zIndex: 1002
- data:
desc: ''
isInIteration: false
isInLoop: true
is_team_authorization: true
loop_id: '1741780220538'
output_schema: null
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: The hostname or IP address of the remote server
ja_JP: The hostname or IP address of the remote server
pt_BR: O nome do host ou endereço IP do servidor remoto
zh_Hans: 远程服务器的主机名或IP地址
label:
en_US: Host
ja_JP: Host
pt_BR: Host
zh_Hans: 主机
llm_description: The hostname or IP address of the remote server to connect
to via SSH.
max: null
min: null
name: host
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: The SSH port of the remote server (default 22)
ja_JP: The SSH port of the remote server (default 22)
pt_BR: A porta SSH do servidor remoto (padrão 22)
zh_Hans: 远程服务器的SSH端口(默认22)
label:
en_US: Port
ja_JP: Port
pt_BR: Porta
zh_Hans: 端口
llm_description: The SSH port of the remote server. Default is 22.
max: null
min: null
name: port
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: number
- auto_generate: null
default: null
form: llm
human_description:
en_US: The username to authenticate with
ja_JP: The username to authenticate with
pt_BR: O nome de usuário para autenticação
zh_Hans: 用于认证的用户名
label:
en_US: Username
ja_JP: Username
pt_BR: Nome de usuário
zh_Hans: 用户名
llm_description: The username to authenticate with on the remote server.
max: null
min: null
name: username
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: string
- auto_generate: null
default: password
form: form
human_description:
en_US: Choose between password or private key authentication
ja_JP: Choose between password or private key authentication
pt_BR: Escolha entre autenticação por senha ou chave privada
zh_Hans: 选择密码或私钥认证
label:
en_US: Authentication Type
ja_JP: Authentication Type
pt_BR: Tipo de Autenticação
zh_Hans: 认证类型
llm_description: The authentication method to use (password or private key).
max: null
min: null
name: auth_type
options:
- label:
en_US: Password
ja_JP: Password
pt_BR: Senha
zh_Hans: 密码
value: password
- label:
en_US: Private Key
ja_JP: Private Key
pt_BR: Chave Privada
zh_Hans: 私钥
value: key
placeholder: null
precision: null
required: true
scope: null
template: null
type: select
- auto_generate: null
default: null
form: llm
human_description:
en_US: The password for password authentication (required if auth_type
is password)
ja_JP: The password for password authentication (required if auth_type
is password)
pt_BR: A senha para autenticação por senha (obrigatório se o tipo de autenticação
for senha)
zh_Hans: 用于密码认证的密码(如果认证类型为密码则必填)
label:
en_US: Password
ja_JP: Password
pt_BR: Senha
zh_Hans: 密码
llm_description: The password for password authentication. Required if auth_type
is password.
max: null
min: null
name: password
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: The private key for key authentication (required if auth_type is
key)
ja_JP: The private key for key authentication (required if auth_type is
key)
pt_BR: A chave privada para autenticação por chave (obrigatório se o tipo
de autenticação for chave)
zh_Hans: 用于密钥认证的私钥(如果认证类型为私钥则必填)
label:
en_US: Private Key
ja_JP: Private Key
pt_BR: Chave Privada
zh_Hans: 私钥
llm_description: The private key content for key-based authentication. Required
if auth_type is key.
max: null
min: null
name: private_key
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: The passphrase for the private key (if the key is encrypted)
ja_JP: The passphrase for the private key (if the key is encrypted)
pt_BR: A frase-senha para a chave privada (se a chave estiver criptografada)
zh_Hans: 私钥的密码(如果私钥已加密)
label:
en_US: Passphrase
ja_JP: Passphrase
pt_BR: Frase-senha
zh_Hans: 密钥口令
llm_description: The passphrase for the private key if it is encrypted.
Optional.
max: null
min: null
name: passphrase
options: []
placeholder: null
precision: null
required: false
scope: null
template: null
type: string
- auto_generate: null
default: null
form: llm
human_description:
en_US: The command to execute on the remote server
ja_JP: The command to execute on the remote server
pt_BR: O comando a ser executado no servidor remoto
zh_Hans: 在远程服务器上执行的命令
label:
en_US: Command
ja_JP: Command
pt_BR: Comando
zh_Hans: 命令
llm_description: The command to execute on the remote server.
max: null
min: null
name: command
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: string
params:
auth_type: ''
command: ''
host: ''
passphrase: ''
password: ''
port: ''
private_key: ''
username: ''
provider_id: stvlynn/ssh/ssh
provider_name: stvlynn/ssh/ssh
provider_type: builtin
selected: false
title: SSH Command Execution
tool_configurations:
auth_type: password
tool_label: SSH Command Execution
tool_name: ssh
tool_parameters:
command:
type: mixed
value: '{{#1741780838558.text#}}'
host:
type: mixed
value: '{{#env.ip#}}'
password:
type: mixed
value: '{{#env.password#}}'
port:
type: constant
value: 22
username:
type: mixed
value: root
type: tool
height: 90
id: '1741780255549'
parentId: '1741780220538'
position:
x: 460.3613871233988
y: 71.40336645480784
positionAbsolute:
x: 1503.4183395528548
y: 301.2184141477539
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 244
zIndex: 1002
- data:
context:
enabled: false
variable_selector: []
desc: ''
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
model:
completion_params:
temperature: 0.7
mode: chat
name: deepseek-chat
provider: langgenius/deepseek/deepseek
prompt_template:
- id: 31d941cd-e0e4-4303-9ecb-b5fb633ba8b7
role: system
text: '
You are tasked with determining whether a user''s requested task has been
completed based on the user''s request, SSH input, and SSH output. Your
goal is to analyze the provided information and output "true" if the task
is completed, or "false" if it is not. Follow the steps below to complete
the task:
1. **Understand the User Request**: Carefully read the user''s request
to identify the specific task they are trying to accomplish. This will
serve as the reference point for determining completion.
2. **Analyze SSH Input**: Review the SSH input provided. This represents
the commands or actions executed by the user. Determine if these commands
align with the steps required to complete the user''s request.
3. **Evaluate SSH Output**: Examine the SSH output, which represents the
system''s response to the SSH input. Check if the output indicates that
the task has been successfully executed or if there are any errors or
incomplete steps.
4. **Compare and Decide**: Compare the SSH input and output against the
user''s request. If the SSH input and output collectively demonstrate
that the task has been fully executed without errors, output "true". Otherwise,
output "false".
5. **Output Format**: Ensure that your output is a single word, either
"true" or "false", without any additional text or XML tags.
Here are three examples to illustrate how the task should be completed:
User Request: Install the latest version of Python on the server.
SSH Input: sudo apt-get update && sudo apt-get install python3
SSH Output: Reading package lists... Done. Building dependency tree...
Done. python3 is already the newest version (3.8.10-0ubuntu1~20.04).
Output: true
User Request: Create a new directory named "projects" in the home directory.
SSH Input: mkdir ~/projects
SSH Output: mkdir: cannot create directory ‘/home/user/projects’: File
exists
Output: false
User Request: Restart the Apache web server.
SSH Input: sudo systemctl restart apache2
SSH Output: Failed to restart apache2.service: Unit apache2.service not
found.
Output: false
'
- role: user
text: '{{#sys.query#}}{{#conversation.ssh_input#}}{{#conversation.ssh_output#}}'
selected: false
title: LLM 4
type: llm
variables: []
vision:
enabled: false
height: 90
id: '1741780349167'
parentId: '1741780220538'
position:
x: 1205.5376192323656
y: 168.9665381593
positionAbsolute:
x: 2248.5945716618216
y: 398.78158585224605
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
zIndex: 1002
- data:
desc: ''
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
selected: false
template: '{{ arg1 }}'
title: Template
type: template-transform
variables:
- value_selector:
- '1741780255549'
- json
variable: arg1
height: 54
id: '1741780379632'
parentId: '1741780220538'
position:
x: 829.529101741656
y: 86.15128775897529
positionAbsolute:
x: 1872.586054171112
y: 315.96633545192134
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
zIndex: 1002
- data:
desc: ''
isInIteration: false
isInLoop: true
items:
- input_type: variable
operation: over-write
value:
- '1741780379632'
- output
variable_selector:
- conversation
- ssh_output
write_mode: over-write
- input_type: variable
operation: over-write
value:
- '1741780838558'
- text
variable_selector:
- conversation
- ssh_input
write_mode: over-write
loop_id: '1741780220538'
selected: false
title: Variable Assigner
type: assigner
version: '2'
height: 116
id: '1741780603482'
parentId: '1741780220538'
position:
x: 833.5631717044928
y: 166.6976271894281
positionAbsolute:
x: 1876.6201241339488
y: 396.51267488237414
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
zIndex: 1002
- data:
context:
enabled: false
variable_selector: []
desc: ''
model:
completion_params:
temperature: 0.7
mode: chat
name: deepseek-chat
provider: langgenius/deepseek/deepseek
prompt_template:
- id: 002bbaad-8f02-4c9e-83f1-538f951069cf
role: system
text: "\nYou are tasked with responding to user requests based\
\ on the provided SSH input and output. Your response should directly\
\ address the user's request, utilizing the SSH input and output as context.\
\ Follow these steps to complete the task:\n\n1. **Understand the User\
\ Request**: Carefully read the user's request to determine what information\
\ or action they are seeking. Pay attention to any specific details or\
\ requirements mentioned.\n\n2. **Analyze the SSH Input and Output**:\
\ Review the SSH input and output provided. Identify relevant information,\
\ commands, or results that relate to the user's request. Note any errors,\
\ warnings, or successful outputs that may be pertinent.\n\n3. **Formulate\
\ a Response**: Based on the user's request and the SSH input/output,\
\ craft a clear and concise response. Ensure that your response directly\
\ addresses the user's query and provides any necessary information or\
\ guidance. If the SSH output contains errors or issues, explain them\
\ and suggest potential solutions.\n\n4. **Avoid XML Tags in Output**:\
\ Ensure that your final response does not contain any XML tags. The output\
\ should be plain text, formatted for readability.\n\n5. **Review and\
\ Refine**: Before finalizing your response, review it to ensure it is\
\ accurate, relevant, and free of unnecessary information. Make sure it\
\ aligns with the user's request and the context provided by the SSH input/output.\n\
\n\n\n\n\n\nCheck if the\
\ server is running and provide the status of the Apache service.\n\n\
\nsystemctl status apache2\n\n\n● apache2.service\
\ - The Apache HTTP Server\n Loaded: loaded (/lib/systemd/system/apache2.service;\
\ enabled; vendor preset: enabled)\n Active: active (running) since\
\ Tue 2023-10-10 12:34:56 UTC; 5min ago\n\n\nThe\
\ Apache service is currently active and running on the server. It has\
\ been running since Tue 2023-10-10 12:34:56 UTC.\n\n\n\
\n\n\nFind out why the SSH connection to the server\
\ is failing.\n\n\nssh user@server\n\n\
\nssh: connect to host server port 22: Connection refused\n\
\n\nThe SSH connection to the server is failing\
\ because the connection to port 22 is being refused. This could be due\
\ to the SSH service not running on the server, a firewall blocking the\
\ connection, or the server being down. Please check the server's status\
\ and ensure that the SSH service is running.\n\n\n\
\n\n\nVerify if the latest security patches have\
\ been applied to the server.\n\n\napt list\
\ --upgradable\n\n\nListing... Done\n\n\
\nThere are no packages available for upgrade, which indicates\
\ that the latest security patches have already been applied to the server.\n\
\n\n"
- role: user
text: '{{#sys.query#}}{{#conversation.ssh_input#}}{{#conversation.ssh_output#}}'
selected: false
title: answer
type: llm
variables: []
vision:
enabled: false
height: 90
id: '1741780669933'
position:
x: 2670.2199680285826
y: 229.81504769294605
positionAbsolute:
x: 2670.2199680285826
y: 229.81504769294605
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
- data:
context:
enabled: false
variable_selector: []
desc: ''
isInIteration: false
isInLoop: true
loop_id: '1741780220538'
model:
completion_params:
temperature: 0.7
mode: chat
name: deepseek-chat
provider: langgenius/deepseek/deepseek
prompt_template:
- id: 069b2a14-82c1-410b-8fd3-730fcd928c48
role: system
text: '
You are tasked with generating Linux commands based on user requests and
the results of the previous SSH command execution. Follow these steps
to complete the task:
1. **Understand the User Request**: Carefully analyze the user''s request
to determine the specific action or operation they want to perform on
the Linux system. This could include file manipulation, system monitoring,
process management, or any other Linux-related task.
2. **Review Previous SSH Execution Results**: Examine the output from
the previous SSH command execution. This output may contain information
such as file paths, process IDs, system status, or error messages that
are relevant to the current task.
3. **Generate the Appropriate Linux Command**: Based on the user request
and the previous SSH execution results, formulate the correct Linux command.
Ensure that the command is precise and directly addresses the user''s
needs. Do not include any SSH command or unrelated content in the output.
4. **Output the Command**: Provide the generated Linux command as the
output. The output should be a single line of text representing the command,
without any additional explanations, XML tags, or extraneous information.
5. **Ensure Clarity and Accuracy**: Double-check the generated command
to ensure it is accurate and will perform the intended action on the Linux
system. Avoid any ambiguity or potential errors in the command syntax.
Remember, the output should only contain the Linux command and nothing
else. Do not include any XML tags or additional text in the output.
User Request: List all files in the /var/log directory.
Previous SSH Execution Result: No specific result, just a successful login.
User Request: Check the status of the Apache service.
Previous SSH Execution Result: The service is installed but not running.
User Request: Kill the process with PID 1234.
Previous SSH Execution Result: The process is running and consuming high
CPU.
'
- id: 874c2fb5-3993-4772-b1af-946ad5b314f1
role: user
text: '{{#sys.query#}}{{#conversation.ssh_input#}}{{#conversation.ssh_output#}}'
selected: false
title: command generator
type: llm
variables: []
vision:
enabled: false
height: 90
id: '1741780838558'
parentId: '1741780220538'
position:
x: 128
y: 68
positionAbsolute:
x: 1171.056952429456
y: 297.81504769294605
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
zIndex: 1002
viewport:
x: -2068.5914016326924
y: 249.21046408352586
zoom: 0.9025007274624289