Add SDLC review and eval controls

This commit is contained in:
ZacharyZhang-NY committed 2026-05-23 18:39:05 -04:00
1 parent bc14a2fbcb
commit bbf90a1a62
19 files changed
+927 -2

No files matched your search

+19
View File
@@ -11,6 +11,7 @@ import type {
RiskLevel,
RoleKey,
SearchEntityType,
SdlcReviewTargetType,
SocialPlatform,
TaskPriority,
TaskStatus,
@@ -288,6 +289,24 @@ export interface RunChaosDrillInput {
drillId: string;
}
export interface RunSdlcReviewInput {
orgId: string;
reviewAgentId: string;
targetType: SdlcReviewTargetType;
targetRef: string;
}
export interface RunEvalSuiteInput {
orgId: string;
suiteId: string;
}
export interface SetPrBotGateInput {
orgId: string;
gateId: string;
enabled: boolean;
}
export interface BootstrapOnboardingInput {
companyName: string;
companyDescription: string;
@@ -27,6 +27,8 @@ import type {
LaunchSocialLoginInput,
ResolveAgentSkillsInput,
RunChaosDrillInput,
RunEvalSuiteInput,
RunSdlcReviewInput,
SaveProviderCredentialInput,
SearchInput,
SendMessageInput,
@@ -34,6 +36,7 @@ import type {
SetFilePinnedInput,
SetFeatureFlagInput,
SetLegalHoldStateInput,
SetPrBotGateInput,
SetRetentionFreezeStateInput,
SetScheduledPostStateInput,
SyncEmployeeIdentityInput,
@@ -79,6 +82,9 @@ export interface DesktopApi {
createMigrationReport(input: CreateMigrationReportInput): Promise<DesktopResult<AppSnapshot>>;
setFeatureFlag(input: SetFeatureFlagInput): Promise<DesktopResult<AppSnapshot>>;
runChaosDrill(input: RunChaosDrillInput): Promise<DesktopResult<AppSnapshot>>;
runSdlcReview(input: RunSdlcReviewInput): Promise<DesktopResult<AppSnapshot>>;
runEvalSuite(input: RunEvalSuiteInput): Promise<DesktopResult<AppSnapshot>>;
setPrBotGate(input: SetPrBotGateInput): Promise<DesktopResult<AppSnapshot>>;
createComplianceExport(input: CreateComplianceExportInput): Promise<DesktopResult<AppSnapshot>>;
createLegalHold(input: CreateLegalHoldInput): Promise<DesktopResult<AppSnapshot>>;
setLegalHoldState(input: SetLegalHoldStateInput): Promise<DesktopResult<AppSnapshot>>;
+3
View File
@@ -4,12 +4,14 @@ import type { AccessDecisionRecord, EmployeeIdentityRecord, RoleGrantRecord, Ser
import type { ApprovalAssignmentRecord, ApprovalRoutingRuleRecord, HiringPolicyRecord, OrgDepartmentRecord } from "./org-governance-domain";
import type { ChaosDrillRecord, ChaosDrillRunRecord, FeatureFlagRecord, OperationalEventRecord, SloTargetRecord } from "./operations-domain";
import type { ProviderDataPolicy, ProviderExecutionMode } from "./provider-policy-domain";
import type { EvalCaseRecord, EvalRunRecord, EvalSuiteRecord, PrBotGateRecord, SdlcReviewAgentRecord, SdlcReviewRunRecord } from "./sdlc-domain";
export { BOARD_INTERVENTION_ACTION, BOARD_INTERVENTION_MODE, CHAT_THREAD_BOARD_STATE, type BoardInterventionAction, type BoardInterventionMode, type BoardInterventionRecord, type ChatThreadBoardState } from "./board-domain";
export { COMPLIANCE_EXPORT_STATE, COMPLIANCE_EXPORT_TYPE, type ComplianceExportRecord, type ComplianceExportState, type ComplianceExportType, type ComplianceSubjectType, type LegalHoldEntityType, type LegalHoldRecord, type RetentionFreezeRecord, type RetentionFreezeScopeType } from "./compliance-domain";
export { ACCESS_DECISION, IDENTITY_SOURCE, ROLE_KEY, type AccessDecision, type AccessDecisionRecord, type EmployeeIdentityRecord, type IdentitySource, type PrincipalType, type RoleGrantRecord, type RoleKey, type ServiceIdentityRecord } from "./identity-domain";
export { ROUTE_TO_TYPE, type ApprovalAssignmentRecord, type ApprovalRoutingRuleRecord, type HiringPolicyRecord, type OrgDepartmentRecord, type RouteToType } from "./org-governance-domain";
export { CHAOS_DRILL_SCENARIO, CHAOS_DRILL_STATE, FEATURE_FLAG_KEY, SLO_SIGNAL_KEY, type ChaosDrillRecord, type ChaosDrillRunRecord, type ChaosDrillScenario, type ChaosDrillState, type FeatureFlagKey, type FeatureFlagRecord, type OperationalEventRecord, type SloSignalKey, type SloTargetRecord } from "./operations-domain";
export { PROVIDER_DATA_POLICY, PROVIDER_EXECUTION_MODE, type ProviderDataPolicy, type ProviderExecutionMode } from "./provider-policy-domain";
export { EVAL_SUITE_KEY, PR_BOT_GATE_KEY, SDLC_REVIEW_AGENT_KEY, SDLC_REVIEW_TARGET_TYPE, SDLC_RUN_STATE, type EvalCaseRecord, type EvalRunRecord, type EvalSuiteKey, type EvalSuiteRecord, type PrBotGateKey, type PrBotGateRecord, type SdlcReviewAgentKey, type SdlcReviewAgentRecord, type SdlcReviewRunRecord, type SdlcReviewTargetType, type SdlcRunState } from "./sdlc-domain";
export { SEARCH_ENTITY_TYPES, type SearchEntityType, type SearchResultRecord } from "./search-domain";
export const TASK_STATUS = { BACKLOG: "backlog", IN_PROGRESS: "in_progress", REVIEW: "review", DONE: "done" } as const;
export const APPROVAL_STATE = { PENDING: "pending", APPROVED: "approved", DECLINED: "declined" } as const;
@@ -474,5 +476,6 @@ export interface AppSnapshot {
employeeIdentities: EmployeeIdentityRecord[]; serviceIdentities: ServiceIdentityRecord[]; roleGrants: RoleGrantRecord[]; accessDecisions: AccessDecisionRecord[];
orgDepartments: OrgDepartmentRecord[]; hiringPolicies: HiringPolicyRecord[]; approvalRoutingRules: ApprovalRoutingRuleRecord[]; approvalAssignments: ApprovalAssignmentRecord[];
featureFlags: FeatureFlagRecord[]; sloTargets: SloTargetRecord[]; operationalEvents: OperationalEventRecord[]; chaosDrills: ChaosDrillRecord[]; chaosDrillRuns: ChaosDrillRunRecord[];
sdlcReviewAgents: SdlcReviewAgentRecord[]; sdlcReviewRuns: SdlcReviewRunRecord[]; evalSuites: EvalSuiteRecord[]; evalCases: EvalCaseRecord[]; evalRuns: EvalRunRecord[]; prBotGates: PrBotGateRecord[];
auditEvents: AuditEventRecord[];
}
+3
View File
@@ -32,6 +32,9 @@ export const IPC_CHANNELS = {
createMigrationReport: "agentcompany:create-migration-report",
setFeatureFlag: "agentcompany:set-feature-flag",
runChaosDrill: "agentcompany:run-chaos-drill",
runSdlcReview: "agentcompany:run-sdlc-review",
runEvalSuite: "agentcompany:run-eval-suite",
setPrBotGate: "agentcompany:set-pr-bot-gate",
createComplianceExport: "agentcompany:create-compliance-export",
createLegalHold: "agentcompany:create-legal-hold",
setLegalHoldState: "agentcompany:set-legal-hold-state",
@@ -0,0 +1,48 @@
type ValueOf<T> = T[keyof T];
export const SDLC_REVIEW_AGENT_KEY = {
CODE_REVIEWER: "code_reviewer",
MIGRATION_REVIEWER: "migration_reviewer",
POLICY_REVIEWER: "policy_reviewer",
} as const;
export const SDLC_REVIEW_TARGET_TYPE = { WORKSPACE: "workspace", MIGRATION: "migration", POLICY: "policy" } as const;
export const EVAL_SUITE_KEY = { CONTRACT: "contract", INTEGRATION: "integration", REPLAY: "replay" } as const;
export const SDLC_RUN_STATE = { PASSED: "passed", FAILED: "failed" } as const;
export const PR_BOT_GATE_KEY = {
STATIC_CHECKS: "static_checks",
MIGRATION_DIFF: "migration_diff",
POLICY_DIFF: "policy_diff",
HUMAN_APPROVAL: "human_approval",
} as const;
export type SdlcReviewAgentKey = ValueOf<typeof SDLC_REVIEW_AGENT_KEY>;
export type SdlcReviewTargetType = ValueOf<typeof SDLC_REVIEW_TARGET_TYPE>;
export type EvalSuiteKey = ValueOf<typeof EVAL_SUITE_KEY>;
export type SdlcRunState = ValueOf<typeof SDLC_RUN_STATE>;
export type PrBotGateKey = ValueOf<typeof PR_BOT_GATE_KEY>;
export interface SdlcReviewAgentRecord {
id: string; orgId: string; key: SdlcReviewAgentKey; label: string; specialty: string; enabled: boolean; createdAt: string; updatedAt: string;
}
export interface SdlcReviewRunRecord {
id: string; orgId: string; reviewAgentId: string; targetType: SdlcReviewTargetType; targetRef: string;
state: SdlcRunState; resultJson: string; createdAt: string; completedAt: string;
}
export interface EvalSuiteRecord {
id: string; orgId: string; key: EvalSuiteKey; label: string; scope: string; createdAt: string; updatedAt: string;
}
export interface EvalCaseRecord {
id: string; orgId: string; suiteId: string; title: string; sourceType: string; sourceRef: string; expectedSignal: string; createdAt: string;
}
export interface EvalRunRecord {
id: string; orgId: string; suiteId: string; state: SdlcRunState; passedCount: number; failedCount: number; resultJson: string; createdAt: string; completedAt: string;
}
export interface PrBotGateRecord {
id: string; orgId: string; key: PrBotGateKey; label: string; gateType: string; enabled: boolean; createdAt: string; updatedAt: string;
}