<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pantograph.git/docs, 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>big cli/tui gaps project</title>
<updated>2026-07-05T22:23:49Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-07-04T15:50:12Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=f759f149377942c4e04802c45162cda1c9bfb2b3'/>
<id>urn:sha1:f759f149377942c4e04802c45162cda1c9bfb2b3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: todos, new "tui gaps" project, AGENTS.md modification</title>
<updated>2026-07-04T15:01:25Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-07-04T14:46:35Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=1ed07e2e4473b91c669c062bbfef6bb499f7d2b7'/>
<id>urn:sha1:1ed07e2e4473b91c669c062bbfef6bb499f7d2b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Load extensions via unified policy, entry/activate, rocks and paths</title>
<updated>2026-07-01T21:37:04Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-07-01T21:36:20Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=800b2c4b6115845f6bf15d90484b3e80e81a606f'/>
<id>urn:sha1:800b2c4b6115845f6bf15d90484b3e80e81a606f</id>
<content type='text'>
Replace the split [tools]/[extensions] config sections and the two-stage
load gate with a single model:

- [extensions] is now one policy resolved across all layers. Rules from
  every layer are kept (not clobbered) and resolved by last-match-wins
  after sorting by (layer, glob specificity, deny-last), so a base layer
  can carve one name out of an otherwise-denied group and a higher layer's
  broad rule still wins. Default is allow; whitelist via deny=["**"].
- Registration is deferred: a source returns an entry {name, activate}
  (or a list, or the sugar tool table), is always eval'd side-effect-free,
  and only permitted names get activate()d. Identity is the declared name,
  not the filename. Collapses the old pre/post-load two-stage gate.
- The loader runs two passes (eval -&gt; shadow -&gt; filter -&gt; activate) with
  precedence project&gt;user&gt;base and, within a layer, rocks&lt;paths&lt;dir.
- extensions.paths adds extra scan dirs; extensions.rocks loads luarocks
  packages as extension sources (require-as-entries). Startup installs
  only missing rocks (no per-launch network hit); panto update force-
  (re)installs every configured rock.

deny is a feature toggle, not a security boundary: rocks is where registry
code enters, so the pin list is the trust boundary. Rock integrity
(first-party GPG signing + --verify) is designed but not yet wired; until
then rocks pins which version, not which bytes.

Breaking: [tools] is removed; extensions must return entries. Built-in
tools and the wc example keep working via the sugar tool form.
</content>
</entry>
<entry>
<title>ponytail simplifications to panto cli and lua extensiosn</title>
<updated>2026-06-23T16:53:26Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-23T15:38:23Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=69a1ee138bb78ad4663fe2d9e58678f7b0d07b74'/>
<id>urn:sha1:69a1ee138bb78ad4663fe2d9e58678f7b0d07b74</id>
<content type='text'>
</content>
</entry>
<entry>
<title>support static linking, and openai_codex_responses in libpanto-c</title>
<updated>2026-06-16T19:10:31Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-16T18:28:55Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=7847db3b13bc8639b5173ce3c56ae4068617ce12'/>
<id>urn:sha1:7847db3b13bc8639b5173ce3c56ae4068617ce12</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add Codex Responses support and session debugging</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-14T05:45:59Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=02b4c7a35ac0b714bc045d54fb4bb45d1ce4e490'/>
<id>urn:sha1:02b4c7a35ac0b714bc045d54fb4bb45d1ce4e490</id>
<content type='text'>
Teach provider config and auth resolution about the Codex Responses
dialect, including user-facing `style = "openai_responses"` with
`dialect = "codex"`. Serialize and parse Responses traffic with
provider-specific reasoning replay, assistant phase metadata, and robust
function-call assembly keyed by `output_index` so streamed tool inputs
survive proxy quirks and empty terminal payloads.

Also persist thinking origins and message metadata across sessions, add
the Anthropic interleaved-thinking header switch, write per-session
debug logs, and improve the TUI and scripts for inspecting tool output
and session costs.
</content>
</entry>
<entry>
<title>auth: flatten [auth.&lt;name&gt;] config + ${...} substitution</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T20:24:31Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=20e6e08a42240aef0b36ecf627cbcde921912071'/>
<id>urn:sha1:20e6e08a42240aef0b36ecf627cbcde921912071</id>
<content type='text'>
Collapse the auth schema: infer `type` from keys, replace key/key_env_var with
a single `key` (resolved via substitution), flatten the exchange to flat
`exchange_*` keys, and drop the auth-level headers tables in favor of reusing
the provider's `extra_headers` on the auth HTTP calls. Add `${sibling}` and
`${env:VAR}` substitution over auth values (GitHub Enterprise = set `domain`).
Restore api_key-empty → provider-drop. Update default config, docs, and tests.
</content>
</entry>
<entry>
<title>docs: note openai_responses serializer/parser scope and reasoning-continuity limitation</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T18:23:12Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=fbee69ca8c4b485b7b2d6fe7448b13367c4716c8'/>
<id>urn:sha1:fbee69ca8c4b485b7b2d6fe7448b13367c4716c8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: as-built status for OAuth provider auth</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T18:13:24Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=9f983c5d0ecc1c12f15eadf1add123e24995b660'/>
<id>urn:sha1:9f983c5d0ecc1c12f15eadf1add123e24995b660</id>
<content type='text'>
Record resolved open questions (clean break, key_env_var, codex dialect,
file-backed storage), the core/CLI split, verified device-flow specifics for
Copilot and Codex, the Codex Responses-API finding, and verification status.
</content>
</entry>
</feed>
