feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(sdk): add runtime token auth - #215

Merged
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth
May 15, 2026
Merged

feat(sdk): add runtime token auth#215
abhinav-galileo merged 10 commits into
mainfrom
abhi/python-sdk-runtime-auth

Conversation

@abhinav-galileo

@abhinav-galileoabhinav-galileo commented May 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add Python SDK runtime auth modes: auto, none, api_key, and jwt.
  • Exchange target-bound runtime tokens for target-bearing evaluation requests.
  • Cache runtime tokens per target, refresh before expiry, and retry once after a rejected runtime JWT.
  • Keep no-target, no-auth, and API-key evaluation paths unchanged.
  • Make the API-key header name configurable.

Stack

Testing

  • make prepush

@abhinav-galileoabhinav-galileo changed the title feat(sdk-python): add runtime token authfeat(sdk): add runtime token authMay 7, 2026
@codecov

codecovBot commented May 7, 2026

Copy link
Copy Markdown

@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 4fffcf2 to 99c86cfCompareMay 7, 2026 17:41
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 09cb289 to 19fa65cCompareMay 7, 2026 18:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from d52fb6b to 1485279CompareMay 8, 2026 11:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 259397b to 097b42dCompareMay 8, 2026 15:28
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 73bd51c to 3894dd0CompareMay 8, 2026 16:07
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from af54543 to 479ca86CompareMay 8, 2026 16:57
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from d4b8a66 to a9796b6CompareMay 8, 2026 16:58
@abhinav-galileo
abhinav-galileo marked this pull request as ready for review May 8, 2026 18:36
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from e934f08 to df2bb43CompareMay 11, 2026 10:33
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from dce333a to 69aaa49CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from df2bb43 to 527a0a9CompareMay 11, 2026 12:00
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 69aaa49 to 4b778e3CompareMay 12, 2026 08:23
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 585f6ba to 9b84888CompareMay 12, 2026 10:24
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from aa0bcce to 071a63aCompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 9b84888 to 26770a3CompareMay 14, 2026 18:22
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 071a63a to fe8488eCompareMay 14, 2026 18:32
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 3 times, most recently from 31f40bf to 4e0e0d1CompareMay 15, 2026 09:12
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from ec82ad3 to c67ea44CompareMay 15, 2026 09:18
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch 2 times, most recently from 6941db1 to 83f9c2bCompareMay 15, 2026 11:35
abhinav-galileo added a commit that referenced this pull request May 15, 2026
## Summary
- Move `/controls` and `/control-templates/render` onto operation-based
auth.
- Keep `GET /controls/schema` public because it returns static metadata.
- Require `CONTROLS_CREATE` for validate and render because both use the
authoring path.
- Preserve no-auth deployment mode.
## Behavior Change
- `POST /controls/validate` and `POST /control-templates/render` now
require create access under the default header provider.
## Testing
- `make prepush` on the stacked branch in #215.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 83f9c2b to 978d4c7CompareMay 15, 2026 11:43
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/runtime-auth-namespace-cutover branch from 1272698 to 8163931CompareMay 15, 2026 11:46
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 978d4c7 to 00ce671CompareMay 15, 2026 11:47
Base automatically changed from abhi/runtime-auth-namespace-cutover to mainMay 15, 2026 12:08
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 00ce671 to 905d126CompareMay 15, 2026 12:18
Exchange target-bound runtime tokens for evaluation requests when configured, cache them per target, and retry once after a 401.
Keep no-auth and API-key runtime flows on the existing request-auth path when token exchange is unavailable or disabled.
Default stays X-API-Key; pass api_key_header=... or set
AGENT_CONTROL_API_KEY_HEADER to override when the upstream auth
expects a different header.
@abhinav-galileo
abhinav-galileoforce-pushed the abhi/python-sdk-runtime-auth branch from 905d126 to 3c958fbCompareMay 15, 2026 14:38
@abhinav-galileo
abhinav-galileo merged commit 6cc0f38 into mainMay 15, 2026
6 checks passed
@abhinav-galileo
abhinav-galileo deleted the abhi/python-sdk-runtime-auth branch May 15, 2026 15:42
galileo-automation pushed a commit that referenced this pull request May 28, 2026
## [2.6.0](ts-sdk-v2.5.0...ts-sdk-v2.6.0) (2026-05-28)
### Features
* **evaluators:** add new lluna client ([#213](#213)) ([f65beb9](f65beb9))
* **sdk:** add otel support ([#177](#177)) ([9530368](9530368))
* **sdk:** add runtime token auth ([#215](#215)) ([6cc0f38](6cc0f38))
* **server:** add control clone-and-bind endpoint ([#229](#229)) ([1728bf9](1728bf9))
* **server:** add runtime auth and namespace scoping ([#214](#214)) ([56e44fe](56e44fe))
* **server:** allow host-owned logging setup ([#227](#227)) ([c0fd159](c0fd159))
* **server:** bundle migrations in wheel and add agent-control-migrate ([#209](#209)) ([8c5c35e](8c5c35e))
* **server:** migrate controls routes to auth framework ([#212](#212)) ([764bd4b](764bd4b))
### Bug Fixes
* **examples:** declare local SDK workspace deps ([#222](#222)) ([d22aa1d](d22aa1d))
* **sdk:** Get trace context from provider ([#211](#211)) ([1efe30f](1efe30f))
* **sdk-ts:** normalize generated client ([#231](#231)) ([1c097d2](1c097d2))
* **server:** make observability migration retry-safe ([#226](#226)) ([b9dd00d](b9dd00d))
* **server:** prevent migration lock transactions ([#224](#224)) ([e65a2f4](e65a2f4))
* **server:** scope auth upstream CA to HTTP provider ([#232](#232)) ([7a0ce21](7a0ce21))
* **ui:** fix editing of controls in the UI ([#218](#218)) ([981e33d](981e33d)), closes [#Risk](https://github.com/agentcontrol/agent-control/issues/Risk)
@galileo-automation

Copy link
Copy Markdown
Collaborator

🎉 This PR is included in version 2.6.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@abhinav-galileo@galileo-automation@namrataghadi-galileo