airi/packages/server-shared/README.md

61 lines
2.8 KiB
Markdown

# @proj-airi/server-shared
The shared type definitions for all server-side packages of Project AIRI.
## Usage
```shell
ni @proj-airi/server-shared -D # from @antfu/ni, can be installed via `npm i -g @antfu/ni`
pnpm i @proj-airi/server-shared -D
yarn i @proj-airi/server-shared -D
npm i @proj-airi/server-shared -D
```
```typescript
import type { WebSocketEvents } from '@proj-airi/server-shared'
```
## How to use the events in distributed use cases?
### Scenarios
#### Minecraft agent
##### 1. Urgent combat (witch attack)
- Minecraft sends `spark:notify` (kind=alarm, urgency=immediate, payload hp/location/gear, destinations=["character"]).
- Character `spark:emit` working ("Seen it").
- Character issues `spark:command` with interrupt=force and options (retreat vs push).
- Minecraft `spark:emit` working ("Pillared up; healing") then done/blocked as it executes.
- Optional `context:update` for summary/memory.
##### 2. Prep plan (Ender Dragon)
- Discord/user intent triggers character `spark:command` to Minecraft (intent=plan, interrupt=soft, steps gather beds/pots/gear, fallback).
- Optional `context:update` with tips (lane='game').
- Minecraft streams `spark:emit` progress.
- If ambushed, Minecraft raises new `spark:notify` (alarm/immediate) to preempt.
- Character revises with another `spark:command`.
- Completion via `spark:emit` done + summary note.
##### 3. Routine nudge
- Minecraft signals low food via `spark:notify` (kind=reminder, urgency=soon, destinations=["character"]).
- Character defers to next tick and sends `spark:command` (interrupt=soft, intent=plan: "gather food nearby").
- Minecraft `spark:emit` queued/working then done.
##### 4. Multi-step command while researching (plan + live control)
> [!NOTE]
> Using `intent=plan` keeps the loop alive even with un-finalized ideas—similar to TODO scaffolding in coding agents—while richer guidance is still being researched.
- Character receives a user goal (e.g., fortify base) and issues an initial `spark:command` to Minecraft (interrupt=soft, intent=plan, steps to gather materials) so the agent keeps working.
- Character simultaneously performs memory/search/design tasks outside the game loop (wiki lookup, prior notes).
- As insights arrive, character sends `context:update` (lane='game', hints/ideas) to enrich the sub-agent without preemption.
- If an urgent event occurs during prep, Minecraft raises `spark:notify` (alarm) → character responds with a short `spark:emit` working and a `spark:command` (interrupt=force) to handle it (e.g., retreat, block up).
- Once design is ready, character sends a refined `spark:command` (`intent=proposal` (or `action`), `interrupt=soft`) with structured options/steps/fallbacks.
- Minecraft streams `spark:emit` progress; when complete, character summarizes via `spark:emit` or `context:update` for memory.
## License
[MIT](../../LICENSE)