Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
5.9 kB ยท 180 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181import type { z } from "zod";
import { isFeatureEnabled } from "../features";import type { Workspace } from "../types";import { getAuditLogTool, listAuditLogsTool } from "./audit";import { getContentPageTool, searchContentTool } from "./content";import { getDocPageTool, searchDocsTool } from "./docs";import { addIncidentNoteTool, approvePostmortemTool, declareIncidentTool, draftPostmortemTool, getIncidentTool, getPostmortemTool, listIncidentsTool, resolveIncidentTool, setIncidentStatusTool, updateIncidentTool,} from "./incident";import { createMaintenanceTool, listMaintenancesTool } from "./maintenance";import { getMonitorStatusTool, getMonitorSummaryTool, getMonitorTool, getResponseLogTool, listMonitorsTool, listResponseLogsTool,} from "./monitor";import { listNotificationsTool } from "./notification";import { listStatusPagesTool } from "./page";import { listPageComponentsTool } from "./page-component";import { listPrivateLocationsTool } from "./private-location";import { addStatusReportUpdateTool, createStatusReportTool, listStatusReportsTool, resolveStatusReportTool, updateStatusReportTool,} from "./status-report";import type { AnyAgentTool } from "./types";
export { getAuditLogTool, listAuditLogsTool } from "./audit";export { getContentPageTool, searchContentTool } from "./content";export { getDocPageTool, searchDocsTool } from "./docs";export { addIncidentNoteTool, approvePostmortemTool, declareIncidentTool, draftPostmortemTool, getIncidentTool, getPostmortemTool, listIncidentsTool, resolveIncidentTool, setIncidentStatusTool, updateIncidentTool,} from "./incident";export { createMaintenanceTool, listMaintenancesTool } from "./maintenance";export { getMonitorStatusTool, getMonitorSummaryTool, getMonitorTool, getResponseLogTool, listMonitorsTool, listResponseLogsTool,} from "./monitor";export { listNotificationsTool } from "./notification";export { listStatusPagesTool } from "./page";export { listPageComponentsTool } from "./page-component";export { listPrivateLocationsTool } from "./private-location";export { addStatusReportUpdateTool, createStatusReportTool, listStatusReportsTool, resolveStatusReportTool, updateStatusReportTool,} from "./status-report";export type { AgentTool, AgentToolRegistry, AnyAgentTool, ApprovalMeta, ExtraFlag, InferAgentToolInput, InferAgentToolOutput, SummaryLine, SummaryLineRef,} from "./types";export { type AgentSystemPromptOptions, buildAgentSystemPrompt,} from "./prompt";
/** * Aggregate registry. Adding a tool here surfaces it on every adapter * (MCP + dashboard chat). * * `satisfies` (not a typed assignment) keeps the literal-keyed object * type intact, so `keyof typeof agentTools` is the union of tool names * and `(typeof agentTools)[N]["inputSchema"]` carries through to the * concrete schema for that specific tool. Consumers can then `z.infer` * per tool name without any casts. */export const agentTools = { list_status_pages: listStatusPagesTool, list_page_components: listPageComponentsTool, list_status_reports: listStatusReportsTool, create_status_report: createStatusReportTool, add_status_report_update: addStatusReportUpdateTool, update_status_report: updateStatusReportTool, resolve_status_report: resolveStatusReportTool, list_incidents: listIncidentsTool, get_incident: getIncidentTool, declare_incident: declareIncidentTool, update_incident: updateIncidentTool, resolve_incident: resolveIncidentTool, set_incident_status: setIncidentStatusTool, add_incident_note: addIncidentNoteTool, get_postmortem: getPostmortemTool, draft_postmortem: draftPostmortemTool, approve_postmortem: approvePostmortemTool, list_maintenances: listMaintenancesTool, create_maintenance: createMaintenanceTool, list_monitors: listMonitorsTool, get_monitor: getMonitorTool, get_monitor_status: getMonitorStatusTool, get_monitor_summary: getMonitorSummaryTool, list_response_logs: listResponseLogsTool, get_response_log: getResponseLogTool, list_notifications: listNotificationsTool, list_private_locations: listPrivateLocationsTool, list_audit_logs: listAuditLogsTool, get_audit_log: getAuditLogTool, search_docs: searchDocsTool, get_doc_page: getDocPageTool, search_content: searchContentTool, get_content_page: getContentPageTool,} satisfies Record<string, AnyAgentTool>;
// Multi-flag confirmation UX should be a modal, not 2^N buttons. Fail// loudly at module load if anything sneaks in past the tuple type.for (const tool of Object.values(agentTools) as AnyAgentTool[]) { const flags = tool.approval?.extraFlags; if (flags && flags.length > 1) { throw new Error( `agent-tools: "${tool.name}" declares ${flags.length} extraFlags; cap is 1.`, ); } if (flags?.length && !tool.approval?.applyFlags) { throw new Error( `agent-tools: "${tool.name}" declares extraFlags but no applyFlags.`, ); }}
/** Whether a tool is offered in this workspace (feature-gated tools are hidden). */export function isAgentToolAvailable( tool: AnyAgentTool, workspace: Pick<Workspace, "id">,): boolean { return !tool.feature || isFeatureEnabled(workspace, tool.feature);}
/** * Iteration view used by adapters that don't care about the literal key. * Equivalent to `Object.values(agentTools)`. */export const agentToolList: AnyAgentTool[] = Object.values(agentTools);
/** Literal union of every registered tool's name. */export type AgentToolName = keyof typeof agentTools;
/** Concrete input type for a given tool name. */export type AgentToolInput<N extends AgentToolName> = z.infer< (typeof agentTools)[N]["inputSchema"]>;
/** Concrete output type for a given tool name. */export type AgentToolOutput<N extends AgentToolName> = z.infer< (typeof agentTools)[N]["outputSchema"]>;