@@ -17,7 +17,12 @@ set -euo pipefail
1717# AGENT_MARKET_NAME marketplace 名,默认: agent-market
1818
1919AGENT_NAME=" ${1:- } "
20- AGENT_MARKET_BASE_URL=" ${AGENT_MARKET_BASE_URL:- http:// 172.16.100.225: 7001/ agent-market} "
20+ CUSTOM_BASE_URL=" ${2:- } "
21+ DEFAULT_MARKET_URL=" __AGENT_MARKET_BASE_URL__"
22+ if [[ " $DEFAULT_MARKET_URL " == * " __" * ]]; then
23+ DEFAULT_MARKET_URL=" http://172.16.100.225:7001/agent-market"
24+ fi
25+ AGENT_MARKET_BASE_URL=" ${CUSTOM_BASE_URL:- ${AGENT_MARKET_BASE_URL:- $DEFAULT_MARKET_URL } } "
2126AGENT_MARKET_BASE_URL=" ${AGENT_MARKET_BASE_URL%/ } "
2227AGENT_MARKET_LOCAL_DIR=" ${AGENT_MARKET_LOCAL_DIR:- $HOME / .agents/ agent-market} "
2328AGENT_MARKET_NAME=" ${AGENT_MARKET_NAME:- agent-market} "
@@ -106,14 +111,17 @@ except:
106111
107112for folder in [".claude-plugin", ".codex-plugin"]:
108113 mf_path = f"{market_dir}/{folder}/marketplace.json"
109- market = {"name": "agent-market", "plugins": []}
114+ market = {"name": "agent-market", "owner": {"name": "Doraemon"}, " plugins": []}
110115 if os.path.exists(mf_path):
111116 try:
112117 with open(mf_path, "r") as f:
113118 market = json.load(f)
114119 except:
115120 pass
116121
122+ if "owner" not in market:
123+ market["owner"] = {"name": "Doraemon"}
124+
117125 # Remove existing entry if any
118126 market["plugins"] = [p for p in market.get("plugins", []) if p.get("name") != agent_name]
119127
@@ -144,38 +152,37 @@ try:
144152 data = json.load(open(sys.argv[1], encoding="utf-8"))
145153except Exception:
146154 sys.exit(0)
147- for prompt in data.get("interface", {}).get("defaultPrompt", []):
148- match = re.search(r'\$([a-z0-9][a-z0-9-]*)', str(prompt))
149- if match:
150- print(match.group(1))
151- break
155+
156+ prompts = data.get("interface", {}).get("defaultPrompt", [])
157+ if isinstance(prompts, list):
158+ for p in prompts:
159+ m = re.search(r'\$([A-Za-z0-9_-]+)', p)
160+ if m:
161+ print(m.group(1))
162+ sys.exit(0)
152163PY
153164}
154165
155166CODEX=" $( resolve_codex || true) "
156167CLAUDE=" $( resolve_claude || true) "
157168
158- if [[ -z " $CODEX " && -z " $CLAUDE " ]]; then
159- log " "
160- warn " 未检测到 codex / claude CLI,无法自动安装;marketplace 源码已就绪于 $AGENT_MARKET_LOCAL_DIR "
161- exit 1
162- fi
163-
164169# 注册 marketplace + 安装 plugin(读命令输出判断是否已注册/已安装,幂等可重复执行)。
165170install_codex () {
166171 local cli=" $1 "
167172 log " "
168173 log " Codex 安装 $AGENT_NAME @$AGENT_MARKET_NAME ..."
169- # 不用 grep -Fq:命中即关闭读端,CLI 输出超管道缓冲时被 SIGPIPE 杀死,pipefail 下会误判未注册。
170- if " $cli " plugin marketplace list --json 2> /dev/null | grep -F " \" name\" : \" $AGENT_MARKET_NAME \" " > /dev/null; then
174+
175+ # 注册 local marketplace(只在未注册时 add,避免重复报错)
176+ if " $cli " plugin marketplace list 2> /dev/null | grep -Fq " $AGENT_MARKET_NAME " ; then
171177 ok " marketplace $AGENT_MARKET_NAME 已注册,跳过"
172178 else
173179 " $cli " plugin marketplace add " $AGENT_MARKET_LOCAL_DIR " \
174- || die " codex marketplace add 失败"
180+ || die " codex plugin marketplace add 失败"
175181 ok " marketplace $AGENT_MARKET_NAME 已注册"
176182 fi
177- # 不用 grep -Fq:命中即关闭读端,CLI 输出超管道缓冲时被 SIGPIPE 杀死,pipefail 下会误判未安装。
178- if " $cli " plugin list --json 2> /dev/null | grep -F " \" pluginId\" : \" $AGENT_NAME @$AGENT_MARKET_NAME \" " > /dev/null; then
183+
184+ local installed=" $HOME /.codex/plugins/cache/$AGENT_MARKET_NAME /$AGENT_NAME "
185+ if [[ -d " $installed " ]]; then
179186 ok " plugin $AGENT_NAME 已安装,跳过"
180187 else
181188 " $cli " plugin add " $AGENT_NAME @$AGENT_MARKET_NAME " \
@@ -186,15 +193,16 @@ install_codex() {
186193
187194install_claude () {
188195 local cli=" $1 "
189- local known=" $HOME /.claude/plugins/known_marketplaces.json"
190- local installed=" $HOME /.claude/plugins/installed_plugins.json"
191196 log " "
192197 log " Claude Code 安装 $AGENT_NAME @$AGENT_MARKET_NAME ..."
193- if [[ -f " $known " ]] && grep -Fq " \" $AGENT_MARKET_NAME \" " " $known " ; then
194- ok " marketplace $AGENT_MARKET_NAME 已注册,跳过"
198+
199+ local installed=" $HOME /.claude/plugins/installed_plugins.json"
200+ if " $cli " plugin marketplace list 2> /dev/null | grep -Fq " $AGENT_MARKET_NAME " ; then
201+ ok " marketplace $AGENT_MARKET_NAME 已注册,更新索引"
202+ " $cli " plugin marketplace update " $AGENT_MARKET_NAME " > /dev/null 2>&1 || true
195203 else
196204 " $cli " plugin marketplace add " $AGENT_MARKET_LOCAL_DIR " \
197- || die " claude marketplace add 失败"
205+ || die " claude plugin marketplace add 失败"
198206 ok " marketplace $AGENT_MARKET_NAME 已注册"
199207 fi
200208 if [[ -f " $installed " ]] && grep -Fq " \" $AGENT_NAME \" " " $installed " ; then
0 commit comments