<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pantograph.git/libpanto/src/openai_chat_json.zig, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://code.tjp.lol/pantograph.git/atom?h=main</id>
<link rel='self' href='https://code.tjp.lol/pantograph.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/'/>
<updated>2026-07-07T18:15:28Z</updated>
<entry>
<title>Move libpanto projects to libpantograph dependency</title>
<updated>2026-07-07T18:15:28Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-07-07T17:29:23Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=621d7fee0ace729f8d44126032d2c6e13f72ee7f'/>
<id>urn:sha1:621d7fee0ace729f8d44126032d2c6e13f72ee7f</id>
<content type='text'>
Remove the in-repo libpanto sources and binding projects from pantograph.
Consume libpantograph through the Zig package URL at
code.tjp.lol/libpantograph.git, including the Lua module artifact used by
CLI extensions.
</content>
</entry>
<entry>
<title>libpanto ponytail-audit simplifications</title>
<updated>2026-06-23T15:34:55Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-23T00:18:28Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=538a5d926fa626a00cc3dc12c555f11f82867efd'/>
<id>urn:sha1:538a5d926fa626a00cc3dc12c555f11f82867efd</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add addUserText helper; update all call sites</title>
<updated>2026-06-10T18:17:27Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-10T16:06:07Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=bb85e867bc938138f29fb45230169af1ba60761c'/>
<id>urn:sha1:bb85e867bc938138f29fb45230169af1ba60761c</id>
<content type='text'>
Conversation.addUserMessage now takes a []ContentBlock (symmetric with
addAssistantMessage). Introduce a thin addUserText wrapper in agent.zig
for the plain-text case and update every call site in agent.zig and
anthropic_messages_json.zig accordingly.
</content>
</entry>
<entry>
<title>further libpanto public API name cleanup</title>
<updated>2026-06-08T03:56:57Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-08T03:56:51Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=75dedacfbeab1fea281d1bce124b920dcf878844'/>
<id>urn:sha1:75dedacfbeab1fea281d1bce124b920dcf878844</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Alias Conversation instead of facading it; merge addAssistantMessage</title>
<updated>2026-06-07T20:57:58Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-07T20:57:58Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=17a985cb41727b8a1bca4d95f334106c09386040'/>
<id>urn:sha1:17a985cb41727b8a1bca4d95f334106c09386040</id>
<content type='text'>
A facade that forwards every method 1:1 is worse than paring the real type
down to the intended surface and aliasing it. conversation.Conversation's
interface is already the public surface we want (init/deinit, the
add*/replace* builders, and messages/allocator as plain data fields), so
public.zig now aliases it straight through and Agent.conversation() returns
a borrowed *Conversation for in-place surgery. Drops the ConversationData
alias and the pointer-wrapper.

Merged addAssistantMessageWithUsage into addAssistantMessage(blocks, ?usage)
on the real type (separate method deleted), so the alias has the intended
one-method shape; all call sites updated.

Only Agent and Stream remain true facades -- they have genuinely-internal
fields plus API-shaping renames (Stream.phase-&gt;state, Phase-&gt;State) an alias
can't express.
</content>
</entry>
<entry>
<title>failure retries scheme</title>
<updated>2026-06-04T18:09:09Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-04T15:46:49Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=3f1ace16afc7877b0bfad374cb286d4d84140960'/>
<id>urn:sha1:3f1ace16afc7877b0bfad374cb286d4d84140960</id>
<content type='text'>
</content>
</entry>
<entry>
<title>image uploads</title>
<updated>2026-06-03T18:34:13Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-03T15:11:36Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=ac5c4898dfa0a9e57424336774893dfc72b132e9'/>
<id>urn:sha1:ac5c4898dfa0a9e57424336774893dfc72b132e9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>compaction</title>
<updated>2026-06-02T22:37:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-02T21:00:44Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=8b88b886346460b1ab29edb03ad85bc3bb565a45'/>
<id>urn:sha1:8b88b886346460b1ab29edb03ad85bc3bb565a45</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tool call resiliency</title>
<updated>2026-06-02T17:11:29Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-02T16:50:05Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=16ea45b6854232541fb45f7d2e5b767118cccf43'/>
<id>urn:sha1:16ea45b6854232541fb45f7d2e5b767118cccf43</id>
<content type='text'>
</content>
</entry>
<entry>
<title>system prompt building and logging</title>
<updated>2026-06-02T15:49:18Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-02T15:02:49Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=9c64a7d4462a11674e2dea481b037b5f5d9c62fc'/>
<id>urn:sha1:9c64a7d4462a11674e2dea481b037b5f5d9c62fc</id>
<content type='text'>
</content>
</entry>
</feed>
