@devrouter/cli 0.6.5 → 0.6.7
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/dist/devrouter-lifecycle-worker.js +2 -2
- package/dist/devrouter.js +16 -12
- package/package.json +1 -1
- package/upgrade-prompts/0.6.6.md +46 -0
- package/upgrade-prompts/0.6.7.md +48 -0
|
@@ -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.
|
|
5595
|
+
const cliVersion = true ? "0.6.7" : "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.
|
|
7982
|
+
return true ? "0.6.7" : "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.
|
|
4947
|
+
const cliVersion = true ? "0.6.7" : "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.
|
|
7269
|
+
return true ? "0.6.7" : "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,17 +25491,20 @@ 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("'", `'\\''`)}'`;
|
|
25495
|
+
const failedTransition = repo.managedRuntime?.status === "failed-transition";
|
|
25494
25496
|
if (repo.managedRuntime?.mode === "managed") {
|
|
25495
|
-
|
|
25496
|
-
|
|
25497
|
+
nextSteps.push(
|
|
25498
|
+
failedTransition ? `Inspect: devrouter status --repo ${repoArgument}; resolve the reported drift before retrying ensure.` : `Run: devrouter ensure ${repoArgument}`
|
|
25499
|
+
);
|
|
25497
25500
|
} else {
|
|
25498
25501
|
nextSteps.push(`Run: dev app ls --repo ${repo.path}`);
|
|
25499
25502
|
nextSteps.push("Run: dev app run <name> --repo <path> --yes");
|
|
25500
25503
|
}
|
|
25501
25504
|
nextSteps.push("Run: dev ls");
|
|
25502
|
-
if (repo.managedRuntime?.mountNesting?.status === "unwound") {
|
|
25505
|
+
if (!failedTransition && repo.managedRuntime?.mountNesting?.status === "unwound") {
|
|
25503
25506
|
nextSteps.push(
|
|
25504
|
-
`Run: devrouter stop ${
|
|
25507
|
+
`Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument} to re-apply the unwound nested mount`
|
|
25505
25508
|
);
|
|
25506
25509
|
}
|
|
25507
25510
|
}
|
|
@@ -25943,7 +25946,7 @@ function probeInstalledCliVersion(executable) {
|
|
|
25943
25946
|
}
|
|
25944
25947
|
function buildCliPathCheck(options = {}) {
|
|
25945
25948
|
const id5 = "global.cli-path";
|
|
25946
|
-
const runningVersion = options.runningVersion ?? (true ? "0.6.
|
|
25949
|
+
const runningVersion = options.runningVersion ?? (true ? "0.6.7" : "0.0.0-dev");
|
|
25947
25950
|
if (runningVersion === "0.0.0-dev") {
|
|
25948
25951
|
return {
|
|
25949
25952
|
id: id5,
|
|
@@ -26765,6 +26768,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26765
26768
|
});
|
|
26766
26769
|
if (repo.managedRuntime) {
|
|
26767
26770
|
const managedRuntime = repo.managedRuntime;
|
|
26771
|
+
const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
|
|
26768
26772
|
const variantOption = managedRuntime.activeVariant && managedRuntime.activeVariant !== "default" ? ` --variant ${managedRuntime.activeVariant}` : "";
|
|
26769
26773
|
const level = managedRuntime.mode === "legacy" || managedRuntime.status === "ready" ? "ok" : managedRuntime.status === "starting" || managedRuntime.status === "stopped" ? "warn" : "error";
|
|
26770
26774
|
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 +26782,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26778
26782
|
level,
|
|
26779
26783
|
summary: summary2,
|
|
26780
26784
|
...details ? { details } : {},
|
|
26781
|
-
suggestion: managedRuntime.mode === "legacy" ? void 0 : managedRuntime.status === "failed-transition" ? `Inspect:
|
|
26785
|
+
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
26786
|
});
|
|
26783
26787
|
const mountNesting = managedRuntime.mountNesting;
|
|
26784
26788
|
if (mountNesting && mountNesting.status !== "not-applicable") {
|
|
@@ -26796,7 +26800,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26796
26800
|
(entry) => `unwound=${entry.destination} (source ${entry.source} inside ${entry.nestedWithin})`
|
|
26797
26801
|
)
|
|
26798
26802
|
].join("; "),
|
|
26799
|
-
suggestion: `Run: devrouter stop ${
|
|
26803
|
+
suggestion: managedRuntime.status === "failed-transition" ? void 0 : `Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument}${variantOption} to restart the exact container, which re-applies the nested mount.`
|
|
26800
26804
|
});
|
|
26801
26805
|
} else if (mountNesting.status === "unverified") {
|
|
26802
26806
|
addCheck(checks, {
|
|
@@ -26807,7 +26811,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26807
26811
|
`container=${container}`,
|
|
26808
26812
|
`reason=${mountNesting.reason ?? "unknown"}`
|
|
26809
26813
|
].join("; "),
|
|
26810
|
-
suggestion: `Run: devrouter exec ${
|
|
26814
|
+
suggestion: `Run: devrouter exec ${repoArgument} -- cat /proc/self/mountinfo to read the container's own mount table.`
|
|
26811
26815
|
});
|
|
26812
26816
|
} else {
|
|
26813
26817
|
addCheck(checks, {
|
|
@@ -26841,7 +26845,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26841
26845
|
suggestion: `Remedy ${expansionNotice.remedy.code}: set a named default profile other than '${expansionNotice.profile}'${remedyCandidates}.`
|
|
26842
26846
|
});
|
|
26843
26847
|
}
|
|
26844
|
-
const cliVersion = true ? "0.6.
|
|
26848
|
+
const cliVersion = true ? "0.6.7" : "0.0.0-dev";
|
|
26845
26849
|
const configVersion = config.devrouter?.version;
|
|
26846
26850
|
const installedKnown = cliVersion !== "0.0.0-dev";
|
|
26847
26851
|
const versionComparison = installedKnown && configVersion ? compareSemver(configVersion, cliVersion) : void 0;
|
|
@@ -42520,7 +42524,7 @@ var init_version = __esm({
|
|
|
42520
42524
|
|
|
42521
42525
|
// src/cli.ts
|
|
42522
42526
|
var import_commander = require("commander");
|
|
42523
|
-
var CLI_VERSION = true ? "0.6.
|
|
42527
|
+
var CLI_VERSION = true ? "0.6.7" : "0.0.0-dev";
|
|
42524
42528
|
var VERSION_FLAGS = /* @__PURE__ */ new Set(["-V", "--version"]);
|
|
42525
42529
|
function withErrorHandling(action2) {
|
|
42526
42530
|
return async (...args) => {
|
package/package.json
CHANGED
|
@@ -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.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Upgrade to devrouter 0.6.7
|
|
2
|
+
|
|
3
|
+
Status and doctor keep failed-transition recovery advice consistent, including
|
|
4
|
+
combined status insights and unwound-mount diagnostics. Inspect the exact checkout
|
|
5
|
+
and resolve the reported transition before retrying ensure; the warning is not
|
|
6
|
+
permission to stop/restart an unproved population. Existing readiness, startup,
|
|
7
|
+
repair, ownership, levels and literal checkout argument rules remain.
|
|
8
|
+
No configuration schema or lifecycle contract changes are introduced.
|
|
9
|
+
|
|
10
|
+
## Task
|
|
11
|
+
|
|
12
|
+
Within approved installation/adaptation scope, select the integrity-verified exact
|
|
13
|
+
package, update `devrouter.version` in `.devrouter.yml` and refresh existing agent
|
|
14
|
+
guidance through `devrouter repo agents`. Verify the actual selected executable,
|
|
15
|
+
PATH copies and participating package/source/harness/controller pins. Ask each
|
|
16
|
+
participating owner which executable can access this host's Devrouter state;
|
|
17
|
+
PATH inventory alone does not prove coordinated adoption.
|
|
18
|
+
|
|
19
|
+
Before the first 0.6.7 lifecycle write, active participating clients must use a
|
|
20
|
+
compatible qualified reader/writer. Older 0.6.6 refuses its newer-writer journals
|
|
21
|
+
through direct read, update and global enumeration even without a schema change.
|
|
22
|
+
Inactive older pins stay unused until compatible adoption is verified. Unknown
|
|
23
|
+
participation holds activation. Do not use an older reader as a downgrade recovery
|
|
24
|
+
route after new writes. Preserve all journal bytes, writer stamps and durable
|
|
25
|
+
initialization/replacement receipts; never erase state or loosen version/hash
|
|
26
|
+
fences to bypass refusal or rearm a consumed attempt.
|
|
27
|
+
|
|
28
|
+
Installation and release notices supply no consumer startup, repair, replacement,
|
|
29
|
+
initialization, reset or extra-attempt authority. Each owner retains exact runtime,
|
|
30
|
+
data and neighbour limits. Failed-transition inspection is a diagnostic action;
|
|
31
|
+
it does not prove application readiness or prescribe an automatic retry.
|
|
32
|
+
|
|
33
|
+
## Validation
|
|
34
|
+
|
|
35
|
+
1. Verify registry integrity, selected package/member bytes, executable version
|
|
36
|
+
and the existing local guidance. Run native checks for actual consumer edits.
|
|
37
|
+
2. Use `devrouter status --repo <checkout> --json` and existing diagnostic results
|
|
38
|
+
for authorized inspection. Compare the actual obstruction and next-action
|
|
39
|
+
preconditions before any separately authorized lifecycle command.
|
|
40
|
+
3. Any separately authorized runtime work ends with canonical stop and exact
|
|
41
|
+
provider/container/route/worker proof unless the user keeps it running.
|
|
42
|
+
|
|
43
|
+
## Report
|
|
44
|
+
|
|
45
|
+
Report exact selected package/executable identities, participating-client adoption,
|
|
46
|
+
remaining unknowns and relevant checks. Record any actual runtime terminal with
|
|
47
|
+
its producing evidence. Package proof does not establish receiving-host adoption,
|
|
48
|
+
consumer recovery, broader guidance parity or retained-maintenance acceptance.
|