WS2: Developer Portal (portal/) - Standalone Next.js 14 + Tailwind CSS app — independent deployment - Home page: hero, feature grid, CTA to /get-started - /pricing: free tier limits table (10 agents, 1k calls/day) + paid tier CTA - /sdks: all 4 SDKs (Node.js, Python, Go, Java) with install + code examples - /api-explorer: Swagger UI from NEXT_PUBLIC_API_URL/openapi.json, persistAuthorization - /get-started: 4-step wizard (setup → register agent → credentials → SDK snippet) - Shared Nav component with active-link highlighting - Build: 8/8 static pages, zero TypeScript errors WS3: CLI Tool (cli/ — npm package: sentryagent) - configure, register-agent, list-agents, issue-token, rotate-credentials, tail-audit-log - Auto OAuth2 token fetch + 30s-buffer cache via client_credentials flow - chalk-formatted table output, confirmation prompts, bounded audit log dedup - bash + zsh shell completion scripts - README with installation, all commands, and completion setup - Build: tsc clean, node dist/index.js --help verified Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
893 B
TypeScript
32 lines
893 B
TypeScript
import type { Metadata } from 'next';
|
|
import type React from 'react';
|
|
import './globals.css';
|
|
import { Nav } from '@/components/Nav';
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'SentryAgent.ai Developer Portal',
|
|
description:
|
|
'Identity and access management for AI agents. Register, authenticate, and secure your agents with SentryAgent AgentIdP.',
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="en">
|
|
<body className="min-h-screen bg-slate-50 text-slate-900 antialiased">
|
|
<Nav />
|
|
<main>{children}</main>
|
|
<footer className="border-t border-slate-200 py-8 text-center text-sm text-slate-500">
|
|
<p>
|
|
© {new Date().getFullYear()} SentryAgent.ai — All rights
|
|
reserved.
|
|
</p>
|
|
</footer>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|