| from __future__ import annotations |
|
|
| import os |
| import sys |
| from pathlib import Path |
|
|
|
|
| CLIENT_ID_DEFAULT = os.getenv("CHATGPT_LOCAL_CLIENT_ID") or "app_EMoamEEZ73f0CkXaXp7hrann" |
| OAUTH_ISSUER_DEFAULT = os.getenv("CHATGPT_LOCAL_ISSUER") or "https://auth.openai.com" |
| OAUTH_TOKEN_URL = f"{OAUTH_ISSUER_DEFAULT}/oauth/token" |
|
|
| CHATGPT_RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses" |
|
|
|
|
| def _read_prompt_text(filename: str) -> str | None: |
| candidates = [ |
| Path(__file__).parent.parent / filename, |
| Path(__file__).parent / filename, |
| Path(getattr(sys, "_MEIPASS", "")) / filename if getattr(sys, "_MEIPASS", None) else None, |
| Path.cwd() / filename, |
| ] |
| for candidate in candidates: |
| if not candidate: |
| continue |
| try: |
| if candidate.exists(): |
| content = candidate.read_text(encoding="utf-8") |
| if isinstance(content, str) and content.strip(): |
| return content |
| except Exception: |
| continue |
| return None |
|
|
|
|
| def read_base_instructions() -> str: |
| content = _read_prompt_text("prompt.md") |
| if content is None: |
| raise FileNotFoundError("Failed to read prompt.md; expected adjacent to package or CWD.") |
| return content |
|
|
|
|
| def read_gpt5_codex_instructions(fallback: str) -> str: |
| content = _read_prompt_text("prompt_gpt5_codex.md") |
| return content if isinstance(content, str) and content.strip() else fallback |
|
|
|
|
| BASE_INSTRUCTIONS = read_base_instructions() |
| GPT5_CODEX_INSTRUCTIONS = read_gpt5_codex_instructions(BASE_INSTRUCTIONS) |
|
|