feat(company-explorer): add wikipedia integration, robotics settings, and manual overrides

- Ported robust Wikipedia extraction logic (categories, first paragraph) from legacy system.
- Implemented database-driven Robotics Category configuration with frontend settings UI.
- Updated Robotics Potential analysis to use Chain-of-Thought infrastructure reasoning.
- Added Manual Override features for Wikipedia URL (with locking) and Website URL (with re-scrape trigger).
- Enhanced Inspector UI with Wikipedia profile, category tags, and action buttons.
This commit is contained in:
2026-01-08 10:08:21 +00:00
parent cf4390bdb7
commit a43b01bb6e
12 changed files with 1320 additions and 160 deletions

View File

@@ -2,8 +2,9 @@ import { useState, useEffect } from 'react'
import axios from 'axios'
import { CompanyTable } from './components/CompanyTable'
import { ImportWizard } from './components/ImportWizard'
import { Inspector } from './components/Inspector' // NEW
import { LayoutDashboard, UploadCloud, Search, RefreshCw } from 'lucide-react'
import { Inspector } from './components/Inspector'
import { RoboticsSettings } from './components/RoboticsSettings' // NEW
import { LayoutDashboard, UploadCloud, Search, RefreshCw, Settings } from 'lucide-react'
// Base URL detection (Production vs Dev)
const API_BASE = import.meta.env.BASE_URL === '/ce/' ? '/ce/api' : '/api';
@@ -16,7 +17,8 @@ function App() {
const [stats, setStats] = useState<Stats>({ total: 0 })
const [refreshKey, setRefreshKey] = useState(0)
const [isImportOpen, setIsImportOpen] = useState(false)
const [selectedCompanyId, setSelectedCompanyId] = useState<number | null>(null) // NEW
const [isSettingsOpen, setIsSettingsOpen] = useState(false) // NEW
const [selectedCompanyId, setSelectedCompanyId] = useState<number | null>(null)
const fetchStats = async () => {
try {
@@ -48,6 +50,13 @@ function App() {
onSuccess={() => setRefreshKey(k => k + 1)}
/>
{/* Robotics Logic Settings */}
<RoboticsSettings
isOpen={isSettingsOpen}
onClose={() => setIsSettingsOpen(false)}
apiBase={API_BASE}
/>
{/* Inspector Sidebar */}
<Inspector
companyId={selectedCompanyId}
@@ -73,6 +82,14 @@ function App() {
<span className="text-white font-bold">{stats.total}</span> Companies
</div>
<button
onClick={() => setIsSettingsOpen(true)}
className="p-2 hover:bg-slate-800 rounded-full transition-colors text-slate-400 hover:text-white"
title="Configure Robotics Logic"
>
<Settings className="h-5 w-5" />
</button>
<button
onClick={() => setRefreshKey(k => k + 1)}
className="p-2 hover:bg-slate-800 rounded-full transition-colors text-slate-400 hover:text-white"