From 01d4fab79391d12154c332123bdb325475959213 Mon Sep 17 00:00:00 2001 From: marioggil Date: Sun, 23 Feb 2025 07:40:22 -0500 Subject: [PATCH] first commit --- .gitignore | 3 ++ .vscodeignore | 10 ++++ extension.js | 128 ++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 35 +++++++++++++ package.json | 40 +++++++++++++++ 5 files changed, 216 insertions(+) create mode 100644 .gitignore create mode 100644 .vscodeignore create mode 100644 extension.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..527c7d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.vscode +/.vscode-test.mjs +/node_modules \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..26db3d5 --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,10 @@ +.vscode/** +.vscode-test/** +test/** +.gitignore +.yarnrc +vsc-extension-quickstart.md +**/jsconfig.json +**/*.map +**/eslint.config.mjs +**/.vscode-test.* diff --git a/extension.js b/extension.js new file mode 100644 index 0000000..13648e0 --- /dev/null +++ b/extension.js @@ -0,0 +1,128 @@ +const vscode = require('vscode'); + +class ApiResponseViewProvider { + constructor() { + this._view = undefined; + this._response = ''; + } + + resolveWebviewView(webviewView) { + this._view = webviewView; + webviewView.webview.options = { + enableScripts: true + }; + this.updateContent(); + } + + updateResponse(response) { + this._response = response; + this.updateContent(); + } + + getResponse() { + return this._response; + } + + updateContent() { + if (this._view) { + this._view.webview.html = ` + + + +
${this._response}
+ + + `; + } + } +} + +function activate(context) { + const apiResponseProvider = new ApiResponseViewProvider(); + + context.subscriptions.push( + vscode.window.registerWebviewViewProvider('apiResponseView', apiResponseProvider) + ); + + // Comando para enviar código a la API + let sendToApiCommand = vscode.commands.registerCommand('code-api-integration.sendToApi', async () => { + const editor = vscode.window.activeTextEditor; + if (!editor) { + vscode.window.showErrorMessage('No hay editor activo'); + return; + } + + const selection = editor.selection; + const selectedText = editor.document.getText(selection); + + if (!selectedText) { + vscode.window.showErrorMessage('No hay texto seleccionado'); + return; + } + + try { + // Mostrar indicador de progreso + vscode.window.withProgress({ + location: vscode.ProgressLocation.Notification, + title: "Enviando código a la API...", + cancellable: false + }, async (progress) => { + const response = await fetch('http://127.0.0.1:7869/api/v2/text/text', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify( + {"server":"groq", + "model":"deepseek-r1-distill-llama-70B", + "system":"Te dare un codigo de python quiero que generes el docstring tomando el cuenta el codigo", + "content":selectedText, + "password": "1223Aer*", + "userid": "Anon"} + ) + }); + + if (!response.ok) { + throw new Error(`Error en la API: ${response.statusText}`); + } + + const data = await response.json(); + apiResponseProvider.updateResponse(JSON.stringify(data, null, 2)); + + // Notificar que la respuesta está lista para usar + vscode.window.showInformationMessage('Respuesta de API guardada - usa el botón derecho para pegarla'); + }); + + } catch (error) { + vscode.window.showErrorMessage(`Error: ${error.message}`); + } + }); + + // Comando para pegar la última respuesta + let pasteResponseCommand = vscode.commands.registerCommand('code-api-integration.pasteLastResponse', async () => { + const editor = vscode.window.activeTextEditor; + if (!editor) { + vscode.window.showErrorMessage('No hay editor activo'); + return; + } + + const response = apiResponseProvider.getResponse(); + if (!response) { + vscode.window.showWarningMessage('No hay respuesta guardada de la API'); + return; + } + + editor.edit(editBuilder => { + editBuilder.insert(editor.selection.active, response); + }); + }); + + context.subscriptions.push(sendToApiCommand, pasteResponseCommand); +} + +function deactivate() {} + +module.exports = { + activate, + deactivate +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b653ba2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,35 @@ +{ + "name": "basic-ai", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "basic-ai", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@types/node": "^22.13.5", + "@types/vscode": "^1.97.0" + } + }, + "node_modules/@types/node": { + "version": "22.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", + "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/vscode": { + "version": "1.97.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.97.0.tgz", + "integrity": "sha512-ueE73loeOTe7olaVyqP9mrRI54kVPJifUPjblZo9fYcv1CuVLPOEKEkqW0GkqPC454+nCEoigLWnC2Pp7prZ9w==" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5aa4fb1 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "code-api-integration", + "displayName": "Code API Integration", + "description": "Send selected code to API and display response", + "version": "0.0.1", + "engines": { + "vscode": "^1.80.0" + }, + "categories": ["Other"], + "activationEvents": [], + "main": "./extension.js", + "contributes": { + "commands": [ + { + "command": "code-api-integration.sendToApi", + "title": "Send Code to API" + }, + { + "command": "code-api-integration.pasteLastResponse", + "title": "Paste API Response" + } + ], + "views": { + "explorer": [ + { + "id": "apiResponseView", + "name": "API Response" + } + ] + }, + "menus": { + "editor/context": [ + { + "command": "code-api-integration.pasteLastResponse", + "group": "navigation" + } + ] + } + } +} \ No newline at end of file