@devrouter/cli 0.6.4 → 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.
- package/dist/devrouter-lifecycle-worker.js +2 -2
- package/dist/devrouter.js +18 -12
- package/package.json +1 -1
- package/upgrade-prompts/0.6.5.md +45 -0
- package/upgrade-prompts/0.6.6.md +46 -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.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.
|
|
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.
|
|
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.
|
|
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);
|
|
@@ -25486,17 +25486,22 @@ async function collectRouterStatus(repoPath) {
|
|
|
25486
25486
|
nextSteps.push(`Run: dev repo init --repo ${repo.path}`);
|
|
25487
25487
|
} else if (repo && !repo.valid) {
|
|
25488
25488
|
nextSteps.push("Fix .devrouter.yml validation errors and re-run `dev doctor --repo <path>`");
|
|
25489
|
-
} else if (repo?.valid && repo.appCount === 0) {
|
|
25489
|
+
} else if (repo?.valid && repo.managedRuntime?.mode !== "managed" && repo.appCount === 0) {
|
|
25490
25490
|
nextSteps.push(
|
|
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
|
-
|
|
25495
|
-
|
|
25494
|
+
const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
|
|
25495
|
+
if (repo.managedRuntime?.mode === "managed") {
|
|
25496
|
+
nextSteps.push(`Run: devrouter ensure ${repoArgument}`);
|
|
25497
|
+
} else {
|
|
25498
|
+
nextSteps.push(`Run: dev app ls --repo ${repo.path}`);
|
|
25499
|
+
nextSteps.push("Run: dev app run <name> --repo <path> --yes");
|
|
25500
|
+
}
|
|
25496
25501
|
nextSteps.push("Run: dev ls");
|
|
25497
25502
|
if (repo.managedRuntime?.mountNesting?.status === "unwound") {
|
|
25498
25503
|
nextSteps.push(
|
|
25499
|
-
`Run: devrouter stop ${
|
|
25504
|
+
`Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument} to re-apply the unwound nested mount`
|
|
25500
25505
|
);
|
|
25501
25506
|
}
|
|
25502
25507
|
}
|
|
@@ -25938,7 +25943,7 @@ function probeInstalledCliVersion(executable) {
|
|
|
25938
25943
|
}
|
|
25939
25944
|
function buildCliPathCheck(options = {}) {
|
|
25940
25945
|
const id5 = "global.cli-path";
|
|
25941
|
-
const runningVersion = options.runningVersion ?? (true ? "0.6.
|
|
25946
|
+
const runningVersion = options.runningVersion ?? (true ? "0.6.6" : "0.0.0-dev");
|
|
25942
25947
|
if (runningVersion === "0.0.0-dev") {
|
|
25943
25948
|
return {
|
|
25944
25949
|
id: id5,
|
|
@@ -26760,6 +26765,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26760
26765
|
});
|
|
26761
26766
|
if (repo.managedRuntime) {
|
|
26762
26767
|
const managedRuntime = repo.managedRuntime;
|
|
26768
|
+
const repoArgument = `'${repo.path.replaceAll("'", `'\\''`)}'`;
|
|
26763
26769
|
const variantOption = managedRuntime.activeVariant && managedRuntime.activeVariant !== "default" ? ` --variant ${managedRuntime.activeVariant}` : "";
|
|
26764
26770
|
const level = managedRuntime.mode === "legacy" || managedRuntime.status === "ready" ? "ok" : managedRuntime.status === "starting" || managedRuntime.status === "stopped" ? "warn" : "error";
|
|
26765
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.`;
|
|
@@ -26773,7 +26779,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26773
26779
|
level,
|
|
26774
26780
|
summary: summary2,
|
|
26775
26781
|
...details ? { details } : {},
|
|
26776
|
-
suggestion: managedRuntime.mode === "legacy" ? void 0 : managedRuntime.status === "failed-transition" ? `Inspect:
|
|
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}`
|
|
26777
26783
|
});
|
|
26778
26784
|
const mountNesting = managedRuntime.mountNesting;
|
|
26779
26785
|
if (mountNesting && mountNesting.status !== "not-applicable") {
|
|
@@ -26791,7 +26797,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26791
26797
|
(entry) => `unwound=${entry.destination} (source ${entry.source} inside ${entry.nestedWithin})`
|
|
26792
26798
|
)
|
|
26793
26799
|
].join("; "),
|
|
26794
|
-
suggestion: `Run: devrouter stop ${
|
|
26800
|
+
suggestion: `Run: devrouter stop ${repoArgument} and then devrouter ensure ${repoArgument}${variantOption} to restart the exact container, which re-applies the nested mount.`
|
|
26795
26801
|
});
|
|
26796
26802
|
} else if (mountNesting.status === "unverified") {
|
|
26797
26803
|
addCheck(checks, {
|
|
@@ -26802,7 +26808,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26802
26808
|
`container=${container}`,
|
|
26803
26809
|
`reason=${mountNesting.reason ?? "unknown"}`
|
|
26804
26810
|
].join("; "),
|
|
26805
|
-
suggestion: `Run: devrouter exec ${
|
|
26811
|
+
suggestion: `Run: devrouter exec ${repoArgument} -- cat /proc/self/mountinfo to read the container's own mount table.`
|
|
26806
26812
|
});
|
|
26807
26813
|
} else {
|
|
26808
26814
|
addCheck(checks, {
|
|
@@ -26836,7 +26842,7 @@ async function buildDoctorReport(options = {}) {
|
|
|
26836
26842
|
suggestion: `Remedy ${expansionNotice.remedy.code}: set a named default profile other than '${expansionNotice.profile}'${remedyCandidates}.`
|
|
26837
26843
|
});
|
|
26838
26844
|
}
|
|
26839
|
-
const cliVersion = true ? "0.6.
|
|
26845
|
+
const cliVersion = true ? "0.6.6" : "0.0.0-dev";
|
|
26840
26846
|
const configVersion = config.devrouter?.version;
|
|
26841
26847
|
const installedKnown = cliVersion !== "0.0.0-dev";
|
|
26842
26848
|
const versionComparison = installedKnown && configVersion ? compareSemver(configVersion, cliVersion) : void 0;
|
|
@@ -42515,7 +42521,7 @@ var init_version = __esm({
|
|
|
42515
42521
|
|
|
42516
42522
|
// src/cli.ts
|
|
42517
42523
|
var import_commander = require("commander");
|
|
42518
|
-
var CLI_VERSION = true ? "0.6.
|
|
42524
|
+
var CLI_VERSION = true ? "0.6.6" : "0.0.0-dev";
|
|
42519
42525
|
var VERSION_FLAGS = /* @__PURE__ */ new Set(["-V", "--version"]);
|
|
42520
42526
|
function withErrorHandling(action2) {
|
|
42521
42527
|
return async (...args) => {
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Upgrade to devrouter 0.6.5
|
|
2
|
+
|
|
3
|
+
Status and doctor now recommend `devrouter ensure <checkout>` for managed
|
|
4
|
+
repositories, including profiles with no routed apps. The command quotes the
|
|
5
|
+
exact checkout path. Legacy app guidance and existing unwound-mount diagnostics
|
|
6
|
+
remain. No configuration schema or provider/lifecycle contract changes.
|
|
7
|
+
|
|
8
|
+
## Task
|
|
9
|
+
|
|
10
|
+
Within approved installation/adaptation scope, select the verified exact package,
|
|
11
|
+
update `devrouter.version` in `.devrouter.yml` and refresh existing agent guidance
|
|
12
|
+
with `devrouter repo agents`. Check every PATH-visible executable and known
|
|
13
|
+
wrapper, package/source invocation and harness/controller pin. Obtain participating
|
|
14
|
+
owners' actual executable/package identities; PATH inventory is not fleet proof.
|
|
15
|
+
Do not start a consumer to validate metadata or installation.
|
|
16
|
+
|
|
17
|
+
Before the first 0.6.5 lifecycle write, coordinate compatible qualified clients
|
|
18
|
+
sharing those journals, including readers and controllers. Older 0.6.4 refuses
|
|
19
|
+
newer-writer state, including direct reads, updates and global enumeration.
|
|
20
|
+
Unknown or competing client identities hold activation. Each receiving host
|
|
21
|
+
and consumer retains its own runtime/data authority and consumed attempt limits.
|
|
22
|
+
Installation and a release notice do not authorize activation.
|
|
23
|
+
|
|
24
|
+
Preserve journal bytes, writer stamps and durable initialization/replacement
|
|
25
|
+
receipts. Downgrading an older reader is not a recovery route after newer writes.
|
|
26
|
+
Use a compatible qualified CLI with fresh ownership proof for authorized recovery;
|
|
27
|
+
never erase or edit state to bypass refusal or rearm an attempt.
|
|
28
|
+
|
|
29
|
+
## Validation
|
|
30
|
+
|
|
31
|
+
1. Verify selected package integrity, executable bytes/version and existing local
|
|
32
|
+
guidance. Run native checks for the actual consumer edits.
|
|
33
|
+
2. Use canonical exact-checkout ensure only under the receiving owner's separate
|
|
34
|
+
runtime authority. Diagnostic startup guidance is advice, not approval or proof
|
|
35
|
+
that all startup preconditions hold. Retain known refusals and unknown outcomes.
|
|
36
|
+
3. Any separately authorized runtime work ends with canonical stop and exact
|
|
37
|
+
provider/container/route/worker proof, unless explicitly retained by the user.
|
|
38
|
+
|
|
39
|
+
## Report
|
|
40
|
+
|
|
41
|
+
Report the exact selected package and executable identities, participating-client
|
|
42
|
+
adoption and remaining unknowns, relevant checks and any actual runtime terminal.
|
|
43
|
+
Keep release/package proof distinct from consumer recovery. This patch's
|
|
44
|
+
qualification does not add provider combinations, maintenance/reset support,
|
|
45
|
+
consumer data acceptance or permission for another runtime attempt.
|
|
@@ -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.
|