Files
sentryagent-idp/portal/.next/server/app/sdks.rsc
SentryAgent.ai Developer d1e6af25aa 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>
2026-04-02 04:29:50 +00:00

7 lines
11 KiB
Plaintext

2:I[39275,[],""]
3:I[61343,[],""]
4:I[56390,["231","static/chunks/231-711da40718c2508c.js","185","static/chunks/app/layout-db75ca053106eec0.js"],"Nav"]
0:["h5w-rj60Vif8vQbejZCYz",[[["",{"children":["sdks",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",{"children":["sdks",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"px-6 py-20","children":["$","div",null,{"className":"mx-auto max-w-5xl","children":[["$","div",null,{"className":"mb-12 text-center","children":[["$","h1",null,{"className":"mb-4 text-4xl font-extrabold text-slate-900","children":"Official SDKs"}],["$","p",null,{"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."}]]}],["$","div",null,{"className":"space-y-10","children":[["$","div","Node.js SDK",{"className":"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm","children":[["$","div",null,{"className":"mb-6 flex items-center justify-between","children":[["$","div",null,{"className":"flex items-center gap-3","children":[["$","h2",null,{"className":"text-2xl font-bold text-slate-900","children":"Node.js SDK"}],["$","span",null,{"className":"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700","children":"TypeScript"}]]}],["$","a",null,{"href":"https://github.com/sentryagent/sdk-node","target":"_blank","rel":"noopener noreferrer","className":"text-sm font-medium text-brand-600 hover:underline","children":"View on GitHub →"}]]}],["$","div",null,{"className":"mb-6","children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Installation"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100","children":["$","code",null,{"children":"npm install @sentryagent/idp-sdk"}]}]]}],["$","div",null,{"children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Quick Start"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100","children":["$","code",null,{"children":"import { AgentIdPClient } from '@sentryagent/idp-sdk';\n\nconst client = new AgentIdPClient({\n apiUrl: process.env.AGENTIDP_URL!,\n clientId: process.env.AGENTIDP_CLIENT_ID!,\n clientSecret: process.env.AGENTIDP_CLIENT_SECRET!,\n});\n\n// Register a new agent\nconst agent = await client.agents.register({\n name: 'my-ai-agent',\n description: 'Production summarisation agent',\n});\n\nconsole.log('Agent ID:', agent.agentId);\n\n// Issue an access token\nconst { accessToken } = await client.tokens.issue(agent.agentId);\nconsole.log('Token:', accessToken);"}]}]]}]]}],["$","div","Python SDK",{"className":"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm","children":[["$","div",null,{"className":"mb-6 flex items-center justify-between","children":[["$","div",null,{"className":"flex items-center gap-3","children":[["$","h2",null,{"className":"text-2xl font-bold text-slate-900","children":"Python SDK"}],["$","span",null,{"className":"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700","children":"Python"}]]}],["$","a",null,{"href":"https://github.com/sentryagent/sdk-python","target":"_blank","rel":"noopener noreferrer","className":"text-sm font-medium text-brand-600 hover:underline","children":"View on GitHub →"}]]}],["$","div",null,{"className":"mb-6","children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Installation"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100","children":["$","code",null,{"children":"pip install sentryagent-idp"}]}]]}],["$","div",null,{"children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Quick Start"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100","children":["$","code",null,{"children":"from sentryagent_idp import AgentIdPClient\n\nclient = AgentIdPClient(\n api_url=os.environ[\"AGENTIDP_URL\"],\n client_id=os.environ[\"AGENTIDP_CLIENT_ID\"],\n client_secret=os.environ[\"AGENTIDP_CLIENT_SECRET\"],\n)\n\n# Register a new agent\nagent = client.agents.register(\n name=\"my-ai-agent\",\n description=\"Production summarisation agent\",\n)\n\nprint(\"Agent ID:\", agent.agent_id)\n\n# Issue an access token\ntoken_response = client.tokens.issue(agent.agent_id)\nprint(\"Token:\", token_response.access_token)"}]}]]}]]}],["$","div","Go SDK",{"className":"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm","children":[["$","div",null,{"className":"mb-6 flex items-center justify-between","children":[["$","div",null,{"className":"flex items-center gap-3","children":[["$","h2",null,{"className":"text-2xl font-bold text-slate-900","children":"Go SDK"}],["$","span",null,{"className":"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700","children":"Go"}]]}],["$","a",null,{"href":"https://github.com/sentryagent/sdk-go","target":"_blank","rel":"noopener noreferrer","className":"text-sm font-medium text-brand-600 hover:underline","children":"View on GitHub →"}]]}],["$","div",null,{"className":"mb-6","children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Installation"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100","children":["$","code",null,{"children":"go get github.com/sentryagent/idp-sdk-go"}]}]]}],["$","div",null,{"children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Quick Start"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100","children":["$","code",null,{"children":"import (\n \"fmt\"\n \"os\"\n idp \"github.com/sentryagent/idp-sdk-go\"\n)\n\nclient := idp.NewClient(idp.Config{\n APIURL: os.Getenv(\"AGENTIDP_URL\"),\n ClientID: os.Getenv(\"AGENTIDP_CLIENT_ID\"),\n ClientSecret: os.Getenv(\"AGENTIDP_CLIENT_SECRET\"),\n})\n\n// Register a new agent\nagent, err := client.Agents.Register(ctx, &idp.RegisterAgentInput{\n Name: \"my-ai-agent\",\n Description: \"Production summarisation agent\",\n})\nif err != nil {\n panic(err)\n}\nfmt.Println(\"Agent ID:\", agent.AgentID)\n\n// Issue an access token\ntoken, err := client.Tokens.Issue(ctx, agent.AgentID)\nfmt.Println(\"Token:\", token.AccessToken)"}]}]]}]]}],["$","div","Java SDK",{"className":"rounded-2xl border border-slate-200 bg-white p-8 shadow-sm","children":[["$","div",null,{"className":"mb-6 flex items-center justify-between","children":[["$","div",null,{"className":"flex items-center gap-3","children":[["$","h2",null,{"className":"text-2xl font-bold text-slate-900","children":"Java SDK"}],["$","span",null,{"className":"rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700","children":"Java"}]]}],["$","a",null,{"href":"https://github.com/sentryagent/sdk-java","target":"_blank","rel":"noopener noreferrer","className":"text-sm font-medium text-brand-600 hover:underline","children":"View on GitHub →"}]]}],["$","div",null,{"className":"mb-6","children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Installation"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100","children":["$","code",null,{"children":"<dependency>\n <groupId>ai.sentryagent</groupId>\n <artifactId>idp-sdk</artifactId>\n <version>1.0.0</version>\n</dependency>"}]}]]}],["$","div",null,{"children":[["$","p",null,{"className":"mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500","children":"Quick Start"}],["$","pre",null,{"className":"overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100","children":["$","code",null,{"children":"import ai.sentryagent.idp.AgentIdPClient;\nimport ai.sentryagent.idp.model.Agent;\nimport ai.sentryagent.idp.model.TokenResponse;\n\nAgentIdPClient client = AgentIdPClient.builder()\n .apiUrl(System.getenv(\"AGENTIDP_URL\"))\n .clientId(System.getenv(\"AGENTIDP_CLIENT_ID\"))\n .clientSecret(System.getenv(\"AGENTIDP_CLIENT_SECRET\"))\n .build();\n\n// Register a new agent\nAgent agent = client.agents().register(\n RegisterAgentRequest.builder()\n .name(\"my-ai-agent\")\n .description(\"Production summarisation agent\")\n .build()\n);\nSystem.out.println(\"Agent ID: \" + agent.getAgentId());\n\n// Issue an access token\nTokenResponse token = client.tokens().issue(agent.getAgentId());\nSystem.out.println(\"Token: \" + token.getAccessToken());"}]}]]}]]}]]}]]}]}]],null],null]},["$","$L2",null,{"parallelRouterKey":"children","segmentPath":["children","sdks","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":{"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,"$L5"]]]]]
5:[["$","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