@devrouter/cli 0.0.79 → 0.1.0
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 +284 -50
- package/dist/devrouter.js +1396 -224
- package/package.json +4 -1
- package/upgrade-prompts/0.0.80.md +63 -0
- package/upgrade-prompts/0.1.0.md +69 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devrouter/cli",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
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",
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
"qualify:capacity": "node --import tsx scripts/qualify-capacity.ts",
|
|
52
52
|
"qualify:controller": "node --import tsx scripts/qualify-controller.ts",
|
|
53
53
|
"qualify:stop-drift": "node --import tsx scripts/qualify-config-drift-stop.ts",
|
|
54
|
+
"qualify:harness-journey": "./scripts/qualify-harness-journey.sh",
|
|
55
|
+
"qualify:codex-journey": "DR_JOURNEY_HARNESS=codex ./scripts/qualify-harness-journey.sh",
|
|
56
|
+
"qualify:non-node": "./scripts/qualify-non-node-consumer.sh",
|
|
54
57
|
"test:process": "bash scripts/test-devrouter-process.sh",
|
|
55
58
|
"check": "biome check .",
|
|
56
59
|
"check:fix": "biome check --write .",
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Upgrade to devrouter 0.0.80
|
|
2
|
+
|
|
3
|
+
This release makes Devsy maintenance routine instead of disruptive. Devrouter
|
|
4
|
+
now supports installed Devsy releases in the range `>=1.16.2 <2.0.0`: an
|
|
5
|
+
explicit `setup --workspace-runtime devsy` verifies the official Linux agent
|
|
6
|
+
for the installed release against the SHA-256 digest GitHub publishes, records
|
|
7
|
+
the manifest in Devrouter machine state, and injects it, while `doctor` and
|
|
8
|
+
`ensure` stay network-free. An in-range release with no recorded manifest is
|
|
9
|
+
accepted with a drift warning and nothing injected, so a Devsy update no longer
|
|
10
|
+
blocks a managed start. The release also reworks the harness gate wait budget,
|
|
11
|
+
adds a `devrouter capacity reconcile` recovery, names the router holder in
|
|
12
|
+
host-port conflicts, accepts worktree-owned dependency-overlay upstreams, and
|
|
13
|
+
adds the `global.cli-path` install comparison to `doctor`.
|
|
14
|
+
|
|
15
|
+
## Task
|
|
16
|
+
|
|
17
|
+
Use the published 0.0.80 CLI. Update the repository `devrouter.version`
|
|
18
|
+
metadata only when consumer source changes are authorized, and refresh generated
|
|
19
|
+
agent guidance only with its owner's authority. No schema, journal or
|
|
20
|
+
configuration migration is needed.
|
|
21
|
+
|
|
22
|
+
Operating changes that matter for scripts, agents and operators:
|
|
23
|
+
|
|
24
|
+
- **Devsy agent.** Run `devrouter setup --yes --workspace-runtime devsy` once
|
|
25
|
+
per installed Devsy release, and rerun it after a Devsy update, to verify and
|
|
26
|
+
inject the official agent for that release. Until a release's manifest is
|
|
27
|
+
recorded, `doctor` reports `ready` with a drift warning and
|
|
28
|
+
`source=host`: the host CLI governs its own agent and Devrouter injects
|
|
29
|
+
nothing. A version outside the supported range, or an unparseable one, still
|
|
30
|
+
fails before the provider queue, and an explicit `DEVSY_AGENT_BINARY` must
|
|
31
|
+
match the official asset for the installed release.
|
|
32
|
+
- **Harness gate.** A `PreToolUse` hook timeout must exceed
|
|
33
|
+
`--wait-budget-ms`. The budget now measures only the actual wait, and a call
|
|
34
|
+
the harness re-delivers with the same `tool_use_id` returns one refusal that
|
|
35
|
+
names the earlier decision instead of waiting again.
|
|
36
|
+
- **Capacity recovery.** `devrouter capacity reconcile --yes` replaces a
|
|
37
|
+
provably absent ledger with a fresh baseline. It refuses without `--yes` and
|
|
38
|
+
while any journal binding remains; treat it as operator recovery, not routine
|
|
39
|
+
maintenance.
|
|
40
|
+
- **Multiple installs.** `doctor` reports `global.cli-path`. Upgrade every
|
|
41
|
+
`devrouter` install on PATH so a stale binary cannot run lifecycle rules
|
|
42
|
+
against state a newer version wrote.
|
|
43
|
+
|
|
44
|
+
## Validation
|
|
45
|
+
|
|
46
|
+
Confirm the resolved executable and installed version from a consumer checkout,
|
|
47
|
+
and check `global.cli-path` reports no stale or divergent install. Confirm
|
|
48
|
+
`global.devsy-agent` reports `ready`; before `setup` records the installed
|
|
49
|
+
release, expect the non-blocking drift warning, and after it expect the recorded
|
|
50
|
+
manifest with no network access at `ensure` time. Parse command JSON from
|
|
51
|
+
stdout only, because `ensure` and `stop` still stream bounded phase progress
|
|
52
|
+
on stderr. Exercise `capacity reconcile` or a stuck `stopping` settlement
|
|
53
|
+
only with operator authority, and require each operation's own terminal
|
|
54
|
+
evidence.
|
|
55
|
+
|
|
56
|
+
## Report
|
|
57
|
+
|
|
58
|
+
Report the release revision, resolved executable, installed version, the Devsy
|
|
59
|
+
agent and `global.cli-path` diagnostics, the manifest origin reported after
|
|
60
|
+
`setup`, and the terminal result of any authorized lifecycle or capacity
|
|
61
|
+
operation. Keep source and package validation separate from consumer readiness,
|
|
62
|
+
and record unknown ownership or ledger evidence as unresolved rather than as
|
|
63
|
+
recovered.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Upgrade to devrouter 0.1.0
|
|
2
|
+
|
|
3
|
+
This release is the first stable cut of the reliability program. The managed
|
|
4
|
+
lifecycle is now driven by durable intent instead of a live CLI process, capacity
|
|
5
|
+
admission refuses instead of guessing when its evidence is incomplete, and the
|
|
6
|
+
agent harness gate serves Claude Code and the Codex CLI in the shape each of them
|
|
7
|
+
accepts.
|
|
8
|
+
|
|
9
|
+
## What changed for a consumer
|
|
10
|
+
|
|
11
|
+
- A managed `stop` whose physical cessation is proven against a positively
|
|
12
|
+
absent capacity ledger now completes instead of staying in `stopping`
|
|
13
|
+
forever. An intact ledger keeps today's settlement and revision fencing, and
|
|
14
|
+
every other ledger classification still refuses.
|
|
15
|
+
- `devrouter capacity reconcile --yes [--json]` is the explicit forward
|
|
16
|
+
recovery for a provably absent ledger. It refuses without `--yes`, while any
|
|
17
|
+
journal binding remains, and when a declared runtime domain cannot be observed.
|
|
18
|
+
- `devrouter doctor` reports `global.cli-path` when another `devrouter` on
|
|
19
|
+
PATH is newer than the running CLI or when the shell resolves a different
|
|
20
|
+
install. Keep one install authoritative before trusting lifecycle state.
|
|
21
|
+
- `devrouter harness gate` defers one agent tool call while the checkout's
|
|
22
|
+
durable phase is `queued`, `starting`, `verifying`, `recovering` or
|
|
23
|
+
`stopping`, waits inside the hook process with no model turns, and refuses
|
|
24
|
+
once with recovery guidance when the budget runs out. It identifies the
|
|
25
|
+
requesting harness from its payload: Claude Code receives
|
|
26
|
+
`permissionDecision: allow`, the Codex CLI receives the same guidance as
|
|
27
|
+
`additionalContext` because it reports an `allow` decision as unsupported
|
|
28
|
+
hook output. A re-delivered call returns one refusal that names the earlier
|
|
29
|
+
decision instead of repeating a command that may already have run.
|
|
30
|
+
- A fixed host-port conflict whose holder is the shared `devrouter-traefik`
|
|
31
|
+
router names the consumer's own published binding as the side to change instead
|
|
32
|
+
of telling the agent to stop the router.
|
|
33
|
+
- Managed `ensure` accepts a devnet upstream served by any Compose project owned
|
|
34
|
+
by the exact worktree, while a container owned by a different worktree or by a
|
|
35
|
+
shared project outside the checkout is still refused.
|
|
36
|
+
|
|
37
|
+
## Task
|
|
38
|
+
|
|
39
|
+
Use the published 0.1.0 CLI. Update the repository `devrouter.version` metadata
|
|
40
|
+
only when consumer source changes are authorized, and refresh generated agent
|
|
41
|
+
guidance only with its owner's authority. No schema, command, flag, environment
|
|
42
|
+
or journal migration is needed, and the upgrade rewrites no runtime state.
|
|
43
|
+
|
|
44
|
+
Two operating notes matter for scripts and agents:
|
|
45
|
+
|
|
46
|
+
- `ensure` and `stop` write bounded progress lines to stderr. Parse JSON from
|
|
47
|
+
stdout only; do not merge the streams before parsing.
|
|
48
|
+
- Capacity admission, parking consent and automatic recovery stay inert unless an
|
|
49
|
+
operator enables them. Nothing in this release starts, stops or parks a
|
|
50
|
+
consumer environment on its own.
|
|
51
|
+
|
|
52
|
+
## Validation
|
|
53
|
+
|
|
54
|
+
Verify the resolved executable and installed version, then run `devrouter
|
|
55
|
+
doctor` and confirm `global.cli-path` reports one authoritative install and no
|
|
56
|
+
newer shadow copy. For an authorized managed checkout, run `devrouter status`
|
|
57
|
+
and confirm the reported intent, phase, capacity state and attention reason agree
|
|
58
|
+
with the runtime you observe. Require each lifecycle operation's own terminal
|
|
59
|
+
evidence: a status block or a progress line is not stop or ensure success. When
|
|
60
|
+
the gate is wired, prove it once in the harness you use by gating a harmless
|
|
61
|
+
command against a settled checkout.
|
|
62
|
+
|
|
63
|
+
## Report
|
|
64
|
+
|
|
65
|
+
Report the release revision, the executable and installed version, the
|
|
66
|
+
CLI-path diagnostics, the status block for any affected checkout, and the
|
|
67
|
+
terminal result of any authorized lifecycle operation. Keep source and package
|
|
68
|
+
validation separate from consumer readiness or recovery, and record unknown
|
|
69
|
+
ownership or surviving resources as unresolved rather than as recovered.
|