<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pantograph.git/libpanto/src/auth.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>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>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>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>auth: OAuth device flows, refresh, and Copilot exchange (C5)</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T18:02:11Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=1b5917e9eb309b4b78e8d2b88b66e7f7bc1834ef'/>
<id>urn:sha1:1b5917e9eb309b4b78e8d2b88b66e7f7bc1834ef</id>
<content type='text'>
Implement the device-authorization flow for both dialects (GitHub `token`
direct-poll; Codex `codex` poll→authorization-code→PKCE exchange), refresh_token
grant, Copilot secondary token exchange, JWT exp parsing, Codex account-id
extraction, and pure credential-building/refresh predicates. Adds a Presenter
hook for rendering the device-code prompt. Exported from public.zig.
</content>
</entry>
<entry>
<title>auth: HTTP helper + token storage (C3, C4)</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T17:55:59Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=fe2bfe443dfcf3251ebe39002325f604634dfa1f'/>
<id>urn:sha1:fe2bfe443dfcf3251ebe39002325f604634dfa1f</id>
<content type='text'>
Add libpanto http_helper (non-streaming request/response over the global
client, plus dotted-JSON-path readers) and token persistence in auth.zig
(load/save/delete TokenSet under an embedder-chosen auth dir, owner-only
files). Add $PANTO_HOME/auth to the panto_home layout.
</content>
</entry>
<entry>
<title>auth: clean-break named [auth.&lt;name&gt;] sessions + extra_headers</title>
<updated>2026-06-15T21:08:32Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-06-13T17:50:00Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/pantograph.git/commit/?id=deb4ce4a1a76869771bfcdd758455c49815f0d13'/>
<id>urn:sha1:deb4ce4a1a76869771bfcdd758455c49815f0d13</id>
<content type='text'>
Replace provider-level api_key/api_key_env_var with named auth sessions:
providers now reference `auth = "&lt;name&gt;"` and credentials live under
`[auth.&lt;name&gt;]`. Adds the libpanto auth type surface (AuthConfig, TokenSet,
ResolvedCredential), a Header type and provider `extra_headers`, and rewires
the CLI config loader (parse [auth.&lt;name&gt;], require auth=, providers always
survive, eager api_key resolution). Updates the shipped default config.
</content>
</entry>
</feed>
