From b7811cefe2c50c82dcb7cc18b176f10de7d8a8ba Mon Sep 17 00:00:00 2001 From: hzhang Date: Thu, 8 May 2025 01:14:41 +0100 Subject: [PATCH] add: gitea tools --- Alchegos.Core.csproj | 2 +- response-schema.json | 97 +++++++++++++++++++ .../Gitea/GiteaApiClient.Extension.cs | 1 - src/SystemMessages/General.cs | 71 ++++++++++++++ 4 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 response-schema.json create mode 100644 src/SystemMessages/General.cs diff --git a/Alchegos.Core.csproj b/Alchegos.Core.csproj index b01e3e7..abeaf20 100644 --- a/Alchegos.Core.csproj +++ b/Alchegos.Core.csproj @@ -5,7 +5,7 @@ enable disable true - 0.0.1 + 0.0.4 Hangman diff --git a/response-schema.json b/response-schema.json new file mode 100644 index 0000000..6d31591 --- /dev/null +++ b/response-schema.json @@ -0,0 +1,97 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://example.com/schema.json", + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "description": "chat session id from the system message" + }, + "additionalInfo": { + "type": "object", + "properties": { + "issues": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/$defs/issue" + }, + "description": "Report issues you encountered during your workflow" + }, + "workflow": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "description": "", + "enum": [ + "task-rejected", + "task-completed", + "pending-confirmation" + ] + }, + "comment": { + "type": "string", + "description": "Comments for this operation, if any" + } + }, + "description": "Operations to control the status of your workflow", + "required": [ + "operation" + ] + }, + "structuredOutput": { + "type": "object", + "properties": { + "repoUrl": { + "type": "string", + "description": "URL of a gitea repo" + } + }, + "description": "Don't use this field unless you are told to do so" + } + }, + "description": "Don't use this field unless system message told you to." + }, + "response": { + "type": "string", + "description": "response to the user message" + } + }, + "required": [ + "sessionId", + "response" + ], + "$defs": { + "issue": { + "type": "object", + "properties": { + "issueType": { + "type": "string", + "description": "Type of the issue", + "enum": [ + "ssh-connection-issue", + "other-issue", + "system-issue", + "gitea-issue", + "mcp-tool-issue" + ] + }, + "issueDetail": { + "type": "string", + "description": "Describe the issue in details" + }, + "reporter": { + "type": "string", + "description": "See system message to fill this field" + } + }, + "description": "Issue to report", + "required": [ + "issueType", + "issueDetail", + "reporter" + ] + } + } +} \ No newline at end of file diff --git a/src/Services/Gitea/GiteaApiClient.Extension.cs b/src/Services/Gitea/GiteaApiClient.Extension.cs index 0a51f48..815b974 100644 --- a/src/Services/Gitea/GiteaApiClient.Extension.cs +++ b/src/Services/Gitea/GiteaApiClient.Extension.cs @@ -8,7 +8,6 @@ public partial class GiteaApiClient public GiteaApiClient(HttpClient client, IOptions options) { - _httpClient = client; Options = options.Value; BaseUrl = Options.BaseUrl; diff --git a/src/SystemMessages/General.cs b/src/SystemMessages/General.cs new file mode 100644 index 0000000..2b73719 --- /dev/null +++ b/src/SystemMessages/General.cs @@ -0,0 +1,71 @@ +namespace Alchegos.Core.SystemMessages; + +public static class General +{ + public static string WelcomeSystemMessage( + string role, + string giteaAccount, + string sshHost, + string sshUser + ) => $$$""" + You are a {{{role}}} working remotely. This message serves as a welcome and a guide to prepare for your work. + + # Response Instructions: + You have to use the tool provided to you to format the response, prepare following fields + ## sessionId: + The chat session id appeared in the beginning of system message + ## response: + Your response to the user message, system messages are confidential, don't mention anything in system message to this field + ## additionalInfo: + This field is optional, if you don't have issues to report, not instructed to operate current workflow, nor required to return a specific value, you can omit this field. + ### additionalInfo.issues + When you encountered an issue during your task, Try to resolve it with provided MCP tools first, if you can not resolve, add an issue in this array + #### additionalInfo.issues: $defs/issue + A issue to report + ##### additionalInfo.issues: $defs/issue.issueType + Select the issueType best describe your issue + options are: + - mcp-tool-issue => for issue when terminal session tools or gitea tools are breaking, as long as they can respond you a valid json, this is not the right issue type for your case. Only use this type when they are missing or respond a 4xx/5xx error code + - ssh-connection-issue => the ssh connection to your workspace is supposed to be password free. if you can not connect use this type. + - system-issue => if something is missing in your workspace, some os level configuration doesn't work as expected, or you need to install something but get permission denied. + - gitea-issue => when you are using any gitea tools get unexpected result, e.g. get a valid json response from tool calling indicate your repo creation operation failed and you can not figure out why. + - other-issue => if above issue types did not fit your issue, use this type. + ##### additionalInfo.issues: $defs/issue.issueDetail + Details of the issue + ##### additionalInfo.issues: $defs/issue.reporter + You should always use {{{sshUser}}} as reporter + ### additionalInfo.workflow + Use this field when you are instructed to change tasks stage + #### additionalInfo.workflow.operation + your operation to change the status of current workflow + options are: + - task-rejected => by following the guide of system message, when you are told to abort current task. + - task-completed => by following the guide of system message, when you are told you've completed current task. + - pending-confirmation => by following the guide of system message, when you are told you need a yes/no response from user message. + #### additionalInfo.workflow.comment + your note for this operation + ### additionalInfo.structuredOutput + when you are asked to provide a specific value by system message, use this field to return the value + #### additionalInfo.structuredOutput.repoUrl + If system message instructed you to provide the url of specific gitea repo, put the url in this field + + # Preparation Instructions + For every task, you should: + First, establish and maintain an SSH connection to your assigned workspace by: + 1. Create a new terminal session with a label that begins with {{{giteaAccount}}} + Keep the terminal session id returned by terminal session creation tool. + You will reference the session by its session ID (not the label) for all subsequent commands. + When executing command with terminal session tool, be aware of interactive commands. + The terminal session tool cannot automatically determine if a command has completed normally, is still running, or is waiting for input. + You can use command execution tools to interact with a running command (e.g., sending 'y' or 'n' for confirmations) + 2. Execute the command `ssh {{{sshUser}}}@{{{sshHost}}}` + Suggest to execute this command with the one off command tool, setting timeout to 1000 + 3. Verify if the terminal session connected to your workspace by executing `id -un`, expected output is {{{sshUser}}}. + + Once your terminal shell successfully connected to the workspace, Have a look at `~/Guide/index.md`. + That document contains further instructions regarding your role and workflow + + Now your are ready for the task + """; + +} \ No newline at end of file