diff --git a/src/pages/agent-office/components/ActivityFilters.jsx b/src/pages/agent-office/components/ActivityFilters.jsx
new file mode 100644
index 0000000..0038237
--- /dev/null
+++ b/src/pages/agent-office/components/ActivityFilters.jsx
@@ -0,0 +1,64 @@
+// src/pages/agent-office/components/ActivityFilters.jsx
+import { ACTIVE_AGENT_IDS, AGENT_META } from '../constants.js';
+
+const TYPE_OPTIONS = [
+ { value: '', label: '전체' },
+ { value: 'task', label: 'Task' },
+ { value: 'log', label: 'Log' },
+];
+const STATUS_OPTIONS = [
+ { value: '', label: '전체' },
+ { value: 'succeeded', label: '완료' },
+ { value: 'failed', label: '실패' },
+ { value: 'pending', label: '대기' },
+];
+const DAYS_OPTIONS = [
+ { value: 1, label: '1일' },
+ { value: 7, label: '7일' },
+ { value: 30, label: '30일' },
+];
+
+export default function ActivityFilters({ filters, onChange }) {
+ const set = (patch) => onChange({ ...filters, ...patch });
+ const statusDisabled = filters.type === 'log';
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/src/pages/agent-office/components/ActivityFilters.test.jsx b/src/pages/agent-office/components/ActivityFilters.test.jsx
new file mode 100644
index 0000000..797eb06
--- /dev/null
+++ b/src/pages/agent-office/components/ActivityFilters.test.jsx
@@ -0,0 +1,26 @@
+import { describe, it, expect, vi } from 'vitest';
+import { render, screen, fireEvent } from '@testing-library/react';
+import ActivityFilters from './ActivityFilters.jsx';
+
+const base = { agent_id: '', type: '', status: '', days: 7 };
+
+describe('ActivityFilters', () => {
+ it('type=log이면 상태 필터가 비활성화된다', () => {
+ render( {}} />);
+ expect(screen.getByLabelText('상태 필터')).toBeDisabled();
+ });
+
+ it('기간 변경 시 onChange가 days와 함께 호출된다', () => {
+ const onChange = vi.fn();
+ render();
+ fireEvent.change(screen.getByLabelText('기간 필터'), { target: { value: '30' } });
+ expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ days: 30 }));
+ });
+
+ it('type을 log로 바꾸면 status를 비운다', () => {
+ const onChange = vi.fn();
+ render();
+ fireEvent.change(screen.getByLabelText('타입 필터'), { target: { value: 'log' } });
+ expect(onChange).toHaveBeenCalledWith(expect.objectContaining({ type: 'log', status: '' }));
+ });
+});