feat(branding): 将产品名统一为 Astrion
- 前端页面标题、登录/注册页、左侧栏、聊天头部、教程欢迎语全部改为 Astrion - CLI 欢迎面板与状态栏改为 Astrion CLI - 后端启动日志与 setup 向导改为 Astrion - package.json 与 README 标题同步更新 - 主 system prompt 增加 Astrion 自我介绍,视觉模型 prompt 文件名从 qwenvl 改为 vl - 项目记忆与 AGENTS.md/CLAUDE.md 新增产品名说明
This commit is contained in:
parent
2264a86851
commit
15106e7d00
48
.agents/memory/astrion_naming.md
Normal file
48
.agents/memory/astrion_naming.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
name: astrion_naming
|
||||||
|
description: 当需要了解或引用本项目的品牌名称、产品名 Astrion 的含义与来源时,应该索引本记忆
|
||||||
|
---
|
||||||
|
|
||||||
|
# 项目名称 / 产品名:Astrion
|
||||||
|
|
||||||
|
## 决策记录
|
||||||
|
- **暂定名称**:Astrion
|
||||||
|
- **决策时间**:2026-07-07
|
||||||
|
- **命名方向**:人格化 + 宇宙现象/天体 + 科技意象
|
||||||
|
- **当前状态**:暂定,后续如需变更请同步更新本记忆、AGENTS.md 与 claude.md
|
||||||
|
|
||||||
|
## 名称含义
|
||||||
|
|
||||||
|
**构词**
|
||||||
|
- **Astr-**:来自希腊语 *astron*,意为“星星 / 天体 / 宇宙”
|
||||||
|
- **-ion**:科技命名中常见的粒子/状态后缀(如 photon、electron、neutron、ion)
|
||||||
|
|
||||||
|
**字面意象**
|
||||||
|
> 星之子、星际粒子、来自宇宙尘埃的微小发光体。
|
||||||
|
|
||||||
|
## 表达特点
|
||||||
|
|
||||||
|
| 特点 | 解读 |
|
||||||
|
|------|------|
|
||||||
|
| 科技感 | `-ion` 后缀自带物理/科技联想 |
|
||||||
|
| 宇宙感 | `Astr-` 词根直接指向星空 |
|
||||||
|
| 轻盈感 | 粒子暗示微小、快速、自由穿行 |
|
||||||
|
| 能量感 | ion(离子)带电,暗示活跃、驱动、连接 |
|
||||||
|
| 可人格化 | 三音节 `/ˈæstriən/`,发音接近 Orion、Damion,适合作为“他/她” |
|
||||||
|
| 中性 | 不偏男性或女性,适用面广 |
|
||||||
|
|
||||||
|
## 品牌叙事参考
|
||||||
|
|
||||||
|
1. **连接者**:像星际间传递信号的粒子,把人类意图传递到工具、文件、终端、子智能体之间。
|
||||||
|
2. **从混沌中组织秩序**:宇宙尘埃在引力下聚集成恒星;Astrion 把零散任务聚合成可执行结果。
|
||||||
|
3. **渺小但明亮**:单个粒子微不足道,但携带能量、能引发连锁反应——对应 Agent 虽小,却能撬动复杂系统。
|
||||||
|
|
||||||
|
## 中文参考
|
||||||
|
|
||||||
|
- 全称音译:**阿斯特里恩**
|
||||||
|
- 简称候选:**星子**(对应 astron + particle,更顺口)
|
||||||
|
|
||||||
|
## 同步位置
|
||||||
|
|
||||||
|
- 项目规范:`AGENTS.md`
|
||||||
|
- Claude Code 指南:`claude.md`
|
||||||
10
AGENTS.md
10
AGENTS.md
@ -7,6 +7,16 @@
|
|||||||
|
|
||||||
> 和用户交流时默认使用中文。
|
> 和用户交流时默认使用中文。
|
||||||
|
|
||||||
|
## 0) 项目名称
|
||||||
|
|
||||||
|
本项目(仓库 `agents`)的暂定产品名为 **Astrion**。
|
||||||
|
|
||||||
|
- **构词**:`Astr-`(希腊语 *astron*,星星/天体)+ `-ion`(粒子/状态后缀,如 photon、electron)。
|
||||||
|
- **意象**:星之子、星际粒子、来自宇宙尘埃的微小发光体。
|
||||||
|
- **寓意**:Agent 像星际间传递信号的粒子,把人类意图传递到工具、文件、终端与子智能体之间;同时把零散任务像星尘聚合成恒星一样,聚合成可执行结果。
|
||||||
|
- **状态**:暂定名,后续若变更需同步更新 `AGENTS.md`、`claude.md` 与项目记忆 `astrion_naming`。
|
||||||
|
- **中文参考**:阿斯特里恩;简称可考虑 **星子**。
|
||||||
|
|
||||||
## 1) 当前项目结构(按代码现状)
|
## 1) 当前项目结构(按代码现状)
|
||||||
|
|
||||||
- **后端入口**
|
- **后端入口**
|
||||||
|
|||||||
@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
多用户 AI Agent 系统,为每个登录用户提供独立的 Docker 容器环境。支持终端交互、文件操作、对话管理和实时监控。主要用于学习和实验"智能体 + 真实 Dev Workflow",代码大量由 AI 生成。
|
多用户 AI Agent 系统,产品暂定名为 **Astrion**(`Astr-` 星星/天体 + `-ion` 粒子后缀,意象为“星之子、星际粒子”)。为每个登录用户提供独立的 Docker 容器环境,支持终端交互、文件操作、对话管理和实时监控。主要用于学习和实验"智能体 + 真实 Dev Workflow",代码大量由 AI 生成。
|
||||||
|
|
||||||
## Core Architecture
|
## Core Architecture
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# AI Agent 系统
|
# Astrion
|
||||||
|
|
||||||
一个功能完整的 AI 智能体系统,支持多模态交互、子智能体协作、实时终端操作和丰富的工具集成。
|
一个功能完整的 AI 智能体系统,支持多模态交互、子智能体协作、实时终端操作和丰富的工具集成。
|
||||||
|
|
||||||
|
|||||||
@ -97,7 +97,7 @@ function isWideCodePoint(code: number): boolean {
|
|||||||
export function WelcomePanel({ status }: { status: CliStatus }) {
|
export function WelcomePanel({ status }: { status: CliStatus }) {
|
||||||
return (
|
return (
|
||||||
<Box flexDirection="column" marginTop={1}>
|
<Box flexDirection="column" marginTop={1}>
|
||||||
<Text color="gray">Agents</Text>
|
<Text color="gray">Astrion</Text>
|
||||||
<Box borderStyle="round" borderColor="gray" paddingX={2} paddingY={1} flexDirection="column">
|
<Box borderStyle="round" borderColor="gray" paddingX={2} paddingY={1} flexDirection="column">
|
||||||
<Text bold>Welcome back!</Text>
|
<Text bold>Welcome back!</Text>
|
||||||
<Text color="gray">{status.model} · {status.runMode}</Text>
|
<Text color="gray">{status.model} · {status.runMode}</Text>
|
||||||
@ -279,7 +279,7 @@ export function WorkspacePrompt({ cwd, selectedIndex }: { cwd: string; selectedI
|
|||||||
export function StatusPanel({ status }: { status: CliStatus }) {
|
export function StatusPanel({ status }: { status: CliStatus }) {
|
||||||
return (
|
return (
|
||||||
<Box borderStyle="round" borderColor="gray" paddingX={1} flexDirection="column" marginTop={1}>
|
<Box borderStyle="round" borderColor="gray" paddingX={1} flexDirection="column" marginTop={1}>
|
||||||
<Text>{'>_ Agents CLI'}</Text>
|
<Text>{'>_ Astrion CLI'}</Text>
|
||||||
<Text> </Text>
|
<Text> </Text>
|
||||||
<StatusField label="Model" value={status.model} />
|
<StatusField label="Model" value={status.model} />
|
||||||
<StatusField label="Directory" value={shortPath(status.directory)} />
|
<StatusField label="Directory" value={shortPath(status.directory)} />
|
||||||
|
|||||||
@ -112,13 +112,13 @@ class MessagesMixin:
|
|||||||
# 根据当前模型多模态能力选择系统提示。system prompt 按对话冻结;
|
# 根据当前模型多模态能力选择系统提示。system prompt 按对话冻结;
|
||||||
# 工具 schema 保持动态,由 define_tools 每轮根据真实状态生成。
|
# 工具 schema 保持动态,由 define_tools 每轮根据真实状态生成。
|
||||||
current_model = getattr(self, "model_key", None)
|
current_model = getattr(self, "model_key", None)
|
||||||
prompt_name = "main_system_qwenvl" if (model_supports_image(current_model) or model_supports_video(current_model)) else "main_system"
|
prompt_name = "main_system_vl" if (model_supports_image(current_model) or model_supports_video(current_model)) else "main_system"
|
||||||
model_key = getattr(self, "model_key", None)
|
model_key = getattr(self, "model_key", None)
|
||||||
prompt_replacements = get_model_prompt_replacements(model_key)
|
prompt_replacements = get_model_prompt_replacements(model_key)
|
||||||
|
|
||||||
def _build_main_system_prompt() -> str:
|
def _build_main_system_prompt() -> str:
|
||||||
system_prompt_template = self.load_prompt(prompt_name)
|
system_prompt_template = self.load_prompt(prompt_name)
|
||||||
# main_system.txt / main_system_qwenvl.txt 仅使用 {model_description}
|
# main_system.txt / main_system_vl.txt 仅使用 {model_description}
|
||||||
return system_prompt_template.format(
|
return system_prompt_template.format(
|
||||||
model_description=prompt_replacements.get("model_description", "")
|
model_description=prompt_replacements.get("model_description", "")
|
||||||
)
|
)
|
||||||
|
|||||||
@ -125,4 +125,4 @@ class PromptMixin:
|
|||||||
if prompt_file.exists():
|
if prompt_file.exists():
|
||||||
with open(prompt_file, 'r', encoding='utf-8') as f:
|
with open(prompt_file, 'r', encoding='utf-8') as f:
|
||||||
return f.read()
|
return f.read()
|
||||||
return "你是一个AI助手。"
|
return "你是 Astrion,一个智能助手。"
|
||||||
|
|||||||
2
main.py
2
main.py
@ -27,7 +27,7 @@ class AgentSystem:
|
|||||||
async def initialize(self):
|
async def initialize(self):
|
||||||
"""初始化系统"""
|
"""初始化系统"""
|
||||||
print("\n" + "="*50)
|
print("\n" + "="*50)
|
||||||
print("ð¤ AI Agent 系统启动")
|
print("ð¤ Astrion 启动")
|
||||||
print("="*50)
|
print("="*50)
|
||||||
|
|
||||||
# 1. 获取项目路径
|
# 1. 获取项目路径
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "ai-agent-frontend",
|
"name": "astrion-frontend",
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
你是 Astrion,一个运行在云端服务器/用户电脑(根据工作区信息判断)上的全能型智能助手,专为**普通用户和开发者**设计。
|
||||||
|
|
||||||
{model_description}
|
{model_description}
|
||||||
|
|
||||||
你是一名运行在云端服务器/用户电脑(根据工作区信息判断)根据上的全能型智能助手,专为**普通用户和开发者**设计。你的用户可能是没有编程背景的业务人员,也可能是专业开发者——你需要根据对话上下文灵活调整表达方式:
|
你的用户可能是没有编程背景的业务人员,也可能是专业开发者——你需要根据对话上下文灵活调整表达方式:
|
||||||
|
|
||||||
- **对普通用户**:使用通俗易懂的语言,避免技术黑话,主动解释操作步骤
|
- **对普通用户**:使用通俗易懂的语言,避免技术黑话,主动解释操作步骤
|
||||||
- **对开发者**:可以使用专业术语,提供技术细节和最佳实践建议
|
- **对开发者**:可以使用专业术语,提供技术细节和最佳实践建议
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
|
你是 Astrion,一个运行在云端服务器/用户电脑(根据工作区信息判断)上的全能型智能助手,专为**普通用户和开发者**设计。
|
||||||
|
|
||||||
{model_description}
|
{model_description}
|
||||||
|
|
||||||
你是一名运行在云端服务器/用户电脑(根据工作区信息判断)上的全能型智能助手,专为**普通用户和开发者**设计。你的用户可能是没有编程背景的业务人员,也可能是专业开发者——你需要根据对话上下文灵活调整表达方式:
|
你的用户可能是没有编程背景的业务人员,也可能是专业开发者——你需要根据对话上下文灵活调整表达方式:
|
||||||
|
|
||||||
- **对普通用户**:使用通俗易懂的语言,避免技术黑话,主动解释操作步骤
|
- **对普通用户**:使用通俗易懂的语言,避免技术黑话,主动解释操作步骤
|
||||||
- **对开发者**:可以使用专业术语,提供技术细节和最佳实践建议
|
- **对开发者**:可以使用专业术语,提供技术细节和最佳实践建议
|
||||||
@ -207,7 +207,7 @@ def _write_custom_models(target_path: Path, entry: dict) -> Path | None:
|
|||||||
|
|
||||||
def run_wizard(force: bool = False) -> int:
|
def run_wizard(force: bool = False) -> int:
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
print(" AI Agent 首次启动初始化向导")
|
print(" Astrion 首次启动初始化向导")
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
print("逐项设置启动前必须确定的内容,每项可回车使用 [默认值]。")
|
print("逐项设置启动前必须确定的内容,每项可回车使用 [默认值]。")
|
||||||
print()
|
print()
|
||||||
@ -311,7 +311,7 @@ def run_wizard(force: bool = False) -> int:
|
|||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
parser = argparse.ArgumentParser(description="AI Agent 首次启动初始化向导")
|
parser = argparse.ArgumentParser(description="Astrion 首次启动初始化向导")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--force",
|
"--force",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
||||||
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
||||||
</svg>
|
</svg>
|
||||||
<span>AI Assistant</span>
|
<span>Astrion</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 等待动画 -->
|
<!-- 等待动画 -->
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect>
|
||||||
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
<path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
|
||||||
</svg>
|
</svg>
|
||||||
<span>AI Assistant</span>
|
<span>Astrion</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 等待动画 -->
|
<!-- 等待动画 -->
|
||||||
|
|||||||
@ -68,7 +68,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
<div class="logo">AI Agent <span>v5.3</span></div>
|
<div class="logo">Astrion <span>v5.3</span></div>
|
||||||
<div class="nav-item active">📁 项目文件</div>
|
<div class="nav-item active">📁 项目文件</div>
|
||||||
<div class="nav-item">⚙️ 管理面板</div>
|
<div class="nav-item">⚙️ 管理面板</div>
|
||||||
<div style="margin-top:20px; font-size:12px; color:#9CA3AF; font-weight:600;">TEMP</div>
|
<div style="margin-top:20px; font-size:12px; color:#9CA3AF; font-weight:600;">TEMP</div>
|
||||||
|
|||||||
@ -133,7 +133,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
<div class="logo">AI Agent ✨</div>
|
<div class="logo">Astrion ✨</div>
|
||||||
<div class="nav-item active">Project Files</div>
|
<div class="nav-item active">Project Files</div>
|
||||||
<div class="nav-item">Dashboard</div>
|
<div class="nav-item">Dashboard</div>
|
||||||
<div style="flex:1"></div>
|
<div style="flex:1"></div>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>AI Agent System</title>
|
<title>Astrion</title>
|
||||||
<link rel="stylesheet" href="/static/style.css">
|
<link rel="stylesheet" href="/static/style.css">
|
||||||
<link rel="stylesheet" href="/static/easter-eggs/flood.css">
|
<link rel="stylesheet" href="/static/easter-eggs/flood.css">
|
||||||
<link rel="stylesheet" href="/static/easter-eggs/snake.css">
|
<link rel="stylesheet" href="/static/easter-eggs/snake.css">
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>登录 - AI Agent</title>
|
<title>登录 - Astrion</title>
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -255,7 +255,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="sheet-body">
|
<div class="sheet-body">
|
||||||
<div class="section-card status-card">
|
<div class="section-card status-card">
|
||||||
<strong>AI Agent v2.4</strong>
|
<strong>Astrion v2.4</strong>
|
||||||
<p>已连接 · 思考模式</p>
|
<p>已连接 · 思考模式</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section-card">
|
<div class="section-card">
|
||||||
|
|||||||
@ -335,7 +335,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="sheet-body">
|
<div class="sheet-body">
|
||||||
<div class="section-card">
|
<div class="section-card">
|
||||||
<strong>AI Agent v2.4</strong>
|
<strong>Astrion v2.4</strong>
|
||||||
<p>思考模式 · 已连接</p>
|
<p>思考模式 · 已连接</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section-card">
|
<div class="section-card">
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>注册 - AI Agent</title>
|
<title>注册 - Astrion</title>
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<main class="auth-page">
|
<main class="auth-page">
|
||||||
<section class="auth-card">
|
<section class="auth-card">
|
||||||
<h1 class="auth-title">AI Agent 登录</h1>
|
<h1 class="auth-title">Astrion 登录</h1>
|
||||||
<p class="auth-subtitle">使用账号继续访问工作台</p>
|
<p class="auth-subtitle">使用账号继续访问工作台</p>
|
||||||
|
|
||||||
<div class="auth-form-group">
|
<div class="auth-form-group">
|
||||||
|
|||||||
@ -98,7 +98,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="msg.role === 'assistant'" class="assistant-message">
|
<div v-else-if="msg.role === 'assistant'" class="assistant-message">
|
||||||
<!-- 在 assistant 消息前显示 AI Assistant 头部 -->
|
<!-- 在 assistant 消息前显示 Astrion 头部 -->
|
||||||
<!-- 只有当前一条消息是 user 且当前消息有内容时才显示 -->
|
<!-- 只有当前一条消息是 user 且当前消息有内容时才显示 -->
|
||||||
<div
|
<div
|
||||||
v-if="
|
v-if="
|
||||||
@ -704,9 +704,9 @@ const stackedBlocksEnabled = computed(() => {
|
|||||||
});
|
});
|
||||||
const aiAssistantName = computed(() => {
|
const aiAssistantName = computed(() => {
|
||||||
if (!personalization.form.use_custom_names) {
|
if (!personalization.form.use_custom_names) {
|
||||||
return 'AI Assistant';
|
return 'Astrion';
|
||||||
}
|
}
|
||||||
return personalization.form.self_identify || 'AI Assistant';
|
return personalization.form.self_identify || 'Astrion';
|
||||||
});
|
});
|
||||||
const userName = computed(() => {
|
const userName = computed(() => {
|
||||||
if (!personalization.form.use_custom_names) {
|
if (!personalization.form.use_custom_names) {
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
></span>
|
></span>
|
||||||
<div class="brand-text">
|
<div class="brand-text">
|
||||||
<span class="brand-name">AI Agent</span>
|
<span class="brand-name">Astrion</span>
|
||||||
<span class="agent-version" v-if="agentVersion">{{ agentVersion }}</span>
|
<span class="agent-version" v-if="agentVersion">{{ agentVersion }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -28,7 +28,7 @@ const TUTORIAL_VERSION = 'v1';
|
|||||||
const DEFAULT_STEPS: TutorialStep[] = [
|
const DEFAULT_STEPS: TutorialStep[] = [
|
||||||
{
|
{
|
||||||
id: 'welcome',
|
id: 'welcome',
|
||||||
title: '欢迎使用 AI Agent 系统',
|
title: '欢迎使用 Astrion',
|
||||||
description: '我们将用 2-3 分钟带你快速了解核心功能。',
|
description: '我们将用 2-3 分钟带你快速了解核心功能。',
|
||||||
target: null,
|
target: null,
|
||||||
mode: 'info',
|
mode: 'info',
|
||||||
|
|||||||
@ -402,7 +402,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="status-right">
|
<div class="status-right">
|
||||||
<span style="opacity: 0.6;">AI Agent Terminal Monitor v1.0</span>
|
<span style="opacity: 0.6;">Astrion Terminal Monitor v1.0</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -555,7 +555,7 @@
|
|||||||
term.writeln('\x1b[1;36m║ 🤖 AI Terminal Monitor v1.0 ║\x1b[0m');
|
term.writeln('\x1b[1;36m║ 🤖 AI Terminal Monitor v1.0 ║\x1b[0m');
|
||||||
term.writeln('\x1b[1;36m╚════════════════════════════════════════╝\x1b[0m');
|
term.writeln('\x1b[1;36m╚════════════════════════════════════════╝\x1b[0m');
|
||||||
term.writeln('');
|
term.writeln('');
|
||||||
term.writeln('\x1b[33m正在连接到AI Agent...\x1b[0m');
|
term.writeln('\x1b[33m正在连接到 Astrion...\x1b[0m');
|
||||||
term.writeln('');
|
term.writeln('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user