@wwkit/opm 1.0.1

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.
Files changed (62) hide show
  1. package/README.md +381 -0
  2. package/bin/index.js +9 -0
  3. package/docs/managers/apt.md +45 -0
  4. package/docs/managers/brew.md +92 -0
  5. package/docs/managers/bun.md +50 -0
  6. package/docs/managers/cft.md +57 -0
  7. package/docs/managers/composer.md +96 -0
  8. package/docs/managers/config.md +32 -0
  9. package/docs/managers/dnf.md +46 -0
  10. package/docs/managers/node.md +49 -0
  11. package/docs/managers/npm.md +100 -0
  12. package/docs/managers/nvm.md +34 -0
  13. package/docs/managers/php.md +48 -0
  14. package/docs/managers/phpenv.md +34 -0
  15. package/docs/managers/pip.md +98 -0
  16. package/docs/managers/python.md +53 -0
  17. package/docs/managers/uv.md +27 -0
  18. package/docs/opm.html +570 -0
  19. package/docs/packages/opencode.md +41 -0
  20. package/package.json +51 -0
  21. package/scripts/postinstall.js +7 -0
  22. package/src/binaries/base.js +508 -0
  23. package/src/binaries/cft/index.js +35 -0
  24. package/src/binaries/depchecker.js +172 -0
  25. package/src/binaries/exefinder.js +110 -0
  26. package/src/binaries/platform.js +17 -0
  27. package/src/cli/doc.js +335 -0
  28. package/src/cli/groups/config.js +78 -0
  29. package/src/cli/groups/ensure.js +96 -0
  30. package/src/cli/groups/homebrew.js +73 -0
  31. package/src/cli/groups/nvm.js +73 -0
  32. package/src/cli/groups/package.js +514 -0
  33. package/src/cli/groups/phpenv.js +89 -0
  34. package/src/cli/groups/uv.js +73 -0
  35. package/src/cli/groups/version-manager.js +186 -0
  36. package/src/cli/helpers/args.js +49 -0
  37. package/src/cli/index.js +129 -0
  38. package/src/config.js +133 -0
  39. package/src/config.json5 +158 -0
  40. package/src/formatter.js +13 -0
  41. package/src/harnesses/base.js +205 -0
  42. package/src/harnesses/opencode/clear.js +239 -0
  43. package/src/harnesses/opencode/db.js +39 -0
  44. package/src/harnesses/opencode/index.js +46 -0
  45. package/src/harnesses/opencode/sqlite.js +200 -0
  46. package/src/index.js +46 -0
  47. package/src/managers/apt.js +377 -0
  48. package/src/managers/base.js +167 -0
  49. package/src/managers/brew.js +374 -0
  50. package/src/managers/bun.js +342 -0
  51. package/src/managers/composer.js +280 -0
  52. package/src/managers/dnf.js +370 -0
  53. package/src/managers/http.js +432 -0
  54. package/src/managers/node.js +150 -0
  55. package/src/managers/npm.js +473 -0
  56. package/src/managers/php.js +157 -0
  57. package/src/managers/pip.js +555 -0
  58. package/src/managers/python.js +180 -0
  59. package/src/managers/runtime.js +309 -0
  60. package/src/managers/winget.js +268 -0
  61. package/src/presets.js +24 -0
  62. package/src/proxy-presets.js +12 -0
package/docs/opm.html ADDED
@@ -0,0 +1,570 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>OPM — Once Package Manager</title>
7
+ <style>
8
+ :root {
9
+ --bg: #ffffff;
10
+ --bg-soft: #f8f9fb;
11
+ --bg-sidebar: #1a1b26;
12
+ --bg-header: #1a1b26;
13
+ --text: #1e2030;
14
+ --text-soft: #6b7290;
15
+ --text-sidebar: #a9b1d6;
16
+ --text-sidebar-dim: #565f89;
17
+ --accent: #7aa2f7;
18
+ --accent-soft: #b4f9f8;
19
+ --border: #e2e4ee;
20
+ --code-bg: #1a1b26;
21
+ --code-text: #c0caf5;
22
+ }
23
+ * { margin: 0; padding: 0; box-sizing: border-box; }
24
+ html, body { height: 100%; }
25
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans SC", sans-serif; display: flex; flex-direction: column; height: 100vh; }
26
+
27
+ /* ---- header ---- */
28
+ #header {
29
+ height: 52px; flex-shrink: 0;
30
+ background: var(--bg-header);
31
+ display: flex; align-items: center; gap: 12px;
32
+ padding: 0 24px;
33
+ box-shadow: 0 1px 4px rgba(0,0,0,.15);
34
+ z-index: 10;
35
+ }
36
+ #header .logo {
37
+ font-size: 13px; font-weight: 700; letter-spacing: 1px;
38
+ color: #1a1b26; background: var(--accent);
39
+ padding: 3px 10px; border-radius: 4px;
40
+ }
41
+ #header .title { color: #c0caf5; font-size: 15px; font-weight: 500; }
42
+ #header .title .sub { color: var(--text-sidebar-dim); font-size: 13px; margin-left: 8px; }
43
+
44
+ /* ---- body layout ---- */
45
+ #body-row { display: flex; flex: 1; overflow: hidden; }
46
+
47
+ /* ---- sidebar ---- */
48
+ #sidebar { width: 220px; background: var(--bg-sidebar); overflow-y: auto; padding: 8px 0; flex-shrink: 0; }
49
+ .menu-category { padding: 10px 16px 4px; font-size: 10px; text-transform: uppercase; letter-spacing: .5px; color: var(--text-sidebar-dim); }
50
+ .menu-item { display: block; padding: 5px 20px; color: var(--text-sidebar); text-decoration: none; font-size: 13px; border-left: 2px solid transparent; transition: background .15s, border-color .15s; }
51
+ .menu-item:hover { background: rgba(122,162,247,.08); }
52
+ .menu-item.active { border-left-color: var(--accent); color: var(--accent); background: rgba(122,162,247,.06); }
53
+
54
+ /* ---- content ---- */
55
+ #content { flex: 1; overflow-y: auto; padding: 28px 40px; background: var(--bg); }
56
+ .doc-content { width: 100%; }
57
+
58
+ .doc-content h1 { margin: 20px 0 14px; font-size: 24px; font-weight: 700; color: var(--text); border-bottom: 2px solid var(--accent); padding-bottom: 8px; }
59
+ .doc-content h2 { margin: 18px 0 10px; font-size: 19px; font-weight: 600; color: var(--text); }
60
+ .doc-content h3 { margin: 14px 0 8px; font-size: 16px; font-weight: 600; color: var(--text); }
61
+ .doc-content p { margin: 8px 0; line-height: 1.7; color: var(--text); font-size: 14px; }
62
+ .doc-content a { color: var(--accent); text-decoration: none; }
63
+ .doc-content a:hover { text-decoration: underline; }
64
+ .doc-content strong { font-weight: 600; }
65
+
66
+ /* table */
67
+ .doc-content table { border-collapse: collapse; width: 100%; margin: 14px 0; font-size: 13px; box-shadow: 0 1px 3px rgba(0,0,0,.06); }
68
+ .doc-content th, .doc-content td { border: 1px solid var(--border); padding: 8px 12px; text-align: left; }
69
+ .doc-content th { background: var(--bg-soft); font-weight: 600; color: var(--text); white-space: nowrap; }
70
+ .doc-content td { color: var(--text); }
71
+ .doc-content tbody tr:hover { background: rgba(122,162,247,.04); }
72
+ .doc-content td code { white-space: nowrap; }
73
+
74
+ /* code */
75
+ .doc-content pre { background: var(--code-bg); color: var(--code-text); padding: 14px 18px; border-radius: 8px; overflow-x: auto; margin: 14px 0; font-size: 13px; line-height: 1.5; box-shadow: 0 2px 8px rgba(0,0,0,.1); }
76
+ .doc-content pre code { font-family: "SF Mono", "Fira Code", Menlo, monospace; }
77
+ .doc-content code { font-family: "SF Mono", "Fira Code", Menlo, monospace; font-size: 12.5px; background: var(--bg-soft); padding: 1px 5px; border-radius: 3px; color: #db4b4b; }
78
+ .doc-content pre code { background: none; color: inherit; padding: 0; border-radius: 0; font-size: inherit; }
79
+
80
+ /* list */
81
+ .doc-content ul { margin: 8px 0 8px 22px; }
82
+ .doc-content li { margin: 5px 0; color: var(--text); font-size: 14px; line-height: 1.6; }
83
+
84
+ /* blockquote */
85
+ .doc-content blockquote { border-left: 3px solid var(--accent); padding: 6px 14px; margin: 10px 0; background: var(--bg-soft); border-radius: 0 4px 4px 0; color: var(--text-soft); font-size: 13px; }
86
+ </style>
87
+ </head>
88
+ <body>
89
+ <div id="header">
90
+ <span class="logo">OPM</span>
91
+ <span class="title">Once Package Manager<span class="sub">— unified CLI docs</span></span>
92
+ </div>
93
+ <div id="body-row">
94
+ <div id="sidebar">
95
+ <div class="menu-category">managers</div>
96
+ <a class="menu-item" href="#" onclick="show('managers_apt');return false;">apt</a>
97
+ <a class="menu-item" href="#" onclick="show('managers_brew');return false;">brew</a>
98
+ <a class="menu-item" href="#" onclick="show('managers_bun');return false;">bun</a>
99
+ <a class="menu-item" href="#" onclick="show('managers_cft');return false;">cft</a>
100
+ <a class="menu-item" href="#" onclick="show('managers_composer');return false;">composer</a>
101
+ <a class="menu-item" href="#" onclick="show('managers_config');return false;">config</a>
102
+ <a class="menu-item" href="#" onclick="show('managers_dnf');return false;">dnf</a>
103
+ <a class="menu-item" href="#" onclick="show('managers_node');return false;">node</a>
104
+ <a class="menu-item" href="#" onclick="show('managers_npm');return false;">npm</a>
105
+ <a class="menu-item" href="#" onclick="show('managers_nvm');return false;">nvm</a>
106
+ <a class="menu-item" href="#" onclick="show('managers_php');return false;">php</a>
107
+ <a class="menu-item" href="#" onclick="show('managers_phpenv');return false;">phpenv</a>
108
+ <a class="menu-item" href="#" onclick="show('managers_pip');return false;">pip</a>
109
+ <a class="menu-item" href="#" onclick="show('managers_python');return false;">python</a>
110
+ <a class="menu-item" href="#" onclick="show('managers_uv');return false;">uv</a>
111
+ <div class="menu-category">packages</div>
112
+ <a class="menu-item" href="#" onclick="show('packages_opencode');return false;">opencode</a>
113
+ </div>
114
+ <div id="content">
115
+ <div id="managers_apt" class="doc-content" style="display:block;"><h1>apt 命令对照表</h1>
116
+ <p><code>@wwkit/opm</code> 统一命令管理 apt 包(Debian / Ubuntu 等 dpkg 系,系统级)。</p>
117
+ <h2>命令对照</h2>
118
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm apt version</code></td><td><code>apt --version</code></td><td>查看 apt 版本</td></tr><tr><td><code>opm apt registry</code></td><td>读 <code>/etc/apt/sources.list.d/opm.list</code></td><td>查询当前启用源</td></tr><tr><td><code>opm apt registry set &lt;url|preset&gt;</code></td><td>写 <code>/etc/apt/sources.list.d/opm.list</code> + <code>apt update</code></td><td>设置镜像源</td></tr><tr><td><code>opm apt registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm apt search &lt;name&gt;</code></td><td><code>apt-cache search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm apt view &lt;name&gt;</code></td><td><code>dpkg -l</code> / <code>apt list --installed</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm apt info &lt;name&gt;</code></td><td><code>apt-cache show</code></td><td>包详情</td></tr><tr><td><code>opm apt versions &lt;name&gt;</code></td><td><code>apt-cache madison</code> / <code>policy</code></td><td>所有可用版本</td></tr><tr><td><code>opm apt list</code></td><td><code>apt list --installed</code></td><td>已安装包列表</td></tr><tr><td><code>opm apt outdated</code></td><td><code>apt list --upgradable</code></td><td>过期包</td></tr><tr><td><code>opm apt install &lt;name&gt;</code></td><td><code>apt install</code></td><td>安装</td></tr><tr><td><code>opm apt uninstall &lt;name&gt;</code></td><td><code>apt remove</code></td><td>卸载</td></tr><tr><td><code>opm apt upgrade &lt;name&gt;</code></td><td><code>apt upgrade</code></td><td>升级</td></tr><tr><td><code>opm apt cache clean</code></td><td><code>apt clean</code></td><td>清理缓存</td></tr></tbody></table>
119
+ <h2>镜像预设</h2>
120
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>ubuntu-tsinghua</code></td><td><code>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>ubuntu-huawei</code></td><td><code>deb https://mirrors.huaweicloud.com/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>ubuntu-aliyun</code></td><td><code>deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>debian-official</code></td><td><code>deb http://deb.debian.org/debian/ bookworm main</code></td></tr><tr><td><code>debian-tsinghua</code></td><td><code>deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main</code></td></tr></tbody></table>
121
+ <h2>示例</h2>
122
+ <pre><code class="lang-bash">opm apt version
123
+ opm apt registry set ubuntu-tsinghua
124
+ opm apt search curl
125
+ opm apt info curl
126
+ opm apt install htop
127
+ opm apt uninstall htop
128
+ opm apt upgrade htop
129
+ opm apt cache clean</code></pre></div>
130
+ <div id="managers_brew" class="doc-content" style="display:none;"><h1>brew 命令对照表</h1>
131
+ <p><code>@wwkit/opm</code> 统一命令与 Homebrew 原始命令的映射关系(macOS)。</p>
132
+ <h2>命令对照</h2>
133
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm brew version</code></td><td><code>brew --version</code></td><td>查看 brew 本身版本</td></tr><tr><td><code>opm brew registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm brew registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动传 <code>HOMEBREW_API_DOMAIN</code> / <code>HOMEBREW_BOTTLE_DOMAIN</code>;仅作用于本工具发起的命令,不改系统 brew 配置)</td></tr><tr><td><code>opm brew registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm brew search &lt;name&gt;</code></td><td><code>brew info --json=v2 &lt;name&gt;</code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm brew search &lt;name&gt; &lt;version&gt;</code></td><td><code>brew info --json=v2 &lt;name&gt;</code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm brew view &lt;name&gt;</code></td><td><code>brew list --versions &lt;name&gt;</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm brew info &lt;name&gt;</code></td><td><code>brew info --json=v2 &lt;name&gt;</code></td><td>查询包详情(描述/主页/许可证/仓库等)</td></tr><tr><td><code>opm brew versions &lt;name&gt;</code></td><td><code>brew info --json=v2 &lt;name&gt;</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm brew list</code></td><td><code>brew list --versions</code></td><td>列出所有已安装包(formulae + casks)</td></tr><tr><td><code>opm brew outdated</code></td><td><code>brew outdated --json=v2</code></td><td>列出过期包</td></tr><tr><td><code>opm brew install &lt;name&gt;</code></td><td><code>brew install &lt;name&gt;</code></td><td>安装包(formula / cask 均可)</td></tr><tr><td><code>opm brew install &lt;name&gt; &lt;version&gt;</code></td><td><code>brew install &lt;name&gt;@&lt;version&gt;</code></td><td>安装指定版本(versioned formula)</td></tr><tr><td><code>opm brew uninstall &lt;name&gt;</code></td><td><code>brew uninstall &lt;name&gt;</code></td><td>卸载包</td></tr><tr><td><code>opm brew upgrade &lt;name&gt;</code></td><td><code>brew upgrade &lt;name&gt;</code></td><td>升级包到最新版本</td></tr><tr><td><code>opm brew cache clean</code></td><td><code>brew cleanup -s --prune=all</code></td><td>清理缓存</td></tr><tr><td><code>opm brew help</code></td><td>—</td><td>显示 brew 命令清单</td></tr></tbody></table>
134
+ <h2>镜像预设</h2>
135
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://ghcr.io/v2/homebrew</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles</code></td></tr><tr><td><code>ustc</code></td><td><code>https://mirrors.ustc.edu.cn/homebrew-bottles</code></td></tr></tbody></table>
136
+ <blockquote>镜像预设记录的是 bottle 域名;使用非 official 镜像时,<code>HOMEBREW_API_DOMAIN</code> 取 <code>${bottle}/api</code>,<code>HOMEBREW_BOTTLE_DOMAIN</code> 取 bottle 域名本身。</blockquote>
137
+ <h2>选项</h2>
138
+ <table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><code>-h, --help</code></td><td>显示帮助</td></tr></tbody></table>
139
+ <blockquote>所有命令默认以 JSON 格式输出。</blockquote>
140
+ <h2>示例</h2>
141
+ <pre><code class="lang-bash"># 查看 brew 版本
142
+ opm brew version
143
+
144
+ # 查询当前镜像
145
+ opm brew registry
146
+
147
+ # 切换到清华镜像
148
+ opm brew registry set tsinghua
149
+
150
+ # 查询 wget 是否在源中可用
151
+ opm brew search wget
152
+
153
+ # 查看 wget 是否已安装
154
+ opm brew view wget
155
+
156
+ # 查看 wget 详情
157
+ opm brew info wget
158
+
159
+ # 列出 wget 所有可用版本
160
+ opm brew versions wget
161
+
162
+ # 列出所有已安装包
163
+ opm brew list
164
+
165
+ # 列出过期包
166
+ opm brew outdated
167
+
168
+ # 安装 wget
169
+ opm brew install wget
170
+
171
+ # 安装指定版本(versioned formula,如 python@3.12)
172
+ opm brew install python 3.12
173
+
174
+ # 卸载 wget
175
+ opm brew uninstall wget
176
+
177
+ # 升级 wget
178
+ opm brew upgrade wget
179
+
180
+ # 清理缓存
181
+ opm brew cache clean
182
+
183
+ # 显示帮助
184
+ opm brew help</code></pre></div>
185
+ <div id="managers_bun" class="doc-content" style="display:none;"><h1>bun 命令对照表</h1>
186
+ <p><code>@wwkit/opm</code> 统一命令管理 Bun 包。</p>
187
+ <p>Bun 是全栈 JS 工具链(runtime + 包管理器 + 打包器),包管理与 npm 兼容。</p>
188
+ <h2>命令对照</h2>
189
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm bun version</code></td><td><code>bun --version</code></td><td>查看 bun 版本</td></tr><tr><td><code>opm bun registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>bun.registry.active</code></td><td>查询 bun registry 镜像</td></tr><tr><td><code>opm bun registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 bun registry 镜像(传给 <code>BUN_CONFIG_REGISTRY</code>)</td></tr><tr><td><code>opm bun registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm bun search &lt;name&gt; [version]</code></td><td>HTTP 查 npm registry</td><td>查询包是否可用</td></tr><tr><td><code>opm bun view &lt;name&gt; [-g]</code></td><td>查 <code>node_modules/&lt;name&gt;/package.json</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm bun info &lt;name&gt;</code></td><td>HTTP 查 npm registry</td><td>显示包详情</td></tr><tr><td><code>opm bun versions &lt;name&gt;</code></td><td>HTTP 查 npm registry</td><td>列出所有可用版本</td></tr><tr><td><code>opm bun list [-g]</code></td><td><code>bun pm ls</code></td><td>列出已安装包</td></tr><tr><td><code>opm bun outdated [-g]</code></td><td><code>bun outdated</code></td><td>列出过期包</td></tr><tr><td><code>opm bun install &lt;name&gt; [version]</code></td><td><code>bun add &lt;name&gt;@&lt;version&gt;</code></td><td>安装包</td></tr><tr><td><code>opm bun uninstall &lt;name&gt;</code></td><td><code>bun remove &lt;name&gt;</code></td><td>卸载包</td></tr><tr><td><code>opm bun upgrade &lt;name&gt;</code></td><td><code>bun update &lt;name&gt;</code></td><td>升级包</td></tr><tr><td><code>opm bun cache clean</code></td><td><code>bun pm cache rm</code></td><td>清理缓存</td></tr></tbody></table>
190
+ <h2>镜像预设</h2>
191
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://registry.npmjs.org/</code></td></tr><tr><td><code>taobao</code></td><td><code>https://registry.npmmirror.com/</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-central-repo/</code></td></tr></tbody></table>
192
+ <blockquote>镜像通过 <code>BUN_CONFIG_REGISTRY</code> 环境变量传递给 bun 命令。</blockquote>
193
+ <h2>示例</h2>
194
+ <pre><code class="lang-bash">opm bun version
195
+ opm bun registry set taobao
196
+ opm bun search axios
197
+ opm bun info react
198
+ opm bun list
199
+ opm bun outdated
200
+ opm bun install axios
201
+ opm bun install react@18
202
+ opm bun upgrade axios
203
+ opm bun uninstall axios
204
+ opm bun cache clean</code></pre></div>
205
+ <div id="managers_cft" class="doc-content" style="display:none;"><h1>cft 命令对照表</h1>
206
+ <p><code>@wwkit/opm</code> 统一命令管理 Chrome for Testing 二进制工具(chrome + chromedriver)的下载、解压、多版本安装。</p>
207
+ <h2>命令对照</h2>
208
+ <table><thead><tr><th>统一命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm cft version</code></td><td>查看当前激活版本</td></tr><tr><td><code>opm cft installed</code></td><td>查看是否已安装(列出本地版本)</td></tr><tr><td><code>opm cft dir</code></td><td>查看激活版本安装目录 + chrome/chromedriver 路径(供外部消费)</td></tr><tr><td><code>opm cft versions</code></td><td>列出远程可用版本(known-good-versions-with-downloads.json)</td></tr><tr><td><code>opm cft list</code></td><td>列出本地已安装版本</td></tr><tr><td><code>opm cft install [version]</code></td><td>安装指定版本(缺省 = <code>config.cft.version</code>);同版本已装跳过;设为 active</td></tr><tr><td><code>opm cft status [version]</code></td><td>查看版本安装状态/二进制文件校验(缺省 = 全部)</td></tr><tr><td><code>opm cft clear [version]</code></td><td>删除指定版本安装产物;不传 = 清理所有版本</td></tr><tr><td><code>opm cft registry</code></td><td>查询激活镜像(读 <code>~/.config/opm/config.json5</code> 的 <code>cft.registry.active</code>)</td></tr><tr><td><code>opm cft registry set &lt;url|preset&gt;</code></td><td>设置激活镜像</td></tr><tr><td><code>opm cft registry presets</code></td><td>列出可用镜像预设</td></tr></tbody></table>
209
+ <h2>镜像预设</h2>
210
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://googlechromelabs.github.io/chrome-for-testing</code></td></tr><tr><td><code>npmmirror</code></td><td><code>https://npmmirror.com/mirrors/chrome-for-testing</code></td></tr></tbody></table>
211
+ <p>默认 <code>active</code> = <code>npmmirror</code>(镜像,非 official)。</p>
212
+ <h2>安装目录</h2>
213
+ <p><code>~/.config/opm/cft/&lt;version&gt;/</code>(尊重 <code>OPM_CONFIG_DIR</code>)</p>
214
+ <pre><code class="lang-">~/.config/opm/cft/
215
+ manifest.json { active: "141.0.7390.54" }
216
+ &lt;version&gt;/
217
+ chrome-&lt;os&gt;/
218
+ chromedriver-&lt;os&gt;/
219
+ installed.json</code></pre>
220
+ <h2>示例</h2>
221
+ <pre><code class="lang-bash">opm cft version
222
+ opm cft dir
223
+ opm cft list
224
+ opm cft versions
225
+ opm cft install
226
+ opm cft install 141.0.7390.54
227
+ opm cft status
228
+ opm cft status 141.0.7390.54
229
+ opm cft clear 141.0.7390.54
230
+ opm cft clear
231
+ opm cft registry set official</code></pre></div>
232
+ <div id="managers_composer" class="doc-content" style="display:none;"><h1>composer 命令对照表</h1>
233
+ <p><code>@wwkit/opm</code> 统一命令与 Composer(PHP)原始命令的映射关系。</p>
234
+ <h2>命令对照</h2>
235
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm composer version</code></td><td><code>composer --version</code></td><td>查看 composer 本身版本</td></tr><tr><td><code>opm composer registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm composer registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>设置激活镜像(支持预设名;镜像作用于 search/info/versions 的 P2 元数据拉取)</td></tr><tr><td><code>opm composer registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm composer search &lt;name&gt;</code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm composer search &lt;name&gt; &lt;version&gt;</code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm composer view &lt;name&gt;</code></td><td>读 <code>vendor/composer/installed.json</code></td><td>查询包是否已安装(项目本地)</td></tr><tr><td><code>opm composer info &lt;name&gt;</code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm composer versions &lt;name&gt;</code></td><td><code>{registry}/p2/{name}.json</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm composer list</code></td><td>读 <code>vendor/composer/installed.json</code></td><td>列出所有已安装包</td></tr><tr><td><code>opm composer outdated</code></td><td><code>composer outdated --format=json</code></td><td>列出过期包</td></tr><tr><td><code>opm composer install &lt;name&gt;</code></td><td><code>composer require &lt;name&gt; --no-interaction</code></td><td>安装包</td></tr><tr><td><code>opm composer install &lt;name&gt; &lt;version&gt;</code></td><td><code>composer require &lt;name&gt;:&lt;version&gt; --no-interaction</code></td><td>安装指定版本约束</td></tr><tr><td><code>opm composer uninstall &lt;name&gt;</code></td><td><code>composer remove &lt;name&gt; --no-interaction</code></td><td>卸载包</td></tr><tr><td><code>opm composer upgrade &lt;name&gt;</code></td><td><code>composer update &lt;name&gt; --no-interaction</code></td><td>升级包</td></tr><tr><td><code>opm composer cache clean</code></td><td><code>composer clear-cache</code></td><td>清理缓存</td></tr><tr><td><code>opm composer help</code></td><td>—</td><td>显示 composer 命令清单</td></tr></tbody></table>
236
+ <h2>镜像预设</h2>
237
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://repo.packagist.org</code></td></tr><tr><td><code>aliyun</code></td><td><code>https://mirrors.aliyun.com/composer</code></td></tr><tr><td><code>tencent</code></td><td><code>https://mirrors.cloud.tencent.com/composer</code></td></tr></tbody></table>
238
+ <blockquote>镜像作用于 search/info/versions 的 Packagist P2 元数据拉取(<code>{base}/p2/{vendor}/{package}.json</code>)。<br>install/upgrade 使用 composer CLI 自身的仓库配置(项目 composer.json / 全局 config)。</blockquote>
239
+ <h2>选项</h2>
240
+ <table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><code>-h, --help</code></td><td>显示帮助</td></tr></tbody></table>
241
+ <blockquote>所有命令默认以 JSON 格式输出。</blockquote>
242
+ <h2>示例</h2>
243
+ <pre><code class="lang-bash"># 查看 composer 版本
244
+ opm composer version
245
+
246
+ # 查询当前镜像
247
+ opm composer registry
248
+
249
+ # 切换到阿里云镜像
250
+ opm composer registry set aliyun
251
+
252
+ # 查询 monolog/monolog 是否在源中可用
253
+ opm composer search monolog/monolog
254
+
255
+ # 查询 monolog/monolog:3.9.0 是否可用
256
+ opm composer search monolog/monolog 3.9.0
257
+
258
+ # 查看 monolog/monolog 是否已安装
259
+ opm composer view monolog/monolog
260
+
261
+ # 查看 monolog/monolog 详情
262
+ opm composer info monolog/monolog
263
+
264
+ # 列出 monolog/monolog 所有可用版本
265
+ opm composer versions monolog/monolog
266
+
267
+ # 列出所有已安装包
268
+ opm composer list
269
+
270
+ # 列出过期包
271
+ opm composer outdated
272
+
273
+ # 安装 monolog/monolog
274
+ opm composer install monolog/monolog
275
+
276
+ # 安装指定版本约束
277
+ opm composer install monolog/monolog ^3.0
278
+
279
+ # 卸载 monolog/monolog
280
+ opm composer uninstall monolog/monolog
281
+
282
+ # 升级 monolog/monolog
283
+ opm composer upgrade monolog/monolog
284
+
285
+ # 清理缓存
286
+ opm composer cache clean
287
+
288
+ # 显示帮助
289
+ opm composer help</code></pre></div>
290
+ <div id="managers_config" class="doc-content" style="display:none;"><h1>config 命令对照</h1>
291
+ <p><code>@wwkit/opm</code> 统一命令查看合并后的用户配置。</p>
292
+ <h2>命令对照</h2>
293
+ <table><thead><tr><th>统一命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm config</code></td><td>显示合并后的完整配置(内置默认 → 用户 <code>~/.config/opm/config.json5</code> → <code>OPM_CONFIG_CONTENT</code>)</td></tr><tr><td><code>opm config proxy</code></td><td>查看代理预设 + <code>active</code>(空 = 不使用代理)</td></tr><tr><td><code>opm config &lt;section&gt;</code></td><td>查看任意段(如 <code>npm</code> / <code>npm.registry</code> / <code>composer</code> / <code>composer.registry</code>)</td></tr><tr><td><code>opm config &lt;未知段&gt;</code></td><td>报错并列出全部可用段名</td></tr></tbody></table>
294
+ <blockquote>可用段名由合并配置动态生成:每个 top-level 段 + 含 <code>registry</code> 的 <code>.registry</code> 子段。新增配置段无需改动代码。</blockquote>
295
+ <h2>配置合并顺序(低 → 高)</h2>
296
+ <p>1. 内置默认 <code>src/config.json5</code></p>
297
+ <p>2. 用户文件 <code>~/.config/opm/config.json5</code>(或 <code>$XDG_CONFIG_HOME/opm/config.json5</code>)</p>
298
+ <p>3. <code>OPM_CONFIG_CONTENT</code> 环境变量注入层</p>
299
+ <p>字符串中的 <code>{env:XXX}</code> 占位符会在读取时替换为环境变量。</p>
300
+ <h2>示例</h2>
301
+ <pre><code class="lang-bash">opm config
302
+ opm config proxy
303
+ opm config npm.registry
304
+ opm config node.registry
305
+ opm config python.registry</code></pre></div>
306
+ <div id="managers_dnf" class="doc-content" style="display:none;"><h1>dnf 命令对照表</h1>
307
+ <p><code>@wwkit/opm</code> 统一命令管理 dnf 包(Fedora / RHEL / EulerOS 等 rpm 系,系统级)。</p>
308
+ <h2>命令对照</h2>
309
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm dnf version</code></td><td><code>dnf --version</code></td><td>查看 dnf 版本</td></tr><tr><td><code>opm dnf registry</code></td><td>读 <code>/etc/yum.repos.d/opm.repo</code></td><td>查询当前启用仓库</td></tr><tr><td><code>opm dnf registry set &lt;url|preset&gt;</code></td><td>写 <code>/etc/yum.repos.d/opm.repo</code> + <code>dnf clean</code></td><td>设置镜像仓库</td></tr><tr><td><code>opm dnf registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm dnf search &lt;name&gt;</code></td><td><code>dnf search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm dnf view &lt;name&gt;</code></td><td><code>dnf list installed</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm dnf info &lt;name&gt;</code></td><td><code>dnf info</code></td><td>包详情</td></tr><tr><td><code>opm dnf versions &lt;name&gt;</code></td><td><code>dnf list --showduplicates</code></td><td>所有可用版本</td></tr><tr><td><code>opm dnf list</code></td><td><code>dnf list installed</code></td><td>已安装包列表</td></tr><tr><td><code>opm dnf outdated</code></td><td><code>dnf check-update</code></td><td>过期包</td></tr><tr><td><code>opm dnf install &lt;name&gt;</code></td><td><code>dnf install</code></td><td>安装</td></tr><tr><td><code>opm dnf uninstall &lt;name&gt;</code></td><td><code>dnf remove</code></td><td>卸载</td></tr><tr><td><code>opm dnf upgrade &lt;name&gt;</code></td><td><code>dnf upgrade</code></td><td>升级</td></tr><tr><td><code>opm dnf cache clean</code></td><td><code>dnf clean all</code></td><td>清理缓存</td></tr></tbody></table>
310
+ <h2>镜像预设</h2>
311
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>hce</code></td><td><code>http://his-mirrors.huawei.com/install/hce/2.0/os/x86_64/</code></td></tr><tr><td><code>hce-updates</code></td><td><code>http://his-mirrors.huawei.com/install/hce/2.0/updates/x86_64/</code></td></tr><tr><td><code>fedora</code></td><td><code>https://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/</code></td></tr><tr><td><code>fedora-updates</code></td><td><code>https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/</code></td></tr><tr><td><code>epel</code></td><td><code>https://dl.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/</code></td></tr><tr><td><code>epel-testing</code></td><td><code>https://dl.fedoraproject.org/pub/epel/testing/$releasever/Everything/$basearch/</code></td></tr></tbody></table>
312
+ <h2>示例</h2>
313
+ <pre><code class="lang-bash">opm dnf version
314
+ opm dnf registry set hce-updates
315
+ opm dnf search vim-enhanced
316
+ opm dnf info vim-enhanced
317
+ opm dnf install htop
318
+ opm dnf uninstall htop
319
+ opm dnf upgrade htop
320
+ opm dnf cache clean</code></pre></div>
321
+ <div id="managers_node" class="doc-content" style="display:none;"><h1>node 命令对照表</h1>
322
+ <p><code>@wwkit/opm</code> 统一命令通过 nvm 管理 Node.js 版本。</p>
323
+ <h2>命令对照</h2>
324
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm node version</code></td><td><code>nvm current</code></td><td>当前激活的 Node.js 版本</td></tr><tr><td><code>opm node registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>node.registry.active</code></td><td>查询 Node.js dist 镜像</td></tr><tr><td><code>opm node registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 Node.js dist 镜像(传给 <code>NVM_NODEJS_ORG_MIRROR</code>)</td></tr><tr><td><code>opm node registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm node search &lt;version&gt;</code></td><td><code>nvm ls-remote</code> 过滤</td><td>查询版本是否可下载</td></tr><tr><td><code>opm node view &lt;version&gt;</code></td><td><code>nvm ls</code> 过滤</td><td>查询版本是否已安装</td></tr><tr><td><code>opm node versions</code></td><td><code>nvm ls-remote</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm node list</code></td><td><code>nvm ls</code></td><td>列出已安装版本</td></tr><tr><td><code>opm node install &lt;version&gt;</code></td><td><code>nvm install &lt;version&gt;</code></td><td>安装 Node.js 版本</td></tr><tr><td><code>opm node uninstall &lt;version&gt;</code></td><td><code>nvm uninstall &lt;version&gt;</code></td><td>卸载 Node.js 版本</td></tr><tr><td><code>opm node upgrade</code></td><td><code>nvm install --lts</code></td><td>安装最新 LTS</td></tr><tr><td><code>opm node use &lt;version&gt;</code></td><td><code>nvm use &lt;version&gt;</code></td><td>切换当前版本</td></tr><tr><td><code>opm node current</code></td><td><code>nvm current</code></td><td>显示当前版本</td></tr><tr><td><code>opm node default &lt;version&gt;</code></td><td><code>nvm alias default &lt;version&gt;</code></td><td>设置默认版本</td></tr></tbody></table>
325
+ <h2>镜像预设</h2>
326
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://nodejs.org/dist</code></td></tr><tr><td><code>taobao</code></td><td><code>https://npmmirror.com/mirrors/node</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/</code></td></tr></tbody></table>
327
+ <blockquote>镜像通过 <code>NVM_NODEJS_ORG_MIRROR</code> 环境变量传递给 nvm install。</blockquote>
328
+ <h2>示例</h2>
329
+ <pre><code class="lang-bash">opm node current
330
+ opm node version
331
+ opm node list
332
+ opm node versions
333
+ opm node install 20
334
+ opm node install --lts
335
+ opm node use 20
336
+ opm node default 20
337
+ opm node search v20.20.2
338
+ opm node view v20.20.2
339
+ opm node uninstall 18
340
+ opm node upgrade</code></pre></div>
341
+ <div id="managers_npm" class="doc-content" style="display:none;"><h1>npm 命令对照表</h1>
342
+ <p><code>@wwkit/opm</code> 统一命令与 npm 原始命令的映射关系。</p>
343
+ <h2>命令对照</h2>
344
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm npm version</code></td><td><code>npm --version</code></td><td>查看 npm 本身版本</td></tr><tr><td><code>opm npm registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm npm registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--registry</code>)</td></tr><tr><td><code>opm npm registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm npm search &lt;name&gt;</code></td><td><code>npm view &lt;name&gt;</code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm npm search &lt;name&gt; &lt;version&gt;</code></td><td><code>npm view &lt;name&gt;@&lt;version&gt;</code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm npm view &lt;name&gt;</code></td><td><code>npm list &lt;name&gt;</code> / 读 <code>node_modules/&lt;name&gt;/package.json</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm npm info &lt;name&gt;</code></td><td><code>npm view &lt;name&gt;</code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm npm versions &lt;name&gt;</code></td><td><code>npm view &lt;name&gt; versions</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm npm list</code></td><td><code>npm list --depth=0</code></td><td>列出所有已安装包</td></tr><tr><td><code>opm npm outdated</code></td><td><code>npm outdated</code></td><td>列出过期包</td></tr><tr><td><code>opm npm install &lt;name&gt;</code></td><td><code>npm install &lt;name&gt;</code></td><td>安装包</td></tr><tr><td><code>opm npm install &lt;name&gt; &lt;version&gt;</code></td><td><code>npm install &lt;name&gt;@&lt;version&gt;</code></td><td>安装指定版本</td></tr><tr><td><code>opm npm install -g &lt;name&gt;</code></td><td><code>npm install -g &lt;name&gt;</code></td><td>全局安装</td></tr><tr><td><code>opm npm uninstall &lt;name&gt;</code></td><td><code>npm uninstall &lt;name&gt;</code></td><td>卸载包</td></tr><tr><td><code>opm npm uninstall -g &lt;name&gt;</code></td><td><code>npm uninstall -g &lt;name&gt;</code></td><td>全局卸载</td></tr><tr><td><code>opm npm upgrade &lt;name&gt;</code></td><td><code>npm install &lt;name&gt;@latest</code></td><td>升级包到最新版本</td></tr><tr><td><code>opm npm upgrade -g &lt;name&gt;</code></td><td><code>npm install -g &lt;name&gt;@latest</code></td><td>全局升级</td></tr><tr><td><code>opm npm cache clean</code></td><td><code>npm cache clean --force</code></td><td>清理缓存</td></tr><tr><td><code>opm npm help</code></td><td>—</td><td>显示 npm 命令清单</td></tr></tbody></table>
345
+ <h2>镜像预设</h2>
346
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://registry.npmjs.org/</code></td></tr><tr><td><code>taobao</code></td><td><code>https://registry.npmmirror.com/</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-central-repo/</code></td></tr></tbody></table>
347
+ <h2>选项</h2>
348
+ <table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><code>-g, --global</code></td><td>全局操作(仅 install/uninstall/upgrade)</td></tr><tr><td><code>-h, --help</code></td><td>显示帮助</td></tr></tbody></table>
349
+ <blockquote>所有命令默认以 JSON 格式输出。</blockquote>
350
+ <h2>示例</h2>
351
+ <pre><code class="lang-bash"># 查看 npm 版本
352
+ opm npm version
353
+
354
+ # 查询当前镜像
355
+ opm npm registry
356
+
357
+ # 切换到淘宝镜像
358
+ opm npm registry set taobao
359
+
360
+ # 查询 axios 是否在源中可用
361
+ opm npm search axios
362
+
363
+ # 查询 axios@1.7.9 是否可用
364
+ opm npm search axios 1.7.9
365
+
366
+ # 查看 axios 是否已安装
367
+ opm npm view axios
368
+
369
+ # 查看 axios 详情
370
+ opm npm info axios
371
+
372
+ # 列出 axios 所有版本
373
+ opm npm versions axios
374
+
375
+ # 列出所有已安装包
376
+ opm npm list
377
+
378
+ # 列出过期包
379
+ opm npm outdated
380
+
381
+ # 安装 axios
382
+ opm npm install axios
383
+
384
+ # 安装 axios@1.7.9
385
+ opm npm install axios 1.7.9
386
+
387
+ # 全局安装 typescript
388
+ opm npm install -g typescript
389
+
390
+ # 卸载 axios
391
+ opm npm uninstall axios
392
+
393
+ # 升级 axios
394
+ opm npm upgrade axios
395
+
396
+ # 清理缓存
397
+ opm npm cache clean
398
+
399
+ # 显示帮助
400
+ opm npm help</code></pre></div>
401
+ <div id="managers_nvm" class="doc-content" style="display:none;"><h1>nvm 命令对照表</h1>
402
+ <p><code>@wwkit/opm</code> 统一命令管理 nvm 自身(安装/升级/卸载)。</p>
403
+ <h2>命令对照</h2>
404
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm nvm version</code></td><td><code>nvm --version</code></td><td>查看 nvm 版本</td></tr><tr><td><code>opm nvm registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>nvm.registry.active</code></td><td>查询 nvm git 镜像</td></tr><tr><td><code>opm nvm registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 nvm git 镜像</td></tr><tr><td><code>opm nvm registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm nvm install</code></td><td><code>git clone &lt;mirror&gt; ~/.nvm</code> + 写 shell profile</td><td>安装 nvm</td></tr><tr><td><code>opm nvm upgrade</code></td><td><code>cd ~/.nvm &amp;&amp; git pull --tags</code></td><td>更新 nvm</td></tr><tr><td><code>opm nvm uninstall</code></td><td><code>rm -rf ~/.nvm</code></td><td>卸载 nvm</td></tr><tr><td><code>opm nvm dir</code></td><td>返回 <code>~/.nvm</code> 安装目录</td></tr></tbody></table>
405
+ <h2>镜像预设</h2>
406
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://github.com/nvm-sh/nvm.git</code></td></tr><tr><td><code>gitee</code></td><td><code>https://gitee.com/mirrors/nvm.git</code></td></tr></tbody></table>
407
+ <h2>示例</h2>
408
+ <pre><code class="lang-bash">opm nvm version
409
+ opm nvm registry set gitee
410
+ opm nvm install
411
+ opm nvm upgrade
412
+ opm nvm dir
413
+ opm nvm uninstall</code></pre></div>
414
+ <div id="managers_php" class="doc-content" style="display:none;"><h1>php 命令对照表</h1>
415
+ <p><code>@wwkit/opm</code> 统一命令通过 phpenv 管理 PHP 版本。</p>
416
+ <h2>命令对照</h2>
417
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm php version</code></td><td><code>phpenv version</code></td><td>当前激活的 PHP 版本</td></tr><tr><td><code>opm php registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>php.registry.active</code></td><td>查询 PHP dist 镜像</td></tr><tr><td><code>opm php registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 PHP dist 镜像(传给 <code>PHP_BUILD_MIRROR_URL</code>)</td></tr><tr><td><code>opm php registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm php search &lt;version&gt;</code></td><td><code>phpenv install --list</code> 过滤</td><td>查询版本是否可下载</td></tr><tr><td><code>opm php view &lt;version&gt;</code></td><td><code>phpenv versions</code> 过滤</td><td>查询版本是否已安装</td></tr><tr><td><code>opm php versions</code></td><td><code>phpenv install --list</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm php list</code></td><td><code>phpenv versions</code></td><td>列出已安装版本</td></tr><tr><td><code>opm php install &lt;version&gt;</code></td><td><code>phpenv install &lt;version&gt;</code></td><td>安装 PHP 版本</td></tr><tr><td><code>opm php uninstall &lt;version&gt;</code></td><td><code>phpenv uninstall &lt;version&gt;</code></td><td>卸载 PHP 版本</td></tr><tr><td><code>opm php upgrade</code></td><td><code>phpenv install &lt;latest&gt;</code></td><td>安装最新版本</td></tr><tr><td><code>opm php use &lt;version&gt;</code></td><td><code>phpenv global &lt;version&gt;</code></td><td>切换当前版本</td></tr><tr><td><code>opm php current</code></td><td><code>phpenv version</code></td><td>显示当前版本</td></tr><tr><td><code>opm php default &lt;version&gt;</code></td><td><code>phpenv global &lt;version&gt;</code></td><td>设置默认版本</td></tr></tbody></table>
418
+ <h2>镜像预设</h2>
419
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://www.php.net/distributions</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://mirrors.tuna.tsinghua.edu.cn/php</code></td></tr><tr><td><code>ustc</code></td><td><code>https://mirrors.ustc.edu.cn/php</code></td></tr></tbody></table>
420
+ <blockquote>镜像通过 <code>PHP_BUILD_MIRROR_URL</code> 环境变量传递给 php-build。</blockquote>
421
+ <h2>示例</h2>
422
+ <pre><code class="lang-bash">opm php current
423
+ opm php version
424
+ opm php list
425
+ opm php versions
426
+ opm php install 8.3
427
+ opm php use 8.3
428
+ opm php default 8.3
429
+ opm php search 8.3.13
430
+ opm php view 8.3.13
431
+ opm php uninstall 8.2
432
+ opm php upgrade</code></pre></div>
433
+ <div id="managers_phpenv" class="doc-content" style="display:none;"><h1>phpenv 命令对照表</h1>
434
+ <p><code>@wwkit/opm</code> 统一命令管理 phpenv 自身(安装/升级/卸载)。</p>
435
+ <h2>命令对照</h2>
436
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm phpenv version</code></td><td><code>phpenv --version</code></td><td>查看 phpenv 版本</td></tr><tr><td><code>opm phpenv registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>phpenv.registry.active</code></td><td>查询 phpenv git 镜像</td></tr><tr><td><code>opm phpenv registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 phpenv git 镜像</td></tr><tr><td><code>opm phpenv registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm phpenv install</code></td><td><code>git clone &lt;mirror&gt; ~/.phpenv</code> + <code>git clone php-build</code> + 写 shell profile</td><td>安装 phpenv + php-build 插件</td></tr><tr><td><code>opm phpenv upgrade</code></td><td><code>cd ~/.phpenv &amp;&amp; git pull</code> + <code>cd plugins/php-build &amp;&amp; git pull</code></td><td>更新 phpenv + php-build</td></tr><tr><td><code>opm phpenv uninstall</code></td><td><code>rm -rf ~/.phpenv</code></td><td>卸载 phpenv</td></tr><tr><td><code>opm phpenv dir</code></td><td>返回 <code>~/.phpenv</code> 安装目录</td></tr></tbody></table>
437
+ <h2>镜像预设</h2>
438
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://github.com/phpenv/phpenv.git</code></td></tr><tr><td><code>gitee</code></td><td><code>https://gitee.com/mirrors/phpenv.git</code></td></tr></tbody></table>
439
+ <h2>示例</h2>
440
+ <pre><code class="lang-bash">opm phpenv version
441
+ opm phpenv registry set gitee
442
+ opm phpenv install
443
+ opm phpenv upgrade
444
+ opm phpenv dir
445
+ opm phpenv uninstall</code></pre></div>
446
+ <div id="managers_pip" class="doc-content" style="display:none;"><h1>pip 命令对照表</h1>
447
+ <p><code>@wwkit/opm</code> 统一命令与 pip 原始命令的映射关系。</p>
448
+ <h2>命令对照</h2>
449
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm pip version</code></td><td><code>pip --version</code></td><td>查看 pip 本身版本</td></tr><tr><td><code>opm pip registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm pip registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--index-url</code>)</td></tr><tr><td><code>opm pip registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm pip search &lt;name&gt;</code></td><td>PyPI JSON API / simple index</td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm pip search &lt;name&gt; &lt;version&gt;</code></td><td>PyPI JSON API / simple index</td><td>查询指定版本是否可用</td></tr><tr><td><code>opm pip view &lt;name&gt;</code></td><td><code>pip show &lt;name&gt;</code></td><td>查询包是否已安装</td></tr><tr><td><code>opm pip info &lt;name&gt;</code></td><td>PyPI JSON API / <code>pip show &lt;name&gt;</code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm pip versions &lt;name&gt;</code></td><td>PyPI JSON API / simple index</td><td>列出所有可用版本</td></tr><tr><td><code>opm pip list</code></td><td><code>pip list --format=freeze</code></td><td>列出所有已安装包</td></tr><tr><td><code>opm pip outdated</code></td><td><code>pip list --outdated</code></td><td>列出过期包</td></tr><tr><td><code>opm pip install &lt;name&gt;</code></td><td><code>pip install &lt;name&gt;</code></td><td>安装包</td></tr><tr><td><code>opm pip install &lt;name&gt; &lt;version&gt;</code></td><td><code>pip install &lt;name&gt;==&lt;version&gt;</code></td><td>安装指定版本</td></tr><tr><td><code>opm pip uninstall &lt;name&gt;</code></td><td><code>pip uninstall -y &lt;name&gt;</code></td><td>卸载包</td></tr><tr><td><code>opm pip upgrade &lt;name&gt;</code></td><td><code>pip install --upgrade &lt;name&gt;</code></td><td>升级包到最新版本</td></tr><tr><td><code>opm pip cache clean</code></td><td><code>pip cache purge</code></td><td>清理缓存</td></tr><tr><td><code>opm pip help</code></td><td>—</td><td>显示 pip 命令清单</td></tr></tbody></table>
450
+ <h2>镜像预设</h2>
451
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://pypi.org/simple</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://pypi.tuna.tsinghua.edu.cn/simple</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/pypi/pypi-repo/simple</code></td></tr></tbody></table>
452
+ <h2>选项</h2>
453
+ <table><thead><tr><th>选项</th><th>说明</th></tr></thead><tbody><tr><td><code>-h, --help</code></td><td>显示帮助</td></tr></tbody></table>
454
+ <blockquote>所有命令默认以 JSON 格式输出。</blockquote>
455
+ <h2>示例</h2>
456
+ <pre><code class="lang-bash"># 查看 pip 版本
457
+ opm pip version
458
+
459
+ # 查询当前镜像
460
+ opm pip registry
461
+
462
+ # 切换到清华镜像
463
+ opm pip registry set tsinghua
464
+
465
+ # 查询 requests 是否在源中可用
466
+ opm pip search requests
467
+
468
+ # 查询 requests==2.31.0 是否可用
469
+ opm pip search requests 2.31.0
470
+
471
+ # 查看 requests 是否已安装
472
+ opm pip view requests
473
+
474
+ # 查看 requests 详情
475
+ opm pip info requests
476
+
477
+ # 列出 requests 所有版本
478
+ opm pip versions requests
479
+
480
+ # 列出所有已安装包
481
+ opm pip list
482
+
483
+ # 列出过期包
484
+ opm pip outdated
485
+
486
+ # 安装 requests
487
+ opm pip install requests
488
+
489
+ # 安装 requests==2.31.0
490
+ opm pip install requests 2.31.0
491
+
492
+ # 卸载 requests
493
+ opm pip uninstall requests
494
+
495
+ # 升级 requests
496
+ opm pip upgrade requests
497
+
498
+ # 清理缓存
499
+ opm pip cache clean
500
+
501
+ # 显示帮助
502
+ opm pip help</code></pre>
503
+ <h2>技术说明</h2>
504
+ <ul><li><strong>源查询</strong>:优先使用 PyPI JSON API(<code>/pypi/&lt;name&gt;/json</code>),当镜像不支持 JSON API 时自动回退到 simple index HTML 解析</li><li><strong>版本排序</strong>:simple index 方式提取的版本使用内置版本比较算法排序,自动排除 dev/rc/alpha/beta 等预发布版本作为 latest</li></ul></div>
505
+ <div id="managers_python" class="doc-content" style="display:none;"><h1>python 命令对照表</h1>
506
+ <p><code>@wwkit/opm</code> 统一命令通过 uv 管理 Python 版本。</p>
507
+ <h2>命令对照</h2>
508
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm python version</code></td><td><code>python3 --version</code></td><td>当前 Python 版本</td></tr><tr><td><code>opm python registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>python.registry.active</code></td><td>查询 Python dist 镜像</td></tr><tr><td><code>opm python registry set &lt;url|preset&gt;</code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 Python dist 镜像(传给 <code>UV_PYTHON_INSTALL_MIRROR</code>)</td></tr><tr><td><code>opm python registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm python search &lt;version&gt;</code></td><td><code>uv python list</code> 过滤</td><td>查询版本是否可下载</td></tr><tr><td><code>opm python view &lt;version&gt;</code></td><td><code>uv python list --only-installed</code> 过滤</td><td>查询版本是否已安装</td></tr><tr><td><code>opm python versions</code></td><td><code>uv python list</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm python list</code></td><td><code>uv python list --only-installed</code></td><td>列出已安装版本</td></tr><tr><td><code>opm python install &lt;version&gt;</code></td><td><code>uv python install &lt;version&gt;</code></td><td>安装 Python 版本</td></tr><tr><td><code>opm python uninstall &lt;version&gt;</code></td><td><code>uv python uninstall &lt;version&gt;</code></td><td>卸载 Python 版本</td></tr><tr><td><code>opm python upgrade</code></td><td><code>uv python install &lt;latest&gt;</code></td><td>安装最新版本</td></tr><tr><td><code>opm python use &lt;version&gt;</code></td><td><code>uv python pin &lt;version&gt;</code></td><td>固定当前目录 Python 版本</td></tr><tr><td><code>opm python current</code></td><td><code>python3 --version</code></td><td>显示当前版本</td></tr><tr><td><code>opm python default &lt;version&gt;</code></td><td>写 <code>~/.python-version</code></td><td>设置全局默认版本</td></tr></tbody></table>
509
+ <h2>镜像预设</h2>
510
+ <table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://github.com/astral-sh/python-build-standalone/releases/download</code></td></tr><tr><td><code>ghproxy</code></td><td><code>https://ghproxy.com/https://github.com/astral-sh/python-build-standalone/releases/download</code></td></tr></tbody></table>
511
+ <blockquote>镜像通过 <code>UV_PYTHON_INSTALL_MIRROR</code> 环境变量传递给 uv。</blockquote>
512
+ <h2>与 pip 的关系</h2>
513
+ <ul><li><code>opm pip</code> 保持独立,直接调用 pip CLI(不受 uv 影响)</li><li>如需使用 <code>uv pip</code>(更快的 pip 替代),请直接调用 <code>uv pip install/list/...</code></li><li>两者可共存,互不干扰</li></ul>
514
+ <h2>示例</h2>
515
+ <pre><code class="lang-bash">opm python current
516
+ opm python version
517
+ opm python list
518
+ opm python versions
519
+ opm python install 3.12
520
+ opm python use 3.12
521
+ opm python default 3.12
522
+ opm python search 3.12.4
523
+ opm python view 3.12.4
524
+ opm python uninstall 3.11
525
+ opm python upgrade</code></pre></div>
526
+ <div id="managers_uv" class="doc-content" style="display:none;"><h1>uv 命令对照表</h1>
527
+ <p><code>@wwkit/opm</code> 统一命令管理 uv 自身(安装/升级/卸载)。</p>
528
+ <p>uv 是 Astral 出品的快速 Python 包/版本管理器(Rust 实现),替代 pyenv + pip。</p>
529
+ <h2>命令对照</h2>
530
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm uv version</code></td><td><code>uv --version</code></td><td>查看 uv 版本</td></tr><tr><td><code>opm uv install</code></td><td><code>curl -LsSf https://astral.sh/uv/install.sh | sh</code></td><td>安装 uv</td></tr><tr><td><code>opm uv upgrade</code></td><td><code>uv self update</code></td><td>更新 uv</td></tr><tr><td><code>opm uv uninstall</code></td><td><code>rm ~/.local/bin/uv</code> + <code>rm -rf ~/.local/share/uv</code></td><td>卸载 uv</td></tr><tr><td><code>opm uv dir</code></td><td>返回 uv 安装目录</td></tr></tbody></table>
531
+ <blockquote>uv 无镜像源,故无 registry action。</blockquote>
532
+ <h2>示例</h2>
533
+ <pre><code class="lang-bash">opm uv version
534
+ opm uv install
535
+ opm uv upgrade
536
+ opm uv dir
537
+ opm uv uninstall</code></pre></div>
538
+ <div id="packages_opencode" class="doc-content" style="display:none;"><h1>opencode 命令对照</h1>
539
+ <p><code>@wwkit/opm</code> 统一命令管理 opencode 运维操作。</p>
540
+ <h2>命令对照</h2>
541
+ <table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm opencode clear</code></td><td>—</td><td>清理 opencode 会话并 VACUUM 压缩数据库</td></tr><tr><td><code>opm opencode clear -d, --days &lt;n&gt;</code></td><td>—</td><td>保留最近 n 天(对齐本地零点,含今天;默认 <code>-d 1</code>)</td></tr><tr><td><code>opm opencode clear -h, --hours &lt;n&gt;</code></td><td>—</td><td>保留最近 n 小时(滚动窗口)</td></tr><tr><td><code>opm opencode clear -n, --num &lt;n&gt;</code></td><td>—</td><td>保留最新 n 个会话</td></tr><tr><td><code>opm opencode clear --dry-run</code></td><td>—</td><td>仅预览,不修改任何数据</td></tr><tr><td><code>opm opencode clear -y</code></td><td>—</td><td>跳过确认提示</td></tr><tr><td><code>opm opencode config</code></td><td>—</td><td>显示 opencode 配置文件内容(优先 <code>opencode.jsonc</code>,其次 <code>opencode.json</code>)</td></tr><tr><td><code>opm opencode version</code></td><td><code>npm list -g opencode-ai</code></td><td>已安装版本</td></tr><tr><td><code>opm opencode install</code></td><td><code>npm install -g opencode-ai</code></td><td>安装(使用 opm npm 镜像 + proxy)</td></tr><tr><td><code>opm opencode uninstall</code></td><td><code>npm uninstall -g opencode-ai</code></td><td>卸载</td></tr><tr><td><code>opm opencode upgrade</code></td><td><code>npm install -g opencode-ai@latest</code></td><td>升级(使用 opm npm 镜像 + proxy)</td></tr><tr><td><code>opm opencode dir</code></td><td>—</td><td>显示 data/db/log/config 路径</td></tr></tbody></table>
542
+ <blockquote><code>--days</code> / <code>--hours</code> / <code>--num</code> 三选一,互斥。</blockquote>
543
+ <h2>实现说明</h2>
544
+ <ul><li><code>src/harnesses/opencode/db.js</code> — 数据目录 / DB / 日志路径</li><li><code>src/harnesses/opencode/sqlite.js</code> — 跨平台 SQLite 驱动(Node &gt;= 22.5 内置 <code>node:sqlite</code>,否则回退 sqlite3 CLI)</li><li><code>src/harnesses/opencode/clear.js</code> — 清理流程(保留策略计算 + 删除 + VACUUM)</li><li><code>src/harnesses/base.js</code> — <code>HarnessGroup</code> 统一命令组基类(version/install/uninstall/upgrade/config/clear/dir)</li></ul>
545
+ <h2>示例</h2>
546
+ <pre><code class="lang-bash">opm opencode clear # 只保留今天创建的会话
547
+ opm opencode clear -d 7 # 保留最近 7 天会话
548
+ opm opencode clear -h 24 # 保留最近 24 小时会话
549
+ opm opencode clear -n 10 # 保留最新 10 个会话
550
+ opm opencode clear --dry-run # 仅预览
551
+ opm opencode clear -y # 跳过确认直接执行
552
+ opm opencode config # 显示 opencode 配置文件内容</code></pre></div>
553
+ </div>
554
+ </div>
555
+ <script>
556
+ function show(id) {
557
+ document.querySelectorAll('.doc-content').forEach(el => el.style.display = 'none');
558
+ document.getElementById(id).style.display = 'block';
559
+ document.querySelectorAll('.menu-item').forEach(el => el.classList.remove('active'));
560
+ const link = document.querySelector('.menu-item[onclick*="' + id + '"]');
561
+ if (link) link.classList.add('active');
562
+ }
563
+ // 默认激活第一个
564
+ (function() {
565
+ var first = document.querySelector('.menu-item');
566
+ if (first) first.classList.add('active');
567
+ })();
568
+ </script>
569
+ </body>
570
+ </html>