|
|
3 месяцев назад | |
|---|---|---|
| .. | ||
| src | 3 месяцев назад | |
| tests | 3 месяцев назад | |
| README.md | 3 месяцев назад | |
| package.json | 3 месяцев назад | |
| tsconfig.json | 3 месяцев назад | |
Event-sourced session log and in-memory store. A Session is the append-only
source of truth for an agent's whole interaction history — the LLM message
history is derived from it.
SessionStore (ctx key: sessions)Creates and holds event-sourced Session instances. Persistence is intentionally
not implemented here — plugins subscribe to session/event and flush on
session/flush.
ctx.sessions.create(id?: string, seed?: SessionEvent[]): Session
Create a session. seed replays/forks an existing event log. Disposed with
the calling fiber.ctx.sessions.get(id: string): Session | undefinedctx.sessions.list(): Session[]| Event | Mode | Purpose |
|---|---|---|
session/created |
emit | A session was created |
session/event |
emit | An event was appended (sync, fire-and-forget) |
session/flush |
parallel | Awaited durability checkpoint (persistence plugins drain buffers here) |
SessionPlain class (not a Cordis Service). Create via ctx.sessions.create().
session.append(type, data): SessionEvent — synchronous, never blocks on I/O.session.deriveMessages(): Message[] — derive the LLM message history from
the event log. Raw assistant/chunk events are skipped; context/message and
steering/message render as tagged synthetic user messages.session.events, session.seq, session.idtypes.ts)The append-only log: turn/start, turn/end, step/start, step/end,
user/message, assistant/message, assistant/chunk, tool/call,
tool/result, steering/message, context/message, usage, error.
Merge-extensible via SessionEventMap — a compaction plugin adds
compaction/marker, etc.
Also defines TurnTriggerMap and TurnEndReasonMap (merge-extensible sum types
for typed turn boundaries — kind-tagged instead of strings).
session/event (write-behind) and drain on
session/flush (awaited) and fiber dispose. See
examples/echo-agent/src/session-jsonl.ts for the pattern.ctx.sessions.create(id, seed) seeds a new session with an
existing event log.TODO(review) once the loop and a
persistence plugin coexist.