arcrun 1.0.9 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth-recipe.d.ts +11 -0
- package/dist/commands/auth-recipe.d.ts.map +1 -0
- package/dist/commands/auth-recipe.js +180 -0
- package/dist/commands/auth-recipe.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +39 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +5 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +147 -19
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-harness.d.ts +2 -0
- package/dist/commands/install-harness.d.ts.map +1 -0
- package/dist/commands/install-harness.js +122 -0
- package/dist/commands/install-harness.js.map +1 -0
- package/dist/commands/mcp-setup.d.ts +12 -0
- package/dist/commands/mcp-setup.d.ts.map +1 -0
- package/dist/commands/mcp-setup.js +42 -0
- package/dist/commands/mcp-setup.js.map +1 -0
- package/dist/commands/parts.d.ts.map +1 -1
- package/dist/commands/parts.js +48 -2
- package/dist/commands/parts.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +13 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/recipe.d.ts.map +1 -1
- package/dist/commands/recipe.js +63 -1
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +89 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.js +2 -2
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +58 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api-recipe-seeds.d.ts +32 -0
- package/dist/lib/api-recipe-seeds.d.ts.map +1 -0
- package/dist/lib/api-recipe-seeds.js +108 -0
- package/dist/lib/api-recipe-seeds.js.map +1 -0
- package/dist/lib/cf-api.d.ts +22 -0
- package/dist/lib/cf-api.d.ts.map +1 -1
- package/dist/lib/cf-api.js +58 -0
- package/dist/lib/cf-api.js.map +1 -1
- package/dist/lib/config.d.ts +34 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +123 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/deploy.d.ts +56 -0
- package/dist/lib/deploy.d.ts.map +1 -0
- package/dist/lib/deploy.js +239 -0
- package/dist/lib/deploy.js.map +1 -0
- package/dist/lib/exposure-warning.d.ts +25 -0
- package/dist/lib/exposure-warning.d.ts.map +1 -0
- package/dist/lib/exposure-warning.js +92 -0
- package/dist/lib/exposure-warning.js.map +1 -0
- package/dist/lib/yaml-parser.d.ts.map +1 -1
- package/dist/lib/yaml-parser.js +7 -1
- package/dist/lib/yaml-parser.js.map +1 -1
- package/harness/CLAUDE.block.md +15 -0
- package/harness/commands/arcrun.md +29 -0
- package/harness/hooks/arcrun-guard.sh +54 -0
- package/harness/settings.fragment.json +16 -0
- package/harness/skills/arcrun-mindset/SKILL.md +78 -0
- package/package.json +5 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* acr auth-recipe — 第三方服務認證 Recipe 管理
|
|
3
|
+
*
|
|
4
|
+
* acr auth-recipe list 列出所有平台預建的 auth recipe(服務清單)
|
|
5
|
+
* acr auth-recipe info <service> 顯示某服務的 recipe 詳情
|
|
6
|
+
* acr auth-recipe scaffold <service> 輸出 credentials.yaml 範本 + workflow 使用範例
|
|
7
|
+
*/
|
|
8
|
+
export declare function cmdAuthRecipeList(): Promise<void>;
|
|
9
|
+
export declare function cmdAuthRecipeInfo(service: string): Promise<void>;
|
|
10
|
+
export declare function cmdAuthRecipeScaffold(service: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=auth-recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-recipe.d.ts","sourceRoot":"","sources":["../../src/commands/auth-recipe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8FH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDvD;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1E"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* acr auth-recipe — 第三方服務認證 Recipe 管理
|
|
3
|
+
*
|
|
4
|
+
* acr auth-recipe list 列出所有平台預建的 auth recipe(服務清單)
|
|
5
|
+
* acr auth-recipe info <service> 顯示某服務的 recipe 詳情
|
|
6
|
+
* acr auth-recipe scaffold <service> 輸出 credentials.yaml 範本 + workflow 使用範例
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { loadConfig, getCypherExecutorUrl } from '../lib/config.js';
|
|
10
|
+
async function fetchAuthRecipes(baseUrl) {
|
|
11
|
+
const res = await fetch(`${baseUrl}/auth-recipes`);
|
|
12
|
+
if (!res.ok)
|
|
13
|
+
throw new Error(`HTTP ${res.status}`);
|
|
14
|
+
const data = await res.json();
|
|
15
|
+
return data.recipes ?? [];
|
|
16
|
+
}
|
|
17
|
+
async function fetchAuthRecipe(baseUrl, service) {
|
|
18
|
+
const res = await fetch(`${baseUrl}/auth-recipes/${service}`);
|
|
19
|
+
if (res.status === 404)
|
|
20
|
+
return null;
|
|
21
|
+
if (!res.ok)
|
|
22
|
+
throw new Error(`HTTP ${res.status}`);
|
|
23
|
+
const data = await res.json();
|
|
24
|
+
return data.recipe ?? null;
|
|
25
|
+
}
|
|
26
|
+
/** 輸出 credentials.yaml 範本 */
|
|
27
|
+
function buildCredentialsYaml(recipe) {
|
|
28
|
+
const lines = [
|
|
29
|
+
`# credentials.yaml — ${recipe.display_name ?? recipe.service}`,
|
|
30
|
+
`# 填入後執行:acr creds push`,
|
|
31
|
+
``,
|
|
32
|
+
];
|
|
33
|
+
for (const s of recipe.required_secrets) {
|
|
34
|
+
if (s.help)
|
|
35
|
+
lines.push(`# ${s.label}`);
|
|
36
|
+
if (s.help)
|
|
37
|
+
lines.push(`# ${s.help}`);
|
|
38
|
+
if (s.help_url)
|
|
39
|
+
lines.push(`# 說明文件:${s.help_url}`);
|
|
40
|
+
if (s.type === 'json_blob') {
|
|
41
|
+
lines.push(`${s.key}: |`);
|
|
42
|
+
lines.push(` {`);
|
|
43
|
+
lines.push(` "type": "service_account",`);
|
|
44
|
+
lines.push(` ...`);
|
|
45
|
+
lines.push(` }`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
lines.push(`${s.key}: ""`);
|
|
49
|
+
}
|
|
50
|
+
lines.push(``);
|
|
51
|
+
}
|
|
52
|
+
return lines.join('\n');
|
|
53
|
+
}
|
|
54
|
+
/** 輸出 workflow.yaml config 範例 */
|
|
55
|
+
function buildWorkflowExample(recipe) {
|
|
56
|
+
const lines = [
|
|
57
|
+
`# workflow.yaml — ${recipe.display_name ?? recipe.service} 使用範例`,
|
|
58
|
+
``,
|
|
59
|
+
`name: my_workflow`,
|
|
60
|
+
`triplets:`,
|
|
61
|
+
` - "input >> PIPE >> ${recipe.service}_call"`,
|
|
62
|
+
` - "${recipe.service}_call >> PIPE >> output"`,
|
|
63
|
+
``,
|
|
64
|
+
`config:`,
|
|
65
|
+
` ${recipe.service}_call:`,
|
|
66
|
+
` component: ${recipe.service}`,
|
|
67
|
+
` method: POST`,
|
|
68
|
+
` _path: /your-endpoint-path`,
|
|
69
|
+
` # 其他參數依 API 文件填入`,
|
|
70
|
+
];
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
export async function cmdAuthRecipeList() {
|
|
74
|
+
const config = loadConfig();
|
|
75
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
76
|
+
try {
|
|
77
|
+
const recipes = await fetchAuthRecipes(baseUrl);
|
|
78
|
+
if (recipes.length === 0) {
|
|
79
|
+
console.log(chalk.yellow(' 尚無 auth recipe。'));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// 依 primitive 分組
|
|
83
|
+
const staticKey = recipes.filter(r => r.primitive === 'static_key');
|
|
84
|
+
const serviceAccount = recipes.filter(r => r.primitive === 'service_account');
|
|
85
|
+
const others = recipes.filter(r => r.primitive !== 'static_key' && r.primitive !== 'service_account');
|
|
86
|
+
console.log(chalk.bold(`\n 第三方服務整合(${recipes.length} 個)\n`));
|
|
87
|
+
if (staticKey.length) {
|
|
88
|
+
console.log(chalk.gray(' API Key / Token 類:'));
|
|
89
|
+
for (const r of staticKey) {
|
|
90
|
+
const name = (r.display_name ?? r.service).padEnd(30);
|
|
91
|
+
const secrets = r.required_secrets.map(s => s.key).join(', ');
|
|
92
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${name} ${chalk.gray(`需要: ${secrets}`)}`);
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
}
|
|
96
|
+
if (serviceAccount.length) {
|
|
97
|
+
console.log(chalk.gray(' Service Account / JWT 類:'));
|
|
98
|
+
for (const r of serviceAccount) {
|
|
99
|
+
const name = (r.display_name ?? r.service).padEnd(30);
|
|
100
|
+
const secrets = r.required_secrets.map(s => s.key).join(', ');
|
|
101
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${name} ${chalk.gray(`需要: ${secrets}`)}`);
|
|
102
|
+
}
|
|
103
|
+
console.log();
|
|
104
|
+
}
|
|
105
|
+
if (others.length) {
|
|
106
|
+
console.log(chalk.gray(' 其他:'));
|
|
107
|
+
for (const r of others) {
|
|
108
|
+
console.log(` ${chalk.cyan(r.service.padEnd(22))} ${r.display_name ?? r.service}`);
|
|
109
|
+
}
|
|
110
|
+
console.log();
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk.gray(` 使用 acr auth-recipe scaffold <service> 查看設定範本\n`));
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
console.error(chalk.red(` 無法取得 auth recipe 清單:${e instanceof Error ? e.message : e}`));
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function cmdAuthRecipeInfo(service) {
|
|
120
|
+
const config = loadConfig();
|
|
121
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
122
|
+
try {
|
|
123
|
+
const recipe = await fetchAuthRecipe(baseUrl, service);
|
|
124
|
+
if (!recipe) {
|
|
125
|
+
console.error(chalk.red(` 找不到 auth recipe:${service}`));
|
|
126
|
+
console.log(chalk.gray(` 執行 acr auth-recipe list 查看所有可用服務`));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
console.log(chalk.bold(`\n ${recipe.display_name ?? recipe.service}\n`));
|
|
130
|
+
if (recipe.description)
|
|
131
|
+
console.log(` ${recipe.description}\n`);
|
|
132
|
+
console.log(` service: ${recipe.service}`);
|
|
133
|
+
console.log(` primitive: ${recipe.primitive}`);
|
|
134
|
+
console.log(` base_url: ${recipe.base_url}`);
|
|
135
|
+
if (recipe.token_exchange) {
|
|
136
|
+
console.log(` scopes: ${recipe.token_exchange.scopes.join(', ')}`);
|
|
137
|
+
}
|
|
138
|
+
console.log(`\n ${chalk.bold('需要的 credentials:')}`);
|
|
139
|
+
for (const s of recipe.required_secrets) {
|
|
140
|
+
console.log(` ${chalk.cyan(s.key)}${s.optional ? chalk.gray(' (optional)') : ''}`);
|
|
141
|
+
console.log(` ${s.label}`);
|
|
142
|
+
if (s.help)
|
|
143
|
+
console.log(chalk.gray(` ${s.help}`));
|
|
144
|
+
if (s.help_url)
|
|
145
|
+
console.log(chalk.gray(` → ${s.help_url}`));
|
|
146
|
+
}
|
|
147
|
+
console.log();
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
console.error(chalk.red(` 錯誤:${e instanceof Error ? e.message : e}`));
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export async function cmdAuthRecipeScaffold(service) {
|
|
155
|
+
const config = loadConfig();
|
|
156
|
+
const baseUrl = getCypherExecutorUrl(config);
|
|
157
|
+
try {
|
|
158
|
+
const recipe = await fetchAuthRecipe(baseUrl, service);
|
|
159
|
+
if (!recipe) {
|
|
160
|
+
console.error(chalk.red(` 找不到 auth recipe:${service}`));
|
|
161
|
+
console.log(chalk.gray(` 執行 acr auth-recipe list 查看所有可用服務`));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
console.log(chalk.bold(`\n ── credentials.yaml 範本 ────────────────────────────────\n`));
|
|
165
|
+
console.log(buildCredentialsYaml(recipe));
|
|
166
|
+
console.log(chalk.bold(`\n ── workflow.yaml 範例 ───────────────────────────────────\n`));
|
|
167
|
+
console.log(buildWorkflowExample(recipe));
|
|
168
|
+
console.log();
|
|
169
|
+
if (recipe.primitive === 'service_account') {
|
|
170
|
+
console.log(chalk.yellow(` 注意(Service Account):\n` +
|
|
171
|
+
` 將整份 Service Account JSON 貼入 credentials.yaml 的 ${recipe.required_secrets[0].key} 欄位。\n` +
|
|
172
|
+
` 格式:多行 YAML literal block(| 後換行縮排)。\n`));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
console.error(chalk.red(` 錯誤:${e instanceof Error ? e.message : e}`));
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=auth-recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-recipe.js","sourceRoot":"","sources":["../../src/commands/auth-recipe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AA+BpE,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA+B,CAAC;IAC3D,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,OAAe;IAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,iBAAiB,OAAO,EAAE,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA4B,CAAC;IACxD,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED,6BAA6B;AAC7B,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,MAAM,KAAK,GAAa;QACtB,wBAAwB,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE;QAC/D,wBAAwB;QACxB,EAAE;KACH,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iCAAiC;AACjC,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,MAAM,KAAK,GAAa;QACtB,qBAAqB,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,OAAO;QACjE,EAAE;QACF,mBAAmB;QACnB,WAAW;QACX,yBAAyB,MAAM,CAAC,OAAO,QAAQ;QAC/C,QAAQ,MAAM,CAAC,OAAO,0BAA0B;QAChD,EAAE;QACF,SAAS;QACT,KAAK,MAAM,CAAC,OAAO,QAAQ;QAC3B,kBAAkB,MAAM,CAAC,OAAO,EAAE;QAClC,kBAAkB;QAClB,gCAAgC;QAChC,sBAAsB;KACvB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC;QAEtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;QAE9D,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe;IACrD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,MAAM,CAAC,SAAS,KAAK,iBAAiB,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACtB,0BAA0B;gBAC1B,oDAAoD,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ;gBAC1F,wCAAwC,CACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AA2BA,wBAAsB,SAAS,CAAC,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* acr config [--where] — 顯示目前生效的設定與每個值的來源層。
|
|
3
|
+
* 解壓測 §1.2 建議 #3:讓使用者一眼確認「現在這個資料夾正用哪個帳號」,避免用錯帳號部署。
|
|
4
|
+
* SDD: sdk-and-website/config-layering.md §3.1
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { resolveConfigSources, activeProjectConfigPath, } from '../lib/config.js';
|
|
8
|
+
const SOURCE_LABEL = {
|
|
9
|
+
env: 'env 變數',
|
|
10
|
+
project: '專案層 .arcrun.yaml',
|
|
11
|
+
global: '全域 ~/.arcrun/config.yaml',
|
|
12
|
+
default: '預設值',
|
|
13
|
+
};
|
|
14
|
+
/** 敏感欄位只印前綴,避免把 token 完整印到終端 / log。*/
|
|
15
|
+
const SENSITIVE = new Set(['api_key', 'encryption_key', 'cf_api_token']);
|
|
16
|
+
function mask(field, value) {
|
|
17
|
+
if (SENSITIVE.has(field) && value.length > 8)
|
|
18
|
+
return `${value.slice(0, 8)}…`;
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
export async function cmdConfig(_options) {
|
|
22
|
+
const rows = resolveConfigSources();
|
|
23
|
+
const projectPath = activeProjectConfigPath();
|
|
24
|
+
console.log(chalk.bold('\n arcrun 目前生效的設定\n'));
|
|
25
|
+
if (projectPath) {
|
|
26
|
+
console.log(chalk.gray(` 專案層設定:${projectPath}(覆蓋全域)`));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(chalk.gray(' 專案層設定:無(此資料夾未放 .arcrun.yaml,使用全域)'));
|
|
30
|
+
}
|
|
31
|
+
console.log('');
|
|
32
|
+
const fieldWidth = Math.max(...rows.map(r => r.field.length), 4);
|
|
33
|
+
for (const { field, value, source } of rows) {
|
|
34
|
+
const name = field.padEnd(fieldWidth);
|
|
35
|
+
console.log(` ${chalk.cyan(name)} ${mask(field, value)} ${chalk.gray(`← ${SOURCE_LABEL[source]}`)}`);
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.gray('\n 優先序:env 變數 > 專案層 .arcrun.yaml > 全域 ~/.arcrun/config.yaml\n'));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,YAAY,GAAiC;IACjD,GAAG,EAAE,QAAQ;IACb,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,0BAA0B;IAClC,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,sCAAsC;AACtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;AAEzE,SAAS,IAAI,CAAC,KAAa,EAAE,KAAa;IACxC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;IAC7E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA6B;IAC3D,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEhD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC,CAAC;AAC5F,CAAC"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface InitOptions {
|
|
2
2
|
local?: boolean;
|
|
3
3
|
selfHosted?: boolean;
|
|
4
|
-
|
|
4
|
+
accountId?: string;
|
|
5
|
+
apiToken?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function cmdInit(options: InitOptions): Promise<void>;
|
|
5
8
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -8,6 +8,10 @@ import { writeFileSync, existsSync, readFileSync, appendFileSync } from 'node:fs
|
|
|
8
8
|
import { join } from 'node:path';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import { saveConfig } from '../lib/config.js';
|
|
11
|
+
import { CfAccountClient } from '../lib/cf-api.js';
|
|
12
|
+
import { REQUIRED_KV_NAMESPACES, SECRET_TARGET_WORKERS, wranglerAvailable, downloadAndDeploy, } from '../lib/deploy.js';
|
|
13
|
+
import { cmdInstallHarness } from './install-harness.js';
|
|
14
|
+
import { cmdMcpSetup } from './mcp-setup.js';
|
|
11
15
|
const ARCRUN_REGISTER_URL = 'https://cypher.arcrun.dev/register';
|
|
12
16
|
async function prompt(rl, question) {
|
|
13
17
|
const answer = await rl.question(chalk.cyan(`? ${question}: `));
|
|
@@ -21,7 +25,7 @@ export async function cmdInit(options) {
|
|
|
21
25
|
await initLocal();
|
|
22
26
|
}
|
|
23
27
|
else if (options.selfHosted) {
|
|
24
|
-
await initSelfHosted(rl);
|
|
28
|
+
await initSelfHosted(rl, options);
|
|
25
29
|
}
|
|
26
30
|
else {
|
|
27
31
|
await initStandard(rl);
|
|
@@ -30,6 +34,22 @@ export async function cmdInit(options) {
|
|
|
30
34
|
finally {
|
|
31
35
|
rl.close();
|
|
32
36
|
}
|
|
37
|
+
// init 末尾順便裝 CC harness 進當前專案(SDD user-cc-harness §2:init 裝 + 可單獨裝)。
|
|
38
|
+
// 失敗不影響 init 本身(harness 是加分,可事後 acr install-harness 補)。
|
|
39
|
+
try {
|
|
40
|
+
await cmdInstallHarness();
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
console.log(chalk.gray(` (harness 安裝略過:${e instanceof Error ? e.message : e};可稍後跑 acr install-harness)`));
|
|
44
|
+
}
|
|
45
|
+
// 順便寫專案 .mcp.json,讓 Claude Code 連對的 MCP(依 config 的 mcp_url,SDD mcp-account-source.md)。
|
|
46
|
+
// 失敗不影響 init(可事後 acr mcp-setup 補)。
|
|
47
|
+
try {
|
|
48
|
+
cmdMcpSetup();
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.log(chalk.gray(` (.mcp.json 略過:${e instanceof Error ? e.message : e};可稍後跑 acr mcp-setup)`));
|
|
52
|
+
}
|
|
33
53
|
}
|
|
34
54
|
async function initLocal() {
|
|
35
55
|
console.log(chalk.gray(' Local 模式:不需要 Cloudflare 帳號,workflow 由 arcrun.dev 雲端引擎執行\n'));
|
|
@@ -87,28 +107,131 @@ async function initStandard(rl) {
|
|
|
87
107
|
console.log(chalk.cyan(' acr creds push credentials.yaml') + ' # 上傳加密 credentials');
|
|
88
108
|
console.log(chalk.cyan(' acr push workflow.yaml') + ' # 部署 workflow 並取得 Webhook URL\n');
|
|
89
109
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Self-hosted installer:用戶只提供 CF Account ID + API Token,其餘自動。
|
|
112
|
+
* 驗 token → 建 KV(冪等,數量見 REQUIRED_KV_NAMESPACES)→ 查 subdomain → 下載 release 部署 Worker
|
|
113
|
+
* → seed auth+api recipe → 寫 config → 印手動 secret 提示。
|
|
114
|
+
* SDD:.agents/specs/arcrun/sdk-and-website/self-hosted-init.md
|
|
115
|
+
*/
|
|
116
|
+
async function initSelfHosted(rl, options) {
|
|
117
|
+
console.log(chalk.gray(' Self-hosted 模式:自動部署整套 arcrun 到你的 Cloudflare 帳號\n'));
|
|
118
|
+
console.log(chalk.gray(' 你只需提供 CF Account ID + API Token,其餘 CLI 自動完成。\n'));
|
|
119
|
+
// 前置:wrangler(CF CLI)
|
|
120
|
+
if (!wranglerAvailable()) {
|
|
121
|
+
console.log(chalk.yellow(' ✗ 找不到 wrangler(Cloudflare CLI)。'));
|
|
122
|
+
console.log(chalk.yellow(' 請先安裝:npm i -g wrangler,然後重新執行 acr init --self-hosted\n'));
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
// account-id / api-token 取得順序:flag > env(CLOUDFLARE_*)> 互動問答。
|
|
126
|
+
// 解壓測 #7:AI/CI 可非互動完成。帳號設定值非風險確認(mindset §7),flag/env 合法。
|
|
127
|
+
// SDD: sdk-and-website/config-layering.md §2.3
|
|
128
|
+
const accountId = options.accountId ?? process.env.CLOUDFLARE_ACCOUNT_ID ?? (await prompt(rl, '你的 Cloudflare Account ID'));
|
|
129
|
+
const cfApiToken = options.apiToken ?? process.env.CLOUDFLARE_API_TOKEN
|
|
130
|
+
?? (await prompt(rl, 'CF API Token(需 Workers Scripts Edit + Workers KV Storage Edit)'));
|
|
131
|
+
if (!accountId || !cfApiToken) {
|
|
132
|
+
console.log(chalk.yellow('\n ✗ 缺少 Account ID 或 API Token。'));
|
|
133
|
+
console.log(chalk.yellow(' 非互動用法:acr init --self-hosted --account-id <id> --api-token <token>'));
|
|
134
|
+
console.log(chalk.yellow(' 或設環境變數 CLOUDFLARE_ACCOUNT_ID / CLOUDFLARE_API_TOKEN\n'));
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
const cf = new CfAccountClient(accountId, cfApiToken);
|
|
138
|
+
// 1. 驗 token / account 可達
|
|
139
|
+
process.stdout.write(chalk.gray('\n → 驗證 Cloudflare 憑證...'));
|
|
140
|
+
try {
|
|
141
|
+
await cf.verifyAccess();
|
|
142
|
+
console.log(chalk.green(' ✓'));
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
console.log(chalk.yellow(` ✗ ${e instanceof Error ? e.message : e}`));
|
|
146
|
+
console.log(chalk.yellow(' 請確認 Account ID 與 API Token(含權限)正確後重試\n'));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
// 2. 建 KV namespace(冪等)
|
|
150
|
+
// 不建 R2:R2 是 dead storage(registry-canon Phase 1.5),且 CF R2 首次啟用強制綁信用卡,
|
|
151
|
+
// 違背 arcrun「開源免費自架,Workers + KV 免費額度即可運行」核心理念(壓測 2026-06-04 #3)。
|
|
152
|
+
const kvNamespaceIds = {};
|
|
153
|
+
try {
|
|
154
|
+
const existing = await cf.listKvNamespaces();
|
|
155
|
+
for (const title of REQUIRED_KV_NAMESPACES) {
|
|
156
|
+
process.stdout.write(chalk.gray(` → KV ${title}...`));
|
|
157
|
+
const id = await cf.ensureKvNamespace(title, existing);
|
|
158
|
+
kvNamespaceIds[title] = id;
|
|
159
|
+
console.log(chalk.green(' ✓'));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
console.log(chalk.yellow(`\n ✗ 建立資源失敗:${e instanceof Error ? e.message : e}\n`));
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
// 3. 查 workers.dev subdomain(cypher-executor WORKER_SUBDOMAIN 用)
|
|
167
|
+
let workerSubdomain = '';
|
|
168
|
+
try {
|
|
169
|
+
workerSubdomain = await cf.getWorkersSubdomain();
|
|
170
|
+
console.log(chalk.gray(` → workers.dev subdomain: ${workerSubdomain}`));
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
console.log(chalk.yellow(` ⚠ 查 subdomain 失敗(${e instanceof Error ? e.message : e}),稍後可手動補`));
|
|
174
|
+
}
|
|
175
|
+
// 4. 下載 repo 部署物(含預編譯 wasm)+ 注入 KV id + wrangler deploy 全部 Worker
|
|
176
|
+
console.log(chalk.gray('\n → 下載部署物 + 部署 Worker(從 GitHub 拉預編譯 wasm,用你的 CF token 部署)...'));
|
|
177
|
+
const deployCtx = { accountId, apiToken: cfApiToken, workerSubdomain, kvNamespaceIds };
|
|
178
|
+
const deploy = await downloadAndDeploy(deployCtx);
|
|
179
|
+
const cypherUrl = deploy.cypherExecutorUrl
|
|
180
|
+
?? (workerSubdomain ? `https://arcrun-cypher-executor.${workerSubdomain}.workers.dev` : '');
|
|
181
|
+
// 誠實回報部署結果;但**不**用「全部成功」字串 gate 後續 seed(壓測 §4.1:
|
|
182
|
+
// registry 一個無關 worker 失敗就連坐讓 seed 永遠被跳過)。seed 只看 cypher-executor 是否可達。
|
|
183
|
+
const deployFullyOk = /全部成功/.test(deploy.message);
|
|
184
|
+
console.log(deployFullyOk ? chalk.green(` ✓ ${deploy.message}`) : chalk.yellow(` ⚠ ${deploy.message}`));
|
|
185
|
+
// 5. 寫 config(資源資訊存好,供後續 acr push / update / seed)
|
|
98
186
|
const config = {
|
|
99
187
|
mode: 'self-hosted',
|
|
100
188
|
cloudflare_account_id: accountId,
|
|
101
|
-
cypher_executor_url: cypherUrl,
|
|
102
|
-
webhooks_kv_namespace_id: webhooksKvId,
|
|
103
|
-
credentials_kv_namespace_id: credentialsKvId,
|
|
104
|
-
wasm_bucket: wasmBucket,
|
|
105
189
|
cf_api_token: cfApiToken,
|
|
190
|
+
cypher_executor_url: cypherUrl,
|
|
191
|
+
webhooks_kv_namespace_id: kvNamespaceIds['WEBHOOKS'],
|
|
192
|
+
credentials_kv_namespace_id: kvNamespaceIds['CREDENTIALS_KV'],
|
|
106
193
|
multi_tenant: false,
|
|
107
194
|
};
|
|
108
195
|
saveConfig(config);
|
|
109
196
|
createCredentialsYamlIfMissing();
|
|
110
|
-
|
|
111
|
-
|
|
197
|
+
// 6. seed recipe(薄殼:呼叫 API 的 /init/seed 一次,由 API 灌 API recipe + auth recipe)。
|
|
198
|
+
// 只要 cypher-executor 可達就 seed——不被無關 worker(registry)的失敗連坐(壓測 §4.1)。
|
|
199
|
+
if (cypherUrl) {
|
|
200
|
+
await callSeedEndpoint(cypherUrl);
|
|
201
|
+
}
|
|
202
|
+
// 結果回報(誠實:部分失敗時明說,不假綠 — mindset §7)
|
|
203
|
+
console.log(chalk.green(`\n ✓ Cloudflare 資源就緒(${REQUIRED_KV_NAMESPACES.length} KV,免費額度即可,無需綁卡)`));
|
|
204
|
+
console.log(chalk.green(' ✓ 設定寫入 ~/.arcrun/config.yaml'));
|
|
205
|
+
console.log(chalk.green(' ✓ 建立 credentials.yaml'));
|
|
206
|
+
// 手動 secret 提示(secret 不進自動化,rule 05)
|
|
207
|
+
console.log(chalk.bold('\n 下一步(手動設定 runtime secret):'));
|
|
208
|
+
for (const w of SECRET_TARGET_WORKERS) {
|
|
209
|
+
console.log(chalk.cyan(` wrangler secret put ENCRYPTION_KEY --name ${w}`));
|
|
210
|
+
}
|
|
211
|
+
console.log(chalk.gray(' 三個 Worker 共用同一把 ENCRYPTION_KEY(256-bit hex)。'));
|
|
212
|
+
console.log(chalk.gray(' 生成:node -e "console.log(require(\'crypto\').randomBytes(32).toString(\'hex\'))"\n'));
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* 薄殼:呼叫 API 的 /init/seed 一次(rule 07)。
|
|
216
|
+
* seed 的編排 + 種子資料全在 cypher-executor(routes/init-seed.ts),CLI 不自己迴圈 POST。
|
|
217
|
+
* 之前 seedApiRecipes 在 CLI 迴圈 POST + deployFullyOk gate 是壓測 §4.1 的反例,已移除。
|
|
218
|
+
*/
|
|
219
|
+
async function callSeedEndpoint(cypherUrl) {
|
|
220
|
+
process.stdout.write(chalk.gray(' → seed recipe(API recipe + auth recipe,由 API 灌入)...'));
|
|
221
|
+
try {
|
|
222
|
+
const res = await fetch(`${cypherUrl}/init/seed`, { method: 'POST' });
|
|
223
|
+
const body = await res.json().catch(() => null);
|
|
224
|
+
if (res.ok && body?.success) {
|
|
225
|
+
console.log(chalk.green(` ✓ ${body.message ?? ''}`));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// 誠實:不假綠。seed 沒全成就明說,提示 acr update 可重跑(冪等)。
|
|
229
|
+
console.log(chalk.yellow(` ⚠ ${body?.message ?? `HTTP ${res.status}`}(可 acr update 重跑,seed 冪等)`));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
console.log(chalk.yellow(` ⚠ seed 端點呼叫失敗(${e instanceof Error ? e.message : e});cypher 穩定後 acr update 重跑`));
|
|
234
|
+
}
|
|
112
235
|
}
|
|
113
236
|
function createHelloYamlIfMissing() {
|
|
114
237
|
const helloPath = join(process.cwd(), 'hello.yaml');
|
|
@@ -135,13 +258,18 @@ function createCredentialsYamlIfMissing() {
|
|
|
135
258
|
'# google_oauth: "your-google-oauth-token"\n' +
|
|
136
259
|
'# line_token: "your-line-notify-token"\n', 'utf8');
|
|
137
260
|
}
|
|
138
|
-
// 確保 .gitignore 排除 credentials.yaml
|
|
261
|
+
// 確保 .gitignore 排除 credentials.yaml + 專案層 .arcrun.yaml(可能含 cf_api_token)
|
|
262
|
+
// 壓測 §1.2 安全附帶發現:憑證進版控 = 帳號控制權外洩。
|
|
139
263
|
const gitignorePath = join(process.cwd(), '.gitignore');
|
|
140
264
|
if (existsSync(gitignorePath)) {
|
|
141
265
|
const content = readFileSync(gitignorePath, 'utf8');
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
266
|
+
const toAdd = [];
|
|
267
|
+
if (!content.includes('credentials.yaml'))
|
|
268
|
+
toAdd.push('credentials.yaml');
|
|
269
|
+
if (!content.includes('.arcrun.yaml'))
|
|
270
|
+
toAdd.push('.arcrun.yaml');
|
|
271
|
+
if (toAdd.length > 0)
|
|
272
|
+
appendFileSync(gitignorePath, '\n' + toAdd.join('\n') + '\n');
|
|
145
273
|
}
|
|
146
274
|
}
|
|
147
275
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-harness.d.ts","sourceRoot":"","sources":["../../src/commands/install-harness.ts"],"names":[],"mappings":"AA6BA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCvD"}
|