@numa-tech/numa 1.14.7 → 1.14.9

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 (38) hide show
  1. package/README.md +20 -29
  2. package/dist/chatgpt-desktop.d.ts +4 -29
  3. package/dist/chatgpt-desktop.js +18 -376
  4. package/dist/chatgpt-desktop.js.map +1 -1
  5. package/dist/cli.js +20 -7
  6. package/dist/cli.js.map +1 -1
  7. package/dist/codex-module.js +2 -6
  8. package/dist/codex-module.js.map +1 -1
  9. package/dist/command-catalog.js +126 -6
  10. package/dist/command-catalog.js.map +1 -1
  11. package/dist/integration-bootstrap/client.d.ts +31 -4
  12. package/dist/integration-bootstrap/client.js +161 -35
  13. package/dist/integration-bootstrap/client.js.map +1 -1
  14. package/dist/integration-bootstrap/commands.d.ts +28 -5
  15. package/dist/integration-bootstrap/commands.js +399 -47
  16. package/dist/integration-bootstrap/commands.js.map +1 -1
  17. package/dist/integration-bootstrap/schemas.d.ts +408 -43
  18. package/dist/integration-bootstrap/schemas.js +373 -93
  19. package/dist/integration-bootstrap/schemas.js.map +1 -1
  20. package/dist/teams/client.d.ts +119 -0
  21. package/dist/teams/client.js +177 -0
  22. package/dist/teams/client.js.map +1 -0
  23. package/dist/teams/commands.d.ts +6 -0
  24. package/dist/teams/commands.js +192 -0
  25. package/dist/teams/commands.js.map +1 -0
  26. package/dist/teams/errors.d.ts +10 -0
  27. package/dist/teams/errors.js +56 -0
  28. package/dist/teams/errors.js.map +1 -0
  29. package/dist/teams/schemas.d.ts +171 -0
  30. package/dist/teams/schemas.js +81 -0
  31. package/dist/teams/schemas.js.map +1 -0
  32. package/package.json +4 -4
  33. package/skills/numa-cli/SKILL.md +2 -1
  34. package/skills/numa-cli/references/pipeline-release.md +2 -0
  35. package/skills/numa-local-flux-deploy/SKILL.md +24 -0
  36. package/skills/numa-local-flux-deploy/agents/openai.yaml +4 -0
  37. package/skills/numa-local-flux-deploy/evals/evals.json +35 -0
  38. package/skills/numa-local-flux-deploy/references/local-flux-release.md +172 -0
@@ -4,8 +4,9 @@ import open from "open";
4
4
  import { loadAppConfig } from "../app-config.js";
5
5
  import { loadConfig } from "../config.js";
6
6
  import { PipelineError, sanitizePipelineOutput } from "../pipeline/errors.js";
7
- import { IntegrationBootstrapClient, integrationBootstrapIdempotencyKey } from "./client.js";
8
- const TERMINAL = new Set(["SUCCEEDED", "FAILED", "EXPIRED"]);
7
+ import { IntegrationBootstrapClient, integrationBootstrapClientRequestId, integrationBootstrapIdempotencyKey, integrationBootstrapRunNo } from "./client.js";
8
+ const PLAN_TERMINAL = new Set(["SUCCEEDED", "FAILED", "EXPIRED"]);
9
+ const ACTION_TERMINAL = new Set(["UNKNOWN", "SUCCEEDED", "FAILED", "EXPIRED"]);
9
10
  function snake(key) {
10
11
  return key.replace(/([a-z0-9])([A-Z])/gu, "$1_$2").toLowerCase();
11
12
  }
@@ -43,44 +44,302 @@ function planLine(plan) {
43
44
  function sessionLine(session) {
44
45
  if (session.plan != null)
45
46
  return planLine(session.plan);
46
- const error = session.errorCode == null
47
- ? ""
48
- : `\n${session.errorCode}: ${session.errorSummary ?? "-"}`;
47
+ const error = session.errorCode == null ? "" : `\n${session.errorCode}: ${session.errorSummary ?? "-"}`;
49
48
  return `${session.sessionNo}\t${session.status}${error}`;
50
49
  }
51
- function sessionSucceeded(session) {
52
- return session.status === "SUCCEEDED" && session.plan?.state === "READY";
50
+ function runLine(run) {
51
+ return `${run.runNo}\t${run.state}\tv${run.version}\t${run.step}\t${run.disposition ?? "-"}`;
53
52
  }
54
- export async function waitForIntegrationBootstrapPlan(client, started, sleep = (milliseconds) => delay(milliseconds)) {
55
- let deadline = Date.parse(started.expiresAt) + 15_000;
53
+ function actionLine(action) {
54
+ return `${action.actionNo}\t${action.kind}\t${action.state}\t${action.disposition ?? "-"}`;
55
+ }
56
+ function startMayHaveCommitted(error) {
57
+ return error instanceof PipelineError
58
+ && (error.code === "INTEGRATION_BOOTSTRAP_START_RESULT_UNKNOWN"
59
+ || error.code === "INTEGRATION_BOOTSTRAP_CONFLICT");
60
+ }
61
+ function unknown(message, error) {
62
+ return new PipelineError(message, "INTEGRATION_BOOTSTRAP_RESULT_UNKNOWN", error instanceof PipelineError ? error.status : undefined, error instanceof PipelineError ? error.requestId : undefined);
63
+ }
64
+ function identityMismatch(message) {
65
+ return new PipelineError(message, "INTEGRATION_BOOTSTRAP_IDENTITY_MISMATCH", 409);
66
+ }
67
+ function expectedVersion(value) {
68
+ if (!/^(?:0|[1-9][0-9]*)$/u.test(value)) {
69
+ throw new PipelineError("expected-run-version must be a canonical non-negative 32-bit integer.", "INTEGRATION_BOOTSTRAP_INPUT_INVALID");
70
+ }
71
+ const parsed = Number(value);
72
+ if (!Number.isSafeInteger(parsed) || parsed < 0 || parsed > 2_147_483_647) {
73
+ throw new PipelineError("expected-run-version must be a non-negative 32-bit integer.", "INTEGRATION_BOOTSTRAP_INPUT_INVALID");
74
+ }
75
+ return parsed;
76
+ }
77
+ function requireConfirmation(value, action) {
78
+ if (!value) {
79
+ throw new PipelineError(`${action} requires --yes.`, "INTEGRATION_BOOTSTRAP_CONFIRMATION_REQUIRED");
80
+ }
81
+ }
82
+ async function openAuthorization(url, label, openBrowser, notify) {
83
+ notify(`正在打开一次性 Keycloak 管理员授权(${label})…\n`);
84
+ try {
85
+ await openBrowser(url);
86
+ }
87
+ catch {
88
+ notify(`无法自动打开浏览器,请手动打开:\n${url}\n`);
89
+ }
90
+ }
91
+ function deadline(expiresAt) {
92
+ return Date.parse(expiresAt) + 15_000;
93
+ }
94
+ async function pollPlan(api, sessionNo, expiresAt, sleep) {
95
+ let expires = deadline(expiresAt);
56
96
  for (;;) {
57
- const session = await client.getPlanSession(started.sessionNo);
58
- if (TERMINAL.has(session.status))
97
+ const session = await api.getPlanSession(sessionNo);
98
+ if (PLAN_TERMINAL.has(session.status))
59
99
  return session;
60
- const serverDeadline = Date.parse(session.expiresAt) + 15_000;
61
- if (Number.isFinite(serverDeadline))
62
- deadline = Math.max(deadline, serverDeadline);
63
- if (!Number.isFinite(deadline) || Date.now() >= deadline) {
64
- throw new PipelineError("Integration bootstrap plan did not finish before its fresh authorization session expired. Rerun the same plan command with the original idempotency-key to inspect the same session.", "INTEGRATION_BOOTSTRAP_SESSION_EXPIRED", 409);
100
+ expires = Math.max(expires, deadline(session.expiresAt));
101
+ if (!Number.isFinite(expires) || Date.now() >= expires) {
102
+ throw unknown("Integration bootstrap plan authorization expired before a durable terminal result was observed.");
103
+ }
104
+ await sleep(1_000);
105
+ }
106
+ }
107
+ async function pollAction(api, actionNo, expiresAt, sleep) {
108
+ const expires = deadline(expiresAt);
109
+ for (;;) {
110
+ const action = await api.getAction(actionNo);
111
+ if (ACTION_TERMINAL.has(action.state))
112
+ return action;
113
+ if (!Number.isFinite(expires) || Date.now() >= expires) {
114
+ throw unknown("Integration bootstrap authorization expired before a durable action result was observed.");
65
115
  }
66
116
  await sleep(1_000);
67
117
  }
68
118
  }
119
+ function exactPlanSession(session, clientRequestId) {
120
+ if (session.clientRequestId !== clientRequestId) {
121
+ throw identityMismatch("Resolved integration bootstrap plan session does not match the original client-request-id.");
122
+ }
123
+ }
124
+ function exactRun(run, input) {
125
+ if (run.clientRequestId !== input.clientRequestId || run.planSessionNo !== input.planSessionNo
126
+ || run.planDigest !== input.planDigest) {
127
+ throw identityMismatch("Resolved integration bootstrap run does not match the original immutable apply request.");
128
+ }
129
+ }
130
+ function exactAction(action, runNo, kind, input) {
131
+ if (action.clientRequestId !== input.clientRequestId || action.runNo !== runNo
132
+ || action.kind !== kind || action.expectedRunVersion !== input.expectedRunVersion) {
133
+ throw identityMismatch("Resolved integration bootstrap action does not match the original immutable request.");
134
+ }
135
+ }
136
+ function isExactAction(action, runNo, kind, input) {
137
+ return action != null && action.clientRequestId === input.clientRequestId
138
+ && action.runNo === runNo && action.kind === kind
139
+ && action.expectedRunVersion === input.expectedRunVersion;
140
+ }
141
+ async function resolvePlanAfterStart(api, options, error) {
142
+ let session;
143
+ try {
144
+ session = await api.resolvePlanSession(options.clientRequestId);
145
+ }
146
+ catch (resolveError) {
147
+ throw unknown("Integration bootstrap plan result is unknown. Retry the same plan command with the original client-request-id and idempotency-key; do not choose new values.", resolveError instanceof PipelineError ? resolveError : error);
148
+ }
149
+ exactPlanSession(session, options.clientRequestId);
150
+ if (session.status !== "AWAITING_AUTHORIZATION")
151
+ return { session };
152
+ try {
153
+ return { start: await api.startPlanSession(options.clientRequestId, options.idempotencyKey) };
154
+ }
155
+ catch (replayError) {
156
+ throw unknown("The actor-scoped plan session is awaiting authorization, but its one-time URL could not be recovered. Retry the exact same plan command and keys.", replayError);
157
+ }
158
+ }
69
159
  export async function executeIntegrationBootstrapPlan(api, options, openBrowser, sleep, notify = (message) => process.stderr.write(message)) {
160
+ const normalized = {
161
+ ...options,
162
+ clientRequestId: integrationBootstrapClientRequestId(options.clientRequestId),
163
+ idempotencyKey: integrationBootstrapIdempotencyKey(options.idempotencyKey)
164
+ };
165
+ let result;
166
+ try {
167
+ result = { start: await api.startPlanSession(normalized.clientRequestId, normalized.idempotencyKey) };
168
+ }
169
+ catch (error) {
170
+ if (!startMayHaveCommitted(error))
171
+ throw error;
172
+ result = await resolvePlanAfterStart(api, normalized, error);
173
+ }
174
+ if (result.session != null) {
175
+ if (options.noOpen || PLAN_TERMINAL.has(result.session.status))
176
+ return { session: result.session };
177
+ return { session: await pollPlan(api, result.session.sessionNo, result.session.expiresAt, sleep) };
178
+ }
179
+ const started = result.start;
180
+ if (started.clientRequestId !== normalized.clientRequestId) {
181
+ throw identityMismatch("Integration bootstrap plan start does not match client-request-id.");
182
+ }
183
+ if (options.noOpen)
184
+ return { started };
185
+ await openAuthorization(started.authorizationUrl, `session ${started.sessionNo}`, openBrowser, notify);
186
+ return {
187
+ started,
188
+ session: await pollPlan(api, started.sessionNo, started.authorizationExpiresAt, sleep)
189
+ };
190
+ }
191
+ async function resolveApplyAfterStart(api, input, idempotencyKey, error) {
192
+ let run;
193
+ try {
194
+ run = await api.resolveRun(input.clientRequestId);
195
+ }
196
+ catch (resolveError) {
197
+ throw unknown("Integration bootstrap apply result is unknown. Use run resolve with the original client-request-id; never create another apply request.", resolveError instanceof PipelineError ? resolveError : error);
198
+ }
199
+ exactRun(run, input);
200
+ if (run.currentAction?.state !== "AWAITING_AUTHORIZATION")
201
+ return { run };
202
+ try {
203
+ return { start: await api.startApply(input, idempotencyKey) };
204
+ }
205
+ catch (replayError) {
206
+ throw unknown("Apply authorization URL recovery failed. Retry the exact same apply command and keys.", replayError);
207
+ }
208
+ }
209
+ export async function executeIntegrationBootstrapApply(api, options, openBrowser, sleep, notify = (message) => process.stderr.write(message)) {
210
+ requireConfirmation(options.yes, "Integration bootstrap apply");
211
+ const input = {
212
+ planSessionNo: options.sessionNo,
213
+ planDigest: options.planDigest,
214
+ clientRequestId: integrationBootstrapClientRequestId(options.clientRequestId)
215
+ };
70
216
  const key = integrationBootstrapIdempotencyKey(options.idempotencyKey);
71
- const started = await api.startPlanSession(key);
72
- if (options.noOpen && !TERMINAL.has(started.status))
217
+ const plan = await api.getPlanSession(input.planSessionNo);
218
+ let result;
219
+ const planReady = plan.status === "SUCCEEDED" && plan.plan?.state === "READY"
220
+ && plan.plan.planDigest === input.planDigest
221
+ && Date.parse(plan.plan.reviewExpiresAt) > Date.now();
222
+ if (!planReady) {
223
+ let existing;
224
+ try {
225
+ existing = await api.resolveRun(input.clientRequestId);
226
+ }
227
+ catch (error) {
228
+ if (error instanceof PipelineError && error.code === "INTEGRATION_BOOTSTRAP_NOT_FOUND") {
229
+ throw new PipelineError("Apply requires the exact unexpired READY v2 plan session and digest.", "INTEGRATION_BOOTSTRAP_PLAN_NOT_READY", 409);
230
+ }
231
+ throw unknown("The plan is no longer startable and an existing run could not be resolved safely. Use run resolve with the original client-request-id; do not POST another apply.", error);
232
+ }
233
+ exactRun(existing, input);
234
+ if (existing.currentAction?.state === "AWAITING_AUTHORIZATION") {
235
+ try {
236
+ result = { start: await api.startApply(input, key) };
237
+ }
238
+ catch (error) {
239
+ if (!startMayHaveCommitted(error))
240
+ throw error;
241
+ result = await resolveApplyAfterStart(api, input, key, error);
242
+ }
243
+ }
244
+ else {
245
+ result = { run: existing };
246
+ }
247
+ }
248
+ else {
249
+ try {
250
+ result = { start: await api.startApply(input, key) };
251
+ }
252
+ catch (error) {
253
+ if (!startMayHaveCommitted(error))
254
+ throw error;
255
+ result = await resolveApplyAfterStart(api, input, key, error);
256
+ }
257
+ }
258
+ if (result.run != null) {
259
+ const current = result.run.currentAction;
260
+ if (options.noOpen || current == null || ACTION_TERMINAL.has(current.state))
261
+ return { run: result.run };
262
+ const action = await pollAction(api, current.actionNo, current.authorizationExpiresAt, sleep);
263
+ return { action, run: await api.getRun(result.run.runNo) };
264
+ }
265
+ const started = result.start;
266
+ if (started.clientRequestId !== input.clientRequestId || started.planSessionNo !== input.planSessionNo
267
+ || started.planDigest !== input.planDigest)
268
+ throw identityMismatch("Apply start identity is inconsistent.");
269
+ if (options.noOpen)
73
270
  return { started };
74
- if (started.loginUrl != null) {
75
- notify(`正在打开一次性 Keycloak 管理员登录(session ${started.sessionNo})…\n`);
271
+ await openAuthorization(started.authorizationUrl, `action ${started.actionNo}`, openBrowser, notify);
272
+ const action = await pollAction(api, started.actionNo, started.authorizationExpiresAt, sleep);
273
+ return { started, action, run: await api.getRun(started.runNo) };
274
+ }
275
+ async function resolveActionAfterStart(api, runNo, kind, input, idempotencyKey, error) {
276
+ let action;
277
+ try {
278
+ action = await api.resolveAction(input.clientRequestId);
279
+ }
280
+ catch (resolveError) {
281
+ throw unknown(`Integration bootstrap ${kind.toLowerCase()} result is unknown. Run "numa integration bootstrap action resolve ${runNo} --client-request-id ${input.clientRequestId}"; do not replay automatically.`, resolveError instanceof PipelineError ? resolveError : error);
282
+ }
283
+ exactAction(action, runNo, kind, input);
284
+ if (action.state !== "AWAITING_AUTHORIZATION")
285
+ return { action };
286
+ try {
287
+ return { start: await api.startAction(runNo, kind, input, idempotencyKey) };
288
+ }
289
+ catch (replayError) {
290
+ throw unknown(`${kind} authorization URL recovery failed. Retry the exact same action command and keys.`, replayError);
291
+ }
292
+ }
293
+ export async function executeIntegrationBootstrapAction(api, runNo, kind, options, openBrowser, sleep, notify = (message) => process.stderr.write(message)) {
294
+ if (kind !== "RECONCILE")
295
+ requireConfirmation(options.yes, `Integration bootstrap ${kind.toLowerCase()}`);
296
+ const input = {
297
+ expectedRunVersion: expectedVersion(options.expectedRunVersion),
298
+ clientRequestId: integrationBootstrapClientRequestId(options.clientRequestId)
299
+ };
300
+ const key = integrationBootstrapIdempotencyKey(options.idempotencyKey);
301
+ const before = await api.getRun(runNo);
302
+ const existing = isExactAction(before.currentAction, before.runNo, kind, input)
303
+ && ["AWAITING_AUTHORIZATION", "AUTHORIZING", "RUNNING"].includes(before.currentAction.state)
304
+ ? before.currentAction : null;
305
+ if (existing == null && before.version !== input.expectedRunVersion) {
306
+ throw new PipelineError("Run version changed before action start.", "INTEGRATION_BOOTSTRAP_RUN_VERSION_CONFLICT", 409);
307
+ }
308
+ const allowed = kind === "RECONCILE" ? before.reconcileAllowed
309
+ : kind === "RECOVER" ? before.recoverAllowed : before.reapplyAllowed;
310
+ if (existing == null && !allowed) {
311
+ throw new PipelineError(`${kind} is not allowed by the current durable run evidence.`, "INTEGRATION_BOOTSTRAP_ACTION_NOT_ALLOWED", 409);
312
+ }
313
+ let result;
314
+ if (existing != null && existing.state !== "AWAITING_AUTHORIZATION") {
315
+ result = { action: existing };
316
+ }
317
+ else {
76
318
  try {
77
- await openBrowser(started.loginUrl);
319
+ result = { start: await api.startAction(before.runNo, kind, input, key) };
78
320
  }
79
- catch {
80
- notify(`无法自动打开浏览器,请手动打开:\n${started.loginUrl}\n`);
321
+ catch (error) {
322
+ if (!startMayHaveCommitted(error))
323
+ throw error;
324
+ result = await resolveActionAfterStart(api, before.runNo, kind, input, key, error);
81
325
  }
82
326
  }
83
- return { started, session: await waitForIntegrationBootstrapPlan(api, started, sleep) };
327
+ if (result.action != null) {
328
+ if (options.noOpen || ACTION_TERMINAL.has(result.action.state)) {
329
+ return { action: result.action, run: await api.getRun(before.runNo) };
330
+ }
331
+ const action = await pollAction(api, result.action.actionNo, result.action.authorizationExpiresAt, sleep);
332
+ return { action, run: await api.getRun(before.runNo) };
333
+ }
334
+ const started = result.start;
335
+ if (started.runNo !== before.runNo || started.kind !== kind || started.clientRequestId !== input.clientRequestId) {
336
+ throw identityMismatch("Integration bootstrap action start identity is inconsistent.");
337
+ }
338
+ if (options.noOpen)
339
+ return { started, run: await api.getRun(before.runNo) };
340
+ await openAuthorization(started.authorizationUrl, `action ${started.actionNo}`, openBrowser, notify);
341
+ const action = await pollAction(api, started.actionNo, started.authorizationExpiresAt, sleep);
342
+ return { started, action, run: await api.getRun(before.runNo) };
84
343
  }
85
344
  function addExamples(command, values, notes) {
86
345
  return command.addHelpText("after", `\n说明:\n${notes.map((value) => ` - ${value}`).join("\n")}\n\nExamples:\n${values.map((value) => ` ${value}`).join("\n")}\n`);
@@ -90,40 +349,133 @@ export function registerIntegrationBootstrapCommands(program, dependencies = {})
90
349
  ?? new IntegrationBootstrapClient(loadConfig("platform"));
91
350
  const openBrowser = dependencies.openBrowser ?? (async (url) => { await open(url); });
92
351
  const sleep = dependencies.sleep ?? ((milliseconds) => delay(milliseconds));
93
- const integration = program.command("integration")
94
- .description("审阅平台固定的外部系统集成 bootstrap 计划");
352
+ const integration = program.command("integration").description("审阅并执行平台固定的外部系统集成 bootstrap");
95
353
  const bootstrap = integration.command("bootstrap")
96
- .description("通过新鲜管理员网页登录生成只读、无密钥的集成计划")
354
+ .description("通过新鲜管理员浏览器授权生成、执行和恢复无密钥集成")
97
355
  .addHelpText("after", `
98
356
  安全边界:
99
- 仅生成 jenkins-gitops-writer 的服务端固定计划;没有 applystatusretry reconcile 命令。
100
- realm、client、role、Jenkins instance、credential 元数据均由服务端固定,CLI 不接受覆盖参数。
357
+ 所有 realmclientrole、Jenkins instance、folder credential metadata 均由服务端固定。
101
358
  CLI 不接收、读取或输出管理员 token、client secret、Jenkins password 或 Secret 响应。
102
- POST 结果未知时不得换键;逐字重跑同一 plan 命令和原 Idempotency-Key,只会恢复同一 session
359
+ 每个 POST 使用独立 clientRequestId/Idempotency-Key;结果未知只做 actor-scoped GET resolve
360
+ 只有 AWAITING_AUTHORIZATION 可用原 key/body 回放以取回同一一次性 URL,其他状态绝不自动 POST。
361
+ reconcile 经过新鲜管理员授权但对 Keycloak/Jenkins 严格零写;recover/reapply 必须显式 --yes。
103
362
  `);
104
363
  addExamples(bootstrap.command("plan")
105
- .description("新鲜登录后只读检查 Keycloak 与 Jenkins inventory,并返回可审阅摘要")
106
- .requiredOption("--idempotency-key <key>", "8-200 字符稳定键;未知结果重试必须原样复用")
107
- .option("--no-open", "不打开浏览器;返回一次性 login URL 和 sessionNo")
364
+ .description("新鲜登录后只读检查 Keycloak 与 Jenkins inventory,并返回 v2 可审阅计划")
365
+ .requiredOption("--client-request-id <key>", "8-200 字符稳定请求 ID;结果未知时原样复用")
366
+ .requiredOption("--idempotency-key <key>", "8-200 字符稳定写键;必须与本次 plan 绑定")
367
+ .option("--no-open", "不打开浏览器;返回一次性 authorization URL 或当前持久状态")
108
368
  .action(async (options, command) => {
109
- const result = await executeIntegrationBootstrapPlan(client(), { idempotencyKey: options.idempotencyKey, noOpen: options.open === false }, openBrowser, sleep);
110
- if (result.session == null) {
111
- const ok = !["FAILED", "EXPIRED"].includes(result.started.status);
112
- await output(command, { ok, integration_bootstrap_session: result.started }, `${result.started.sessionNo}\t${result.started.status}\n请在浏览器打开: ${result.started.loginUrl ?? "-"}`);
113
- if (!ok)
114
- process.exitCode = 1;
115
- return;
116
- }
117
- const ok = sessionSucceeded(result.session);
118
- await output(command, { ok, integration_bootstrap_session: result.session }, sessionLine(result.session));
369
+ const result = await executeIntegrationBootstrapPlan(client(), options, openBrowser, sleep);
370
+ const value = result.session ?? result.started;
371
+ const ok = result.session == null
372
+ ? true
373
+ : result.session.status === "SUCCEEDED" && result.session.plan?.state === "READY";
374
+ await output(command, { ok, integration_bootstrap_session: value }, result.session == null
375
+ ? `${result.started.sessionNo}\t${result.started.status}\n请在浏览器打开: ${result.started.authorizationUrl}`
376
+ : sessionLine(result.session));
119
377
  if (!ok)
120
378
  process.exitCode = 1;
121
379
  }), [
122
- "numa integration bootstrap plan --idempotency-key integration-plan-20260825-01 --json",
123
- "numa integration bootstrap plan --idempotency-key integration-plan-20260825-01 --no-open --json"
380
+ "numa integration bootstrap plan --client-request-id integration-plan-20260825-01 --idempotency-key integration-plan-write-20260825-01 --json",
381
+ "numa integration bootstrap plan --client-request-id integration-plan-20260825-01 --idempotency-key integration-plan-write-20260825-01 --no-open --json"
124
382
  ], [
125
- "每个新键创建一次新鲜 Keycloak 管理员浏览器会话;同键只恢复同一 session。",
126
- "READY/BLOCKED 均为只读计划结果;BLOCKED 以 ok=false 返回,不触发任何修复写入。"
383
+ "每个新 request/key 创建一次 v2 fresh authorization;未知结果先 GET resolve,同一 AWAITING session 才回放取 URL。",
384
+ "READY/BLOCKED 都是只读计划;BLOCKED 以 ok=false 返回,不触发 apply。"
385
+ ]);
386
+ addExamples(bootstrap.command("apply")
387
+ .description("以 exact READY v2 plan 启动一次受控 apply run")
388
+ .requiredOption("--session-no <number>", "v2 plan session number")
389
+ .requiredOption("--plan-digest <64hex>", "审阅后的 exact plan digest")
390
+ .requiredOption("--client-request-id <key>", "本次 apply 独立稳定请求 ID")
391
+ .requiredOption("--idempotency-key <key>", "本次 apply 独立稳定写键")
392
+ .option("--no-open", "不打开浏览器;返回一次性 authorization URL 或当前持久状态")
393
+ .option("--yes", "确认执行审阅过的 READY plan")
394
+ .action(async (options, command) => {
395
+ const result = await executeIntegrationBootstrapApply(client(), options, openBrowser, sleep);
396
+ const ok = result.started != null || result.run?.state === "SUCCEEDED";
397
+ await output(command, { ok, ...result }, result.action != null
398
+ ? `${actionLine(result.action)}\n${result.run == null ? "-" : runLine(result.run)}`
399
+ : result.run != null ? runLine(result.run)
400
+ : `${result.started.runNo}\t${result.started.actionState}\n请在浏览器打开: ${result.started.authorizationUrl}`);
401
+ if (!ok)
402
+ process.exitCode = 1;
403
+ }), [
404
+ "numa integration bootstrap apply --session-no ibp2_<32hex> --plan-digest <64hex> --client-request-id integration-apply-20260825-01 --idempotency-key integration-apply-write-20260825-01 --yes --json"
405
+ ], ["响应未知只按原 apply client-request-id GET run resolve;不得创建第二个 run。"]);
406
+ const run = bootstrap.command("run").description("只读查询或显式恢复 v2 apply run");
407
+ addExamples(run.command("resolve")
408
+ .description("按原 apply clientRequestId 只读恢复 actor-scoped run")
409
+ .requiredOption("--client-request-id <key>", "原 apply client request ID")
410
+ .action(async (options, command) => {
411
+ const value = await client().resolveRun(integrationBootstrapClientRequestId(options.clientRequestId));
412
+ await output(command, { ok: true, run: value }, runLine(value));
413
+ }), ["numa integration bootstrap run resolve --client-request-id integration-apply-20260825-01 --json"], [
414
+ "纯 GET、本地 durable state、actor-scoped;不会读取 Keycloak/Jenkins,也不会重放 apply。"
415
+ ]);
416
+ addExamples(run.command("get <run-no>")
417
+ .description("读取 v2 run 的本地 durable state 与安全证据")
418
+ .action(async (runNo, _options, command) => {
419
+ const value = await client().getRun(runNo);
420
+ await output(command, { ok: true, run: value }, runLine(value));
421
+ }), ["numa integration bootstrap run get ibar_<32hex> --json"], [
422
+ "纯 GET;不会进行 live reconcile,也不包含 URL、nonce、token、secret 或 error details。"
127
423
  ]);
424
+ for (const kind of ["RECONCILE", "RECOVER", "REAPPLY"]) {
425
+ const name = kind.toLowerCase();
426
+ const action = run.command(`${name} <run-no>`)
427
+ .description(kind === "RECONCILE"
428
+ ? "新鲜授权后只读核对外部状态;对 Keycloak/Jenkins 零写"
429
+ : kind === "RECOVER"
430
+ ? "仅按服务端 RECOVERABLE/PAIRING_UNVERIFIED 证据显式恢复"
431
+ : "仅按服务端 UNTOUCHED 证据显式重新执行")
432
+ .requiredOption("--expected-run-version <version>", "当前 durable run version")
433
+ .requiredOption("--client-request-id <key>", "本动作独立稳定请求 ID")
434
+ .requiredOption("--idempotency-key <key>", "本动作独立稳定写键")
435
+ .option("--no-open", "不打开浏览器;返回一次性 authorization URL 或当前持久状态");
436
+ if (kind !== "RECONCILE")
437
+ action.option("--yes", `确认显式 ${name}`);
438
+ addExamples(action.action(async (runNo, options, command) => {
439
+ const result = await executeIntegrationBootstrapAction(client(), runNo, kind, options, openBrowser, sleep);
440
+ const ok = result.started != null || result.action?.state === "SUCCEEDED";
441
+ await output(command, { ok, ...result }, result.action != null
442
+ ? `${actionLine(result.action)}\n${runLine(result.run)}`
443
+ : `${result.started.actionNo}\t${result.started.state}\n请在浏览器打开: ${result.started.authorizationUrl}`);
444
+ if (!ok)
445
+ process.exitCode = 1;
446
+ }), [
447
+ `numa integration bootstrap run ${name} ibar_<32hex> --expected-run-version <version> --client-request-id integration-${name}-20260825-01 --idempotency-key integration-${name}-write-20260825-01${kind === "RECONCILE" ? "" : " --yes"} --json`
448
+ ], [
449
+ kind === "RECONCILE"
450
+ ? "fresh browser authorization;外部系统零写,不自动 recover/reapply。"
451
+ : "必须先由 durable run evidence 明确允许;未知结果只 resolve 本动作,不自动重放。"
452
+ ]);
453
+ }
454
+ const action = bootstrap.command("action").description("只读恢复或查询 v2 authorization action");
455
+ addExamples(action.command("resolve <run-no>")
456
+ .description("按原 action clientRequestId 只读恢复 actor-scoped action,并核对所属 run")
457
+ .requiredOption("--client-request-id <key>", "原 action client request ID")
458
+ .action(async (runNo, options, command) => {
459
+ const expectedRunNo = integrationBootstrapRunNo(runNo);
460
+ const value = await client().resolveAction(integrationBootstrapClientRequestId(options.clientRequestId));
461
+ if (value.runNo !== expectedRunNo) {
462
+ throw identityMismatch("Resolved integration bootstrap action belongs to another run.");
463
+ }
464
+ await output(command, { ok: true, action: value }, actionLine(value));
465
+ }), [
466
+ "numa integration bootstrap action resolve ibar_<32hex> --client-request-id integration-reconcile-20260825-01 --json"
467
+ ], ["纯 GET、actor-scoped;不会打开授权 URL、访问外部系统或重放 action POST。"]);
468
+ addExamples(action.command("get <run-no> <action-no>")
469
+ .description("读取本地 durable action 并核对所属 run")
470
+ .action(async (runNo, actionNo, _options, command) => {
471
+ const expectedRunNo = integrationBootstrapRunNo(runNo);
472
+ const value = await client().getAction(actionNo);
473
+ if (value.runNo !== expectedRunNo) {
474
+ throw identityMismatch("Integration bootstrap action belongs to another run.");
475
+ }
476
+ await output(command, { ok: true, action: value }, actionLine(value));
477
+ }), [
478
+ "numa integration bootstrap action get ibar_<32hex> ibaa_<32hex> --json"
479
+ ], ["纯 GET durable state;不会读取 authorization URL、token、secret 或 error details。"]);
128
480
  }
129
481
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/integration-bootstrap/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/integration-bootstrap/commands.ts"],"names":[],"mappings":"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"}