summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-06-07 15:19:57 -0600
committert <t@tjp.lol>2026-06-07 15:19:57 -0600
commiteb4179f9958deeae408a0a06b1f8ae6437e089db (patch)
tree5905d6750320b7e0ac9b7f315427f384e7dcca1e /docs
parent17a985cb41727b8a1bca4d95f334106c09386040 (diff)
Sync Agent/Stream internals to public names; alias Stream
Push the API-shaping we'd done in the public facade down into the internal types, collapsing the wrappers: - Stream: rename phase->state, Phase->State; underscore-prefix the internal fields (_agent/_queue/_response/_start/_persisted/_pending_error). state is the one intended-public field. public.zig now aliases Stream; run returns *Stream. - Agent compaction: pure transform compact()->private _compactInPlace; compactAndPersist()->compact() (the public name, persists). - Agent system prompt: addSystemMessage(text,mode) split into addSystemMessage(text) + setSystemPrompt(text) over a private _persistSystemMessage. - UserMessage moved off Agent to module scope. - Underscore-prefix pure-internal Agent fields: _open_stream_fn, _auto_compacted, _retry_prng. The Agent facade is now pure 1:1 forwarders; it stays a wrapper only because init heap-pins the inner (copyable, move-safe handle) and conversation()/ sessionId() are accessors. Conversation and Stream are plain aliases.
Diffstat (limited to 'docs')
-rw-r--r--docs/libpanto-cleanup.md33
1 files changed, 31 insertions, 2 deletions
diff --git a/docs/libpanto-cleanup.md b/docs/libpanto-cleanup.md
index bc1e1aa..7c53e02 100644
--- a/docs/libpanto-cleanup.md
+++ b/docs/libpanto-cleanup.md
@@ -86,10 +86,39 @@ touching `agent.zig`.
> `addAssistantMessage(blocks, ?usage)` on the real type (the separate
> method deleted), so the alias already has the intended one-method shape.
+> **Updated during implementation (impl cleanups synced the internals to the
+> public names):** the public-API shaping we'd done in the façade was pushed
+> *into* the internal types, so the wrappers collapsed to trivial forwarders
+> (and two of the three behavioral types became plain aliases):
+> - **`Stream` is now aliased** (`pub const Stream = agent_mod.Stream`).
+> `Stream.phase`→`state` and `Phase`→`State` renamed in the impl; `state`
+> is the one intended-public field (the transparent state machine), and
+> the rest (`_agent`/`_queue`/`_response`/`_start`/`_persisted`/
+> `_pending_error`) are underscore-prefixed internal state. `Agent.run`
+> returns `*Stream`.
+> - **Compaction renamed in the impl:** the pure no-persist transform is now
+> the private `_compactInPlace`; `compactAndPersist`→`compact` (the public
+> name, persists by default).
+> - **System-prompt split in the impl:** `addSystemMessage(text, mode)`
+> became `addSystemMessage(text)` + `setSystemPrompt(text)` (mode is an
+> internal `_persistSystemMessage` detail).
+> - **`UserMessage` moved to module scope** (off `Agent`); `public.UserMessage`
+> aliases it.
+> - **Pure-internal `Agent` fields underscore-prefixed:** `_open_stream_fn`
+> (the test seam), `_auto_compacted`, `_retry_prng`. The method-gated
+> state (`config`/`registry`/`session`/`conversation`) stays unprefixed
+> — it backs `setConfig`/`registerTool*`/`conversation()`/`sessionId()`
+> and is heavily referenced; the door is the method.
+>
+> Result: the `Agent` façade is now **pure 1:1 forwarders** (no renames or
+> merges left). It remains a wrapper only because `init` heap-pins the inner
+> (making the handle copyable / move-safe) and `conversation()`/`sessionId()`
+> are accessors. `Conversation` and `Stream` are aliases.
+
| bucket | rule | types |
| --- | --- | --- |
-| **behavioral** | wrap a **pointer** to a heap-pinned internal | `Agent`, `Stream` |
-| **behavioral (pared + aliased)** | trim the real type to the public surface, then alias | `Conversation` |
+| **behavioral (thin wrapper)** | heap-pin the inner; every method a 1:1 forwarder | `Agent` |
+| **behavioral (pared + aliased)** | trim the real type to the public surface, then alias | `Conversation`, `Stream` |
| **data (read/output)** | **alias** straight through; inspected field-by-field | `Event` (+ nested), `Usage`, `Pricing`, `SessionInfo` |
| **data (constructed)** | **alias** straight through; Zig users build them with `ArrayList` directly | `ContentBlock`, `Message`, the block types, `Config` family, `ResultPart` |