PageSourceSearch

https://docs.aragora.ai/assets/js/0e36f7ff.3fa3e67c.js

js aragora.ai collected 2026-10-05 12:35:40 UTC 54,082 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkaragora_docs=globalThis.webpackChunkaragora_docs||[]).push([[988],{2375(e,d,n){n.r(d),n.d(d,{assets:()=>t,contentTitle:()=>c,default:()=>o,frontMatter:()=>l,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"contributing/handlers","title":"HTTP Handler Reference","description":"HTTP Handler Reference","source":"@site/docs/contributing/handlers.md","sourceDirName":"contributing","slug":"/contributing/handlers","permalink":"/docs/contributing/handlers","draft":false,"unlisted":false,"editUrl":"https://github.com/aragora/aragora/tree/main/docs/docs/contributing/handlers.md","tags":[],"version":"current","lastUpdatedBy":"Armand","lastUpdatedAt":1770345882000,"frontMatter":{"title":"HTTP Handler Reference","description":"HTTP Handler Reference"}}');var s=n(4848),r=n(8453);const l={title:"HTTP Handler Reference",description:"HTTP Handler Reference"},c="HTTP Handler Reference",t={},h=[{value:"Overview",id:"overview",level:2},{value:"Handler Structure",id:"handler-structure",level:2},{value:"Admin Handlers",id:"admin-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints",level:3},{value:"Agent Handlers",id:"agent-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-1",level:3},{value:"Auth Handlers",id:"auth-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-2",level:3},{value:"Control Plane & Decisioning Handlers",id:"control-plane--decisioning-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-3",level:3},{value:"Debate Handlers",id:"debate-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-4",level:3},{value:"Feature Handlers",id:"feature-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-5",level:3},{value:"Inbox & Email Handlers",id:"inbox--email-handlers",level:2},{value:"Workflow & Template Handlers",id:"workflow--template-handlers",level:2},{value:"Gauntlet & Audit Handlers",id:"gauntlet--audit-handlers",level:2},{value:"Memory Handlers",id:"memory-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-6",level:3},{value:"Social Handlers",id:"social-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-7",level:3},{value:"Verification Handlers",id:"verification-handlers",level:2},{value:"Key Endpoints",id:"key-endpoints-8",level:3},{value:"Other Handlers",id:"other-handlers",level:2},{value:"Experimental Handlers",id:"experimental-handlers",level:2},{value:"Stability Levels",id:"stability-levels",level:3},{value:"Utility Modules",id:"utility-modules",level:2},{value:"Creating New Handlers",id:"creating-new-handlers",level:2},{value:"See Also",id:"see-also",level:2}];function a(e){const d={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.header,{children:(0,s.jsx)(d.h1,{id:"http-handler-reference",children:"HTTP Handler Reference"})}),"\n",(0,s.jsxs)(d.p,{children:["This document indexes all HTTP handlers in ",(0,s.jsx)(d.code,{children:"aragora/server/handlers/"}),"."]}),"\n",(0,s.jsx)(d.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsxs)(d.p,{children:["The server uses a modular handler architecture organized by domain. Each handler extends ",(0,s.jsx)(d.code,{children:"BaseHandler"})," and registers routes it can handle. Counts vary by deployment; run ",(0,s.jsx)(d.code,{children:"python scripts/generate_api_docs.py --format json"})," to enumerate the full surface area. See the ",(0,s.jsx)(d.a,{href:"#experimental-handlers",children:"Experimental Handlers"})," section for features in development."]}),"\n",(0,s.jsx)(d.h2,{id:"handler-structure",children:"Handler Structure"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"handlers/\n\u251c\u2500\u2500 admin/              # Administration & system management\n\u251c\u2500\u2500 agents/             # Agent management & leaderboards\n\u251c\u2500\u2500 auth/               # Authentication & authorization\n\u251c\u2500\u2500 debates/            # Core debate operations\n\u251c\u2500\u2500 decisions/          # Decision explainability endpoints\n\u251c\u2500\u2500 evolution/          # Prompt evolution & A/B testing\n\u251c\u2500\u2500 features/           # Feature modules (audio, evidence, inbox, etc.)\n\u251c\u2500\u2500 inbox/              # Inbox command + shared inbox workflows\n\u251c\u2500\u2500 knowledge/          # Knowledge analytics + sharing\n\u251c\u2500\u2500 knowledge_base/     # Knowledge Mound API surface\n\u251c\u2500\u2500 memory/             # Memory & learning systems\n\u251c\u2500\u2500 social/             # Social features & integrations\n\u251c\u2500\u2500 verification/       # Formal verification\n\u251c\u2500\u2500 voice/              # Voice endpoints\n\u251c\u2500\u2500 control_plane.py    # Control plane orchestration\n\u251c\u2500\u2500 decision.py         # Unified decision router\n\u251c\u2500\u2500 deliberations.py    # Vetted decisionmaking dashboard endpoints (deliberations API)\n\u251c\u2500\u2500 gauntlet.py         # Gauntlet stress-test API\n\u251c\u2500\u2500 workflows.py        # Workflow execution endpoints\n\u2514\u2500\u2500 webhooks.py         # Outbound webhook management\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"admin-handlers",children:"Admin Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"admin/admin.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/admin/*"})}),(0,s.jsx)(d.td,{children:"System-wide administration, user/org listing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"admin/billing.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/billing/*"})}),(0,s.jsx)(d.td,{children:"Subscription & payment management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"admin/dashboard.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/dashboard/*"})}),(0,s.jsx)(d.td,{children:"Consolidated debate metrics"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"admin/health.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/health"}),", ",(0,s.jsx)(d.code,{children:"/ready"})]}),(0,s.jsx)(d.td,{children:"Health & readiness probes"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"admin/system.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/system/*"})}),(0,s.jsx)(d.td,{children:"System config & maintenance"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"usage_metering.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/v1/billing/usage/*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/quotas"})]}),(0,s.jsx)(d.td,{children:"Usage metering and quota status"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"GET  /health              - Health check\nGET  /ready               - Readiness check\nGET  /api/admin/users     - List users (admin only)\nGET  /api/admin/stats     - System statistics\nGET  /api/dashboard       - Aggregated metrics\n\n# Usage Metering (Enterprise)\nGET  /api/v1/billing/usage         - Current billing period usage summary\nGET  /api/v1/billing/usage/summary - Alias for usage summary\nGET  /api/v1/billing/usage/breakdown - Detailed usage by model, provider, day\nGET  /api/v1/billing/limits        - Current tier limits and utilization\nGET  /api/v1/billing/usage/export  - Export usage as CSV or JSON\nGET  /api/v1/quotas                - Quota status for all resources\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"agent-handlers",children:"Agent Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"agents/agents.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/agents/*"})}),(0,s.jsx)(d.td,{children:"Agent registration, status, configuration"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"agents/calibration.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/calibration/*"})}),(0,s.jsx)(d.td,{children:"Calibration curves & prediction accuracy"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"agents/leaderboard.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/leaderboard/*"})}),(0,s.jsx)(d.td,{children:"ELO rankings & tournament results"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"agents/probes.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/probes/*"})}),(0,s.jsx)(d.td,{children:"Capability probing & adversarial testing"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-1",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"GET  /api/agents                    - List agents\nGET  /api/agents/:name              - Get agent details\nGET  /api/leaderboard               - ELO rankings\nGET  /api/calibration/:agent        - Agent calibration data\nPOST /api/probes/run                - Run capability probes\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"auth-handlers",children:"Auth Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"auth/handler.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/auth/*"})}),(0,s.jsx)(d.td,{children:"Login, logout, session management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"oauth.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/oauth/*"})}),(0,s.jsx)(d.td,{children:"OAuth2 provider integration"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"auth/signup_handlers.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/auth/*"})}),(0,s.jsx)(d.td,{children:"Self-service signup, org setup, invitations"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"auth/sso_handlers.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/auth/sso/*"})}),(0,s.jsx)(d.td,{children:"OIDC-based SSO endpoints"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"sso.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/auth/sso/*"})}),(0,s.jsx)(d.td,{children:"SAML/legacy SSO endpoints"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-2",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"POST /api/auth/login      - User login\nPOST /api/auth/logout     - User logout\nGET  /api/auth/me         - Current user info\nGET  /api/oauth/:provider - OAuth initiation\nPOST /api/oauth/callback  - OAuth callback\nPOST /api/v1/auth/signup  - Self-service signup\nGET  /api/v1/auth/sso/login - SSO login (OIDC)\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"control-plane--decisioning-handlers",children:"Control Plane & Decisioning Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"control_plane.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/control-plane/*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/control-plane/*"})]}),(0,s.jsx)(d.td,{children:"Agent registry, queues, health, and task orchestration"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"decision.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/decisions/*"})}),(0,s.jsx)(d.td,{children:"Unified decision router across debate/workflow/gauntlet"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"decisions/ex
1plain.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/decisions/:id/explain"})}),(0,s.jsx)(d.td,{children:"Decision explainability payloads"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"deliberations.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/deliberations/*"})}),(0,s.jsx)(d.td,{children:"Vetted decisionmaking dashboard and event stream"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-3",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"POST /api/v1/decisions              - Submit a decision request\nGET  /api/v1/decisions/:id          - Get decision status/result\nPOST /api/control-plane/deliberations - Run or queue a vetted decisionmaking session\nGET  /api/v1/deliberations/active   - List active deliberations\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"debate-handlers",children:"Debate Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/handler.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/debates/*"})}),(0,s.jsx)(d.td,{children:"Core debate CRUD operations"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/batch.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/debates/batch/*"})}),(0,s.jsx)(d.td,{children:"Batch debate submission"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/fork.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/debates/:id/fork"})}),(0,s.jsx)(d.td,{children:"Counterfactual forking"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/graph_debates.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/graph-debates/*"})}),(0,s.jsx)(d.td,{children:"Branching graph debates"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/matrix_debates.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/matrix-debates/*"})}),(0,s.jsx)(d.td,{children:"Multi-scenario matrix debates"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-4",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"POST /api/debates               - Create debate\nGET  /api/debates/:id           - Get debate status\nGET  /api/debates/:id/result    - Get debate result\nPOST /api/debates/:id/vote      - Submit vote\nPOST /api/debates/:id/fork      - Fork debate\nPOST /api/graph-debates         - Create graph debate\nPOST /api/matrix-debates        - Create matrix debate\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"feature-handlers",children:"Feature Handlers"}),"\n",(0,s.jsxs)(d.p,{children:["Representative feature handlers are listed below. The features namespace\nevolves quickly; see ",(0,s.jsx)(d.a,{href:"../api/endpoints",children:"API_ENDPOINTS.md"})," for the full\nauto-generated list."]}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/audio.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/audio/*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/podcast/*"})]}),(0,s.jsx)(d.td,{children:"Audio file serving + podcast feed"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/broadcast.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/debates/*/broadcast*"})}),(0,s.jsx)(d.td,{children:"Live debate broadcasting"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/connectors.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/connectors/*"})}),(0,s.jsx)(d.td,{children:"Connector registry + sync jobs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/documents.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/documents/*"})}),(0,s.jsx)(d.td,{children:"Document upload + metadata"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/document_query.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/documents/*"})}),(0,s.jsx)(d.td,{children:"Document Q&A, summarize, compare, extract"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/evidence.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/evidence/*"})}),(0,s.jsx)(d.td,{children:"Evidence collection & search"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/features.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/features/*"})}),(0,s.jsx)(d.td,{children:"Feature flags & toggles"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/gmail_ingest.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/gmail/*"})}),(0,s.jsx)(d.td,{children:"Gmail ingestion, sync, search"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/gmail_query.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/gmail/query"})}),(0,s.jsx)(d.td,{children:"Gmail query API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/integrations.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/integrations/*"})}),(0,s.jsx)(d.td,{children:"Integration configuration + status"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/unified_inbox.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/inbox/*"})}),(0,s.jsx)(d.td,{children:"Unified inbox accounts + triage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/email_webhooks.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/webhooks/*"})}),(0,s.jsx)(d.td,{children:"Gmail/Outlook webhook subscriptions"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/routing_rules.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/routing-rules/*"})}),(0,s.jsx)(d.td,{children:"Routing rules management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/smart_upload.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/upload/*"})}),(0,s.jsx)(d.td,{children:"Smart upload + file classification"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/cloud_storage.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/cloud/*"})}),(0,s.jsx)(d.td,{children:"Cloud storage provider integrations"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/codebase_audit.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/codebase/*"})}),(0,s.jsx)(d.td,{children:"Codebase scans + findings"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/reconciliation.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/reconciliation/*"})}),(0,s.jsx)(d.td,{children:"Reconciliation runs + reports"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/marketplace.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/marketplace/*"})}),(0,s.jsx)(d.td,{children:"Template marketplace API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/rlm.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/rlm/*"})}),(0,s.jsx)(d.td,{children:"RLM query/compress endpoints"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/advertising.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/advertising/*"})}),(0,s.jsx)(d.td,{children:"Advertising platform APIs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/analytics_platforms.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/analytics/*"})}),(0,s.jsx)(d.td,{children:"Analytics/BI platform APIs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/cross_platform_analytics.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/analytics/cross-platform/*"})}),(0,s.jsx)(d.td,{children:"Cross-platform analytics aggregation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/crm.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/crm/*"})}),(0,s.jsx)(d.td,{children:"CRM platform APIs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/ecommerce.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/ecommerce/*"})}),(0,s.jsx)(d.td,{children:"Ecommerce platform APIs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/support.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/support/*"})}),(0,s.jsx)(d.td,{children:"Support/helpdesk platform APIs"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/legal.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/legal/*"})}),(0,s.jsx)(d.td,{children:"Legal platform integrations"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/devops.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/devops/*"})}),(0,s.jsx)(d.td,{children:"DevOps integrations"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/plugins.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/plugins/*"})}),(0,s.jsx)(d.td,{children:"Plugin management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/pulse.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/pulse/*"})}),(0,s.jsx)(d.td,{children:"Trending topics"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-5",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"GET  /api/v1/features           - List feature flags\nPOST /api/v1/evidence/collect   - Collect evidence\nGET  /api/v1/pulse/trending     - Get trending topics\nPOST /api/v1/documents/upload   - Upload a document\nPOST /api/v1/debates/*/broadcast - Start live broadcast\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"inbox--email-handlers",children:"Inbox & Email Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"email.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/email/*"})}),(0,s.jsx)(d.td,{children:"Inbox prioritization, categorization, feedback"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/gmail_ingest.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/gmail/*"})}),(0,s.jsx)(d.td,{children:"Gmail OAuth, sync, search"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/gmail_query.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/gmail/query"})}),(0,s.jsx)(d.td,{children:"Gmail query API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/unified_inbox.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/inbox/*"})}),(0,s.jsx)(d.td,{children:"Unified inbox accounts + triage"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"shared_
1inbox.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/inbox/shared*"})}),(0,s.jsx)(d.td,{children:"Shared inbox routing + rules"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"inbox/*"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/inbox/*"})}),(0,s.jsx)(d.td,{children:"Action items + team inbox workflows"})]})]})]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"workflow--template-handlers",children:"Workflow & Template Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"workflows.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/workflows*"})}),(0,s.jsx)(d.td,{children:"Workflow execution + approvals"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"workflow_templates.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/workflow/templates*"})}),(0,s.jsx)(d.td,{children:"Workflow templates CRUD + run"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"template_marketplace.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/marketplace/*"})}),(0,s.jsx)(d.td,{children:"Template marketplace + featured sets"})]})]})]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"gauntlet--audit-handlers",children:"Gauntlet & Audit Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"gauntlet.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/gauntlet/*"})}),(0,s.jsx)(d.td,{children:"Adversarial stress tests + receipts"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"features/audit_sessions.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/audit/sessions*"})}),(0,s.jsx)(d.td,{children:"Audit session lifecycle + reports"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"audit_trail.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/v1/audit-trails*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/receipts*"})]}),(0,s.jsx)(d.td,{children:"Audit trails + decision receipts"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"audit_export.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/audit/*"})}),(0,s.jsx)(d.td,{children:"Export audit logs + verify integrity"})]})]})]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"memory-handlers",children:"Memory Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"memory/memory.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/memory/*"})}),(0,s.jsx)(d.td,{children:"Memory tier management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"memory/insights.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/insights/*"})}),(0,s.jsx)(d.td,{children:"Extracted insights"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"memory/learning.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/learning/*"})}),(0,s.jsx)(d.td,{children:"Continuous learning"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"memory/memory_analytics.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/memory/analytics*"})}),(0,s.jsx)(d.td,{children:"Memory usage analytics"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-6",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"GET  /api/v1/memory/tiers       - Memory tier configuration\nPOST /api/v1/memory/search      - Search memory\nGET  /api/v1/insights/recent    - List insights\nGET  /api/v1/memory/analytics   - Memory analytics snapshots\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"social-handlers",children:"Social Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/collaboration.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/collaboration/*"})}),(0,s.jsx)(d.td,{children:"Team collaboration sessions (legacy unversioned)"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/notifications.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/notifications/*"})}),(0,s.jsx)(d.td,{children:"Email + Telegram notifications"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/relationship.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/v1/relationships*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/relationship/*"})]}),(0,s.jsx)(d.td,{children:"Agent relationships"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/sharing.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/v1/debates/*/share"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/shared/*"})]}),(0,s.jsx)(d.td,{children:"Debate sharing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/slack.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/integrations/slack/*"})}),(0,s.jsx)(d.td,{children:"Slack commands/events"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/telegram.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/integrations/telegram/*"})}),(0,s.jsx)(d.td,{children:"Telegram webhooks"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/whatsapp.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/integrations/whatsapp/*"})}),(0,s.jsx)(d.td,{children:"WhatsApp webhooks"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"social/social_media.py"})}),(0,s.jsxs)(d.td,{children:[(0,s.jsx)(d.code,{children:"/api/v1/debates/*/publish/*"}),", ",(0,s.jsx)(d.code,{children:"/api/v1/youtube/*"})]}),(0,s.jsx)(d.td,{children:"Social publishing"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-7",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"POST /api/v1/debates/:id/share          - Share debate\nGET  /api/v1/notifications/status      - Notification status\nGET  /api/v1/relationship/:a/:b         - Agent relationship\nPOST /api/v1/integrations/slack/events - Slack events webhook\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"verification-handlers",children:"Verification Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"verification/verification.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/verification/*"})}),(0,s.jsx)(d.td,{children:"Verification status + formal checks"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"verification/formal_verification.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/verify/*"})}),(0,s.jsx)(d.td,{children:"Formal proofs (Z3/Lean)"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"key-endpoints-8",children:"Key Endpoints"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{children:"POST /api/v1/verify/claim       - Verify a claim\nGET  /api/v1/verify/status      - Verification status\nPOST /api/formal/prove          - Generate formal proof\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"other-handlers",children:"Other Handlers"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Routes"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"analytics.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/analytics/*"})}),(0,s.jsx)(d.td,{children:"Usage analytics"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"accounting.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/accounting/*"})}
1),(0,s.jsx)(d.td,{children:"QuickBooks + Gusto accounting"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ap_automation.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/accounting/ap/*"})}),(0,s.jsx)(d.td,{children:"Accounts payable automation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ar_automation.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/accounting/ar/*"})}),(0,s.jsx)(d.td,{children:"Accounts receivable automation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"audit_export.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/audit/*"})}),(0,s.jsx)(d.td,{children:"Audit log export"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"auditing.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/auditing/*"})}),(0,s.jsx)(d.td,{children:"Security analysis"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"belief.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/belief/*"})}),(0,s.jsx)(d.td,{children:"Belief network analysis"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"breakpoints.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/breakpoints/*"})}),(0,s.jsx)(d.td,{children:"Human-in-the-loop"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"checkpoints.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/checkpoints/*"})}),(0,s.jsx)(d.td,{children:"Debate checkpoints"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"consensus.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/consensus/*"})}),(0,s.jsx)(d.td,{children:"Consensus memory"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"critique.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/critique/*"})}),(0,s.jsx)(d.td,{children:"Critique patterns"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"code_review.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/code-review/*"})}),(0,s.jsx)(d.td,{children:"Multi-agent code review"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"dashboard.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/v1/dashboard/*"})}),(0,s.jsx)(d.td,{children:"Main dashboard API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"docs.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/docs/*"})}),(0,s.jsx)(d.td,{children:"API documentation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"debates/intervention.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/debates/*/intervention/*"})}),(0,s.jsx)(d.td,{children:"Mid\u2011debate interventions"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"gallery.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/gallery/*"})}),(0,s.jsx)(d.td,{children:"Debate gallery"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"gauntlet.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/gauntlet/*"})}),(0,s.jsx)(d.td,{children:"Adversarial testing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"genesis.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/genesis/*"})}),(0,s.jsx)(d.td,{children:"Agent breeding"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"introspection.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/introspection/*"})}),(0,s.jsx)(d.td,{children:"Agent introspection"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"laboratory.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/laboratory/*"})}),(0,s.jsx)(d.td,{children:"Persona experiments"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"metrics.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/metrics/*"})}),(0,s.jsx)(d.td,{children:"Prometheus metrics"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"moments.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/moments/*"})}),(0,s.jsx)(d.td,{children:"Significant moments"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"nomic.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/nomic/*"})}),(0,s.jsx)(d.td,{children:"Nomic loop control"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"organizations.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/organizations/*"})}),(0,s.jsx)(d.td,{children:"Organization management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"persona.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/persona/*"})}),(0,s.jsx)(d.td,{children:"Persona management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"privacy.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/privacy/*"})}),(0,s.jsx)(d.td,{children:"Data privacy"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"replays.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/replays/*"})}),(0,s.jsx)(d.td,{children:"Debate replays"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"reviews.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/reviews/*"})}),(0,s.jsx)(d.td,{children:"Debate reviews"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"tournaments.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/tournaments/*"})}
1),(0,s.jsx)(d.td,{children:"Tournament management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"training.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/training/*"})}),(0,s.jsx)(d.td,{children:"Training data export"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"webhooks.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/webhooks/*"})}),(0,s.jsx)(d.td,{children:"Webhook management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"connectors.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/connectors/*"})}),(0,s.jsx)(d.td,{children:"Data connector management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"control_plane.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/control-plane/*"})}),(0,s.jsx)(d.td,{children:"Enterprise control plane"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"routing.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/routing/*"})}),(0,s.jsx)(d.td,{children:"Agent routing & team selection"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"selection.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/selection/*"})}),(0,s.jsx)(d.td,{children:"Selection plugin API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"evaluation.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/evaluation/*"})}),(0,s.jsx)(d.td,{children:"LLM-as-Judge evaluation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"knowledge.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/knowledge/*"})}),(0,s.jsx)(d.td,{children:"Knowledge base API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ml.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/ml/*"})}),(0,s.jsx)(d.td,{children:"ML capabilities API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"policy.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/policy/*"})}),(0,s.jsx)(d.td,{children:"Policy compliance"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"queue.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/queue/*"})}),(0,s.jsx)(d.td,{children:"Job queue management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"repository.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/repository/*"})}),(0,s.jsx)(d.td,{children:"Repository indexing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"uncertainty.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/uncertainty/*"})}),(0,s.jsx)(d.td,{children:"Uncertainty estimation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"verticals.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/verticals/*"})}),(0,s.jsx)(d.td,{children:"Vertical specialists"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"workspace.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/workspace/*"})}),(0,s.jsx)(d.td,{children:"Enterprise workspace"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"workflows.py"})}),(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"/api/workflows/*"})}),(0,s.jsx)(d.td,{children:"Workflow engine API"})]})]})]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"experimental-handlers",children:"Experimental Handlers"}),"\n",(0,s.jsxs)(d.p,{children:["These handlers are functional but APIs may change. Check ",(0,s.jsx)(d.code,{children:"aragora/server/handlers/__init__.py"})," for current stability levels."]}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Handler"}),(0,s.jsx)(d.th,{children:"Phase"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"AnalyticsDashboardHandler"})}),(0,s.jsx)(d.td,{children:"EXPERIMENTAL"}),(0,s.jsx)(d.td,{children:"Enterprise analytics dashboard"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RoutingHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Agent routing and team selection"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SelectionHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Selection plugin API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"ControlPlaneHandler"})}),(0,s.jsx)(d.td,{children:"Phase 0"}),(0,s.jsx)(d.td,{children:"Enterprise control plane"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"DocumentQueryHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Natural language document querying"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"EvaluationHandler"})}),(0,s.jsx)(d.td,{children:"EXPERIMENTAL"}),(0,s.jsx)(d.td,{children:"LLM-as-Judge evaluation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"EvidenceEnrichmentHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Evidence enrichment for findings"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FindingWorkflowHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Finding workflow management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"FolderUploadHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Folder upload support"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"KnowledgeHandler"})}),(0,s.jsx)(d.td,{children:"EXPERIMENTAL"}),(0,s.jsx)(d.td,{children:"Knowledge base API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"KnowledgeMoundHandler"})}),(0,s.jsx)(d.td,{children:"Phase A1"}),(0,s.jsx)(d.td,{children:"Knowledge Mound system"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"MLHandler"})}),(0,s.jsx)(d.td,{children:"EXPERIMENTAL"}),(0,s.jsx)(d.td,{children:"ML capabilities API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"PolicyHandler"})}),(0,s.jsx)(d.td,{children:"Phase 2"}),(0,s.jsx)(d.td,{children:"Policy and compliance management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"QueueHandler"})}),(0,s.jsx)(d.td,{children:"Phase A1"}),(0,s.jsx)(d.td,{children:"Job queue management"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"RepositoryHandler"})}),(0,s.jsx)(d.td,{children:"Phase A3"}),(0,s.jsx)(d.td,{children:"Repository indexing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SchedulerHandler"})}),(0,s.jsx)(d.td,{children:"Phase A"}),(0,s.jsx)(d.td,{children:"Audit scheduling"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"SlackHandler"})}),(0,s.jsx)(d.td,{children:"EXPERIMENTAL"}),(0,s.jsx)(d.td,{children:"Slack integration"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"UncertaintyHandler"})}),(0,s.jsx)(d.td,{children:"Phase A1"}),(0,s.jsx)(d.td,{children:"Uncertainty estimation"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"VerticalsHandler"})}),(0,s.jsx)(d.td,{children:"Phase A1"}),(0,s.jsx)(d.td,{children:"Vertical specialist API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"WorkflowHandler"})}),(0,s.jsx)(d.td,{children:"Phase 2"}),(0,s.jsx)(d.td,{children:"Workflow engine API"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"Worksp
1aceHandler"})}),(0,s.jsx)(d.td,{children:"Phase 2"}),(0,s.jsx)(d.td,{children:"Enterprise workspace/privacy"})]})]})]}),"\n",(0,s.jsx)(d.h3,{id:"stability-levels",children:"Stability Levels"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.strong,{children:"STABLE"}),": Production-ready, backwards compatible"]}),"\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.strong,{children:"PREVIEW"}),": Feature complete, API may change slightly"]}),"\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.strong,{children:"EXPERIMENTAL"}),": In development, expect breaking changes"]}),"\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.strong,{children:"Phase 0/A/A1/A3/2"}),": Enterprise feature rollout phases"]}),"\n"]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"utility-modules",children:"Utility Modules"}),"\n",(0,s.jsxs)(d.table,{children:[(0,s.jsx)(d.thead,{children:(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.th,{children:"Module"}),(0,s.jsx)(d.th,{children:"Description"})]})}),(0,s.jsxs)(d.tbody,{children:[(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"base.py"})}),(0,s.jsx)(d.td,{children:"Base handler class with common utilities"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"exceptions.py"})}),(0,s.jsx)(d.td,{children:"Handler exception types"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"interface.py"})}),(0,s.jsx)(d.td,{children:"Handler Protocol definitions and contracts"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"types.py"})}),(0,s.jsx)(d.td,{children:"Type definitions"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utilities.py"})}),(0,s.jsx)(d.td,{children:"Shared handler utility functions"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/database.py"})}),(0,s.jsx)(d.td,{children:"Database access helpers"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/decorators.py"})}),(0,s.jsx)(d.td,{children:"Handler decorators"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/params.py"})}),(0,s.jsx)(d.td,{children:"Query parameter parsing"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/rate_limit.py"})}),(0,s.jsx)(d.td,{children:"Rate limiting utilities"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/responses.py"})}),(0,s.jsx)(d.td,{children:"Response formatting"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/routing.py"})}),(0,s.jsx)(d.td,{children:"Route matching utilities"})]}),(0,s.jsxs)(d.tr,{children:[(0,s.jsx)(d.td,{children:(0,s.jsx)(d.code,{children:"utils/safe_data.py"})}),(0,s.jsx)(d.td,{children:"Data sanitization"})]})]})]}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"creating-new-handlers",children:"Creating New Handlers"}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-python",children:'from aragora.server.handlers.base import (\n    BaseHandler,\n    json_response,\n    error_response,\n)\n\nclass MyHandler(BaseHandler):\n    """My custom handler."""\n\n    routes = [\n        "GET /api/my-feature",\n        "POST /api/my-feature",\n    ]\n\n    def can_handle(self, path: str) -> bool:\n        return path.startswith("/api/my-feature")\n\n    def handle(self, path, query_params, handler):\n        return json_response({"status": "ok"})\n\n    def handle_post(self, path, query_params, handler):\n        body, err = self.read_json_body_validated(handler)\n        if err:\n            return err\n        return json_response({"received": body})\n'})}),"\n",(0,s.jsxs)(d.p,{children:["Register in ",(0,s.jsx)(d.code,{children:"handlers/__init__.py"}),":"]}),"\n",(0,s.jsx)(d.pre,{children:(0,s.jsx)(d.code,{className:"language-python",children:"from .my_handler import MyHandler\n\nALL_HANDLERS = [\n    # ... existing handlers ...\n    MyHandler,\n]\n"})}),"\n",(0,s.jsx)(d.hr,{}),"\n",(0,s.jsx)(d.h2,{id:"see-also",children:"See Also"}),"\n",(0,s.jsxs)(d.ul,{children:["\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.a,{href:"../api/endpoints",children:"API Endpoints"})," - Full endpoint reference"]}),"\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.a,{href:"../api/rate-limits",children:"API Rate Limits"})," - Rate limiting configuration"]}),"\n",(0,s.jsxs)(d.li,{children:[(0,s.jsx)(d.a,{href:"../guides/websocket-events",children:"WebSocket Events"})," - Real-time event streaming"]}),"\n"]})]})}function o(e={}){const{wrapper:d}={...(0,r.R)(),...e.components};return d?(0,s.jsx)(d,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453(e,d,n){n.d(d,{R:()=>l,x:()=>c});var i=n(6540);const s={},r=i.createContext(s);function l(e){const d=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(d):{...d,...e}},[d,e])}function c(e){let d;return d=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(r.Provider,{value:d},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.