Navigácia
ELOWEN · Dokumentácia

Posledná aktualizácia: 27. októbra 2026

Prechádzať dokumentáciu · runtime-context turn text

Tento článok zatiaľ nie je preložený. Je dostupný v angličtine.

Plugin development

runtime-context turn text

The plugin registers three per-turn text providers under the turn-context name, so the runtime facts stay fresh without changing the cached system prompt. The renderers live in packages/plugin-shared/runtimeContext.mjs and are shared with voice calls, and ctx.timezone() is also the scheduler's operator clock.

Providers

  • runtimeClock(await ctx.timezone()) — the current weekday, date, time and zone.
  • runtimeIdentity(await ctx.currentIdentity()) — the sender and the conversation surface.
  • The managed-Project note, registered with { placement: 'after-user' }: it is emitted only when the active access has a managed project and ctx.workDir() matches ^/[a-z0-9][a-z0-9-]*$. It reads Execution: isolated environment of project "<name>" (container; project files at <root>, host filesystem not reachable).

Clock line

Current date & time: Friday, 9 October 2026, 09:03 (Europe/Prague, midday).

The part of the day is derived from the hour: early morning before 5, morning before 9, midday before 12, afternoon before 17, then night. evening is declared in DAYPARTS but unreachable in that order.

Identity line

You are speaking with Alex (Elowen account #12, the operator of this instance), on discord, in a shared room other people can read, so the sender changes from message to message. Their name is Alex.

An account without an elowenUserId renders as an unverified sender with no linked Elowen account. Surfaces come from SURFACES: own (their own Elowen chat), direct (a 1:1 chat), shared (a read-shared room) and delegated (a sub-agent run with no conversation of its own); an unknown key reads an unrecognised surface.

User-controlled fields pass safe(), which strips brackets and line breaks and truncates to 80 characters, so a display name cannot forge another context line.

Timezone resolution

createTimezoneResolver(readTimezone, warn) reads the plugin's timezone setting on every call. An empty value uses the server zone, and a failed read falls back to it too.

A configured value is validated with Intl.DateTimeFormat; an invalid one falls back to the server zone with a warn-once message. Changes therefore apply from the next turn, while saving the setting still requests the restart the manifest asks for.