codex-telegram 0.5.1__tar.gz → 0.5.3__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 (98) hide show
  1. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/PKG-INFO +34 -2
  2. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/README.md +28 -0
  3. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram/__init__.py +1 -1
  4. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram/cli.py +50 -0
  5. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/PKG-INFO +34 -2
  6. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/LICENSE +0 -0
  7. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/MANIFEST.in +0 -0
  8. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/TELEGRAM.md +0 -0
  9. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/WEB.md +0 -0
  10. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/app_runtime/__init__.py +0 -0
  11. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/app_runtime/bootstrap.py +0 -0
  12. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/app_runtime/telegram_app.py +0 -0
  13. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/app_runtime/web_server.py +0 -0
  14. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/__init__.py +0 -0
  15. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/callbacks.py +0 -0
  16. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/features_ui.py +0 -0
  17. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/handlers.py +0 -0
  18. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/keyboard.py +0 -0
  19. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/projects_ui.py +0 -0
  20. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/skills_ui.py +0 -0
  21. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/bot/thread_ui.py +0 -0
  22. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/__init__.py +0 -0
  23. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/approval_flow.py +0 -0
  24. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/approval_guardian.py +0 -0
  25. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/client.py +0 -0
  26. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/client_pool.py +0 -0
  27. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/collaboration_mode.py +0 -0
  28. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/__init__.py +0 -0
  29. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/common.py +0 -0
  30. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/context.py +0 -0
  31. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/contracts.py +0 -0
  32. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/core.py +0 -0
  33. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/projects.py +0 -0
  34. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/review.py +0 -0
  35. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/system.py +0 -0
  36. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/command_router/threads.py +0 -0
  37. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/commands.py +0 -0
  38. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/event_forwarding.py +0 -0
  39. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/events.py +0 -0
  40. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex/protocol.py +0 -0
  41. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/SOURCES.txt +0 -0
  42. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/dependency_links.txt +0 -0
  43. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/entry_points.txt +0 -0
  44. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/requires.txt +1 -1
  45. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/codex_telegram.egg-info/top_level.txt +0 -0
  46. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/conf.toml.example +0 -0
  47. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/main.py +0 -0
  48. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/models/__init__.py +0 -0
  49. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/models/state.py +0 -0
  50. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/models/telegram_bridge.py +0 -0
  51. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/models/thread.py +0 -0
  52. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/models/user.py +0 -0
  53. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/pyproject.toml +0 -0
  54. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/setup.cfg +0 -0
  55. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_approval_guardian.py +0 -0
  56. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_approval_policy.py +0 -0
  57. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_bootstrap_update_check.py +0 -0
  58. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_callbacks_results.py +0 -0
  59. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_cli_entrypoint.py +0 -0
  60. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_codex_client.py +0 -0
  61. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_codex_client_pool.py +0 -0
  62. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_command_router.py +0 -0
  63. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_guardian_config.py +0 -0
  64. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_handlers_results.py +0 -0
  65. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_keyboard.py +0 -0
  66. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_main_approval_flow.py +0 -0
  67. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_normalize.py +0 -0
  68. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_pypi_check.py +0 -0
  69. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_single_instance.py +0 -0
  70. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_telegram_bot_config.py +0 -0
  71. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_thread_history.py +0 -0
  72. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_web_runtime.py +0 -0
  73. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/tests/test_web_server_local_command.py +0 -0
  74. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/__init__.py +0 -0
  75. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/approval_policy.py +0 -0
  76. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/config.py +0 -0
  77. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/local_command.py +0 -0
  78. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/logger.py +0 -0
  79. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/normalize.py +0 -0
  80. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/pypi_check.py +0 -0
  81. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/single_instance.py +0 -0
  82. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/utils/web_config.py +0 -0
  83. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/__init__.py +0 -0
  84. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/dependencies.py +0 -0
  85. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/routes.py +0 -0
  86. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/runtime.py +0 -0
  87. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/server.py +0 -0
  88. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/assets/codex-telegram-icon-black.svg +0 -0
  89. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/assets/codex-telegram-icon-ivory.svg +0 -0
  90. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/assets/codex-telegram-login-image.png +0 -0
  91. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/assets/index-DIOICBNe.js +0 -0
  92. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/assets/index-DW1AcoLg.css +0 -0
  93. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/favicon.ico +0 -0
  94. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/static/dist/index.html +0 -0
  95. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/telegram_sync.py +0 -0
  96. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/telegram_thread_selection.py +0 -0
  97. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/thread_history.py +0 -0
  98. {codex-telegram-0.5.1 → codex_telegram-0.5.3}/web/workspace.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: codex-telegram
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
5
5
  Author: heungtae
6
6
  License: Apache License
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
218
218
  Requires-Python: >=3.11
219
219
  Description-Content-Type: text/markdown
220
220
  License-File: LICENSE
221
+ Requires-Dist: python-telegram-bot>=20.0
222
+ Requires-Dist: fastapi>=0.111.0
223
+ Requires-Dist: uvicorn>=0.30.0
224
+ Dynamic: license-file
221
225
 
222
226
  # Codex Telegram + Web
223
227
 
@@ -288,6 +292,34 @@ python -m venv .venv && source .venv/bin/activate
288
292
  pip install codex-telegram
289
293
  ```
290
294
 
295
+ ### Update
296
+
297
+ The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
298
+
299
+ ```text
300
+ ✨ Update available! 0.5.1 -> 0.5.2
301
+
302
+ Release notes: https://github.com/heungtae/codex-telegram/releases/latest
303
+
304
+ 1. Update now and exit (runs `pip install -U codex-telegram`)
305
+ 2. Skip this run
306
+ 3. Skip this version
307
+
308
+ Choose [1/2/3] (default: 2):
309
+ ```
310
+
311
+ You can also update manually:
312
+
313
+ ```bash
314
+ pip install -U codex-telegram
315
+ ```
316
+
317
+ Or with system packages flag:
318
+
319
+ ```bash
320
+ pip install -U codex-telegram --break-system-packages
321
+ ```
322
+
291
323
  ### 2. Configure
292
324
 
293
325
  Create `~/.config/codex-telegram/conf.toml`:
@@ -67,6 +67,34 @@ python -m venv .venv && source .venv/bin/activate
67
67
  pip install codex-telegram
68
68
  ```
69
69
 
70
+ ### Update
71
+
72
+ The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
73
+
74
+ ```text
75
+ ✨ Update available! 0.5.1 -> 0.5.2
76
+
77
+ Release notes: https://github.com/heungtae/codex-telegram/releases/latest
78
+
79
+ 1. Update now and exit (runs `pip install -U codex-telegram`)
80
+ 2. Skip this run
81
+ 3. Skip this version
82
+
83
+ Choose [1/2/3] (default: 2):
84
+ ```
85
+
86
+ You can also update manually:
87
+
88
+ ```bash
89
+ pip install -U codex-telegram
90
+ ```
91
+
92
+ Or with system packages flag:
93
+
94
+ ```bash
95
+ pip install -U codex-telegram --break-system-packages
96
+ ```
97
+
70
98
  ### 2. Configure
71
99
 
72
100
  Create `~/.config/codex-telegram/conf.toml`:
@@ -1,3 +1,3 @@
1
1
  """codex-telegram package."""
2
2
 
3
- __version__ = "0.5.1"
3
+ __version__ = "0.5.3"
@@ -1,7 +1,10 @@
1
1
  import argparse
2
+ import json
2
3
  import logging
3
4
  import os
4
5
  import sys
6
+ import urllib.error
7
+ import urllib.request
5
8
  from importlib.util import module_from_spec, spec_from_file_location
6
9
  from pathlib import Path
7
10
  from types import ModuleType
@@ -13,6 +16,44 @@ def _get_version() -> str:
13
16
  return __version__
14
17
 
15
18
 
19
+ def _check_for_update(current_version: str) -> str | None:
20
+ """Check PyPI for the latest version. Returns latest version if newer, else None."""
21
+ url = "https://pypi.org/pypi/codex-telegram/json"
22
+ try:
23
+ req = urllib.request.Request(url, headers={"User-Agent": "codex-telegram"})
24
+ with urllib.request.urlopen(req, timeout=3) as resp:
25
+ data = json.load(resp)
26
+ latest = data["info"]["version"]
27
+ if _version_gt(latest, current_version):
28
+ return latest
29
+ except (urllib.error.URLError, json.JSONDecodeError, KeyError, TimeoutError):
30
+ pass
31
+ return None
32
+
33
+
34
+ def _version_gt(v1: str, v2: str) -> bool:
35
+ """Compare version strings (simple tuple comparison)."""
36
+ def parse(v: str):
37
+ return tuple(int(x) for x in v.split(".") if x.isdigit())
38
+ return parse(v1) > parse(v2)
39
+
40
+
41
+ def _prompt_update(latest: str) -> bool:
42
+ """Prompt user to update. Returns True if user chooses to update."""
43
+ print(f"\n✨ Update available! {_get_version()} -> {latest}")
44
+ print(" Release notes: https://github.com/heungtae/codex-telegram/releases/latest")
45
+ print()
46
+ print(" 1. Update now and exit (runs `pip install -U codex-telegram`)")
47
+ print(" 2. Skip this run")
48
+ print(" 3. Skip this version")
49
+ print()
50
+ try:
51
+ choice = input(" Choose [1/2/3] (default: 2): ").strip() or "2"
52
+ except (EOFError, KeyboardInterrupt):
53
+ return False
54
+ return choice == "1"
55
+
56
+
16
57
  def _load_root_main_module() -> ModuleType:
17
58
  root_main = Path(__file__).resolve().parent.parent / "main.py"
18
59
  spec = spec_from_file_location("codex_telegram_root_main", root_main)
@@ -24,6 +65,15 @@ def _load_root_main_module() -> ModuleType:
24
65
 
25
66
 
26
67
  def main() -> int:
68
+ # Check for updates (skip if --version or --validate-config or --debug)
69
+ if "--version" not in sys.argv and "--validate-config" not in sys.argv and "--debug" not in sys.argv:
70
+ current = _get_version()
71
+ latest = _check_for_update(current)
72
+ if latest and _prompt_update(latest):
73
+ print("Running: pip install -U codex-telegram")
74
+ os.execvpe(sys.executable, [sys.executable, "-m", "pip", "install", "-U", "codex-telegram"], os.environ)
75
+ return 0
76
+
27
77
  parser = argparse.ArgumentParser(
28
78
  prog="codex-telegram",
29
79
  description="Codex Telegram Bot - Bridges Codex App Server with Telegram and Web UI.",
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: codex-telegram
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Bridge for controlling the Codex App Server from Telegram and Web UI
5
5
  Author: heungtae
6
6
  License: Apache License
@@ -218,6 +218,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
218
218
  Requires-Python: >=3.11
219
219
  Description-Content-Type: text/markdown
220
220
  License-File: LICENSE
221
+ Requires-Dist: python-telegram-bot>=20.0
222
+ Requires-Dist: fastapi>=0.111.0
223
+ Requires-Dist: uvicorn>=0.30.0
224
+ Dynamic: license-file
221
225
 
222
226
  # Codex Telegram + Web
223
227
 
@@ -288,6 +292,34 @@ python -m venv .venv && source .venv/bin/activate
288
292
  pip install codex-telegram
289
293
  ```
290
294
 
295
+ ### Update
296
+
297
+ The CLI checks for updates automatically on startup. When a newer version is available on PyPI, you'll see:
298
+
299
+ ```text
300
+ ✨ Update available! 0.5.1 -> 0.5.2
301
+
302
+ Release notes: https://github.com/heungtae/codex-telegram/releases/latest
303
+
304
+ 1. Update now and exit (runs `pip install -U codex-telegram`)
305
+ 2. Skip this run
306
+ 3. Skip this version
307
+
308
+ Choose [1/2/3] (default: 2):
309
+ ```
310
+
311
+ You can also update manually:
312
+
313
+ ```bash
314
+ pip install -U codex-telegram
315
+ ```
316
+
317
+ Or with system packages flag:
318
+
319
+ ```bash
320
+ pip install -U codex-telegram --break-system-packages
321
+ ```
322
+
291
323
  ### 2. Configure
292
324
 
293
325
  Create `~/.config/codex-telegram/conf.toml`:
File without changes
File without changes
@@ -1,3 +1,3 @@
1
- fastapi>=0.111.0
2
1
  python-telegram-bot>=20.0
2
+ fastapi>=0.111.0
3
3
  uvicorn>=0.30.0
File without changes
File without changes