@devrouter/cli 0.6.5 → 0.6.6

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.
@@ -5592,7 +5592,7 @@ function loadRepoConfig(repoPath, read2 = (file) => import_node_fs16.default.rea
5592
5592
  const config = parseRepoConfigSource(raw, configPath);
5593
5593
  const requiredVersion = config.devrouter?.version;
5594
5594
  if (requiredVersion && !hasWarnedVersionMismatch) {
5595
- const cliVersion = true ? "0.6.5" : "0.0.0-dev";
5595
+ const cliVersion = true ? "0.6.6" : "0.0.0-dev";
5596
5596
  if (cliVersion !== "0.0.0-dev" && compareSemver2(requiredVersion, cliVersion) > 0) {
5597
5597
  hasWarnedVersionMismatch = true;
5598
5598
  process.stderr.write(
@@ -7979,7 +7979,7 @@ function advanceAppReplacementAttempt(identity2, authority, stage, newPrimaryId)
7979
7979
  });
7980
7980
  }
7981
7981
  function installedCliVersion() {
7982
- return true ? "0.6.5" : "0.0.0-dev";
7982
+ return true ? "0.6.6" : "0.0.0-dev";
7983
7983
  }
7984
7984
  function compareCliVersions(left, right) {
7985
7985
  const parts = (value) => value.split(".").map((part) => Number.parseInt(part, 10) || 0);
package/dist/devrouter.js CHANGED
@@ -4944,7 +4944,7 @@ function loadRepoConfig(repoPath, read2 = (file) => import_node_fs8.default.read
4944
4944
  const config = parseRepoConfigSource(raw, configPath);
4945
4945
  const requiredVersion = config.devrouter?.version;
4946
4946
  if (requiredVersion && !hasWarnedVersionMismatch) {
4947
- const cliVersion = true ? "0.6.5" : "0.0.0-dev";
4947
+ const cliVersion = true ? "0.6.6" : "0.0.0-dev";
4948
4948
  if (cliVersion !== "0.0.0-dev" && compareSemver(requiredVersion, cliVersion) > 0) {
4949
4949
  hasWarnedVersionMismatch = true;
4950
4950
  process.stderr.write(
@@ -7266,7 +7266,7 @@ function validateAppReplacementAttempt(value, identity2) {
7266
7266
  return attempt;
7267
7267
  }
7268
7268
  function installedCliVersion() {
7269
- return true ? "0.6.5" : "0.0.0-dev";
7269
+ return true ? "0.6.6" : "0.0.0-dev";
7270
7270
  }
7271
7271
  function compareCliVersions(left, right) {
7272
7272
  const parts = (value) => value.split(".").map((part) => Number.parseInt(part, 10) || 0);
@@ -25491,8 +25491,8 @@ async function collectRouterStatus(repoPath) {
25491
25491
  `Run: dev app add --name <name> --host <name>.localhost --protocol http --runtime host --repo ${repo.path}`
25492
25492
  );
25493
25493
  } else if (repo?.valid) {
25494
+ const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
25494
25495
  if (repo.managedRuntime?.mode === "managed") {
25495
- const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
25496
25496
  nextSteps.push(`Run: devrouter ensure ${repoArgument}`);
25497
25497
  } else {
25498
25498
  nextSteps.push(`Run: dev app ls --repo ${repo.path}`);
@@ -25501,7 +25501,7 @@ async function collectRouterStatus(repoPath) {
25501
25501
  nextSteps.push("Run: dev ls");
25502
25502
  if (repo.managedRuntime?.mountNesting?.status === "unwound") {
25503
25503
  nextSteps.push(
25504
- `Run: devrouter stop ${repo.path} and then devrouter ensure ${repo.path} to re-apply the unwound nested mount`
25504
+ `Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument} to re-apply the unwound nested mount`
25505
25505
  );
25506
25506
  }
25507
25507
  }
@@ -25943,7 +25943,7 @@ function probeInstalledCliVersion(executable) {
25943
25943
  }
25944
25944
  function buildCliPathCheck(options = {}) {
25945
25945
  const id5 = "global.cli-path";
25946
- const runningVersion = options.runningVersion ?? (true ? "0.6.5" : "0.0.0-dev");
25946
+ const runningVersion = options.runningVersion ?? (true ? "0.6.6" : "0.0.0-dev");
25947
25947
  if (runningVersion === "0.0.0-dev") {
25948
25948
  return {
25949
25949
  id: id5,
@@ -26765,6 +26765,7 @@ async function buildDoctorReport(options = {}) {
26765
26765
  });
26766
26766
  if (repo.managedRuntime) {
26767
26767
  const managedRuntime = repo.managedRuntime;
26768
+ const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
26768
26769
  const variantOption = managedRuntime.activeVariant && managedRuntime.activeVariant !== "default" ? ` --variant ${managedRuntime.activeVariant}` : "";
26769
26770
  const level = managedRuntime.mode === "legacy" || managedRuntime.status === "ready" ? "ok" : managedRuntime.status === "starting" || managedRuntime.status === "stopped" ? "warn" : "error";
26770
26771
  const summary2 = managedRuntime.mode === "legacy" ? "Legacy runtime contract is active." : managedRuntime.status === "ready" ? `Managed runtime profile '${managedRuntime.profile}' is ready.` : managedRuntime.status === "starting" ? `Managed runtime profile '${managedRuntime.profile}' is starting.` : managedRuntime.status === "stopped" ? `Managed runtime profile '${managedRuntime.profile}' is stopped.` : managedRuntime.status === "failed-transition" ? `Managed runtime profile '${managedRuntime.profile}' has a failed transition.` : `Managed runtime profile '${managedRuntime.profile}' has runtime drift.`;
@@ -26778,7 +26779,7 @@ async function buildDoctorReport(options = {}) {
26778
26779
  level,
26779
26780
  summary: summary2,
26780
26781
  ...details ? { details } : {},
26781
- suggestion: managedRuntime.mode === "legacy" ? void 0 : managedRuntime.status === "failed-transition" ? `Inspect: dev status --repo ${repo.path}; resolve the reported drift before retrying ensure.` : managedRuntime.status === "ready" ? void 0 : `Run: dev ensure ${repo.path}${variantOption}`
26782
+ suggestion: managedRuntime.mode === "legacy" ? void 0 : managedRuntime.status === "failed-transition" ? `Inspect: devrouter status --repo ${repoArgument}; resolve the reported drift before retrying ensure.` : managedRuntime.status === "ready" ? void 0 : `Run: devrouter ensure ${repoArgument}${variantOption}`
26782
26783
  });
26783
26784
  const mountNesting = managedRuntime.mountNesting;
26784
26785
  if (mountNesting && mountNesting.status !== "not-applicable") {
@@ -26796,7 +26797,7 @@ async function buildDoctorReport(options = {}) {
26796
26797
  (entry) => `unwound=${entry.destination} (source ${entry.source} inside ${entry.nestedWithin})`
26797
26798
  )
26798
26799
  ].join("; "),
26799
- suggestion: `Run: devrouter stop ${repo.path} and then devrouter ensure ${repo.path}${variantOption} to restart the exact container, which re-applies the nested mount.`
26800
+ suggestion: `Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument}${variantOption} to restart the exact container, which re-applies the nested mount.`
26800
26801
  });
26801
26802
  } else if (mountNesting.status === "unverified") {
26802
26803
  addCheck(checks, {
@@ -26807,7 +26808,7 @@ async function buildDoctorReport(options = {}) {
26807
26808
  `container=${container}`,
26808
26809
  `reason=${mountNesting.reason ?? "unknown"}`
26809
26810
  ].join("; "),
26810
- suggestion: `Run: devrouter exec ${repo.path} -- cat /proc/self/mountinfo to read the container's own mount table.`
26811
+ suggestion: `Run: devrouter exec ${repoArgument} -- cat /proc/self/mountinfo to read the container's own mount table.`
26811
26812
  });
26812
26813
  } else {
26813
26814
  addCheck(checks, {
@@ -26841,7 +26842,7 @@ async function buildDoctorReport(options = {}) {
26841
26842
  suggestion: `Remedy ${expansionNotice.remedy.code}: set a named default profile other than '${expansionNotice.profile}'${remedyCandidates}.`
26842
26843
  });
26843
26844
  }
26844
- const cliVersion = true ? "0.6.5" : "0.0.0-dev";
26845
+ const cliVersion = true ? "0.6.6" : "0.0.0-dev";
26845
26846
  const configVersion = config.devrouter?.version;
26846
26847
  const installedKnown = cliVersion !== "0.0.0-dev";
26847
26848
  const versionComparison = installedKnown && configVersion ? compareSemver(configVersion, cliVersion) : void 0;
@@ -42520,7 +42521,7 @@ var init_version = __esm({
42520
42521
 
42521
42522
  // src/cli.ts
42522
42523
  var import_commander = require("commander");
42523
- var CLI_VERSION = true ? "0.6.5" : "0.0.0-dev";
42524
+ var CLI_VERSION = true ? "0.6.6" : "0.0.0-dev";
42524
42525
  var VERSION_FLAGS = /* @__PURE__ */ new Set(["-V", "--version"]);
42525
42526
  function withErrorHandling(action2) {
42526
42527
  return async (...args) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrouter/cli",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "description": "Local dev routing CLI with shared Traefik reverse proxy",
5
5
  "author": "Roland Schlaefli",
6
6
  "homepage": "https://github.com/rschlaefli/devrouter#readme",
@@ -0,0 +1,46 @@
1
+ # Upgrade to devrouter 0.6.6
2
+
3
+ Managed status/doctor recovery commands preserve the exact checkout argument when
4
+ paths contain spaces, apostrophes or shell expansion characters. Startup,
5
+ failed-transition inspection and nested-mount restart/inspection guidance use
6
+ canonical `devrouter` names. Existing variant flags, diagnostic levels and
7
+ execution eligibility remain. No configuration schema or lifecycle contract changes.
8
+
9
+ ## Task
10
+
11
+ Within approved installation/adaptation scope, select the verified exact package,
12
+ update `devrouter.version` in `.devrouter.yml` and refresh existing agent guidance
13
+ with `devrouter repo agents`. Check every PATH-visible executable and known
14
+ wrapper, package/source invocation and harness/controller pin. Obtain participating
15
+ owners' actual executable/package identities; PATH inventory is not fleet proof.
16
+ Do not start a consumer to validate metadata or installation.
17
+
18
+ Before the first 0.6.6 lifecycle write, coordinate compatible qualified clients
19
+ sharing those journals, including readers and controllers. Older 0.6.5 refuses
20
+ newer-writer state through direct reads, updates and global enumeration. Unknown
21
+ or competing client identities hold activation. Each receiving host and consumer
22
+ retains its runtime/data authority and consumed attempt limits. Installation and
23
+ release notices do not authorize activation.
24
+
25
+ Preserve journal bytes, writer stamps and durable initialization/replacement
26
+ receipts. An older reader is not a downgrade recovery route after newer writes.
27
+ Use a compatible qualified CLI with fresh ownership proof for authorized recovery;
28
+ never edit or erase state or version/hash fences to bypass refusal or rearm attempts.
29
+
30
+ ## Validation
31
+
32
+ 1. Verify selected package integrity, executable bytes/version and existing local
33
+ guidance. Run native checks for actual consumer edits.
34
+ 2. Treat diagnostic commands as advice subject to existing startup/repair
35
+ preconditions and the receiving owner's runtime authority. Preserve known
36
+ refusals and unknown completion; quoting is not additional eligibility proof.
37
+ 3. Separately authorized runtime work ends with canonical stop and exact provider,
38
+ container, route and worker proof unless the user explicitly retains it.
39
+
40
+ ## Report
41
+
42
+ Report exact selected package/executable identities, participating-client adoption,
43
+ remaining unknowns, relevant checks and any actual runtime terminal. Keep release
44
+ and package proof distinct from consumer recovery. This patch adds no provider
45
+ combination, maintenance/reset qualification, consumer-data acceptance or permission
46
+ for another runtime attempt.