配置: 初始化 ISOS Agent Teams 软件研发模板
CI / lint (push) Successful in 6s

This commit is contained in:
2026-04-19 21:47:08 +08:00
parent 3ab6fe6504
commit 34346be862
202 changed files with 23544 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
{
"numStartups": 80,
"installMethod": "global",
"hasSeenTasksHint": true,
"autoInstallIdeExtension": false,
"cachedStatsigGates": {
"tengu_prompt_suggestion": false
},
"mcpServers": {
"zai-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@z_ai/mcp-server"
],
"env": {
"Z_AI_MODE": "ZHIPU",
"Z_AI_API_KEY": "{{your_api_key}}"
}
},
"web-search-prime": {
"type": "http",
"url": "https://open.bigmodel.cn/api/mcp/web_search_prime/mcp",
"headers": {
"Authorization": "Bearer {{your_api_key}}"
}
},
"web-reader": {
"type": "http",
"url": "https://open.bigmodel.cn/api/mcp/web_reader/mcp",
"headers": {
"Authorization": "Bearer {{your_api_key}}"
}
},
"zread": {
"type": "http",
"url": "https://open.bigmodel.cn/api/mcp/zread/mcp",
"headers": {
"Authorization": "Bearer {{your_api_key}}"
}
}
},
"firstStartTime": "2026-01-01T01:02:03.004Z",
"unpinOpus47LaunchEffort": true,
"opusProMigrationComplete": true,
"sonnet1m45MigrationComplete": true,
"thinkingMigrationComplete": true,
"hasCompletedOnboarding": true,
"migrationVersion": 11,
"lastReleaseNotesSeen": "2.1.112",
"hasIdeOnboardingBeenShown": {
"vscode": true
},
"officialMarketplaceAutoInstallAttempted": true,
"officialMarketplaceAutoInstalled": true,
"showSpinnerTree": false
}
+136
View File
@@ -0,0 +1,136 @@
# ============================================================================
# DevContainer .bashrc 追加配置
# 由 Dockerfile 通过 sed 替换占位符后追加到 ~/.bashrc
# ============================================================================
# 本地二进制路径(必须优先于 NVM)
export PATH="$HOME/.local/bin:$PATH"
# NVM 配置
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Node.js 镜像配置
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
export npm_config_registry=https://registry.npmmirror.com
export YARN_REGISTRY=https://registry.npmmirror.com
export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
# Python/UV 配置
export PATH="{{NODE_PATH}}:{{BIN_PATH}}:$PATH"
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
export UV_LINK_MODE=copy
export PYTHONUNBUFFERED=1
alias uv-python='uv run python'
alias uv-pip='uv run pip'
# 语言和区域设置
export LC_ALL=zh_CN.UTF-8
export LC_TIME=zh_CN.UTF-8
export LANG=zh_CN.UTF-8
# 其他配置
export COREPACK_ENABLE_DOWNLOAD_PROMPT=false
export EDITOR=vim
export VISUAL=vim
export LESSCHARSET=utf-8
# Jujutsu (jj) 补全
if command -v jj >/dev/null 2>&1; then
source <(jj util completion bash 2>/dev/null)
fi
# 别名配置
alias ll='ls -alhF --color=auto'
alias date='date "+%F %T %p %A %B"'
export TIME_STYLE='+%Y-%m-%d %H:%M:%S'
# Python 路径
export PYTHONPATH=/workspace:$PYTHONPATH
# NVM IO.js 镜像
export NVM_IOJS_ORG_MIRROR="https://iojs.org/dist"
# Claude Code 启动函数(参数透传至 runcc.sh,支持 -n/--name 走 /rename 持久化)
cc() { {{BIN_PATH}}/runcc.sh "$@"; }
# 模型快捷方式: cc51, cc51 -n 后端, cc -n 后端 51 ...
alias cc45='cc 45'
alias cc45a='cc 45a'
alias cc46='cc 46'
alias cc47='cc 47'
alias cc5='cc 5'
alias cc5t='cc 5t'
alias cc51='cc 51'
# OpenCode 启动函数(参数透传至 runoc.sh)
oc() { {{BIN_PATH}}/runoc.sh "$@"; }
# 模型快捷方式: oc51, oc 51 ...
alias oc45='oc 45'
alias oc45a='oc 45a'
alias oc45f='oc 45f'
alias oc46='oc 46'
alias oc46v='oc 46v'
alias oc46vf='oc 46vf'
alias oc47='oc 47'
alias oc5='oc 5'
alias oc5t='oc 5t'
alias oc51='oc 51'
# tmux pane 级模型继承:从 pane option 读取模型配置(由 runcc.sh 写入)
# 覆盖 session 级环境变量,实现同 session 不同 pane 的模型隔离
if [ -n "${TMUX:-}" ]; then
_model="$(tmux show-option -pv @anthropic_model 2>/dev/null || true)"
if [ -n "$_model" ]; then
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$_model"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$_model"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$_model"
fi
unset _model
_oc_model="$(tmux show-option -pv @opencode_model 2>/dev/null || true)"
if [ -n "$_oc_model" ]; then
export OPENCODE_MODEL="$_oc_model"
fi
unset _oc_model
fi
# Docker 组提示(仅在需要时显示)
if [ "${DOCKER_ENABLED:-true}" = "true" ] && [ -S /var/run/docker.sock ] && ! groups | grep -q docker; then
export DOCKER_GROUP_REQUIRED=1
fi
# ============================================================================
# VCS 感知提示符(覆盖 devcontainer 默认,支持 jj bookmark 显示)
# ============================================================================
# 在 bashrc 加载时检测 jj 仓库(只需一次,避免每次提示都调用 jj root)
__JJ_REPO=0
if command -v jj >/dev/null 2>&1 && jj root >/dev/null 2>&1; then
__JJ_REPO=1
fi
__vcs_prompt() {
local userpart='`export XIT=$? \
&& [ ! -z "${GITHUB_USER:-}" ] && echo -n "\[\033[0;32m\]@${GITHUB_USER:-} " || echo -n "\[\033[0;32m\]\u " \
&& [ "$XIT" -ne "0" ] && echo -n "\[\033[1;31m\]➜" || echo -n "\[\033[0m\]➜"`'
local vcsbranch='`\
if [ "${__JJ_REPO:-0}" = "1" ]; then \
BRANCH=$(jj bookmark list -r @- 2>/dev/null | sed "s/[*:].*//" | head -1); \
if [ -z "${BRANCH:-}" ]; then \
BRANCH=$(jj log -r "@-" --no-graph -T "change_id.short()" 2>/dev/null); \
fi; \
if [ -n "${BRANCH:-}" ]; then \
echo -n "\[\033[0;36m\](\[\033[1;31m\]${BRANCH}\[\033[0;36m\]) "; \
fi; \
else \
BRANCH="$(git --no-optional-locks symbolic-ref --short HEAD 2>/dev/null || git --no-optional-locks rev-parse --short HEAD 2>/dev/null)"; \
if [ -n "${BRANCH:-}" ]; then \
echo -n "\[\033[0;36m\](\[\033[1;31m\]${BRANCH}\[\033[0;36m\]) "; \
fi; \
fi`'
local lightblue='\[\033[1;34m\]'
local removecolor='\[\033[0m\]'
PS1="${userpart} ${lightblue}\w ${vcsbranch}${removecolor}\$ "
}
__vcs_prompt
+85
View File
@@ -0,0 +1,85 @@
#!/bin/bash
# Claude Code 启动脚本,支持通过参数选择 GLM 模型版本
#
# 固定版本: 2.1.112 (来自 /workspace/.devcontainer/.cache/npm/anthropic-ai-claude-code-2.1.112.tgz)
# 注意: 不再执行自动更新,以保持版本稳定
SETTINGS_FILE="/workspace/.devcontainer/.volumes/claude/settings.json"
# 参数解析: runcc.sh [--name <名称>] [模型]
SESSION_NAME=""
MODEL_KEY=""
while [ $# -gt 0 ]; do
case "$1" in
--name|-n)
[ $# -ge 2 ] || { echo "错误: --name 需要参数" >&2; exit 1; }
SESSION_NAME="$2"; shift 2
;;
-h|--help)
echo "用法: runcc.sh [--name <名称>] [模型]"
echo ""
echo "选项:"
echo " --name, -n <名称> Claude Code 会话显示名称"
echo ""
echo "模型: 45|45a|46|47|5|5t|51 (默认 51)"
exit 0
;;
*)
MODEL_KEY="$1"; shift
;;
esac
done
MODEL_KEY="${MODEL_KEY:-51}" # 默认使用 glm-5.1
case "$MODEL_KEY" in
45) MODEL="glm-4.5" ;;
45a) MODEL="glm-4.5-air" ;;
46) MODEL="glm-4.6" ;;
47) MODEL="glm-4.7" ;;
5) MODEL="glm-5" ;;
5t) MODEL="glm-5-turbo" ;;
51) MODEL="glm-5.1" ;;
*)
echo "未知模型: $MODEL_KEY (可选: 45|45a|46|47|5|5t|51)"
exit 1
;;
esac
# 从 settings.json 中移除模型相关配置(避免覆盖 shell 环境变量)
if command -v jq &>/dev/null && [ -f "$SETTINGS_FILE" ]; then
jq 'del(.env.ANTHROPIC_DEFAULT_OPUS_MODEL, .env.ANTHROPIC_DEFAULT_HAIKU_MODEL, .env.ANTHROPIC_DEFAULT_SONNET_MODEL)' \
"$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" \
&& mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
fi
# ── 模型环境变量(三个层级统一为同一模型)────────────────
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$MODEL"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$MODEL"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$MODEL"
# ── tmux 模型传播(确保子 pane 能获取正确模型)─────────
if [ -n "${TMUX:-}" ]; then
SESSION_ID="$(tmux display-message -p '#{session_id}')"
# 层级 2: session 级环境变量(不同 session 隔离)
tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_OPUS_MODEL "$MODEL"
tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_HAIKU_MODEL "$MODEL"
tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_SONNET_MODEL "$MODEL"
# 层级 3: pane 级选项(同 session 不同 pane 隔离)
# .bashrc 会在新 shell 启动时读取此选项,覆盖 session 级设置
tmux set-option -p @anthropic_model "$MODEL"
fi
# 构建启动参数
CC_ARGS=(--ide --dangerously-skip-permissions --allow-dangerously-skip-permissions)
# --name 不可靠(不写 custom-title/agent-name JSONL 记录),
# 改用 /rename 斜杠命令作为初始提示,确保名称正确持久化
if [ -n "$SESSION_NAME" ]; then
INITIAL_PROMPT="/rename $SESSION_NAME"
fi
echo "启动 Claude Code (模型: $MODEL${SESSION_NAME:+, 会话: $SESSION_NAME})"
claude "${CC_ARGS[@]}" ${INITIAL_PROMPT:+"$INITIAL_PROMPT"}
+73
View File
@@ -0,0 +1,73 @@
#!/bin/bash
# OpenCode 启动脚本,支持通过参数选择 GLM 模型版本
#
# 用法: runoc.sh [模型]
#
# 模型: 45|45a|45f|46|46v|46vf|47|5|5t|51 (默认 51)
set -euo pipefail
PROJECT_CONFIG="/workspace/opencode.json"
GLOBAL_CONFIG="$HOME/.config/opencode/opencode.json"
# 参数解析
MODEL_KEY=""
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
echo "用法: runoc.sh [模型]"
echo ""
echo "模型: 45|45a|45f|46|46v|46vf|47|5|5t|51 (默认 51)"
exit 0
;;
*)
MODEL_KEY="$1"; shift
;;
esac
done
MODEL_KEY="${MODEL_KEY:-51}"
case "$MODEL_KEY" in
45) MODEL="zhipuai-coding-plan/glm-4.5" ;;
45a) MODEL="zhipuai-coding-plan/glm-4.5-air" ;;
45f) MODEL="zhipuai-coding-plan/glm-4.5-flash" ;;
46) MODEL="zhipuai-coding-plan/glm-4.6" ;;
46v) MODEL="zhipuai-coding-plan/glm-4.6v" ;;
46vf) MODEL="zhipuai-coding-plan/glm-4.6v-flash" ;;
47) MODEL="zhipuai-coding-plan/glm-4.7" ;;
5) MODEL="zhipuai-coding-plan/glm-5" ;;
5t) MODEL="zhipuai-coding-plan/glm-5-turbo" ;;
51) MODEL="zhipuai-coding-plan/glm-5.1" ;;
*)
echo "未知模型: $MODEL_KEY (可选: 45|45a|45f|46|46v|46vf|47|5|5t|51)"
exit 1
;;
esac
# ── tmux 模型传播(确保子 pane 能获取正确模型)─────────
if [ -n "${TMUX:-}" ]; then
SESSION_ID="$(tmux display-message -p '#{session_id}')"
# session 级环境变量
tmux setenv -t "$SESSION_ID" OPENCODE_MODEL "$MODEL"
# pane 级选项(.bashrc 会在新 shell 启动时读取)
tmux set-option -p @opencode_model "$MODEL"
fi
# ── OpenCode 自更新检查(每日一次)──
LAST_UPDATE_FILE="$HOME/.cache/opencode_update_last_run"
TODAY=$(date +%Y-%m-%d)
mkdir -p "$(dirname "$LAST_UPDATE_FILE")"
if [ ! -f "$LAST_UPDATE_FILE" ] || [ "$(cat "$LAST_UPDATE_FILE" 2>/dev/null)" != "$TODAY" ]; then
opencode upgrade 2>/dev/null || true
echo "$TODAY" > "$LAST_UPDATE_FILE"
fi
# ── 构建启动参数 ──
OC_ARGS=(-m "$MODEL")
echo "启动 OpenCode (模型: $MODEL)"
opencode "${OC_ARGS[@]}"
+25
View File
@@ -0,0 +1,25 @@
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "{{your_api_key}}",
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "200000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "75",
"CLAUDE_CODE_NO_FLICKER": "1"
},
"enabledPlugins": {
"code-simplifier@claude-plugins-official": true,
"code-review@claude-plugins-official": true,
"hookify@claude-plugins-official": true,
"ralph-loop@claude-plugins-official": true,
"skill-creator@claude-plugins-official": true,
"typescript-lsp@claude-plugins-official": true,
"pyright-lsp@claude-plugins-official": true,
"superpowers@claude-plugins-official": true,
"glm-plan-usage@zai-coding-plugins": true
},
"language": "Chinese",
"skipDangerousModePermissionPrompt": true
}