feat(phase-4): WS2 + WS3 — Developer Portal (Next.js 14) and CLI tool (sentryagent)

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>
This commit is contained in:
SentryAgent.ai Developer
2026-04-02 04:29:50 +00:00
parent 1b682c22b2
commit d1e6af25aa
147 changed files with 8079 additions and 29 deletions

348
cli/README.md Normal file
View File

@@ -0,0 +1,348 @@
# sentryagent CLI
The official command-line interface for [SentryAgent.ai](https://sentryagent.ai) — manage agents, issue OAuth2 tokens, rotate credentials, and stream audit logs from your terminal.
---
## Installation
### From npm (once published)
```bash
npm install -g sentryagent
```
### From source
```bash
cd cli/
npm install
npm run build
npm install -g .
```
---
## Configuration
Before using any command, configure the CLI with your API endpoint and credentials:
```bash
sentryagent configure
```
You will be prompted for:
| Field | Description |
|---------------|--------------------------------------------------|
| API URL | The SentryAgent.ai API base URL (e.g. `https://api.sentryagent.ai`) |
| Client ID | Your tenant client ID |
| Client Secret | Your tenant client secret |
Configuration is stored at `~/.sentryagent/config.json` with permissions `0600`.
If any command is run before `sentryagent configure` has been called, the CLI exits with:
```
Not configured. Run `sentryagent configure` first.
```
---
## Commands
### `sentryagent --version` / `-v`
Output the installed CLI version.
```bash
sentryagent --version
# 1.0.0
```
### `sentryagent --help` / `-h`
Show all available commands and global options.
```bash
sentryagent --help
```
---
### `sentryagent configure`
Interactively configure the CLI.
```bash
sentryagent configure
```
**Prompts:**
```
SentryAgent CLI Configuration
────────────────────────────────────────
API URL (e.g. https://api.sentryagent.ai): https://api.sentryagent.ai
Client ID: tenant_01ABC...
Client Secret: ****
✓ Configuration saved to ~/.sentryagent/config.json
```
---
### `sentryagent register-agent`
Register a new agent with the identity provider.
```bash
sentryagent register-agent --name <name> [--description <desc>]
```
**Options:**
| Flag | Required | Description |
|-------------------|----------|---------------------|
| `--name <name>` | Yes | Agent display name |
| `--description` | No | Agent description |
**Example:**
```bash
sentryagent register-agent --name "billing-agent" --description "Handles billing workflows"
```
**Output:**
```
✓ Agent registered successfully
Agent ID: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Name: billing-agent
Description: Handles billing workflows
Status: active
```
---
### `sentryagent list-agents`
List all agents registered for your tenant, displayed as a formatted table.
```bash
sentryagent list-agents
```
**Output:**
```
AGENT ID NAME STATUS CREATED AT
────────────────────────────────────────────────────────────────────────────
01ARZ3NDEKTSV4RRFFQ69G5FAV billing-agent active 4/2/2026, 9:00:00 AM
01ARZ3NDEKTSV4RRFFQ69G5FAX auth-agent active 4/1/2026, 3:00:00 PM
────────────────────────────────────────────────────────────────────────────
Total: 2
```
---
### `sentryagent issue-token`
Issue an OAuth2 `client_credentials` access token for a specific agent.
```bash
sentryagent issue-token --agent-id <id>
```
**Options:**
| Flag | Required | Description |
|--------------------|----------|-------------------------|
| `--agent-id <id>` | Yes | Target agent ID |
**Example:**
```bash
sentryagent issue-token --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
```
**Output:**
```
✓ Token issued successfully
Access Token:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Token Type: Bearer
Expires In: 3600s
Expires At: 2026-04-02T10:00:00.000Z
```
---
### `sentryagent rotate-credentials`
Rotate the client secret for an agent. Prompts for confirmation before proceeding.
```bash
sentryagent rotate-credentials --agent-id <id>
```
**Options:**
| Flag | Required | Description |
|--------------------|----------|-------------------------|
| `--agent-id <id>` | Yes | Target agent ID |
**Example:**
```bash
sentryagent rotate-credentials --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
```
**Output:**
```
⚠ This will invalidate the current secret for agent 01ARZ3NDEKTSV4RRFFQ69G5FAV
This will invalidate the current secret. Continue? [y/N] y
✓ Credentials rotated successfully
Client ID: 01ARZ3NDEKTSV4RRFFQ69G5FAV
Client Secret: cs_new_secret_value_here
Store the new client secret securely — it will not be shown again.
```
---
### `sentryagent tail-audit-log`
Poll the audit log API every 5 seconds and stream new events to stdout. Press **Ctrl+C** to stop.
```bash
sentryagent tail-audit-log [--agent-id <id>]
```
**Options:**
| Flag | Required | Description |
|--------------------|----------|------------------------------------|
| `--agent-id <id>` | No | Filter events for a specific agent |
**Example (all events):**
```bash
sentryagent tail-audit-log
```
**Example (filtered by agent):**
```bash
sentryagent tail-audit-log --agent-id 01ARZ3NDEKTSV4RRFFQ69G5FAV
```
**Output:**
```
Tailing audit log — press Ctrl+C to stop
────────────────────────────────────────────────────────────
4/2/2026, 9:05:00 AM agent.token.issued outcome=success agent=01ARZ3NDEKTSV... id=evt_01...
4/2/2026, 9:10:03 AM agent.registered outcome=success id=evt_02...
^C
Stopped.
```
---
### `sentryagent completion`
Output shell completion scripts.
#### Bash
```bash
sentryagent completion bash
```
To enable permanently, add to `~/.bashrc` or `~/.bash_profile`:
```bash
source <(sentryagent completion bash)
```
Or write to a file:
```bash
sentryagent completion bash > ~/.bash_completion.d/sentryagent
```
#### Zsh
```bash
sentryagent completion zsh
```
To enable permanently, add to `~/.zshrc`:
```bash
source <(sentryagent completion zsh)
```
Or write to a file in your `$fpath`:
```bash
sentryagent completion zsh > ~/.zsh/completions/_sentryagent
```
---
## Shell Completion Setup
### Bash (one-time setup)
```bash
mkdir -p ~/.bash_completion.d
sentryagent completion bash > ~/.bash_completion.d/sentryagent
echo 'source ~/.bash_completion.d/sentryagent' >> ~/.bashrc
source ~/.bashrc
```
### Zsh (one-time setup)
```bash
mkdir -p ~/.zsh/completions
sentryagent completion zsh > ~/.zsh/completions/_sentryagent
echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
source ~/.zshrc
```
After setup, pressing **Tab** after `sentryagent` will autocomplete commands and flags.
---
## Configuration File
The config file is stored at `~/.sentryagent/config.json`:
```json
{
"apiUrl": "https://api.sentryagent.ai",
"clientId": "tenant_01ABC...",
"clientSecret": "cs_secret_value"
}
```
The directory is created with mode `0700` and the file with mode `0600` to prevent other users from reading your credentials.
---
## Environment
- Node.js >= 18.0.0 is required (uses the built-in `fetch` API)
- All HTTP requests use OAuth2 `client_credentials` tokens fetched automatically from your configuration
- Tokens are cached in memory for the duration of the CLI session (refreshed 30 seconds before expiry)

267
cli/package-lock.json generated Normal file
View File

@@ -0,0 +1,267 @@
{
"name": "sentryagent",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "sentryagent",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"chalk": "^5.3.0",
"commander": "^12.1.0"
},
"bin": {
"sentryagent": "dist/index.js"
},
"devDependencies": {
"@types/node": "^20.12.7",
"ts-node": "^10.9.2",
"typescript": "^5.4.5"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
"integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true,
"license": "MIT"
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.19.37",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
"integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/acorn": {
"version": "8.16.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/acorn-walk": {
"version": "8.3.5",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
"integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
"dev": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true,
"license": "MIT"
},
"node_modules/chalk": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
"integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
"license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/diff": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
"integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true,
"license": "ISC"
},
"node_modules/ts-node": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true,
"license": "MIT"
},
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
}
}
}

34
cli/package.json Normal file
View File

@@ -0,0 +1,34 @@
{
"name": "sentryagent",
"version": "1.0.0",
"description": "SentryAgent.ai CLI — manage agents, tokens, and audit logs",
"main": "dist/index.js",
"bin": {
"sentryagent": "./dist/index.js"
},
"scripts": {
"build": "tsc",
"dev": "ts-node src/index.ts",
"clean": "rm -rf dist"
},
"dependencies": {
"chalk": "^5.3.0",
"commander": "^12.1.0"
},
"devDependencies": {
"@types/node": "^20.12.7",
"typescript": "^5.4.5",
"ts-node": "^10.9.2"
},
"engines": {
"node": ">=18.0.0"
},
"keywords": [
"sentryagent",
"agentidp",
"cli",
"agents",
"identity"
],
"license": "MIT"
}

95
cli/src/api.ts Normal file
View File

@@ -0,0 +1,95 @@
import { Config } from './config';
interface TokenCache {
accessToken: string;
expiresAt: number;
}
let tokenCache: TokenCache | null = null;
interface TokenResponse {
access_token: string;
expires_in: number;
token_type: string;
}
async function fetchToken(config: Config): Promise<string> {
const now = Date.now();
if (tokenCache !== null && tokenCache.expiresAt > now + 30_000) {
return tokenCache.accessToken;
}
const body = new URLSearchParams({
grant_type: 'client_credentials',
client_id: config.clientId,
client_secret: config.clientSecret,
});
const res = await fetch(`${config.apiUrl}/oauth2/token`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: body.toString(),
});
if (!res.ok) {
const text = await res.text();
throw new Error(`Authentication failed (${res.status}): ${text}`);
}
const data = (await res.json()) as TokenResponse;
tokenCache = {
accessToken: data.access_token,
expiresAt: now + data.expires_in * 1000,
};
return tokenCache.accessToken;
}
export function clearTokenCache(): void {
tokenCache = null;
}
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
interface ApiRequestOptions {
method?: HttpMethod;
body?: unknown;
params?: Record<string, string>;
}
export async function apiRequest<T>(
config: Config,
endpoint: string,
options: ApiRequestOptions = {},
): Promise<T> {
const token = await fetchToken(config);
const { method = 'GET', body, params } = options;
let url = `${config.apiUrl}${endpoint}`;
if (params !== undefined && Object.keys(params).length > 0) {
const qs = new URLSearchParams(params);
url = `${url}?${qs.toString()}`;
}
const headers: Record<string, string> = {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
};
const fetchOptions: RequestInit = { method, headers };
if (body !== undefined) {
fetchOptions.body = JSON.stringify(body);
}
const res = await fetch(url, fetchOptions);
if (!res.ok) {
const text = await res.text();
throw new Error(`API error (${res.status}): ${text}`);
}
if (res.status === 204) {
return undefined as unknown as T;
}
return (await res.json()) as T;
}

View File

@@ -0,0 +1,155 @@
import { Command } from 'commander';
const BASH_COMPLETION = `
# sentryagent bash completion
# Add to ~/.bashrc or ~/.bash_profile:
# source <(sentryagent completion bash)
_sentryagent_completion() {
local cur prev words cword
_init_completion || return
local commands="configure register-agent list-agents issue-token rotate-credentials tail-audit-log completion"
local global_opts="--help --version"
case "\${prev}" in
sentryagent)
COMPREPLY=( \$(compgen -W "\${commands} \${global_opts}" -- "\${cur}") )
return 0
;;
configure)
COMPREPLY=( \$(compgen -W "--help" -- "\${cur}") )
return 0
;;
register-agent)
COMPREPLY=( \$(compgen -W "--name --description --help" -- "\${cur}") )
return 0
;;
list-agents)
COMPREPLY=( \$(compgen -W "--help" -- "\${cur}") )
return 0
;;
issue-token)
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
return 0
;;
rotate-credentials)
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
return 0
;;
tail-audit-log)
COMPREPLY=( \$(compgen -W "--agent-id --help" -- "\${cur}") )
return 0
;;
completion)
COMPREPLY=( \$(compgen -W "bash zsh --help" -- "\${cur}") )
return 0
;;
*)
COMPREPLY=()
return 0
;;
esac
}
complete -F _sentryagent_completion sentryagent
`.trim();
const ZSH_COMPLETION = `
#compdef sentryagent
# sentryagent zsh completion
# Add to ~/.zshrc:
# source <(sentryagent completion zsh)
# Or generate a file and place it in your $fpath:
# sentryagent completion zsh > ~/.zsh/completions/_sentryagent
_sentryagent() {
local state
_arguments \\
'(-v --version)'{-v,--version}'[Show version]' \\
'(-h --help)'{-h,--help}'[Show help]' \\
'1: :->command' \\
'*: :->args'
case \$state in
command)
local commands=(
'configure:Configure CLI with API URL and credentials'
'register-agent:Register a new agent'
'list-agents:List all registered agents'
'issue-token:Issue an OAuth2 access token for an agent'
'rotate-credentials:Rotate credentials for an agent'
'tail-audit-log:Poll and stream audit log events'
'completion:Output shell completion script'
)
_describe 'command' commands
;;
args)
case \${words[2]} in
configure)
_arguments \\
'(-h --help)'{-h,--help}'[Show help]'
;;
register-agent)
_arguments \\
'--name[Agent name]:name' \\
'--description[Agent description]:description' \\
'(-h --help)'{-h,--help}'[Show help]'
;;
list-agents)
_arguments \\
'(-h --help)'{-h,--help}'[Show help]'
;;
issue-token)
_arguments \\
'--agent-id[Agent ID]:agent-id' \\
'(-h --help)'{-h,--help}'[Show help]'
;;
rotate-credentials)
_arguments \\
'--agent-id[Agent ID]:agent-id' \\
'(-h --help)'{-h,--help}'[Show help]'
;;
tail-audit-log)
_arguments \\
'--agent-id[Filter by agent ID]:agent-id' \\
'(-h --help)'{-h,--help}'[Show help]'
;;
completion)
local shells=('bash:Generate bash completion script' 'zsh:Generate zsh completion script')
_describe 'shell' shells
;;
esac
;;
esac
}
_sentryagent "\$@"
`.trim();
export function registerCompletion(program: Command): void {
const completion = program
.command('completion')
.description('Output shell completion scripts');
completion
.command('bash')
.description('Output bash completion script')
.action(() => {
console.log(BASH_COMPLETION);
});
completion
.command('zsh')
.description('Output zsh completion script')
.action(() => {
console.log(ZSH_COMPLETION);
});
completion.addHelpText(
'after',
'\nSupported shells: bash, zsh',
);
}

View File

@@ -0,0 +1,63 @@
import * as readline from 'readline';
import { Command } from 'commander';
import chalk from 'chalk';
import { writeConfig } from '../config';
function prompt(rl: readline.Interface, question: string): Promise<string> {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer.trim());
});
});
}
export function registerConfigure(program: Command): void {
program
.command('configure')
.description('Configure the CLI with API URL and credentials')
.action(async () => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
try {
console.log(chalk.bold('SentryAgent CLI Configuration'));
console.log(chalk.dim('─'.repeat(40)));
const apiUrl = await prompt(
rl,
chalk.cyan('API URL') + ' (e.g. https://api.sentryagent.ai): ',
);
if (apiUrl === '') {
console.error(chalk.red('API URL cannot be empty.'));
process.exit(1);
}
const clientId = await prompt(rl, chalk.cyan('Client ID') + ': ');
if (clientId === '') {
console.error(chalk.red('Client ID cannot be empty.'));
process.exit(1);
}
const clientSecret = await prompt(
rl,
chalk.cyan('Client Secret') + ': ',
);
if (clientSecret === '') {
console.error(chalk.red('Client Secret cannot be empty.'));
process.exit(1);
}
writeConfig({ apiUrl, clientId, clientSecret });
console.log();
console.log(
chalk.green('✓') +
' Configuration saved to ~/.sentryagent/config.json',
);
} finally {
rl.close();
}
});
}

View File

@@ -0,0 +1,70 @@
import { Command } from 'commander';
import chalk from 'chalk';
import { requireConfig } from '../config';
interface TokenResponse {
access_token: string;
expires_in: number;
token_type: string;
scope?: string;
}
export function registerIssueToken(program: Command): void {
program
.command('issue-token')
.description('Issue an OAuth2 access token for an agent')
.requiredOption('--agent-id <id>', 'Agent ID to issue a token for')
.action(async (options: { agentId: string }) => {
const config = requireConfig();
try {
const body = new URLSearchParams({
grant_type: 'client_credentials',
client_id: config.clientId,
client_secret: config.clientSecret,
agent_id: options.agentId,
});
const res = await fetch(`${config.apiUrl}/oauth2/token`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: body.toString(),
});
if (!res.ok) {
const text = await res.text();
throw new Error(`Token issuance failed (${res.status}): ${text}`);
}
const data = (await res.json()) as TokenResponse;
const expiresAt = new Date(
Date.now() + data.expires_in * 1000,
).toISOString();
console.log(chalk.green('✓') + ' Token issued successfully');
console.log();
console.log(chalk.bold('Access Token:'));
console.log(chalk.cyan(data.access_token));
console.log();
console.log(
chalk.bold('Token Type: ') + data.token_type,
);
console.log(
chalk.bold('Expires In: ') + `${data.expires_in}s`,
);
console.log(
chalk.bold('Expires At: ') + chalk.dim(expiresAt),
);
if (data.scope !== undefined) {
console.log(chalk.bold('Scope: ') + data.scope);
}
} catch (err) {
console.error(
chalk.red('Error:'),
err instanceof Error ? err.message : String(err),
);
process.exit(1);
}
});
}

View File

@@ -0,0 +1,105 @@
import { Command } from 'commander';
import chalk from 'chalk';
import { requireConfig } from '../config';
import { apiRequest } from '../api';
interface Agent {
id: string;
name: string;
status: string;
createdAt: string;
description?: string;
}
interface AgentsResponse {
agents: Agent[];
total?: number;
}
function truncate(str: string, maxLen: number): string {
if (str.length <= maxLen) return str;
return str.slice(0, maxLen - 1) + '…';
}
function padEnd(str: string, len: number): string {
return str.padEnd(len, ' ');
}
export function registerListAgents(program: Command): void {
program
.command('list-agents')
.description('List all registered agents')
.action(async () => {
const config = requireConfig();
try {
const data = await apiRequest<AgentsResponse | Agent[]>(
config,
'/agents',
);
const agents: Agent[] = Array.isArray(data)
? data
: (data as AgentsResponse).agents ?? [];
if (agents.length === 0) {
console.log(chalk.yellow('No agents found.'));
return;
}
const ID_W = 26;
const NAME_W = 24;
const STATUS_W = 10;
const DATE_W = 20;
const header =
chalk.bold(padEnd('AGENT ID', ID_W)) +
' ' +
chalk.bold(padEnd('NAME', NAME_W)) +
' ' +
chalk.bold(padEnd('STATUS', STATUS_W)) +
' ' +
chalk.bold('CREATED AT');
const divider = chalk.dim(
'─'.repeat(ID_W + NAME_W + STATUS_W + DATE_W + 6),
);
console.log(header);
console.log(divider);
for (const agent of agents) {
const statusColor =
agent.status === 'active'
? chalk.green
: agent.status === 'inactive'
? chalk.yellow
: chalk.red;
const createdAt = new Date(agent.createdAt).toLocaleString();
console.log(
chalk.cyan(padEnd(truncate(agent.id, ID_W), ID_W)) +
' ' +
padEnd(truncate(agent.name, NAME_W), NAME_W) +
' ' +
statusColor(padEnd(truncate(agent.status, STATUS_W), STATUS_W)) +
' ' +
chalk.dim(truncate(createdAt, DATE_W)),
);
}
console.log(divider);
const total = Array.isArray(data)
? agents.length
: ((data as AgentsResponse).total ?? agents.length);
console.log(chalk.dim(`Total: ${total}`));
} catch (err) {
console.error(
chalk.red('Error:'),
err instanceof Error ? err.message : String(err),
);
process.exit(1);
}
});
}

View File

@@ -0,0 +1,54 @@
import { Command } from 'commander';
import chalk from 'chalk';
import { requireConfig } from '../config';
import { apiRequest } from '../api';
interface AgentResponse {
id: string;
name: string;
description?: string;
status: string;
createdAt: string;
}
export function registerRegisterAgent(program: Command): void {
program
.command('register-agent')
.description('Register a new agent')
.requiredOption('--name <name>', 'Agent name')
.option('--description <desc>', 'Agent description')
.action(async (options: { name: string; description?: string }) => {
const config = requireConfig();
try {
const body: { name: string; description?: string } = {
name: options.name,
};
if (options.description !== undefined) {
body.description = options.description;
}
const agent = await apiRequest<AgentResponse>(config, '/agents', {
method: 'POST',
body,
});
console.log(chalk.green('✓') + ' Agent registered successfully');
console.log();
console.log(
chalk.bold('Agent ID: ') + chalk.cyan(agent.id),
);
console.log(chalk.bold('Name: ') + agent.name);
if (agent.description !== undefined) {
console.log(chalk.bold('Description:') + ' ' + agent.description);
}
console.log(chalk.bold('Status: ') + agent.status);
} catch (err) {
console.error(
chalk.red('Error:'),
err instanceof Error ? err.message : String(err),
);
process.exit(1);
}
});
}

View File

@@ -0,0 +1,85 @@
import * as readline from 'readline';
import { Command } from 'commander';
import chalk from 'chalk';
import { requireConfig } from '../config';
import { apiRequest } from '../api';
interface RotateResponse {
clientId: string;
clientSecret: string;
rotatedAt?: string;
}
function prompt(rl: readline.Interface, question: string): Promise<string> {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer.trim());
});
});
}
export function registerRotateCredentials(program: Command): void {
program
.command('rotate-credentials')
.description('Rotate credentials for an agent (invalidates current secret)')
.requiredOption('--agent-id <id>', 'Agent ID whose credentials to rotate')
.action(async (options: { agentId: string }) => {
const config = requireConfig();
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
try {
console.log(
chalk.yellow('⚠') +
' This will invalidate the current secret for agent ' +
chalk.cyan(options.agentId),
);
const answer = await prompt(
rl,
chalk.bold('This will invalidate the current secret. Continue? [y/N] '),
);
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
console.log(chalk.dim('Aborted.'));
return;
}
const data = await apiRequest<RotateResponse>(
config,
`/agents/${options.agentId}/credentials/rotate`,
{ method: 'POST' },
);
console.log();
console.log(chalk.green('✓') + ' Credentials rotated successfully');
console.log();
console.log(chalk.bold('Client ID: ') + chalk.cyan(data.clientId));
console.log(
chalk.bold('Client Secret: ') + chalk.yellow(data.clientSecret),
);
console.log();
console.log(
chalk.dim(
'Store the new client secret securely — it will not be shown again.',
),
);
if (data.rotatedAt !== undefined) {
console.log(
chalk.dim('Rotated at: ') + chalk.dim(data.rotatedAt),
);
}
} catch (err) {
console.error(
chalk.red('Error:'),
err instanceof Error ? err.message : String(err),
);
process.exit(1);
} finally {
rl.close();
}
});
}

View File

@@ -0,0 +1,122 @@
import { Command } from 'commander';
import chalk from 'chalk';
import { requireConfig } from '../config';
import { apiRequest } from '../api';
interface AuditEvent {
id: string;
timestamp: string;
action: string;
agentId?: string;
tenantId?: string;
outcome: string;
details?: Record<string, unknown>;
}
interface AuditLogsResponse {
events: AuditEvent[];
nextCursor?: string;
}
function formatEvent(event: AuditEvent): string {
const ts = chalk.dim(new Date(event.timestamp).toLocaleString());
const outcome =
event.outcome === 'success'
? chalk.green(event.outcome)
: chalk.red(event.outcome);
const action = chalk.cyan(event.action);
const agentPart =
event.agentId !== undefined
? ' ' + chalk.dim('agent=' + event.agentId)
: '';
return `${ts} ${action} outcome=${outcome}${agentPart} id=${chalk.dim(event.id)}`;
}
export function registerTailAuditLog(program: Command): void {
program
.command('tail-audit-log')
.description(
'Poll and stream audit log events every 5 seconds (Ctrl+C to stop)',
)
.option('--agent-id <id>', 'Filter events for a specific agent ID')
.action(async (options: { agentId?: string }) => {
const config = requireConfig();
console.log(
chalk.bold('Tailing audit log') +
(options.agentId !== undefined
? chalk.dim(` (agent: ${options.agentId})`)
: '') +
chalk.dim(' — press Ctrl+C to stop'),
);
console.log(chalk.dim('─'.repeat(60)));
const seenIds = new Set<string>();
let cursor: string | undefined;
let running = true;
process.on('SIGINT', () => {
running = false;
console.log();
console.log(chalk.dim('Stopped.'));
process.exit(0);
});
while (running) {
try {
const params: Record<string, string> = {};
if (options.agentId !== undefined) {
params['agentId'] = options.agentId;
}
if (cursor !== undefined) {
params['cursor'] = cursor;
}
// Request events from the last poll window
params['limit'] = '50';
const data = await apiRequest<AuditLogsResponse | AuditEvent[]>(
config,
'/audit/logs',
{ params },
);
const events: AuditEvent[] = Array.isArray(data)
? data
: (data as AuditLogsResponse).events ?? [];
if (!Array.isArray(data) && (data as AuditLogsResponse).nextCursor !== undefined) {
cursor = (data as AuditLogsResponse).nextCursor;
}
for (const event of events) {
if (!seenIds.has(event.id)) {
seenIds.add(event.id);
console.log(formatEvent(event));
}
}
// Keep the seenIds set bounded to avoid unbounded memory growth
if (seenIds.size > 10_000) {
const arr = Array.from(seenIds);
const keep = arr.slice(arr.length - 5_000);
seenIds.clear();
for (const id of keep) seenIds.add(id);
}
} catch (err) {
console.error(
chalk.yellow('⚠') +
' Poll error: ' +
(err instanceof Error ? err.message : String(err)),
);
}
// Wait 5 seconds between polls
await new Promise<void>((resolve) => {
const timer = setTimeout(resolve, 5000);
// Allow the timer to be garbage-collected if process exits
if (typeof timer.unref === 'function') timer.unref();
});
}
});
}

61
cli/src/config.ts Normal file
View File

@@ -0,0 +1,61 @@
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
export interface Config {
apiUrl: string;
clientId: string;
clientSecret: string;
}
const CONFIG_DIR = path.join(os.homedir(), '.sentryagent');
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
export function readConfig(): Config | null {
if (!fs.existsSync(CONFIG_FILE)) {
return null;
}
try {
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
const parsed: unknown = JSON.parse(raw);
if (
parsed !== null &&
typeof parsed === 'object' &&
'apiUrl' in parsed &&
'clientId' in parsed &&
'clientSecret' in parsed &&
typeof (parsed as Record<string, unknown>)['apiUrl'] === 'string' &&
typeof (parsed as Record<string, unknown>)['clientId'] === 'string' &&
typeof (parsed as Record<string, unknown>)['clientSecret'] === 'string'
) {
const p = parsed as Record<string, unknown>;
return {
apiUrl: p['apiUrl'] as string,
clientId: p['clientId'] as string,
clientSecret: p['clientSecret'] as string,
};
}
return null;
} catch {
return null;
}
}
export function writeConfig(config: Config): void {
if (!fs.existsSync(CONFIG_DIR)) {
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
}
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
encoding: 'utf-8',
mode: 0o600,
});
}
export function requireConfig(): Config {
const config = readConfig();
if (config === null) {
console.error('Not configured. Run `sentryagent configure` first.');
process.exit(1);
}
return config;
}

31
cli/src/index.ts Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env node
import { Command } from 'commander';
import packageJson from '../package.json';
import { registerConfigure } from './commands/configure';
import { registerRegisterAgent } from './commands/register-agent';
import { registerListAgents } from './commands/list-agents';
import { registerIssueToken } from './commands/issue-token';
import { registerRotateCredentials } from './commands/rotate-credentials';
import { registerTailAuditLog } from './commands/tail-audit-log';
import { registerCompletion } from './commands/completion';
const program = new Command();
program
.name('sentryagent')
.description('SentryAgent.ai CLI — manage agents, tokens, and audit logs')
.version(packageJson.version, '-v, --version', 'Output the current version');
// Register all commands
registerConfigure(program);
registerRegisterAgent(program);
registerListAgents(program);
registerIssueToken(program);
registerRotateCredentials(program);
registerTailAuditLog(program);
registerCompletion(program);
// Parse args — commander will display help automatically on --help
program.parse(process.argv);

29
cli/tsconfig.json Normal file
View File

@@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["ES2020"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true,
"sourceMap": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}

View File

@@ -28,44 +28,44 @@
## 4. WS2: Developer Portal — Setup & Core Pages
- [ ] 4.1 Scaffold `portal/` as a standalone Next.js 14 app with Tailwind CSS — `npx create-next-app@latest portal --typescript --tailwind`
- [ ] 4.2 Add `NEXT_PUBLIC_API_URL` env var support — create `portal/.env.example`
- [ ] 4.3 Create portal home page (`portal/app/page.tsx`) — hero, product description, CTA to `/get-started`
- [ ] 4.4 Create `/pricing` page with free tier limits table (10 agents, 1,000 calls/day) and paid tier CTA
- [ ] 4.5 Create `/sdks` page listing all 4 SDKs with installation commands and minimal code examples
- [ ] 4.6 Create shared nav component with links to: Home, API Explorer, Get Started, SDKs, Pricing
- [x] 4.1 Scaffold `portal/` as a standalone Next.js 14 app with Tailwind CSS — `npx create-next-app@latest portal --typescript --tailwind`
- [x] 4.2 Add `NEXT_PUBLIC_API_URL` env var support — create `portal/.env.example`
- [x] 4.3 Create portal home page (`portal/app/page.tsx`) — hero, product description, CTA to `/get-started`
- [x] 4.4 Create `/pricing` page with free tier limits table (10 agents, 1,000 calls/day) and paid tier CTA
- [x] 4.5 Create `/sdks` page listing all 4 SDKs with installation commands and minimal code examples
- [x] 4.6 Create shared nav component with links to: Home, API Explorer, Get Started, SDKs, Pricing
## 5. WS2: Developer Portal — API Explorer & Onboarding Wizard
- [ ] 5.1 Install `swagger-ui-react` in `portal/` — add to portal package.json
- [ ] 5.2 Create `/api-explorer` page embedding Swagger UI loaded from `NEXT_PUBLIC_API_URL/openapi.json`
- [ ] 5.3 Configure Swagger UI with `persistAuthorization: true` and Bearer token auth scheme
- [ ] 5.4 Create `/get-started` wizard — Step 1: account setup instructions
- [ ] 5.5 Create wizard Step 2: agent name input → calls `POST /agents` via API → displays agent ID
- [ ] 5.6 Create wizard Step 3: generate credentials → calls credentials endpoint → displays client ID/secret with copy buttons
- [ ] 5.7 Create wizard Step 4: SDK selection → displays ready-to-run code snippet for chosen SDK (Node.js / Python / Go / Java)
- [ ] 5.8 Wizard state management using React `useState` — no external state library needed
- [ ] 5.9 Build `portal/``npm run build` passes without errors or TypeScript errors
- [x] 5.1 Install `swagger-ui-react` in `portal/` — add to portal package.json
- [x] 5.2 Create `/api-explorer` page embedding Swagger UI loaded from `NEXT_PUBLIC_API_URL/openapi.json`
- [x] 5.3 Configure Swagger UI with `persistAuthorization: true` and Bearer token auth scheme
- [x] 5.4 Create `/get-started` wizard — Step 1: account setup instructions
- [x] 5.5 Create wizard Step 2: agent name input → calls `POST /agents` via API → displays agent ID
- [x] 5.6 Create wizard Step 3: generate credentials → calls credentials endpoint → displays client ID/secret with copy buttons
- [x] 5.7 Create wizard Step 4: SDK selection → displays ready-to-run code snippet for chosen SDK (Node.js / Python / Go / Java)
- [x] 5.8 Wizard state management using React `useState` — no external state library needed
- [x] 5.9 Build `portal/``npm run build` passes without errors or TypeScript errors
## 6. WS3: CLI Tool — Setup & Configuration
- [ ] 6.1 Scaffold `cli/` directory with `package.json` (name: `sentryagent`, bin: `sentryagent`) — TypeScript with `commander` and `chalk`
- [ ] 6.2 Create `cli/src/config.ts` — read/write `~/.sentryagent/config.json` with `apiUrl`, `clientId`, `clientSecret`
- [ ] 6.3 Implement `sentryagent configure` command — prompts for API URL, client ID, client secret using `readline` — writes to config file
- [ ] 6.4 Implement config validation helper — fail with "Not configured. Run `sentryagent configure` first." if config missing
- [ ] 6.5 Implement `sentryagent --version` outputting version from package.json
- [ ] 6.6 Implement `sentryagent --help` showing all available commands
- [x] 6.1 Scaffold `cli/` directory with `package.json` (name: `sentryagent`, bin: `sentryagent`) — TypeScript with `commander` and `chalk`
- [x] 6.2 Create `cli/src/config.ts` — read/write `~/.sentryagent/config.json` with `apiUrl`, `clientId`, `clientSecret`
- [x] 6.3 Implement `sentryagent configure` command — prompts for API URL, client ID, client secret using `readline` — writes to config file
- [x] 6.4 Implement config validation helper — fail with "Not configured. Run `sentryagent configure` first." if config missing
- [x] 6.5 Implement `sentryagent --version` outputting version from package.json
- [x] 6.6 Implement `sentryagent --help` showing all available commands
## 7. WS3: CLI Tool — Agent Commands
- [ ] 7.1 Implement `sentryagent register-agent --name <name> [--description <desc>]` — calls `POST /agents`, outputs agent ID
- [ ] 7.2 Implement `sentryagent list-agents` — calls `GET /agents`, outputs formatted table with chalk
- [ ] 7.3 Implement `sentryagent issue-token --agent-id <id>` — calls `POST /oauth2/token`, outputs access token and expiry
- [ ] 7.4 Implement `sentryagent rotate-credentials --agent-id <id>` — prompts for confirmation, calls rotate endpoint, outputs new secret
- [ ] 7.5 Implement `sentryagent tail-audit-log [--agent-id <id>]` — polls `GET /audit/logs` every 5s, streams new events to stdout, runs until Ctrl+C
- [ ] 7.6 Implement `sentryagent completion bash` and `sentryagent completion zsh` — output shell completion scripts
- [ ] 7.7 Write `cli/README.md` — installation, configuration, all commands with examples, shell completion setup
- [ ] 7.8 Build CLI — `npm run build` in `cli/` passes; `node dist/index.js --help` works
- [x] 7.1 Implement `sentryagent register-agent --name <name> [--description <desc>]` — calls `POST /agents`, outputs agent ID
- [x] 7.2 Implement `sentryagent list-agents` — calls `GET /agents`, outputs formatted table with chalk
- [x] 7.3 Implement `sentryagent issue-token --agent-id <id>` — calls `POST /oauth2/token`, outputs access token and expiry
- [x] 7.4 Implement `sentryagent rotate-credentials --agent-id <id>` — prompts for confirmation, calls rotate endpoint, outputs new secret
- [x] 7.5 Implement `sentryagent tail-audit-log [--agent-id <id>]` — polls `GET /audit/logs` every 5s, streams new events to stdout, runs until Ctrl+C
- [x] 7.6 Implement `sentryagent completion bash` and `sentryagent completion zsh` — output shell completion scripts
- [x] 7.7 Write `cli/README.md` — installation, configuration, all commands with examples, shell completion setup
- [x] 7.8 Build CLI — `npm run build` in `cli/` passes; `node dist/index.js --help` works
## 8. WS4: Agent Marketplace

1
portal/.next/BUILD_ID Normal file
View File

@@ -0,0 +1 @@
h5w-rj60Vif8vQbejZCYz

View File

@@ -0,0 +1,58 @@
{
"pages": {
"/_not-found/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/chunks/app/_not-found/page-0c1a014a63577378.js"
],
"/layout": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/css/0d1e1814871c1ae4.css",
"static/chunks/231-711da40718c2508c.js",
"static/chunks/app/layout-db75ca053106eec0.js"
],
"/pricing/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/chunks/231-711da40718c2508c.js",
"static/chunks/app/pricing/page-9b42634a6f0d2af7.js"
],
"/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/chunks/231-711da40718c2508c.js",
"static/chunks/app/page-d3d46720ba5b5546.js"
],
"/sdks/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/chunks/app/sdks/page-7526ae5674dbbace.js"
],
"/api-explorer/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/css/a4c02a9871b5dc42.css",
"static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"
],
"/get-started/page": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js",
"static/chunks/app/get-started/page-31e1ee0acda82a62.js"
]
}
}

View File

@@ -0,0 +1 @@
{"/_not-found/page":"/_not-found","/pricing/page":"/pricing","/page":"/","/sdks/page":"/sdks","/api-explorer/page":"/api-explorer","/get-started/page":"/get-started"}

View File

@@ -0,0 +1,32 @@
{
"polyfillFiles": [
"static/chunks/polyfills-78c92fac7aa8fdd8.js"
],
"devFiles": [],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js",
"static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js"
],
"rootMainFiles": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/fd9d1056-0ffa74f19011bd1c.js",
"static/chunks/23-eed73080eee64cfd.js",
"static/chunks/main-app-ce894e58853e9441.js"
],
"pages": {
"/_app": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/framework-00a8ba1a63cfdc9e.js",
"static/chunks/main-6e8e822f884ef93a.js",
"static/chunks/pages/_app-037b5d058bd9a820.js"
],
"/_error": [
"static/chunks/webpack-75820735529c9609.js",
"static/chunks/framework-00a8ba1a63cfdc9e.js",
"static/chunks/main-6e8e822f884ef93a.js",
"static/chunks/pages/_error-6ae619510b1539d6.js"
]
},
"ampFirstPages": []
}

1
portal/.next/cache/.tsbuildinfo vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
{"version":1,"hasExportPathMap":false,"exportTrailingSlash":false,"isNextImageImported":false}

View File

@@ -0,0 +1 @@
{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false,"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}}

View File

@@ -0,0 +1 @@
{"version":1,"files":["../node_modules/styled-jsx/index.js","../node_modules/styled-jsx/package.json","../node_modules/styled-jsx/dist/index/index.js","../node_modules/react/package.json","../node_modules/react/index.js","../node_modules/client-only/package.json","../node_modules/react/cjs/react.production.min.js","../node_modules/client-only/index.js","../node_modules/styled-jsx/style.js","../node_modules/next/dist/compiled/next-server/server.runtime.prod.js","../node_modules/next/package.json","../node_modules/next/dist/server/body-streams.js","../node_modules/next/dist/lib/picocolors.js","../node_modules/next/dist/shared/lib/constants.js","../node_modules/next/dist/server/web/utils.js","../node_modules/next/dist/client/components/app-router-headers.js","../node_modules/next/dist/server/lib/trace/tracer.js","../node_modules/next/dist/server/lib/trace/constants.js","../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../node_modules/next/dist/shared/lib/modern-browserslist-target.js","../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../node_modules/next/dist/shared/lib/runtime-config.external.js","../node_modules/next/dist/compiled/ws/package.json","../node_modules/next/dist/compiled/lru-cache/package.json","../node_modules/next/dist/compiled/node-html-parser/package.json","../node_modules/@swc/helpers/_/_interop_require_default/package.json","../node_modules/next/dist/client/components/async-local-storage.js","../node_modules/next/dist/compiled/ws/index.js","../node_modules/next/dist/compiled/lru-cache/index.js","../node_modules/next/dist/compiled/node-html-parser/index.js","../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../node_modules/@swc/helpers/package.json","../node_modules/next/dist/compiled/jsonwebtoken/package.json","../node_modules/next/dist/shared/lib/error-source.js","../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../node_modules/next/dist/compiled/jsonwebtoken/index.js","../node_modules/next/dist/compiled/debug/package.json","../node_modules/next/dist/lib/semver-noop.js","../node_modules/next/dist/compiled/debug/index.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/app-router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/hooks-client-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/image-config-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/router-context.js","../node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/server-inserted-html.js","../node_modules/next/dist/server/future/route-modules/pages/module.compiled.js"]}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"type": "commonjs"}

View File

@@ -0,0 +1 @@
self.__PRERENDER_MANIFEST="{\"version\":4,\"routes\":{\"/\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/\",\"dataRoute\":\"/index.rsc\"},\"/sdks\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/sdks\",\"dataRoute\":\"/sdks.rsc\"},\"/api-explorer\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/api-explorer\",\"dataRoute\":\"/api-explorer.rsc\"},\"/get-started\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/get-started\",\"dataRoute\":\"/get-started.rsc\"},\"/pricing\":{\"experimentalBypassFor\":[{\"type\":\"header\",\"key\":\"Next-Action\"},{\"type\":\"header\",\"key\":\"content-type\",\"value\":\"multipart/form-data;.*\"}],\"initialRevalidateSeconds\":false,\"srcRoute\":\"/pricing\",\"dataRoute\":\"/pricing.rsc\"}},\"dynamicRoutes\":{},\"notFoundRoutes\":[],\"preview\":{\"previewModeId\":\"process.env.__NEXT_PREVIEW_MODE_ID\",\"previewModeSigningKey\":\"process.env.__NEXT_PREVIEW_MODE_SIGNING_KEY\",\"previewModeEncryptionKey\":\"process.env.__NEXT_PREVIEW_MODE_ENCRYPTION_KEY\"}}"

View File

@@ -0,0 +1 @@
{"version":4,"routes":{"/":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/","dataRoute":"/index.rsc"},"/sdks":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/sdks","dataRoute":"/sdks.rsc"},"/api-explorer":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/api-explorer","dataRoute":"/api-explorer.rsc"},"/get-started":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/get-started","dataRoute":"/get-started.rsc"},"/pricing":{"experimentalBypassFor":[{"type":"header","key":"Next-Action"},{"type":"header","key":"content-type","value":"multipart/form-data;.*"}],"initialRevalidateSeconds":false,"srcRoute":"/pricing","dataRoute":"/pricing.rsc"}},"dynamicRoutes":{},"notFoundRoutes":[],"preview":{"previewModeId":"bf1f7e55e9abb6ddc805dee481525142","previewModeSigningKey":"1eadf3acd3e65ce2fef19e56205990675c30a55e98535cb8b011a860427c69ec","previewModeEncryptionKey":"cf3e5da15b904036d4e7e334ad47ed2e0d87d3055df23c2dde9c9a3b1ff1c78a"}}

View File

@@ -0,0 +1,9 @@
{
"components/SwaggerExplorer.tsx -> swagger-ui-react": {
"id": 3844,
"files": [
"static/chunks/949fd6f9.1aa1c52add26354d.js",
"static/chunks/361.1a4fa10338580a17.js"
]
}
}

View File

@@ -0,0 +1 @@
{"version":1,"config":{"env":{},"webpack":null,"eslint":{"ignoreDuringBuilds":false},"typescript":{"ignoreBuildErrors":false,"tsconfigPath":"tsconfig.json"},"distDir":".next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.js","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"analyticsId":"","images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":60,"formats":["image/webp"],"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"inline","remotePatterns":[],"unoptimized":false},"devIndicators":{"buildActivity":true,"buildActivityPosition":"bottom-right"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"amp":{"canonicalBase":""},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"optimizeFonts":true,"excludeDefaultMomentLocales":true,"serverRuntimeConfig":{},"publicRuntimeConfig":{},"reactProductionProfiling":false,"reactStrictMode":true,"httpAgentOptions":{"keepAlive":true},"outputFileTracing":true,"staticPageGenerationTimeout":60,"swcMinify":true,"modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"experimental":{"prerenderEarlyExit":false,"serverMinification":true,"serverSourceMaps":false,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","middlewarePrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"outputFileTracingRoot":"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal","swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"adjustFontFallbacks":false,"adjustFontFallbacksWithSizeAdjust":false,"typedRoutes":false,"instrumentationHook":false,"bundlePagesExternals":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"missingSuspenseWithCSRBailout":true,"optimizeServerReact":true,"useEarlyImport":false,"staleTimes":{"dynamic":30,"static":300},"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"configFileName":"next.config.js"},"appDir":"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal","relativeAppDir":"","files":[".next/routes-manifest.json",".next/server/pages-manifest.json",".next/build-manifest.json",".next/prerender-manifest.json",".next/prerender-manifest.js",".next/server/middleware-manifest.json",".next/server/middleware-build-manifest.js",".next/server/middleware-react-loadable-manifest.js",".next/server/app-paths-manifest.json",".next/app-path-routes-manifest.json",".next/app-build-manifest.json",".next/server/server-reference-manifest.js",".next/server/server-reference-manifest.json",".next/react-loadable-manifest.json",".next/server/font-manifest.json",".next/BUILD_ID",".next/server/next-font-manifest.js",".next/server/next-font-manifest.json"],"ignore":["node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"]}

View File

@@ -0,0 +1 @@
{"version":3,"pages404":true,"caseSensitive":false,"basePath":"","redirects":[{"source":"/:path+/","destination":"/:path+","internal":true,"statusCode":308,"regex":"^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$"}],"headers":[],"dynamicRoutes":[],"staticRoutes":[{"page":"/","regex":"^/(?:/)?$","routeKeys":{},"namedRegex":"^/(?:/)?$"},{"page":"/_not-found","regex":"^/_not\\-found(?:/)?$","routeKeys":{},"namedRegex":"^/_not\\-found(?:/)?$"},{"page":"/api-explorer","regex":"^/api\\-explorer(?:/)?$","routeKeys":{},"namedRegex":"^/api\\-explorer(?:/)?$"},{"page":"/get-started","regex":"^/get\\-started(?:/)?$","routeKeys":{},"namedRegex":"^/get\\-started(?:/)?$"},{"page":"/pricing","regex":"^/pricing(?:/)?$","routeKeys":{},"namedRegex":"^/pricing(?:/)?$"},{"page":"/sdks","regex":"^/sdks(?:/)?$","routeKeys":{},"namedRegex":"^/sdks(?:/)?$"}],"dataRoutes":[],"rsc":{"header":"RSC","varyHeader":"RSC, Next-Router-State-Tree, Next-Router-Prefetch","prefetchHeader":"Next-Router-Prefetch","didPostponeHeader":"x-nextjs-postponed","contentTypeHeader":"text/x-component","suffix":".rsc","prefetchSuffix":".prefetch.rsc"},"rewrites":[]}

View File

@@ -0,0 +1,8 @@
{
"/_not-found/page": "app/_not-found/page.js",
"/pricing/page": "app/pricing/page.js",
"/page": "app/page.js",
"/sdks/page": "app/sdks/page.js",
"/api-explorer/page": "app/api-explorer/page.js",
"/get-started/page": "app/get-started/page.js"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
{
"status": 404,
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/_not-found/layout,_N_T_/_not-found/page,_N_T_/_not-found"
}
}

View File

@@ -0,0 +1,10 @@
2:I[39275,[],""]
3:I[61343,[],""]
4:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
5:{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"}
6:{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"}
7:{"display":"inline-block"}
8:{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0}
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["/_not-found",{"children":["__PAGE__",{},[["$L1",[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]]],null],null]},["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children","/_not-found","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L4",null,{}],["$","main",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$5","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$6","children":"404"}],["$","div",null,{"style":"$7","children":["$","h2",null,{"style":"$8","children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[["$","meta",null,{"name":"robots","content":"noindex"}],"$L9"]]]]]
9:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"SentryAgent.ai Developer Portal"}],["$","meta","3",{"name":"description","content":"Identity and access management for AI agents. Register, authenticate, and secure your agents with SentryAgent AgentIdP."}]]
1:null

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/_not-found/page":[]}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/api-explorer/layout,_N_T_/api-explorer/page,_N_T_/api-explorer"
}
}

View File

@@ -0,0 +1,7 @@
2:I[49947,["734","static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"],"SwaggerExplorer"]
3:I[39275,[],""]
4:I[61343,[],""]
5:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["api-explorer",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["api-explorer",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"px-4 py-8","children":["$","div",null,{"className":"mx-auto max-w-7xl","children":[["$","div",null,{"className":"mb-8","children":[["$","h1",null,{"className":"text-3xl font-extrabold text-slate-900","children":"API Explorer"}],["$","p",null,{"className":"mt-2 text-slate-600","children":"Explore, authenticate, and test every AgentIdP endpoint directly from your browser. Use the Authorize button to set your Bearer token."}],["$","p",null,{"className":"mt-1 text-sm text-slate-400","children":["Spec loaded from:"," ",["$","code",null,{"className":"rounded bg-slate-100 px-1.5 py-0.5 text-xs","children":["http://localhost:3000","/openapi.json"]}]]}]]}],["$","$L2",null,{"apiUrl":"http://localhost:3000"}]]}]}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","api-explorer","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/a4c02a9871b5dc42.css","precedence":"next","crossOrigin":"$undefined"}]]}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L5",null,{}],["$","main",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[null,"$L6"]]]]]
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"API Explorer — SentryAgent AgentIdP"}],["$","meta","3",{"name":"description","content":"Interactively explore and test the SentryAgent AgentIdP REST API."}]]
1:null

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/api-explorer/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":["734","static/chunks/app/api-explorer/page-7cae2529092c7dfa.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/api-explorer/page":["static/css/a4c02a9871b5dc42.css"]}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/get-started/layout,_N_T_/get-started/page,_N_T_/get-started"
}
}

View File

@@ -0,0 +1,7 @@
2:I[63933,["719","static/chunks/app/get-started/page-31e1ee0acda82a62.js"],"GetStartedWizard"]
3:I[39275,[],""]
4:I[61343,[],""]
5:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["get-started",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["get-started",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"px-6 py-16","children":[["$","div",null,{"className":"mb-12 text-center","children":[["$","h1",null,{"className":"mb-4 text-4xl font-extrabold text-slate-900","children":"Get Started"}],["$","p",null,{"className":"text-xl text-slate-600","children":"Register your first agent and get production-ready credentials in minutes."}]]}],["$","$L2",null,{"apiUrl":"http://localhost:3000"}]]}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","get-started","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en","children":["$","body",null,{"className":"min-h-screen bg-slate-50 text-slate-900 antialiased","children":[["$","$L5",null,{}],["$","main",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}],["$","footer",null,{"className":"border-t border-slate-200 py-8 text-center text-sm text-slate-500","children":["$","p",null,{"children":["© ",2026," SentryAgent.ai — All rights reserved."]}]}]]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0d1e1814871c1ae4.css","precedence":"next","crossOrigin":"$undefined"}]],[null,"$L6"]]]]]
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Get Started — SentryAgent AgentIdP"}],["$","meta","3",{"name":"description","content":"Set up your first AI agent with SentryAgent AgentIdP in four steps."}]]
1:null

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/get-started/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":["719","static/chunks/app/get-started/page-31e1ee0acda82a62.js"],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/get-started/page":[]}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/page,_N_T_/"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../node_modules/next/dist/client/components/async-local-storage.js","../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../package.json","../../package.json","../chunks/24.js","../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[]}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/pricing/layout,_N_T_/pricing/page,_N_T_/pricing"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/pricing/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","979","static/chunks/app/pricing/page-9b42634a6f0d2af7.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","979","static/chunks/app/pricing/page-9b42634a6f0d2af7.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/pricing/page":[]}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
{
"headers": {
"x-next-cache-tags": "_N_T_/layout,_N_T_/sdks/layout,_N_T_/sdks/page,_N_T_/sdks"
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,86 @@
(()=>{var e={};e.id=146,e.ids=[146],e.modules={7849:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external")},2934:e=>{"use strict";e.exports=require("next/dist/client/components/action-async-storage.external.js")},5403:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external")},4580:e=>{"use strict";e.exports=require("next/dist/client/components/request-async-storage.external.js")},4749:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external")},5869:e=>{"use strict";e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},399:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},2250:(e,t,n)=>{"use strict";n.r(t),n.d(t,{GlobalError:()=>i.a,__next_app__:()=>p,originalPathname:()=>g,pages:()=>c,routeModule:()=>m,tree:()=>d}),n(9495),n(7341),n(5866);var s=n(3191),a=n(8716),r=n(7922),i=n.n(r),o=n(5231),l={};for(let e in o)0>["default","tree","pages","GlobalError","originalPathname","__next_app__","routeModule"].indexOf(e)&&(l[e]=()=>o[e]);n.d(t,l);let d=["",{children:["sdks",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(n.bind(n,9495)),"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(n.bind(n,7341)),"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout.tsx"],"not-found":[()=>Promise.resolve().then(n.t.bind(n,5866,23)),"next/dist/client/components/not-found-error"]}],c=["/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page.tsx"],g="/sdks/page",p={require:n,loadChunk:()=>Promise.resolve()},m=new s.AppPageRouteModule({definition:{kind:a.x.APP_PAGE,page:"/sdks/page",pathname:"/sdks",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:d}})},5642:(e,t,n)=>{Promise.resolve().then(n.bind(n,4174))},6643:(e,t,n)=>{Promise.resolve().then(n.t.bind(n,2994,23)),Promise.resolve().then(n.t.bind(n,6114,23)),Promise.resolve().then(n.t.bind(n,9727,23)),Promise.resolve().then(n.t.bind(n,9671,23)),Promise.resolve().then(n.t.bind(n,1868,23)),Promise.resolve().then(n.t.bind(n,4759,23))},5303:()=>{},4174:(e,t,n)=>{"use strict";n.d(t,{Nav:()=>o});var s=n(326);n(7577);var a=n(434),r=n(5047);let i=[{href:"/",label:"Home"},{href:"/api-explorer",label:"API Explorer"},{href:"/get-started",label:"Get Started"},{href:"/sdks",label:"SDKs"},{href:"/pricing",label:"Pricing"}];function o(){let e=(0,r.usePathname)();return s.jsx("header",{className:"sticky top-0 z-50 border-b border-slate-200 bg-white/90 backdrop-blur",children:(0,s.jsxs)("nav",{className:"mx-auto flex max-w-7xl items-center justify-between px-6 py-4",children:[(0,s.jsxs)(a.default,{href:"/",className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-xl font-bold text-brand-600",children:"SentryAgent"}),s.jsx("span",{className:"rounded bg-brand-100 px-1.5 py-0.5 text-xs font-semibold text-brand-700",children:"AgentIdP"})]}),s.jsx("ul",{className:"flex items-center gap-1",children:i.map(({href:t,label:n})=>{let r="/"===t?"/"===e:e.startsWith(t);return s.jsx("li",{children:s.jsx(a.default,{href:t,className:["rounded-md px-3 py-2 text-sm font-medium transition-colors",r?"bg-brand-100 text-brand-700":"text-slate-600 hover:bg-slate-100 hover:text-slate-900"].join(" "),children:n})},t)})}),s.jsx(a.default,{href:"/get-started",className:"rounded-lg bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-brand-700",children:"Get Started Free"})]})})}},7341:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c,metadata:()=>d});var s=n(9510);n(7272);var a=n(8570);let r=(0,a.createProxy)(String.raw`/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx`),{__esModule:i,$$typeof:o}=r;r.default;let l=(0,a.createProxy)(String.raw`/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx#Nav`),d={title:"SentryAgent.ai Developer Portal",description:"Identity and access management for AI agents. Register, authenticate, and secure your agents with SentryAgent AgentIdP."};function c({children:e}){return s.jsx("html",{lang:"en",children:(0,s.jsxs)("body",{className:"min-h-screen bg-slate-50 text-slate-900 antialiased",children:[s.jsx(l,{}),s.jsx("main",{children:e}),s.jsx("footer",{className:"border-t border-slate-200 py-8 text-center text-sm text-slate-500",children:(0,s.jsxs)("p",{children:["\xa9 ",new Date().getFullYear()," SentryAgent.ai — All rights reserved."]})})]})})}},9495:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var s=n(9510);let a=[{name:"Node.js SDK",language:"typescript",badge:"TypeScript",installCmd:"npm install @sentryagent/idp-sdk",codeExample:`import { AgentIdPClient } from '@sentryagent/idp-sdk';
const client = new AgentIdPClient({
apiUrl: process.env.AGENTIDP_URL!,
clientId: process.env.AGENTIDP_CLIENT_ID!,
clientSecret: process.env.AGENTIDP_CLIENT_SECRET!,
});
// Register a new agent
const agent = await client.agents.register({
name: 'my-ai-agent',
description: 'Production summarisation agent',
});
console.log('Agent ID:', agent.agentId);
// Issue an access token
const { accessToken } = await client.tokens.issue(agent.agentId);
console.log('Token:', accessToken);`,repoUrl:"https://github.com/sentryagent/sdk-node"},{name:"Python SDK",language:"python",badge:"Python",installCmd:"pip install sentryagent-idp",codeExample:`from sentryagent_idp import AgentIdPClient
client = AgentIdPClient(
api_url=os.environ["AGENTIDP_URL"],
client_id=os.environ["AGENTIDP_CLIENT_ID"],
client_secret=os.environ["AGENTIDP_CLIENT_SECRET"],
)
# Register a new agent
agent = client.agents.register(
name="my-ai-agent",
description="Production summarisation agent",
)
print("Agent ID:", agent.agent_id)
# Issue an access token
token_response = client.tokens.issue(agent.agent_id)
print("Token:", token_response.access_token)`,repoUrl:"https://github.com/sentryagent/sdk-python"},{name:"Go SDK",language:"go",badge:"Go",installCmd:"go get github.com/sentryagent/idp-sdk-go",codeExample:`import (
"fmt"
"os"
idp "github.com/sentryagent/idp-sdk-go"
)
client := idp.NewClient(idp.Config{
APIURL: os.Getenv("AGENTIDP_URL"),
ClientID: os.Getenv("AGENTIDP_CLIENT_ID"),
ClientSecret: os.Getenv("AGENTIDP_CLIENT_SECRET"),
})
// Register a new agent
agent, err := client.Agents.Register(ctx, &idp.RegisterAgentInput{
Name: "my-ai-agent",
Description: "Production summarisation agent",
})
if err != nil {
panic(err)
}
fmt.Println("Agent ID:", agent.AgentID)
// Issue an access token
token, err := client.Tokens.Issue(ctx, agent.AgentID)
fmt.Println("Token:", token.AccessToken)`,repoUrl:"https://github.com/sentryagent/sdk-go"},{name:"Java SDK",language:"java",badge:"Java",installCmd:`<dependency>
<groupId>ai.sentryagent</groupId>
<artifactId>idp-sdk</artifactId>
<version>1.0.0</version>
</dependency>`,codeExample:`import ai.sentryagent.idp.AgentIdPClient;
import ai.sentryagent.idp.model.Agent;
import ai.sentryagent.idp.model.TokenResponse;
AgentIdPClient client = AgentIdPClient.builder()
.apiUrl(System.getenv("AGENTIDP_URL"))
.clientId(System.getenv("AGENTIDP_CLIENT_ID"))
.clientSecret(System.getenv("AGENTIDP_CLIENT_SECRET"))
.build();
// Register a new agent
Agent agent = client.agents().register(
RegisterAgentRequest.builder()
.name("my-ai-agent")
.description("Production summarisation agent")
.build()
);
System.out.println("Agent ID: " + agent.getAgentId());
// Issue an access token
TokenResponse token = client.tokens().issue(agent.getAgentId());
System.out.println("Token: " + token.getAccessToken());`,repoUrl:"https://github.com/sentryagent/sdk-java"}];function r(){return s.jsx("div",{className:"px-6 py-20",children:(0,s.jsxs)("div",{className:"mx-auto max-w-5xl",children:[(0,s.jsxs)("div",{className:"mb-12 text-center",children:[s.jsx("h1",{className:"mb-4 text-4xl font-extrabold text-slate-900",children:"Official SDKs"}),s.jsx("p",{className:"text-xl text-slate-600",children:"Native libraries for your language of choice. Every SDK is type-safe, fully tested, and maintained by the SentryAgent team."})]}),s.jsx("div",{className:"space-y-10",children:a.map(e=>(0,s.jsxs)("div",{className:"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm",children:[(0,s.jsxs)("div",{className:"mb-6 flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[s.jsx("h2",{className:"text-2xl font-bold text-slate-900",children:e.name}),s.jsx("span",{className:"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700",children:e.badge})]}),s.jsx("a",{href:e.repoUrl,target:"_blank",rel:"noopener noreferrer",className:"text-sm font-medium text-brand-600 hover:underline",children:"View on GitHub →"})]}),(0,s.jsxs)("div",{className:"mb-6",children:[s.jsx("p",{className:"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500",children:"Installation"}),s.jsx("pre",{className:"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100",children:s.jsx("code",{children:e.installCmd})})]}),(0,s.jsxs)("div",{children:[s.jsx("p",{className:"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500",children:"Quick Start"}),s.jsx("pre",{className:"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100",children:s.jsx("code",{children:e.codeExample})})]})]},e.name))})]})})}},7272:()=>{}};var t=require("../../webpack-runtime.js");t.C(e);var n=e=>t(t.s=e),s=t.X(0,[24],()=>n(2250));module.exports=s})();

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../node_modules/next/dist/client/components/action-async-storage.external.js","../../../../node_modules/next/dist/client/components/async-local-storage.js","../../../../node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../node_modules/next/dist/client/components/request-async-storage.external.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/package.json","../../../../package.json","../../../package.json","../../chunks/24.js","../../webpack-runtime.js","page_client-reference-manifest.js"]}

View File

@@ -0,0 +1 @@
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/sdks/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"231":{"*":{"id":"9404","name":"*","chunks":[],"async":false}},"16585":{"*":{"id":"1868","name":"*","chunks":[],"async":false}},"39275":{"*":{"id":"9671","name":"*","chunks":[],"async":false}},"49947":{"*":{"id":"3512","name":"*","chunks":[],"async":false}},"56390":{"*":{"id":"4174","name":"*","chunks":[],"async":false}},"61343":{"*":{"id":"4759","name":"*","chunks":[],"async":false}},"63933":{"*":{"id":"6435","name":"*","chunks":[],"async":false}},"66513":{"*":{"id":"6114","name":"*","chunks":[],"async":false}},"76130":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"95751":{"*":{"id":"2994","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/app-router.js":{"id":95751,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/client-page.js":{"id":66513,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":76130,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/layout-router.js":{"id":39275,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":16585,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":61343,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/globals.css":{"id":58877,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/Nav.tsx":{"id":56390,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/node_modules/next/dist/esm/client/link.js":{"id":231,"name":"*","chunks":["231","static/chunks/231-711da40718c2508c.js","931","static/chunks/app/page-d3d46720ba5b5546.js"],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/SwaggerExplorer.tsx":{"id":49947,"name":"*","chunks":[],"async":false},"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/components/GetStartedWizard.tsx":{"id":63933,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/layout":["static/css/0d1e1814871c1ae4.css"],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/page":[],"/home/ubuntu/vj_ai_agents_dev/sentryagent-idp/portal/app/sdks/page":[]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1 @@
{"version":1,"functions":{"/api-explorer":{},"/get-started":{}}}

View File

@@ -0,0 +1 @@
self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]";

View File

@@ -0,0 +1 @@
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-78c92fac7aa8fdd8.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:["static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js","static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-75820735529c9609.js","static/chunks/fd9d1056-0ffa74f19011bd1c.js","static/chunks/23-eed73080eee64cfd.js","static/chunks/main-app-ce894e58853e9441.js"],pages:{"/_app":["static/chunks/webpack-75820735529c9609.js","static/chunks/framework-00a8ba1a63cfdc9e.js","static/chunks/main-6e8e822f884ef93a.js","static/chunks/pages/_app-037b5d058bd9a820.js"],"/_error":["static/chunks/webpack-75820735529c9609.js","static/chunks/framework-00a8ba1a63cfdc9e.js","static/chunks/main-6e8e822f884ef93a.js","static/chunks/pages/_error-6ae619510b1539d6.js"]},ampFirstPages:[]};

View File

@@ -0,0 +1,6 @@
{
"version": 3,
"middleware": {},
"functions": {},
"sortedMiddleware": []
}

View File

@@ -0,0 +1 @@
self.__REACT_LOADABLE_MANIFEST='{"components/SwaggerExplorer.tsx -> swagger-ui-react":{"id":3844,"files":["static/chunks/949fd6f9.1aa1c52add26354d.js","static/chunks/361.1a4fa10338580a17.js"]}}';

View File

@@ -0,0 +1 @@
self.__NEXT_FONT_MANIFEST='{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}';

View File

@@ -0,0 +1 @@
{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false}

View File

@@ -0,0 +1 @@
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/404":"pages/404.html"}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-75820735529c9609.js" defer=""></script><script src="/_next/static/chunks/framework-00a8ba1a63cfdc9e.js" defer=""></script><script src="/_next/static/chunks/main-6e8e822f884ef93a.js" defer=""></script><script src="/_next/static/chunks/pages/_app-037b5d058bd9a820.js" defer=""></script><script src="/_next/static/chunks/pages/_error-6ae619510b1539d6.js" defer=""></script><script src="/_next/static/h5w-rj60Vif8vQbejZCYz/_buildManifest.js" defer=""></script><script src="/_next/static/h5w-rj60Vif8vQbejZCYz/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"h5w-rj60Vif8vQbejZCYz","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=888,e.ids=[888],e.modules={8141:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let n=r(167),o=r(997),i=n._(r(6689)),u=r(5782);async function s(e){let{Component:t,ctx:r}=e;return{pageProps:await (0,u.loadGetInitialProps)(t,r)}}class a extends i.default.Component{render(){let{Component:e,pageProps:t}=this.props;return(0,o.jsx)(e,{...t})}}a.origGetInitialProps=s,a.getInitialProps=s,("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5782:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(t,{DecodeError:function(){return g},MiddlewareNotFoundError:function(){return E},MissingStaticPage:function(){return y},NormalizeError:function(){return m},PageNotFoundError:function(){return P},SP:function(){return d},ST:function(){return p},WEB_VITALS:function(){return r},execOnce:function(){return n},getDisplayName:function(){return a},getLocationOrigin:function(){return u},getURL:function(){return s},isAbsoluteUrl:function(){return i},isResSent:function(){return c},loadGetInitialProps:function(){return f},normalizeRepeatedSlashes:function(){return l},stringifyError:function(){return x}});let r=["CLS","FCP","FID","INP","LCP","TTFB"];function n(e){let t,r=!1;return function(){for(var n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return r||(r=!0,t=e(...o)),t}}let o=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>o.test(e);function u(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function s(){let{href:e}=window.location,t=u();return e.substring(t.length)}function a(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function c(e){return e.finished||e.headersSent}function l(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function f(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await f(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&c(r))return n;if(!n)throw Error('"'+a(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.');return n}let d="undefined"!=typeof performance,p=d&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class g extends Error{}class m extends Error{}class P extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class y extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class E extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},167:(e,t)=>{t._=t._interop_require_default=function(e){return e&&e.__esModule?e:{default:e}}}};var t=require("../webpack-runtime.js");t.C(e);var r=t(t.s=8141);module.exports=r})();

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/next/dist/pages/_app.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../webpack-runtime.js"]}

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=660,e.ids=[660],e.modules={2785:e=>{e.exports=require("next/dist/compiled/next-server/pages.runtime.prod.js")},6689:e=>{e.exports=require("react")},997:e=>{e.exports=require("react/jsx-runtime")},1017:e=>{e.exports=require("path")}};var r=require("../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[682],()=>s(1682));module.exports=t})();

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/pages/_document.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../../package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../node_modules/client-only/index.js","../../../node_modules/client-only/package.json","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/pages.runtime.prod.js","../../../node_modules/next/dist/compiled/node-html-parser/index.js","../../../node_modules/next/dist/compiled/node-html-parser/package.json","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/package.json","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.development.js","../../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../../node_modules/react-dom/package.json","../../../node_modules/react-dom/server.browser.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react/package.json","../../../node_modules/styled-jsx/dist/index/index.js","../../../node_modules/styled-jsx/index.js","../../../node_modules/styled-jsx/package.json","../../package.json","../chunks/682.js","../webpack-runtime.js"]}

View File

@@ -0,0 +1 @@
self.__RSC_SERVER_MANIFEST="{\"node\":{},\"edge\":{},\"encryptionKey\":\"LSwgQkowlIo5zfSE4J41ucGAcTWUk6bhQyOtjLkQcXs=\"}"

View File

@@ -0,0 +1 @@
{"node":{},"edge":{},"encryptionKey":"LSwgQkowlIo5zfSE4J41ucGAcTWUk6bhQyOtjLkQcXs="}

View File

@@ -0,0 +1 @@
(()=>{"use strict";var e={},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var a=r[o]={exports:{}},u=!0;try{e[o](a,a.exports,t),u=!1}finally{u&&delete r[o]}return a.exports}t.m=e,t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},(()=>{var e,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;t.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);t.r(a);var u={};e=e||[null,r({}),r([]),r(r)];for(var f=2&n&&o;"object"==typeof f&&!~e.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach(e=>u[e]=()=>o[e]);return u.default=()=>o,t.d(a,u),a}})(),t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce((r,o)=>(t.f[o](e,r),r),[])),t.u=e=>""+e+".js",t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.X=(e,r,o)=>{var n=r;o||(r=e,o=()=>t(t.s=n)),r.map(t.e,t);var a=o();return void 0===a?e:a},(()=>{var e={658:1},r=r=>{var o=r.modules,n=r.ids,a=r.runtime;for(var u in o)t.o(o,u)&&(t.m[u]=o[u]);a&&a(t);for(var f=0;f<n.length;f++)e[n[f]]=1};t.f.require=(o,n)=>{e[o]||(658!=o?r(require("./chunks/"+t.u(o))):e[o]=1)},module.exports=t,t.C=r})()})();

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More