Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion casa-explorer-ui/src/components/mas/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,3 @@

export {MASTable, MASDataTable, createMASColumns} from './mas-list';
export {MASInfoTab, MASAppsTab, MASScopesTab, MASTracesTab, MASDenyConditionsTab, MASAppsTable} from './mas-details';
export {MASGraphView} from './mas-graph';
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import {useCallback, useMemo, useState} from 'react';
import {lazy, Suspense, useCallback, useMemo, useState} from 'react';
import type React from 'react';
import {useNavigate} from 'react-router-dom';
import {PATHS} from '@/router/paths';
Expand Down Expand Up @@ -42,7 +42,7 @@ import {Button} from '@/components/ui/button';
import {Card} from '@/components/ui/card';
import {Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle} from '@/components/ui/dialog';
import {Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetClose} from '@/components/ui/sheet';
import {MASGraphView} from '@/components/mas/mas-graph';
const MASGraphView = lazy(() => import('@/components/mas/mas-graph/mas-graph-view').then(m => ({default: m.MASGraphView})));
import {toast} from 'sonner';
import type {MAS} from '@/types/mas.types';
import type {App, AppType, Tool} from '@/types/app.types';
Expand Down Expand Up @@ -348,13 +348,15 @@ export function MASAppsTable({mas, apps}: MASAppsTableProps) {
</div>
{view === 'graph' && (
<div className="mt-4">
<MASGraphView
mas={mas}
apps={apps}
onAppClick={openApp}
searchTerm={search}
selectedTypes={selectedTypes}
/>
<Suspense fallback={null}>
<MASGraphView
mas={mas}
apps={apps}
onAppClick={openApp}
searchTerm={search}
selectedTypes={selectedTypes}
/>
</Suspense>
</div>
)}
</div>
Expand Down
28 changes: 16 additions & 12 deletions casa-explorer-ui/src/router/router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,31 @@
* limitations under the License.
*/

import {lazy, Suspense} from 'react';
import {createBrowserRouter} from 'react-router-dom';
import {AppLayout} from '@/components/app-layout';
import {DashboardPage} from '@/pages/dashboard-page';
import {MASPage} from '@/pages/mas/mas-page';
import {MASDetailPage} from '@/pages/mas/mas-detail-page';
import {AuthRequestsPage} from '@/pages/auth-requests/auth-requests-page';
import {AuthRequestDetailPage} from '@/pages/auth-requests/auth-request-detail-page';
import {NotFoundPage} from '@/pages/not-found-page';
import {PATHS} from './paths';

const DashboardPage = lazy(() => import('@/pages/dashboard-page').then(m => ({default: m.DashboardPage})));
const MASPage = lazy(() => import('@/pages/mas/mas-page').then(m => ({default: m.MASPage})));
const MASDetailPage = lazy(() => import('@/pages/mas/mas-detail-page').then(m => ({default: m.MASDetailPage})));
const AuthRequestsPage = lazy(() => import('@/pages/auth-requests/auth-requests-page').then(m => ({default: m.AuthRequestsPage})));
const AuthRequestDetailPage = lazy(() => import('@/pages/auth-requests/auth-request-detail-page').then(m => ({default: m.AuthRequestDetailPage})));
const NotFoundPage = lazy(() => import('@/pages/not-found-page').then(m => ({default: m.NotFoundPage})));

const S = ({children}: {children: React.ReactNode}) => <Suspense fallback={null}>{children}</Suspense>;

export const router = createBrowserRouter([
{
path: PATHS.dashboard,
element: <AppLayout />,
children: [
{index: true, element: <DashboardPage />},
{path: PATHS.mas.list, element: <MASPage />},
{path: PATHS.mas.detailPattern, element: <MASDetailPage />},
{path: PATHS.authRequests.list, element: <AuthRequestsPage />},
{path: PATHS.authRequests.detailPattern, element: <AuthRequestDetailPage />},
{path: '*', element: <NotFoundPage />}
{index: true, element: <S><DashboardPage /></S>},
{path: PATHS.mas.list, element: <S><MASPage /></S>},
{path: PATHS.mas.detailPattern, element: <S><MASDetailPage /></S>},
{path: PATHS.authRequests.list, element: <S><AuthRequestsPage /></S>},
{path: PATHS.authRequests.detailPattern, element: <S><AuthRequestDetailPage /></S>},
{path: '*', element: <S><NotFoundPage /></S>}
]
}
]);
21 changes: 21 additions & 0 deletions casa-explorer-ui/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,27 @@ export default defineConfig({
'@': path.resolve(__dirname, './src')
}
},
build: {
chunkSizeWarningLimit: 1600,
rollupOptions: {
output: {
manualChunks(id) {
if (!id.includes('node_modules')) return;
if (id.includes('elkjs') || id.includes('@xyflow')) return 'vendor-flow';
if (id.includes('recharts') || id.includes('/d3-') || id.includes('/d3/')) return 'vendor-charts';
if (id.includes('@dnd-kit')) return 'vendor-dnd';
if (id.includes('@tanstack')) return 'vendor-query';
if (id.includes('@tabler') || id.includes('lucide-react')) return 'vendor-icons';
if (id.includes('react-hook-form') || id.includes('@hookform') || id.includes('/zod/')) return 'vendor-forms';
if (
id.includes('@radix-ui') || id.includes('radix-ui') ||
id.includes('/cmdk/') || id.includes('/vaul/')
) return 'vendor-radix';
if (id.includes('react-router') || id.includes('react-dom') || id.match(/\/react\//) || id.includes('/sonner/') || id.includes('next-themes')) return 'vendor-react';
}
}
}
},
server: {
port: 1234,
open: true
Expand Down
27 changes: 15 additions & 12 deletions demo_new/helm/templates/banking-data-agent/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,45 @@
# See the License for the specific language governing permissions and
# limitations under the License.

{{- range list .Values.bankingDataAgentA .Values.bankingDataAgentB }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.bankingDataAgent.serviceName }}
namespace: {{ .Release.Namespace }}
name: {{ .serviceName }}
namespace: {{ $.Release.Namespace }}
labels:
app: {{ .Values.bankingDataAgent.serviceName }}
app: {{ .serviceName }}
version: v1
spec:
replicas: {{ .Values.bankingDataAgent.replicas }}
replicas: {{ .replicas }}
selector:
matchLabels:
app: {{ .Values.bankingDataAgent.serviceName }}
app: {{ .serviceName }}
template:
metadata:
labels:
app: {{ .Values.bankingDataAgent.serviceName }}
app: {{ .serviceName }}
version: v1
spec:
{{- if .Values.bankingDataAgent.docker.registry }}
{{- if .docker.registry }}
imagePullSecrets:
- name: regcred
{{- end }}
containers:
- name: {{ .Values.bankingDataAgent.serviceName }}
image: {{ if .Values.bankingDataAgent.docker.registry }}{{ .Values.bankingDataAgent.docker.registry }}/{{ end }}{{ .Values.bankingDataAgent.docker.image }}:{{ .Values.bankingDataAgent.tagversion }}
imagePullPolicy: {{ if .Values.bankingDataAgent.docker.registry }}Always{{ else }}Never{{ end }}
- name: {{ .serviceName }}
image: {{ if .docker.registry }}{{ .docker.registry }}/{{ end }}{{ .docker.image }}:{{ .tagversion }}
imagePullPolicy: {{ if .docker.registry }}Always{{ else }}Never{{ end }}
securityContext:
runAsNonRoot: true
runAsUser: 999
allowPrivilegeEscalation: false
ports:
- containerPort: {{ .Values.bankingDataAgent.servicePort }}
- containerPort: {{ .servicePort }}
name: http
env:
- name: MCP_SERVER_URL
value: {{ .Values.bankingDataAgent.mcpServerUrl | quote }}
value: {{ .mcpServerUrl | quote }}
- name: OPENAI_API_BASE
valueFrom:
secretKeyRef:
Expand All @@ -66,3 +68,4 @@ spec:
limits:
memory: "512Mi"
cpu: "500m"
{{- end }}
13 changes: 8 additions & 5 deletions demo_new/helm/templates/banking-data-agent/service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,20 @@
# See the License for the specific language governing permissions and
# limitations under the License.

{{- range list .Values.bankingDataAgentA .Values.bankingDataAgentB }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.bankingDataAgent.serviceName }}
namespace: {{ .Release.Namespace }}
name: {{ .serviceName }}
namespace: {{ $.Release.Namespace }}
labels:
app: {{ .Values.bankingDataAgent.serviceName }}
app: {{ .serviceName }}
spec:
selector:
app: {{ .Values.bankingDataAgent.serviceName }}
app: {{ .serviceName }}
ports:
- name: http
port: {{ .Values.bankingDataAgent.servicePort }}
port: {{ .servicePort }}
targetPort: http
{{- end }}
46 changes: 23 additions & 23 deletions demo_new/helm/templates/mas.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# Safe MAS: banking-assistant-safe, banking-data-agent, banking-payments-agent, banking-beneficiary-agent, banking-mcp.
# Safe MAS: banking-assistant-safe, banking-data-agent-a, banking-payments-agent-a, banking-beneficiary-agent-safe, banking-mcp-a.
apiVersion: casa.io/v1alpha1
kind: MultiAgentSystem
metadata:
Expand All @@ -23,49 +23,49 @@ spec:
enabledToolChecks: {{ toYaml .Values.masSafe.enabledToolChecks | nindent 4 }}
llm_host: {{ .Values.masSafe.llm_host }}
apps:
- name: {{ .Values.bankingAssistantSafe.serviceName }}
- name: {{ .Values.bankingAssistantSafe.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingAssistantSafe.serviceName }}:{{ .Values.bankingAssistantSafe.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingAssistantSafe.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingDataAgent.serviceName }}
- name: {{ .Values.bankingDataAgentA.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingDataAgent.serviceName }}:{{ .Values.bankingDataAgent.servicePort }}
host: {{ .Values.bankingDataAgentA.serviceName }}:{{ .Values.bankingDataAgentA.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingDataAgent.serviceName }}
kubernetesWorkloadName: {{ .Values.bankingDataAgentA.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingPaymentsAgent.serviceName }}
- name: {{ .Values.bankingPaymentsAgentA.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingPaymentsAgent.serviceName }}:{{ .Values.bankingPaymentsAgent.servicePort }}
host: {{ .Values.bankingPaymentsAgentA.serviceName }}:{{ .Values.bankingPaymentsAgentA.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingPaymentsAgent.serviceName }}
kubernetesWorkloadName: {{ .Values.bankingPaymentsAgentA.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingBeneficiaryAgent.serviceName }}
- name: {{ .Values.bankingBeneficiaryAgent.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingBeneficiaryAgent.serviceName }}:{{ .Values.bankingBeneficiaryAgent.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingBeneficiaryAgent.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.mcp.serviceName }}
- name: {{ .Values.mcpA.appName }}
type: mcp_server
baseUrl:
host: {{ .Values.mcp.serviceName }}:{{ .Values.mcp.servicePort }}
host: {{ .Values.mcpA.serviceName }}:{{ .Values.mcpA.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.mcp.serviceName }}
kubernetesWorkloadName: {{ .Values.mcpA.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"

---
# Compromised MAS: banking-assistant-compromised, banking-beneficiary-agent-compromised, banking-data-agent, banking-payments-agent, banking-mcp.
# Compromised MAS: banking-assistant-compromised, banking-beneficiary-agent-compromised, banking-data-agent-b, banking-payments-agent-b, banking-mcp-b.
apiVersion: casa.io/v1alpha1
kind: MultiAgentSystem
metadata:
Expand All @@ -84,35 +84,35 @@ spec:
kubernetesWorkloadName: {{ .Values.bankingAssistantCompromised.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingDataAgent.serviceName }}
- name: {{ .Values.bankingDataAgentB.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingDataAgent.serviceName }}:{{ .Values.bankingDataAgent.servicePort }}
host: {{ .Values.bankingDataAgentB.serviceName }}:{{ .Values.bankingDataAgentB.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingDataAgent.serviceName }}
kubernetesWorkloadName: {{ .Values.bankingDataAgentB.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingPaymentsAgent.serviceName }}
- name: {{ .Values.bankingPaymentsAgentB.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingPaymentsAgent.serviceName }}:{{ .Values.bankingPaymentsAgent.servicePort }}
host: {{ .Values.bankingPaymentsAgentB.serviceName }}:{{ .Values.bankingPaymentsAgentB.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingPaymentsAgent.serviceName }}
kubernetesWorkloadName: {{ .Values.bankingPaymentsAgentB.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.bankingBeneficiaryAgentCompromised.serviceName }}
- name: {{ .Values.bankingBeneficiaryAgentCompromised.appName }}
type: agent
baseUrl:
host: {{ .Values.bankingBeneficiaryAgentCompromised.serviceName }}:{{ .Values.bankingBeneficiaryAgentCompromised.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.bankingBeneficiaryAgentCompromised.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
- name: {{ .Values.mcp.serviceName }}
- name: {{ .Values.mcpB.appName }}
type: mcp_server
baseUrl:
host: {{ .Values.mcp.serviceName }}:{{ .Values.mcp.servicePort }}
host: {{ .Values.mcpB.serviceName }}:{{ .Values.mcpB.servicePort }}
scheme: http
kubernetesWorkloadName: {{ .Values.mcp.serviceName }}
kubernetesWorkloadName: {{ .Values.mcpB.serviceName }}
httpRequestSchema:
promptFieldJsonPath: "{.conversation}"
25 changes: 14 additions & 11 deletions demo_new/helm/templates/mcp/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,41 @@
# See the License for the specific language governing permissions and
# limitations under the License.

{{- range list .Values.mcpA .Values.mcpB }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.mcp.serviceName }}
namespace: {{ .Release.Namespace }}
name: {{ .serviceName }}
namespace: {{ $.Release.Namespace }}
labels:
app: {{ .Values.mcp.serviceName }}
app: {{ .serviceName }}
version: v1
spec:
replicas: {{ .Values.mcp.replicas }}
replicas: {{ .replicas }}
selector:
matchLabels:
app: {{ .Values.mcp.serviceName }}
app: {{ .serviceName }}
template:
metadata:
labels:
app: {{ .Values.mcp.serviceName }}
app: {{ .serviceName }}
version: v1
spec:
{{- if .Values.mcp.docker.registry }}
{{- if .docker.registry }}
imagePullSecrets:
- name: regcred
{{- end }}
containers:
- name: {{ .Values.mcp.serviceName }}
image: {{ if .Values.mcp.docker.registry }}{{ .Values.mcp.docker.registry }}/{{ end }}{{ .Values.mcp.docker.image }}:{{ .Values.mcp.tagversion }}
imagePullPolicy: {{ if .Values.mcp.docker.registry }}Always{{ else }}Never{{ end }}
- name: {{ .serviceName }}
image: {{ if .docker.registry }}{{ .docker.registry }}/{{ end }}{{ .docker.image }}:{{ .tagversion }}
imagePullPolicy: {{ if .docker.registry }}Always{{ else }}Never{{ end }}
securityContext:
runAsNonRoot: true
runAsUser: 999
allowPrivilegeEscalation: false
ports:
- containerPort: {{ .Values.mcp.servicePort }}
- containerPort: {{ .servicePort }}
name: http
resources:
requests:
Expand All @@ -53,3 +55,4 @@ spec:
limits:
memory: "256Mi"
cpu: "250m"
{{- end }}
Loading
Loading