Add Ink session recovery and Coolify Docker support
This commit is contained in:
@@ -61,6 +61,15 @@ isGameRunning()
|
||||
chooseChoice(index)
|
||||
```
|
||||
|
||||
The Ink engine additionally supports browser-owned session recovery:
|
||||
|
||||
```text
|
||||
resumeGame(savedInkState)
|
||||
exportGameState()
|
||||
```
|
||||
|
||||
`exportGameState()` returns the current Ink state without creating a server-side save slot. The client stores that state with story history, choices, input mode, and media state in IndexedDB. `resumeGame(savedInkState)` rehydrates a fresh server-side InkEngine after a socket reconnect or browser reload without emitting duplicate narrative. This keeps durable player-specific state client-side for hosted multi-client Ink deployments.
|
||||
|
||||
Line-input engines also use `playerCommand` for free text.
|
||||
|
||||
Every engine emits `TurnResult` objects:
|
||||
@@ -103,6 +112,8 @@ The YAML engine is no longer the architectural default; it is one engine beside
|
||||
|
||||
The Ink server compiles source at startup using `inkjs/full`, then runs the compiled story with `inkjs`. Ink choices become `ChoiceResult` objects. Ink tags become shared `StoryTag` objects. Choice preview tags support `#key`, `#letter`, `#optional`, `#action`, `#gated`, and `#sort`.
|
||||
|
||||
The server keeps only ephemeral per-socket InkEngine instances. Browser IndexedDB owns durable Ink saves and the current autosave. If the socket reconnects or the page reloads, the browser sends the autosaved Ink state to `resumeGame()` and restores rendered history locally.
|
||||
|
||||
Ink does not provide arbitrary string input as a native async primitive comparable to choices. Future text-input turns should be implemented through a tag such as `#input[name](prompt)`: the server returns `inputMode: 'text'`, the UI shows command input for one round, then the server stores the submitted string into an Ink variable and continues.
|
||||
|
||||
### Z-code Engine
|
||||
|
||||
Reference in New Issue
Block a user