[codex] 修复 Coding Agents 的 Codex 启动和代理隔离 (#1123)

* feat: add coding agent install status

* chore: add latest claude opus model preset

* feat: add coding agent config editing

* Add scoped coding agent launch proxy

* Add Codex proxy plan

* fix coding agents codex launch proxy

* fix codex catalog context test

---------

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
ekko
2026-05-29 19:06:54 +08:00
committed by GitHub
parent 717f577380
commit 285f623d6f
20 changed files with 5158 additions and 4 deletions
@@ -12,7 +12,7 @@ import type { ITheme } from "@xterm/xterm";
const { t } = useI18n();
const message = useMessage();
const props = defineProps<{ visible?: boolean }>();
const props = defineProps<{ visible?: boolean; initialCommand?: string }>();
// ─── Terminal themes ────────────────────────────────────────────
@@ -106,6 +106,7 @@ const MAX_RECONNECT_ATTEMPTS = 3;
let touchScrollLastY: number | null = null;
let touchScrollRemainder = 0;
const TOUCH_SCROLL_LINE_PX = 18;
const initialCommandSent = ref(false);
// ─── Computed ──────────────────────────────────────────────────
@@ -224,6 +225,7 @@ function handleControl(msg: any) {
exited: false,
});
switchSession(msg.id);
runInitialCommand();
break;
case "exited": {
@@ -251,6 +253,15 @@ function createSession() {
send({ type: "create" });
}
function runInitialCommand() {
const command = props.initialCommand?.trim();
if (!command || initialCommandSent.value) return;
initialCommandSent.value = true;
setTimeout(() => {
send(`${command}\r`);
}, 100);
}
function getOrCreateTerm(id: string): { term: Terminal; fitAddon: FitAddon } {
let entry = termMap.get(id);
if (!entry) {
@@ -570,8 +581,11 @@ onUnmounted(() => {
.terminal-panel-drawer {
display: flex;
height: 100%;
width: 100%;
min-height: 0;
min-width: 0;
position: relative;
overflow: hidden;
}
.sidebar-overlay {
@@ -764,9 +778,11 @@ onUnmounted(() => {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 12px 16px;
border-bottom: 1px solid $border-color;
flex-shrink: 0;
min-width: 0;
}
.header-session-title {
@@ -783,6 +799,7 @@ onUnmounted(() => {
align-items: center;
gap: 8px;
flex-shrink: 0;
min-width: 0;
}
.theme-select {
@@ -800,12 +817,15 @@ onUnmounted(() => {
margin: 8px;
overflow: hidden;
min-height: 0;
min-width: 0;
display: flex;
flex-direction: column;
}
.terminal-xterm {
flex: 1;
min-height: 0;
min-width: 0;
border-radius: $radius-md;
overflow: hidden;
border: 1px solid $border-color;
@@ -842,19 +862,46 @@ onUnmounted(() => {
@media (max-width: $breakpoint-mobile) {
.terminal-panel-drawer {
height: calc(100 * var(--vh));
max-height: calc(100 * var(--vh));
height: 100%;
max-height: 100%;
}
.terminal-main {
min-height: 0;
min-width: 0;
}
.terminal-header {
padding: 8px;
gap: 6px;
}
.header-session-title {
display: none;
}
.header-actions {
width: 100%;
justify-content: flex-end;
gap: 6px;
}
.theme-select {
width: 96px;
}
.terminal-container {
margin-bottom: calc(8px + env(safe-area-inset-bottom, 0px));
margin: 6px;
margin-bottom: calc(6px + env(safe-area-inset-bottom, 0px));
}
.terminal-xterm {
border-radius: $radius-sm;
:deep(.xterm) {
padding: 6px;
}
:deep(.xterm-viewport),
:deep(.xterm-scrollable-element) {
touch-action: pan-y;
@@ -263,6 +263,14 @@ function openChangelog() {
</svg>
</div>
<div v-show="!isGroupCollapsed('tools')" class="nav-group-items">
<RouteLinkItem class="nav-item" :to="{ name: 'hermes.codingAgents' }" :active="selectedKey === 'hermes.codingAgents'">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<polyline points="16 18 22 12 16 6" />
<polyline points="8 6 2 12 8 18" />
<line x1="12" y1="20" x2="14" y2="4" />
</svg>
<span>{{ t("sidebar.codingAgents") }}</span>
</RouteLinkItem>
<RouteLinkItem v-if="isSuperAdmin && !isVersionPreview" class="nav-item" :to="{ name: 'hermes.versionPreview' }" :active="selectedKey === 'hermes.versionPreview'">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z" />