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:
@@ -23,6 +23,22 @@ model_provider = ""
|
||||
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 = {
|
||||
"Custom": {
|
||||
"backend_type": "openai-compat",
|
||||
@@ -432,9 +448,12 @@ class LauncherWin(Gtk.Window):
|
||||
# header row
|
||||
hdr = Gtk.Box(spacing=8)
|
||||
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)
|
||||
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.connect("clicked", lambda b: self._open_mgr())
|
||||
hdr.pack_end(mgr_btn, False, False, 0)
|
||||
@@ -697,6 +716,36 @@ class LauncherWin(Gtk.Window):
|
||||
d.run()
|
||||
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 ───────────────────────────────────────────────────
|
||||
|
||||
def _launch(self, target):
|
||||
|
||||
Reference in New Issue
Block a user