@friggframework/devtools 2.0.0-next.3 → 2.0.0-next.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/frigg-cli/.eslintrc.js +141 -0
- package/frigg-cli/__tests__/jest.config.js +102 -0
- package/frigg-cli/__tests__/unit/commands/build.test.js +483 -0
- package/frigg-cli/__tests__/unit/commands/install.test.js +418 -0
- package/frigg-cli/__tests__/unit/commands/ui.test.js +592 -0
- package/frigg-cli/__tests__/utils/command-tester.js +170 -0
- package/frigg-cli/__tests__/utils/mock-factory.js +270 -0
- package/frigg-cli/__tests__/utils/test-fixtures.js +463 -0
- package/frigg-cli/__tests__/utils/test-setup.js +286 -0
- package/frigg-cli/build-command/index.js +54 -0
- package/frigg-cli/deploy-command/index.js +36 -0
- package/frigg-cli/generate-command/__tests__/generate-command.test.js +312 -0
- package/frigg-cli/generate-command/azure-generator.js +43 -0
- package/frigg-cli/generate-command/gcp-generator.js +47 -0
- package/frigg-cli/generate-command/index.js +332 -0
- package/frigg-cli/generate-command/terraform-generator.js +555 -0
- package/frigg-cli/generate-iam-command.js +115 -0
- package/frigg-cli/index.js +47 -1
- package/frigg-cli/index.test.js +1 -4
- package/frigg-cli/init-command/backend-first-handler.js +756 -0
- package/frigg-cli/init-command/index.js +93 -0
- package/frigg-cli/init-command/template-handler.js +143 -0
- package/frigg-cli/install-command/index.js +1 -4
- package/frigg-cli/package.json +51 -0
- package/frigg-cli/start-command/index.js +24 -4
- package/frigg-cli/test/init-command.test.js +180 -0
- package/frigg-cli/test/npm-registry.test.js +319 -0
- package/frigg-cli/ui-command/index.js +154 -0
- package/frigg-cli/utils/app-resolver.js +319 -0
- package/frigg-cli/utils/backend-path.js +16 -17
- package/frigg-cli/utils/npm-registry.js +167 -0
- package/frigg-cli/utils/process-manager.js +199 -0
- package/frigg-cli/utils/repo-detection.js +405 -0
- package/infrastructure/AWS-DISCOVERY-TROUBLESHOOTING.md +245 -0
- package/infrastructure/AWS-IAM-CREDENTIAL-NEEDS.md +596 -0
- package/infrastructure/DEPLOYMENT-INSTRUCTIONS.md +268 -0
- package/infrastructure/GENERATE-IAM-DOCS.md +253 -0
- package/infrastructure/IAM-POLICY-TEMPLATES.md +176 -0
- package/infrastructure/README-TESTING.md +332 -0
- package/infrastructure/README.md +421 -0
- package/infrastructure/WEBSOCKET-CONFIGURATION.md +105 -0
- package/infrastructure/__tests__/fixtures/mock-aws-resources.js +391 -0
- package/infrastructure/__tests__/helpers/test-utils.js +277 -0
- package/infrastructure/aws-discovery.js +568 -0
- package/infrastructure/aws-discovery.test.js +373 -0
- package/infrastructure/build-time-discovery.js +206 -0
- package/infrastructure/build-time-discovery.test.js +375 -0
- package/infrastructure/create-frigg-infrastructure.js +3 -5
- package/infrastructure/frigg-deployment-iam-stack.yaml +379 -0
- package/infrastructure/iam-generator.js +687 -0
- package/infrastructure/iam-generator.test.js +169 -0
- package/infrastructure/iam-policy-basic.json +212 -0
- package/infrastructure/iam-policy-full.json +282 -0
- package/infrastructure/integration.test.js +383 -0
- package/infrastructure/run-discovery.js +110 -0
- package/infrastructure/serverless-template.js +923 -113
- package/infrastructure/serverless-template.test.js +541 -0
- package/management-ui/.eslintrc.js +22 -0
- package/management-ui/README.md +203 -0
- package/management-ui/components.json +21 -0
- package/management-ui/docs/phase2-integration-guide.md +320 -0
- package/management-ui/index.html +13 -0
- package/management-ui/package-lock.json +16517 -0
- package/management-ui/package.json +76 -0
- package/management-ui/packages/devtools/frigg-cli/ui-command/index.js +302 -0
- package/management-ui/postcss.config.js +6 -0
- package/management-ui/server/api/backend.js +256 -0
- package/management-ui/server/api/cli.js +315 -0
- package/management-ui/server/api/codegen.js +663 -0
- package/management-ui/server/api/connections.js +857 -0
- package/management-ui/server/api/discovery.js +185 -0
- package/management-ui/server/api/environment/index.js +1 -0
- package/management-ui/server/api/environment/router.js +378 -0
- package/management-ui/server/api/environment.js +328 -0
- package/management-ui/server/api/integrations.js +876 -0
- package/management-ui/server/api/logs.js +248 -0
- package/management-ui/server/api/monitoring.js +282 -0
- package/management-ui/server/api/open-ide.js +31 -0
- package/management-ui/server/api/project.js +1029 -0
- package/management-ui/server/api/users/sessions.js +371 -0
- package/management-ui/server/api/users/simulation.js +254 -0
- package/management-ui/server/api/users.js +362 -0
- package/management-ui/server/api-contract.md +275 -0
- package/management-ui/server/index.js +873 -0
- package/management-ui/server/middleware/errorHandler.js +93 -0
- package/management-ui/server/middleware/security.js +32 -0
- package/management-ui/server/processManager.js +296 -0
- package/management-ui/server/server.js +346 -0
- package/management-ui/server/services/aws-monitor.js +413 -0
- package/management-ui/server/services/npm-registry.js +347 -0
- package/management-ui/server/services/template-engine.js +538 -0
- package/management-ui/server/utils/cliIntegration.js +220 -0
- package/management-ui/server/utils/environment/auditLogger.js +471 -0
- package/management-ui/server/utils/environment/awsParameterStore.js +264 -0
- package/management-ui/server/utils/environment/encryption.js +278 -0
- package/management-ui/server/utils/environment/envFileManager.js +286 -0
- package/management-ui/server/utils/import-commonjs.js +28 -0
- package/management-ui/server/utils/response.js +83 -0
- package/management-ui/server/websocket/handler.js +325 -0
- package/management-ui/src/App.jsx +109 -0
- package/management-ui/src/assets/FriggLogo.svg +1 -0
- package/management-ui/src/components/AppRouter.jsx +65 -0
- package/management-ui/src/components/Button.jsx +70 -0
- package/management-ui/src/components/Card.jsx +97 -0
- package/management-ui/src/components/EnvironmentCompare.jsx +400 -0
- package/management-ui/src/components/EnvironmentEditor.jsx +372 -0
- package/management-ui/src/components/EnvironmentImportExport.jsx +469 -0
- package/management-ui/src/components/EnvironmentSchema.jsx +491 -0
- package/management-ui/src/components/EnvironmentSecurity.jsx +463 -0
- package/management-ui/src/components/ErrorBoundary.jsx +73 -0
- package/management-ui/src/components/IntegrationCard.jsx +481 -0
- package/management-ui/src/components/IntegrationCardEnhanced.jsx +770 -0
- package/management-ui/src/components/IntegrationExplorer.jsx +379 -0
- package/management-ui/src/components/IntegrationStatus.jsx +336 -0
- package/management-ui/src/components/Layout.jsx +716 -0
- package/management-ui/src/components/LoadingSpinner.jsx +113 -0
- package/management-ui/src/components/RepositoryPicker.jsx +248 -0
- package/management-ui/src/components/SessionMonitor.jsx +350 -0
- package/management-ui/src/components/StatusBadge.jsx +208 -0
- package/management-ui/src/components/UserContextSwitcher.jsx +212 -0
- package/management-ui/src/components/UserSimulation.jsx +327 -0
- package/management-ui/src/components/Welcome.jsx +434 -0
- package/management-ui/src/components/codegen/APIEndpointGenerator.jsx +637 -0
- package/management-ui/src/components/codegen/APIModuleSelector.jsx +227 -0
- package/management-ui/src/components/codegen/CodeGenerationWizard.jsx +247 -0
- package/management-ui/src/components/codegen/CodePreviewEditor.jsx +316 -0
- package/management-ui/src/components/codegen/DynamicModuleForm.jsx +271 -0
- package/management-ui/src/components/codegen/FormBuilder.jsx +737 -0
- package/management-ui/src/components/codegen/IntegrationGenerator.jsx +855 -0
- package/management-ui/src/components/codegen/ProjectScaffoldWizard.jsx +797 -0
- package/management-ui/src/components/codegen/SchemaBuilder.jsx +303 -0
- package/management-ui/src/components/codegen/TemplateSelector.jsx +586 -0
- package/management-ui/src/components/codegen/index.js +10 -0
- package/management-ui/src/components/connections/ConnectionConfigForm.jsx +362 -0
- package/management-ui/src/components/connections/ConnectionHealthMonitor.jsx +182 -0
- package/management-ui/src/components/connections/ConnectionTester.jsx +200 -0
- package/management-ui/src/components/connections/EntityRelationshipMapper.jsx +292 -0
- package/management-ui/src/components/connections/OAuthFlow.jsx +204 -0
- package/management-ui/src/components/connections/index.js +5 -0
- package/management-ui/src/components/index.js +21 -0
- package/management-ui/src/components/monitoring/APIGatewayMetrics.jsx +222 -0
- package/management-ui/src/components/monitoring/LambdaMetrics.jsx +169 -0
- package/management-ui/src/components/monitoring/MetricsChart.jsx +197 -0
- package/management-ui/src/components/monitoring/MonitoringDashboard.jsx +393 -0
- package/management-ui/src/components/monitoring/SQSMetrics.jsx +246 -0
- package/management-ui/src/components/monitoring/index.js +6 -0
- package/management-ui/src/components/monitoring/monitoring.css +218 -0
- package/management-ui/src/components/theme-provider.jsx +52 -0
- package/management-ui/src/components/theme-toggle.jsx +39 -0
- package/management-ui/src/components/ui/badge.tsx +36 -0
- package/management-ui/src/components/ui/button.test.jsx +56 -0
- package/management-ui/src/components/ui/button.tsx +57 -0
- package/management-ui/src/components/ui/card.tsx +76 -0
- package/management-ui/src/components/ui/dropdown-menu.tsx +199 -0
- package/management-ui/src/components/ui/select.tsx +157 -0
- package/management-ui/src/components/ui/skeleton.jsx +15 -0
- package/management-ui/src/hooks/useFrigg.jsx +601 -0
- package/management-ui/src/hooks/useSocket.jsx +58 -0
- package/management-ui/src/index.css +193 -0
- package/management-ui/src/lib/utils.ts +6 -0
- package/management-ui/src/main.jsx +10 -0
- package/management-ui/src/pages/CodeGeneration.jsx +14 -0
- package/management-ui/src/pages/Connections.jsx +252 -0
- package/management-ui/src/pages/ConnectionsEnhanced.jsx +633 -0
- package/management-ui/src/pages/Dashboard.jsx +311 -0
- package/management-ui/src/pages/Environment.jsx +314 -0
- package/management-ui/src/pages/IntegrationConfigure.jsx +669 -0
- package/management-ui/src/pages/IntegrationDiscovery.jsx +567 -0
- package/management-ui/src/pages/IntegrationTest.jsx +742 -0
- package/management-ui/src/pages/Integrations.jsx +253 -0
- package/management-ui/src/pages/Monitoring.jsx +17 -0
- package/management-ui/src/pages/Simulation.jsx +155 -0
- package/management-ui/src/pages/Users.jsx +492 -0
- package/management-ui/src/services/api.js +41 -0
- package/management-ui/src/services/apiModuleService.js +193 -0
- package/management-ui/src/services/websocket-handlers.js +120 -0
- package/management-ui/src/test/api/project.test.js +273 -0
- package/management-ui/src/test/components/Welcome.test.jsx +378 -0
- package/management-ui/src/test/mocks/server.js +178 -0
- package/management-ui/src/test/setup.js +61 -0
- package/management-ui/src/test/utils/test-utils.jsx +134 -0
- package/management-ui/src/utils/repository.js +98 -0
- package/management-ui/src/utils/repository.test.js +118 -0
- package/management-ui/src/workflows/phase2-integration-workflows.js +884 -0
- package/management-ui/tailwind.config.js +63 -0
- package/management-ui/tsconfig.json +37 -0
- package/management-ui/tsconfig.node.json +10 -0
- package/management-ui/vite.config.js +26 -0
- package/management-ui/vitest.config.js +38 -0
- package/package.json +17 -9
- package/infrastructure/app-handler-helpers.js +0 -57
- package/infrastructure/backend-utils.js +0 -90
- package/infrastructure/routers/auth.js +0 -26
- package/infrastructure/routers/integration-defined-routers.js +0 -37
- package/infrastructure/routers/middleware/loadUser.js +0 -15
- package/infrastructure/routers/middleware/requireLoggedInUser.js +0 -12
- package/infrastructure/routers/user.js +0 -41
- package/infrastructure/routers/websocket.js +0 -55
- package/infrastructure/workers/integration-defined-workers.js +0 -24
|
@@ -0,0 +1,770 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
<<<<<<< HEAD
|
|
3
|
+
<<<<<<< HEAD
|
|
4
|
+
import {
|
|
5
|
+
Download, CheckCircle, ExternalLink, Settings, AlertCircle,
|
|
6
|
+
=======
|
|
7
|
+
<<<<<<< HEAD
|
|
8
|
+
import {
|
|
9
|
+
Download, CheckCircle, ExternalLink, Settings, AlertCircle,
|
|
10
|
+
=======
|
|
11
|
+
import {
|
|
12
|
+
Download, CheckCircle, ExternalLink, Settings, AlertCircle,
|
|
13
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
14
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
15
|
+
=======
|
|
16
|
+
import {
|
|
17
|
+
Download, CheckCircle, ExternalLink, Settings, AlertCircle,
|
|
18
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
19
|
+
RefreshCw, TestTube, Info, Clock, TrendingUp, Shield,
|
|
20
|
+
ChevronDown, ChevronUp
|
|
21
|
+
} from 'lucide-react'
|
|
22
|
+
import { Card, CardContent } from './Card'
|
|
23
|
+
import { Button } from './Button'
|
|
24
|
+
import LoadingSpinner from './LoadingSpinner'
|
|
25
|
+
<<<<<<< HEAD
|
|
26
|
+
<<<<<<< HEAD
|
|
27
|
+
import { cn } from '../lib/utils'
|
|
28
|
+
|
|
29
|
+
=======
|
|
30
|
+
<<<<<<< HEAD
|
|
31
|
+
<<<<<<< HEAD
|
|
32
|
+
import { cn } from '../lib/utils'
|
|
33
|
+
|
|
34
|
+
const IntegrationCardEnhanced = ({
|
|
35
|
+
integration,
|
|
36
|
+
onInstall,
|
|
37
|
+
onUninstall,
|
|
38
|
+
onUpdate,
|
|
39
|
+
onConfigure,
|
|
40
|
+
=======
|
|
41
|
+
import { cn } from '../utils/cn'
|
|
42
|
+
=======
|
|
43
|
+
import { cn } from '../lib/utils'
|
|
44
|
+
>>>>>>> f153939e (refactor: clean up CLI help display and remove unused dependencies)
|
|
45
|
+
|
|
46
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
47
|
+
=======
|
|
48
|
+
import { cn } from '../lib/utils'
|
|
49
|
+
|
|
50
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
51
|
+
const IntegrationCardEnhanced = ({
|
|
52
|
+
integration,
|
|
53
|
+
onInstall,
|
|
54
|
+
onUninstall,
|
|
55
|
+
onUpdate,
|
|
56
|
+
onConfigure,
|
|
57
|
+
<<<<<<< HEAD
|
|
58
|
+
<<<<<<< HEAD
|
|
59
|
+
=======
|
|
60
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
61
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
62
|
+
=======
|
|
63
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
64
|
+
onTest,
|
|
65
|
+
onViewDetails,
|
|
66
|
+
installing = false,
|
|
67
|
+
uninstalling = false,
|
|
68
|
+
updating = false,
|
|
69
|
+
error = false,
|
|
70
|
+
message = '',
|
|
71
|
+
progress = 0,
|
|
72
|
+
className,
|
|
73
|
+
viewMode = 'grid',
|
|
74
|
+
<<<<<<< HEAD
|
|
75
|
+
<<<<<<< HEAD
|
|
76
|
+
=======
|
|
77
|
+
<<<<<<< HEAD
|
|
78
|
+
...props
|
|
79
|
+
}) => {
|
|
80
|
+
const [expanded, setExpanded] = useState(false)
|
|
81
|
+
const [showDetails, setShowDetails] = useState(false)
|
|
82
|
+
|
|
83
|
+
=======
|
|
84
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
85
|
+
=======
|
|
86
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
87
|
+
...props
|
|
88
|
+
}) => {
|
|
89
|
+
const [expanded, setExpanded] = useState(false)
|
|
90
|
+
const [showDetails, setShowDetails] = useState(false)
|
|
91
|
+
|
|
92
|
+
<<<<<<< HEAD
|
|
93
|
+
<<<<<<< HEAD
|
|
94
|
+
=======
|
|
95
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
96
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
97
|
+
=======
|
|
98
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
99
|
+
const isInstalled = integration.installed || integration.status === 'installed'
|
|
100
|
+
const isProcessing = installing || uninstalling || updating
|
|
101
|
+
const hasUpdate = integration.updateAvailable
|
|
102
|
+
const isOfficial = integration.isOfficial
|
|
103
|
+
|
|
104
|
+
const getStatusIcon = () => {
|
|
105
|
+
if (error) return <AlertCircle size={20} className="text-red-500" />
|
|
106
|
+
if (isProcessing) return <LoadingSpinner size="sm" />
|
|
107
|
+
if (isInstalled) return <CheckCircle size={20} className="text-green-500" />
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const getProgressBarColor = () => {
|
|
112
|
+
if (error) return 'bg-red-500'
|
|
113
|
+
if (uninstalling) return 'bg-orange-500'
|
|
114
|
+
if (updating) return 'bg-blue-500'
|
|
115
|
+
return 'bg-green-500'
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const formatCategory = (category) => {
|
|
119
|
+
return category?.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase()) || 'Other'
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const handleAction = async (action, handler) => {
|
|
123
|
+
if (handler && !isProcessing) {
|
|
124
|
+
await handler(integration.name)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// List view layout
|
|
129
|
+
if (viewMode === 'list') {
|
|
130
|
+
return (
|
|
131
|
+
<Card className={cn('hover:shadow-md transition-shadow', className)} {...props}>
|
|
132
|
+
<CardContent className="p-4">
|
|
133
|
+
<div className="flex items-center justify-between">
|
|
134
|
+
{/* Left side - Integration info */}
|
|
135
|
+
<div className="flex items-center flex-1">
|
|
136
|
+
<div className="flex-shrink-0 mr-4">
|
|
137
|
+
{getStatusIcon()}
|
|
138
|
+
</div>
|
|
139
|
+
<<<<<<< HEAD
|
|
140
|
+
<<<<<<< HEAD
|
|
141
|
+
|
|
142
|
+
=======
|
|
143
|
+
<<<<<<< HEAD
|
|
144
|
+
|
|
145
|
+
=======
|
|
146
|
+
|
|
147
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
148
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
149
|
+
=======
|
|
150
|
+
|
|
151
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
152
|
+
<div className="flex-1">
|
|
153
|
+
<div className="flex items-center mb-1">
|
|
154
|
+
<h4 className="font-semibold text-foreground">
|
|
155
|
+
{integration.displayName || integration.name}
|
|
156
|
+
</h4>
|
|
157
|
+
{integration.version && (
|
|
158
|
+
<span className="ml-2 text-xs bg-muted text-muted-foreground px-2 py-0.5 rounded">
|
|
159
|
+
v{integration.version}
|
|
160
|
+
</span>
|
|
161
|
+
)}
|
|
162
|
+
{hasUpdate && (
|
|
163
|
+
<span className="ml-2 text-xs bg-blue-500/10 text-blue-600 dark:text-blue-400 px-2 py-0.5 rounded flex items-center">
|
|
164
|
+
<TrendingUp size={10} className="mr-1" />
|
|
165
|
+
Update available
|
|
166
|
+
</span>
|
|
167
|
+
)}
|
|
168
|
+
{isOfficial && (
|
|
169
|
+
<span className="ml-2 text-xs bg-green-500/10 text-green-600 dark:text-green-400 px-2 py-0.5 rounded flex items-center">
|
|
170
|
+
<Shield size={10} className="mr-1" />
|
|
171
|
+
Official
|
|
172
|
+
</span>
|
|
173
|
+
)}
|
|
174
|
+
</div>
|
|
175
|
+
<<<<<<< HEAD
|
|
176
|
+
<<<<<<< HEAD
|
|
177
|
+
=======
|
|
178
|
+
<<<<<<< HEAD
|
|
179
|
+
|
|
180
|
+
<p className="text-sm text-gray-600 mb-2">
|
|
181
|
+
{integration.description || 'No description available'}
|
|
182
|
+
</p>
|
|
183
|
+
|
|
184
|
+
=======
|
|
185
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
186
|
+
=======
|
|
187
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
188
|
+
|
|
189
|
+
<p className="text-sm text-muted-foreground mb-2">
|
|
190
|
+
{integration.description || 'No description available'}
|
|
191
|
+
</p>
|
|
192
|
+
|
|
193
|
+
<<<<<<< HEAD
|
|
194
|
+
<<<<<<< HEAD
|
|
195
|
+
=======
|
|
196
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
197
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
198
|
+
=======
|
|
199
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
200
|
+
{/* Tags and category */}
|
|
201
|
+
<div className="flex items-center gap-2">
|
|
202
|
+
<span className="text-xs bg-muted text-muted-foreground px-2 py-0.5 rounded">
|
|
203
|
+
{formatCategory(integration.category)}
|
|
204
|
+
</span>
|
|
205
|
+
{integration.tags?.slice(0, 3).map((tag, index) => (
|
|
206
|
+
<span
|
|
207
|
+
key={index}
|
|
208
|
+
className="text-xs bg-blue-100 text-blue-700 px-2 py-0.5 rounded"
|
|
209
|
+
>
|
|
210
|
+
{tag}
|
|
211
|
+
</span>
|
|
212
|
+
))}
|
|
213
|
+
{integration.tags?.length > 3 && (
|
|
214
|
+
<span className="text-xs text-gray-500">
|
|
215
|
+
+{integration.tags.length - 3} more
|
|
216
|
+
</span>
|
|
217
|
+
)}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
{/* Right side - Actions */}
|
|
223
|
+
<div className="flex items-center gap-2 ml-4">
|
|
224
|
+
{!isInstalled && !isProcessing && (
|
|
225
|
+
<Button
|
|
226
|
+
size="sm"
|
|
227
|
+
onClick={() => handleAction('install', onInstall)}
|
|
228
|
+
className="inline-flex items-center"
|
|
229
|
+
>
|
|
230
|
+
<Download size={16} className="mr-1" />
|
|
231
|
+
Install
|
|
232
|
+
</Button>
|
|
233
|
+
)}
|
|
234
|
+
<<<<<<< HEAD
|
|
235
|
+
<<<<<<< HEAD
|
|
236
|
+
|
|
237
|
+
=======
|
|
238
|
+
<<<<<<< HEAD
|
|
239
|
+
|
|
240
|
+
=======
|
|
241
|
+
|
|
242
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
243
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
244
|
+
=======
|
|
245
|
+
|
|
246
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
247
|
+
{isInstalled && !isProcessing && (
|
|
248
|
+
<>
|
|
249
|
+
<Button
|
|
250
|
+
size="sm"
|
|
251
|
+
variant="outline"
|
|
252
|
+
onClick={() => handleAction('configure', onConfigure)}
|
|
253
|
+
className="inline-flex items-center"
|
|
254
|
+
>
|
|
255
|
+
<Settings size={16} className="mr-1" />
|
|
256
|
+
Configure
|
|
257
|
+
</Button>
|
|
258
|
+
{hasUpdate && (
|
|
259
|
+
<Button
|
|
260
|
+
size="sm"
|
|
261
|
+
variant="outline"
|
|
262
|
+
onClick={() => handleAction('update', onUpdate)}
|
|
263
|
+
className="inline-flex items-center text-primary hover:text-primary/80"
|
|
264
|
+
>
|
|
265
|
+
<RefreshCw size={16} className="mr-1" />
|
|
266
|
+
Update
|
|
267
|
+
</Button>
|
|
268
|
+
)}
|
|
269
|
+
</>
|
|
270
|
+
)}
|
|
271
|
+
<<<<<<< HEAD
|
|
272
|
+
<<<<<<< HEAD
|
|
273
|
+
|
|
274
|
+
=======
|
|
275
|
+
<<<<<<< HEAD
|
|
276
|
+
|
|
277
|
+
=======
|
|
278
|
+
|
|
279
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
280
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
281
|
+
=======
|
|
282
|
+
|
|
283
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
284
|
+
{isProcessing && (
|
|
285
|
+
<Button size="sm" disabled className="inline-flex items-center min-w-[100px]">
|
|
286
|
+
<LoadingSpinner size="sm" className="mr-1" />
|
|
287
|
+
{installing && 'Installing'}
|
|
288
|
+
{uninstalling && 'Uninstalling'}
|
|
289
|
+
{updating && 'Updating'}
|
|
290
|
+
</Button>
|
|
291
|
+
)}
|
|
292
|
+
|
|
293
|
+
<Button
|
|
294
|
+
size="sm"
|
|
295
|
+
variant="ghost"
|
|
296
|
+
onClick={() => setExpanded(!expanded)}
|
|
297
|
+
className="ml-2"
|
|
298
|
+
>
|
|
299
|
+
{expanded ? <ChevronUp size={16} /> : <ChevronDown size={16} />}
|
|
300
|
+
</Button>
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
{/* Progress bar */}
|
|
305
|
+
{isProcessing && progress > 0 && (
|
|
306
|
+
<div className="mt-3">
|
|
307
|
+
<<<<<<< HEAD
|
|
308
|
+
<<<<<<< HEAD
|
|
309
|
+
<div className="w-full bg-muted rounded-full h-2">
|
|
310
|
+
<div
|
|
311
|
+
=======
|
|
312
|
+
<<<<<<< HEAD
|
|
313
|
+
<div className="w-full bg-gray-200 rounded-full h-2">
|
|
314
|
+
<<<<<<< HEAD
|
|
315
|
+
<div
|
|
316
|
+
=======
|
|
317
|
+
=======
|
|
318
|
+
=======
|
|
319
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
320
|
+
<div className="w-full bg-muted rounded-full h-2">
|
|
321
|
+
<div
|
|
322
|
+
<<<<<<< HEAD
|
|
323
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
324
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
325
|
+
=======
|
|
326
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
327
|
+
className={cn("h-2 rounded-full transition-all", getProgressBarColor())}
|
|
328
|
+
style={{ width: `${progress}%` }}
|
|
329
|
+
/>
|
|
330
|
+
</div>
|
|
331
|
+
{message && (
|
|
332
|
+
<p className="text-xs text-muted-foreground mt-1">{message}</p>
|
|
333
|
+
)}
|
|
334
|
+
</div>
|
|
335
|
+
)}
|
|
336
|
+
|
|
337
|
+
{/* Error message */}
|
|
338
|
+
{error && message && (
|
|
339
|
+
<div className="mt-3 text-sm text-destructive flex items-start">
|
|
340
|
+
<AlertCircle size={16} className="mr-1 flex-shrink-0 mt-0.5" />
|
|
341
|
+
{message}
|
|
342
|
+
</div>
|
|
343
|
+
)}
|
|
344
|
+
|
|
345
|
+
{/* Expanded details */}
|
|
346
|
+
{expanded && (
|
|
347
|
+
<div className="mt-4 pt-4 border-t border-border">
|
|
348
|
+
<div className="grid grid-cols-2 gap-4 text-sm">
|
|
349
|
+
<div>
|
|
350
|
+
<span className="font-medium text-foreground">Package:</span>
|
|
351
|
+
<span className="ml-2 text-muted-foreground font-mono text-xs">{integration.name}</span>
|
|
352
|
+
</div>
|
|
353
|
+
{integration.author && (
|
|
354
|
+
<div>
|
|
355
|
+
<span className="font-medium text-foreground">Author:</span>
|
|
356
|
+
<span className="ml-2 text-muted-foreground">{integration.author}</span>
|
|
357
|
+
</div>
|
|
358
|
+
)}
|
|
359
|
+
{integration.lastUpdated && (
|
|
360
|
+
<div>
|
|
361
|
+
<span className="font-medium text-foreground">Last Updated:</span>
|
|
362
|
+
<span className="ml-2 text-muted-foreground">
|
|
363
|
+
{new Date(integration.lastUpdated).toLocaleDateString()}
|
|
364
|
+
</span>
|
|
365
|
+
</div>
|
|
366
|
+
)}
|
|
367
|
+
{integration.connections !== undefined && (
|
|
368
|
+
<div>
|
|
369
|
+
<span className="font-medium text-foreground">Active Connections:</span>
|
|
370
|
+
<span className="ml-2 text-muted-foreground">{integration.connections}</span>
|
|
371
|
+
</div>
|
|
372
|
+
)}
|
|
373
|
+
</div>
|
|
374
|
+
<<<<<<< HEAD
|
|
375
|
+
<<<<<<< HEAD
|
|
376
|
+
|
|
377
|
+
=======
|
|
378
|
+
<<<<<<< HEAD
|
|
379
|
+
|
|
380
|
+
=======
|
|
381
|
+
|
|
382
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
383
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
384
|
+
=======
|
|
385
|
+
|
|
386
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
387
|
+
{isInstalled && (
|
|
388
|
+
<div className="mt-4 flex justify-end gap-2">
|
|
389
|
+
{onTest && (
|
|
390
|
+
<Button
|
|
391
|
+
size="sm"
|
|
392
|
+
variant="outline"
|
|
393
|
+
onClick={() => handleAction('test', onTest)}
|
|
394
|
+
className="inline-flex items-center text-xs"
|
|
395
|
+
>
|
|
396
|
+
<TestTube size={14} className="mr-1" />
|
|
397
|
+
Test
|
|
398
|
+
</Button>
|
|
399
|
+
)}
|
|
400
|
+
<Button
|
|
401
|
+
size="sm"
|
|
402
|
+
variant="destructive"
|
|
403
|
+
onClick={() => handleAction('uninstall', onUninstall)}
|
|
404
|
+
className="inline-flex items-center text-xs"
|
|
405
|
+
>
|
|
406
|
+
Uninstall
|
|
407
|
+
</Button>
|
|
408
|
+
</div>
|
|
409
|
+
)}
|
|
410
|
+
</div>
|
|
411
|
+
)}
|
|
412
|
+
</CardContent>
|
|
413
|
+
</Card>
|
|
414
|
+
)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Grid view layout (default)
|
|
418
|
+
return (
|
|
419
|
+
<Card className={cn('hover:shadow-md transition-shadow', className)} {...props}>
|
|
420
|
+
<CardContent className="p-6">
|
|
421
|
+
<div className="flex items-start justify-between mb-4">
|
|
422
|
+
<div className="flex-1">
|
|
423
|
+
<div className="flex items-center mb-2">
|
|
424
|
+
<h4 className="font-semibold text-foreground text-lg">
|
|
425
|
+
{integration.displayName || integration.name}
|
|
426
|
+
</h4>
|
|
427
|
+
{integration.version && (
|
|
428
|
+
<span className="ml-2 text-xs bg-muted text-muted-foreground px-2 py-1 rounded">
|
|
429
|
+
v{integration.version}
|
|
430
|
+
</span>
|
|
431
|
+
)}
|
|
432
|
+
</div>
|
|
433
|
+
<<<<<<< HEAD
|
|
434
|
+
<<<<<<< HEAD
|
|
435
|
+
|
|
436
|
+
=======
|
|
437
|
+
<<<<<<< HEAD
|
|
438
|
+
|
|
439
|
+
=======
|
|
440
|
+
|
|
441
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
442
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
443
|
+
=======
|
|
444
|
+
|
|
445
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
446
|
+
{/* Badges */}
|
|
447
|
+
<div className="flex items-center gap-2 mb-3">
|
|
448
|
+
{hasUpdate && (
|
|
449
|
+
<span className="text-xs bg-blue-500/10 text-blue-600 dark:text-blue-400 px-2 py-0.5 rounded flex items-center">
|
|
450
|
+
<TrendingUp size={10} className="mr-1" />
|
|
451
|
+
Update available
|
|
452
|
+
</span>
|
|
453
|
+
)}
|
|
454
|
+
{isOfficial && (
|
|
455
|
+
<span className="text-xs bg-green-500/10 text-green-600 dark:text-green-400 px-2 py-0.5 rounded flex items-center">
|
|
456
|
+
<Shield size={10} className="mr-1" />
|
|
457
|
+
Official
|
|
458
|
+
</span>
|
|
459
|
+
)}
|
|
460
|
+
<span className="text-xs bg-muted text-muted-foreground px-2 py-0.5 rounded">
|
|
461
|
+
{formatCategory(integration.category)}
|
|
462
|
+
</span>
|
|
463
|
+
</div>
|
|
464
|
+
<<<<<<< HEAD
|
|
465
|
+
<<<<<<< HEAD
|
|
466
|
+
=======
|
|
467
|
+
<<<<<<< HEAD
|
|
468
|
+
|
|
469
|
+
<p className="text-sm text-gray-600 mb-3">
|
|
470
|
+
{integration.description || 'No description available'}
|
|
471
|
+
</p>
|
|
472
|
+
|
|
473
|
+
=======
|
|
474
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
475
|
+
=======
|
|
476
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
477
|
+
|
|
478
|
+
<p className="text-sm text-muted-foreground mb-3">
|
|
479
|
+
{integration.description || 'No description available'}
|
|
480
|
+
</p>
|
|
481
|
+
|
|
482
|
+
<<<<<<< HEAD
|
|
483
|
+
<<<<<<< HEAD
|
|
484
|
+
=======
|
|
485
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
486
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
487
|
+
=======
|
|
488
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
489
|
+
{integration.tags && integration.tags.length > 0 && (
|
|
490
|
+
<div className="flex flex-wrap gap-1 mb-3">
|
|
491
|
+
{integration.tags.map((tag, index) => (
|
|
492
|
+
<span
|
|
493
|
+
key={index}
|
|
494
|
+
className="text-xs bg-blue-100 text-blue-700 px-2 py-1 rounded-full"
|
|
495
|
+
>
|
|
496
|
+
{tag}
|
|
497
|
+
</span>
|
|
498
|
+
))}
|
|
499
|
+
</div>
|
|
500
|
+
)}
|
|
501
|
+
</div>
|
|
502
|
+
<<<<<<< HEAD
|
|
503
|
+
<<<<<<< HEAD
|
|
504
|
+
|
|
505
|
+
=======
|
|
506
|
+
<<<<<<< HEAD
|
|
507
|
+
|
|
508
|
+
=======
|
|
509
|
+
|
|
510
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
511
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
512
|
+
=======
|
|
513
|
+
|
|
514
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
515
|
+
<div className="flex items-center ml-4">
|
|
516
|
+
{getStatusIcon()}
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
|
|
520
|
+
{/* Progress bar */}
|
|
521
|
+
{isProcessing && progress > 0 && (
|
|
522
|
+
<div className="mb-4">
|
|
523
|
+
<div className="w-full bg-gray-200 rounded-full h-2">
|
|
524
|
+
<<<<<<< HEAD
|
|
525
|
+
<<<<<<< HEAD
|
|
526
|
+
<div
|
|
527
|
+
=======
|
|
528
|
+
<<<<<<< HEAD
|
|
529
|
+
<div
|
|
530
|
+
=======
|
|
531
|
+
<div
|
|
532
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
533
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
534
|
+
=======
|
|
535
|
+
<div
|
|
536
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
537
|
+
className={cn("h-2 rounded-full transition-all", getProgressBarColor())}
|
|
538
|
+
style={{ width: `${progress}%` }}
|
|
539
|
+
/>
|
|
540
|
+
</div>
|
|
541
|
+
{message && (
|
|
542
|
+
<p className="text-xs text-gray-600 mt-1">{message}</p>
|
|
543
|
+
)}
|
|
544
|
+
</div>
|
|
545
|
+
)}
|
|
546
|
+
|
|
547
|
+
{/* Error message */}
|
|
548
|
+
{error && message && (
|
|
549
|
+
<div className="mb-4 text-sm text-red-600 flex items-start">
|
|
550
|
+
<AlertCircle size={16} className="mr-1 flex-shrink-0 mt-0.5" />
|
|
551
|
+
{message}
|
|
552
|
+
</div>
|
|
553
|
+
)}
|
|
554
|
+
|
|
555
|
+
<div className="flex items-center justify-between">
|
|
556
|
+
<div className="flex items-center space-x-2">
|
|
557
|
+
{!isInstalled && !isProcessing && (
|
|
558
|
+
<Button
|
|
559
|
+
size="sm"
|
|
560
|
+
onClick={() => handleAction('install', onInstall)}
|
|
561
|
+
className="inline-flex items-center"
|
|
562
|
+
>
|
|
563
|
+
<Download size={16} className="mr-1" />
|
|
564
|
+
Install
|
|
565
|
+
</Button>
|
|
566
|
+
)}
|
|
567
|
+
<<<<<<< HEAD
|
|
568
|
+
<<<<<<< HEAD
|
|
569
|
+
|
|
570
|
+
=======
|
|
571
|
+
<<<<<<< HEAD
|
|
572
|
+
|
|
573
|
+
=======
|
|
574
|
+
|
|
575
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
576
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
577
|
+
=======
|
|
578
|
+
|
|
579
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
580
|
+
{isInstalled && !isProcessing && (
|
|
581
|
+
<>
|
|
582
|
+
<Button
|
|
583
|
+
size="sm"
|
|
584
|
+
variant="outline"
|
|
585
|
+
onClick={() => handleAction('configure', onConfigure)}
|
|
586
|
+
className="inline-flex items-center"
|
|
587
|
+
>
|
|
588
|
+
<Settings size={16} className="mr-1" />
|
|
589
|
+
Configure
|
|
590
|
+
</Button>
|
|
591
|
+
{hasUpdate && (
|
|
592
|
+
<Button
|
|
593
|
+
size="sm"
|
|
594
|
+
variant="outline"
|
|
595
|
+
onClick={() => handleAction('update', onUpdate)}
|
|
596
|
+
className="inline-flex items-center text-blue-600 hover:text-blue-700"
|
|
597
|
+
>
|
|
598
|
+
<RefreshCw size={16} className="mr-1" />
|
|
599
|
+
Update
|
|
600
|
+
</Button>
|
|
601
|
+
)}
|
|
602
|
+
</>
|
|
603
|
+
)}
|
|
604
|
+
<<<<<<< HEAD
|
|
605
|
+
<<<<<<< HEAD
|
|
606
|
+
|
|
607
|
+
=======
|
|
608
|
+
<<<<<<< HEAD
|
|
609
|
+
|
|
610
|
+
=======
|
|
611
|
+
|
|
612
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
613
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
614
|
+
=======
|
|
615
|
+
|
|
616
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
617
|
+
{isProcessing && (
|
|
618
|
+
<Button size="sm" disabled className="inline-flex items-center">
|
|
619
|
+
<LoadingSpinner size="sm" className="mr-1" />
|
|
620
|
+
{installing && 'Installing...'}
|
|
621
|
+
{uninstalling && 'Uninstalling...'}
|
|
622
|
+
{updating && 'Updating...'}
|
|
623
|
+
</Button>
|
|
624
|
+
)}
|
|
625
|
+
</div>
|
|
626
|
+
<<<<<<< HEAD
|
|
627
|
+
<<<<<<< HEAD
|
|
628
|
+
|
|
629
|
+
=======
|
|
630
|
+
<<<<<<< HEAD
|
|
631
|
+
|
|
632
|
+
=======
|
|
633
|
+
|
|
634
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
635
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
636
|
+
=======
|
|
637
|
+
|
|
638
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
639
|
+
<div className="flex items-center space-x-2">
|
|
640
|
+
{integration.docsUrl && (
|
|
641
|
+
<Button
|
|
642
|
+
size="sm"
|
|
643
|
+
variant="ghost"
|
|
644
|
+
onClick={() => window.open(integration.docsUrl, '_blank')}
|
|
645
|
+
className="inline-flex items-center text-xs"
|
|
646
|
+
>
|
|
647
|
+
<ExternalLink size={14} className="mr-1" />
|
|
648
|
+
Docs
|
|
649
|
+
</Button>
|
|
650
|
+
)}
|
|
651
|
+
<<<<<<< HEAD
|
|
652
|
+
<<<<<<< HEAD
|
|
653
|
+
|
|
654
|
+
=======
|
|
655
|
+
<<<<<<< HEAD
|
|
656
|
+
|
|
657
|
+
=======
|
|
658
|
+
|
|
659
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
660
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
661
|
+
=======
|
|
662
|
+
|
|
663
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
664
|
+
{onViewDetails && (
|
|
665
|
+
<Button
|
|
666
|
+
size="sm"
|
|
667
|
+
variant="ghost"
|
|
668
|
+
onClick={() => onViewDetails(integration.name)}
|
|
669
|
+
className="inline-flex items-center text-xs"
|
|
670
|
+
>
|
|
671
|
+
<Info size={14} className="mr-1" />
|
|
672
|
+
Details
|
|
673
|
+
</Button>
|
|
674
|
+
)}
|
|
675
|
+
<<<<<<< HEAD
|
|
676
|
+
<<<<<<< HEAD
|
|
677
|
+
|
|
678
|
+
=======
|
|
679
|
+
<<<<<<< HEAD
|
|
680
|
+
|
|
681
|
+
=======
|
|
682
|
+
|
|
683
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
684
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
685
|
+
=======
|
|
686
|
+
|
|
687
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
688
|
+
{isInstalled && (
|
|
689
|
+
<Button
|
|
690
|
+
size="sm"
|
|
691
|
+
variant="ghost"
|
|
692
|
+
onClick={() => setShowDetails(!showDetails)}
|
|
693
|
+
className="text-xs"
|
|
694
|
+
>
|
|
695
|
+
{showDetails ? 'Less' : 'More'}
|
|
696
|
+
</Button>
|
|
697
|
+
)}
|
|
698
|
+
</div>
|
|
699
|
+
</div>
|
|
700
|
+
|
|
701
|
+
{showDetails && isInstalled && (
|
|
702
|
+
<div className="mt-4 pt-4 border-t border-gray-200">
|
|
703
|
+
<div className="space-y-2 text-sm">
|
|
704
|
+
<div>
|
|
705
|
+
<span className="font-medium text-gray-700">Package:</span>
|
|
706
|
+
<span className="ml-2 text-gray-600 font-mono text-xs">{integration.name}</span>
|
|
707
|
+
</div>
|
|
708
|
+
{integration.endpoints && (
|
|
709
|
+
<div>
|
|
710
|
+
<span className="font-medium text-gray-700">Endpoints:</span>
|
|
711
|
+
<span className="ml-2 text-gray-600">{integration.endpoints.length}</span>
|
|
712
|
+
</div>
|
|
713
|
+
)}
|
|
714
|
+
{integration.lastUpdated && (
|
|
715
|
+
<div>
|
|
716
|
+
<span className="font-medium text-gray-700">Last Updated:</span>
|
|
717
|
+
<span className="ml-2 text-gray-600">
|
|
718
|
+
{new Date(integration.lastUpdated).toLocaleDateString()}
|
|
719
|
+
</span>
|
|
720
|
+
</div>
|
|
721
|
+
)}
|
|
722
|
+
{integration.connections !== undefined && (
|
|
723
|
+
<div>
|
|
724
|
+
<span className="font-medium text-gray-700">Active Connections:</span>
|
|
725
|
+
<span className="ml-2 text-gray-600">{integration.connections}</span>
|
|
726
|
+
</div>
|
|
727
|
+
)}
|
|
728
|
+
</div>
|
|
729
|
+
<<<<<<< HEAD
|
|
730
|
+
<<<<<<< HEAD
|
|
731
|
+
|
|
732
|
+
=======
|
|
733
|
+
<<<<<<< HEAD
|
|
734
|
+
|
|
735
|
+
=======
|
|
736
|
+
|
|
737
|
+
>>>>>>> 652520a5 (Claude Flow RFC related development)
|
|
738
|
+
>>>>>>> 860052b4 (feat: integrate complete management-ui and additional features)
|
|
739
|
+
=======
|
|
740
|
+
|
|
741
|
+
>>>>>>> 7e97f01c (fix: resolve ui-command merge conflicts and update package.json)
|
|
742
|
+
<div className="mt-3 flex justify-between">
|
|
743
|
+
{onTest && (
|
|
744
|
+
<Button
|
|
745
|
+
size="sm"
|
|
746
|
+
variant="outline"
|
|
747
|
+
onClick={() => handleAction('test', onTest)}
|
|
748
|
+
className="inline-flex items-center text-xs"
|
|
749
|
+
>
|
|
750
|
+
<TestTube size={14} className="mr-1" />
|
|
751
|
+
Test Integration
|
|
752
|
+
</Button>
|
|
753
|
+
)}
|
|
754
|
+
<Button
|
|
755
|
+
size="sm"
|
|
756
|
+
variant="destructive"
|
|
757
|
+
onClick={() => handleAction('uninstall', onUninstall)}
|
|
758
|
+
className="inline-flex items-center text-xs"
|
|
759
|
+
>
|
|
760
|
+
Uninstall
|
|
761
|
+
</Button>
|
|
762
|
+
</div>
|
|
763
|
+
</div>
|
|
764
|
+
)}
|
|
765
|
+
</CardContent>
|
|
766
|
+
</Card>
|
|
767
|
+
)
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
export default IntegrationCardEnhanced
|