// 真实数据版 App:从本地 daemon 的 REST 拉取、订阅 WS 增量刷新, // 通过 src/adapt.js 映射成各 surface 期望的形状(替代 window.MAESTRO_MOCK)。 import { createRoot } from 'react-dom/client'; import { api, subscribeEvents } from './api.js'; import { adaptProject, buildTaskTree, adaptApproval, adaptEvent, adaptQuota, deriveGlobal, deriveAgentSummary, adaptActiveAgents, } from './adapt.js'; const { Toast } = window.MaestroDesignSystem_a6a290; const USER = { name: 'local', handle: '@local', plan: 'Claude Code', initial: 'L', hue: 200 }; // 新建项目模态(design 无现成 surface,用 DS 组件就地拼装)。标签 zh/en 自含。 function NewProjectModal({ t, lang, onCreate, onClose, defaultAutonomy }) { const { Button, Input, Select } = window.MaestroDesignSystem_a6a290; const L = lang === 'zh' ? { title: '新建项目', name: '项目名', repo: '仓库路径', branch: '默认分支', mode: '工作模式', namePh: 'my-app', repoPh: '/Users/you/code/my-app', create: '创建' } : { title: 'New project', name: 'Name', repo: 'Repo path', branch: 'Default branch', mode: 'Mode', namePh: 'my-app', repoPh: '/Users/you/code/my-app', create: 'Create' }; const [name, setName] = React.useState(''); const [repoPath, setRepoPath] = React.useState(''); const [defaultBranch, setDefaultBranch] = React.useState('main'); const [autonomy, setAutonomy] = React.useState(defaultAutonomy || 'manual'); const submit = (e) => { e.preventDefault(); if (!name.trim() || !repoPath.trim()) return; onCreate({ name: name.trim(), repoPath: repoPath.trim(), defaultBranch: defaultBranch.trim() || 'main', autonomy }); }; return (
▍ {L.title}