Add in-app changelog viewer and repo CHANGELOG.md

- Added CHANGELOG constant to launcher with version history
- Added 'Changelog' button to header bar (opens formatted dialog)
- Title bar now shows version number (v2.0.0)
- Added CHANGELOG.md to repo root
- Rebuilt .deb with latest sources
This commit is contained in:
admin
2026-05-19 15:24:49 +04:00
Unverified
parent c70c506452
commit 50ba552635
3 changed files with 65 additions and 1 deletions

15
CHANGELOG.md Normal file
View File

@@ -0,0 +1,15 @@
# Changelog
## v2.0.0 (2026-05-19)
- Initial release: multi-provider Codex Launcher
- Translation proxy: Responses API to Chat Completions + Anthropic Messages
- GTK endpoint manager with 10+ provider presets
- Codex Default mode (built-in OAuth, zero config)
- Browser UA injection for Cloudflare-protected providers (OpenCode)
- Streaming SSE, tool calls, reasoning content support
- Profile backup/import, model auto-fetch, bulk import
- Refresh Models in background thread
- URL normalization to prevent double-path bugs
- Config backup/restore around sessions
- .deb installer package

Binary file not shown.

View File

@@ -23,6 +23,22 @@ model_provider = ""
model_catalog_json = "" model_catalog_json = ""
""" """
CHANGELOG = [
("2.0.0", "2026-05-19", [
"Initial release: multi-provider Codex Launcher",
"Translation proxy: Responses API to Chat Completions + Anthropic Messages",
"GTK endpoint manager with 10+ provider presets",
"Codex Default mode (built-in OAuth, zero config)",
"Browser UA injection for Cloudflare-protected providers (OpenCode)",
"Streaming SSE, tool calls, reasoning content support",
"Profile backup/import, model auto-fetch, bulk import",
"Refresh Models in background thread",
"URL normalization to prevent double-path bugs",
"Config backup/restore around sessions",
".deb installer package",
]),
]
PROVIDER_PRESETS = { PROVIDER_PRESETS = {
"Custom": { "Custom": {
"backend_type": "openai-compat", "backend_type": "openai-compat",
@@ -432,9 +448,12 @@ class LauncherWin(Gtk.Window):
# header row # header row
hdr = Gtk.Box(spacing=8) hdr = Gtk.Box(spacing=8)
vbox.pack_start(hdr, False, False, 0) vbox.pack_start(hdr, False, False, 0)
lbl = Gtk.Label(label="<b>Codex Launcher</b>") lbl = Gtk.Label(label="<b>Codex Launcher v2.0.0</b>")
lbl.set_use_markup(True) lbl.set_use_markup(True)
hdr.pack_start(lbl, False, False, 0) hdr.pack_start(lbl, False, False, 0)
changelog_btn = Gtk.Button(label="Changelog")
changelog_btn.connect("clicked", lambda b: self._show_changelog())
hdr.pack_end(changelog_btn, False, False, 0)
mgr_btn = Gtk.Button(label="Manage Endpoints") mgr_btn = Gtk.Button(label="Manage Endpoints")
mgr_btn.connect("clicked", lambda b: self._open_mgr()) mgr_btn.connect("clicked", lambda b: self._open_mgr())
hdr.pack_end(mgr_btn, False, False, 0) hdr.pack_end(mgr_btn, False, False, 0)
@@ -697,6 +716,36 @@ class LauncherWin(Gtk.Window):
d.run() d.run()
d.destroy() d.destroy()
def _show_changelog(self):
d = Gtk.Dialog(title="Changelog", transient_for=self, modal=True)
d.set_default_size(520, 480)
d.add_button("Close", Gtk.ResponseType.CLOSE)
area = d.get_content_area()
area.set_margin_start(12)
area.set_margin_end(12)
area.set_margin_top(12)
area.set_margin_bottom(12)
sw = Gtk.ScrolledWindow()
sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
area.pack_start(sw, True, True, 0)
buf = Gtk.TextBuffer()
tv = Gtk.TextView(buffer=buf)
tv.set_editable(False)
tv.set_cursor_visible(False)
tv.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
sw.add(tv)
lines = []
for ver, date, items in CHANGELOG:
lines.append(f"<b>v{ver}</b> ({date})")
for item in items:
lines.append(f" \u2022 {item}")
lines.append("")
txt = "\n".join(lines).strip()
buf.insert(buf.get_end_iter(), txt)
d.show_all()
d.run()
d.destroy()
# ── launch ─────────────────────────────────────────────────── # ── launch ───────────────────────────────────────────────────
def _launch(self, target): def _launch(self, target):