feat: 初始化黄小瓜AI助手记忆仓库

- 核心配置: IDENTITY, USER, SOUL, AGENTS, TOOLS, HEARTBEAT, MEMORY
- memory/: 每日总结和临时记录
- skills/: 所有已安装技能
- notes/: 语音配置笔记
This commit is contained in:
root
2026-04-04 02:42:48 +08:00
parent 2d24fe9b50
commit 691b8cdd0c
115 changed files with 18198 additions and 0 deletions

View File

@@ -0,0 +1,417 @@
#!/bin/bash
# 腾讯云 COS Skill 自动设置脚本
# 用法:
# setup.sh --check-only 仅检查环境状态
# setup.sh --secret-id <ID> --secret-key <KEY> --region <REGION> --bucket <BUCKET> [--dataset <NAME>]
set -e
# 颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
ok() { echo -e "${GREEN}${NC} $1"; }
fail() { echo -e "${RED}${NC} $1"; }
warn() { echo -e "${YELLOW}!${NC} $1"; }
# 获取脚本所在目录skill baseDir
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BASE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
# ========== 检查函数 ==========
check_node() {
if command -v node &>/dev/null; then
ok "Node.js $(node --version)"
return 0
else
fail "Node.js 未安装"
return 1
fi
}
check_npm() {
if command -v npm &>/dev/null; then
ok "npm $(npm --version)"
return 0
else
fail "npm 未安装"
return 1
fi
}
check_mcporter() {
if command -v mcporter &>/dev/null; then
ok "mcporter $(mcporter --version 2>/dev/null || echo '已安装')"
return 0
else
fail "mcporter 未安装"
return 1
fi
}
check_mcporter_config() {
if [ -f ~/.mcporter/mcporter.json ]; then
if grep -q '"cos-mcp"' ~/.mcporter/mcporter.json 2>/dev/null; then
ok "mcporter 已配置 cos-mcp 服务器"
return 0
else
warn "mcporter.json 存在但未配置 cos-mcp"
return 1
fi
else
fail "~/.mcporter/mcporter.json 不存在"
return 1
fi
}
check_cos_mcp() {
if command -v npx &>/dev/null && npx cos-mcp --help &>/dev/null 2>&1; then
ok "cos-mcp 可用"
return 0
else
fail "cos-mcp 未安装或不可用"
return 1
fi
}
check_cos_sdk() {
if node -e "require('cos-nodejs-sdk-v5')" &>/dev/null 2>&1; then
ok "cos-nodejs-sdk-v5 已安装"
return 0
else
fail "cos-nodejs-sdk-v5 未安装"
return 1
fi
}
check_coscmd() {
if command -v coscmd &>/dev/null; then
ok "coscmd 可用"
return 0
else
warn "coscmd 未安装(可选)"
return 1
fi
}
check_env_vars() {
local all_set=true
for var in TENCENT_COS_SECRET_ID TENCENT_COS_SECRET_KEY TENCENT_COS_REGION TENCENT_COS_BUCKET; do
if [ -n "${!var}" ]; then
ok "$var 已设置"
else
fail "$var 未设置"
all_set=false
fi
done
$all_set
}
check_cos_conf() {
if [ -f ~/.cos.conf ]; then
ok "~/.cos.conf 已存在"
return 0
else
warn "~/.cos.conf 不存在"
return 1
fi
}
# ========== 检查模式 ==========
do_check() {
echo "=== 腾讯云 COS Skill 环境检查 ==="
echo ""
echo "--- 基础环境 ---"
check_node || true
check_npm || true
echo ""
echo "--- 方式一: cos-mcp MCP ---"
check_mcporter || true
check_mcporter_config || true
check_cos_mcp || true
echo ""
echo "--- 方式二: Node.js SDK ---"
check_cos_sdk || true
check_env_vars || true
echo ""
echo "--- 方式三: COSCMD ---"
check_coscmd || true
check_cos_conf || true
echo ""
echo "--- Skill 文件 ---"
[ -f "$BASE_DIR/SKILL.md" ] && ok "SKILL.md" || fail "SKILL.md 不存在"
[ -f "$BASE_DIR/scripts/cos_node.mjs" ] && ok "scripts/cos_node.mjs" || fail "scripts/cos_node.mjs 不存在"
[ -f "$BASE_DIR/references/config_template.json" ] && ok "references/config_template.json" || fail "references/config_template.json 不存在"
echo ""
}
# ========== 设置模式 ==========
do_setup() {
local SECRET_ID=""
local SECRET_KEY=""
local REGION=""
local BUCKET=""
local DATASET=""
local DOMAIN=""
local SERVICE_DOMAIN=""
local PROTOCOL=""
while [[ $# -gt 0 ]]; do
case "$1" in
--secret-id) SECRET_ID="$2"; shift 2;;
--secret-key) SECRET_KEY="$2"; shift 2;;
--region) REGION="$2"; shift 2;;
--bucket) BUCKET="$2"; shift 2;;
--dataset) DATASET="$2"; shift 2;;
--domain) DOMAIN="$2"; shift 2;;
--service-domain) SERVICE_DOMAIN="$2"; shift 2;;
--protocol) PROTOCOL="$2"; shift 2;;
*) shift;;
esac
done
if [ -z "$SECRET_ID" ] || [ -z "$SECRET_KEY" ] || [ -z "$REGION" ] || [ -z "$BUCKET" ]; then
echo "错误: 缺少必需参数"
echo "用法: setup.sh --secret-id <ID> --secret-key <KEY> --region <REGION> --bucket <BUCKET> [--dataset <NAME>]"
exit 1
fi
echo "=== 腾讯云 COS Skill 自动设置 ==="
echo ""
# 1. 检查 Node.js
echo "--- 步骤 1: 检查 Node.js ---"
if ! check_node; then
fail "请先安装 Node.js: https://nodejs.org/"
exit 1
fi
# 2. 确保 package.json 存在
echo ""
echo "--- 步骤 2: 初始化项目 ---"
if [ ! -f "$BASE_DIR/package.json" ]; then
(cd "$BASE_DIR" && npm init -y &>/dev/null)
ok "已创建 package.json"
else
ok "package.json 已存在"
fi
# 3. 安装 cos-mcp、cos-nodejs-sdk-v5 和 mcporter
echo ""
echo "--- 步骤 3: 安装依赖 ---"
(cd "$BASE_DIR" && npm install cos-mcp cos-nodejs-sdk-v5 --no-progress 2>&1 | tail -3)
ok "cos-mcp + cos-nodejs-sdk-v5 安装完成"
# 安装 mcporter全局
if ! command -v mcporter &>/dev/null; then
echo "正在安装 mcporter..."
npm install -g mcporter --no-progress 2>&1 | tail -3
if command -v mcporter &>/dev/null; then
ok "mcporter 全局安装完成"
else
warn "mcporter 全局安装失败,尝试本地安装..."
(cd "$BASE_DIR" && npm install mcporter --no-progress 2>&1 | tail -3)
ok "mcporter 本地安装完成(使用 npx mcporter 调用)"
fi
else
ok "mcporter 已安装"
fi
# 4. 写入环境变量到 shell 配置
echo ""
echo "--- 步骤 4: 持久化凭证 ---"
# 判断 shell 配置文件
local SHELL_RC=""
if [ -n "$ZSH_VERSION" ] || [ "$SHELL" = "/bin/zsh" ]; then
SHELL_RC="$HOME/.zshrc"
else
SHELL_RC="$HOME/.bashrc"
fi
# 先清理旧的 COS 配置
if [ -f "$SHELL_RC" ]; then
sed -i.bak '/^# --- Tencent COS Skill ---$/,/^# --- End Tencent COS Skill ---$/d' "$SHELL_RC"
rm -f "${SHELL_RC}.bak"
fi
# 写入新配置
cat >> "$SHELL_RC" << EOF
# --- Tencent COS Skill ---
export TENCENT_COS_SECRET_ID="$SECRET_ID"
export TENCENT_COS_SECRET_KEY="$SECRET_KEY"
export TENCENT_COS_REGION="$REGION"
export TENCENT_COS_BUCKET="$BUCKET"
EOF
if [ -n "$DATASET" ]; then
sed -i.bak '/^# --- End Tencent COS Skill ---$/d' "$SHELL_RC"
rm -f "${SHELL_RC}.bak"
cat >> "$SHELL_RC" << EOF
export TENCENT_COS_DATASET_NAME="$DATASET"
EOF
fi
if [ -n "$DOMAIN" ]; then
sed -i.bak '/^# --- End Tencent COS Skill ---$/d' "$SHELL_RC"
rm -f "${SHELL_RC}.bak"
cat >> "$SHELL_RC" << EOF
export TENCENT_COS_DOMAIN="$DOMAIN"
EOF
fi
if [ -n "$SERVICE_DOMAIN" ]; then
sed -i.bak '/^# --- End Tencent COS Skill ---$/d' "$SHELL_RC"
rm -f "${SHELL_RC}.bak"
cat >> "$SHELL_RC" << EOF
export TENCENT_COS_SERVICE_DOMAIN="$SERVICE_DOMAIN"
EOF
fi
if [ -n "$PROTOCOL" ]; then
sed -i.bak '/^# --- End Tencent COS Skill ---$/d' "$SHELL_RC"
rm -f "${SHELL_RC}.bak"
cat >> "$SHELL_RC" << EOF
export TENCENT_COS_PROTOCOL="$PROTOCOL"
EOF
fi
echo "# --- End Tencent COS Skill ---" >> "$SHELL_RC"
ok "凭证已写入 $SHELL_RC"
# 同时导出到当前 session
export TENCENT_COS_SECRET_ID="$SECRET_ID"
export TENCENT_COS_SECRET_KEY="$SECRET_KEY"
export TENCENT_COS_REGION="$REGION"
export TENCENT_COS_BUCKET="$BUCKET"
[ -n "$DATASET" ] && export TENCENT_COS_DATASET_NAME="$DATASET"
[ -n "$DOMAIN" ] && export TENCENT_COS_DOMAIN="$DOMAIN"
[ -n "$SERVICE_DOMAIN" ] && export TENCENT_COS_SERVICE_DOMAIN="$SERVICE_DOMAIN"
[ -n "$PROTOCOL" ] && export TENCENT_COS_PROTOCOL="$PROTOCOL"
# 5. 配置 mcporter
echo ""
echo "--- 步骤 5: 配置 mcporter ---"
local MCPORTER_DIR="$HOME/.mcporter"
local MCPORTER_CONFIG="$MCPORTER_DIR/mcporter.json"
mkdir -p "$MCPORTER_DIR"
# 构建 cos-mcp 的 args 列表
local COS_MCP_ARGS="\"cos-mcp\", \"--Region=$REGION\", \"--Bucket=$BUCKET\", \"--SecretId=$SECRET_ID\", \"--SecretKey=$SECRET_KEY\""
if [ -n "$DATASET" ]; then
COS_MCP_ARGS="$COS_MCP_ARGS, \"--DatasetName=$DATASET\""
fi
if [ -n "$DOMAIN" ]; then
COS_MCP_ARGS="$COS_MCP_ARGS, \"--Domain=$DOMAIN\""
fi
if [ -n "$SERVICE_DOMAIN" ]; then
COS_MCP_ARGS="$COS_MCP_ARGS, \"--ServiceDomain=$SERVICE_DOMAIN\""
fi
if [ -n "$PROTOCOL" ]; then
COS_MCP_ARGS="$COS_MCP_ARGS, \"--Protocol=$PROTOCOL\""
fi
COS_MCP_ARGS="$COS_MCP_ARGS, \"--connectType=stdio\""
if [ -f "$MCPORTER_CONFIG" ]; then
# 已有配置文件,检查是否已配置 cos-mcp
if grep -q '"cos-mcp"' "$MCPORTER_CONFIG" 2>/dev/null; then
warn "mcporter.json 中已存在 cos-mcp 配置,将更新"
fi
# 使用 node 合并配置(保留其他 MCP 服务器配置)
node -e "
const fs = require('fs');
const configPath = '$MCPORTER_CONFIG';
let config = {};
try { config = JSON.parse(fs.readFileSync(configPath, 'utf-8')); } catch(e) {}
if (!config.mcpServers) config.mcpServers = {};
config.mcpServers['cos-mcp'] = {
command: 'npx',
args: [$COS_MCP_ARGS]
};
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
" 2>/dev/null
ok "mcporter.json 已更新 cos-mcp 配置"
else
# 创建全新的配置文件
cat > "$MCPORTER_CONFIG" << MCPEOF
{
"mcpServers": {
"cos-mcp": {
"command": "npx",
"args": [$COS_MCP_ARGS]
}
}
}
MCPEOF
ok "mcporter.json 已创建"
fi
# 6. 配置 COSCMD如果有 Python
echo ""
echo "--- 步骤 6: 配置 COSCMD可选 ---"
if command -v pip3 &>/dev/null || command -v pip &>/dev/null; then
local PIP_CMD
PIP_CMD=$(command -v pip3 || command -v pip)
$PIP_CMD install coscmd -q 2>/dev/null
# 构建 coscmd config 命令
local COSCMD_ARGS="-a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION"
if [ -n "$SERVICE_DOMAIN" ]; then
COSCMD_ARGS="$COSCMD_ARGS -e $SERVICE_DOMAIN"
fi
if [ -n "$PROTOCOL" ] && [ "$PROTOCOL" = "http" ]; then
COSCMD_ARGS="$COSCMD_ARGS --do-not-use-ssl"
fi
eval coscmd config $COSCMD_ARGS 2>/dev/null && \
ok "coscmd 已配置" || \
warn "coscmd 安装/配置失败(非关键)"
else
warn "Python/pip 未安装,跳过 coscmd"
fi
# 7. 验证
echo ""
echo "--- 步骤 7: 验证连接 ---"
if (cd "$BASE_DIR" && node scripts/cos_node.mjs list --max-keys 1 2>/dev/null | grep -q '"success": true'); then
ok "COS 连接验证成功"
else
warn "COS 连接验证失败,请检查凭证和网络"
fi
echo ""
echo "=== 设置完成 ==="
echo "现在可以使用以下方式操作 COS"
echo " 方式一: mcporter call cos-mcp.<tool> --config ~/.mcporter/mcporter.json --output json"
echo " 方式一(备选): cos-mcp MCP 工具(通过客户端直接调用)"
echo " 方式二: node $BASE_DIR/scripts/cos_node.mjs <action>"
echo " 方式三: coscmd <command>"
}
# ========== 主入口 ==========
case "$1" in
--check-only)
do_check
;;
--secret-id|--secret-key|--region|--bucket)
do_setup "$@"
;;
*)
echo "腾讯云 COS Skill 设置工具"
echo ""
echo "用法:"
echo " $0 --check-only"
echo " 仅检查环境状态"
echo ""
echo " $0 --secret-id <ID> --secret-key <KEY> --region <REGION> --bucket <BUCKET> [--dataset <NAME>] [--domain <DOMAIN>] [--service-domain <DOMAIN>] [--protocol <PROTOCOL>]"
echo " 自动设置环境(安装依赖 + 配置凭证 + 验证连接)"
;;
esac