Files
Arcrun/cli/src/commands/list.ts
T
Claude 5fc7277c3c refactor(mcp): u6u_* tool 全面 rename 為 arcrun_* + 前綴收斂單一來源
零 u6u 洩漏(leo 要求 1):connector tool 清單只剩 arcrun_*,並移除壞掉/
重複的 u6u_ workflow tool(deploy/execute/get/list_workflows 由 arcrun_
push/run/get/list_workflows 取代);MCP server name 也由 u6u-mcp-server
改 arcrun-mcp-server。

前綴單一真相源(leo 要求 2):新增 mcp/src/brand.ts(TOOL_PREFIX + toolName()
helper),所有 server.tool() 註冊一律走 toolName("suffix"),前綴不再明碼散寫。
未來 rebrand 只改 brand.ts 一行。

- 12 個獨有能力 tool rename(component/tag/gui/search_workflows)
- 4 個重複/壞掉 tool 移除
- inter-tool hint、描述字串、註解內 u6u_ 名字全數更新
- tsc exit 0;vitest 19/19 綠

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015d5jDbuqT5Htwv3Q88XXKk
2026-07-07 05:21:34 +00:00

53 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* acr list — 列出已部署的 workflow
*
* thin-shell-alignment P1issue #11):原本直連 CF KV 讀 `workflow:` 前綴(CfKvClient),
* 有兩個漂移:① 前綴對不上(部署寫 `{apiKey}:wf:` → 永遠列不到新部署)② 薄殼直碰底層儲存
* self-hosted 用戶需 CF API token 才能 list)。改走 cypher `GET /webhooks/named`KV 源,與
* MCP arcrun_list_workflows 同源),薄殼不再直連 KV、key 前綴 bug 自然消失。
*/
import chalk from 'chalk';
import ora from 'ora';
import { loadConfig, getCypherExecutorUrl } from '../lib/config.js';
export async function cmdList(): Promise<void> {
const config = loadConfig();
const executorUrl = getCypherExecutorUrl(config);
const headers: Record<string, string> = { 'Content-Type': 'application/json' };
if (config.api_key) headers['X-Arcrun-API-Key'] = config.api_key;
const spinner = ora('讀取 workflow 清單').start();
try {
const res = await fetch(`${executorUrl}/webhooks/named`, { method: 'GET', headers });
if (!res.ok) {
spinner.fail(chalk.red(`讀取失敗(HTTP ${res.status}):${(await res.text()).slice(0, 200)}`));
process.exit(1);
}
const data = await res.json() as {
workflows: Array<{ name: string; description?: string; created_at?: string }>;
};
spinner.stop();
const workflows = data.workflows ?? [];
if (workflows.length === 0) {
console.log(chalk.yellow('\n 沒有已部署的 workflow。執行 acr push <workflow.yaml> 部署第一個。\n'));
return;
}
console.log(chalk.bold(`\n 已部署 ${workflows.length} 個 workflow\n`));
for (const wf of workflows) {
const date = wf.created_at ? new Date(wf.created_at).toLocaleString('zh-TW') : '未知';
const desc = wf.description ? chalk.gray(` — ${wf.description}`) : '';
console.log(` • ${chalk.cyan(wf.name.padEnd(25))} ${date}${desc}`);
}
console.log('');
} catch (e) {
spinner.fail(chalk.red(`讀取失敗:${e instanceof Error ? e.message : e}`));
process.exit(1);
}
}