feat(epic222): Workshop — Timmy as wizard presence, world state, WS bootstrap (#31)
This commit is contained in:
52
artifacts/api-server/src/lib/world-state.ts
Normal file
52
artifacts/api-server/src/lib/world-state.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
export interface TimmyState {
|
||||
mood: string;
|
||||
activity: string;
|
||||
}
|
||||
|
||||
export interface WorldState {
|
||||
timmyState: TimmyState;
|
||||
agentStates: Record<string, string>;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
const DEFAULT_TIMMY: TimmyState = {
|
||||
mood: "contemplative",
|
||||
activity: "idle",
|
||||
};
|
||||
|
||||
const _state: WorldState = {
|
||||
timmyState: { ...DEFAULT_TIMMY },
|
||||
agentStates: { alpha: "idle", beta: "idle", gamma: "idle", delta: "idle" },
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
|
||||
export function getWorldState(): WorldState {
|
||||
return {
|
||||
timmyState: { ..._state.timmyState },
|
||||
agentStates: { ..._state.agentStates },
|
||||
updatedAt: _state.updatedAt,
|
||||
};
|
||||
}
|
||||
|
||||
export function setAgentStateInWorld(agentId: string, agentState: string): void {
|
||||
_state.agentStates[agentId] = agentState;
|
||||
_state.updatedAt = new Date().toISOString();
|
||||
_deriveTimmy();
|
||||
}
|
||||
|
||||
function _deriveTimmy(): void {
|
||||
const states = Object.values(_state.agentStates);
|
||||
if (states.includes("working")) {
|
||||
_state.timmyState.activity = "working";
|
||||
_state.timmyState.mood = "focused";
|
||||
} else if (states.includes("thinking") || states.includes("evaluating")) {
|
||||
_state.timmyState.activity = "thinking";
|
||||
_state.timmyState.mood = "curious";
|
||||
} else if (states.some((s) => s !== "idle")) {
|
||||
_state.timmyState.activity = "active";
|
||||
_state.timmyState.mood = "attentive";
|
||||
} else {
|
||||
_state.timmyState.activity = "idle";
|
||||
_state.timmyState.mood = "contemplative";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user