feat: Agent Office — AI 에이전트 가상 오피스 #2
@@ -73,7 +73,7 @@ export function Component() {
|
||||
</div>
|
||||
|
||||
<div className="ao-toolbar">
|
||||
{['stock', 'music', 'claude'].map(id => (
|
||||
{Object.keys(agents).map(id => (
|
||||
<button key={id} className="ao-tool-btn"
|
||||
onClick={() => setShowHistory(prev => prev === id ? null : id)}>
|
||||
📋 {id} 이력
|
||||
|
||||
@@ -20,7 +20,7 @@ export class OfficeRenderer {
|
||||
this._animId = null;
|
||||
this._onClick = null;
|
||||
|
||||
const agentIds = ['stock', 'music', 'claude'];
|
||||
const agentIds = ['stock', 'music'];
|
||||
for (const id of agentIds) {
|
||||
this.agents[id] = new AgentSprite(id, mapData.waypoints);
|
||||
}
|
||||
|
||||
@@ -9,9 +9,6 @@ const AGENT_COMMANDS = {
|
||||
{ action: 'compose', label: '작곡 시작', icon: '🎵', needsInput: true },
|
||||
{ action: 'credits', label: '크레딧 확인', icon: '💳' },
|
||||
],
|
||||
claude: [
|
||||
{ action: 'instruct', label: '지시하기', icon: '💬', needsInput: true },
|
||||
],
|
||||
};
|
||||
|
||||
const ChatPanel = ({ agentId, agentState, onCommand, onApproval, onClose }) => {
|
||||
@@ -44,7 +41,7 @@ const ChatPanel = ({ agentId, agentState, onCommand, onApproval, onClose }) => {
|
||||
<div className="ao-chat-header">
|
||||
<span className="ao-chat-title">
|
||||
{agentId === 'stock' ? '주식 트레이더' :
|
||||
agentId === 'music' ? '음악 프로듀서' : 'Claude AI'}
|
||||
agentId === 'music' ? '음악 프로듀서' : agentId}
|
||||
</span>
|
||||
<span className={`ao-chat-state ao-chat-state--${state.state || 'idle'}`}>
|
||||
{state.state || 'idle'}
|
||||
|
||||
@@ -7,6 +7,7 @@ const STATUS_BADGE = {
|
||||
working: { label: '진행중', color: '#818cf8' },
|
||||
succeeded: { label: '완료', color: '#34d399' },
|
||||
failed: { label: '실패', color: '#f87171' },
|
||||
rejected: { label: '거절됨', color: '#fb923c' },
|
||||
};
|
||||
|
||||
const TaskHistory = ({ agentId, onClose }) => {
|
||||
|
||||
Reference in New Issue
Block a user