v1.9.40: add Codex integration — skill setup, deploy, GUI buttons
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
Setup tab — one-click installation for Claude Code integration.
|
||||
Setup tab — one-click installation for local AI agent integration.
|
||||
Includes configuration path management and backup/restore.
|
||||
"""
|
||||
|
||||
@@ -8,7 +8,14 @@ import threading
|
||||
from datetime import datetime
|
||||
from tkinter import filedialog, messagebox
|
||||
import customtkinter as ctk
|
||||
from core.claude_setup import check_status, install_all, install_ssh_script, install_skill, generate_ssh_key
|
||||
from core.claude_setup import (
|
||||
check_status,
|
||||
generate_ssh_key,
|
||||
install_all,
|
||||
install_claude_skill,
|
||||
install_codex_skill,
|
||||
install_ssh_script,
|
||||
)
|
||||
from core.i18n import t
|
||||
from core.icons import icon_text, make_icon_button
|
||||
from core.logger import log
|
||||
@@ -25,13 +32,13 @@ class SetupTab(ctk.CTkFrame):
|
||||
|
||||
# Header
|
||||
self.header_label = ctk.CTkLabel(
|
||||
self._scroll, text=t("claude_integration"),
|
||||
self._scroll, text=t("agent_integration"),
|
||||
font=ctk.CTkFont(size=20, weight="bold")
|
||||
)
|
||||
self.header_label.pack(padx=20, pady=(20, 5))
|
||||
|
||||
self.desc_label = ctk.CTkLabel(
|
||||
self._scroll, text=t("claude_desc"),
|
||||
self._scroll, text=t("agent_desc"),
|
||||
text_color="#9ca3af", justify="center"
|
||||
)
|
||||
self.desc_label.pack(padx=20, pady=(0, 15))
|
||||
@@ -53,7 +60,9 @@ class SetupTab(ctk.CTkFrame):
|
||||
("servers_json", "status_servers_json"),
|
||||
("ssh_script", "status_ssh_script"),
|
||||
("encryption", "status_encryption"),
|
||||
("skill_installed", "status_skill"),
|
||||
("claude_skill_installed", "status_claude_skill"),
|
||||
("codex_skill_installed", "status_codex_skill"),
|
||||
("codex_wrapper_installed", "status_codex_wrapper"),
|
||||
("ssh_key_exists", "status_ssh_key"),
|
||||
]
|
||||
for key, i18n_key in status_items:
|
||||
@@ -82,17 +91,40 @@ class SetupTab(ctk.CTkFrame):
|
||||
ind_frame = ctk.CTkFrame(btn_frame, fg_color="transparent")
|
||||
ind_frame.pack(fill="x")
|
||||
|
||||
self.ssh_py_btn = make_icon_button(ind_frame, "confirm", t("install_ssh_py"), width=110, fg_color="#6b7280",
|
||||
command=self._install_script)
|
||||
top_btn_row = ctk.CTkFrame(ind_frame, fg_color="transparent")
|
||||
top_btn_row.pack(fill="x", pady=(0, 5))
|
||||
|
||||
self.ssh_py_btn = make_icon_button(
|
||||
top_btn_row, "confirm", t("install_ssh_py"), width=120, fg_color="#6b7280",
|
||||
command=self._install_script
|
||||
)
|
||||
self.ssh_py_btn.pack(side="left", padx=(0, 5))
|
||||
self.skill_btn = make_icon_button(ind_frame, "confirm", t("install_skill"), width=110, fg_color="#6b7280",
|
||||
command=self._install_skill)
|
||||
self.skill_btn.pack(side="left", padx=5)
|
||||
self.ssh_key_btn = make_icon_button(ind_frame, "confirm", t("install_ssh_key"), width=110, fg_color="#6b7280",
|
||||
command=self._gen_key)
|
||||
self.ssh_key_btn.pack(side="left", padx=5)
|
||||
self.refresh_btn = make_icon_button(ind_frame, "refresh", t("refresh"), width=90, fg_color="#3b82f6",
|
||||
command=self._refresh_status)
|
||||
|
||||
self.claude_skill_btn = make_icon_button(
|
||||
top_btn_row, "confirm", t("install_claude_skill"), width=130, fg_color="#6b7280",
|
||||
command=self._install_claude_skill
|
||||
)
|
||||
self.claude_skill_btn.pack(side="left", padx=5)
|
||||
|
||||
self.codex_skill_btn = make_icon_button(
|
||||
top_btn_row, "confirm", t("install_codex_skill"), width=130, fg_color="#6b7280",
|
||||
command=self._install_codex_skill
|
||||
)
|
||||
self.codex_skill_btn.pack(side="left", padx=5)
|
||||
|
||||
bottom_btn_row = ctk.CTkFrame(ind_frame, fg_color="transparent")
|
||||
bottom_btn_row.pack(fill="x")
|
||||
|
||||
self.ssh_key_btn = make_icon_button(
|
||||
bottom_btn_row, "confirm", t("install_ssh_key"), width=120, fg_color="#6b7280",
|
||||
command=self._gen_key
|
||||
)
|
||||
self.ssh_key_btn.pack(side="left", padx=(0, 5))
|
||||
|
||||
self.refresh_btn = make_icon_button(
|
||||
bottom_btn_row, "refresh", t("refresh"), width=90, fg_color="#3b82f6",
|
||||
command=self._refresh_status
|
||||
)
|
||||
self.refresh_btn.pack(side="right")
|
||||
|
||||
# ── Monitoring section ─────────────────────────
|
||||
@@ -328,8 +360,18 @@ class SetupTab(ctk.CTkFrame):
|
||||
self._log(msg)
|
||||
self._refresh_status()
|
||||
|
||||
def _install_claude_skill(self):
|
||||
msg = install_claude_skill()
|
||||
self._log(msg)
|
||||
self._refresh_status()
|
||||
|
||||
def _install_codex_skill(self):
|
||||
msg = install_codex_skill()
|
||||
self._log(msg)
|
||||
self._refresh_status()
|
||||
|
||||
def _install_skill(self):
|
||||
msg = install_skill()
|
||||
msg = install_claude_skill()
|
||||
self._log(msg)
|
||||
self._refresh_status()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user