Files
codex-app-server/cloud/console-react/src/sections/EnvContextPanel.tsx
T
host ebc5624893 console: React 生产级重写(左列表 + 中对话 + 右详情)
旧单页 console.html 换成 Vite + React + TypeScript 单文件构建产物
(309525 字节,sha 90345ec8…,重建字节一致),源码在
cloud/console-react/,改页面只改 src 再 npm run build:console,
产物不手改。布局:左侧列表(模块导航 + 任务列表)、中间标准对话
(实时链路时间线 + 继续会话聊天框,共用 Chat 组件)、右侧详情
(元数据、操作、评审、审批、协调子任务、子代理、线程)。
API 与后端语义未改,key 只存浏览器 localStorage。
6 个 console 标记单测随实现改名更新(意图不变:壳确实调了
这些接口、turn 信息仍在详情里、旧 goal 输入仍不存在);
P1 标记单测未动且通过。
2026-10-29 06:32:38 +08:00

28 lines
1.1 KiB
TypeScript

import { useState } from "react";
import { useConsole } from "../context";
import { Card, Bar } from "../components/ui";
// Right-panel context for the Environments view: repo binding + counts.
// Previously embedded in the environment card; the centre now stays the
// environment list/create.
export default function EnvContextPanel() {
const ctx = useConsole();
const [repoSelect, setRepoSelect] = useState("");
return (
<Card title="仓库与环境上下文">
<div className="muted">{ctx.envRepoLine || "先选项目"}</div>
<div className="muted">{ctx.envCount}</div>
{ctx.envRepoBar ? (
<Bar>
<select aria-label="补仓库" value={repoSelect} onChange={(e) => setRepoSelect(e.target.value)}>
<option value="">(从 GitHub App 安装仓库里选)</option>
{ctx.githubRepos.map((r) => <option key={r.clone_url} value={r.clone_url}>{r.repo_full_name}</option>)}
</select>
<button onClick={() => void ctx.saveEnvRepo(repoSelect)}>保存仓库</button>
</Bar>
) : null}
<span className="muted">{ctx.envRepoMsg}</span>
</Card>
);
}