diff --git a/dashboards/tracker-web/src/app/dashboard/fleet/jobs/page.tsx b/dashboards/tracker-web/src/app/dashboard/fleet/jobs/page.tsx index b93ac258..162ffc76 100644 --- a/dashboards/tracker-web/src/app/dashboard/fleet/jobs/page.tsx +++ b/dashboards/tracker-web/src/app/dashboard/fleet/jobs/page.tsx @@ -68,11 +68,15 @@ const FLEET_REPOS = [ ]; const FLEET_BASE_BRANCH = 'main'; -// Factories set up on this machine. Selecting one routes the job to that factory's -// product (the factory polling that product claims it). +// Live factories on this host (one agent-queue daemon per product — see +// _start_fleet.sh). Selecting one routes the job to that factory's product (the +// factory polling that product claims it). The id matches the factory's +// AQ_FACTORY_ID so the labels line up with what the fleet dashboard shows. const FLEET_FACTORIES = [ - { id: 'mac-1', label: 'mac-1 — LysnrAI (autoship + PR)', productId: 'lysnrai' }, - { id: 'mac-2', label: 'mac-2 — ChronoMind (human gate + PR)', productId: 'chronomind' }, + { id: 'mac-lysnrai', label: 'mac-lysnrai — LysnrAI', productId: 'lysnrai' }, + { id: 'mac-chronomind', label: 'mac-chronomind — ChronoMind', productId: 'chronomind' }, + { id: 'mac-mindlyst', label: 'mac-mindlyst — MindLyst', productId: 'mindlyst' }, + { id: 'mac-nomgap', label: 'mac-nomgap — NomGap', productId: 'nomgap' }, ]; export default function FleetJobsPage() { @@ -88,7 +92,10 @@ export default function FleetJobsPage() { const [factoryId, setFactoryId] = useState(FLEET_FACTORIES[0].id); const [body, setBody] = useState(''); const [priority, setPriority] = useState<'critical' | 'high' | 'medium' | 'low'>('high'); - const [caps, setCaps] = useState('build'); + // Empty by default: no agent-queue factory advertises a `build` capability + // (caps are os:* / engine:* / node:* / has:*), so a non-empty default here makes + // the job unroutable. Leave blank ⇒ any capable factory for the product claims it. + const [caps, setCaps] = useState(''); const [repo, setRepo] = useState(''); const [verifyCmd, setVerifyCmd] = useState(''); const [autoMerge, setAutoMerge] = useState(false); @@ -273,6 +280,7 @@ export default function FleetJobsPage() { id="job-caps" value={caps} onChange={e => setCaps(e.target.value)} + placeholder="optional — e.g. engine:devin, has:docker" className="rounded border bg-background px-2 py-1 text-sm" />