Oversight Service
Approvals, committees, audit trails, and compliance management.
Installation
pnpm add @aicr/oversight-coreQuick Start
import { requestApproval, getApprovalStatus, recordAuditEvent } from '@aicr/oversight-core';
// Request approval for a plan change
const approval = await requestApproval({
type: 'plan-change',
resourceId: planId,
requiredApprovers: ['finance-lead', 'legal'],
expiresIn: '7d'
});
// Check status
const status = await getApprovalStatus(approval.id);
if (status.isApproved) {
// Proceed with change
}
// Record audit event
await recordAuditEvent({
action: 'plan.updated',
resourceId: planId,
actor: userId,
details: { changes: [...] }
});API Reference
requestApproval(input)
Request approval for an action.
interface ApprovalRequest {
type: 'plan-change' | 'exception' | 'budget' | 'policy-override' | 'access';
resourceId: string;
resourceType: string;
requiredApprovers: string[]; // Role IDs or user IDs
quorum?: number; // Min approvals needed (default: all)
expiresIn?: string; // e.g., '7d', '24h'
description?: string;
metadata?: Record<string, unknown>;
}
interface Approval {
id: string;
type: string;
status: 'pending' | 'approved' | 'denied' | 'expired';
requiredApprovers: string[];
currentApprovals: { approverId: string; approvedAt: Date }[];
expiresAt: Date;
createdAt: Date;
}approveRequest(approvalId, decision)
Approve or deny a request.
await approveRequest(approvalId, {
decision: 'approved', // or 'denied'
notes: 'Approved per policy exception clause 4.2'
});recordAuditEvent(event)
Record an audit trail event.
interface AuditEvent {
action: string; // e.g., 'plan.created', 'user.login'
resourceId?: string;
resourceType?: string;
actor: string;
actorType?: 'user' | 'system' | 'api';
details?: Record<string, unknown>;
severity?: 'info' | 'warning' | 'critical';
}getAuditTrail(query)
Query audit events.
const events = await getAuditTrail({
resourceId: planId,
startDate: '2024-01-01',
endDate: '2024-01-31',
actions: ['plan.created', 'plan.updated'],
limit: 100
});Committees
submitToCommittee(submission)
Submit a request to a committee.
await submitToCommittee({
committee: 'compensation-committee',
type: 'exception-request',
subject: 'Q4 Accelerator Exception',
resourceId: requestId,
documents: [docId1, docId2],
requestedDate: '2024-02-15' // Meeting date preference
});getCommitteeDecisions(committeeId)
Get committee decisions.
const decisions = await getCommitteeDecisions('compensation-committee', {
status: 'decided',
since: '2024-01-01'
});HTTP API
POST /api/oversight/approvals
curl -X POST /api/oversight/approvals \
-d '{"type": "plan-change", "resourceId": "plan-123", "requiredApprovers": ["finance"]}'POST /api/oversight/approvals/:id/decide
curl -X POST /api/oversight/approvals/appr-123/decide \
-d '{"decision": "approved", "notes": "..."}'GET /api/oversight/audit
curl "/api/oversight/audit?resourceId=plan-123&limit=50"