diff options
| author | t <t@tjp.lol> | 2026-06-05 11:43:29 -0600 |
|---|---|---|
| committer | t <t@tjp.lol> | 2026-06-05 11:43:43 -0600 |
| commit | ccdaef8e682960ecadf73d3b2df70559a0baaf56 (patch) | |
| tree | 2a6e455ca3359b68bf5cb5b83015054bd6e2eb6f /src/command.zig | |
| parent | 03ac69658517a0054d2a573d1e1b60c1bfaaf977 (diff) | |
Move session persistence into the Agent; collapse CLI plumbing
The Agent now owns its Conversation and a SessionStore, and persists
everything it generates as turns progress. Embedders get persistence for
free; the CLI no longer drives the session log.
libpanto:
- Agent.init takes a SessionStore + optional Conversation to adopt (resume
path). Agent owns/tears down the conversation; turn-driving methods drop
the *Conversation param and operate on self.conversation.
- New Agent methods: submitUserMessage (adds+persists the user prompt
immediately), addSystemMessage(text, mode), runStep persists the turn on
every exit path (incl. partial turns on error), compactAndPersist for the
explicit /compact path. Auto-compaction persists its window via runStep's
tail.
- turn_persist.zig: DiskMessage mapping moved out of the CLI; reads usage
off Message.usage (no per-message-usage list). System mode rides on
DiskMessage.mode, derived from the System block.
- NullStore is now an allocator-bearing struct (frees consumed messages per
the store-consumes-messages contract).
- Tests: in-memory CapturingStore round-trip + NullStore turn test.
panto CLI:
- Delete src/session_persist.zig. REPL is submitUserMessage + runStep.
- Reorder construction: store -> registry -> agent -> bootstrap -> seed/
reconcile system prompt through the agent -> load extensions.
- command.Context drops conv/session_mgr; commands reach ctx.agent.
- system_prompt seed/reconcile call agent.addSystemMessage.
- CLIReceiver is display-only (per_message_usage removed).
Phases 3-5 of docs/pluggable-session-store.md. Behavior preserved; full
build + test suite green.
Diffstat (limited to 'src/command.zig')
| -rw-r--r-- | src/command.zig | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/command.zig b/src/command.zig index 26acc7a..49ad5b8 100644 --- a/src/command.zig +++ b/src/command.zig @@ -32,12 +32,10 @@ const panto = @import("panto"); pub const Context = struct { allocator: std.mem.Allocator, - /// In-memory conversation the agent is driving. - conv: *panto.conversation.Conversation, - /// The active agent (model/provider/tooling snapshot). + /// The active agent. Owns the conversation (`agent.conversation`) and + /// the session store (`agent.session_store`); commands reach both + /// through it rather than holding separate pointers. agent: *panto.agent.Agent, - /// Session log to persist any changes a command makes. - session_mgr: *panto.session_manager.SessionManager, /// REPL output writer and its backing file writer (for flushing). stdout: *std.Io.Writer, |
