diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 6b54e51..66c3004 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -73,7 +73,7 @@ jobs: echo "尝试 $i/30: 服务未就绪,等待 5 秒..." sleep 5 done - echo "❌ 健康检查失败" + echo "[FAIL] 健康检查失败" docker compose -f "$REPO_DIR/$COMPOSE_FILE" logs --tail=100 exit 1 diff --git a/configs/experts/allenzhang.yaml b/configs/experts/allenzhang.yaml index be74c7e..691f6c6 100644 --- a/configs/experts/allenzhang.yaml +++ b/configs/experts/allenzhang.yaml @@ -15,7 +15,7 @@ config: decision_framework: "用户价值优先 — 问'这会让用户觉得简单吗'和'它在 5 年后还有意义吗'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "💬" + avatar: "A" color: "#07C160" is_lead: false task_mode: llm_generate diff --git a/configs/experts/backend_engineer.yaml b/configs/experts/backend_engineer.yaml index 501eb27..4030f7f 100644 --- a/configs/experts/backend_engineer.yaml +++ b/configs/experts/backend_engineer.yaml @@ -14,7 +14,7 @@ config: decision_framework: "系统设计 — 评估性能、安全性、可扩展性,遵循 SOLID 原则" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "⚙️" + avatar: "B" color: "#fa8c16" is_lead: false task_mode: llm_generate diff --git a/configs/experts/charlie_munger.yaml b/configs/experts/charlie_munger.yaml index 8fe3159..1c1e56d 100644 --- a/configs/experts/charlie_munger.yaml +++ b/configs/experts/charlie_munger.yaml @@ -15,7 +15,7 @@ config: decision_framework: "逆向思考 — 问'怎样做会必然失败',然后避免它" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🧠" + avatar: "C" color: "#2C3E50" is_lead: false task_mode: llm_generate diff --git a/configs/experts/code_reviewer.yaml b/configs/experts/code_reviewer.yaml index 805257c..48e2532 100644 --- a/configs/experts/code_reviewer.yaml +++ b/configs/experts/code_reviewer.yaml @@ -14,7 +14,7 @@ config: decision_framework: "代码质量 — 规范性、安全性、可维护性、性能四维评估" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🛡️" + avatar: "C" color: "#722ed1" is_lead: false task_mode: llm_generate diff --git a/configs/experts/dev_team.yaml b/configs/experts/dev_team.yaml index 26eb7a8..1707983 100644 --- a/configs/experts/dev_team.yaml +++ b/configs/experts/dev_team.yaml @@ -17,7 +17,7 @@ config: - backend_engineer - qa_engineer - code_reviewer - avatar: "👥" + avatar: "D" color: "#1890ff" is_lead: false task_mode: llm_generate diff --git a/configs/experts/elon_musk.yaml b/configs/experts/elon_musk.yaml index b62ee50..3fd6465 100644 --- a/configs/experts/elon_musk.yaml +++ b/configs/experts/elon_musk.yaml @@ -14,7 +14,7 @@ config: decision_framework: "第一性原理 — 问'这件事的物理学本质是什么',再推导可行性" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🚀" + avatar: "E" color: "#E31937" is_lead: false task_mode: llm_generate diff --git a/configs/experts/frontend_engineer.yaml b/configs/experts/frontend_engineer.yaml index 865d493..20b00c6 100644 --- a/configs/experts/frontend_engineer.yaml +++ b/configs/experts/frontend_engineer.yaml @@ -14,7 +14,7 @@ config: decision_framework: "用户体验优先 — 在技术实现和用户需求之间找到最佳平衡" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🎨" + avatar: "F" color: "#52c41a" is_lead: false task_mode: llm_generate diff --git a/configs/experts/jeff_bezos.yaml b/configs/experts/jeff_bezos.yaml index 541a11d..c1fb138 100644 --- a/configs/experts/jeff_bezos.yaml +++ b/configs/experts/jeff_bezos.yaml @@ -15,7 +15,7 @@ config: decision_framework: "客户至上 + 长期主义 — 问'什么对客户最好'和'这个决策 10 年后是否仍正确'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "📦" + avatar: "J" color: "#FF9900" is_lead: false task_mode: llm_generate diff --git a/configs/experts/paul_graham.yaml b/configs/experts/paul_graham.yaml index bacbdd1..297b587 100644 --- a/configs/experts/paul_graham.yaml +++ b/configs/experts/paul_graham.yaml @@ -16,7 +16,7 @@ config: decision_framework: "用户价值 + 不寻常路 — 问'用户真的想要这个吗'和'这看起来像坏想法吗'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "📝" + avatar: "P" color: "#FF6600" is_lead: false task_mode: llm_generate diff --git a/configs/experts/private_board.yaml b/configs/experts/private_board.yaml index 9814c22..32e6e9b 100644 --- a/configs/experts/private_board.yaml +++ b/configs/experts/private_board.yaml @@ -17,7 +17,7 @@ config: - allenzhang - charlie_munger - paul_graham - avatar: "🏛️" + avatar: "P" color: "#8E44AD" is_lead: false task_mode: llm_generate diff --git a/configs/experts/qa_engineer.yaml b/configs/experts/qa_engineer.yaml index d380185..d66c9c2 100644 --- a/configs/experts/qa_engineer.yaml +++ b/configs/experts/qa_engineer.yaml @@ -14,7 +14,7 @@ config: decision_framework: "质量保障 — 测试覆盖率、边界条件、回归测试三重保障" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🔍" + avatar: "Q" color: "#eb2f96" is_lead: false task_mode: llm_generate diff --git a/configs/experts/ray_dalio.yaml b/configs/experts/ray_dalio.yaml index b096582..c7f61ef 100644 --- a/configs/experts/ray_dalio.yaml +++ b/configs/experts/ray_dalio.yaml @@ -16,7 +16,7 @@ config: decision_framework: "原则驱动 — 问'这符合哪条原则'和'最可信的人怎么看'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "⚖️" + avatar: "R" color: "#1A5276" is_lead: false task_mode: llm_generate diff --git a/configs/experts/steve_jobs.yaml b/configs/experts/steve_jobs.yaml index 0aa436a..2e7f1e1 100644 --- a/configs/experts/steve_jobs.yaml +++ b/configs/experts/steve_jobs.yaml @@ -16,7 +16,7 @@ config: decision_framework: "用户体验 + 专注 — 问'这足够简单吗'和'这是我能做的最好的吗'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🍎" + avatar: "S" color: "#555555" is_lead: false task_mode: llm_generate diff --git a/configs/experts/tech_lead.yaml b/configs/experts/tech_lead.yaml index c1c78a5..4716619 100644 --- a/configs/experts/tech_lead.yaml +++ b/configs/experts/tech_lead.yaml @@ -14,7 +14,7 @@ config: decision_framework: "架构决策 — 评估可行性、可维护性、扩展性,权衡短期与长期" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "🏗️" + avatar: "T" color: "#1890ff" is_lead: true task_mode: llm_generate diff --git a/configs/experts/warren_buffett.yaml b/configs/experts/warren_buffett.yaml index 0737323..6fef9cc 100644 --- a/configs/experts/warren_buffett.yaml +++ b/configs/experts/warren_buffett.yaml @@ -16,7 +16,7 @@ config: decision_framework: "能力圈 + 内在价值 — 问'我理解这个业务吗'和'它的内在价值是多少'" collaboration_strategy: "cooperative" bound_skills: [] - avatar: "💰" + avatar: "W" color: "#1E8449" is_lead: false task_mode: llm_generate diff --git a/src/agentkit/bitable/db.py b/src/agentkit/bitable/db.py index e5d00ee..bad017e 100644 --- a/src/agentkit/bitable/db.py +++ b/src/agentkit/bitable/db.py @@ -65,7 +65,7 @@ class FileModel(BitableBase): id = Column(String, primary_key=True, default=_uuid_str) name = Column(String, nullable=False) - icon = Column(String, default="📋") + icon = Column(String, default="table") description = Column(Text, default="") owner_user_id = Column(String, nullable=True) created_at = Column(DateTime(timezone=True), default=_utcnow) @@ -213,7 +213,7 @@ async def _apply_v2_migration(conn: object) -> None: "CREATE TABLE IF NOT EXISTS bitable.bitable_files (" " id VARCHAR PRIMARY KEY," " name VARCHAR NOT NULL," - " icon VARCHAR DEFAULT '📋'," + " icon VARCHAR DEFAULT 'table'," " description TEXT DEFAULT ''," " owner_user_id VARCHAR," " created_at TIMESTAMPTZ DEFAULT NOW()," diff --git a/src/agentkit/cli/admin.py b/src/agentkit/cli/admin.py index 9a4ab31..17edfc7 100644 --- a/src/agentkit/cli/admin.py +++ b/src/agentkit/cli/admin.py @@ -212,7 +212,7 @@ def dept_list( str(d.get("id", "")), str(d.get("name", "")), str(d.get("description", "")), - "✓" if d.get("is_active") else "✗", + "OK" if d.get("is_active") else "--", str(d.get("created_at", "")), ) console.print(table) @@ -598,7 +598,7 @@ def user_list( str(u.get("username", "")), str(u.get("email", "")), str(u.get("role", "")), - "✓" if u.get("is_active") else "✗", + "OK" if u.get("is_active") else "--", ) console.print(table) diff --git a/src/agentkit/cli/benchmark.py b/src/agentkit/cli/benchmark.py index 7627b93..8e61d64 100644 --- a/src/agentkit/cli/benchmark.py +++ b/src/agentkit/cli/benchmark.py @@ -892,7 +892,7 @@ async def _run_llm_reasoning( ) cases.append(case) if verbose: - status = "[green]✓[/green]" if case.passed else "[red]✗[/red]" + status = "[green]OK[/green]" if case.passed else "[red]FAIL[/red]" console.print( f" {status} {task.task_id}: {result.actual} ({result.duration_ms:.2f}ms)" ) @@ -986,7 +986,7 @@ async def _run_gui_integration( def _log(tid: str, passed: bool, label: str) -> None: if verbose: - status = "[green]✓[/green]" if passed else "[red]✗[/red]" + status = "[green]OK[/green]" if passed else "[red]FAIL[/red]" console.print(f" {status} {tid}: {label}") all_runs_cases: list[list[CaseResult]] = [] @@ -2029,7 +2029,7 @@ async def _run_dimension( cases.append(case) if verbose: - status = "[green]✓[/green]" if case.passed else "[red]✗[/red]" + status = "[green]OK[/green]" if case.passed else "[red]FAIL[/red]" console.print( f" {status} {task.task_id}: {result.actual} ({result.duration_ms:.2f}ms)" ) @@ -2730,7 +2730,7 @@ def benchmark( components = _build_real_components() if components is None: console.print( - "[yellow]⚠ LLM mode skipped — no valid agentkit.yaml or API key.[/yellow]" + "[yellow]WARN LLM mode skipped — no valid agentkit.yaml or API key.[/yellow]" ) else: preprocessor, _skill_registry, llm_gateway = components @@ -2764,7 +2764,7 @@ def benchmark( progress.update(task, completed=True, total=1) if not results: - console.print("[yellow]⚠ No dimensions were run.[/yellow]") + console.print("[yellow]WARN No dimensions were run.[/yellow]") return # Display summary table @@ -2781,13 +2781,13 @@ def benchmark( if fail_all == 0: summary = f"All {pass_all} tests passed across {len(results)} dimensions." - console.print(f"[bold green]✓ {summary}[/bold green]") + console.print(f"[bold green]OK {summary}[/bold green]") else: summary = ( f"{pass_all}/{total_all} tests passed ({fail_all} failed) " f"across {len(results)} dimensions." ) - console.print(f"[bold yellow]⚠ {summary}[/bold yellow]") + console.print(f"[bold yellow]WARN {summary}[/bold yellow]") console.print() diff --git a/src/agentkit/cli/chat.py b/src/agentkit/cli/chat.py index 0c5b1be..9252f6a 100644 --- a/src/agentkit/cli/chat.py +++ b/src/agentkit/cli/chat.py @@ -586,7 +586,7 @@ def _render_pm_collaboration_event(message: dict) -> bool: rprint( Panel( "\n".join(lines), - title=f"[bold]{'✓' if passed else '✗'} 验收结果[/bold]", + title=f"[bold]{'OK' if passed else 'FAIL'} 验收结果[/bold]", border_style=color, ) ) @@ -600,7 +600,7 @@ def _render_pm_collaboration_event(message: dict) -> bool: f"[bold]专家:[/bold] {expert}\n" f"[bold]阶段:[/bold] {phase_name}\n" f"[bold]风险:[/bold] {risk_desc}", - title="[bold]⚠ 风险标记[/bold]", + title="[bold]WARN 风险标记[/bold]", border_style="yellow", ) ) @@ -689,9 +689,9 @@ async def _execute_team_cli( elif etype == "plan_update": phases = message.get("plan_phases", []) icon_map = { - "completed": ("✓", "green"), + "completed": ("OK", "green"), "in_progress": ("▶", "blue"), - "failed": ("✗", "red"), + "failed": ("FAIL", "red"), } lines = [] for ph in phases: @@ -724,10 +724,10 @@ async def _execute_team_cli( ) elif etype == "phase_completed": summary = message.get("result_summary", "") - rprint(f" [green]✓ {message.get('phase_name', '?')}[/green]: {summary[:120]}") + rprint(f" [green]OK {message.get('phase_name', '?')}[/green]: {summary[:120]}") elif etype == "phase_failed": rprint( - f" [red]✗ {message.get('phase_name', '?')}[/red]: {message.get('error', '')}" + f" [red]FAIL {message.get('phase_name', '?')}[/red]: {message.get('error', '')}" ) elif etype == "debate_started": rprint( diff --git a/src/agentkit/cli/skill.py b/src/agentkit/cli/skill.py index e7676ce..2a91fbd 100644 --- a/src/agentkit/cli/skill.py +++ b/src/agentkit/cli/skill.py @@ -293,7 +293,7 @@ def _render_risk_guard_suggestions(suggestions: list) -> None: return rprint( - "[bold yellow]⚠ 以下为自动生成的风险守卫建议," + "[bold yellow]WARN 以下为自动生成的风险守卫建议," "必须人工审查后手动编辑 YAML 应用,不会自动生效。[/bold yellow]\n" ) table = Table(title="Risk Guard Suggestions (待人工审查)") diff --git a/src/agentkit/core/plan_schema.py b/src/agentkit/core/plan_schema.py index af9a726..3a663c0 100644 --- a/src/agentkit/core/plan_schema.py +++ b/src/agentkit/core/plan_schema.py @@ -104,7 +104,7 @@ class ExecutionPlan: def to_readable(self) -> str: """序列化为可读格式,用于人工确认""" - lines = [f"📋 执行计划 [{self.plan_id}]", f"目标: {self.goal}", ""] + lines = [f"[Plan] 执行计划 [{self.plan_id}]", f"目标: {self.goal}", ""] for group_idx, group in enumerate(self.parallel_groups): lines.append(f"── 并行组 {group_idx + 1} ──") @@ -119,7 +119,7 @@ class ExecutionPlan: lines.append("") if self.skill_gaps: - lines.append("⚠️ 能力缺口:") + lines.append("[WARN] 能力缺口:") for gap in self.skill_gaps: lines.append(f" - {gap.step_name}: 缺少 '{gap.required_skill}' ({gap.level.value})") if gap.suggestion: diff --git a/src/agentkit/experts/registry.py b/src/agentkit/experts/registry.py index d4a6be9..1b3eaf7 100644 --- a/src/agentkit/experts/registry.py +++ b/src/agentkit/experts/registry.py @@ -82,7 +82,7 @@ class ExpertTemplateRegistry: bound_skills: - data_query - chart_gen - avatar: "📊" + avatar: "首字符" color: "#52c41a" is_lead: false diff --git a/src/agentkit/server/frontend/src/App.vue b/src/agentkit/server/frontend/src/App.vue index 6f52dae..1752fd2 100644 --- a/src/agentkit/server/frontend/src/App.vue +++ b/src/agentkit/server/frontend/src/App.vue @@ -106,8 +106,7 @@ html, body, #app { body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, - 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Sans Emoji'; + 'Noto Sans', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: var(--text-primary, #1a1a1a); diff --git a/src/agentkit/server/frontend/src/components/bitable/bitableIcons.ts b/src/agentkit/server/frontend/src/components/bitable/bitableIcons.ts index 8038045..82d6756 100644 --- a/src/agentkit/server/frontend/src/components/bitable/bitableIcons.ts +++ b/src/agentkit/server/frontend/src/components/bitable/bitableIcons.ts @@ -3,7 +3,7 @@ * * History * ------- - * Originally, the Bitable file ``icon`` field stored emoji glyphs (📋 📊 📝 + * Originally, the Bitable file ``icon`` field stored emoji glyphs (table, chart, note * etc.). Those look fine in isolation but clash with the project's line-icon * aesthetic everywhere else (Ant Design Vue ``Outlined`` family — Tabs, * Sidebar, Tool call cards all use stroke-based 1.5px icons). The mixed diff --git a/src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts b/src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts index fb443e6..1e2773b 100644 --- a/src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts +++ b/src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts @@ -1,4 +1,5 @@ import { computed, type Component } from 'vue' +import { AuditOutlined } from '@ant-design/icons-vue' import type { IChatMessage } from '@/api/types' import UserBubble from '@/components/chat/messages/UserBubble.vue' import AssistantText from '@/components/chat/messages/AssistantText.vue' @@ -36,7 +37,7 @@ export type MessageViewType = export interface MessageShellMeta { name: string meta?: string - avatar?: string + avatar?: string | Component color?: string } @@ -209,7 +210,7 @@ export function useMessageRenderer(message: IChatMessage) { type, shell: { name: '辩论', - avatar: '⚖', + avatar: AuditOutlined, color: '#722ed1', meta: message.debate_topic || '', }, @@ -268,7 +269,7 @@ export function useMessageRenderer(message: IChatMessage) { type, shell: { name: '辩论裁决', - avatar: '⚖', + avatar: AuditOutlined, color: '#fa8c16', meta: decisionLabels[decision] || decision, }, diff --git a/src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue b/src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue index 4f3d925..59ffb2e 100644 --- a/src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue +++ b/src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue @@ -3,7 +3,7 @@