@mutmutco/codex-plugin 4.5.109 → 4.5.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/cli/dist/main.cjs +23 -17
- package/cli/package.json +1 -1
- package/package.json +1 -1
package/cli/dist/main.cjs
CHANGED
|
@@ -6072,7 +6072,7 @@ function waitReadFailureMessage(e) {
|
|
|
6072
6072
|
const stderr = typeof err?.stderr === "string" ? err.stderr.trim() : "";
|
|
6073
6073
|
return (stderr || err?.message || String(e)).replace(/\s+/g, " ").slice(0, 300);
|
|
6074
6074
|
}
|
|
6075
|
-
var PR_CHECKS_POLL_MS =
|
|
6075
|
+
var PR_CHECKS_POLL_MS = 6e4;
|
|
6076
6076
|
function pollIntervalMs(elapsedMs) {
|
|
6077
6077
|
return Math.min(4 * PR_CHECKS_POLL_MS, PR_CHECKS_POLL_MS * 2 ** Math.floor(Math.max(0, elapsedMs) / 3e5));
|
|
6078
6078
|
}
|
|
@@ -16926,7 +16926,7 @@ function foldPortManualCommand(model, version) {
|
|
|
16926
16926
|
return model === "hub-serverless" ? `node scripts/release-distribution.mjs prepare ${version}` : `npm version ${version} --no-git-tag-version --allow-same-version`;
|
|
16927
16927
|
}
|
|
16928
16928
|
var HUB_REPO2 = "mutmutco/MMI-Hub";
|
|
16929
|
-
var GH_RUN_WATCH_INTERVAL_S =
|
|
16929
|
+
var GH_RUN_WATCH_INTERVAL_S = 60;
|
|
16930
16930
|
function ghRunWatchArgs(runId, repo) {
|
|
16931
16931
|
return ["run", "watch", String(runId), "--repo", repo, "--exit-status", "--interval", String(GH_RUN_WATCH_INTERVAL_S)];
|
|
16932
16932
|
}
|
|
@@ -17716,10 +17716,10 @@ var rollout_plan_default = {
|
|
|
17716
17716
|
note: "The v4.0.0 stamp happens at cut time (D6e #4463); until then the candidate is the origin/development head artifacts (built cli/dist + npm pack), identity proven by dist content hash (D6a)."
|
|
17717
17717
|
},
|
|
17718
17718
|
baseline: {
|
|
17719
|
-
version: "4.5.
|
|
17720
|
-
tag: "v4.5.
|
|
17721
|
-
commit: "
|
|
17722
|
-
npm: "@mutmutco/cli@4.5.
|
|
17719
|
+
version: "4.5.111",
|
|
17720
|
+
tag: "v4.5.111",
|
|
17721
|
+
commit: "7794d236f8bd",
|
|
17722
|
+
npm: "@mutmutco/cli@4.5.111"
|
|
17723
17723
|
},
|
|
17724
17724
|
exitCriterion: "fleet-n-of-n",
|
|
17725
17725
|
hubOnlyShortcut: "forbidden",
|
|
@@ -17736,14 +17736,14 @@ var rollout_plan_default = {
|
|
|
17736
17736
|
repo: "mutmutco/mmi-hub",
|
|
17737
17737
|
role: "canary",
|
|
17738
17738
|
schedule: "train",
|
|
17739
|
-
v3Target: "v4.5.
|
|
17739
|
+
v3Target: "v4.5.111"
|
|
17740
17740
|
}
|
|
17741
17741
|
],
|
|
17742
17742
|
rollbackTrigger: "Any red inside the post-contract soak window: `devops train gate` FAIL attributable to the v4 doors, Hub endpoint health probe failure, a pre-v4 client admitted instead of receiving actionable HTTP 426, or npm consumer install/doctor failure on the v4-only dist.",
|
|
17743
17743
|
rollback: {
|
|
17744
17744
|
independent: true,
|
|
17745
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
17746
|
-
v3Target: "v4.5.
|
|
17745
|
+
mechanism: "npm dist-tag latest -> 4.5.111 and redeploy the Hub Lambda from tag v4.5.111 (7794d236f8bd); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
17746
|
+
v3Target: "v4.5.111 (@mutmutco/cli@4.5.111, tag commit 7794d236f8bd \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
17747
17747
|
}
|
|
17748
17748
|
},
|
|
17749
17749
|
{
|
|
@@ -23731,7 +23731,7 @@ function deriveReleasePhaseStatus(ledger) {
|
|
|
23731
23731
|
return { phaseStatus: worst === 0 ? "phases-failed" : worst === 1 ? "phases-pending" : "phases-green", legs };
|
|
23732
23732
|
}
|
|
23733
23733
|
function safeRunAction(runId, runRepo, state) {
|
|
23734
|
-
return state === "failed" ? `next: diagnose with gh run view ${runId} --repo ${runRepo} --log-failed; rerun by hand only when the cause is fixed: gh run rerun ${runId} --repo ${runRepo} --failed (never re-tag)` : `next: gh run watch ${runId} --repo ${runRepo} --exit-status --interval
|
|
23734
|
+
return state === "failed" ? `next: diagnose with gh run view ${runId} --repo ${runRepo} --log-failed; rerun by hand only when the cause is fixed: gh run rerun ${runId} --repo ${runRepo} --failed (never re-tag)` : `next: gh run watch ${runId} --repo ${runRepo} --exit-status --interval 60`;
|
|
23735
23735
|
}
|
|
23736
23736
|
function formatReleaseLedgerReport(report) {
|
|
23737
23737
|
const lines2 = [`release phase ledger${report.lane ? ` [${report.lane}]` : ""}: ${report.phaseStatus.toUpperCase()} (${report.path}) \u2014 phase status of the recorded boundaries, NOT the release verdict`];
|
|
@@ -24029,7 +24029,7 @@ async function transientRecoveryForFailedPhase(deps, input) {
|
|
|
24029
24029
|
recovered: false,
|
|
24030
24030
|
runId: candidate.runId,
|
|
24031
24031
|
runRepo,
|
|
24032
|
-
note: `the automatic rerun of ${failedRunIdentity(candidate, runRepo)} did not resolve within the bounded watch \u2014 typed PENDING (the one automatic rerun is spent); safe next action: gh run watch ${candidate.runId} --repo ${runRepo} --exit-status --interval
|
|
24032
|
+
note: `the automatic rerun of ${failedRunIdentity(candidate, runRepo)} did not resolve within the bounded watch \u2014 typed PENDING (the one automatic rerun is spent); safe next action: gh run watch ${candidate.runId} --repo ${runRepo} --exit-status --interval 60`
|
|
24033
24033
|
};
|
|
24034
24034
|
}
|
|
24035
24035
|
async function transientRecoveryEnumerate(deps, repo, sha) {
|
|
@@ -31748,7 +31748,8 @@ function parseTenantTasksVar(raw) {
|
|
|
31748
31748
|
if (typeof task.service !== "string" || !serviceRe.test(task.service)) throw new Error(`org project set: tenantTasks.${name}.service has an unsafe shape`);
|
|
31749
31749
|
if (!Array.isArray(task.command) || task.command.length < 1 || task.command.length > 32 || task.command.some((arg) => typeof arg !== "string" || arg.length < 1 || arg.length > 256 || /[\u0000\r\n]/.test(arg))) throw new Error(`org project set: tenantTasks.${name}.command must be 1-32 bounded argv strings`);
|
|
31750
31750
|
if (!Array.isArray(task.stages) || task.stages.length < 1 || task.stages.length > 3 || task.stages.some((stage) => typeof stage !== "string" || !validStages.has(stage)) || new Set(task.stages).size !== task.stages.length) throw new Error(`org project set: tenantTasks.${name}.stages must be unique dev/rc/main values`);
|
|
31751
|
-
|
|
31751
|
+
const maxTimeout = task.secretOutput !== void 0 ? 3600 : 7200;
|
|
31752
|
+
if (task.timeoutSeconds !== void 0 && (!Number.isInteger(task.timeoutSeconds) || task.timeoutSeconds < 1 || task.timeoutSeconds > maxTimeout)) throw new Error(`org project set: tenantTasks.${name}.timeoutSeconds must be an integer 1..${maxTimeout}`);
|
|
31752
31753
|
const artifact = task.artifact ?? "none";
|
|
31753
31754
|
if (artifact !== "none" && artifact !== "required") throw new Error(`org project set: tenantTasks.${name}.artifact must be none or required`);
|
|
31754
31755
|
const carriesPlaceholder = task.command.some((arg) => arg.includes("{artifact}"));
|
|
@@ -32302,7 +32303,12 @@ var OWNER3 = "mutmutco";
|
|
|
32302
32303
|
function buildSecretsDiffReport(input) {
|
|
32303
32304
|
const present = new Set(input.vaultKeys);
|
|
32304
32305
|
const missing = missingRequiredKeys(input.stage, input.required, present, input.declaredSecrets);
|
|
32305
|
-
const
|
|
32306
|
+
const own = (rows) => (rows ?? []).filter((r) => r.slug === input.slug);
|
|
32307
|
+
const drift = input.drift && {
|
|
32308
|
+
declaredMissing: own(input.drift.declaredMissing),
|
|
32309
|
+
orphan: own(input.drift.orphan),
|
|
32310
|
+
offScheme: own(input.drift.offScheme)
|
|
32311
|
+
};
|
|
32306
32312
|
const driftAvailable = drift !== null;
|
|
32307
32313
|
return {
|
|
32308
32314
|
stage: input.stage,
|
|
@@ -39143,7 +39149,7 @@ async function updatePrHeadFromBase(input) {
|
|
|
39143
39149
|
}
|
|
39144
39150
|
throw new Error(`GitHub accepted the update of ${input.head} from ${input.base} but the head did not move \u2014 check the PR, then rerun`);
|
|
39145
39151
|
}
|
|
39146
|
-
var PR_LAND_POLL_MS =
|
|
39152
|
+
var PR_LAND_POLL_MS = 6e4;
|
|
39147
39153
|
var PR_LAND_ENQUEUE_TIMEOUT_MS = 10 * 6e4;
|
|
39148
39154
|
var PR_LAND_STATE_READ_RETRIES = 3;
|
|
39149
39155
|
var PR_LAND_STATE_READ_DELAY_MS = 2e3;
|
|
@@ -46891,7 +46897,7 @@ function renderDeployLine(d) {
|
|
|
46891
46897
|
else if (d.runUrl) parts.push(`run ${d.runUrl}`);
|
|
46892
46898
|
if (d.deployStatus === "success") parts.push("deploy: SUCCEEDED");
|
|
46893
46899
|
else if (d.deployStatus === "failure") parts.push(`deploy: FAILED (${TRAIN_DEPLOY_FAILED_NOTE})`);
|
|
46894
|
-
else if (d.runId != null) parts.push(`deploy: UNVERIFIED \u2014 dispatched, not resolved (watch: gh run watch ${d.runId} --repo mutmutco/MMI-Hub --exit-status --interval
|
|
46900
|
+
else if (d.runId != null) parts.push(`deploy: UNVERIFIED \u2014 dispatched, not resolved (watch: gh run watch ${d.runId} --repo mutmutco/MMI-Hub --exit-status --interval 60)`);
|
|
46895
46901
|
else if (d.workflowRuns?.length) parts.push("deploy: UNVERIFIED \u2014 the runs above are enumerated, not resolved; watch each to conclusion before calling this release healthy (#3322)");
|
|
46896
46902
|
else parts.push("deploy: UNVERIFIED \u2014 no run correlated or watched; resolve every workflow run on the release SHA before calling this release healthy (#3322)");
|
|
46897
46903
|
return parts.join("; ");
|
|
@@ -47925,7 +47931,7 @@ function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}, summaryFileTr,
|
|
|
47925
47931
|
}
|
|
47926
47932
|
if (!candidate) throw new Error(`workflow dispatch outcome ambiguous for "${title}"; inspect Actions before retrying`);
|
|
47927
47933
|
try {
|
|
47928
|
-
await exec("gh",
|
|
47934
|
+
await exec("gh", ghRunWatchArgs(candidate.databaseId, "mutmutco/MMI-Hub"), void 0, WATCH_TIMEOUT);
|
|
47929
47935
|
} catch {
|
|
47930
47936
|
}
|
|
47931
47937
|
const verdict = JSON.parse(await gh(["run", "view", String(candidate.databaseId), "--repo", "mutmutco/MMI-Hub", "--json", "conclusion"]));
|
|
@@ -55161,7 +55167,7 @@ ${filelessTransitionGuide(target, o.stage)}`
|
|
|
55161
55167
|
return reportWrite("org project set-deploy", res);
|
|
55162
55168
|
});
|
|
55163
55169
|
var projectTenantTasks = project.command("tenant-tasks").description("project-admin self-declare of tenant tasks for every stage of your own repo \u2014 new-task-only; editing an existing task stays master-only (`org project set --var tenantTasks=...`)");
|
|
55164
|
-
projectTenantTasks.command("declare <name>").description("register a NEW tenant task \u2014 becomes runnable via `runtime tenant control \u2026 run-task` on its declared dev/rc/main stages. Body shape {service,command[],stages[],timeoutSeconds?,artifact?}; required artifact tasks must carry {artifact} in the command argv.").option("--service <name>", "service in the tenant runtime the task runs in (required unless --var carries it)").option("--command <argv...>", `task command as argv (repeatable; required unless --var carries it). An argv token that starts with "-" (python -m mod) is read as an option and the whole call fails to parse: declare such a command with --var '{"service":"<svc>","command":["python","-m","mod"],"stages":["dev"]}' instead (#7668)`).option("--stages <list>", "comma-separated dev,rc,main stages this task may run on (required unless --var carries it)").option("--timeout-seconds <n>", "optional wall-clock ceiling 1..3600").option("--artifact <none|required>", "artifact contract (default none; required tasks must contain {artifact} in argv)").option("--var <json>", "full task object {service,command[],stages[],timeoutSeconds?,artifact?} \u2014 use instead of the individual flags. A task carrying secretOutput:{path,vault:{repo,key},overwrite?} is master-only; declare that via `org project set --var tenantTasks=...`").option("--repo <owner/repo>", "target repo (defaults to the current repo)").option("--json", "machine-readable output").action(async (name, o) => {
|
|
55170
|
+
projectTenantTasks.command("declare <name>").description("register a NEW tenant task \u2014 becomes runnable via `runtime tenant control \u2026 run-task` on its declared dev/rc/main stages. Body shape {service,command[],stages[],timeoutSeconds?,artifact?}; required artifact tasks must carry {artifact} in the command argv.").option("--service <name>", "service in the tenant runtime the task runs in (required unless --var carries it)").option("--command <argv...>", `task command as argv (repeatable; required unless --var carries it). An argv token that starts with "-" (python -m mod) is read as an option and the whole call fails to parse: declare such a command with --var '{"service":"<svc>","command":["python","-m","mod"],"stages":["dev"]}' instead (#7668)`).option("--stages <list>", "comma-separated dev,rc,main stages this task may run on (required unless --var carries it)").option("--timeout-seconds <n>", "optional wall-clock ceiling 1..7200 (1..3600 with a secretOutput)").option("--artifact <none|required>", "artifact contract (default none; required tasks must contain {artifact} in argv)").option("--var <json>", "full task object {service,command[],stages[],timeoutSeconds?,artifact?} \u2014 use instead of the individual flags. A task carrying secretOutput:{path,vault:{repo,key},overwrite?} is master-only; declare that via `org project set --var tenantTasks=...`").option("--repo <owner/repo>", "target repo (defaults to the current repo)").option("--json", "machine-readable output").action(async (name, o) => {
|
|
55165
55171
|
const cfg = await loadConfig();
|
|
55166
55172
|
let target;
|
|
55167
55173
|
try {
|
package/cli/package.json
CHANGED