@numa-tech/numa 1.13.4 → 1.14.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 (90) hide show
  1. package/README.md +140 -26
  2. package/dist/application-onboarding/client.d.ts +1 -0
  3. package/dist/application-onboarding/commands.d.ts +2 -0
  4. package/dist/application-onboarding/commands.js +41 -16
  5. package/dist/application-onboarding/commands.js.map +1 -1
  6. package/dist/application-onboarding/errors.js +1 -1
  7. package/dist/application-onboarding/errors.js.map +1 -1
  8. package/dist/application-onboarding/schemas.d.ts +8 -0
  9. package/dist/application-onboarding/schemas.js +4 -2
  10. package/dist/application-onboarding/schemas.js.map +1 -1
  11. package/dist/application-onboarding/scm-credentials.d.ts +5 -2
  12. package/dist/application-onboarding/scm-credentials.js +64 -13
  13. package/dist/application-onboarding/scm-credentials.js.map +1 -1
  14. package/dist/cli.js +4 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/command-catalog.js +252 -15
  17. package/dist/command-catalog.js.map +1 -1
  18. package/dist/integration-bootstrap/client.d.ts +23 -0
  19. package/dist/integration-bootstrap/client.js +124 -0
  20. package/dist/integration-bootstrap/client.js.map +1 -0
  21. package/dist/integration-bootstrap/commands.d.ts +20 -0
  22. package/dist/integration-bootstrap/commands.js +129 -0
  23. package/dist/integration-bootstrap/commands.js.map +1 -0
  24. package/dist/integration-bootstrap/schemas.d.ts +422 -0
  25. package/dist/integration-bootstrap/schemas.js +216 -0
  26. package/dist/integration-bootstrap/schemas.js.map +1 -0
  27. package/dist/jenkins/commands.d.ts +10 -0
  28. package/dist/jenkins/commands.js +15 -0
  29. package/dist/jenkins/commands.js.map +1 -0
  30. package/dist/jenkins-jobs/client.d.ts +12 -12
  31. package/dist/jenkins-jobs/schemas.d.ts +96 -8
  32. package/dist/jenkins-jobs/schemas.js +2 -2
  33. package/dist/jenkins-jobs/schemas.js.map +1 -1
  34. package/dist/pipeline/client.d.ts +5 -0
  35. package/dist/pipeline/commands.js +2 -0
  36. package/dist/pipeline/commands.js.map +1 -1
  37. package/dist/pipeline/schemas.d.ts +6 -0
  38. package/dist/pipeline/schemas.js +2 -0
  39. package/dist/pipeline/schemas.js.map +1 -1
  40. package/dist/platform-build-job-replans/client.d.ts +283 -0
  41. package/dist/platform-build-job-replans/client.js +148 -0
  42. package/dist/platform-build-job-replans/client.js.map +1 -0
  43. package/dist/platform-build-job-replans/commands.d.ts +6 -0
  44. package/dist/platform-build-job-replans/commands.js +371 -0
  45. package/dist/platform-build-job-replans/commands.js.map +1 -0
  46. package/dist/platform-build-job-replans/schemas.d.ts +145 -0
  47. package/dist/platform-build-job-replans/schemas.js +150 -0
  48. package/dist/platform-build-job-replans/schemas.js.map +1 -0
  49. package/dist/platform-build-rollouts/client.d.ts +346 -0
  50. package/dist/platform-build-rollouts/client.js +153 -0
  51. package/dist/platform-build-rollouts/client.js.map +1 -0
  52. package/dist/platform-build-rollouts/commands.d.ts +98 -0
  53. package/dist/platform-build-rollouts/commands.js +465 -0
  54. package/dist/platform-build-rollouts/commands.js.map +1 -0
  55. package/dist/platform-build-rollouts/schemas.d.ts +348 -0
  56. package/dist/platform-build-rollouts/schemas.js +257 -0
  57. package/dist/platform-build-rollouts/schemas.js.map +1 -0
  58. package/dist/platform-builds/client.d.ts +147 -0
  59. package/dist/platform-builds/client.js +115 -0
  60. package/dist/platform-builds/client.js.map +1 -0
  61. package/dist/platform-builds/commands.d.ts +7 -0
  62. package/dist/platform-builds/commands.js +226 -0
  63. package/dist/platform-builds/commands.js.map +1 -0
  64. package/dist/platform-builds/schemas.d.ts +127 -0
  65. package/dist/platform-builds/schemas.js +66 -0
  66. package/dist/platform-builds/schemas.js.map +1 -0
  67. package/dist/publications/client.d.ts +30 -0
  68. package/dist/publications/client.js +6 -1
  69. package/dist/publications/client.js.map +1 -1
  70. package/dist/publications/commands.d.ts +2 -0
  71. package/dist/publications/commands.js +84 -5
  72. package/dist/publications/commands.js.map +1 -1
  73. package/dist/repositories/client.d.ts +6 -0
  74. package/dist/repositories/commands.d.ts +3 -1
  75. package/dist/repositories/commands.js +22 -8
  76. package/dist/repositories/commands.js.map +1 -1
  77. package/dist/repositories/errors.d.ts +2 -1
  78. package/dist/repositories/errors.js +4 -2
  79. package/dist/repositories/errors.js.map +1 -1
  80. package/dist/repositories/schemas.d.ts +32 -0
  81. package/dist/repositories/schemas.js +4 -0
  82. package/dist/repositories/schemas.js.map +1 -1
  83. package/package.json +4 -4
  84. package/skills/numa-create-application/SKILL.md +26 -13
  85. package/skills/numa-create-application/agents/openai.yaml +2 -2
  86. package/skills/numa-create-application/evals/evals.json +72 -12
  87. package/skills/numa-create-application/references/checklist.md +12 -5
  88. package/skills/numa-create-application/references/numa-cli.md +55 -13
  89. package/skills/numa-create-application/references/promote-workflows.md +63 -24
  90. package/skills/numa-create-application/scripts/inspect-project.mjs +1 -0
@@ -0,0 +1,371 @@
1
+ import process from "node:process";
2
+ import { createHash } from "node:crypto";
3
+ import { loadAppConfig } from "../app-config.js";
4
+ import { loadConfig } from "../config.js";
5
+ import { PipelineError, sanitizePipelineOutput } from "../pipeline/errors.js";
6
+ import { PlatformBuildJobReplanClient } from "./client.js";
7
+ import { PLATFORM_BUILD_JOB_POLICY, PlatformBuildJobTierSchema } from "./schemas.js";
8
+ const SAFE_KEY = /^[A-Za-z0-9][A-Za-z0-9._:/+-]*$/u;
9
+ const PLAN_HASH = /^[0-9a-f]{64}$/u;
10
+ function safeKey(value, label, maximum = 200) {
11
+ const trimmed = value?.trim() ?? "";
12
+ if (!trimmed || trimmed.length > maximum || !SAFE_KEY.test(trimmed)) {
13
+ throw new PipelineError(`${label} must be 1-${maximum} safe opaque characters.`, "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INPUT_INVALID");
14
+ }
15
+ return trimmed;
16
+ }
17
+ function tier(value) {
18
+ const parsed = PlatformBuildJobTierSchema.safeParse(value?.trim().toUpperCase());
19
+ if (!parsed.success) {
20
+ throw new PipelineError("tier must be develop, staging, production, or unknown.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INPUT_INVALID");
21
+ }
22
+ return parsed.data;
23
+ }
24
+ function exactPlanHash(value) {
25
+ const trimmed = value?.trim() ?? "";
26
+ if (!PLAN_HASH.test(trimmed)) {
27
+ throw new PipelineError("plan-hash must be the exact lower-case SHA-256 returned by the server.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INPUT_INVALID");
28
+ }
29
+ return trimmed;
30
+ }
31
+ function requireYes(value) {
32
+ if (!value) {
33
+ throw new PipelineError("Platform-build job mutation requires --yes after reviewing its exact scope.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_CONFIRMATION_REQUIRED");
34
+ }
35
+ }
36
+ function resultMayBeUnknown(error) {
37
+ return error instanceof TypeError
38
+ || (error instanceof PipelineError && ((error.status ?? 0) >= 500
39
+ || (error.status != null && error.status >= 200 && error.status < 300
40
+ && error.code === "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INVALID_RESPONSE")));
41
+ }
42
+ function resultUnknown(error, message) {
43
+ return new PipelineError(message, "JENKINS_PLATFORM_BUILD_JOB_REPLAN_RESULT_UNKNOWN", error instanceof PipelineError ? error.status : undefined, error instanceof PipelineError ? error.requestId : undefined);
44
+ }
45
+ function snakeCase(key) {
46
+ return key.replace(/([a-z0-9])([A-Z])/gu, "$1_$2").toLowerCase();
47
+ }
48
+ function stableOutput(value) {
49
+ const safe = sanitizePipelineOutput(value);
50
+ if (Array.isArray(safe))
51
+ return safe.map(stableOutput);
52
+ if (safe && typeof safe === "object") {
53
+ return Object.fromEntries(Object.entries(safe).map(([key, item]) => [snakeCase(key), stableOutput(item)]));
54
+ }
55
+ return safe;
56
+ }
57
+ async function jsonEnabled(command) {
58
+ return Boolean(command.optsWithGlobals().json
59
+ || (await loadAppConfig()).output === "json");
60
+ }
61
+ async function output(command, payload, textValue) {
62
+ if (await jsonEnabled(command)) {
63
+ process.stdout.write(`${JSON.stringify(stableOutput(payload), null, 2)}\n`);
64
+ }
65
+ else {
66
+ process.stdout.write(`${String(sanitizePipelineOutput(textValue))}\n`);
67
+ }
68
+ }
69
+ function examples(command, values, notes = []) {
70
+ const noteSection = notes.length
71
+ ? `\n说明:\n${notes.map((item) => ` - ${item}`).join("\n")}\n`
72
+ : "";
73
+ return command.addHelpText("after", `${noteSection}\nExamples:\n${values.map((item) => ` ${item}`).join("\n")}\n`);
74
+ }
75
+ function publicPlan(plan) {
76
+ return {
77
+ plan_no: plan.planNo,
78
+ operation: plan.operation,
79
+ state: plan.state,
80
+ plan_hash: plan.planHash,
81
+ policy_version: plan.policyVersion,
82
+ client_request_id: plan.clientRequestId,
83
+ request_digest: plan.requestDigest,
84
+ application_code: plan.applicationCode,
85
+ instance_code: plan.instanceCode,
86
+ canonical_job_id: plan.canonicalJobId,
87
+ canonical_job_full_name: plan.canonicalJobFullName,
88
+ repository_key: plan.repositoryKey,
89
+ tier: plan.tier,
90
+ observed_config_digest: plan.observedConfigDigest,
91
+ side_effects: plan.sideEffects,
92
+ warnings: plan.warnings,
93
+ blockers: plan.blockers,
94
+ expires_at: plan.expiresAt
95
+ };
96
+ }
97
+ function publicView(view) {
98
+ return {
99
+ policy_version: view.policyVersion,
100
+ plan: publicPlan(view.plan),
101
+ run: {
102
+ run_no: view.run.runNo,
103
+ plan_no: view.run.planNo,
104
+ client_request_id: view.run.clientRequestId,
105
+ request_digest: view.run.requestDigest,
106
+ state: view.run.state,
107
+ step_code: view.run.stepCode,
108
+ canonical_job_id: view.run.canonicalJobId,
109
+ canonical_job_full_name: view.run.canonicalJobFullName,
110
+ binding_id: view.run.bindingId,
111
+ observed_config_digest: view.run.observedConfigDigest,
112
+ retryable: view.run.retryable,
113
+ error_code: view.run.errorCode,
114
+ error_message: view.run.errorMessage,
115
+ accepted_at: view.run.acceptedAt,
116
+ started_at: view.run.startedAt,
117
+ completed_at: view.run.completedAt
118
+ }
119
+ };
120
+ }
121
+ function knownSuccess(view) {
122
+ return view.plan.state === "CONSUMED"
123
+ && view.run.state === "SUCCEEDED";
124
+ }
125
+ function canonicalDigest(value) {
126
+ const canonical = JSON.stringify(Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right))));
127
+ return createHash("sha256").update(canonical, "utf8").digest("hex");
128
+ }
129
+ function planRequestDigest(request) {
130
+ return canonicalDigest(request);
131
+ }
132
+ function applyRequestDigest(request) {
133
+ return canonicalDigest(request);
134
+ }
135
+ function exactResolvedPlan(candidate, expected) {
136
+ return candidate.policyVersion === PLATFORM_BUILD_JOB_POLICY
137
+ && candidate.applicationCode === expected.applicationCode
138
+ && candidate.instanceCode === expected.instanceCode
139
+ && candidate.tier === expected.tier
140
+ && candidate.clientRequestId === expected.clientRequestId
141
+ && candidate.requestDigest === planRequestDigest(expected);
142
+ }
143
+ function exactResolvedApply(candidate, expected) {
144
+ return candidate.policyVersion === PLATFORM_BUILD_JOB_POLICY
145
+ && candidate.plan.planNo === expected.planNo
146
+ && candidate.plan.planHash === expected.planHash
147
+ && candidate.plan.state === "CONSUMED"
148
+ && candidate.run.clientRequestId === expected.clientRequestId
149
+ && candidate.run.requestDigest === applyRequestDigest(expected);
150
+ }
151
+ function exactActionRecovery(baseline, candidate) {
152
+ return exactActionIdentity(baseline, candidate)
153
+ && candidate.run.state !== baseline.run.state
154
+ && ["SUCCEEDED", "FAILED"].includes(candidate.run.state);
155
+ }
156
+ function exactActionIdentity(baseline, candidate) {
157
+ return candidate.policyVersion === baseline.policyVersion
158
+ && candidate.plan.planNo === baseline.plan.planNo
159
+ && candidate.plan.planHash === baseline.plan.planHash
160
+ && candidate.plan.clientRequestId === baseline.plan.clientRequestId
161
+ && candidate.plan.requestDigest === baseline.plan.requestDigest
162
+ && candidate.plan.applicationCode === baseline.plan.applicationCode
163
+ && candidate.plan.instanceCode === baseline.plan.instanceCode
164
+ && candidate.plan.repositoryKey === baseline.plan.repositoryKey
165
+ && candidate.plan.tier === baseline.plan.tier
166
+ && candidate.run.runNo === baseline.run.runNo
167
+ && candidate.run.clientRequestId === baseline.run.clientRequestId
168
+ && candidate.run.requestDigest === baseline.run.requestDigest
169
+ && candidate.run.canonicalJobId === baseline.run.canonicalJobId
170
+ && candidate.run.canonicalJobFullName === baseline.run.canonicalJobFullName
171
+ && candidate.run.bindingId === baseline.run.bindingId
172
+ && candidate.plan.observedConfigDigest === baseline.plan.observedConfigDigest;
173
+ }
174
+ export function registerPlatformBuildJobCommands(jenkins, dependencies = {}) {
175
+ const client = () => dependencies.clientFactory?.()
176
+ ?? new PlatformBuildJobReplanClient(loadConfig());
177
+ const job = jenkins.command("platform-build-job")
178
+ .description("管理独立 Platform Delivery v2 Jenkins Job provenance replan")
179
+ .addHelpText("after", `
180
+ 安全边界:
181
+ 必须先创建并审阅不可变 existing plan,再以 exact planNo/planHash 单独 apply。
182
+ 服务端固定 USE_EXISTING、scanMode=NONE、Jenkinsfile 和 canonical repository/job/binding。
183
+ 不接受 job/repository ID、路径、scan mode、XML、Groovy、credential、env 或 build 参数。
184
+ plan/apply 写响应未知时分别只 GET plan resolve/run resolve,绝不自动重放 POST。
185
+ `);
186
+ const plan = job.command("plan").description("创建、审阅独立 v2 existing-root plan");
187
+ examples(plan.command("existing")
188
+ .description("规划为既有 canonical Multibranch root 重建 v2 provenance")
189
+ .requiredOption("--application <code>", "Application stable code")
190
+ .requiredOption("--instance <code>", "Jenkins instance stable code")
191
+ .requiredOption("--tier <tier>", "develop, staging, production, or unknown")
192
+ .requiredOption("--client-request-id <key>", "plan 稳定结果恢复 ID")
193
+ .requiredOption("--idempotency-key <key>", "plan 稳定写入幂等键")
194
+ .option("--yes", "确认只创建不可变 plan,不修改 Jenkins")
195
+ .action(async (options, command) => {
196
+ requireYes(options.yes);
197
+ const request = {
198
+ applicationCode: safeKey(options.application, "application", 80),
199
+ instanceCode: safeKey(options.instance, "instance", 80),
200
+ tier: tier(options.tier),
201
+ clientRequestId: safeKey(options.clientRequestId, "client-request-id"),
202
+ idempotencyKey: safeKey(options.idempotencyKey, "idempotency-key")
203
+ };
204
+ const replanClient = client();
205
+ let result;
206
+ let recoveredFromStatus = false;
207
+ try {
208
+ result = await replanClient.createPlan(request, request.idempotencyKey);
209
+ }
210
+ catch (error) {
211
+ if (!resultMayBeUnknown(error))
212
+ throw error;
213
+ let resolved;
214
+ try {
215
+ resolved = await replanClient.resolvePlan(request.clientRequestId);
216
+ }
217
+ catch {
218
+ throw resultUnknown(error, "Platform-build job plan result is unknown. GET plan resolve did not prove the exact request; do not replay.");
219
+ }
220
+ if (!exactResolvedPlan(resolved, request)) {
221
+ throw resultUnknown(error, "Platform-build job plan result is unknown. GET resolve returned a different immutable request; do not replay.");
222
+ }
223
+ result = resolved;
224
+ recoveredFromStatus = true;
225
+ }
226
+ if (!exactResolvedPlan(result, request)) {
227
+ throw resultUnknown(new PipelineError("Platform-build job plan response did not match the exact request.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INVALID_RESPONSE"), "Platform-build job plan result is unknown. The response did not prove the exact request; do not replay.");
228
+ }
229
+ await output(command, {
230
+ ok: result.state === "READY",
231
+ recovered_from_status: recoveredFromStatus,
232
+ plan: publicPlan(result)
233
+ }, `${result.planNo}\t${result.state}\t${result.planHash}\t${result.blockers.length} blocker(s)`);
234
+ }), [
235
+ "numa jenkins platform-build-job plan existing --application code-index --instance numa --tier production --client-request-id code-index-v2-job-plan-1 --idempotency-key code-index-v2-job-plan-write-1 --yes --json"
236
+ ]);
237
+ examples(plan.command("get <plan-no>")
238
+ .description("读取并审阅不可变 existing-root plan")
239
+ .action(async (planNo, _options, command) => {
240
+ const result = await client().getPlan(safeKey(planNo, "plan-no", 120));
241
+ await output(command, { ok: result.state === "READY", plan: publicPlan(result) }, `${result.planNo}\t${result.state}\t${result.planHash}\t${result.blockers.length} blocker(s)`);
242
+ }), ["numa jenkins platform-build-job plan get jpbplan_01 --json"]);
243
+ examples(plan.command("resolve")
244
+ .description("按原 plan clientRequestId 只读恢复不可变 plan")
245
+ .requiredOption("--client-request-id <key>", "原 plan 结果恢复 ID")
246
+ .action(async (options, command) => {
247
+ const result = await client().resolvePlan(safeKey(options.clientRequestId, "client-request-id"));
248
+ await output(command, { ok: result.state === "READY", plan: publicPlan(result) }, `${result.planNo}\t${result.state}\t${result.planHash}\t${result.blockers.length} blocker(s)`);
249
+ }), [
250
+ "numa jenkins platform-build-job plan resolve --client-request-id code-index-v2-job-plan-1 --json"
251
+ ], ["纯 GET;暂未可见时稍后使用同一 clientRequestId 重试,绝不重放 plan POST。"]);
252
+ examples(job.command("apply")
253
+ .description("应用已审阅的 exact READY plan,不修改或触发 Jenkins build")
254
+ .requiredOption("--plan-no <number>", "服务端 plan 编号")
255
+ .requiredOption("--plan-hash <64hex>", "服务端 exact plan hash")
256
+ .requiredOption("--client-request-id <key>", "apply 稳定结果恢复 ID")
257
+ .requiredOption("--idempotency-key <key>", "apply 稳定写入幂等键")
258
+ .option("--yes", "确认应用 exact plan")
259
+ .action(async (options, command) => {
260
+ requireYes(options.yes);
261
+ const request = {
262
+ planNo: safeKey(options.planNo, "plan-no", 120),
263
+ planHash: exactPlanHash(options.planHash),
264
+ clientRequestId: safeKey(options.clientRequestId, "client-request-id"),
265
+ idempotencyKey: safeKey(options.idempotencyKey, "idempotency-key")
266
+ };
267
+ const replanClient = client();
268
+ const current = await replanClient.getPlan(request.planNo);
269
+ if (current.planHash !== request.planHash) {
270
+ throw new PipelineError("plan-hash does not match the current immutable plan.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_PLAN_HASH_MISMATCH");
271
+ }
272
+ if (current.state !== "READY" || current.blockers.length > 0) {
273
+ throw new PipelineError("Platform-build job plan is not READY or contains blockers.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_PLAN_NOT_READY");
274
+ }
275
+ let result;
276
+ let recoveredFromStatus = false;
277
+ try {
278
+ result = await replanClient.apply(request, request.idempotencyKey);
279
+ }
280
+ catch (error) {
281
+ if (!resultMayBeUnknown(error))
282
+ throw error;
283
+ let resolved;
284
+ try {
285
+ resolved = await replanClient.resolve(request.clientRequestId);
286
+ }
287
+ catch {
288
+ throw resultUnknown(error, "Platform-build job apply result is unknown. GET resolve did not prove the exact request; do not replay.");
289
+ }
290
+ if (!exactResolvedApply(resolved, request)) {
291
+ throw resultUnknown(error, "Platform-build job apply result is unknown. GET resolve returned a different immutable request; do not replay.");
292
+ }
293
+ result = resolved;
294
+ recoveredFromStatus = true;
295
+ }
296
+ if (!exactResolvedApply(result, request)) {
297
+ throw resultUnknown(new PipelineError("Platform-build job apply response did not match the exact request.", "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INVALID_RESPONSE"), "Platform-build job apply result is unknown. The response did not prove the exact request; do not replay.");
298
+ }
299
+ await output(command, {
300
+ ok: knownSuccess(result),
301
+ recovered_from_status: recoveredFromStatus,
302
+ replan: publicView(result)
303
+ }, `${result.run.runNo}\t${result.run.state}\t${result.run.stepCode}`);
304
+ }), [
305
+ "numa jenkins platform-build-job apply --plan-no jpbplan_01 --plan-hash <64hex> --client-request-id code-index-v2-job-apply-1 --idempotency-key code-index-v2-job-apply-write-1 --yes --json"
306
+ ]);
307
+ examples(job.command("resolve")
308
+ .description("按原 apply clientRequestId 只读恢复 replan run")
309
+ .requiredOption("--client-request-id <key>", "原 apply 结果恢复 ID")
310
+ .action(async (options, command) => {
311
+ const result = await client().resolve(safeKey(options.clientRequestId, "client-request-id"));
312
+ await output(command, { ok: knownSuccess(result), replan: publicView(result) }, `${result.run.runNo}\t${result.run.state}\t${result.run.stepCode}`);
313
+ }), [
314
+ "numa jenkins platform-build-job resolve --client-request-id code-index-v2-job-apply-1 --json"
315
+ ]);
316
+ examples(job.command("get <run-no>")
317
+ .description("读取独立 v2 replan run")
318
+ .action(async (runNo, _options, command) => {
319
+ const result = await client().get(safeKey(runNo, "run-no", 120));
320
+ await output(command, { ok: knownSuccess(result), replan: publicView(result) }, `${result.run.runNo}\t${result.run.state}\t${result.run.stepCode}`);
321
+ }), ["numa jenkins platform-build-job get jpbrun_01 --json"]);
322
+ for (const action of ["retry", "reconcile"]) {
323
+ examples(job.command(`${action} <run-no>`)
324
+ .description(action === "retry"
325
+ ? "显式重试服务端标记可恢复的 v2 replan"
326
+ : "显式调和结果未知的 v2 replan")
327
+ .requiredOption("--idempotency-key <key>", "稳定恢复动作幂等键")
328
+ .option("--yes", "确认受控恢复动作")
329
+ .action(async (runNo, options, command) => {
330
+ requireYes(options.yes);
331
+ const stableRunNo = safeKey(runNo, "run-no", 120);
332
+ const key = safeKey(options.idempotencyKey, "idempotency-key");
333
+ const replanClient = client();
334
+ const baseline = await replanClient.get(stableRunNo);
335
+ let result;
336
+ let recoveredFromStatus = false;
337
+ try {
338
+ result = action === "retry"
339
+ ? await replanClient.retry(stableRunNo, { idempotencyKey: key }, key)
340
+ : await replanClient.reconcile(stableRunNo, { idempotencyKey: key }, key);
341
+ }
342
+ catch (error) {
343
+ if (!resultMayBeUnknown(error))
344
+ throw error;
345
+ let observed;
346
+ try {
347
+ observed = await replanClient.get(stableRunNo);
348
+ }
349
+ catch {
350
+ throw resultUnknown(error, `Platform-build job ${action} result is unknown. GET recovery failed; do not replay.`);
351
+ }
352
+ if (!exactActionRecovery(baseline, observed)) {
353
+ throw resultUnknown(error, `Platform-build job ${action} result is unknown. GET did not prove a new exact terminal state; do not replay.`);
354
+ }
355
+ result = observed;
356
+ recoveredFromStatus = true;
357
+ }
358
+ if (!exactActionIdentity(baseline, result)) {
359
+ throw resultUnknown(new PipelineError(`Platform-build job ${action} response did not match the exact run.`, "JENKINS_PLATFORM_BUILD_JOB_REPLAN_INVALID_RESPONSE"), `Platform-build job ${action} result is unknown. The response did not prove the exact run; do not replay.`);
360
+ }
361
+ await output(command, {
362
+ ok: knownSuccess(result),
363
+ recovered_from_status: recoveredFromStatus,
364
+ replan: publicView(result)
365
+ }, `${result.run.runNo}\t${result.run.state}\t${result.run.stepCode}`);
366
+ }), [
367
+ `numa jenkins platform-build-job ${action} jpbrun_01 --idempotency-key code-index-v2-${action}-1 --yes --json`
368
+ ], ["结果未知时只 GET 同一 run;没有新 exact terminal evidence 时保持 UNKNOWN。"]);
369
+ }
370
+ }
371
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/platform-build-job-replans/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { z } from "zod";
2
+ export declare const PLATFORM_BUILD_JOB_POLICY: "jenkins-job-plan/v2";
3
+ export declare const PlatformBuildJobTierSchema: z.ZodEnum<{
4
+ DEVELOP: "DEVELOP";
5
+ PRODUCTION: "PRODUCTION";
6
+ STAGING: "STAGING";
7
+ UNKNOWN: "UNKNOWN";
8
+ }>;
9
+ export declare const PlatformBuildJobPlanRequestSchema: z.ZodObject<{
10
+ applicationCode: z.ZodString;
11
+ instanceCode: z.ZodString;
12
+ tier: z.ZodEnum<{
13
+ DEVELOP: "DEVELOP";
14
+ PRODUCTION: "PRODUCTION";
15
+ STAGING: "STAGING";
16
+ UNKNOWN: "UNKNOWN";
17
+ }>;
18
+ clientRequestId: z.ZodString;
19
+ idempotencyKey: z.ZodString;
20
+ }, z.core.$strict>;
21
+ export declare const PlatformBuildJobApplyRequestSchema: z.ZodObject<{
22
+ planNo: z.ZodString;
23
+ planHash: z.ZodString;
24
+ clientRequestId: z.ZodString;
25
+ idempotencyKey: z.ZodString;
26
+ }, z.core.$strict>;
27
+ export declare const PlatformBuildJobActionRequestSchema: z.ZodObject<{
28
+ idempotencyKey: z.ZodString;
29
+ }, z.core.$strict>;
30
+ export declare const PlatformBuildJobPlanSchema: z.ZodObject<{
31
+ planNo: z.ZodString;
32
+ operation: z.ZodLiteral<"USE_EXISTING">;
33
+ state: z.ZodEnum<{
34
+ BLOCKED: "BLOCKED";
35
+ CONSUMED: "CONSUMED";
36
+ EXPIRED: "EXPIRED";
37
+ READY: "READY";
38
+ }>;
39
+ planHash: z.ZodString;
40
+ policyVersion: z.ZodLiteral<"jenkins-job-plan/v2">;
41
+ clientRequestId: z.ZodString;
42
+ requestDigest: z.ZodString;
43
+ applicationCode: z.ZodString;
44
+ instanceCode: z.ZodString;
45
+ canonicalJobId: z.ZodNumber;
46
+ canonicalJobFullName: z.ZodString;
47
+ repositoryKey: z.ZodString;
48
+ tier: z.ZodEnum<{
49
+ DEVELOP: "DEVELOP";
50
+ PRODUCTION: "PRODUCTION";
51
+ STAGING: "STAGING";
52
+ UNKNOWN: "UNKNOWN";
53
+ }>;
54
+ observedConfigDigest: z.ZodString;
55
+ sideEffects: z.ZodDefault<z.ZodArray<z.ZodString>>;
56
+ warnings: z.ZodDefault<z.ZodArray<z.ZodString>>;
57
+ blockers: z.ZodDefault<z.ZodArray<z.ZodString>>;
58
+ expiresAt: z.ZodString;
59
+ }, z.core.$strict>;
60
+ export declare const PlatformBuildJobRunSchema: z.ZodObject<{
61
+ runNo: z.ZodString;
62
+ planNo: z.ZodString;
63
+ clientRequestId: z.ZodString;
64
+ requestDigest: z.ZodString;
65
+ state: z.ZodEnum<{
66
+ ACCEPTED: "ACCEPTED";
67
+ FAILED: "FAILED";
68
+ RUNNING: "RUNNING";
69
+ SUCCEEDED: "SUCCEEDED";
70
+ UNKNOWN: "UNKNOWN";
71
+ }>;
72
+ stepCode: z.ZodString;
73
+ canonicalJobId: z.ZodNumber;
74
+ canonicalJobFullName: z.ZodString;
75
+ bindingId: z.ZodNumber;
76
+ observedConfigDigest: z.ZodNullable<z.ZodString>;
77
+ retryable: z.ZodBoolean;
78
+ errorCode: z.ZodNullable<z.ZodString>;
79
+ errorMessage: z.ZodNullable<z.ZodString>;
80
+ acceptedAt: z.ZodString;
81
+ startedAt: z.ZodNullable<z.ZodString>;
82
+ completedAt: z.ZodNullable<z.ZodString>;
83
+ }, z.core.$strict>;
84
+ export declare const PlatformBuildJobReplanSchema: z.ZodObject<{
85
+ policyVersion: z.ZodLiteral<"jenkins-job-plan/v2">;
86
+ plan: z.ZodObject<{
87
+ planNo: z.ZodString;
88
+ operation: z.ZodLiteral<"USE_EXISTING">;
89
+ state: z.ZodEnum<{
90
+ BLOCKED: "BLOCKED";
91
+ CONSUMED: "CONSUMED";
92
+ EXPIRED: "EXPIRED";
93
+ READY: "READY";
94
+ }>;
95
+ planHash: z.ZodString;
96
+ policyVersion: z.ZodLiteral<"jenkins-job-plan/v2">;
97
+ clientRequestId: z.ZodString;
98
+ requestDigest: z.ZodString;
99
+ applicationCode: z.ZodString;
100
+ instanceCode: z.ZodString;
101
+ canonicalJobId: z.ZodNumber;
102
+ canonicalJobFullName: z.ZodString;
103
+ repositoryKey: z.ZodString;
104
+ tier: z.ZodEnum<{
105
+ DEVELOP: "DEVELOP";
106
+ PRODUCTION: "PRODUCTION";
107
+ STAGING: "STAGING";
108
+ UNKNOWN: "UNKNOWN";
109
+ }>;
110
+ observedConfigDigest: z.ZodString;
111
+ sideEffects: z.ZodDefault<z.ZodArray<z.ZodString>>;
112
+ warnings: z.ZodDefault<z.ZodArray<z.ZodString>>;
113
+ blockers: z.ZodDefault<z.ZodArray<z.ZodString>>;
114
+ expiresAt: z.ZodString;
115
+ }, z.core.$strict>;
116
+ run: z.ZodObject<{
117
+ runNo: z.ZodString;
118
+ planNo: z.ZodString;
119
+ clientRequestId: z.ZodString;
120
+ requestDigest: z.ZodString;
121
+ state: z.ZodEnum<{
122
+ ACCEPTED: "ACCEPTED";
123
+ FAILED: "FAILED";
124
+ RUNNING: "RUNNING";
125
+ SUCCEEDED: "SUCCEEDED";
126
+ UNKNOWN: "UNKNOWN";
127
+ }>;
128
+ stepCode: z.ZodString;
129
+ canonicalJobId: z.ZodNumber;
130
+ canonicalJobFullName: z.ZodString;
131
+ bindingId: z.ZodNumber;
132
+ observedConfigDigest: z.ZodNullable<z.ZodString>;
133
+ retryable: z.ZodBoolean;
134
+ errorCode: z.ZodNullable<z.ZodString>;
135
+ errorMessage: z.ZodNullable<z.ZodString>;
136
+ acceptedAt: z.ZodString;
137
+ startedAt: z.ZodNullable<z.ZodString>;
138
+ completedAt: z.ZodNullable<z.ZodString>;
139
+ }, z.core.$strict>;
140
+ }, z.core.$strict>;
141
+ export type PlatformBuildJobPlanRequest = z.infer<typeof PlatformBuildJobPlanRequestSchema>;
142
+ export type PlatformBuildJobApplyRequest = z.infer<typeof PlatformBuildJobApplyRequestSchema>;
143
+ export type PlatformBuildJobActionRequest = z.infer<typeof PlatformBuildJobActionRequestSchema>;
144
+ export type PlatformBuildJobPlan = z.infer<typeof PlatformBuildJobPlanSchema>;
145
+ export type PlatformBuildJobReplan = z.infer<typeof PlatformBuildJobReplanSchema>;