zeno-cli 0.3.4__tar.gz → 0.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/PKG-INFO +1 -1
  2. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/pyproject.toml +1 -1
  3. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/_hooks/cc_bridge.py +36 -4
  4. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/.gitignore +0 -0
  5. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/README.md +0 -0
  6. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/__init__.py +0 -0
  7. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/_common.py +0 -0
  8. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/anthropic.py +0 -0
  9. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/claude_code.py +0 -0
  10. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/crewai.py +0 -0
  11. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/langgraph.py +0 -0
  12. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_adapters/openai.py +0 -0
  13. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_core/__init__.py +0 -0
  14. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_core/analytics.py +0 -0
  15. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_core/rtlx_s.py +0 -0
  16. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_core/streak.py +0 -0
  17. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_core/tlx_s.py +0 -0
  18. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/__init__.py +0 -0
  19. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_generated/__init__.py +0 -0
  20. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_generated/client.py +0 -0
  21. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/env.py +0 -0
  22. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/script.py.mako +0 -0
  23. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/versions/0001_initial.py +0 -0
  24. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/versions/0002_cognition_samples.py +0 -0
  25. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/versions/0003_cognition_drivers.py +0 -0
  26. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic/versions/0004_transcript_intelligence.py +0 -0
  27. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_migrations/alembic.ini +0 -0
  28. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/_runtime.py +0 -0
  29. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/__init__.py +0 -0
  30. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/anthropic.py +0 -0
  31. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/claude_code.py +0 -0
  32. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/crewai.py +0 -0
  33. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/langgraph.py +0 -0
  34. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/adapters/openai.py +0 -0
  35. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/auth.py +0 -0
  36. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/client.py +0 -0
  37. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/config.py +0 -0
  38. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/daemon.py +0 -0
  39. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/privacy.py +0 -0
  40. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/session.py +0 -0
  41. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/storage.py +0 -0
  42. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_sdk/types/__init__.py +0 -0
  43. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/__init__.py +0 -0
  44. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/analytics.py +0 -0
  45. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/compression.py +0 -0
  46. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/ingest.py +0 -0
  47. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/model.py +0 -0
  48. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/parsers/__init__.py +0 -0
  49. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/parsers/claude_code.py +0 -0
  50. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/parsers/codex.py +0 -0
  51. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/parsers/cursor.py +0 -0
  52. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/prices.py +0 -0
  53. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/schema.py +0 -0
  54. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/signals.py +0 -0
  55. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/_vendor_build/zeno_session_intel/taxonomy.py +0 -0
  56. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/data/outreach_suppression.txt +0 -0
  57. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/hatch_build.py +0 -0
  58. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/scripts/install-smoke.sh +0 -0
  59. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/__init__.py +0 -0
  60. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/doctor.py +0 -0
  61. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hook_install.py +0 -0
  62. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hud/__init__.py +0 -0
  63. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hud/hud_install.py +0 -0
  64. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hud/zeno_attention.py +0 -0
  65. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hud/zeno_cognition.py +0 -0
  66. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/hud/zeno_hud.py +0 -0
  67. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/interview_invites.py +0 -0
  68. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/login.py +0 -0
  69. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/main.py +0 -0
  70. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/onboard.py +0 -0
  71. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/outreach.py +0 -0
  72. {zeno_cli-0.3.4 → zeno_cli-0.3.5}/src/zeno_cli/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zeno-cli
3
- Version: 0.3.4
3
+ Version: 0.3.5
4
4
  Summary: Zeno CLI - measure the supervision cost of AI-assisted work
5
5
  Project-URL: Homepage, https://zeno.center
6
6
  Project-URL: Repository, https://github.com/Marwan01/zeno
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "zeno-cli"
3
- version = "0.3.4"
3
+ version = "0.3.5"
4
4
  description = "Zeno CLI - measure the supervision cost of AI-assisted work"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -194,6 +194,31 @@ def _api_base_url() -> str:
194
194
  return (os.environ.get("ZENO_API_BASE_URL") or DEFAULT_API_BASE_URL).rstrip("/")
195
195
 
196
196
 
197
+ def _api_token() -> str | None:
198
+ """Bearer token for the capture push, when one is available.
199
+
200
+ Checks the explicit env var first (matches the SDK client's ZENO_API_TOKEN
201
+ precedence), then the keyring slot `zeno login` writes (service "zeno-sdk",
202
+ key "clerk_jwt"). The keyring lookup is best-effort: keyring is an optional
203
+ dependency and may be absent under the system python the hook runs on.
204
+ Returns None on the tailnet Mini, where identity comes from a header the
205
+ `tailscale serve` proxy injects rather than a bearer token - so the push
206
+ stays header-authed there and bearer-authed against a public API.
207
+ """
208
+ tok = os.environ.get("ZENO_API_TOKEN")
209
+ if tok and tok.strip():
210
+ return tok.strip()
211
+ try:
212
+ import keyring # noqa: PLC0415
213
+
214
+ stored = keyring.get_password("zeno-sdk", "clerk_jwt")
215
+ if stored and stored.strip():
216
+ return stored.strip()
217
+ except Exception:
218
+ return None
219
+ return None
220
+
221
+
197
222
  def _sync_timeout_s() -> float:
198
223
  try:
199
224
  return float(os.environ.get("ZENO_SYNC_TIMEOUT_S") or SYNC_TIMEOUT_S)
@@ -259,14 +284,21 @@ def _post_ingest(body: dict, timeout_s: float) -> bool:
259
284
  raises (all exceptions -> False). urllib + an explicit socket timeout only."""
260
285
  url = _api_base_url() + SYNC_PATH
261
286
  data = json.dumps(body).encode("utf-8")
287
+ headers = {
288
+ "Content-Type": "application/json",
289
+ "Idempotency-Key": _idempotency_key(body),
290
+ }
291
+ # Attach the Clerk bearer token when one is available so the push authenticates
292
+ # against a public API (Cloud Run). Absent it (tailnet Mini), the push relies on
293
+ # the identity header the `tailscale serve` proxy injects - unchanged behavior.
294
+ token = _api_token()
295
+ if token:
296
+ headers["Authorization"] = "Bearer " + token
262
297
  req = urllib.request.Request(
263
298
  url,
264
299
  data=data,
265
300
  method="POST",
266
- headers={
267
- "Content-Type": "application/json",
268
- "Idempotency-Key": _idempotency_key(body),
269
- },
301
+ headers=headers,
270
302
  )
271
303
  try:
272
304
  with urllib.request.urlopen(req, timeout=timeout_s) as resp: # noqa: S310 (trusted tailnet)
File without changes
File without changes
File without changes
File without changes
File without changes