Eingebautes Terminal (xterm.js + portable-pty) und Start/Beenden-Button

- Terminal-Fenster als eigener Prozess (--terminal <projekt>) mit eigener PTY,
  startet claude-sync im Projektordner
- Projektliste: ein Button pro Zeile — grün Starten (open_terminal) bzw.
  rot Beenden (stop_project, SIGTERM auf exakte PID / Ghostty-Quit)
- is_running erfasst Ghostty oder laufenden Terminal-Prozess
- Status-Kreis ohne Prozess unsichtbar
This commit is contained in:
marcus.hinz
2026-07-04 10:00:12 +02:00
parent 70e4898259
commit f7473797a9
13 changed files with 724 additions and 22 deletions
+13 -5
View File
@@ -29,9 +29,18 @@ async function refresh() {
}
}
async function start(project: Project) {
async function stop(project: Project) {
try {
await invoke("start_project", { project: project.name });
await invoke("stop_project", { project: project.name });
await refresh();
} catch (e) {
error.value = String(e);
}
}
async function openTerminal(project: Project) {
try {
await invoke("open_terminal", { project: project.name });
await refresh();
} catch (e) {
error.value = String(e);
@@ -112,9 +121,8 @@ onUnmounted(() => window.clearInterval(timer));
</select>
</td>
<td>
<button @click="start(p)">
{{ p.running ? "Aktivieren" : "Starten" }}
</button>
<button v-if="p.running" class="stop" @click="stop(p)">Beenden</button>
<button v-else class="start" @click="openTerminal(p)">Starten</button>
</td>
</tr>
</tbody>