ipman-cli 0.1.88__tar.gz → 0.2.12__tar.gz
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.
- ipman_cli-0.2.12/.claude/archive/sprint-10.md +25 -0
- ipman_cli-0.2.12/.claude/archive/sprint-11.md +13 -0
- ipman_cli-0.2.12/.claude/archive/sprint-12.md +12 -0
- ipman_cli-0.2.12/.claude/archive/sprint-13.md +15 -0
- ipman_cli-0.2.12/.claude/archive/sprint-7.md +30 -0
- ipman_cli-0.2.12/.claude/current-sprint.md +13 -0
- ipman_cli-0.2.12/.claude/settings.local.json +16 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/sprint-plan.md +91 -0
- ipman_cli-0.1.88/.github/workflows/e2e.yml → ipman_cli-0.2.12/.github/workflows/e2e-docker-legacy.yml +4 -8
- ipman_cli-0.2.12/.github/workflows/e2e-fast.yml +43 -0
- ipman_cli-0.2.12/.github/workflows/e2e-full.yml +102 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/CLAUDE.md +10 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/PKG-INFO +13 -2
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/README.md +12 -1
- ipman_cli-0.2.12/VERSION +1 -0
- ipman_cli-0.2.12/docs/reports/ipman-final-summary-zh.md +308 -0
- ipman_cli-0.2.12/docs/reports/ipman-openclaw-test-20260323-consolidated-report.md +295 -0
- ipman_cli-0.2.12/docs/superpowers/plans/2026-03-16-cross-platform-e2e-testing.md +2550 -0
- ipman_cli-0.2.12/docs/superpowers/plans/2026-03-16-iphub-ip-format-enhancement.md +757 -0
- ipman_cli-0.2.12/docs/superpowers/plans/2026-03-16-shell-init.md +847 -0
- ipman_cli-0.2.12/docs/superpowers/plans/2026-03-17-local-skill-install.md +489 -0
- ipman_cli-0.2.12/docs/superpowers/plans/2026-03-24-openclaw-bugfix-and-e2e.md +1909 -0
- ipman_cli-0.2.12/docs/superpowers/specs/2026-03-16-cross-platform-e2e-testing-design.md +655 -0
- ipman_cli-0.2.12/docs/superpowers/specs/2026-03-16-iphub-ip-format-enhancement-design.md +592 -0
- ipman_cli-0.2.12/docs/superpowers/specs/2026-03-16-shell-init-design.md +250 -0
- ipman_cli-0.2.12/docs/superpowers/specs/2026-03-17-local-skill-install-design.md +188 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/pyproject.toml +13 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/agents/base.py +38 -8
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/agents/claude_code.py +20 -3
- ipman_cli-0.2.12/src/ipman/agents/openclaw.py +146 -0
- ipman_cli-0.2.12/src/ipman/cli/_common.py +55 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/env.py +58 -32
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/hub.py +86 -17
- ipman_cli-0.2.12/src/ipman/cli/init.py +56 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/main.py +2 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/skill.py +52 -24
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/config.py +10 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/environment.py +60 -6
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/package.py +25 -0
- ipman_cli-0.2.12/src/ipman/core/shell_init.py +201 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/hub/client.py +11 -2
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/hub/publisher.py +29 -3
- ipman_cli-0.2.12/tests/e2e/conftest.py +190 -0
- ipman_cli-0.2.12/tests/e2e/conftest_mock.py +83 -0
- ipman_cli-0.2.12/tests/e2e/fixtures/ips/clean-kit.ip.yaml +6 -0
- ipman_cli-0.2.12/tests/e2e/fixtures/ips/with-deps.ip.yaml +9 -0
- ipman_cli-0.2.12/tests/e2e/fixtures/skills/claude-code/hello-world/SKILL.md +7 -0
- ipman_cli-0.2.12/tests/e2e/fixtures/skills/openclaw/hello-world/SKILL.md +7 -0
- ipman_cli-0.2.12/tests/e2e/helpers/agent_manager.py +134 -0
- ipman_cli-0.2.12/tests/e2e/helpers/github_cleanup.py +43 -0
- ipman_cli-0.2.12/tests/e2e/helpers/platform_utils.py +65 -0
- ipman_cli-0.2.12/tests/e2e/helpers/run.py +61 -0
- ipman_cli-0.2.12/tests/e2e/mock_clawhub/clawhub +78 -0
- ipman_cli-0.2.12/tests/e2e/mock_clawhub/clawhub.bat +62 -0
- ipman_cli-0.2.12/tests/e2e/mock_clawhub/clawhub_mock.py +106 -0
- ipman_cli-0.2.12/tests/e2e/test_agent_session.py +268 -0
- ipman_cli-0.2.12/tests/e2e/test_env_lifecycle.py +196 -0
- ipman_cli-0.2.12/tests/e2e/test_init_order.py +224 -0
- ipman_cli-0.2.12/tests/e2e/test_openclaw_compat.py +588 -0
- ipman_cli-0.2.12/tests/e2e/test_pack_roundtrip.py +113 -0
- ipman_cli-0.2.12/tests/e2e/test_publish_workflow.py +605 -0
- ipman_cli-0.2.12/tests/e2e/test_skill_install.py +140 -0
- ipman_cli-0.2.12/tests/e2e/test_symlink_integrity.py +168 -0
- ipman_cli-0.2.12/tests/test_agents/test_adapters_cli.py +491 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_env.py +3 -3
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_hub.py +174 -1
- ipman_cli-0.2.12/tests/test_cli/test_init.py +56 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_skill.py +27 -1
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_environment.py +73 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_package.py +73 -0
- ipman_cli-0.2.12/tests/test_core/test_shell_init.py +194 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_hub/test_client.py +80 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_hub/test_publisher.py +76 -2
- ipman_cli-0.2.12/tests/test_integration/__init__.py +0 -0
- ipman_cli-0.2.12/tests/test_market/__init__.py +0 -0
- ipman_cli-0.2.12/uv.lock +1066 -0
- ipman_cli-0.1.88/.claude/archive/sprint-7.md +0 -32
- ipman_cli-0.1.88/.claude/current-sprint.md +0 -3
- ipman_cli-0.1.88/VERSION +0 -1
- ipman_cli-0.1.88/src/ipman/agents/openclaw.py +0 -74
- ipman_cli-0.1.88/src/ipman/cli/_common.py +0 -21
- ipman_cli-0.1.88/tests/test_agents/test_adapters_cli.py +0 -219
- ipman_cli-0.1.88/uv.lock +0 -1033
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/COLLABORATION.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/arch-spec-registry.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/.gitkeep +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-0.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-1.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-2.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-3.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-4.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-5.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-6.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-8.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/archive/sprint-9.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/module-spec-registry.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/research/agent-skill-cli-comparison.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/research/iphub-design.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/tech-spec-registry.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/test-registry.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.claude/validation-registry.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.githooks/pre-commit +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.github/workflows/ci.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.github/workflows/docs.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.github/workflows/publish.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.github/workflows/sync-rankings.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/.gitignore +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/LICENSE +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/README.zh-cn.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/RELEASING.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/cliff.toml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/PRD.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/PRD.zh-cn.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/ip-package-spec.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/ip-package-spec.zh-cn.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/iphub-workflows/rebuild-index.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/iphub-workflows/sync-cnb.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/iphub-workflows/update-stats.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs/iphub-workflows/validate-pr.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/cli-reference.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/getting-started/installation.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/getting-started/quickstart.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/configuration.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/environments.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/iphub.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/packages.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/security.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/guide/skills.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/images/IpMan.jpg +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/index.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/ip-package-spec.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/security/modes.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/security/risk-assessment.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/zh/getting-started/installation.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/zh/getting-started/quickstart.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/zh/guide/security.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/docs-src/zh/index.md +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/images/IpMan.jpg +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/install.sh +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/mkdocs.yml +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/scripts/bump.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/scripts/pyinstaller-entry.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/agents/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/agents/registry.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/cli/pack.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/resolver.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/security.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/core/vetter.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/hub/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/hub/stats.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/utils/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/utils/i18n.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/src/ipman/utils/symlink.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/conftest.py +0 -0
- {ipman_cli-0.1.88/tests/test_agents → ipman_cli-0.2.12/tests/e2e}/__init__.py +0 -0
- {ipman_cli-0.1.88/tests/test_cli → ipman_cli-0.2.12/tests/e2e/helpers}/__init__.py +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/Dockerfile.claude-code +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/Dockerfile.openclaw +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/docker-compose.yml +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/run-e2e.sh +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/run-tests.sh +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/scenarios/test_env_lifecycle.sh +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/scenarios/test_hub_search.sh +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/scenarios/test_install_security.sh +0 -0
- {ipman_cli-0.1.88/tests/e2e → ipman_cli-0.2.12/tests/e2e-legacy}/scenarios/test_pack_roundtrip.sh +0 -0
- {ipman_cli-0.1.88/tests/test_core → ipman_cli-0.2.12/tests/test_agents}/__init__.py +0 -0
- {ipman_cli-0.1.88/tests/test_hub → ipman_cli-0.2.12/tests/test_cli}/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_install_hub.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_install_ip.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_install_security.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_main.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_cli/test_pack.py +0 -0
- {ipman_cli-0.1.88/tests/test_integration → ipman_cli-0.2.12/tests/test_core}/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_config.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_i18n.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_resolver.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_security.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_symlink.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_core/test_vetter.py +0 -0
- {ipman_cli-0.1.88/tests/test_market → ipman_cli-0.2.12/tests/test_hub}/__init__.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_hub/test_stats.py +0 -0
- {ipman_cli-0.1.88 → ipman_cli-0.2.12}/tests/test_integration/test_security_flow.py +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 当前 Sprint
|
|
2
|
+
|
|
3
|
+
## Sprint 10(Phase 5 — IpHub Awesome-List 转型, Sub-1)
|
|
4
|
+
|
|
5
|
+
**状态:** ✅ 全部完成
|
|
6
|
+
|
|
7
|
+
### Chunk 1: ipman CLI 数据模型改动 ✅
|
|
8
|
+
- IPPackage 6 个新字段 + parse/dump ✅
|
|
9
|
+
- Publisher tags/summary/changelog ✅
|
|
10
|
+
- Client --tag search ✅
|
|
11
|
+
- CLI hub search/top --tag, info 新字段 ✅
|
|
12
|
+
|
|
13
|
+
### Chunk 2: iphub 仓库模板 + 脚本 + 工作流 ✅
|
|
14
|
+
- i18n 翻译文件 (en + zh-cn) ✅
|
|
15
|
+
- README.md + HTML Landing Page 模板 ✅
|
|
16
|
+
- generate_pages.py + generate_trending.py ✅
|
|
17
|
+
- sync_tag_labels.py ✅
|
|
18
|
+
- rebuild-index.yml 更新(tag 聚合 + trending) ✅
|
|
19
|
+
- rebuild-pages.yml 新建 ✅
|
|
20
|
+
- validate-pr.yml tag 校验 ✅
|
|
21
|
+
|
|
22
|
+
### Chunk 3: 集成验证 + 人工事项 ✅
|
|
23
|
+
- [x] GitHub Pages 启用(/docs 目录)
|
|
24
|
+
- [x] 触发 rebuild-pages workflow
|
|
25
|
+
- [x] 触发 rebuild-index workflow
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Sprint 11(Phase 5 — Sub-2: Tag 搜索 + 排名 + 趋势推荐)— 已完成
|
|
2
|
+
|
|
3
|
+
**状态:** ✅ 全部完成
|
|
4
|
+
|
|
5
|
+
### 交付清单
|
|
6
|
+
|
|
7
|
+
| 任务 | 仓库 | 状态 |
|
|
8
|
+
|------|------|------|
|
|
9
|
+
| `ipman hub trending` CLI 命令 | ipman | ✅ 340 tests |
|
|
10
|
+
| IpHub 首页模板 (index-page.html.j2) | iphub | ✅ |
|
|
11
|
+
| Tag 浏览页模板 (tag-page.html.j2) | iphub | ✅ |
|
|
12
|
+
| i18n 新增 11 个 key (en + zh-cn) | iphub | ✅ |
|
|
13
|
+
| generate_pages.py 首页 + tag 页生成 | iphub | ✅ |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Sprint 12(Phase 5 — Sub-3: 个人页面 + IP Landing Page 完善)— 已完成
|
|
2
|
+
|
|
3
|
+
**状态:** ✅ 全部完成
|
|
4
|
+
|
|
5
|
+
### 交付清单
|
|
6
|
+
|
|
7
|
+
| 任务 | 仓库 | 状态 |
|
|
8
|
+
|------|------|------|
|
|
9
|
+
| Author 个人页面模板 (author-page.html.j2) | iphub | ✅ |
|
|
10
|
+
| generate_pages.py 生成个人页面 | iphub | ✅ |
|
|
11
|
+
| 首页新增 "Active Authors" 区域 | iphub | ✅ |
|
|
12
|
+
| i18n 新增 7 key (en + zh-cn) | iphub | ✅ |
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Sprint 13(Phase 5 — Sub-4: 社交媒体机器人 + 自动 IP 生成)— 已完成
|
|
2
|
+
|
|
3
|
+
**状态:** ✅ 核心功能完成(Batch 2/3 暂缓)
|
|
4
|
+
|
|
5
|
+
> 代码在私有仓库 `twisker/iphub-bot`
|
|
6
|
+
|
|
7
|
+
### 交付清单
|
|
8
|
+
|
|
9
|
+
| Batch | 内容 | 状态 |
|
|
10
|
+
|-------|------|------|
|
|
11
|
+
| Batch 1 | Cloudflare Worker 骨架 + AI 分析管道 + GitHub PR 提交 + 去重 + 限速 | ✅ 已部署 |
|
|
12
|
+
| Batch 4 | GitHub Trending 轮询 | ✅ 已部署 |
|
|
13
|
+
| Batch 5 | HN + Reddit + ProductHunt + Dev.to 轮询 | ✅ 已完成 |
|
|
14
|
+
| Batch 2 | X (Twitter) webhook | 暂缓 |
|
|
15
|
+
| Batch 3 | 微博 webhook | 暂缓 |
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 当前 Sprint
|
|
2
|
+
|
|
3
|
+
## Sprint 7(Phase 4 — 用户体验改进 + 持续质量保障)— 已完成
|
|
4
|
+
|
|
5
|
+
**目标:** 简化虚拟环境操作体验,扩展 install 命令支持本地 skill
|
|
6
|
+
|
|
7
|
+
**状态:** ✅ 全部完成
|
|
8
|
+
|
|
9
|
+
### A 组:activate/deactivate 脚本改进 ✅
|
|
10
|
+
|
|
11
|
+
| 任务 | 状态 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| `ipman init` 命令(bash/zsh/fish/powershell) | ✅ |
|
|
14
|
+
| Shell function wrapper 注入/移除/备份 | ✅ |
|
|
15
|
+
| `--reverse` 撤销 + `--dry-run` 预览 | ✅ |
|
|
16
|
+
| env.py activate/deactivate 消息更新 | ✅ |
|
|
17
|
+
|
|
18
|
+
### B 组:install 本地 skill 支持 ✅
|
|
19
|
+
|
|
20
|
+
| 任务 | 状态 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| `_classify_source()` 三分类(ip_file / local_skill / hub_name) | ✅ |
|
|
23
|
+
| `ClaudeCodeAdapter` 本地目录 → copytree | ✅ |
|
|
24
|
+
| `OpenClawAdapter` 本地目录 → copytree | ✅ |
|
|
25
|
+
| E2E 3 个 skip 测试已解锁 | ✅ |
|
|
26
|
+
|
|
27
|
+
### 测试统计
|
|
28
|
+
|
|
29
|
+
- 单元测试:321 passed
|
|
30
|
+
- E2E 测试:320 collected(含解锁的 3 个 skill install 测试)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 当前 Sprint
|
|
2
|
+
|
|
3
|
+
(Phase 5 IpHub Awesome-List 转型已完成。Sprint 14 暂缓——自动化已基本就位。无活跃 Sprint。)
|
|
4
|
+
|
|
5
|
+
## 项目整体进度
|
|
6
|
+
|
|
7
|
+
| Phase | 内容 | 状态 |
|
|
8
|
+
|-------|------|------|
|
|
9
|
+
| Phase 1 | 核心功能(虚拟环境 + 技能管理) | ✅ |
|
|
10
|
+
| Phase 2 | IpHub + 安全审查 + 依赖解析 | ✅ |
|
|
11
|
+
| Phase 3 | 国际化 + 多渠道分发 | ✅ |
|
|
12
|
+
| Phase 4 | 用户体验改进(ipman init + local skill install + E2E 测试) | ✅ |
|
|
13
|
+
| Phase 5 | IpHub Awesome-List 转型(格式增强 + 趋势 + 页面 + 机器人) | ✅ |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(git config:*)",
|
|
5
|
+
"Bash(ls:*)",
|
|
6
|
+
"Bash(xargs wc:*)",
|
|
7
|
+
"Bash(find /d/repos/ipman/src/ipman -type f -name \"*.py\" -exec wc -l {} +)",
|
|
8
|
+
"Bash(find /d/repos/ipman -name *.clawhub -o -name .clawhub -o -name lock.json)",
|
|
9
|
+
"Bash(xargs grep:*)",
|
|
10
|
+
"Bash(find /d/repos/ipman/docs/reports -name *.md -type f)",
|
|
11
|
+
"Bash(rtk uv:*)",
|
|
12
|
+
"Bash(rtk git:*)",
|
|
13
|
+
"Bash(python -c \"import os; os.environ[''MOCK_CLAWHUB_STATE'']=''/tmp/test''; os.environ[''PATH'']=''C:/test;''+os.environ[''PATH'']; import subprocess; r=subprocess.run\\([''which'', ''clawhub''], capture_output=True, text=True\\); print\\(r.stdout, r.stderr\\)\")"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -173,3 +173,94 @@
|
|
|
173
173
|
| P1 | iphub 定时统计 + README Top 排名 Action | CI/CD | AI | 已完成 |
|
|
174
174
|
| P1 | 多平台 PyInstaller 打包(Linux/macOS/Windows) | CI/CD | AI | 已完成 |
|
|
175
175
|
| P2 | GitHub Actions 发布时自动构建 + GitHub Release 上传 | CI/CD | AI | 已完成 |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Phase 4 -- 用户体验改进 + 持续质量保障
|
|
180
|
+
|
|
181
|
+
### Sprint 7(activate/deactivate 脚本 + install 增强 + E2E 完善)
|
|
182
|
+
|
|
183
|
+
**目标:** 简化虚拟环境操作体验,扩展 install 命令,完善 E2E 测试覆盖
|
|
184
|
+
|
|
185
|
+
| 优先级 | 任务 | 所属模块 | 责任人 | 状态 |
|
|
186
|
+
|-------|------|----------|--------|------|
|
|
187
|
+
| P0 | 为各平台提供 activate/deactivate 脚本(参考 conda):`ipman init` 命令注入 shell function wrapper,支持 bash/zsh/fish/powershell | core/shell_init + CLI | AI | 已完成 |
|
|
188
|
+
| P0 | 扩展 `ipman install` 支持本地 skill 目录(`_classify_source()` 三分类,两个 adapter 用 `shutil.copytree`) | cli/skill + agents | AI | 已完成 |
|
|
189
|
+
| P0 | 解锁 3 个 E2E Layer 2 测试(本地 skill install/uninstall/persistence) | tests/e2e/test_skill_install | AI | 已完成 |
|
|
190
|
+
| P1 | Shell 集成:`ipman init` 注入后 activate/deactivate 直接生效,含 `--reverse` 撤销 + `--dry-run` 预览 | core/shell_init + CLI | AI | 已完成 |
|
|
191
|
+
| P1 | Windows PowerShell 兼容:`Invoke-Expression` + 正确 splatting,替代不可用的 eval | core/shell_init | AI | 已完成 |
|
|
192
|
+
| P1 | `ClaudeCodeAdapter`:本地路径 → `copytree` 到 `.claude/skills/`,远程名称 → `claude plugin install` | agents/claude_code | AI | 已完成 |
|
|
193
|
+
| P1 | `OpenClawAdapter`:本地路径 → `copytree` 到 `.openclaw/skills/`,远程名称 → `clawhub install` | agents/openclaw | AI | 已完成 |
|
|
194
|
+
| P2 | E2E 测试框架持续改进:根据运行结果修复测试用例 | tests/e2e | AI | 已完成 |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Phase 5 -- IpHub Awesome-List 转型
|
|
199
|
+
|
|
200
|
+
> **总体目标:** 将 IpHub 从扁平注册表升级为 awesome-list 式的策展与传播平台
|
|
201
|
+
> **设计文档:** `docs/superpowers/specs/2026-03-16-iphub-ip-format-enhancement-design.md`
|
|
202
|
+
> **实施计划:** `docs/superpowers/plans/2026-03-16-iphub-ip-format-enhancement.md`
|
|
203
|
+
|
|
204
|
+
### Sprint 10(Sub-1: IP 格式增强 + 版本迭代 + Tag + 页面生成)
|
|
205
|
+
|
|
206
|
+
**目标:** 扩展 IP 数据模型,建立三层架构(yaml → md → html),支持 tag 搜索、趋势统计、i18n Landing Page
|
|
207
|
+
|
|
208
|
+
| 优先级 | 任务 | 所属模块 | 责任人 | 状态 |
|
|
209
|
+
|-------|------|----------|--------|------|
|
|
210
|
+
| P0 | IPPackage 扩展:新增 tags/summary/homepage/repository/icon/links 字段 | core/package | AI | 已完成 |
|
|
211
|
+
| P0 | Publisher 适配:registry 输出新字段 + 版本文件含 changelog | hub/publisher | AI | 已完成 |
|
|
212
|
+
| P0 | Client 适配:search() 支持 --tag 过滤 | hub/client | AI | 已完成 |
|
|
213
|
+
| P0 | CLI 适配:hub search --tag, hub info 展示新字段 | cli/hub | AI | 已完成 |
|
|
214
|
+
| P1 | i18n 翻译文件(en + zh-cn)| iphub/templates | AI | 已完成 |
|
|
215
|
+
| P1 | README.md 生成模板(含新手引导)| iphub/templates | AI | 已完成 |
|
|
216
|
+
| P1 | HTML Landing Page 模板(i18n + 响应式)| iphub/templates | AI | 已完成 |
|
|
217
|
+
| P1 | 页面生成脚本 generate_pages.py | iphub/scripts | AI | 已完成 |
|
|
218
|
+
| P1 | 趋势计算脚本 generate_trending.py | iphub/scripts | AI | 已完成 |
|
|
219
|
+
| P2 | rebuild-index.yml:tag 聚合 + 趋势 + Labels 同步 | iphub/CI | AI | 已完成 |
|
|
220
|
+
| P2 | rebuild-pages.yml:自动生成页面工作流 | iphub/CI | AI | 已完成 |
|
|
221
|
+
| P2 | validate-pr.yml:tag 格式校验 | iphub/CI | AI | 已完成 |
|
|
222
|
+
| P2 | GitHub Pages 启用(人工) | iphub 仓库设置 | 人工 | 已完成 |
|
|
223
|
+
|
|
224
|
+
### Sprint 11(Sub-2: Tag 搜索 + 排名 + 趋势推荐) — 已完成
|
|
225
|
+
|
|
226
|
+
| 任务 | 仓库 | 状态 |
|
|
227
|
+
|------|------|------|
|
|
228
|
+
| `ipman hub trending` CLI 命令 | ipman | 已完成 |
|
|
229
|
+
| IpHub 首页模板 + trending 展示 | iphub | 已完成 |
|
|
230
|
+
| Tag 浏览页模板 | iphub | 已完成 |
|
|
231
|
+
| i18n 新增 11 key + generate_pages 首页/tag 生成 | iphub | 已完成 |
|
|
232
|
+
|
|
233
|
+
### Sprint 12(Sub-3: 个人页面 + IP Landing Page 完善) — 已完成
|
|
234
|
+
|
|
235
|
+
| 任务 | 仓库 | 状态 |
|
|
236
|
+
|------|------|------|
|
|
237
|
+
| Author 个人页面模板 + generate_pages 生成 | iphub | 已完成 |
|
|
238
|
+
| 首页 "Active Authors" 区域 | iphub | 已完成 |
|
|
239
|
+
| i18n 新增 7 key | iphub | 已完成 |
|
|
240
|
+
|
|
241
|
+
### Sprint 13(Sub-4: 社交媒体机器人 + 自动 IP 生成)— 已完成
|
|
242
|
+
|
|
243
|
+
> 代码和设计文档在私有仓库 `twisker/iphub-bot` 中。
|
|
244
|
+
|
|
245
|
+
| Batch | 内容 | 状态 |
|
|
246
|
+
|-------|------|------|
|
|
247
|
+
| Batch 1+4 | 核心管道 + GitHub Trending 轮询 | 已完成 ✅ 已部署 |
|
|
248
|
+
| Batch 5 | HN/Reddit/ProductHunt/Dev.to 轮询 | 已完成 |
|
|
249
|
+
| Batch 2 | X webhook | 暂缓(需 X API $100/月) |
|
|
250
|
+
| Batch 3 | 微博 webhook | 暂缓(需开发者认证) |
|
|
251
|
+
|
|
252
|
+
### Sprint 14(Sub-5: 自动化编排层)— 暂缓
|
|
253
|
+
|
|
254
|
+
> 自动化已基本就位(CI/CD workflows + Cloudflare Worker crons)。如需补充监控告警或健康检查,后续按需启动。
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Phase 5 完成总结
|
|
259
|
+
|
|
260
|
+
| Sub | Sprint | 内容 | 状态 |
|
|
261
|
+
|-----|--------|------|------|
|
|
262
|
+
| Sub-1 | Sprint 10 | IP 格式增强 + tags + changelog + 页面生成 | ✅ |
|
|
263
|
+
| Sub-2 | Sprint 11 | Tag 搜索 + 趋势推荐 + hub trending 命令 | ✅ |
|
|
264
|
+
| Sub-3 | Sprint 12 | 个人页面 + IP Landing Page | ✅ |
|
|
265
|
+
| Sub-4 | Sprint 13 | 社交媒体机器人 + 5 数据源自动 IP 生成 | ✅ |
|
|
266
|
+
| Sub-5 | Sprint 14 | 自动化编排层 | 暂缓(已基本就位) |
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
# E2E tests —
|
|
1
|
+
# LEGACY: Docker-based E2E tests — replaced by e2e-fast.yml + e2e-full.yml
|
|
2
2
|
# Runs real ipman against Docker containers with Claude Code / OpenClaw
|
|
3
3
|
|
|
4
|
-
name: E2E Tests
|
|
4
|
+
name: E2E Tests (Legacy)
|
|
5
5
|
|
|
6
6
|
on:
|
|
7
|
-
schedule:
|
|
8
|
-
- cron: "0 4 * * *" # Daily at 04:00 UTC
|
|
9
7
|
workflow_dispatch:
|
|
10
8
|
inputs:
|
|
11
9
|
agent:
|
|
12
10
|
description: "Agent to test (claude-code, openclaw, all)"
|
|
13
11
|
required: false
|
|
14
12
|
default: "all"
|
|
15
|
-
push:
|
|
16
|
-
tags: ["v*"] # Also run before releases
|
|
17
13
|
|
|
18
14
|
jobs:
|
|
19
15
|
e2e:
|
|
@@ -27,9 +23,9 @@ jobs:
|
|
|
27
23
|
- uses: actions/checkout@v4
|
|
28
24
|
|
|
29
25
|
- name: Build test container
|
|
30
|
-
working-directory: tests/e2e
|
|
26
|
+
working-directory: tests/e2e-legacy
|
|
31
27
|
run: docker compose build ${{ matrix.agent }}
|
|
32
28
|
|
|
33
29
|
- name: Run E2E tests
|
|
34
|
-
working-directory: tests/e2e
|
|
30
|
+
working-directory: tests/e2e-legacy
|
|
35
31
|
run: docker compose run --rm ${{ matrix.agent }}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: E2E Fast
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, dev, "release/*"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, dev]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
e2e-platform:
|
|
11
|
+
name: E2E Platform (${{ matrix.os }})
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v6
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
run: uv python install 3.12
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv sync --group dev --group e2e
|
|
29
|
+
|
|
30
|
+
- name: Run E2E platform tests (Layer 1)
|
|
31
|
+
run: >
|
|
32
|
+
uv run pytest tests/e2e/
|
|
33
|
+
-m "platform"
|
|
34
|
+
--junit-xml=e2e-fast-results.xml
|
|
35
|
+
--timeout=60
|
|
36
|
+
-v
|
|
37
|
+
|
|
38
|
+
- name: Upload test results
|
|
39
|
+
if: always()
|
|
40
|
+
uses: actions/upload-artifact@v4
|
|
41
|
+
with:
|
|
42
|
+
name: e2e-fast-${{ matrix.os }}
|
|
43
|
+
path: e2e-fast-results.xml
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: E2E Full
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "0 4 * * *"
|
|
6
|
+
push:
|
|
7
|
+
tags: ["v*"]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
layers:
|
|
11
|
+
description: "Marker expression (e.g. 'agent_session', 'publish')"
|
|
12
|
+
required: false
|
|
13
|
+
default: "e2e"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
e2e-agents:
|
|
17
|
+
name: E2E (${{ matrix.os }}, ${{ matrix.agent }})
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
23
|
+
agent: [claude-code, openclaw]
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: "22"
|
|
31
|
+
|
|
32
|
+
- name: Install uv
|
|
33
|
+
uses: astral-sh/setup-uv@v6
|
|
34
|
+
|
|
35
|
+
- name: Set up Python
|
|
36
|
+
run: uv python install 3.12
|
|
37
|
+
|
|
38
|
+
- name: Install dependencies
|
|
39
|
+
run: uv sync --group dev --group e2e
|
|
40
|
+
|
|
41
|
+
- name: Install agent CLI
|
|
42
|
+
run: >
|
|
43
|
+
npm install -g ${{
|
|
44
|
+
matrix.agent == 'claude-code'
|
|
45
|
+
&& '@anthropic-ai/claude-code'
|
|
46
|
+
|| 'openclaw'
|
|
47
|
+
}}
|
|
48
|
+
|
|
49
|
+
- name: Run E2E tests
|
|
50
|
+
env:
|
|
51
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
52
|
+
run: >
|
|
53
|
+
uv run pytest tests/e2e/
|
|
54
|
+
-m "platform or agent_cli or agent_session"
|
|
55
|
+
--agent ${{ matrix.agent }}
|
|
56
|
+
--junit-xml=e2e-full-results.xml
|
|
57
|
+
--timeout=300
|
|
58
|
+
--reruns 1 --reruns-delay 5
|
|
59
|
+
-v
|
|
60
|
+
|
|
61
|
+
- name: Upload test results
|
|
62
|
+
if: always()
|
|
63
|
+
uses: actions/upload-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: e2e-full-${{ matrix.os }}-${{ matrix.agent }}
|
|
66
|
+
path: e2e-full-results.xml
|
|
67
|
+
|
|
68
|
+
e2e-publish-security:
|
|
69
|
+
name: Publish Security
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@v4
|
|
73
|
+
|
|
74
|
+
- name: Install uv
|
|
75
|
+
uses: astral-sh/setup-uv@v6
|
|
76
|
+
|
|
77
|
+
- name: Set up Python
|
|
78
|
+
run: uv python install 3.12
|
|
79
|
+
|
|
80
|
+
- name: Install dependencies
|
|
81
|
+
run: uv sync --group dev --group e2e
|
|
82
|
+
|
|
83
|
+
- name: Run publish security tests
|
|
84
|
+
env:
|
|
85
|
+
GH_TOKEN_OWNER: ${{ secrets.GH_TOKEN_OWNER }}
|
|
86
|
+
GH_TOKEN_USER_A: ${{ secrets.GH_TOKEN_USER_A }}
|
|
87
|
+
GH_TOKEN_USER_B: ${{ secrets.GH_TOKEN_USER_B }}
|
|
88
|
+
IPHUB_TEST_REPO: ${{ vars.IPHUB_TEST_REPO }}
|
|
89
|
+
run: >
|
|
90
|
+
uv run pytest tests/e2e/test_publish_workflow.py
|
|
91
|
+
-m "publish"
|
|
92
|
+
--junit-xml=publish-results.xml
|
|
93
|
+
--timeout=300
|
|
94
|
+
--reruns 2 --reruns-delay 10
|
|
95
|
+
-v
|
|
96
|
+
|
|
97
|
+
- name: Upload test results
|
|
98
|
+
if: always()
|
|
99
|
+
uses: actions/upload-artifact@v4
|
|
100
|
+
with:
|
|
101
|
+
name: e2e-publish-security
|
|
102
|
+
path: publish-results.xml
|
|
@@ -30,6 +30,16 @@
|
|
|
30
30
|
|
|
31
31
|
## CLAUDE CODING 规范(必须遵守)
|
|
32
32
|
|
|
33
|
+
### Git Hooks 初始化(每次新会话必检)
|
|
34
|
+
|
|
35
|
+
**每次会话开始时,必须检查 `git config core.hooksPath` 是否为 `.githooks`。如果未设置,立即执行:**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git config core.hooksPath .githooks
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
这确保 `.githooks/pre-commit`(自动版本 bump)能正常工作。此配置是本地的,不跟随 git clone,因此每次换机器或 clone 新仓库后都需要重新设置。
|
|
42
|
+
|
|
33
43
|
### Git 提交纪律(最高优先级)
|
|
34
44
|
|
|
35
45
|
**每次完成一组有意义的改动后,必须立即执行 `git add` + `git commit`,不得拖延、不得遗忘、不得等用户提醒。**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipman-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.12
|
|
4
4
|
Summary: Intelligence Package Manager - Agent skill virtual environment manager
|
|
5
5
|
Project-URL: Homepage, https://github.com/twisker/ipman
|
|
6
6
|
Project-URL: Repository, https://github.com/twisker/ipman
|
|
@@ -132,10 +132,21 @@ See the **[Security Guide](https://twisker.github.io/ipman/guide/security/)** fo
|
|
|
132
132
|
## IpHub Rankings
|
|
133
133
|
|
|
134
134
|
<!-- TOP_SKILLS_START -->
|
|
135
|
-
|
|
135
|
+
## Top 10 Skills
|
|
136
|
+
|
|
137
|
+
*Updated: 2026-03-23T04:30:04Z*
|
|
138
|
+
|
|
139
|
+
| # | Name | Type | Installs | Users |
|
|
140
|
+
|---|------|------|----------|-------|
|
|
136
141
|
<!-- TOP_SKILLS_END -->
|
|
137
142
|
|
|
138
143
|
<!-- TOP_PACKAGES_START -->
|
|
144
|
+
## Top 10 Packages
|
|
145
|
+
|
|
146
|
+
*Updated: 2026-03-23T04:30:04Z*
|
|
147
|
+
|
|
148
|
+
| # | Name | Type | Installs | Users |
|
|
149
|
+
|---|------|------|----------|-------|
|
|
139
150
|
<!-- TOP_PACKAGES_END -->
|
|
140
151
|
|
|
141
152
|
## Star History
|
|
@@ -102,10 +102,21 @@ See the **[Security Guide](https://twisker.github.io/ipman/guide/security/)** fo
|
|
|
102
102
|
## IpHub Rankings
|
|
103
103
|
|
|
104
104
|
<!-- TOP_SKILLS_START -->
|
|
105
|
-
|
|
105
|
+
## Top 10 Skills
|
|
106
|
+
|
|
107
|
+
*Updated: 2026-03-23T04:30:04Z*
|
|
108
|
+
|
|
109
|
+
| # | Name | Type | Installs | Users |
|
|
110
|
+
|---|------|------|----------|-------|
|
|
106
111
|
<!-- TOP_SKILLS_END -->
|
|
107
112
|
|
|
108
113
|
<!-- TOP_PACKAGES_START -->
|
|
114
|
+
## Top 10 Packages
|
|
115
|
+
|
|
116
|
+
*Updated: 2026-03-23T04:30:04Z*
|
|
117
|
+
|
|
118
|
+
| # | Name | Type | Installs | Users |
|
|
119
|
+
|---|------|------|----------|-------|
|
|
109
120
|
<!-- TOP_PACKAGES_END -->
|
|
110
121
|
|
|
111
122
|
## Star History
|
ipman_cli-0.2.12/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.12
|