Добавлены карточки проектов и persistent workspace runtime

Этот коммит содержится в:
Виктор
2026-05-11 23:34:01 +09:00
родитель 025c78b4e7
Коммит 16853d3b94
+53 -3
Просмотреть файл
@@ -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 => `
<div style="padding:10px;margin-bottom:10px;background:#1d2430;border-radius:10px;cursor:pointer" onclick="openProject('${project.workspace}')">
<strong>${project.name}</strong><br>
<small>${project.stack || 'unknown stack'}</small>
</div>
`).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 готов');
});