Documentation
¶
Overview ¶
Package wsconfig applies operator-tunable async defaults to the Manager + narrator package. Operators configure these values in the workspace-level `config.yaml` under `default.async`; this package is the thin adapter that turns parsed duration strings into calls to `Manager.StartGC` and `narrator.SetLLMTimeout`.
Kept in its own subpackage to avoid an import cycle: the narrator package itself imports `protocol/async`, so any config-loading code that touches both must sit outside `protocol/async`.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type NarratorConfig ¶
type NarratorConfig struct {
// LLMTimeout bounds how long the barrier event loop waits on an LLM
// narrator runner per invocation when no ctx-scoped override is in
// effect. Parsed via time.ParseDuration (e.g. "3s", "500ms").
LLMTimeout string `json:"llmTimeout,omitempty" yaml:"llmTimeout,omitempty"`
// Prompt is the system prompt used by the narrator LLM runner when
// Narration mode is "llm". Empty → workspace baseline embedded
// default applies. Operators can override this in the workspace
// `config.yaml` under `default.async.narrator.prompt` to steer tone
// / length / localization.
Prompt string `json:"prompt,omitempty" yaml:"prompt,omitempty"`
}
type WorkspaceConfig ¶
type WorkspaceConfig struct {
GC *GCConfig `json:"gc,omitempty" yaml:"gc,omitempty"`
Narrator *NarratorConfig `json:"narrator,omitempty" yaml:"narrator,omitempty"`
}
WorkspaceConfig mirrors the YAML surface for operator-tunable async defaults. It is populated from the workspace `config.yaml` under `default.async`. Zero / empty values fall back to built-in package defaults at the time `Apply` runs.
Example (excerpt from `config.yaml`):
default:
model: openai_gpt-5_4
async:
gc:
interval: 5m
maxAge: 1h
narrator:
llmTimeout: 3s
Durations parse via time.ParseDuration ("500ms", "10s", "5m", "1h").
func ParseWorkspaceConfig ¶
func ParseWorkspaceConfig(data []byte) (*WorkspaceConfig, error)
ParseWorkspaceConfig parses YAML bytes into a WorkspaceConfig. Empty input returns an empty config with no error. Useful for unit tests and for callers that have already read the YAML bytes themselves.
func (*WorkspaceConfig) Apply ¶
func (c *WorkspaceConfig) Apply(ctx context.Context, manager *asynccfg.Manager) (gcInterval, gcMaxAge, narratorTimeout time.Duration, err error)
Apply resolves the config's duration strings, forwards the narrator LLM timeout to the narrator package, and starts the Manager GC loop. Returns the resolved GC interval/maxAge/narrator timeout so callers can log what was applied.
Behavior:
- Nil config or missing fields: nothing is applied for the missing piece; the baseline values that reached this Apply call (from `workspace/config.DefaultsWithFallback`) carry through as-is because the workspace loader pre-populates them.
- `Manager.StartGC` is invoked only when both resolved durations are positive — this package holds no defaults of its own; the authoritative defaults live in the workspace `default.async` baseline.
- Parse errors surface loudly so operator typos fail at bootstrap rather than silently degrading.
Ctx lifecycle: the GC goroutine runs until ctx is canceled. Pass a long-lived application context. When ctx or manager is nil, GC is not started.