import { createSlice } from "@reduxjs/toolkit"; export enum ActionSecurityRisk { UNKNOWN = -1, LOW = 0, MEDIUM = 1, HIGH = 2, } export type SecurityAnalyzerLog = { id: number; content: string; security_risk: ActionSecurityRisk; confirmation_state?: "awaiting_confirmation" | "confirmed" | "rejected"; confirmed_changed: boolean; }; const initialLogs: SecurityAnalyzerLog[] = []; export const securityAnalyzerSlice = createSlice({ name: "securityAnalyzer", initialState: { logs: initialLogs, }, reducers: { appendSecurityAnalyzerInput: (state, action) => { const log = { id: action.payload.id, content: action.payload.args.command || action.payload.args.code || action.payload.args.content || action.payload.message, security_risk: action.payload.args.security_risk as ActionSecurityRisk, confirmation_state: action.payload.args.confirmation_state, confirmed_changed: false, }; const existingLog = state.logs.find( (stateLog) => stateLog.id === log.id || (stateLog.confirmation_state === "awaiting_confirmation" && stateLog.content === log.content), ); if (existingLog) { if (existingLog.confirmation_state !== log.confirmation_state) { existingLog.confirmation_state = log.confirmation_state; existingLog.confirmed_changed = true; } } else { state.logs.push(log); } }, }, }); export const { appendSecurityAnalyzerInput } = securityAnalyzerSlice.actions; export default securityAnalyzerSlice.reducer;