feat(tracker-web): hardcoded repo dropdown for PR-mode jobs (base=main)
MVP: the New Job form picks a PR target from a fixed dropdown of local repos; base branch is fixed to main. Empty selection = no PR (plain job). Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
d350159025
commit
2adddce754
@ -21,6 +21,28 @@ const STAGES = [
|
||||
];
|
||||
const POLL_INTERVAL = 30_000;
|
||||
|
||||
// MVP: PR-mode target repos (local checkouts under the factory's repo base).
|
||||
// Base branch is fixed to `main`. Empty selection = no PR (plain job).
|
||||
const FLEET_REPOS = [
|
||||
'learning_ai_common_plat',
|
||||
'learning_ai_devops_tools',
|
||||
'learning_voice_ai_agent',
|
||||
'learning_multimodal_memory_agents',
|
||||
'learning_ai_clock',
|
||||
'learning_ai_jarvis_jr',
|
||||
'learning_ai_fastgap',
|
||||
'learning_ai_peakpulse',
|
||||
'learning_ai_flowmonk',
|
||||
'learning_ai_notes',
|
||||
'learning_ai_trails',
|
||||
'learning_ai_efforise',
|
||||
'learning_ai_local_memory_gpt',
|
||||
'learning_ai_2nd_brain',
|
||||
'learning_ai_auth_app',
|
||||
'learning_agent_monitoring_fx',
|
||||
];
|
||||
const FLEET_BASE_BRANCH = 'main';
|
||||
|
||||
export default function FleetJobsPage() {
|
||||
const { token } = useAuth();
|
||||
const [jobs, setJobs] = useState<FleetJob[]>([]);
|
||||
@ -33,7 +55,6 @@ export default function FleetJobsPage() {
|
||||
const [priority, setPriority] = useState<'critical' | 'high' | 'medium' | 'low'>('high');
|
||||
const [caps, setCaps] = useState('build');
|
||||
const [repo, setRepo] = useState('');
|
||||
const [baseBranch, setBaseBranch] = useState('main');
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [submitMsg, setSubmitMsg] = useState<{ ok: boolean; text: string } | null>(null);
|
||||
|
||||
@ -74,7 +95,7 @@ export default function FleetJobsPage() {
|
||||
bodyMd: body.trim(),
|
||||
priority,
|
||||
capabilities,
|
||||
...(repo.trim() ? { repo: repo.trim(), baseBranch: baseBranch.trim() || 'main' } : {}),
|
||||
...(repo ? { repo, baseBranch: FLEET_BASE_BRANCH } : {}),
|
||||
});
|
||||
setSubmitMsg({ ok: true, text: `Submitted ${job.id} (stage: ${job.stage}).` });
|
||||
setBody('');
|
||||
@ -85,7 +106,7 @@ export default function FleetJobsPage() {
|
||||
} finally {
|
||||
setSubmitting(false);
|
||||
}
|
||||
}, [body, caps, priority, repo, baseBranch, refresh]);
|
||||
}, [body, caps, priority, repo, refresh]);
|
||||
|
||||
return (
|
||||
<div className="p-6 space-y-6">
|
||||
@ -149,29 +170,27 @@ export default function FleetJobsPage() {
|
||||
</div>
|
||||
<div>
|
||||
<label htmlFor="job-repo" className="mb-1 block text-sm font-medium">
|
||||
Repo (optional, PR mode)
|
||||
Repo (optional — opens a PR)
|
||||
</label>
|
||||
<input
|
||||
<select
|
||||
id="job-repo"
|
||||
value={repo}
|
||||
onChange={e => setRepo(e.target.value)}
|
||||
placeholder="owner/name"
|
||||
className="rounded border bg-background px-2 py-1 text-sm font-mono"
|
||||
/>
|
||||
>
|
||||
<option value="">— none (no PR) —</option>
|
||||
{FLEET_REPOS.map(r => (
|
||||
<option key={r} value={r}>
|
||||
{r}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
{repo && (
|
||||
<p className="mt-1 text-xs text-muted-foreground">
|
||||
PR against <span className="font-mono">{FLEET_BASE_BRANCH}</span>
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
{repo.trim() && (
|
||||
<div>
|
||||
<label htmlFor="job-base" className="mb-1 block text-sm font-medium">
|
||||
Base branch
|
||||
</label>
|
||||
<input
|
||||
id="job-base"
|
||||
value={baseBranch}
|
||||
onChange={e => setBaseBranch(e.target.value)}
|
||||
className="rounded border bg-background px-2 py-1 text-sm font-mono"
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<Button onClick={handleSubmit} disabled={submitting} aria-label="Submit new job">
|
||||
{submitting ? 'Submitting…' : 'Submit Job'}
|
||||
</Button>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user