arcrun 1.1.0 → 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.
Files changed (59) hide show
  1. package/dist/commands/config.d.ts +4 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +39 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/init.d.ts +5 -2
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +147 -19
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/install-harness.d.ts +2 -0
  10. package/dist/commands/install-harness.d.ts.map +1 -0
  11. package/dist/commands/install-harness.js +122 -0
  12. package/dist/commands/install-harness.js.map +1 -0
  13. package/dist/commands/mcp-setup.d.ts +12 -0
  14. package/dist/commands/mcp-setup.d.ts.map +1 -0
  15. package/dist/commands/mcp-setup.js +42 -0
  16. package/dist/commands/mcp-setup.js.map +1 -0
  17. package/dist/commands/push.d.ts.map +1 -1
  18. package/dist/commands/push.js +13 -0
  19. package/dist/commands/push.js.map +1 -1
  20. package/dist/commands/recipe.d.ts.map +1 -1
  21. package/dist/commands/recipe.js +63 -1
  22. package/dist/commands/recipe.js.map +1 -1
  23. package/dist/commands/update.d.ts +13 -0
  24. package/dist/commands/update.d.ts.map +1 -0
  25. package/dist/commands/update.js +89 -0
  26. package/dist/commands/update.js.map +1 -0
  27. package/dist/commands/validate.js +2 -2
  28. package/dist/commands/validate.js.map +1 -1
  29. package/dist/index.js +43 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/lib/api-recipe-seeds.d.ts +32 -0
  32. package/dist/lib/api-recipe-seeds.d.ts.map +1 -0
  33. package/dist/lib/api-recipe-seeds.js +108 -0
  34. package/dist/lib/api-recipe-seeds.js.map +1 -0
  35. package/dist/lib/cf-api.d.ts +22 -0
  36. package/dist/lib/cf-api.d.ts.map +1 -1
  37. package/dist/lib/cf-api.js +58 -0
  38. package/dist/lib/cf-api.js.map +1 -1
  39. package/dist/lib/config.d.ts +34 -1
  40. package/dist/lib/config.d.ts.map +1 -1
  41. package/dist/lib/config.js +123 -8
  42. package/dist/lib/config.js.map +1 -1
  43. package/dist/lib/deploy.d.ts +56 -0
  44. package/dist/lib/deploy.d.ts.map +1 -0
  45. package/dist/lib/deploy.js +239 -0
  46. package/dist/lib/deploy.js.map +1 -0
  47. package/dist/lib/exposure-warning.d.ts +25 -0
  48. package/dist/lib/exposure-warning.d.ts.map +1 -0
  49. package/dist/lib/exposure-warning.js +92 -0
  50. package/dist/lib/exposure-warning.js.map +1 -0
  51. package/dist/lib/yaml-parser.d.ts.map +1 -1
  52. package/dist/lib/yaml-parser.js +7 -1
  53. package/dist/lib/yaml-parser.js.map +1 -1
  54. package/harness/CLAUDE.block.md +15 -0
  55. package/harness/commands/arcrun.md +29 -0
  56. package/harness/hooks/arcrun-guard.sh +54 -0
  57. package/harness/settings.fragment.json +16 -0
  58. package/harness/skills/arcrun-mindset/SKILL.md +78 -0
  59. package/package.json +5 -4
@@ -0,0 +1,4 @@
1
+ export declare function cmdConfig(_options: {
2
+ where?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -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"}
@@ -1,5 +1,8 @@
1
- export declare function cmdInit(options: {
1
+ export interface InitOptions {
2
2
  local?: boolean;
3
3
  selfHosted?: boolean;
4
- }): Promise<void>;
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":"AAkBA,wBAAsB,OAAO,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/F"}
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"}
@@ -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
- async function initSelfHosted(rl) {
91
- console.log(chalk.gray(' Self-hosted 模式:自行部署所有 Worker 到你的 Cloudflare 帳號\n'));
92
- const accountId = await prompt(rl, '你的 Cloudflare Account ID');
93
- const cypherUrl = await prompt(rl, 'Cypher Executor URL(部署後的 workers.dev URL)');
94
- const webhooksKvId = await prompt(rl, 'WEBHOOKS KV Namespace ID');
95
- const credentialsKvId = await prompt(rl, 'CREDENTIALS_KV Namespace ID');
96
- const wasmBucket = await prompt(rl, 'WASM_BUCKET 名稱');
97
- const cfApiToken = await prompt(rl, 'CF API Token(KV Edit 權限)');
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
- console.log(chalk.green('\n ✓ 設定完成 ~/.arcrun/config.yaml'));
111
- console.log(chalk.green(' ✓ 建立 credentials.yaml\n'));
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
- if (!content.includes('credentials.yaml')) {
143
- appendFileSync(gitignorePath, '\ncredentials.yaml\n');
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":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAEjE,MAAM,mBAAmB,GAAG,oCAAoC,CAAC;AAEjE,KAAK,UAAU,MAAM,CAAC,EAAsC,EAAE,QAAgB;IAC5E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAkD;IAC9E,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,OAAO;KACd,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,wBAAwB,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,GAAG,0BAA0B,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,EAAsC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAEtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IAErE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAiD,CAAC;QAC7E,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QACtB,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,aAAa;KAC9B,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,8BAA8B,EAAE,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,GAAG,qBAAqB,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,GAAG,sBAAsB,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,6CAA6C,CAAC,CAAC;AACxG,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,EAAsC;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,2CAA2C,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAiB;QAC3B,IAAI,EAAE,aAAa;QACnB,qBAAqB,EAAE,SAAS;QAChC,mBAAmB,EAAE,SAAS;QAC9B,wBAAwB,EAAE,YAAY;QACtC,2BAA2B,EAAE,eAAe;QAC5C,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,UAAU;QACxB,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,8BAA8B,EAAE,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,SAAS,EACrB,iCAAiC;YACjC,uDAAuD;YACvD,eAAe;YACf,0CAA0C;YAC1C,SAAS;YACT,4CAA4C;YAC5C,WAAW;YACX,gBAAgB;YAChB,6BAA6B;YAC7B,wBAAwB,EACxB,MAAM,CACP,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EACpB,qCAAqC;YACrC,qDAAqD;YACrD,4CAA4C;YAC5C,mDAAmD;YACnD,6CAA6C;YAC7C,0CAA0C,EAC1C,MAAM,CACP,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC1C,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdInstallHarness(): Promise<void>;
2
+ //# sourceMappingURL=install-harness.d.ts.map
@@ -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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * acr install-harness — 把「用戶 CC harness」裝進當前專案。
3
+ *
4
+ * 對象:在「用 arcrun 開發」的專案裡工作的 CC + 使用者。讓使用者的 CC 自動載入 arcrun 防護:
5
+ * - CLAUDE.md 區塊(事前提醒:別自寫 Python)
6
+ * - .claude/skills/arcrun-mindset/(世界觀 + 資源去哪取)
7
+ * - .claude/commands/arcrun.md(/arcrun slash command)
8
+ * - .claude/hooks/arcrun-guard.sh + settings.json(做錯被糾正)
9
+ *
10
+ * 冪等:重裝不重複、不破壞使用者既有 CLAUDE.md / settings。
11
+ * SDD:.agents/specs/user-cc-harness/design.md §2
12
+ */
13
+ import { fileURLToPath } from 'node:url';
14
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, chmodSync, readdirSync, } from 'node:fs';
15
+ import { join, dirname } from 'node:path';
16
+ import chalk from 'chalk';
17
+ /** harness 素材根目錄(內嵌 npm 套件,SSOT=cli/harness/)。
18
+ * build 後此檔在 dist/commands/,harness/ 在套件根 → ../../harness。 */
19
+ function harnessRoot() {
20
+ const here = dirname(fileURLToPath(import.meta.url)); // .../dist/commands
21
+ return join(here, '..', '..', 'harness'); // .../harness
22
+ }
23
+ const START = '<!-- arcrun-harness:start -->';
24
+ const END = '<!-- arcrun-harness:end -->';
25
+ export async function cmdInstallHarness() {
26
+ const cwd = process.cwd();
27
+ const src = harnessRoot();
28
+ if (!existsSync(src)) {
29
+ console.error(chalk.red(`找不到 harness 素材(${src})。套件安裝可能不完整,請重裝 arcrun。`));
30
+ process.exit(1);
31
+ }
32
+ console.log(chalk.bold('\n 安裝 arcrun harness 到當前專案\n'));
33
+ // 1. CLAUDE.md:append/取代 arcrun 區塊(標記包夾,冪等)
34
+ installClaudeBlock(cwd, src);
35
+ // 2. mindset Skill
36
+ copyTree(join(src, 'skills'), join(cwd, '.claude', 'skills'));
37
+ console.log(chalk.green(' ✓ .claude/skills/arcrun-mindset/'));
38
+ // 3. /arcrun command
39
+ copyTree(join(src, 'commands'), join(cwd, '.claude', 'commands'));
40
+ console.log(chalk.green(' ✓ .claude/commands/arcrun.md'));
41
+ // 4. hook
42
+ const hookDst = join(cwd, '.claude', 'hooks', 'arcrun-guard.sh');
43
+ mkdirSync(dirname(hookDst), { recursive: true });
44
+ copyFileSync(join(src, 'hooks', 'arcrun-guard.sh'), hookDst);
45
+ chmodSync(hookDst, 0o755);
46
+ console.log(chalk.green(' ✓ .claude/hooks/arcrun-guard.sh'));
47
+ // 5. settings.json:合併 hook 註冊(不覆蓋使用者既有設定)
48
+ mergeSettings(cwd, src);
49
+ console.log(chalk.green(' ✓ .claude/settings.json(已合併 arcrun guard hook)'));
50
+ console.log(chalk.gray('\n 提示:'));
51
+ console.log(chalk.gray(' • 首次在此專案開 Claude Code 會要求「信任工作區」,按信任 hook 才生效。'));
52
+ console.log(chalk.gray(' • 之後跟 CC 說需求即可(或打 /arcrun <你的需求>)。'));
53
+ console.log(chalk.gray(' • CC 偏好 MCP?可另跑 acr update 連 arcrun MCP(MCP 對齊中,optional)。\n'));
54
+ }
55
+ /** CLAUDE.md:無→建;有 arcrun 區塊→取代;有但無區塊→append。標記包夾,冪等。 */
56
+ function installClaudeBlock(cwd, src) {
57
+ const block = readFileSync(join(src, 'CLAUDE.block.md'), 'utf8').trim();
58
+ const path = join(cwd, 'CLAUDE.md');
59
+ if (!existsSync(path)) {
60
+ writeFileSync(path, block + '\n', 'utf8');
61
+ console.log(chalk.green(' ✓ CLAUDE.md(已建立,含 arcrun 區塊)'));
62
+ return;
63
+ }
64
+ const cur = readFileSync(path, 'utf8');
65
+ if (cur.includes(START) && cur.includes(END)) {
66
+ // 取代既有區塊
67
+ const re = new RegExp(escapeRe(START) + '[\\s\\S]*?' + escapeRe(END));
68
+ writeFileSync(path, cur.replace(re, block), 'utf8');
69
+ console.log(chalk.green(' ✓ CLAUDE.md(已更新 arcrun 區塊)'));
70
+ }
71
+ else {
72
+ writeFileSync(path, cur.replace(/\s*$/, '') + '\n\n' + block + '\n', 'utf8');
73
+ console.log(chalk.green(' ✓ CLAUDE.md(已附加 arcrun 區塊,未動既有內容)'));
74
+ }
75
+ }
76
+ /** 把 settings.fragment.json 的 hook 合併進專案 settings.json(不覆蓋使用者既有 hooks/設定)。 */
77
+ function mergeSettings(cwd, src) {
78
+ const fragment = JSON.parse(readFileSync(join(src, 'settings.fragment.json'), 'utf8'));
79
+ const path = join(cwd, '.claude', 'settings.json');
80
+ mkdirSync(dirname(path), { recursive: true });
81
+ let settings = {};
82
+ if (existsSync(path)) {
83
+ try {
84
+ settings = JSON.parse(readFileSync(path, 'utf8'));
85
+ }
86
+ catch {
87
+ settings = {};
88
+ }
89
+ }
90
+ const hooks = (settings.hooks ?? {});
91
+ const fragHooks = fragment.hooks;
92
+ for (const [event, entries] of Object.entries(fragHooks)) {
93
+ const existing = Array.isArray(hooks[event]) ? hooks[event] : [];
94
+ // 去重:避免重裝重複加 arcrun-guard
95
+ const serialized = new Set(existing.map(e => JSON.stringify(e)));
96
+ for (const e of entries) {
97
+ if (!serialized.has(JSON.stringify(e)))
98
+ existing.push(e);
99
+ }
100
+ hooks[event] = existing;
101
+ }
102
+ settings.hooks = hooks;
103
+ writeFileSync(path, JSON.stringify(settings, null, 2) + '\n', 'utf8');
104
+ }
105
+ /** 遞迴複製目錄樹(覆蓋同名檔)。 */
106
+ function copyTree(srcDir, dstDir) {
107
+ if (!existsSync(srcDir))
108
+ return;
109
+ mkdirSync(dstDir, { recursive: true });
110
+ for (const name of readdirSync(srcDir, { withFileTypes: true })) {
111
+ const s = join(srcDir, name.name);
112
+ const d = join(dstDir, name.name);
113
+ if (name.isDirectory())
114
+ copyTree(s, d);
115
+ else
116
+ copyFileSync(s, d);
117
+ }
118
+ }
119
+ function escapeRe(s) {
120
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
121
+ }
122
+ //# sourceMappingURL=install-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-harness.js","sourceRoot":"","sources":["../../src/commands/install-harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * acr mcp-setup — 在目前資料夾寫 / 更新 .mcp.json,讓 Claude Code 連對的 arcrun MCP。
3
+ *
4
+ * 薄殼原則(rule 07 + SDD mcp-account-source.md):
5
+ * MCP URL 與 cypher URL 一樣,由同一份三層 config 解析(env > 專案 .arcrun.yaml > 全域)決定。
6
+ * 「切換帳號」= 在客戶資料夾跑 acr mcp-setup(讀該資料夾的 .arcrun.yaml)→ 產指向客戶 MCP 的 .mcp.json。
7
+ * 進哪個專案資料夾 → Claude Code 讀該專案 .mcp.json → 連對應 MCP(綁該帳號的 cypher)。
8
+ *
9
+ * 不重實作身份解析:呼叫 config.ts 的 getMcpUrl()(唯一解析來源)。
10
+ */
11
+ export declare function cmdMcpSetup(): void;
12
+ //# sourceMappingURL=mcp-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-setup.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,wBAAgB,WAAW,IAAI,IAAI,CA4BlC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * acr mcp-setup — 在目前資料夾寫 / 更新 .mcp.json,讓 Claude Code 連對的 arcrun MCP。
3
+ *
4
+ * 薄殼原則(rule 07 + SDD mcp-account-source.md):
5
+ * MCP URL 與 cypher URL 一樣,由同一份三層 config 解析(env > 專案 .arcrun.yaml > 全域)決定。
6
+ * 「切換帳號」= 在客戶資料夾跑 acr mcp-setup(讀該資料夾的 .arcrun.yaml)→ 產指向客戶 MCP 的 .mcp.json。
7
+ * 進哪個專案資料夾 → Claude Code 讀該專案 .mcp.json → 連對應 MCP(綁該帳號的 cypher)。
8
+ *
9
+ * 不重實作身份解析:呼叫 config.ts 的 getMcpUrl()(唯一解析來源)。
10
+ */
11
+ import chalk from 'chalk';
12
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ import { loadConfig, getMcpUrl, DEFAULT_MCP_URL } from '../lib/config.js';
15
+ const SERVER_KEY = 'arcrun';
16
+ export function cmdMcpSetup() {
17
+ const config = loadConfig();
18
+ const mcpUrl = getMcpUrl(config);
19
+ const target = join(process.cwd(), '.mcp.json');
20
+ // 讀既有 .mcp.json(保留其他 MCP server 條目,只覆寫 arcrun 這條)
21
+ let doc = {};
22
+ if (existsSync(target)) {
23
+ try {
24
+ doc = JSON.parse(readFileSync(target, 'utf8'));
25
+ }
26
+ catch {
27
+ console.log(chalk.yellow(` ⚠ 既有 .mcp.json 解析失敗,將以新內容覆寫整檔。`));
28
+ doc = {};
29
+ }
30
+ }
31
+ if (!doc.mcpServers || typeof doc.mcpServers !== 'object')
32
+ doc.mcpServers = {};
33
+ doc.mcpServers[SERVER_KEY] = { type: 'http', url: mcpUrl };
34
+ writeFileSync(target, JSON.stringify(doc, null, 2) + '\n', 'utf8');
35
+ console.log(chalk.green(`\n ✓ 已寫入 ${target}`));
36
+ console.log(chalk.gray(` arcrun MCP → ${mcpUrl}`));
37
+ if (mcpUrl === DEFAULT_MCP_URL && (!config.mcp_url || config.mcp_url.trim() === '')) {
38
+ console.log(chalk.gray(` (用平台預設;要連自己/客戶的 MCP,在 config 設 mcp_url 或 ARCRUN_MCP_URL env,再重跑)`));
39
+ }
40
+ console.log(chalk.gray(` Claude Code 進此資料夾會自動連這台 MCP。切帳號 = 在對應資料夾重跑 acr mcp-setup。\n`));
41
+ }
42
+ //# sourceMappingURL=mcp-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-setup.js","sourceRoot":"","sources":["../../src/commands/mcp-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAY1E,MAAM,UAAU,GAAG,QAAQ,CAAC;AAE5B,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAEhD,kDAAkD;IAClD,IAAI,GAAG,GAAY,EAAE,CAAC;IACtB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAY,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC9D,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;IAC/E,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAE3D,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,eAAe,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;AAC7F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAcA,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH7D"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAeA,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiI7D"}
@@ -11,6 +11,7 @@ import chalk from 'chalk';
11
11
  import ora from 'ora';
12
12
  import { loadConfig, getCypherExecutorUrl } from '../lib/config.js';
13
13
  import { loadWorkflowYaml, parseTriplets, validateRelations } from '../lib/yaml-parser.js';
14
+ import { obtainExposureConsent } from '../lib/exposure-warning.js';
14
15
  export async function cmdPush(filePath) {
15
16
  const config = loadConfig();
16
17
  if (config.mode === 'local') {
@@ -80,6 +81,17 @@ export async function cmdPush(filePath) {
80
81
  searchSpinner.fail(chalk.red(`網路錯誤:${e instanceof Error ? e.message : e}`));
81
82
  process.exit(1);
82
83
  }
84
+ // 資料外流警示:部署 webhook = 把 workflow 變對外可呼叫 endpoint(暴露面)。
85
+ // 已同意過(本機記住)→ 回非 null 自動放行;未同意/取消/非互動 → null → 中止。
86
+ // server 端獨立存法律憑證並強制(防 CLI 被繞過)。
87
+ const consent = await obtainExposureConsent({
88
+ kind: 'workflow',
89
+ resourceName: workflow.name,
90
+ destination: `${executorUrl}/webhooks/named/${workflow.name}/trigger`,
91
+ });
92
+ if (!consent) {
93
+ process.exit(1);
94
+ }
83
95
  // POST 至 /webhooks/named
84
96
  const deploySpinner = ora(`部署 "${workflow.name}" 至 ${executorUrl}`).start();
85
97
  try {
@@ -91,6 +103,7 @@ export async function cmdPush(filePath) {
91
103
  graph,
92
104
  config: workflow.config ?? {},
93
105
  description: workflow.description ?? '',
106
+ exposure_consent: consent ?? undefined,
94
107
  }),
95
108
  });
96
109
  if (!res.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,UAAU;IACV,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,QAAQ,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,kBAAkB,EAAE,MAAM,CAAC,OAAO;KACnC,CAAC;IAEF,yBAAyB;IACzB,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,gBAAgB,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA2E,CAAC;QACvG,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAkH,CAAC;QACzI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAA4C,CAAC;QAE/E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;YACzC,OAAO;gBACL,GAAG,IAAI;gBACP,WAAW,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;gBACzE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;aACvF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjF,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,IAAI,OAAO,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,iBAAiB,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;aACxC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA+D,CAAC;QAC3F,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;QAE/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/commands/recipe.ts"],"names":[],"mappings":"AAkCA,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEnE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCnD;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/D"}
1
+ {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/commands/recipe.ts"],"names":[],"mappings":"AAmCA,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFnE;AAgDD,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCnD;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/D"}