feat(epic222): Workshop — Timmy as wizard presence, world state, WS bootstrap (#31)

This commit is contained in:
2026-03-18 22:15:46 -04:00
parent ea4cddc2ad
commit a70898e939
13 changed files with 863 additions and 703 deletions

View 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";
}
}