Files
stem-launcher/doc/stemctl.md
T

106 lines
3.9 KiB
Markdown

# `stemctl` — sterowanie sesją zajęć
`stemctl session` łączy wybór materiału, kontenera, stanu UML i zewnętrznego
pane tmuxa. Szczegółowy opis wyboru checkpointów znajduje się w
[`session.md`](session.md); ten dokument definiuje znaczenie poleceń cyklu
życia.
## Model połączenia
```text
pane tmuxa na hoście
│ attach / detach
wybrany kontener
└── wewnętrzny tmux → Neovim + Termdebug/GDB + symulator lub RP2350
```
## Katalog i organizacje Gitea
`workspace-info/workspace.json` jest źródłem prawdy. Organizacja `edu` pełni
rolę control plane, a stabilne serie mają osobne organizacje o nazwie
`edu-<series-id>`. Karta jest repozytorium wewnątrz organizacji swojej serii.
```bash
stemctl workspace audit
stemctl series list
stemctl series cards list freertos-c
stemctl series cards show freertos-c FC02
```
`workspace audit` jest lokalny i deterministyczny: sprawdza kontrakt katalogu,
nie modyfikuje Gitea. Dzięki temu brak sieci nie uniemożliwia przeprowadzenia
zajęć z wcześniej zsynchronizowanego workspace.
Obiektem operacji `attach` i `detach` jest **połączenie pane z kontenerem**.
Neovim i Termdebug są zawartością sesji kontenera, a nie osobnym obiektem
podpinanym przez launcher.
- `attach` podpina wybrany, działający kontener do wskazanego pane i pokazuje
jego istniejącą sesję Neovim/Termdebug;
- `detach` zastępuje widok kontenera zwykłą powłoką hosta w tym pane;
- `detach` nie zatrzymuje kontenera, wewnętrznego tmuxa, Neovima, GDB,
symulatora ani połączenia z RP2350;
- ponowne `attach` wraca do tej samej działającej sesji;
- `stop` i `rm`, a nie `detach`, zmieniają cykl życia kontenera.
## Polecenia sesji
| Polecenie | Znaczenie |
| --- | --- |
| `session choices` | Wyświetla numerowane serie, karty, Taski i etapy UML. |
| `session status` | Sprawdza kontener, MCP, tożsamość karty i bieżący etap. |
| `session start` | Uruchamia kontener i jego środowisko pracy. |
| `session reset` | Usuwa i odtwarza kontener, następnie opcjonalnie odtwarza checkpoint. |
| `session refresh` | Zachowuje kontener i odnawia jego podpięcie oraz wybór MCP. |
| `session attach` | Podpina istniejący kontener do pane tmuxa na hoście. |
| `session detach` | Odpina kontener od pane bez zatrzymywania czegokolwiek wewnątrz. |
| `session stage` | Ustawia wybrany etap UML; alias: `session checkpoint`. |
## Wybór celu
Serię, kartę, Task i elementy UML można wskazywać stabilnym ID albo numerem
pokazanym przez `choices`:
```bash
stemctl session choices --series inf --card 7 --task 4
stemctl session reset hazard3-sim \
--series inf --card 7 --task 4 \
--step 12 --pane current:0
```
Najważniejsze selektory:
- środowisko: `profile`, `--target`, `--instance`;
- materiał: `--series`, `--card`, `--task`;
- UML: `--stage`, `--block`, `--phase`, `--step`, `--snapshot`, `--first`;
- widok: `--pane`, `--focus`, `--offline`, `--control`;
- wykonanie: `--card-url`, `--timeout`, `--force-pane`, `--dry-run`.
`--pane current:0` oznacza pane `0` tego okna tmuxa, w którym uruchomiono
Codexa. Można także podać `%ID` albo `sesja:okno.pane`. Launcher chroni pane
wykonujące bieżącą komendę i pane oznaczone jako należące do innej sesji
Codexa.
## Przykłady attach i detach
```bash
# Podepnij działający kontener Task04 do pane 0 bieżącego okna.
stemctl session attach hazard3-sim \
--series inf --card 7 --task 4 --pane current:0
# Wróć w pane 0 do powłoki hosta. Kontener i debugowanie nadal działają.
stemctl session detach hazard3-sim \
--series inf --card 7 --task 4 --pane current:0
```
## Status materiału
`session choices` pokazuje jedną z trzech wartości:
- `opracowane` — kompletny materiał wraz z receptą checkpointu;
- `robocze` — źródło lub metadane istnieją, ale nie są kompletne;
- `brak` — materiał nie jest jeszcze dostępny w workspace.