Repository navigation
Commit df529b8
feat: add
One command to reinstall the CLI globally at the latest published version,
equivalent to `npm install -g claude-code-model-router@latest`.
Two rules in here are one line each and non-obvious:
- versions are compared numerically, not lexically. String comparison puts
"1.9.0" above "1.10.0", which would tell a user on 1.9.0 they are already
current.
- a local build ahead of the registry counts as up to date. This repo
routinely runs unpublished versions, and a plain "differs -> install"
rule would silently downgrade the developer. Not hypothetical: the first
real --check run hit exactly this (local 1.19.0 vs registry 1.18.0).
--package-manager becomes argv[0] of a spawned process, so it is checked
against a whitelist (npm/pnpm/yarn/bun) rather than forwarded; the package
name and @latest are literals and the spawn uses an argv array with
shell:false. Verified by passing `rm -rf /` and watching it be refused.
npm's output is inherited rather than captured, because its permission
errors (EACCES, prefix problems) are the whole diagnosis in the failure case.
On success the command scans for running gateways still on the old version
and tells the user which ports to restart -- a package upgrade is not config
hot-reload -- without stopping processes it does not own.
The registry lookup uses the built-in fetch (no dependency, no npm subprocess
to read one field) and is tested against a local HTTP stub covering the 200,
503 and missing-version paths, so the suite stays offline.ccmr update for self-updating from npm, v1.20.01 parent 403fd74 commit df529b8
12 files changed
Lines changed: 581 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
86 | 91 | | |
87 | 92 | | |
88 | 93 | | |
| |||
543 | 548 | | |
544 | 549 | | |
545 | 550 | | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
546 | 560 | | |
547 | 561 | | |
548 | 562 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
0 commit comments