aukeys-opscli 0.0.6__py3-none-any.whl

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 (92) hide show
  1. aukeys_opscli-0.0.6.dist-info/METADATA +15 -0
  2. aukeys_opscli-0.0.6.dist-info/RECORD +92 -0
  3. aukeys_opscli-0.0.6.dist-info/WHEEL +4 -0
  4. aukeys_opscli-0.0.6.dist-info/entry_points.txt +2 -0
  5. opscli/__init__.py +9 -0
  6. opscli/amazon/__init__.py +13 -0
  7. opscli/amazon/cli.py +5 -0
  8. opscli/amazon/client.py +5 -0
  9. opscli/amazon/commands/__init__.py +1 -0
  10. opscli/amazon/commands/cli.py +200 -0
  11. opscli/amazon/domain/__init__.py +25 -0
  12. opscli/amazon/domain/exceptions.py +73 -0
  13. opscli/amazon/domain/models.py +74 -0
  14. opscli/amazon/exceptions.py +21 -0
  15. opscli/amazon/manager.py +5 -0
  16. opscli/amazon/models.py +5 -0
  17. opscli/amazon/parser.py +5 -0
  18. opscli/amazon/scraper.py +5 -0
  19. opscli/amazon/scraping/__init__.py +12 -0
  20. opscli/amazon/scraping/parser.py +66 -0
  21. opscli/amazon/scraping/scraper.py +315 -0
  22. opscli/amazon/services/__init__.py +5 -0
  23. opscli/amazon/services/manager.py +105 -0
  24. opscli/amazon/transport/__init__.py +5 -0
  25. opscli/amazon/transport/client.py +77 -0
  26. opscli/auth/__init__.py +79 -0
  27. opscli/auth/cli.py +255 -0
  28. opscli/auth/commands/__init__.py +1 -0
  29. opscli/auth/commands/cli.py +5 -0
  30. opscli/auth/config.py +55 -0
  31. opscli/auth/core/__init__.py +1 -0
  32. opscli/auth/core/device_flow.py +80 -0
  33. opscli/auth/core/system_registry.py +89 -0
  34. opscli/auth/core/token_manager.py +167 -0
  35. opscli/auth/domain/__init__.py +23 -0
  36. opscli/auth/domain/exceptions.py +33 -0
  37. opscli/auth/exceptions.py +23 -0
  38. opscli/auth/storage/__init__.py +1 -0
  39. opscli/auth/storage/credential_store.py +163 -0
  40. opscli/auth/storage/crypto.py +67 -0
  41. opscli/cli.py +36 -0
  42. opscli/config.py +3 -0
  43. opscli/query/__init__.py +6 -0
  44. opscli/query/cli.py +5 -0
  45. opscli/query/client.py +5 -0
  46. opscli/query/commands/__init__.py +1 -0
  47. opscli/query/commands/cli.py +140 -0
  48. opscli/query/domain/__init__.py +23 -0
  49. opscli/query/domain/exceptions.py +73 -0
  50. opscli/query/domain/models.py +21 -0
  51. opscli/query/exceptions.py +21 -0
  52. opscli/query/manager.py +5 -0
  53. opscli/query/models.py +5 -0
  54. opscli/query/services/__init__.py +5 -0
  55. opscli/query/services/manager.py +373 -0
  56. opscli/query/transport/__init__.py +5 -0
  57. opscli/query/transport/client.py +57 -0
  58. opscli/skills/__init__.py +37 -0
  59. opscli/skills/cli.py +5 -0
  60. opscli/skills/commands/__init__.py +1 -0
  61. opscli/skills/commands/cli.py +389 -0
  62. opscli/skills/detector.py +5 -0
  63. opscli/skills/discovery/__init__.py +5 -0
  64. opscli/skills/discovery/detector.py +225 -0
  65. opscli/skills/domain/__init__.py +23 -0
  66. opscli/skills/domain/exceptions.py +51 -0
  67. opscli/skills/domain/models.py +144 -0
  68. opscli/skills/exceptions.py +5 -0
  69. opscli/skills/manager.py +5 -0
  70. opscli/skills/models.py +19 -0
  71. opscli/skills/services/__init__.py +5 -0
  72. opscli/skills/services/manager.py +276 -0
  73. opscli/skills/sync/__init__.py +5 -0
  74. opscli/skills/sync/updater.py +274 -0
  75. opscli/skills/templates/ops-amazon/SKILL.md +181 -0
  76. opscli/skills/templates/ops-amazon/data/VERSION.json +4 -0
  77. opscli/skills/templates/ops-auth/SKILL.md +466 -0
  78. opscli/skills/templates/ops-auth/data/VERSION.json +4 -0
  79. opscli/skills/templates/ops-dataset-query/SKILL.md +691 -0
  80. opscli/skills/templates/ops-dataset-query/data/VERSION.json +4 -0
  81. opscli/skills/templates/ops-dataset-query/data/dataset_fields.csv +1 -0
  82. opscli/skills/templates/ops-dataset-query/data/datasets.csv +1 -0
  83. opscli/skills/templates/ops-dataset-query/data/query_metadata.json +4 -0
  84. opscli/skills/templates/ops-dataset-query/references//346/225/260/346/215/256/346/237/245/350/257/242/346/234/215/345/212/241/345/274/200/345/217/221/350/257/264/346/230/216/346/226/207/346/241/243.md +1126 -0
  85. opscli/skills/templates/ops-dataset-query/scripts/core.py +140 -0
  86. opscli/skills/templates/ops-dataset-query/scripts/query.py +145 -0
  87. opscli/skills/templates/ops-dataset-query/scripts/search.py +36 -0
  88. opscli/skills/templates/ops-dataset-query/scripts/updater.py +106 -0
  89. opscli/skills/templates/ops-skills/SKILL.md +494 -0
  90. opscli/skills/templates/ops-skills/data/VERSION.json +4 -0
  91. opscli/skills/updater.py +5 -0
  92. opscli/version.py +19 -0
@@ -0,0 +1,494 @@
1
+ ---
2
+ name: ops-skills
3
+ description: 管理 AI 工具中已安装的 Skill 生命周期
4
+ version: v1.0.0
5
+ ---
6
+
7
+ # ops-skills
8
+
9
+ 管理 Claude Code、OpenClaw、Codex CLI、OpenCode 中已安装的 Skill 生命周期,所有操作通过 `opscli skills` 子命令执行。
10
+
11
+ ---
12
+
13
+ ## 概述
14
+
15
+ `ops-skills` 是 Aukeys 运营工具体系的 Skill 生命周期管理器。它负责:
16
+
17
+ - **发现**:扫描全局路径,识别所有已安装的 Skill
18
+ - **安装**:从内置模板将 Skill 部署到目标运行时的全局目录
19
+ - **版本检查**:对比本地版本与远端最新版本,告知是否需要升级
20
+ - **升级**:拉取远端最新数据,原子替换本地文件,确保数据不中断
21
+
22
+ 所有操作均通过 `opscli skills` 子命令完成,Skill 脚本本身不直接调用任何后端 HTTP API。
23
+
24
+ ---
25
+
26
+ ## 使用原则
27
+
28
+ - **全局路径优先**:安装目标由 opscli 自动检测全局 Skills 路径(如 `~/.claude/skills/`、`~/.openclaw/skills/` 等),也可通过 `--runtime` 或 `--skills-dir` 显式指定
29
+ - **支持的运行时**:Claude Code(`claude`)、OpenClaw(`openclaw`)、Codex CLI(`codex`)、OpenCode(`opencode`)
30
+ - **升级范围**:只有 `ops-dataset-query` 支持远端数据升级;`ops-auth` 和 `ops-skills` 为本地静态 Skill,无需升级
31
+ - **幂等安装**:默认不覆盖已存在的安装,需要 `--force` 才会覆盖
32
+ - **原子升级**:升级过程先下载到临时目录,验证完成后再替换,避免升级中途失败导致数据损坏
33
+
34
+ ---
35
+
36
+ ## 内置可安装 Skill
37
+
38
+ | Skill 名称 | 说明 | 支持远端升级 |
39
+ |-----------|------|------------|
40
+ | `ops-auth` | 认证授权管理(登录、Token 查看与刷新、系统管理) | 否 |
41
+ | `ops-dataset-query` | 数据集字段索引与查询转发(支持 metadata 拉取和 query 执行) | 是 |
42
+ | `ops-amazon` | Amazon 商品页与搜索结果抓取工作流指导 | 否 |
43
+ | `ops-skills` | Skill 生命周期管理(本 Skill) | 否 |
44
+
45
+ ---
46
+
47
+ ## 运行时全局路径说明
48
+
49
+ opscli 检测以下全局路径来发现已安装的 Skill:
50
+
51
+ | 运行时 | 全局 Skills 路径 |
52
+ |--------|----------------|
53
+ | Claude Code | `~/.claude/skills/` |
54
+ | OpenClaw | `~/.openclaw/skills/` |
55
+ | Codex CLI | `~/.codex/skills/` |
56
+ | OpenCode | `~/.opencode/skills/` |
57
+
58
+ > 注意:检测路径为全局用户目录(`~/`),而非项目级目录。这确保 Skill 在所有项目中均可使用,无需每个项目单独安装。
59
+
60
+ 若使用 `--skills-dir` 显式指定路径,将跳过自动检测逻辑,直接操作指定目录。
61
+
62
+ ---
63
+
64
+ ## 命令参考
65
+
66
+ ### `opscli skills list`
67
+
68
+ 列出所有已安装的 Skill(扫描全局路径,如 `~/.claude/skills/`、`~/.openclaw/skills/` 等)。
69
+
70
+ 输出包含每个 Skill 的:
71
+ - 名称(`name`)
72
+ - 当前版本(`version`)
73
+ - 安装路径(`path`)
74
+ - 所属运行时(`runtime`)
75
+
76
+ ```
77
+ 选项:
78
+ --skills-dir TEXT 指定扫描目录(覆盖默认自动检测路径)
79
+ --pretty 格式化 JSON 输出(适合人工阅读)
80
+ ```
81
+
82
+ **示例:**
83
+
84
+ ```bash
85
+ # 列出所有已安装 Skill(JSON 紧凑格式)
86
+ opscli skills list
87
+
88
+ # 格式化输出,便于阅读
89
+ opscli skills list --pretty
90
+
91
+ # 仅扫描指定目录
92
+ opscli skills list --skills-dir ~/.claude/skills/
93
+ ```
94
+
95
+ **典型输出:**
96
+
97
+ ```json
98
+ [
99
+ {
100
+ "name": "ops-auth",
101
+ "version": "v1.0.0",
102
+ "path": "/Users/you/.claude/skills/ops-auth",
103
+ "runtime": "claude"
104
+ },
105
+ {
106
+ "name": "ops-dataset-query",
107
+ "version": "v2.1.0",
108
+ "path": "/Users/you/.claude/skills/ops-dataset-query",
109
+ "runtime": "claude"
110
+ }
111
+ ]
112
+ ```
113
+
114
+ ---
115
+
116
+ ### `opscli skills status`
117
+
118
+ 查看已安装 Skill 的状态,包含本地版本与远端最新版本对比(需联网)。
119
+
120
+ 输出包含每个 Skill 的:
121
+ - 名称(`name`)
122
+ - 本地版本(`local_version`)
123
+ - 远端最新版本(`remote_version`,无远端来源则为 `null`)
124
+ - 是否需要升级(`needs_upgrade`)
125
+ - 是否支持远端升级(`upgradable`)
126
+
127
+ ```
128
+ 选项:
129
+ --skills-dir TEXT 指定扫描目录(覆盖默认自动检测路径)
130
+ --pretty 格式化 JSON 输出
131
+ ```
132
+
133
+ **示例:**
134
+
135
+ ```bash
136
+ # 查看所有 Skill 状态
137
+ opscli skills status
138
+
139
+ # 格式化输出
140
+ opscli skills status --pretty
141
+
142
+ # 检查指定目录下的 Skill 状态
143
+ opscli skills status --skills-dir ~/.claude/skills/
144
+ ```
145
+
146
+ **典型输出:**
147
+
148
+ ```json
149
+ [
150
+ {
151
+ "name": "ops-auth",
152
+ "local_version": "v1.0.0",
153
+ "remote_version": null,
154
+ "needs_upgrade": false,
155
+ "upgradable": false
156
+ },
157
+ {
158
+ "name": "ops-dataset-query",
159
+ "local_version": "v2.0.0",
160
+ "remote_version": "v2.1.0",
161
+ "needs_upgrade": true,
162
+ "upgradable": true
163
+ },
164
+ {
165
+ "name": "ops-skills",
166
+ "local_version": "v1.0.0",
167
+ "remote_version": null,
168
+ "needs_upgrade": false,
169
+ "upgradable": false
170
+ }
171
+ ]
172
+ ```
173
+
174
+ ---
175
+
176
+ ### `opscli skills install [name]`
177
+
178
+ 从内置模板安装 Skill 到全局运行时目录。`name` 为可选参数:
179
+
180
+ - **不指定 name**:进入 TUI 交互模式,可勾选并批量安装全部可用 Skill
181
+ - **指定 name**:直接安装指定 Skill,跳过 TUI
182
+
183
+ 自动检测全局已配置的 AI 工具(检测路径如 `~/.claude/skills/`、`~/.openclaw/skills/` 等),若检测到多个运行时会交互选择目标运行时,也可通过 `--runtime` 直接指定跳过交互。
184
+
185
+ ```
186
+ 参数:
187
+ [name] Skill 名称(可选;不填则进入 TUI 交互模式安装全部 Skills)
188
+ 可选值:ops-auth、ops-dataset-query、ops-amazon、ops-skills
189
+
190
+ 选项:
191
+ --runtime TEXT 目标运行时(跳过自动检测):
192
+ claude → ~/.claude/skills/
193
+ openclaw → ~/.openclaw/skills/
194
+ codex → ~/.codex/skills/
195
+ opencode → ~/.opencode/skills/
196
+ all → 所有已检测到的运行时
197
+ 支持逗号分隔多个值,如 claude,openclaw
198
+ --skills-dir TEXT 指定安装目录(跳过自动检测和 --runtime)
199
+ --force 覆盖已存在的安装(默认跳过已安装)
200
+ --pretty 格式化 JSON 输出
201
+ ```
202
+
203
+ **示例:**
204
+
205
+ ```bash
206
+ # ── TUI 交互模式 ────────────────────────────────────────────
207
+ # 不指定 name,进入 TUI 勾选界面,可批量安装全部 Skills
208
+ opscli skills install
209
+
210
+ # ── 安装指定 Skill(自动检测运行时)────────────────────────
211
+ opscli skills install ops-auth
212
+ opscli skills install ops-dataset-query
213
+ opscli skills install ops-amazon
214
+ opscli skills install ops-skills
215
+
216
+ # ── 指定单个运行时安装 ────────────────────────────────────
217
+ opscli skills install ops-auth --runtime claude
218
+ opscli skills install ops-auth --runtime openclaw
219
+ opscli skills install ops-auth --runtime codex
220
+ opscli skills install ops-auth --runtime opencode
221
+
222
+ # ── 同时安装到多个运行时 ──────────────────────────────────
223
+ opscli skills install ops-auth --runtime claude,openclaw
224
+ opscli skills install ops-auth --runtime claude,codex,opencode
225
+
226
+ # ── 安装到所有已检测运行时 ───────────────────────────────
227
+ opscli skills install ops-auth --runtime all
228
+
229
+ # ── 覆盖已存在的安装 ──────────────────────────────────────
230
+ opscli skills install ops-dataset-query --force
231
+ opscli skills install ops-auth --runtime all --force
232
+
233
+ # ── 安装到指定自定义目录 ──────────────────────────────────
234
+ opscli skills install ops-auth --skills-dir ~/.claude/skills/
235
+ opscli skills install ops-auth --skills-dir /custom/path/to/skills/
236
+ ```
237
+
238
+ **安装后目录结构(以 Claude Code 为例):**
239
+
240
+ ```
241
+ ~/.claude/skills/
242
+ └── ops-auth/
243
+ ├── data/
244
+ │ └── VERSION.json # 版本标识文件
245
+ └── SKILL.md # AI Agent 使用指南
246
+ ```
247
+
248
+ ---
249
+
250
+ ### `opscli skills upgrade [name]`
251
+
252
+ 升级 Skill 到远端最新版本(当前仅 `ops-dataset-query` 支持远端升级)。
253
+
254
+ 升级流程:
255
+ 1. 获取本地当前版本
256
+ 2. 请求远端 API 获取最新版本号与数据
257
+ 3. 版本号相同时跳过(除非指定 `--force`)
258
+ 4. 版本号不同时,下载远端数据到临时目录
259
+ 5. 验证完整性后,原子替换本地文件
260
+ 6. 输出升级结果(成功/跳过/失败)
261
+
262
+ ```
263
+ 参数:
264
+ [name] Skill 名称(可选,默认 ops-dataset-query)
265
+ 当前支持远端升级的 Skill:ops-dataset-query
266
+
267
+ 选项:
268
+ --skills-dir TEXT 指定扫描目录(覆盖默认自动检测路径)
269
+ --force 强制重新拉取,即使版本号相同
270
+ --pretty 格式化 JSON 输出
271
+ ```
272
+
273
+ **示例:**
274
+
275
+ ```bash
276
+ # 升级 ops-dataset-query(默认目标)
277
+ opscli skills upgrade
278
+
279
+ # 显式指定 Skill 名称升级
280
+ opscli skills upgrade ops-dataset-query
281
+
282
+ # 强制重新拉取远端数据(即使版本号相同)
283
+ opscli skills upgrade ops-dataset-query --force
284
+
285
+ # 升级指定目录中的 Skill
286
+ opscli skills upgrade ops-dataset-query --skills-dir ~/.claude/skills/
287
+
288
+ # 强制升级并格式化输出
289
+ opscli skills upgrade --force --pretty
290
+ ```
291
+
292
+ **典型输出(有更新):**
293
+
294
+ ```json
295
+ {
296
+ "name": "ops-dataset-query",
297
+ "status": "upgraded",
298
+ "from_version": "v2.0.0",
299
+ "to_version": "v2.1.0",
300
+ "path": "/Users/you/.claude/skills/ops-dataset-query"
301
+ }
302
+ ```
303
+
304
+ **典型输出(已是最新):**
305
+
306
+ ```json
307
+ {
308
+ "name": "ops-dataset-query",
309
+ "status": "skipped",
310
+ "reason": "already at latest version v2.1.0"
311
+ }
312
+ ```
313
+
314
+ ---
315
+
316
+ ## 典型工作流
317
+
318
+ ### 场景一:全新环境初始化
319
+
320
+ 在新机器或新用户目录中,首次配置所有 Skill:
321
+
322
+ ```bash
323
+ # 1. 确认 opscli 已正常安装
324
+ opscli --version
325
+
326
+ # 2. 通过 TUI 交互模式,勾选并批量安装全部 Skills
327
+ opscli skills install
328
+
329
+ # 3. 验证安装结果
330
+ opscli skills list --pretty
331
+
332
+ # 4. 检查版本状态
333
+ opscli skills status --pretty
334
+ ```
335
+
336
+ ### 场景二:日常版本维护
337
+
338
+ 定期检查并更新 Skills,确保数据集查询功能使用最新字段索引:
339
+
340
+ ```bash
341
+ # 1. 检查所有 Skill 的版本状态
342
+ opscli skills status --pretty
343
+
344
+ # 2. 如果 ops-dataset-query 有新版本,执行升级
345
+ opscli skills upgrade ops-dataset-query
346
+
347
+ # 3. 验证升级后的版本
348
+ opscli skills list --pretty
349
+ ```
350
+
351
+ ### 场景三:多运行时环境安装
352
+
353
+ 同时使用多种 AI 工具(如 Claude Code + OpenClaw)时:
354
+
355
+ ```bash
356
+ # 安装所有 Skill 到全部已检测运行时
357
+ opscli skills install --runtime all
358
+
359
+ # 或分开安装到指定运行时
360
+ opscli skills install ops-auth --runtime claude,openclaw
361
+ opscli skills install ops-dataset-query --runtime claude,openclaw
362
+ opscli skills install ops-skills --runtime claude,openclaw
363
+
364
+ # 验证各运行时均已安装
365
+ opscli skills list --pretty
366
+ ```
367
+
368
+ ### 场景四:强制重置安装
369
+
370
+ 当 Skill 文件损坏或需要回退到内置版本时:
371
+
372
+ ```bash
373
+ # 强制覆盖安装(重置为内置模板版本)
374
+ opscli skills install ops-auth --force
375
+ opscli skills install ops-dataset-query --force
376
+ opscli skills install ops-skills --force
377
+
378
+ # 如需同时重置远端数据,再执行升级
379
+ opscli skills upgrade ops-dataset-query --force
380
+ ```
381
+
382
+ ### 场景五:指定路径安装(CI/脚本环境)
383
+
384
+ 在自动化脚本或 CI 环境中,指定明确路径跳过交互:
385
+
386
+ ```bash
387
+ # 指定运行时跳过自动检测
388
+ opscli skills install ops-auth --runtime claude --force
389
+
390
+ # 或直接指定目标目录
391
+ opscli skills install ops-auth --skills-dir ~/.claude/skills/ --force
392
+ opscli skills install ops-dataset-query --skills-dir ~/.claude/skills/ --force
393
+
394
+ # 输出 JSON 便于脚本解析
395
+ opscli skills list --skills-dir ~/.claude/skills/
396
+ ```
397
+
398
+ ---
399
+
400
+ ## 错误排查
401
+
402
+ ### 安装失败:运行时未检测到
403
+
404
+ ```
405
+ 错误:未检测到任何已安装的 AI 工具运行时
406
+ ```
407
+
408
+ **原因**:全局路径均不存在(如 `~/.claude/` 不存在)。
409
+
410
+ **解决**:
411
+ ```bash
412
+ # 方式 1:使用 --runtime 显式指定运行时(opscli 会自动创建目录)
413
+ opscli skills install ops-auth --runtime claude
414
+
415
+ # 方式 2:手动创建目录后重试
416
+ mkdir -p ~/.claude/skills/
417
+ opscli skills install ops-auth
418
+ ```
419
+
420
+ ### 安装失败:Skill 已存在
421
+
422
+ ```
423
+ 错误:Skill ops-auth 已存在于 ~/.claude/skills/ops-auth
424
+ ```
425
+
426
+ **原因**:目标目录已有同名 Skill,且未指定 `--force`。
427
+
428
+ **解决**:
429
+ ```bash
430
+ opscli skills install ops-auth --force
431
+ ```
432
+
433
+ ### 升级失败:网络不可达
434
+
435
+ ```
436
+ 错误:无法连接到远端服务,请检查网络连接
437
+ ```
438
+
439
+ **原因**:升级需要访问 ops 后端 API,网络异常时无法拉取。
440
+
441
+ **解决**:
442
+ ```bash
443
+ # 1. 检查 auth 状态,确认已登录
444
+ opscli auth token status
445
+
446
+ # 2. 检查网络连通性
447
+ opscli auth doctor
448
+
449
+ # 3. 网络恢复后重试
450
+ opscli skills upgrade ops-dataset-query
451
+ ```
452
+
453
+ ### 升级失败:Token 过期
454
+
455
+ ```
456
+ 错误:认证 Token 已过期,请重新登录
457
+ ```
458
+
459
+ **解决**:
460
+ ```bash
461
+ # 刷新 Token
462
+ opscli auth token refresh --all
463
+
464
+ # 或重新登录
465
+ opscli auth login
466
+
467
+ # 再执行升级
468
+ opscli skills upgrade ops-dataset-query
469
+ ```
470
+
471
+ ---
472
+
473
+ ## 版本标识文件格式
474
+
475
+ 每个 Skill 目录下的 `data/VERSION.json` 是 `SkillDetector` 的识别标志。格式为:
476
+
477
+ ```json
478
+ {
479
+ "name": "ops-skills",
480
+ "version": "v1.0.0"
481
+ }
482
+ ```
483
+
484
+ - `name`:必须与 Skill 目录名一致,且必须带 `ops-` 前缀
485
+ - `version`:语义化版本号,格式 `v{major}.{minor}.{patch}`
486
+
487
+ ---
488
+
489
+ ## 注意事项
490
+
491
+ 1. **不修改 VERSION.json**:手动修改版本文件会导致 `status` 命令产生误判,请勿手动编辑
492
+ 2. **升级不影响认证**:`ops-dataset-query` 升级的是字段元数据,不会清除已登录的凭证
493
+ 3. **多运行时独立管理**:每个运行时(claude/openclaw/codex/opencode)的 Skills 目录相互独立,安装和升级互不影响
494
+ 4. **全局 vs 项目级**:Skills 安装在全局路径(`~/`),对该用户下所有项目生效,无需在每个项目中单独安装
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "ops-skills",
3
+ "version": "v1.0.0"
4
+ }
@@ -0,0 +1,5 @@
1
+ """skills updater 兼容导出。"""
2
+
3
+ from opscli.skills.sync.updater import SkillsUpdater
4
+
5
+ __all__ = ["SkillsUpdater"]
opscli/version.py ADDED
@@ -0,0 +1,19 @@
1
+ """版本读取入口。
2
+
3
+ 统一从包元数据读取版本;开发态未安装时使用受控 fallback。
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from importlib.metadata import PackageNotFoundError, version
9
+
10
+ PACKAGE_NAME = "opscli"
11
+ FALLBACK_VERSION = "0.0.4-dev"
12
+
13
+
14
+ def get_version() -> str:
15
+ """返回当前运行版本。"""
16
+ try:
17
+ return version(PACKAGE_NAME)
18
+ except PackageNotFoundError:
19
+ return FALLBACK_VERSION