Agent management: hire endpoint with permission gates and pending_approval status, config revision tracking with rollback, agent duplicate route, permission CRUD. Block pending_approval agents from auth, heartbeat, and assignments. Approvals: revision request/resubmit flow, approval comments CRUD, issue-approval linking, auto-wake agents on approval decisions with context snapshot. Costs: per-agent breakdown, period filtering (month/week/day/all), cost by agent list endpoint. Adapters: agentConfigurationDoc on all adapters, /llms/agent-configuration.txt reflection routes. Inject PAPERCLIP_APPROVAL_ID, PAPERCLIP_APPROVAL_STATUS, PAPERCLIP_LINKED_ISSUE_IDS into adapter environments. Sidebar badges endpoint for pending approval/inbox counts. Dashboard and company settings extensions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
28 lines
746 B
TypeScript
28 lines
746 B
TypeScript
export type NormalizedAgentPermissions = Record<string, unknown> & {
|
|
canCreateAgents: boolean;
|
|
};
|
|
|
|
export function defaultPermissionsForRole(role: string): NormalizedAgentPermissions {
|
|
return {
|
|
canCreateAgents: role === "ceo",
|
|
};
|
|
}
|
|
|
|
export function normalizeAgentPermissions(
|
|
permissions: unknown,
|
|
role: string,
|
|
): NormalizedAgentPermissions {
|
|
const defaults = defaultPermissionsForRole(role);
|
|
if (typeof permissions !== "object" || permissions === null || Array.isArray(permissions)) {
|
|
return defaults;
|
|
}
|
|
|
|
const record = permissions as Record<string, unknown>;
|
|
return {
|
|
canCreateAgents:
|
|
typeof record.canCreateAgents === "boolean"
|
|
? record.canCreateAgents
|
|
: defaults.canCreateAgents,
|
|
};
|
|
}
|