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