From 16853d3b94b199c96fdd5d8e21fd4c517cbda3dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Mon, 11 May 2026 23:34:01 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2=20=D0=B8=20?= =?UTF-8?q?persistent=20workspace=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/workspace.js | 56 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/frontend/workspace.js b/frontend/workspace.js index 5f46c74..d4734be 100644 --- a/frontend/workspace.js +++ b/frontend/workspace.js @@ -11,20 +11,69 @@ function appendLog(message) { logs.scrollTop = logs.scrollHeight; } -async function workspaceApi(url, payload = {}) { +async function workspaceApi(url, payload = {}, method = 'POST') { appendLog(`API запрос: ${url}`); const response = await fetch(url, { - method: 'POST', + method, headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(payload) + body: method === 'GET' ? undefined : JSON.stringify(payload) }); return await response.json(); } +async function loadProjects() { + const container = document.getElementById('projectsList'); + + if (!container) { + return; + } + + appendLog('Загрузка списка проектов'); + + const data = await workspaceApi('/api/projects/list', {}, 'GET'); + + const projects = data.projects || []; + + if (projects.length === 0) { + container.innerHTML = 'Проекты отсутствуют'; + return; + } + + container.innerHTML = projects.map(project => ` +
+ ${project.name}
+ ${project.stack || 'unknown stack'} +
+ `).join(''); +} + +function openProject(workspace) { + document.getElementById('workspacePath').value = workspace; + + appendLog(`Открытие проекта: ${workspace}`); + + loadWorkspaceTree(); +} + +async function registerCurrentProject(repoUrl, workspace, stack = 'unknown') { + const name = repoUrl.split('/').pop(); + + await workspaceApi('/api/projects/register', { + name, + repo_url: repoUrl, + workspace, + stack + }); + + appendLog(`Проект зарегистрирован: ${name}`); + + loadProjects(); +} + async function loadWorkspaceTree() { const workspace = document.getElementById('workspacePath').value; @@ -123,5 +172,6 @@ async function loadDevices() { window.addEventListener('load', () => { loadDevices(); + loadProjects(); appendLog('DevConsole workspace runtime готов'); });