refactor(skills): add skill-adapter and refactor SkillMarket

- Add skill-adapter.ts to bridge configStore and UI skill formats
- Refactor SkillMarket to use new skill-adapter instead of skill-discovery
- Add health check state to connectionStore
- Update multiple components with improved typing
- Clean up test artifacts and add new test results
- Update README and add skill-market-mvp plan

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-03-21 00:28:03 +08:00
parent 54ccc0a7b0
commit 48a430fc97
50 changed files with 1523 additions and 360 deletions

View File

@@ -7,7 +7,10 @@
*/
import { useState, useEffect, useCallback } from 'react';
import { useGatewayStore, type Workflow } from '../store/gatewayStore';
import { useHandStore } from '../store/handStore';
import { useWorkflowStore, type Workflow } from '../store/workflowStore';
import { useAgentStore } from '../store/agentStore';
import { useConfigStore } from '../store/configStore';
import { WorkflowEditor } from './WorkflowEditor';
import { WorkflowHistory } from './WorkflowHistory';
import { TriggersPanel } from './TriggersPanel';
@@ -139,7 +142,14 @@ interface CreateJobModalProps {
}
function CreateJobModal({ isOpen, onClose, onSuccess }: CreateJobModalProps) {
const { hands, workflows, clones, createScheduledTask, loadHands, loadWorkflows, loadClones } = useGatewayStore();
// Store state - use domain stores
const hands = useHandStore((s) => s.hands);
const workflows = useWorkflowStore((s) => s.workflows);
const clones = useAgentStore((s) => s.clones);
const createScheduledTask = useConfigStore((s) => s.createScheduledTask);
const loadHands = useHandStore((s) => s.loadHands);
const loadWorkflows = useWorkflowStore((s) => s.loadWorkflows);
const loadClones = useAgentStore((s) => s.loadClones);
const [formData, setFormData] = useState<JobFormData>(initialFormData);
const [errors, setErrors] = useState<Record<string, string>>({});
const [isSubmitting, setIsSubmitting] = useState(false);
@@ -637,15 +647,14 @@ function CreateJobModal({ isOpen, onClose, onSuccess }: CreateJobModalProps) {
// === Main SchedulerPanel Component ===
export function SchedulerPanel() {
const {
scheduledTasks,
loadScheduledTasks,
workflows,
loadWorkflows,
createWorkflow,
executeWorkflow,
isLoading,
} = useGatewayStore();
// Store state - use domain stores
const scheduledTasks = useConfigStore((s) => s.scheduledTasks);
const loadScheduledTasks = useConfigStore((s) => s.loadScheduledTasks);
const workflows = useWorkflowStore((s) => s.workflows);
const loadWorkflows = useWorkflowStore((s) => s.loadWorkflows);
const createWorkflow = useWorkflowStore((s) => s.createWorkflow);
const executeWorkflow = useWorkflowStore((s) => s.triggerWorkflow);
const isLoading = useHandStore((s) => s.isLoading) || useWorkflowStore((s) => s.isLoading) || useConfigStore((s) => s.isLoading);
const [activeTab, setActiveTab] = useState<TabType>('scheduled');
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
const [isWorkflowEditorOpen, setIsWorkflowEditorOpen] = useState(false);