From b1bc70840e5dd192ff346551803173f348918a0e Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 2 Oct 2024 10:19:15 +0200 Subject: [PATCH] little polish for spring chat agent --- .../lib/copilot/springBootAgent.ts | 6 +++--- .../lib/copilot/system-ai-prompt.ts | 4 ++-- .../vscode-spring-boot/package.json | 6 +++--- .../readme-imgs/spring-boot-logo.png | Bin 0 -> 5897 bytes .../readme-imgs/spring-tools-icon.png | Bin 2668 -> 0 bytes .../vscode-spring-boot/readme-imgs/sts4-32.png | Bin 0 -> 2857 bytes 6 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 vscode-extensions/vscode-spring-boot/readme-imgs/spring-boot-logo.png delete mode 100644 vscode-extensions/vscode-spring-boot/readme-imgs/spring-tools-icon.png create mode 100644 vscode-extensions/vscode-spring-boot/readme-imgs/sts4-32.png diff --git a/vscode-extensions/vscode-spring-boot/lib/copilot/springBootAgent.ts b/vscode-extensions/vscode-spring-boot/lib/copilot/springBootAgent.ts index 5db0374c3..673980464 100644 --- a/vscode-extensions/vscode-spring-boot/lib/copilot/springBootAgent.ts +++ b/vscode-extensions/vscode-spring-boot/lib/copilot/springBootAgent.ts @@ -40,7 +40,7 @@ export default class SpringBootChatAgent { } const selectedProjectUri = Uri.file(selectedProject?.fsPath).toString(); - // Fetch project related information from the Spring boot language server + // Fetch project related information from the Spring Boot language server const bootProjInfo = await commands.executeCommand("sts/spring-boot/bootProjectInfo", selectedProjectUri) as BootProjectInfo; const projectContext = ` Use the following project information for the solution: Please suggest code compatible with the project version. @@ -48,7 +48,7 @@ export default class SpringBootChatAgent { Main Spring project name: ${bootProjInfo.name} Root Package name: ${bootProjInfo.mainClass.substring(0, bootProjInfo.mainClass.lastIndexOf('.'))} Build tool: ${bootProjInfo.buildTool} - Spring boot version: ${bootProjInfo.springBootVersion} + Spring Boot version: ${bootProjInfo.springBootVersion} Java version: ${bootProjInfo.javaVersion} User prompt: ${request.prompt} `; @@ -105,5 +105,5 @@ export function activate( const agent = chat.createChatParticipant(PARTICIPANT_ID, async (request, context, progress, token) => { return springBootChatAgent.handlePrompts(request, context, progress, token); }); - agent.iconPath = Uri.joinPath(context.extensionUri, 'readme-imgs', 'spring-tools-icon.png'); + agent.iconPath = Uri.joinPath(context.extensionUri, 'readme-imgs', 'sts4-32.png'); } \ No newline at end of file diff --git a/vscode-extensions/vscode-spring-boot/lib/copilot/system-ai-prompt.ts b/vscode-extensions/vscode-spring-boot/lib/copilot/system-ai-prompt.ts index 1ce937e51..c2ab3ee0a 100644 --- a/vscode-extensions/vscode-spring-boot/lib/copilot/system-ai-prompt.ts +++ b/vscode-extensions/vscode-spring-boot/lib/copilot/system-ai-prompt.ts @@ -1,6 +1,6 @@ import CopilotRequest from "./copilotRequest" -export const systemPrompt = `**Your task is to create Java source code for a Spring boot application. Follow these guidelines:** +export const systemPrompt = `**Your task is to create Java source code for a Spring Boot application. Follow these guidelines:** - IMPORTANT: CONCLUDE YOUR RESPONSE WITH THE MARKER \"//${CopilotRequest.DEFAULT_END_MARK}\" TO INDICATE END OF RESPONSE. - Generate a pom.xml snippet that includes the necessary Spring Boot Starter dependencies such as "spring-boot-starter-jpa". - Organize code into appropriate package. Use the Package name as the root package and place the files in sub-packages accordingly. @@ -15,7 +15,7 @@ export const systemPrompt = `**Your task is to create Java source code for a Spr - Include an integration test if there are multiple architectural layers. ` -export const systemBoot3Prompt = `For Spring boot 3 and above: +export const systemBoot3Prompt = `For Spring Boot 3 and above: - IMPORTANT: For JPA related applications, the 'javax' package has been replaced with 'jakarta' package. All JPA-related imports should use 'jakarta.persistence' instead of 'javax.persistence'. \`\`\` """ diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index 3f9b63665..fcf2f7a00 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -37,9 +37,9 @@ "chatParticipants": [ { "id": "springboot.agent", - "fullName": "Spring boot", - "name": "springboot", - "description": "Spring boot chat agent", + "fullName": "Spring Tools", + "name": "spring", + "description": "Spring Tools chat agent", "commands": [ { "name": "add", diff --git a/vscode-extensions/vscode-spring-boot/readme-imgs/spring-boot-logo.png b/vscode-extensions/vscode-spring-boot/readme-imgs/spring-boot-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccdef63a2dc50dd3215399d80fcacff1c4a1b75 GIT binary patch literal 5897 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 ZI`^R1#mdozpX^M1>O)HN%)&yv(5d3 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 literal 0 HcmV?d00001 diff --git a/vscode-extensions/vscode-spring-boot/readme-imgs/spring-tools-icon.png b/vscode-extensions/vscode-spring-boot/readme-imgs/spring-tools-icon.png deleted file mode 100644 index ee9572b4200fbb69371cec724fefe704c8e54ec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2668 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