@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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mmi",
3
- "version": "4.5.109",
3
+ "version": "4.5.111",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
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 = 3e4;
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 = 30;
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.109",
17720
- tag: "v4.5.109",
17721
- commit: "e4761eda61ee",
17722
- npm: "@mutmutco/cli@4.5.109"
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.109"
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.109 and redeploy the Hub Lambda from tag v4.5.109 (e4761eda61ee); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17746
- v3Target: "v4.5.109 (@mutmutco/cli@4.5.109, tag commit e4761eda61ee \u2014 last known-good release carrying the repo-index v4-only contract)"
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 30`;
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 30`
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
- if (task.timeoutSeconds !== void 0 && (!Number.isInteger(task.timeoutSeconds) || task.timeoutSeconds < 1 || task.timeoutSeconds > 3600)) throw new Error(`org project set: tenantTasks.${name}.timeoutSeconds must be an integer 1..3600`);
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 drift = input.drift;
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 = 3e4;
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 30)`);
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", ["run", "watch", String(candidate.databaseId), "--repo", "mutmutco/MMI-Hub", "--exit-status"], void 0, WATCH_TIMEOUT);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.109",
3
+ "version": "4.5.111",
4
4
  "description": "MMI Future CLI — the org dev toolbox and shared cross-IDE engine for every registry-declared MMI coding surface.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/codex-plugin",
3
- "version": "4.5.109",
3
+ "version": "4.5.111",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",