refactor(web): remove legacy/non-functional admin console pages, align to current product
The Manager console carried screens built to an early control-plane vision that no longer matches how the product runs (desktop client drives tasks; Manager is gateway + status judge). Removed the dead/misleading ones and aligned task overview to the real status model. Frontend only; no backend endpoints touched. Deleted (routes + pages + menu entries): - Resource binding (/sk-sources): mcp-server /api/resources unwired (301) + Azure Key Vault unreachable -> page was inert. - Audit (/audit): only simulated approvals, empty leases, mcp audit unwired. - Events / Templates / Agents pages: legacy control-plane (hardcoded mock templates), not in the main menu but route-reachable. - azure-cloud-binding-sheet + create-agent-deployment-sheet (New run). Task overview (/deployments) kept and fixed: - status now uses Manager-judged display_status (completed / needs_codegen / completed_without_deliverable=fail / running ...) instead of raw phase, so success vs failure is legible. - dropped New run, scope/budget/secret_ref pills, permission-manifest grants table, Simulate; kept the task list, per-task audit timeline and artifacts. Cleaned all menu/nav/dashboard references to the deleted routes (sidebar, top-nav, footer, cockpit, home-hero, agent-hub, task-card-view) and regenerated routeTree.gen.ts. tsc -b and rsbuild build both pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -78,7 +78,6 @@ export function Footer(props: FooterProps) {
|
||||
title: t('footer.columns.docs.title'),
|
||||
links: [
|
||||
{ text: t('Deployments'), href: '/deployments' },
|
||||
{ text: t('Events'), href: '/events' },
|
||||
{ text: t('API Keys'), href: '/keys' },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -7,14 +7,12 @@ import {
|
||||
ClipboardList,
|
||||
Cpu,
|
||||
Layout,
|
||||
ListChecks,
|
||||
Plug,
|
||||
Receipt,
|
||||
Settings,
|
||||
Shield,
|
||||
ShieldAlert,
|
||||
Store,
|
||||
TerminalSquare,
|
||||
Ticket,
|
||||
Wrench,
|
||||
} from 'lucide-react'
|
||||
@@ -76,16 +74,6 @@ export function getSystemSettingsNavGroups(t: TFunction): NavGroup[] {
|
||||
url: '/users',
|
||||
icon: Building2,
|
||||
},
|
||||
{
|
||||
title: t('Templates'),
|
||||
url: '/templates',
|
||||
icon: ListChecks,
|
||||
},
|
||||
{
|
||||
title: t('Agents'),
|
||||
url: '/agents',
|
||||
icon: TerminalSquare,
|
||||
},
|
||||
{
|
||||
title: t('Vendors'),
|
||||
url: '/models/vendors',
|
||||
|
||||
@@ -155,6 +155,10 @@ export type AgentPermissionManifest = {
|
||||
|
||||
export type AgentDeployment = {
|
||||
deployment_id: string
|
||||
// Client-facing mode (sub_agile | swarm) + Manager-judged display_status,
|
||||
// both populated by the backend list/detail responses.
|
||||
mode?: string
|
||||
display_status?: string
|
||||
sub_mode?: AgentSubMode
|
||||
status: string
|
||||
phase: string
|
||||
|
||||
-290
@@ -1,290 +0,0 @@
|
||||
import { useState } from 'react'
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query'
|
||||
import { AlertTriangle, Cloud, ShieldCheck } from 'lucide-react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { toast } from 'sonner'
|
||||
import {
|
||||
createManagerResource,
|
||||
discoverManagerAzureResources,
|
||||
putManagerResourceSecret,
|
||||
updateManagerResource,
|
||||
} from '@/lib/manager-resources'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Input } from '@/components/ui/input'
|
||||
import { Label } from '@/components/ui/label'
|
||||
import {
|
||||
Sheet,
|
||||
SheetContent,
|
||||
SheetDescription,
|
||||
SheetHeader,
|
||||
SheetTitle,
|
||||
} from '@/components/ui/sheet'
|
||||
|
||||
// Azure cloud account binding via manual Service Principal credentials.
|
||||
// The Manager creates a local ResourceBinding first, writes the
|
||||
// client_secret to Azure Key Vault via /api/resources/:id/secret, stores
|
||||
// only azkv://... on the resource row, then asks Manager to enumerate ARM
|
||||
// resources and persist them as cloud_resource bindings.
|
||||
//
|
||||
// Field map → Manager ResourceBinding:
|
||||
// resource_type = 'cloud_account'
|
||||
// name = display_name
|
||||
// external_id = subscription_id
|
||||
// metadata = { subscription_id, tenant_id, client_id }
|
||||
// secret_ref = azkv://<vault>/secrets/<name>
|
||||
// constraints = {} (resource group filters can be added later)
|
||||
// permission_scope= { actions: ['azure:read'] }
|
||||
|
||||
interface Props {
|
||||
open: boolean
|
||||
onOpenChange: (next: boolean) => void
|
||||
vaultConfigured?: boolean
|
||||
}
|
||||
|
||||
export function AzureCloudBindingSheet({
|
||||
open,
|
||||
onOpenChange,
|
||||
vaultConfigured,
|
||||
}: Props) {
|
||||
const { t } = useTranslation()
|
||||
const qc = useQueryClient()
|
||||
|
||||
const [form, setForm] = useState({
|
||||
name: '',
|
||||
subscription_id: '',
|
||||
tenant_id: '',
|
||||
client_id: '',
|
||||
client_secret: '',
|
||||
})
|
||||
|
||||
const mutation = useMutation({
|
||||
mutationFn: async () => {
|
||||
if (!vaultConfigured) {
|
||||
throw new Error(t('Azure Key Vault is not ready'))
|
||||
}
|
||||
const pending = await createManagerResource({
|
||||
resource_type: 'cloud_account',
|
||||
name: form.name.trim(),
|
||||
provider: 'azure',
|
||||
external_id: form.subscription_id.trim(),
|
||||
binding_scope: `azure:${form.subscription_id.trim()}`,
|
||||
metadata: {
|
||||
subscription_id: form.subscription_id.trim(),
|
||||
tenant_id: form.tenant_id.trim(),
|
||||
client_id: form.client_id.trim(),
|
||||
},
|
||||
permission_scope: { actions: ['azure:read'] },
|
||||
constraints: {},
|
||||
status: 'pending',
|
||||
})
|
||||
const secret = await putManagerResourceSecret(pending.id, {
|
||||
subscription_id: form.subscription_id.trim(),
|
||||
tenant_id: form.tenant_id.trim(),
|
||||
client_id: form.client_id.trim(),
|
||||
client_secret: form.client_secret,
|
||||
})
|
||||
const account = await updateManagerResource(pending.id, {
|
||||
resource_type: 'cloud_account',
|
||||
name: pending.name,
|
||||
provider: pending.provider,
|
||||
external_id: pending.external_id,
|
||||
binding_scope: pending.binding_scope,
|
||||
secret_ref: secret.secret_ref,
|
||||
metadata: pending.metadata,
|
||||
permission_scope: pending.permission_scope,
|
||||
constraints: pending.constraints,
|
||||
status: 'active',
|
||||
})
|
||||
try {
|
||||
const discovery = await discoverManagerAzureResources(account.id)
|
||||
return { account, discovery, discoveryError: '' }
|
||||
} catch (err) {
|
||||
return {
|
||||
account,
|
||||
discovery: null,
|
||||
discoveryError:
|
||||
err instanceof Error ? err.message : t('Azure discovery failed'),
|
||||
}
|
||||
}
|
||||
},
|
||||
onSuccess: (result) => {
|
||||
void qc.invalidateQueries({ queryKey: ['heicode', 'resources'] })
|
||||
void qc.invalidateQueries({ queryKey: ['manager', 'cloud-resources'] })
|
||||
toast.success(t('Azure subscription bound'))
|
||||
if (result.discoveryError) {
|
||||
toast.warning(result.discoveryError)
|
||||
} else if (result.discovery) {
|
||||
toast.success(
|
||||
t('{{n}} Azure resources discovered', {
|
||||
n: result.discovery.discovered,
|
||||
})
|
||||
)
|
||||
}
|
||||
onOpenChange(false)
|
||||
setForm({
|
||||
name: '',
|
||||
subscription_id: '',
|
||||
tenant_id: '',
|
||||
client_id: '',
|
||||
client_secret: '',
|
||||
})
|
||||
},
|
||||
onError: (err) => {
|
||||
toast.error(
|
||||
err instanceof Error ? err.message : t('Failed to bind Azure account')
|
||||
)
|
||||
},
|
||||
})
|
||||
|
||||
const canSubmit =
|
||||
form.name.trim() !== '' &&
|
||||
form.subscription_id.trim() !== '' &&
|
||||
form.tenant_id.trim() !== '' &&
|
||||
form.client_id.trim() !== '' &&
|
||||
form.client_secret.trim() !== '' &&
|
||||
Boolean(vaultConfigured)
|
||||
|
||||
return (
|
||||
<Sheet open={open} onOpenChange={onOpenChange}>
|
||||
<SheetContent className='w-[min(560px,96vw)] overflow-y-auto sm:max-w-none'>
|
||||
<SheetHeader>
|
||||
<SheetTitle className='flex items-center gap-2'>
|
||||
<Cloud className='text-primary h-5 w-5' />
|
||||
{t('Connect Azure subscription')}
|
||||
</SheetTitle>
|
||||
<SheetDescription>
|
||||
{t(
|
||||
'Paste a Service Principal that has at least Reader role on the subscription. Heicode uses it to enumerate cloud resources (VMs, databases, AKS, storage). AWS and GCP are coming soon.'
|
||||
)}
|
||||
</SheetDescription>
|
||||
</SheetHeader>
|
||||
|
||||
{!vaultConfigured && (
|
||||
<div className='mt-4 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3 text-xs leading-relaxed'>
|
||||
<p className='flex items-center gap-1.5 font-semibold text-amber-400'>
|
||||
<AlertTriangle className='h-3.5 w-3.5' />
|
||||
{t('Secret vault not yet configured')}
|
||||
</p>
|
||||
<p className='text-muted-foreground mt-1.5'>
|
||||
{t(
|
||||
'Azure Key Vault is not ready yet (see System settings → Secret vault status). The subscription cannot be bound until Manager can write the client_secret to Key Vault.'
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className='mt-4 grid gap-3 text-sm'>
|
||||
<div>
|
||||
<Label htmlFor='az-name'>{t('Display name')}</Label>
|
||||
<Input
|
||||
id='az-name'
|
||||
value={form.name}
|
||||
onChange={(e) => setForm((v) => ({ ...v, name: e.target.value }))}
|
||||
placeholder='production-azure'
|
||||
className='mt-1'
|
||||
/>
|
||||
</div>
|
||||
<div className='grid gap-3 sm:grid-cols-2'>
|
||||
<div>
|
||||
<Label htmlFor='az-sub'>{t('Subscription ID')}</Label>
|
||||
<Input
|
||||
id='az-sub'
|
||||
value={form.subscription_id}
|
||||
onChange={(e) =>
|
||||
setForm((v) => ({ ...v, subscription_id: e.target.value }))
|
||||
}
|
||||
placeholder='12345678-1234-1234-1234-1234567890ab'
|
||||
className='mt-1 font-mono text-xs'
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Label htmlFor='az-tenant'>{t('Tenant ID')}</Label>
|
||||
<Input
|
||||
id='az-tenant'
|
||||
value={form.tenant_id}
|
||||
onChange={(e) =>
|
||||
setForm((v) => ({ ...v, tenant_id: e.target.value }))
|
||||
}
|
||||
placeholder='12345678-1234-1234-1234-1234567890ab'
|
||||
className='mt-1 font-mono text-xs'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='grid gap-3 sm:grid-cols-2'>
|
||||
<div>
|
||||
<Label htmlFor='az-client'>
|
||||
{t('Client ID (Application ID)')}
|
||||
</Label>
|
||||
<Input
|
||||
id='az-client'
|
||||
value={form.client_id}
|
||||
onChange={(e) =>
|
||||
setForm((v) => ({ ...v, client_id: e.target.value }))
|
||||
}
|
||||
placeholder='12345678-1234-1234-1234-1234567890ab'
|
||||
className='mt-1 font-mono text-xs'
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<Label htmlFor='az-secret'>{t('Client secret')}</Label>
|
||||
<Input
|
||||
id='az-secret'
|
||||
type='password'
|
||||
value={form.client_secret}
|
||||
onChange={(e) =>
|
||||
setForm((v) => ({ ...v, client_secret: e.target.value }))
|
||||
}
|
||||
placeholder='********'
|
||||
className='mt-1 font-mono text-xs'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='bg-card/40 text-muted-foreground mt-2 rounded-lg border border-dashed p-3 text-xs'>
|
||||
<p className='text-foreground flex items-center gap-1.5 font-medium'>
|
||||
<ShieldCheck className='text-primary h-3.5 w-3.5' />
|
||||
{t('What Heicode will and will not do')}
|
||||
</p>
|
||||
<ul className='mt-2 space-y-1'>
|
||||
<li>· {t('Read-only ARM access (Reader role recommended)')}</li>
|
||||
<li>
|
||||
·{' '}
|
||||
{t('Auto-discover VM / database / AKS / storage')}
|
||||
</li>
|
||||
<li>
|
||||
·{' '}
|
||||
{t(
|
||||
'Never modify resources without explicit approval from the desktop client'
|
||||
)}
|
||||
</li>
|
||||
<li>
|
||||
·{' '}
|
||||
{t(
|
||||
'Never write the client_secret into Manager logs or audit payloads'
|
||||
)}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='mt-4 flex justify-end gap-2'>
|
||||
<Button
|
||||
type='button'
|
||||
variant='outline'
|
||||
onClick={() => onOpenChange(false)}
|
||||
disabled={mutation.isPending}
|
||||
>
|
||||
{t('Cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
type='button'
|
||||
onClick={() => mutation.mutate()}
|
||||
disabled={!canSubmit || mutation.isPending}
|
||||
>
|
||||
{mutation.isPending ? t('Binding...') : t('Bind subscription')}
|
||||
</Button>
|
||||
</div>
|
||||
</SheetContent>
|
||||
</Sheet>
|
||||
)
|
||||
}
|
||||
-1509
File diff suppressed because it is too large
Load Diff
+20
-2021
File diff suppressed because it is too large
Load Diff
+1
-5
@@ -5,11 +5,7 @@ type AgentHubProps = {
|
||||
description: string
|
||||
}
|
||||
|
||||
const quickLinks = [
|
||||
{ title: 'Deployments', to: '/deployments' as const },
|
||||
{ title: 'Events', to: '/events' as const },
|
||||
{ title: 'Audit', to: '/audit' as const },
|
||||
]
|
||||
const quickLinks = [{ title: 'Deployments', to: '/deployments' as const }]
|
||||
|
||||
export function AgentHub(props: AgentHubProps) {
|
||||
return (
|
||||
|
||||
@@ -12,14 +12,11 @@ import {
|
||||
PlayCircle,
|
||||
Rocket,
|
||||
ScrollText,
|
||||
ShieldCheck,
|
||||
StopCircle,
|
||||
GitBranch,
|
||||
} from 'lucide-react'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import {
|
||||
getAgentAuditLogs,
|
||||
listAgentDeployments,
|
||||
type AgentDeployment,
|
||||
} from '@/features/agent-console/api'
|
||||
@@ -149,12 +146,6 @@ export function CockpitView() {
|
||||
refetchInterval: 30_000,
|
||||
})
|
||||
|
||||
const auditQuery = useQuery({
|
||||
queryKey: ['cockpit', 'audit'],
|
||||
queryFn: getAgentAuditLogs,
|
||||
refetchInterval: 60_000,
|
||||
})
|
||||
|
||||
const stats = useMemo(() => {
|
||||
const list: AgentDeployment[] = deploymentsQuery.data ?? []
|
||||
const counters: Record<StatusKey, number> = {
|
||||
@@ -189,11 +180,6 @@ export function CockpitView() {
|
||||
[stats.list]
|
||||
)
|
||||
|
||||
const auditFeed = useMemo(() => {
|
||||
const items = (auditQuery.data ?? []) as Array<Record<string, unknown>>
|
||||
return items.slice(0, 8)
|
||||
}, [auditQuery.data])
|
||||
|
||||
return (
|
||||
<div className='space-y-6'>
|
||||
{/* Tier 1: Status */}
|
||||
@@ -296,7 +282,7 @@ export function CockpitView() {
|
||||
variant='outline'
|
||||
className='shrink-0 opacity-70 group-hover:opacity-100'
|
||||
>
|
||||
<Link to='/events'>
|
||||
<Link to='/deployments'>
|
||||
<ScrollText className='mr-1 h-3.5 w-3.5' />
|
||||
{t('Inspect')}
|
||||
</Link>
|
||||
@@ -308,61 +294,6 @@ export function CockpitView() {
|
||||
)}
|
||||
</section>
|
||||
|
||||
<section className='rounded-2xl border border-[color-mix(in_oklch,var(--primary)_22%,var(--border))] bg-[color-mix(in_oklch,var(--card)_70%,transparent)] p-5 backdrop-blur'>
|
||||
<header className='mb-4 flex items-center justify-between'>
|
||||
<div>
|
||||
<p className='text-[11px] font-semibold tracking-[0.16em] text-muted-foreground uppercase'>
|
||||
{t('Audit timeline')}
|
||||
</p>
|
||||
<h3 className='mt-1 text-lg font-semibold'>
|
||||
{t('Tenant-scoped activity')}
|
||||
</h3>
|
||||
</div>
|
||||
<Button asChild size='sm' variant='ghost' className='gap-1'>
|
||||
<Link to='/audit'>
|
||||
{t('Open Audit')}
|
||||
<ArrowUpRight className='h-3.5 w-3.5' />
|
||||
</Link>
|
||||
</Button>
|
||||
</header>
|
||||
|
||||
{auditQuery.isLoading ? (
|
||||
<div className='space-y-3'>
|
||||
{Array.from({ length: 5 }).map((_, idx) => (
|
||||
<div
|
||||
key={idx}
|
||||
className='h-12 animate-pulse rounded-lg bg-muted/40'
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
) : auditFeed.length === 0 ? (
|
||||
<div className='rounded-xl border border-dashed border-[color-mix(in_oklch,var(--primary)_22%,var(--border))] p-8 text-center text-sm text-muted-foreground'>
|
||||
{t('No audit events captured yet.')}
|
||||
</div>
|
||||
) : (
|
||||
<ol className='relative ms-2 space-y-4 border-s border-[color-mix(in_oklch,var(--primary)_18%,var(--border))] ps-4'>
|
||||
{auditFeed.map((entry, idx) => {
|
||||
const action = String(entry.action || entry.event || 'event')
|
||||
const actor = String(entry.actor || entry.user || 'system')
|
||||
const occurred = String(entry.occurred_at || entry.timestamp || '')
|
||||
return (
|
||||
<li key={idx} className='relative'>
|
||||
<span className='absolute -left-[21px] top-1.5 inline-block h-2 w-2 rounded-full bg-primary shadow-[0_0_0_3px_color-mix(in_oklch,var(--primary)_25%,transparent)]' />
|
||||
<p className='font-mono text-[11px] uppercase tracking-[0.14em] text-primary'>
|
||||
{action}
|
||||
</p>
|
||||
<p className='mt-0.5 text-sm text-foreground/90'>
|
||||
{actor}
|
||||
</p>
|
||||
<p className='text-[11px] text-muted-foreground'>
|
||||
{occurred ? `${formatRelative(occurred)} ago` : '—'}
|
||||
</p>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
</ol>
|
||||
)}
|
||||
</section>
|
||||
</div>
|
||||
|
||||
{/* Tier 3: Action */}
|
||||
@@ -395,18 +326,6 @@ export function CockpitView() {
|
||||
desc={t('Stop a deployment and capture an audit record.')}
|
||||
to='/deployments'
|
||||
/>
|
||||
<ActionTile
|
||||
icon={ShieldCheck}
|
||||
title={t('Review audit')}
|
||||
desc={t('Filter by actor, action, and tenant.')}
|
||||
to='/audit'
|
||||
/>
|
||||
<ActionTile
|
||||
icon={GitBranch}
|
||||
title={t('Inspect Git sources')}
|
||||
desc={t('Inspect Git sources description')}
|
||||
to='/sk-sources'
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -422,7 +341,7 @@ function ActionTile({
|
||||
icon: React.ComponentType<{ className?: string }>
|
||||
title: string
|
||||
desc: string
|
||||
to: '/deployments' | '/audit' | '/sk-sources'
|
||||
to: '/deployments'
|
||||
}) {
|
||||
return (
|
||||
<Link
|
||||
|
||||
@@ -30,7 +30,6 @@ import {
|
||||
GitBranch,
|
||||
PlayCircle,
|
||||
Rocket,
|
||||
ShieldCheck,
|
||||
Sparkles,
|
||||
UserCog,
|
||||
XCircle,
|
||||
@@ -444,12 +443,6 @@ function HelperEntries({ t }: { t: ReturnType<typeof useTranslation>['t'] }) {
|
||||
desc: string
|
||||
to: string
|
||||
}> = [
|
||||
{
|
||||
Icon: GitBranch,
|
||||
title: t('Preparation checklist'),
|
||||
desc: t('Connect code, SK, docs and cloud accounts'),
|
||||
to: '/sk-sources',
|
||||
},
|
||||
{
|
||||
Icon: Download,
|
||||
title: t('Heicode desktop client'),
|
||||
@@ -468,12 +461,6 @@ function HelperEntries({ t }: { t: ReturnType<typeof useTranslation>['t'] }) {
|
||||
desc: t('Tokens, password and active sessions'),
|
||||
to: '/profile',
|
||||
},
|
||||
{
|
||||
Icon: ShieldCheck,
|
||||
title: t('Recent audit'),
|
||||
desc: t('Approvals, scope changes and credential rotations'),
|
||||
to: '/audit',
|
||||
},
|
||||
{
|
||||
Icon: Rocket,
|
||||
title: t('Task overview'),
|
||||
|
||||
+17
-56
@@ -15,7 +15,6 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
||||
import { Link, getRouteApi } from '@tanstack/react-router'
|
||||
import {
|
||||
ArrowLeft,
|
||||
ArrowRight,
|
||||
CheckCircle2,
|
||||
CircleDashed,
|
||||
GitBranch,
|
||||
@@ -140,13 +139,14 @@ function iconForAction(deeplink: string): typeof GitBranch {
|
||||
return Rocket
|
||||
}
|
||||
|
||||
/** Manager-side route normalization. mcp-server returns
|
||||
* `/manager/resources?from=task` but Manager's actual route is `/sk-sources`. */
|
||||
/** Manager-side route normalization. Legacy deep-links from older mcp-server
|
||||
* payloads (resources / team / audit) now collapse to the live task overview;
|
||||
* wallet keeps its own route. */
|
||||
function normalizeDeeplink(deeplink: string): string {
|
||||
return deeplink
|
||||
.replace(/^\/manager\/resources/i, '/sk-sources')
|
||||
.replace(/^\/manager\/team/i, '/sk-sources')
|
||||
.replace(/^\/manager\/audit/i, '/audit')
|
||||
.replace(/^\/manager\/resources/i, '/deployments')
|
||||
.replace(/^\/manager\/team/i, '/deployments')
|
||||
.replace(/^\/manager\/audit/i, '/deployments')
|
||||
.replace(/^\/manager\/wallet/i, '/wallet')
|
||||
.replace(/^\/manager\//i, '/')
|
||||
}
|
||||
@@ -459,41 +459,17 @@ export function TaskCardView() {
|
||||
)
|
||||
})
|
||||
) : (
|
||||
<>
|
||||
<Button
|
||||
asChild
|
||||
size='sm'
|
||||
variant='outline'
|
||||
className='rounded-xl'
|
||||
>
|
||||
<Link to='/sk-sources'>
|
||||
<GitBranch className='mr-1 h-3.5 w-3.5' />
|
||||
{t('Open preparation checklist')}
|
||||
</Link>
|
||||
</Button>
|
||||
<Button
|
||||
asChild
|
||||
size='sm'
|
||||
variant='outline'
|
||||
className='rounded-xl'
|
||||
>
|
||||
<Link to='/audit'>
|
||||
<ShieldCheck className='mr-1 h-3.5 w-3.5' />
|
||||
{t('Audit & approvals')}
|
||||
</Link>
|
||||
</Button>
|
||||
<Button
|
||||
asChild
|
||||
size='sm'
|
||||
variant='outline'
|
||||
className='rounded-xl'
|
||||
>
|
||||
<Link to='/wallet'>
|
||||
<Wallet className='mr-1 h-3.5 w-3.5' />
|
||||
{t('Budget & usage')}
|
||||
</Link>
|
||||
</Button>
|
||||
</>
|
||||
<Button
|
||||
asChild
|
||||
size='sm'
|
||||
variant='outline'
|
||||
className='rounded-xl'
|
||||
>
|
||||
<Link to='/wallet'>
|
||||
<Wallet className='mr-1 h-3.5 w-3.5' />
|
||||
{t('Budget & usage')}
|
||||
</Link>
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@@ -527,21 +503,6 @@ export function TaskCardView() {
|
||||
? t('Creating deployment')
|
||||
: t('Create Manager deployment')}
|
||||
</Button>
|
||||
<Button
|
||||
asChild
|
||||
size='sm'
|
||||
className='gap-1 rounded-xl text-white'
|
||||
style={{
|
||||
backgroundImage: 'var(--gradient-brand-btn)',
|
||||
border: '1px solid rgba(255,255,255,0.16)',
|
||||
}}
|
||||
>
|
||||
<Link to='/sk-sources'>
|
||||
<Rocket className='h-3.5 w-3.5' />
|
||||
{t('Go to Manager preparation')}
|
||||
<ArrowRight className='h-3.5 w-3.5' />
|
||||
</Link>
|
||||
</Button>
|
||||
</footer>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -29,9 +29,6 @@ const DEFAULT_SIDEBAR_MODULES: SidebarModulesAdminConfig = {
|
||||
enabled: true,
|
||||
overview: true,
|
||||
deployments: true,
|
||||
events: true,
|
||||
sk: true,
|
||||
audit: true,
|
||||
},
|
||||
admin: {
|
||||
enabled: true,
|
||||
@@ -44,9 +41,6 @@ const URL_TO_CONFIG_MAP: Record<string, { section: string; module: string }> = {
|
||||
'/dashboard': { section: 'cockpit', module: 'overview' },
|
||||
'/dashboard/overview': { section: 'cockpit', module: 'overview' },
|
||||
'/deployments': { section: 'cockpit', module: 'deployments' },
|
||||
'/events': { section: 'cockpit', module: 'events' },
|
||||
'/sk-sources': { section: 'cockpit', module: 'sk' },
|
||||
'/audit': { section: 'cockpit', module: 'audit' },
|
||||
'/users': { section: 'admin', module: 'tenants' },
|
||||
'/system-settings/general': { section: 'admin', module: 'settings' },
|
||||
'/system-settings': { section: 'admin', module: 'settings' },
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import {
|
||||
Command,
|
||||
Download,
|
||||
GitBranch,
|
||||
LayoutDashboard,
|
||||
Rocket,
|
||||
Settings,
|
||||
ShieldCheck,
|
||||
Smartphone,
|
||||
UserCog,
|
||||
Wallet,
|
||||
@@ -48,21 +46,11 @@ export function useSidebarData(): SidebarData {
|
||||
url: '/dashboard',
|
||||
icon: LayoutDashboard,
|
||||
},
|
||||
{
|
||||
title: t('Resource binding'),
|
||||
url: '/sk-sources',
|
||||
icon: GitBranch,
|
||||
},
|
||||
{
|
||||
title: t('Task overview'),
|
||||
url: '/deployments',
|
||||
icon: Rocket,
|
||||
},
|
||||
{
|
||||
title: t('Audit'),
|
||||
url: '/audit',
|
||||
icon: ShieldCheck,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -110,8 +98,6 @@ export function useSidebarData(): SidebarData {
|
||||
'/channels',
|
||||
'/users',
|
||||
'/redemption-codes',
|
||||
'/templates',
|
||||
'/agents',
|
||||
'/subscriptions',
|
||||
'/models',
|
||||
'/usage-logs',
|
||||
|
||||
@@ -66,11 +66,5 @@ export function useTopNavLinks(): TopNavLink[] {
|
||||
if (modules?.deployments !== false) {
|
||||
links.push({ title: t('Deployments'), href: '/deployments' })
|
||||
}
|
||||
if (modules?.events !== false) {
|
||||
links.push({ title: t('Events'), href: '/events' })
|
||||
}
|
||||
if (modules?.audit !== false) {
|
||||
links.push({ title: t('Audit'), href: '/audit' })
|
||||
}
|
||||
return links
|
||||
}
|
||||
|
||||
-109
@@ -35,24 +35,19 @@ import { Route as PricingModelIdIndexRouteImport } from './routes/pricing/$model
|
||||
import { Route as AuthenticatedWalletIndexRouteImport } from './routes/_authenticated/wallet/index'
|
||||
import { Route as AuthenticatedUsersIndexRouteImport } from './routes/_authenticated/users/index'
|
||||
import { Route as AuthenticatedUsageLogsIndexRouteImport } from './routes/_authenticated/usage-logs/index'
|
||||
import { Route as AuthenticatedTemplatesIndexRouteImport } from './routes/_authenticated/templates/index'
|
||||
import { Route as AuthenticatedSystemSettingsIndexRouteImport } from './routes/_authenticated/system-settings/index'
|
||||
import { Route as AuthenticatedSubscriptionsIndexRouteImport } from './routes/_authenticated/subscriptions/index'
|
||||
import { Route as AuthenticatedSkSourcesIndexRouteImport } from './routes/_authenticated/sk-sources/index'
|
||||
import { Route as AuthenticatedRedemptionCodesIndexRouteImport } from './routes/_authenticated/redemption-codes/index'
|
||||
import { Route as AuthenticatedProfileIndexRouteImport } from './routes/_authenticated/profile/index'
|
||||
import { Route as AuthenticatedPlaygroundIndexRouteImport } from './routes/_authenticated/playground/index'
|
||||
import { Route as AuthenticatedModelsIndexRouteImport } from './routes/_authenticated/models/index'
|
||||
import { Route as AuthenticatedKeysIndexRouteImport } from './routes/_authenticated/keys/index'
|
||||
import { Route as AuthenticatedEventsIndexRouteImport } from './routes/_authenticated/events/index'
|
||||
import { Route as AuthenticatedDevicesIndexRouteImport } from './routes/_authenticated/devices/index'
|
||||
import { Route as AuthenticatedDesktopClientIndexRouteImport } from './routes/_authenticated/desktop-client/index'
|
||||
import { Route as AuthenticatedDeploymentsIndexRouteImport } from './routes/_authenticated/deployments/index'
|
||||
import { Route as AuthenticatedDashboardIndexRouteImport } from './routes/_authenticated/dashboard/index'
|
||||
import { Route as AuthenticatedChannelsIndexRouteImport } from './routes/_authenticated/channels/index'
|
||||
import { Route as AuthenticatedAvailableModelsIndexRouteImport } from './routes/_authenticated/available-models/index'
|
||||
import { Route as AuthenticatedAuditIndexRouteImport } from './routes/_authenticated/audit/index'
|
||||
import { Route as AuthenticatedAgentsIndexRouteImport } from './routes/_authenticated/agents/index'
|
||||
import { Route as AuthenticatedUsageLogsSectionRouteImport } from './routes/_authenticated/usage-logs/$section'
|
||||
import { Route as AuthenticatedTasksIdRouteImport } from './routes/_authenticated/tasks/$id'
|
||||
import { Route as AuthenticatedModelsSectionRouteImport } from './routes/_authenticated/models/$section'
|
||||
@@ -206,12 +201,6 @@ const AuthenticatedUsageLogsIndexRoute =
|
||||
path: '/usage-logs/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedTemplatesIndexRoute =
|
||||
AuthenticatedTemplatesIndexRouteImport.update({
|
||||
id: '/templates/',
|
||||
path: '/templates/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedSystemSettingsIndexRoute =
|
||||
AuthenticatedSystemSettingsIndexRouteImport.update({
|
||||
id: '/',
|
||||
@@ -224,12 +213,6 @@ const AuthenticatedSubscriptionsIndexRoute =
|
||||
path: '/subscriptions/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedSkSourcesIndexRoute =
|
||||
AuthenticatedSkSourcesIndexRouteImport.update({
|
||||
id: '/sk-sources/',
|
||||
path: '/sk-sources/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedRedemptionCodesIndexRoute =
|
||||
AuthenticatedRedemptionCodesIndexRouteImport.update({
|
||||
id: '/redemption-codes/',
|
||||
@@ -259,12 +242,6 @@ const AuthenticatedKeysIndexRoute = AuthenticatedKeysIndexRouteImport.update({
|
||||
path: '/keys/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedEventsIndexRoute =
|
||||
AuthenticatedEventsIndexRouteImport.update({
|
||||
id: '/events/',
|
||||
path: '/events/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedDevicesIndexRoute =
|
||||
AuthenticatedDevicesIndexRouteImport.update({
|
||||
id: '/devices/',
|
||||
@@ -301,17 +278,6 @@ const AuthenticatedAvailableModelsIndexRoute =
|
||||
path: '/available-models/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedAuditIndexRoute = AuthenticatedAuditIndexRouteImport.update({
|
||||
id: '/audit/',
|
||||
path: '/audit/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedAgentsIndexRoute =
|
||||
AuthenticatedAgentsIndexRouteImport.update({
|
||||
id: '/agents/',
|
||||
path: '/agents/',
|
||||
getParentRoute: () => AuthenticatedRouteRoute,
|
||||
} as any)
|
||||
const AuthenticatedUsageLogsSectionRoute =
|
||||
AuthenticatedUsageLogsSectionRouteImport.update({
|
||||
id: '/usage-logs/$section',
|
||||
@@ -464,24 +430,19 @@ export interface FileRoutesByFullPath {
|
||||
'/models/$section': typeof AuthenticatedModelsSectionRoute
|
||||
'/tasks/$id': typeof AuthenticatedTasksIdRoute
|
||||
'/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
|
||||
'/agents/': typeof AuthenticatedAgentsIndexRoute
|
||||
'/audit/': typeof AuthenticatedAuditIndexRoute
|
||||
'/available-models/': typeof AuthenticatedAvailableModelsIndexRoute
|
||||
'/channels/': typeof AuthenticatedChannelsIndexRoute
|
||||
'/dashboard/': typeof AuthenticatedDashboardIndexRoute
|
||||
'/deployments/': typeof AuthenticatedDeploymentsIndexRoute
|
||||
'/desktop-client/': typeof AuthenticatedDesktopClientIndexRoute
|
||||
'/devices/': typeof AuthenticatedDevicesIndexRoute
|
||||
'/events/': typeof AuthenticatedEventsIndexRoute
|
||||
'/keys/': typeof AuthenticatedKeysIndexRoute
|
||||
'/models/': typeof AuthenticatedModelsIndexRoute
|
||||
'/playground/': typeof AuthenticatedPlaygroundIndexRoute
|
||||
'/profile/': typeof AuthenticatedProfileIndexRoute
|
||||
'/redemption-codes/': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/sk-sources/': typeof AuthenticatedSkSourcesIndexRoute
|
||||
'/subscriptions/': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/system-settings/': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/templates/': typeof AuthenticatedTemplatesIndexRoute
|
||||
'/usage-logs/': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/users/': typeof AuthenticatedUsersIndexRoute
|
||||
'/wallet/': typeof AuthenticatedWalletIndexRoute
|
||||
@@ -528,24 +489,19 @@ export interface FileRoutesByTo {
|
||||
'/models/$section': typeof AuthenticatedModelsSectionRoute
|
||||
'/tasks/$id': typeof AuthenticatedTasksIdRoute
|
||||
'/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
|
||||
'/agents': typeof AuthenticatedAgentsIndexRoute
|
||||
'/audit': typeof AuthenticatedAuditIndexRoute
|
||||
'/available-models': typeof AuthenticatedAvailableModelsIndexRoute
|
||||
'/channels': typeof AuthenticatedChannelsIndexRoute
|
||||
'/dashboard': typeof AuthenticatedDashboardIndexRoute
|
||||
'/deployments': typeof AuthenticatedDeploymentsIndexRoute
|
||||
'/desktop-client': typeof AuthenticatedDesktopClientIndexRoute
|
||||
'/devices': typeof AuthenticatedDevicesIndexRoute
|
||||
'/events': typeof AuthenticatedEventsIndexRoute
|
||||
'/keys': typeof AuthenticatedKeysIndexRoute
|
||||
'/models': typeof AuthenticatedModelsIndexRoute
|
||||
'/playground': typeof AuthenticatedPlaygroundIndexRoute
|
||||
'/profile': typeof AuthenticatedProfileIndexRoute
|
||||
'/redemption-codes': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/sk-sources': typeof AuthenticatedSkSourcesIndexRoute
|
||||
'/subscriptions': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/system-settings': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/templates': typeof AuthenticatedTemplatesIndexRoute
|
||||
'/usage-logs': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/users': typeof AuthenticatedUsersIndexRoute
|
||||
'/wallet': typeof AuthenticatedWalletIndexRoute
|
||||
@@ -596,24 +552,19 @@ export interface FileRoutesById {
|
||||
'/_authenticated/models/$section': typeof AuthenticatedModelsSectionRoute
|
||||
'/_authenticated/tasks/$id': typeof AuthenticatedTasksIdRoute
|
||||
'/_authenticated/usage-logs/$section': typeof AuthenticatedUsageLogsSectionRoute
|
||||
'/_authenticated/agents/': typeof AuthenticatedAgentsIndexRoute
|
||||
'/_authenticated/audit/': typeof AuthenticatedAuditIndexRoute
|
||||
'/_authenticated/available-models/': typeof AuthenticatedAvailableModelsIndexRoute
|
||||
'/_authenticated/channels/': typeof AuthenticatedChannelsIndexRoute
|
||||
'/_authenticated/dashboard/': typeof AuthenticatedDashboardIndexRoute
|
||||
'/_authenticated/deployments/': typeof AuthenticatedDeploymentsIndexRoute
|
||||
'/_authenticated/desktop-client/': typeof AuthenticatedDesktopClientIndexRoute
|
||||
'/_authenticated/devices/': typeof AuthenticatedDevicesIndexRoute
|
||||
'/_authenticated/events/': typeof AuthenticatedEventsIndexRoute
|
||||
'/_authenticated/keys/': typeof AuthenticatedKeysIndexRoute
|
||||
'/_authenticated/models/': typeof AuthenticatedModelsIndexRoute
|
||||
'/_authenticated/playground/': typeof AuthenticatedPlaygroundIndexRoute
|
||||
'/_authenticated/profile/': typeof AuthenticatedProfileIndexRoute
|
||||
'/_authenticated/redemption-codes/': typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
'/_authenticated/sk-sources/': typeof AuthenticatedSkSourcesIndexRoute
|
||||
'/_authenticated/subscriptions/': typeof AuthenticatedSubscriptionsIndexRoute
|
||||
'/_authenticated/system-settings/': typeof AuthenticatedSystemSettingsIndexRoute
|
||||
'/_authenticated/templates/': typeof AuthenticatedTemplatesIndexRoute
|
||||
'/_authenticated/usage-logs/': typeof AuthenticatedUsageLogsIndexRoute
|
||||
'/_authenticated/users/': typeof AuthenticatedUsersIndexRoute
|
||||
'/_authenticated/wallet/': typeof AuthenticatedWalletIndexRoute
|
||||
@@ -663,24 +614,19 @@ export interface FileRouteTypes {
|
||||
| '/models/$section'
|
||||
| '/tasks/$id'
|
||||
| '/usage-logs/$section'
|
||||
| '/agents/'
|
||||
| '/audit/'
|
||||
| '/available-models/'
|
||||
| '/channels/'
|
||||
| '/dashboard/'
|
||||
| '/deployments/'
|
||||
| '/desktop-client/'
|
||||
| '/devices/'
|
||||
| '/events/'
|
||||
| '/keys/'
|
||||
| '/models/'
|
||||
| '/playground/'
|
||||
| '/profile/'
|
||||
| '/redemption-codes/'
|
||||
| '/sk-sources/'
|
||||
| '/subscriptions/'
|
||||
| '/system-settings/'
|
||||
| '/templates/'
|
||||
| '/usage-logs/'
|
||||
| '/users/'
|
||||
| '/wallet/'
|
||||
@@ -727,24 +673,19 @@ export interface FileRouteTypes {
|
||||
| '/models/$section'
|
||||
| '/tasks/$id'
|
||||
| '/usage-logs/$section'
|
||||
| '/agents'
|
||||
| '/audit'
|
||||
| '/available-models'
|
||||
| '/channels'
|
||||
| '/dashboard'
|
||||
| '/deployments'
|
||||
| '/desktop-client'
|
||||
| '/devices'
|
||||
| '/events'
|
||||
| '/keys'
|
||||
| '/models'
|
||||
| '/playground'
|
||||
| '/profile'
|
||||
| '/redemption-codes'
|
||||
| '/sk-sources'
|
||||
| '/subscriptions'
|
||||
| '/system-settings'
|
||||
| '/templates'
|
||||
| '/usage-logs'
|
||||
| '/users'
|
||||
| '/wallet'
|
||||
@@ -794,24 +735,19 @@ export interface FileRouteTypes {
|
||||
| '/_authenticated/models/$section'
|
||||
| '/_authenticated/tasks/$id'
|
||||
| '/_authenticated/usage-logs/$section'
|
||||
| '/_authenticated/agents/'
|
||||
| '/_authenticated/audit/'
|
||||
| '/_authenticated/available-models/'
|
||||
| '/_authenticated/channels/'
|
||||
| '/_authenticated/dashboard/'
|
||||
| '/_authenticated/deployments/'
|
||||
| '/_authenticated/desktop-client/'
|
||||
| '/_authenticated/devices/'
|
||||
| '/_authenticated/events/'
|
||||
| '/_authenticated/keys/'
|
||||
| '/_authenticated/models/'
|
||||
| '/_authenticated/playground/'
|
||||
| '/_authenticated/profile/'
|
||||
| '/_authenticated/redemption-codes/'
|
||||
| '/_authenticated/sk-sources/'
|
||||
| '/_authenticated/subscriptions/'
|
||||
| '/_authenticated/system-settings/'
|
||||
| '/_authenticated/templates/'
|
||||
| '/_authenticated/usage-logs/'
|
||||
| '/_authenticated/users/'
|
||||
| '/_authenticated/wallet/'
|
||||
@@ -1034,13 +970,6 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof AuthenticatedUsageLogsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/templates/': {
|
||||
id: '/_authenticated/templates/'
|
||||
path: '/templates'
|
||||
fullPath: '/templates/'
|
||||
preLoaderRoute: typeof AuthenticatedTemplatesIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/system-settings/': {
|
||||
id: '/_authenticated/system-settings/'
|
||||
path: '/'
|
||||
@@ -1055,13 +984,6 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof AuthenticatedSubscriptionsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/sk-sources/': {
|
||||
id: '/_authenticated/sk-sources/'
|
||||
path: '/sk-sources'
|
||||
fullPath: '/sk-sources/'
|
||||
preLoaderRoute: typeof AuthenticatedSkSourcesIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/redemption-codes/': {
|
||||
id: '/_authenticated/redemption-codes/'
|
||||
path: '/redemption-codes'
|
||||
@@ -1097,13 +1019,6 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof AuthenticatedKeysIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/events/': {
|
||||
id: '/_authenticated/events/'
|
||||
path: '/events'
|
||||
fullPath: '/events/'
|
||||
preLoaderRoute: typeof AuthenticatedEventsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/devices/': {
|
||||
id: '/_authenticated/devices/'
|
||||
path: '/devices'
|
||||
@@ -1146,20 +1061,6 @@ declare module '@tanstack/react-router' {
|
||||
preLoaderRoute: typeof AuthenticatedAvailableModelsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/audit/': {
|
||||
id: '/_authenticated/audit/'
|
||||
path: '/audit'
|
||||
fullPath: '/audit/'
|
||||
preLoaderRoute: typeof AuthenticatedAuditIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/agents/': {
|
||||
id: '/_authenticated/agents/'
|
||||
path: '/agents'
|
||||
fullPath: '/agents/'
|
||||
preLoaderRoute: typeof AuthenticatedAgentsIndexRouteImport
|
||||
parentRoute: typeof AuthenticatedRouteRoute
|
||||
}
|
||||
'/_authenticated/usage-logs/$section': {
|
||||
id: '/_authenticated/usage-logs/$section'
|
||||
path: '/usage-logs/$section'
|
||||
@@ -1400,23 +1301,18 @@ interface AuthenticatedRouteRouteChildren {
|
||||
AuthenticatedModelsSectionRoute: typeof AuthenticatedModelsSectionRoute
|
||||
AuthenticatedTasksIdRoute: typeof AuthenticatedTasksIdRoute
|
||||
AuthenticatedUsageLogsSectionRoute: typeof AuthenticatedUsageLogsSectionRoute
|
||||
AuthenticatedAgentsIndexRoute: typeof AuthenticatedAgentsIndexRoute
|
||||
AuthenticatedAuditIndexRoute: typeof AuthenticatedAuditIndexRoute
|
||||
AuthenticatedAvailableModelsIndexRoute: typeof AuthenticatedAvailableModelsIndexRoute
|
||||
AuthenticatedChannelsIndexRoute: typeof AuthenticatedChannelsIndexRoute
|
||||
AuthenticatedDashboardIndexRoute: typeof AuthenticatedDashboardIndexRoute
|
||||
AuthenticatedDeploymentsIndexRoute: typeof AuthenticatedDeploymentsIndexRoute
|
||||
AuthenticatedDesktopClientIndexRoute: typeof AuthenticatedDesktopClientIndexRoute
|
||||
AuthenticatedDevicesIndexRoute: typeof AuthenticatedDevicesIndexRoute
|
||||
AuthenticatedEventsIndexRoute: typeof AuthenticatedEventsIndexRoute
|
||||
AuthenticatedKeysIndexRoute: typeof AuthenticatedKeysIndexRoute
|
||||
AuthenticatedModelsIndexRoute: typeof AuthenticatedModelsIndexRoute
|
||||
AuthenticatedPlaygroundIndexRoute: typeof AuthenticatedPlaygroundIndexRoute
|
||||
AuthenticatedProfileIndexRoute: typeof AuthenticatedProfileIndexRoute
|
||||
AuthenticatedRedemptionCodesIndexRoute: typeof AuthenticatedRedemptionCodesIndexRoute
|
||||
AuthenticatedSkSourcesIndexRoute: typeof AuthenticatedSkSourcesIndexRoute
|
||||
AuthenticatedSubscriptionsIndexRoute: typeof AuthenticatedSubscriptionsIndexRoute
|
||||
AuthenticatedTemplatesIndexRoute: typeof AuthenticatedTemplatesIndexRoute
|
||||
AuthenticatedUsageLogsIndexRoute: typeof AuthenticatedUsageLogsIndexRoute
|
||||
AuthenticatedUsersIndexRoute: typeof AuthenticatedUsersIndexRoute
|
||||
AuthenticatedWalletIndexRoute: typeof AuthenticatedWalletIndexRoute
|
||||
@@ -1432,8 +1328,6 @@ const AuthenticatedRouteRouteChildren: AuthenticatedRouteRouteChildren = {
|
||||
AuthenticatedModelsSectionRoute: AuthenticatedModelsSectionRoute,
|
||||
AuthenticatedTasksIdRoute: AuthenticatedTasksIdRoute,
|
||||
AuthenticatedUsageLogsSectionRoute: AuthenticatedUsageLogsSectionRoute,
|
||||
AuthenticatedAgentsIndexRoute: AuthenticatedAgentsIndexRoute,
|
||||
AuthenticatedAuditIndexRoute: AuthenticatedAuditIndexRoute,
|
||||
AuthenticatedAvailableModelsIndexRoute:
|
||||
AuthenticatedAvailableModelsIndexRoute,
|
||||
AuthenticatedChannelsIndexRoute: AuthenticatedChannelsIndexRoute,
|
||||
@@ -1441,16 +1335,13 @@ const AuthenticatedRouteRouteChildren: AuthenticatedRouteRouteChildren = {
|
||||
AuthenticatedDeploymentsIndexRoute: AuthenticatedDeploymentsIndexRoute,
|
||||
AuthenticatedDesktopClientIndexRoute: AuthenticatedDesktopClientIndexRoute,
|
||||
AuthenticatedDevicesIndexRoute: AuthenticatedDevicesIndexRoute,
|
||||
AuthenticatedEventsIndexRoute: AuthenticatedEventsIndexRoute,
|
||||
AuthenticatedKeysIndexRoute: AuthenticatedKeysIndexRoute,
|
||||
AuthenticatedModelsIndexRoute: AuthenticatedModelsIndexRoute,
|
||||
AuthenticatedPlaygroundIndexRoute: AuthenticatedPlaygroundIndexRoute,
|
||||
AuthenticatedProfileIndexRoute: AuthenticatedProfileIndexRoute,
|
||||
AuthenticatedRedemptionCodesIndexRoute:
|
||||
AuthenticatedRedemptionCodesIndexRoute,
|
||||
AuthenticatedSkSourcesIndexRoute: AuthenticatedSkSourcesIndexRoute,
|
||||
AuthenticatedSubscriptionsIndexRoute: AuthenticatedSubscriptionsIndexRoute,
|
||||
AuthenticatedTemplatesIndexRoute: AuthenticatedTemplatesIndexRoute,
|
||||
AuthenticatedUsageLogsIndexRoute: AuthenticatedUsageLogsIndexRoute,
|
||||
AuthenticatedUsersIndexRoute: AuthenticatedUsersIndexRoute,
|
||||
AuthenticatedWalletIndexRoute: AuthenticatedWalletIndexRoute,
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createFileRoute } from '@tanstack/react-router'
|
||||
import { AgentAgentsPage } from '@/features/agent-console/pages'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/agents/')({
|
||||
component: AgentAgentsPage,
|
||||
})
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createFileRoute } from '@tanstack/react-router'
|
||||
import { AgentAuditPage } from '@/features/agent-console/pages'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/audit/')({
|
||||
component: AgentAuditPage,
|
||||
})
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createFileRoute } from '@tanstack/react-router'
|
||||
import { AgentEventsPage } from '@/features/agent-console/pages'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/events/')({
|
||||
component: AgentEventsPage,
|
||||
})
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createFileRoute } from '@tanstack/react-router'
|
||||
import { AgentSKSourcesPage } from '@/features/agent-console/pages'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/sk-sources/')({
|
||||
component: AgentSKSourcesPage,
|
||||
})
|
||||
@@ -1,6 +0,0 @@
|
||||
import { createFileRoute } from '@tanstack/react-router'
|
||||
import { AgentTemplatesPage } from '@/features/agent-console/pages'
|
||||
|
||||
export const Route = createFileRoute('/_authenticated/templates/')({
|
||||
component: AgentTemplatesPage,
|
||||
})
|
||||
Reference in New Issue
Block a user