fix: 收敛 PaC 自动交付提示
This commit is contained in:
@@ -33,6 +33,12 @@ import {
|
||||
type AgentRunArtifactService,
|
||||
} from "../agentrun-manifests";
|
||||
import { sha256Fingerprint } from "../platform-infra-ops-library";
|
||||
import {
|
||||
pacAutomaticDeliveryFix,
|
||||
pacReadOnlyNext,
|
||||
resolveCicdDeliveryAuthority,
|
||||
type CicdDeliveryAuthority,
|
||||
} from "../cicd-delivery-authority";
|
||||
|
||||
import type { CleanupReleasedPvOptions, CleanupRunnersOptions, CleanupRunsOptions, CleanupSessionPvcsOptions, ConfirmOptions, GitMirrorOptions, LaneConfirmOptions, RefreshOptions, SecretSyncOptions, StatusOptions } from "./options";
|
||||
import { agentRunControlPlaneStatusCommand } from "./public-exposure";
|
||||
@@ -258,11 +264,37 @@ export function positiveIntegerOption(args: string[], name: string, defaultValue
|
||||
export async function controlPlanePlan(_config: UniDeskConfig, options: StatusOptions): Promise<Record<string, unknown>> {
|
||||
const target = resolveAgentRunLaneTarget(options);
|
||||
const spec = target.spec;
|
||||
const deliveryAuthority = resolveCicdDeliveryAuthority({
|
||||
node: spec.nodeId,
|
||||
lane: spec.lane,
|
||||
sourceRepository: spec.source.repository,
|
||||
sourceBranch: spec.source.branch,
|
||||
declaredSourceAuthorityMode: spec.source.sourceAuthority?.mode ?? null,
|
||||
declaredConfigRef: target.configPath,
|
||||
});
|
||||
const statusCommand = `bun scripts/cli.ts agentrun control-plane status --node ${spec.nodeId} --lane ${spec.lane}`;
|
||||
const next = deliveryAuthority.kind === "pac-pr-merge"
|
||||
? pacReadOnlyNext(deliveryAuthority.consumer.node, deliveryAuthority.consumer.consumerId)
|
||||
: deliveryAuthority.kind === "unknown"
|
||||
? {
|
||||
status: statusCommand,
|
||||
history: `bun scripts/cli.ts platform-infra pipelines-as-code history --target ${spec.nodeId} --limit 10`,
|
||||
fixAutomaticDelivery: pacAutomaticDeliveryFix(deliveryAuthority),
|
||||
valuesPrinted: false,
|
||||
}
|
||||
: {
|
||||
status: statusCommand,
|
||||
postgresStatus: spec.database.configRef ? `bun scripts/cli.ts platform-db postgres status --config ${spec.database.configRef}` : null,
|
||||
platformMaintenanceHelp: "bun scripts/cli.ts agentrun control-plane platform-maintenance --help",
|
||||
legacyCicdHelp: "bun scripts/cli.ts agentrun control-plane legacy-cicd --help",
|
||||
valuesPrinted: false,
|
||||
};
|
||||
return {
|
||||
ok: true,
|
||||
command: "agentrun control-plane plan",
|
||||
mode: "yaml-declared-node-lane",
|
||||
configPath: target.configPath,
|
||||
deliveryAuthority,
|
||||
target: agentRunLaneSummary(spec),
|
||||
plannedChecks: [
|
||||
"source-branch-exists",
|
||||
@@ -278,12 +310,7 @@ export async function controlPlanePlan(_config: UniDeskConfig, options: StatusOp
|
||||
mutation: false,
|
||||
note: "plan/status are read-only. Long writes must use controlled AgentRun/Platform DB commands and this YAML target.",
|
||||
},
|
||||
next: {
|
||||
status: `bun scripts/cli.ts agentrun control-plane status --node ${spec.nodeId} --lane ${spec.lane}`,
|
||||
postgresStatus: spec.database.configRef ? `bun scripts/cli.ts platform-db postgres status --config ${spec.database.configRef}` : null,
|
||||
postgresApply: spec.database.configRef ? `bun scripts/cli.ts platform-db postgres apply --config ${spec.database.configRef} --confirm` : null,
|
||||
controlPlaneApply: `bun scripts/cli.ts agentrun control-plane apply --node ${spec.nodeId} --lane ${spec.lane} --dry-run`,
|
||||
},
|
||||
next,
|
||||
valuesPrinted: false,
|
||||
};
|
||||
}
|
||||
@@ -345,29 +372,18 @@ export async function status(config: UniDeskConfig, options: StatusOptions): Pro
|
||||
return await statusYamlLane(config, options, resolveAgentRunLaneTarget(options));
|
||||
}
|
||||
|
||||
function isPipelinesAsCodeMigratedLane(spec: AgentRunLaneSpec): boolean {
|
||||
return spec.source.remote.includes("gitea-http.")
|
||||
|| spec.source.remote.includes("/mirrors/")
|
||||
|| spec.gitMirror.readUrl.includes("gitea-http.")
|
||||
|| spec.gitops.repoURL.includes("gitea-http.")
|
||||
|| spec.gitMirror.readUrl.includes("/mirrors/");
|
||||
}
|
||||
|
||||
function pacStatusCommand(spec: AgentRunLaneSpec, full = false): string {
|
||||
return `bun scripts/cli.ts platform-infra pipelines-as-code status --target ${spec.nodeId} --consumer ${pacConsumerId(spec)}${full ? " --full" : ""}`;
|
||||
}
|
||||
|
||||
function pacConsumerId(spec: AgentRunLaneSpec): string {
|
||||
return `agentrun-${spec.lane.toLowerCase()}`;
|
||||
function pacStatusCommand(spec: AgentRunLaneSpec, consumerId: string, full = false): string {
|
||||
return `bun scripts/cli.ts platform-infra pipelines-as-code status --target ${spec.nodeId} --consumer ${consumerId}${full ? " --full" : ""}`;
|
||||
}
|
||||
|
||||
function giteaMirrorStatusCommand(spec: AgentRunLaneSpec): string {
|
||||
return `bun scripts/cli.ts platform-infra gitea mirror status --target ${spec.nodeId}`;
|
||||
}
|
||||
|
||||
export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options: StatusOptions, target: { configPath: string; spec: AgentRunLaneSpec }): Promise<Record<string, unknown>> {
|
||||
export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options: StatusOptions, target: { configPath: string; spec: AgentRunLaneSpec }, authority: Extract<CicdDeliveryAuthority, { kind: "pac-pr-merge" }>): Promise<Record<string, unknown>> {
|
||||
const spec = target.spec;
|
||||
const pacStatus = record(await runPlatformInfraPipelinesAsCodeCommand(config, ["status", "--target", spec.nodeId, "--consumer", pacConsumerId(spec), "--full"]));
|
||||
const consumerId = authority.consumer.consumerId;
|
||||
const pacStatus = record(await runPlatformInfraPipelinesAsCodeCommand(config, ["status", "--target", spec.nodeId, "--consumer", consumerId, "--full"]));
|
||||
const pacSummary = record(pacStatus.summary);
|
||||
const latestPipelineRun = record(pacSummary.latestPipelineRun);
|
||||
const artifact = record(pacSummary.artifact);
|
||||
@@ -412,13 +428,13 @@ export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options:
|
||||
};
|
||||
const nextAction = aligned
|
||||
? { code: "none", summary: "PaC/Gitea migrated lane aligned; no action required", command: null }
|
||||
: blockers.includes("argo-revision-stale")
|
||||
? { code: "argo-refresh", summary: "GitOps commit is published but Argo has not observed it yet", command: `bun scripts/cli.ts agentrun control-plane refresh --node ${spec.nodeId} --lane ${spec.lane} --confirm` }
|
||||
: { code: "inspect-pac-status", summary: `PaC/Gitea closeout blocked: ${blockers.join(", ")}`, command: pacStatusCommand(spec, true) };
|
||||
: { code: "inspect-automatic-delivery", summary: `PaC/Gitea automatic delivery is blocked: ${blockers.join(", ")}`, command: pacStatusCommand(spec, consumerId, true) };
|
||||
const migration = {
|
||||
migrated: true,
|
||||
sourceAuthority: "gitea-pipelines-as-code",
|
||||
triggerPath: "Gitea webhook -> Pipelines-as-Code -> Tekton -> GitOps/Argo -> k8s runtime",
|
||||
consumerId,
|
||||
configRefs: authority.consumer.configRefs,
|
||||
triggerPath: "GitHub PR merge -> GitHub webhook -> Gitea mirror/snapshot -> Gitea webhook -> Pipelines-as-Code -> Tekton -> GitOps/Argo -> k8s runtime",
|
||||
legacyGitMirrorDisposition: "migration-readonly",
|
||||
legacyTriggerCurrentDisabled: true,
|
||||
valuesPrinted: false,
|
||||
@@ -426,6 +442,7 @@ export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options:
|
||||
const summary = {
|
||||
aligned,
|
||||
runtimeAligned: runtimeAlignment.runtimeAligned,
|
||||
deliveryAuthority: authority,
|
||||
blockers,
|
||||
warnings: [],
|
||||
sourceCommit,
|
||||
@@ -486,6 +503,7 @@ export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options:
|
||||
summary,
|
||||
alignment: {
|
||||
aligned,
|
||||
deliveryAuthority: authority,
|
||||
blockers,
|
||||
warnings: [],
|
||||
sourceCommit,
|
||||
@@ -504,14 +522,15 @@ export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options:
|
||||
raw: options.raw,
|
||||
legacyGitMirror: "migration-readonly",
|
||||
fullCommand: agentRunControlPlaneStatusCommand(spec, options, true),
|
||||
pacStatusCommand: pacStatusCommand(spec, true),
|
||||
pacStatusCommand: pacStatusCommand(spec, consumerId, true),
|
||||
},
|
||||
next: {
|
||||
action: nextAction,
|
||||
pacStatus: pacStatusCommand(spec),
|
||||
statusFull: agentRunControlPlaneStatusCommand(spec, options, true),
|
||||
pacStatus: pacStatusCommand(spec, consumerId),
|
||||
pacHistory: record(pacReadOnlyNext(spec.nodeId, consumerId)).history,
|
||||
giteaMirrorStatus: giteaMirrorStatusCommand(spec),
|
||||
refresh: `bun scripts/cli.ts agentrun control-plane refresh --node ${spec.nodeId} --lane ${spec.lane} --confirm`,
|
||||
triggerCurrent: null,
|
||||
fixAutomaticDelivery: pacAutomaticDeliveryFix(authority),
|
||||
},
|
||||
valuesPrinted: false,
|
||||
};
|
||||
@@ -534,9 +553,62 @@ export async function statusPipelinesAsCodeLane(config: UniDeskConfig, options:
|
||||
return result;
|
||||
}
|
||||
|
||||
function unknownDeliveryAuthorityStatus(options: StatusOptions, target: { configPath: string; spec: AgentRunLaneSpec }, authority: Extract<CicdDeliveryAuthority, { kind: "unknown" }>): Record<string, unknown> {
|
||||
const spec = target.spec;
|
||||
const statusFull = agentRunControlPlaneStatusCommand(spec, options, true);
|
||||
const nextAction = {
|
||||
code: "delivery-authority-unknown",
|
||||
summary: "无法从 owning YAML 唯一确认 PaC 或 legacy delivery authority;已停止生成任何人工推进提示。",
|
||||
command: null,
|
||||
};
|
||||
return {
|
||||
ok: false,
|
||||
command: "agentrun control-plane status",
|
||||
mode: "delivery-authority-unknown",
|
||||
mutation: false,
|
||||
configPath: target.configPath,
|
||||
target: options.full || options.raw ? agentRunLaneSummary(spec) : compactAgentRunLaneStatusTarget(spec),
|
||||
summary: {
|
||||
aligned: false,
|
||||
runtimeAligned: false,
|
||||
blockers: ["delivery-authority-unknown"],
|
||||
warnings: [],
|
||||
deliveryAuthority: authority,
|
||||
nextAction,
|
||||
},
|
||||
alignment: {
|
||||
aligned: false,
|
||||
runtimeAligned: false,
|
||||
blockers: ["delivery-authority-unknown"],
|
||||
warnings: [],
|
||||
deliveryAuthority: authority,
|
||||
},
|
||||
disclosure: {
|
||||
output: options.full || options.raw ? "full" : "compact-summary",
|
||||
full: options.full,
|
||||
raw: options.raw,
|
||||
fullCommand: statusFull,
|
||||
},
|
||||
next: {
|
||||
statusFull,
|
||||
fixAutomaticDelivery: pacAutomaticDeliveryFix(authority),
|
||||
},
|
||||
valuesPrinted: false,
|
||||
};
|
||||
}
|
||||
|
||||
export async function statusYamlLane(config: UniDeskConfig, options: StatusOptions, target: { configPath: string; spec: AgentRunLaneSpec }): Promise<Record<string, unknown>> {
|
||||
const spec = target.spec;
|
||||
if (isPipelinesAsCodeMigratedLane(spec)) return await statusPipelinesAsCodeLane(config, options, target);
|
||||
const deliveryAuthority = resolveCicdDeliveryAuthority({
|
||||
node: spec.nodeId,
|
||||
lane: spec.lane,
|
||||
sourceRepository: spec.source.repository,
|
||||
sourceBranch: spec.source.branch,
|
||||
declaredSourceAuthorityMode: spec.source.sourceAuthority?.mode ?? null,
|
||||
declaredConfigRef: target.configPath,
|
||||
});
|
||||
if (deliveryAuthority.kind === "pac-pr-merge") return await statusPipelinesAsCodeLane(config, options, target, deliveryAuthority);
|
||||
if (deliveryAuthority.kind === "unknown") return unknownDeliveryAuthorityStatus(options, target, deliveryAuthority);
|
||||
const sourceProbe = await timedStatusStage("source", () => spec.source.statusMode === "k3s-git-mirror"
|
||||
? capture(config, spec.nodeKubeRoute, ["sh", "--", yamlLaneK3sSourceStatusScript(spec)])
|
||||
: capture(config, `${spec.nodeRoute}:${spec.source.workspace}`, ["sh", "--", yamlLaneSourceStatusScript(spec)]));
|
||||
@@ -714,6 +786,7 @@ export async function statusYamlLane(config: UniDeskConfig, options: StatusOptio
|
||||
const detailedSummary = {
|
||||
aligned,
|
||||
runtimeAligned,
|
||||
deliveryAuthority,
|
||||
ciEvidenceMissing,
|
||||
mirrorAlreadySynced,
|
||||
blockers,
|
||||
@@ -777,6 +850,7 @@ export async function statusYamlLane(config: UniDeskConfig, options: StatusOptio
|
||||
const commanderSummary = {
|
||||
aligned,
|
||||
runtimeAligned,
|
||||
deliveryAuthority,
|
||||
ciEvidenceMissing,
|
||||
mirrorAlreadySynced,
|
||||
blockers,
|
||||
@@ -803,6 +877,7 @@ export async function statusYamlLane(config: UniDeskConfig, options: StatusOptio
|
||||
alignment: {
|
||||
aligned,
|
||||
runtimeAligned,
|
||||
deliveryAuthority,
|
||||
ciEvidenceMissing,
|
||||
mirrorAlreadySynced,
|
||||
blockers,
|
||||
|
||||
@@ -32,6 +32,7 @@ import {
|
||||
type AgentRunArtifactService,
|
||||
} from "../agentrun-manifests";
|
||||
import { sha256Fingerprint } from "../platform-infra-ops-library";
|
||||
import { decideCicdDeliveryMutation, resolveCicdDeliveryAuthority } from "../cicd-delivery-authority";
|
||||
|
||||
import type { AgentRunResourceVerb, AgentRunRestCompatGroup } from "./utils";
|
||||
import { controlPlaneApply, controlPlanePlan, parseCleanupReleasedPvOptions, parseCleanupRunnersOptions, parseCleanupRunsOptions, parseCleanupSessionPvcsOptions, parseConfirmOptions, parseGitMirrorOptions, parseLaneConfirmOptions, parseRefreshOptions, parseSecretSyncOptions, status } from "./control-plane";
|
||||
@@ -68,25 +69,14 @@ export function agentRunHelp(): unknown {
|
||||
"bun scripts/cli.ts agentrun explain task",
|
||||
"bun scripts/cli.ts agentrun explain session-policy",
|
||||
"bun scripts/cli.ts agentrun control-plane plan --node NC01 --lane nc01-v02",
|
||||
"bun scripts/cli.ts agentrun control-plane apply --node NC01 --lane nc01-v02 --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane status --node NC01 --lane nc01-v02",
|
||||
"bun scripts/cli.ts agentrun control-plane secret-sync --node NC01 --lane nc01-v02 --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane secret-sync --node NC01 --lane nc01-v02 --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane secret-sync --node NC01 --lane nc01-v02 --secret-id tool-github-pr-token --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane restart --node NC01 --lane nc01-v02 --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane restart --node NC01 --lane nc01-v02 --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane trigger-current --node NC01 --lane nc01-v02 --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane trigger-current --node NC01 --lane nc01-v02 --confirm",
|
||||
"bun scripts/cli.ts platform-infra pipelines-as-code history --target NC01 --consumer agentrun-nc01-v02 --limit 10",
|
||||
"bun scripts/cli.ts agentrun control-plane platform-maintenance --help",
|
||||
"bun scripts/cli.ts agentrun control-plane legacy-cicd --help",
|
||||
"bun scripts/cli.ts agentrun control-plane status",
|
||||
"bun scripts/cli.ts agentrun control-plane status --full",
|
||||
"bun scripts/cli.ts agentrun control-plane status --pipeline-run <yaml-lane-pipelinerun>",
|
||||
"bun scripts/cli.ts agentrun control-plane status --source-commit <full-sha>",
|
||||
"bun scripts/cli.ts agentrun control-plane expose --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane expose --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane trigger-current --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane trigger-current --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane refresh --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane refresh --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane cleanup-runners --node NC01 --lane nc01-v02 --dry-run",
|
||||
"bun scripts/cli.ts agentrun control-plane cleanup-runners --node NC01 --lane nc01-v02 --confirm",
|
||||
"bun scripts/cli.ts agentrun control-plane cleanup-runs --min-age-minutes 30 --limit 200 --dry-run",
|
||||
@@ -101,12 +91,12 @@ export function agentRunHelp(): unknown {
|
||||
"bun scripts/cli.ts agentrun provider-profile validate --node NC01 --lane nc01-v02 --profile gpt.pika --wait",
|
||||
"bun scripts/cli.ts agentrun git-mirror status",
|
||||
"bun scripts/cli.ts agentrun git-mirror status --full",
|
||||
"bun scripts/cli.ts agentrun git-mirror sync --confirm",
|
||||
"bun scripts/cli.ts agentrun git-mirror flush --confirm",
|
||||
"bun scripts/cli.ts agentrun git-mirror legacy-ops --help",
|
||||
],
|
||||
resources: ["task/qt", "run", "command/cmd", "runnerjob/rjob", "session/ses", "aipodspec/aps"],
|
||||
description: "Operate AgentRun through Kubernetes-style resource verbs. Human output is compact by default; -o json|yaml returns the UniDesk render-only client schema, --raw exposes the REST envelope, and --node/--lane targets a YAML-declared runtime lane.",
|
||||
legacyCompatibility: "queue/runs/commands/runner/sessions/aipod-specs remain as compatibility groups backed by direct HTTP; new commander work should use get/describe/events/logs/result/ack/cancel/dispatch/create/apply/send. sessions turn/steer are removed; use send only.",
|
||||
cicdBoundary: "NC01 PaC consumer 仅由 GitHub PR merge 自动触发;默认帮助只给 status/history。legacy 与平台维护写入口只在显式 scoped help 中展示。",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -141,11 +131,17 @@ export async function runAgentRunCommand(config: UniDeskConfig | null, args: str
|
||||
if (action === "expose") return await exposeAgentRun(config, parseConfirmOptions(actionArgs));
|
||||
if (action === "trigger-current") {
|
||||
const options = parseTriggerOptions(actionArgs);
|
||||
const target = resolveAgentRunLaneTarget(options);
|
||||
const decision = agentRunDeliveryMutationDecision(target, "trigger-current");
|
||||
if (!decision.allowed) return decision.result;
|
||||
const result = await triggerCurrent(config, options);
|
||||
return options.full || options.raw || !isRecord(result.target) ? result : renderAgentRunControlPlaneActionSummary(result, "AGENTRUN TRIGGER CURRENT");
|
||||
}
|
||||
if (action === "refresh") {
|
||||
const options = parseRefreshOptions(actionArgs);
|
||||
const target = resolveAgentRunLaneTarget(options);
|
||||
const decision = agentRunDeliveryMutationDecision(target, "refresh");
|
||||
if (!decision.allowed) return decision.result;
|
||||
const result = await refresh(config, options);
|
||||
return options.full || options.raw ? result : renderAgentRunControlPlaneActionSummary(result, "AGENTRUN CONTROL-PLANE REFRESH");
|
||||
}
|
||||
@@ -166,7 +162,10 @@ export async function runAgentRunCommand(config: UniDeskConfig | null, args: str
|
||||
if (action === "status") return await gitMirrorStatus(config, parseGitMirrorStatusOptions(actionArgs));
|
||||
if (action === "sync" || action === "flush") {
|
||||
const options = parseGitMirrorOptions(actionArgs);
|
||||
const { spec } = resolveAgentRunLaneTarget(options);
|
||||
const target = resolveAgentRunLaneTarget(options);
|
||||
const { spec } = target;
|
||||
const decision = agentRunDeliveryMutationDecision(target, `git-mirror-${action}`);
|
||||
if (!decision.allowed) return decision.result;
|
||||
if (options.confirm && !options.wait) {
|
||||
return startAsyncAgentRunJob(
|
||||
`agentrun_${spec.lane}_git_mirror_${action}`,
|
||||
@@ -180,6 +179,29 @@ export async function runAgentRunCommand(config: UniDeskConfig | null, args: str
|
||||
return unsupported(route.canonicalArgs);
|
||||
}
|
||||
|
||||
function agentRunDeliveryMutationDecision(
|
||||
target: ReturnType<typeof resolveAgentRunLaneTarget>,
|
||||
action: "trigger-current" | "refresh" | "git-mirror-sync" | "git-mirror-flush",
|
||||
) {
|
||||
const authority = resolveCicdDeliveryAuthority({
|
||||
node: target.spec.nodeId,
|
||||
lane: target.spec.lane,
|
||||
sourceRepository: target.spec.source.repository,
|
||||
sourceBranch: target.spec.source.branch,
|
||||
declaredSourceAuthorityMode: target.spec.source.sourceAuthority?.mode ?? null,
|
||||
declaredConfigRef: target.configPath,
|
||||
});
|
||||
return decideCicdDeliveryMutation(authority, {
|
||||
command: action.startsWith("git-mirror-")
|
||||
? `agentrun git-mirror ${action.slice("git-mirror-".length)}`
|
||||
: `agentrun control-plane ${action}`,
|
||||
statusCommand: `bun scripts/cli.ts agentrun control-plane status --node ${target.spec.nodeId} --lane ${target.spec.lane}`,
|
||||
action,
|
||||
node: target.spec.nodeId,
|
||||
lane: target.spec.lane,
|
||||
});
|
||||
}
|
||||
|
||||
export function isAgentRunRestCompatGroup(group: string | undefined): group is AgentRunRestCompatGroup {
|
||||
return group === "queue" || group === "sessions" || group === "aipod-specs" || group === "aipods" || group === "runs" || group === "commands" || group === "runner";
|
||||
}
|
||||
@@ -285,32 +307,58 @@ export function agentRunHelpText(args: string[]): string {
|
||||
}
|
||||
if (verb === "explain") return agentRunExplain(kind ?? "task");
|
||||
if (verb === "control-plane") {
|
||||
if (kind === "legacy-cicd") {
|
||||
return [
|
||||
"Usage: bun scripts/cli.ts agentrun control-plane <trigger-current|refresh> --node <node> --lane <lane> [--dry-run|--confirm]",
|
||||
"",
|
||||
"Scope: explicit legacy/manual CI/CD only.",
|
||||
"The owning YAML delivery authority must resolve to legacy-manual. PaC migrated or unknown authority must fail closed and must not use these commands for delivery or recovery.",
|
||||
].join("\n");
|
||||
}
|
||||
if (kind === "platform-maintenance") {
|
||||
return [
|
||||
"Usage: bun scripts/cli.ts agentrun control-plane <apply|secret-sync|restart|expose> --node <node> --lane <lane> [--dry-run|--confirm]",
|
||||
"",
|
||||
"Scope: explicit YAML-declared platform/configuration maintenance only.",
|
||||
"These commands do not replace the PaC source delivery chain and must not be used after a source PR merge to complete or recover rollout.",
|
||||
].join("\n");
|
||||
}
|
||||
return [
|
||||
"Usage: bun scripts/cli.ts agentrun control-plane <action> [options]",
|
||||
"",
|
||||
"Actions: plan, apply, status, secret-sync, expose, trigger-current, refresh, cleanup-runners, cleanup-runs, cleanup-session-pvcs, cleanup-local-postgres, cleanup-released-pvs",
|
||||
"Default actions: plan, status, cleanup-runners, cleanup-runs, cleanup-session-pvcs, cleanup-local-postgres, cleanup-released-pvs",
|
||||
"Examples:",
|
||||
" bun scripts/cli.ts agentrun control-plane plan --node NC01 --lane nc01-v02",
|
||||
" bun scripts/cli.ts agentrun control-plane apply --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane status --node NC01 --lane nc01-v02",
|
||||
" bun scripts/cli.ts agentrun control-plane secret-sync --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane trigger-current --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts platform-infra pipelines-as-code history --target NC01 --consumer agentrun-nc01-v02 --limit 10",
|
||||
" bun scripts/cli.ts agentrun control-plane status",
|
||||
" bun scripts/cli.ts agentrun control-plane status --pipeline-run <yaml-lane-pipelinerun>",
|
||||
" bun scripts/cli.ts agentrun control-plane expose --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane trigger-current --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane cleanup-runners --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane cleanup-session-pvcs --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane cleanup-local-postgres --node NC01 --lane nc01-v02 --dry-run",
|
||||
" bun scripts/cli.ts agentrun control-plane cleanup-runs --min-age-minutes 30 --limit 200 --dry-run",
|
||||
"",
|
||||
"Scoped maintenance help:",
|
||||
" bun scripts/cli.ts agentrun control-plane platform-maintenance --help",
|
||||
" bun scripts/cli.ts agentrun control-plane legacy-cicd --help",
|
||||
"PaC migrated consumer 的唯一触发是 GitHub PR merge;自动链故障只用 status/history 调查并修 owning YAML/controller/source。",
|
||||
].join("\n");
|
||||
}
|
||||
if (verb === "provider-profile") return providerProfileHelp();
|
||||
if (verb === "git-mirror") {
|
||||
if (kind === "legacy-ops") {
|
||||
return [
|
||||
"Usage: bun scripts/cli.ts agentrun git-mirror <sync|flush> --node <node> --lane <lane> [--dry-run|--confirm] [--wait]",
|
||||
"",
|
||||
"Scope: explicit legacy/manual mirror maintenance only.",
|
||||
"The owning YAML delivery authority must resolve to legacy-manual. PaC migrated or unknown authority must fail closed.",
|
||||
].join("\n");
|
||||
}
|
||||
return [
|
||||
"Usage: bun scripts/cli.ts agentrun git-mirror <status|sync|flush> [--full|--raw|--confirm]",
|
||||
"Usage: bun scripts/cli.ts agentrun git-mirror status [--full|--raw]",
|
||||
"",
|
||||
"Confirmed sync/flush returns an async job unless --wait is set.",
|
||||
"PaC migrated consumer uses platform-infra Gitea/PaC status and never uses manual mirror sync/flush to complete delivery.",
|
||||
"Explicit legacy operations: bun scripts/cli.ts agentrun git-mirror legacy-ops --help",
|
||||
].join("\n");
|
||||
}
|
||||
if (verb !== undefined && isAgentRunRestCompatGroup(verb)) {
|
||||
|
||||
@@ -32,6 +32,7 @@ import {
|
||||
type AgentRunArtifactService,
|
||||
} from "../agentrun-manifests";
|
||||
import { sha256Fingerprint } from "../platform-infra-ops-library";
|
||||
import { pacAutomaticDeliveryFix, pacReadOnlyNext, resolveCicdDeliveryAuthority } from "../cicd-delivery-authority";
|
||||
|
||||
import type { GitMirrorStatusOptions } from "./options";
|
||||
import { readGitMirrorStatus } from "./rest-bridge";
|
||||
@@ -473,6 +474,14 @@ export function refreshYamlLaneScript(spec: AgentRunLaneSpec): string {
|
||||
export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorStatusOptions = { full: false, raw: false, node: null, lane: null }): Promise<Record<string, unknown>> {
|
||||
const target = resolveAgentRunLaneTarget(options);
|
||||
const spec = target.spec;
|
||||
const deliveryAuthority = resolveCicdDeliveryAuthority({
|
||||
node: spec.nodeId,
|
||||
lane: spec.lane,
|
||||
sourceRepository: spec.source.repository,
|
||||
sourceBranch: spec.source.branch,
|
||||
declaredSourceAuthorityMode: spec.source.sourceAuthority?.mode ?? null,
|
||||
declaredConfigRef: target.configPath,
|
||||
});
|
||||
const observation = await readGitMirrorStatus(config, target);
|
||||
const summary = observation.summary;
|
||||
return {
|
||||
@@ -480,6 +489,7 @@ export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorS
|
||||
command: "agentrun git-mirror status",
|
||||
mode: "yaml-declared-node-lane",
|
||||
configPath: target.configPath,
|
||||
deliveryAuthority,
|
||||
target: agentRunLaneSummary(spec),
|
||||
namespace: spec.gitMirror.namespace,
|
||||
readUrl: spec.gitMirror.readUrl,
|
||||
@@ -496,9 +506,17 @@ export async function gitMirrorStatus(config: UniDeskConfig, options: GitMirrorS
|
||||
expandWith: `bun scripts/cli.ts agentrun git-mirror status --node ${spec.nodeId} --lane ${spec.lane} --full`,
|
||||
rawWith: `bun scripts/cli.ts agentrun git-mirror status --node ${spec.nodeId} --lane ${spec.lane} --raw`,
|
||||
},
|
||||
next: {
|
||||
sync: `bun scripts/cli.ts agentrun git-mirror sync --node ${spec.nodeId} --lane ${spec.lane} --confirm`,
|
||||
flush: summary.pendingFlush === true ? `bun scripts/cli.ts agentrun git-mirror flush --node ${spec.nodeId} --lane ${spec.lane} --confirm` : null,
|
||||
},
|
||||
next: deliveryAuthority.kind === "pac-pr-merge"
|
||||
? pacReadOnlyNext(deliveryAuthority.consumer.node, deliveryAuthority.consumer.consumerId)
|
||||
: deliveryAuthority.kind === "unknown"
|
||||
? {
|
||||
status: `bun scripts/cli.ts agentrun control-plane status --node ${spec.nodeId} --lane ${spec.lane}`,
|
||||
fixAutomaticDelivery: pacAutomaticDeliveryFix(deliveryAuthority),
|
||||
valuesPrinted: false,
|
||||
}
|
||||
: {
|
||||
sync: `bun scripts/cli.ts agentrun git-mirror sync --node ${spec.nodeId} --lane ${spec.lane} --confirm`,
|
||||
flush: summary.pendingFlush === true ? `bun scripts/cli.ts agentrun git-mirror flush --node ${spec.nodeId} --lane ${spec.lane} --confirm` : null,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -359,7 +359,10 @@ export function unsupported(args: string[]): RenderedCliResult {
|
||||
" agentrun aipod-specs|queue|runs|commands|runner|sessions",
|
||||
"",
|
||||
"Operations:",
|
||||
" agentrun control-plane status|trigger-current|refresh",
|
||||
" agentrun git-mirror status|sync|flush",
|
||||
" agentrun control-plane status",
|
||||
" agentrun git-mirror status",
|
||||
" agentrun control-plane legacy-cicd --help",
|
||||
" agentrun git-mirror legacy-ops --help",
|
||||
" agentrun control-plane platform-maintenance --help",
|
||||
].join("\n"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user