advai-cli 1.0.0__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.
- advai_cli-1.0.0/PKG-INFO +84 -0
- advai_cli-1.0.0/README.md +72 -0
- advai_cli-1.0.0/advai/__init__.py +0 -0
- advai_cli-1.0.0/advai/cli.py +95 -0
- advai_cli-1.0.0/advai/skills.py +74 -0
- advai_cli-1.0.0/advai_cli.egg-info/PKG-INFO +84 -0
- advai_cli-1.0.0/advai_cli.egg-info/SOURCES.txt +11 -0
- advai_cli-1.0.0/advai_cli.egg-info/dependency_links.txt +1 -0
- advai_cli-1.0.0/advai_cli.egg-info/entry_points.txt +2 -0
- advai_cli-1.0.0/advai_cli.egg-info/requires.txt +1 -0
- advai_cli-1.0.0/advai_cli.egg-info/top_level.txt +1 -0
- advai_cli-1.0.0/pyproject.toml +25 -0
- advai_cli-1.0.0/setup.cfg +4 -0
advai_cli-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: advai-cli
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 跨平台 AI Skill 管理器 — 一键 install / uninstall / list / update
|
|
5
|
+
Author: advai
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Advai-X/advai-x-cli
|
|
8
|
+
Project-URL: Issues, https://github.com/Advai-X/advai-x-cli/issues
|
|
9
|
+
Requires-Python: >=3.8
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: click>=8.1
|
|
12
|
+
|
|
13
|
+
# advai — 跨平台 AI Skill 管理器
|
|
14
|
+
|
|
15
|
+
一个用 Python 写的 CLI,让你可以像安装软件包一样安装/卸载 AI Skills。
|
|
16
|
+
|
|
17
|
+
- **平台**:macOS / Linux / Windows
|
|
18
|
+
- **安装方式**:`pip` / `npm` / `brew` / `curl | bash` 任选
|
|
19
|
+
- **核心命令**:`install` / `uninstall` / `list` / `update` / `info`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 方式一:pip
|
|
27
|
+
pip install advai
|
|
28
|
+
|
|
29
|
+
# 方式二:npm
|
|
30
|
+
npm install -g advai
|
|
31
|
+
|
|
32
|
+
# 方式三:brew
|
|
33
|
+
brew install https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/Formula/advai.rb
|
|
34
|
+
|
|
35
|
+
# 方式四:一键脚本
|
|
36
|
+
curl -fsSL https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/install.sh | bash
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
安装完成后:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
advai --version
|
|
43
|
+
advai --help
|
|
44
|
+
advai install demo-skill
|
|
45
|
+
advai list
|
|
46
|
+
advai info demo-skill
|
|
47
|
+
advai uninstall demo-skill
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 项目结构
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
advai/ # 核心 CLI(Python)
|
|
56
|
+
__init__.py
|
|
57
|
+
cli.py # 命令行入口(基于 click)
|
|
58
|
+
skills.py # Skill 安装 / 卸载 / 元数据逻辑
|
|
59
|
+
Formula/advai.rb # Homebrew 配方
|
|
60
|
+
bin/advai.js # npm 入口桥接脚本
|
|
61
|
+
install.sh # curl | bash 一键安装脚本
|
|
62
|
+
pyproject.toml # PyPI 打包配置
|
|
63
|
+
package.json # npm 打包配置
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 本地开发
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 从源码运行
|
|
72
|
+
python3 -m advai.cli --help
|
|
73
|
+
|
|
74
|
+
# 构建发布包
|
|
75
|
+
python3 -m pip install --upgrade build twine
|
|
76
|
+
python3 -m build
|
|
77
|
+
python3 -m twine upload dist/*
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## License
|
|
83
|
+
|
|
84
|
+
MIT
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# advai — 跨平台 AI Skill 管理器
|
|
2
|
+
|
|
3
|
+
一个用 Python 写的 CLI,让你可以像安装软件包一样安装/卸载 AI Skills。
|
|
4
|
+
|
|
5
|
+
- **平台**:macOS / Linux / Windows
|
|
6
|
+
- **安装方式**:`pip` / `npm` / `brew` / `curl | bash` 任选
|
|
7
|
+
- **核心命令**:`install` / `uninstall` / `list` / `update` / `info`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 快速开始
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 方式一:pip
|
|
15
|
+
pip install advai
|
|
16
|
+
|
|
17
|
+
# 方式二:npm
|
|
18
|
+
npm install -g advai
|
|
19
|
+
|
|
20
|
+
# 方式三:brew
|
|
21
|
+
brew install https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/Formula/advai.rb
|
|
22
|
+
|
|
23
|
+
# 方式四:一键脚本
|
|
24
|
+
curl -fsSL https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/install.sh | bash
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
安装完成后:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
advai --version
|
|
31
|
+
advai --help
|
|
32
|
+
advai install demo-skill
|
|
33
|
+
advai list
|
|
34
|
+
advai info demo-skill
|
|
35
|
+
advai uninstall demo-skill
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 项目结构
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
advai/ # 核心 CLI(Python)
|
|
44
|
+
__init__.py
|
|
45
|
+
cli.py # 命令行入口(基于 click)
|
|
46
|
+
skills.py # Skill 安装 / 卸载 / 元数据逻辑
|
|
47
|
+
Formula/advai.rb # Homebrew 配方
|
|
48
|
+
bin/advai.js # npm 入口桥接脚本
|
|
49
|
+
install.sh # curl | bash 一键安装脚本
|
|
50
|
+
pyproject.toml # PyPI 打包配置
|
|
51
|
+
package.json # npm 打包配置
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 本地开发
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# 从源码运行
|
|
60
|
+
python3 -m advai.cli --help
|
|
61
|
+
|
|
62
|
+
# 构建发布包
|
|
63
|
+
python3 -m pip install --upgrade build twine
|
|
64
|
+
python3 -m build
|
|
65
|
+
python3 -m twine upload dist/*
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## License
|
|
71
|
+
|
|
72
|
+
MIT
|
|
File without changes
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import click
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
import json
|
|
5
|
+
|
|
6
|
+
from advai.skills import install_skill, uninstall_skill, list_skills, update_skill, info_skill
|
|
7
|
+
|
|
8
|
+
SKILLS_DIR = os.path.expanduser("~/.advai/skills")
|
|
9
|
+
CONFIG_DIR = os.path.expanduser("~/.advai")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _ensure_dirs():
|
|
13
|
+
os.makedirs(SKILLS_DIR, exist_ok=True)
|
|
14
|
+
os.makedirs(CONFIG_DIR, exist_ok=True)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@click.group()
|
|
18
|
+
@click.version_option(package_name="advai")
|
|
19
|
+
def cli():
|
|
20
|
+
"""advai — 跨平台 AI Skill 管理器"""
|
|
21
|
+
_ensure_dirs()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@cli.command()
|
|
25
|
+
@click.argument("skill_name")
|
|
26
|
+
@click.option("--force", is_flag=True, help="强制重新安装(覆盖已有版本)")
|
|
27
|
+
def install(skill_name, force):
|
|
28
|
+
"""安装一个 Skill: advai install <skill-name>"""
|
|
29
|
+
try:
|
|
30
|
+
install_skill(skill_name, force=force)
|
|
31
|
+
click.echo(f"✅ Skill '{skill_name}' 安装成功")
|
|
32
|
+
except FileExistsError:
|
|
33
|
+
click.echo(f"⚠️ Skill '{skill_name}' 已经存在,使用 --force 可覆盖")
|
|
34
|
+
except Exception as e:
|
|
35
|
+
click.echo(f"❌ 安装失败: {e}", err=True)
|
|
36
|
+
sys.exit(1)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@cli.command()
|
|
40
|
+
@click.argument("skill_name")
|
|
41
|
+
def uninstall(skill_name):
|
|
42
|
+
"""卸载一个 Skill: advai uninstall <skill-name>"""
|
|
43
|
+
try:
|
|
44
|
+
uninstall_skill(skill_name)
|
|
45
|
+
click.echo(f"🗑️ Skill '{skill_name}' 已卸载")
|
|
46
|
+
except FileNotFoundError:
|
|
47
|
+
click.echo(f"⚠️ Skill '{skill_name}' 未安装")
|
|
48
|
+
except Exception as e:
|
|
49
|
+
click.echo(f"❌ 卸载失败: {e}", err=True)
|
|
50
|
+
sys.exit(1)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@cli.command(name="list")
|
|
54
|
+
def list_cmd():
|
|
55
|
+
"""列出本地已安装的 Skills"""
|
|
56
|
+
skills = list_skills()
|
|
57
|
+
if not skills:
|
|
58
|
+
click.echo("(暂无已安装的 Skill)")
|
|
59
|
+
return
|
|
60
|
+
click.echo("📋 已安装 Skills:")
|
|
61
|
+
for s in skills:
|
|
62
|
+
click.echo(f" • {s}")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@cli.command()
|
|
66
|
+
@click.argument("skill_name", required=False)
|
|
67
|
+
def update(skill_name):
|
|
68
|
+
"""更新一个(或全部)Skill: advai update [skill-name]"""
|
|
69
|
+
try:
|
|
70
|
+
updated = update_skill(skill_name)
|
|
71
|
+
if updated:
|
|
72
|
+
for s in updated:
|
|
73
|
+
click.echo(f"🔄 {s} 已更新")
|
|
74
|
+
else:
|
|
75
|
+
click.echo("(没有可更新的 Skill)")
|
|
76
|
+
except Exception as e:
|
|
77
|
+
click.echo(f"❌ 更新失败: {e}", err=True)
|
|
78
|
+
sys.exit(1)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@cli.command()
|
|
82
|
+
@click.argument("skill_name")
|
|
83
|
+
def info(skill_name):
|
|
84
|
+
"""查看 Skill 详情: advai info <skill-name>"""
|
|
85
|
+
data = info_skill(skill_name)
|
|
86
|
+
if data is None:
|
|
87
|
+
click.echo(f"⚠️ Skill '{skill_name}' 未安装或无元数据")
|
|
88
|
+
return
|
|
89
|
+
click.echo(f"ℹ️ Skill '{skill_name}':")
|
|
90
|
+
for k, v in data.items():
|
|
91
|
+
click.echo(f" {k}: {v}")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
if __name__ == "__main__":
|
|
95
|
+
cli()
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
|
|
5
|
+
SKILLS_DIR = os.path.expanduser("~/.advai/skills")
|
|
6
|
+
CONFIG_DIR = os.path.expanduser("~/.advai")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _skill_path(skill_name: str) -> str:
|
|
10
|
+
return os.path.join(SKILLS_DIR, skill_name)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _meta_path(skill_name: str) -> str:
|
|
14
|
+
return os.path.join(_skill_path(skill_name), "skill.json")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def install_skill(skill_name: str, force: bool = False) -> None:
|
|
18
|
+
"""安装一个 Skill(当前为占位实现,后续接实际下载/配置逻辑)"""
|
|
19
|
+
path = _skill_path(skill_name)
|
|
20
|
+
if os.path.exists(path) and not force:
|
|
21
|
+
raise FileExistsError(skill_name)
|
|
22
|
+
|
|
23
|
+
os.makedirs(path, exist_ok=True)
|
|
24
|
+
meta = {
|
|
25
|
+
"name": skill_name,
|
|
26
|
+
"version": "0.1.0",
|
|
27
|
+
"installed_at": datetime.utcnow().isoformat() + "Z",
|
|
28
|
+
"status": "installed",
|
|
29
|
+
}
|
|
30
|
+
with open(_meta_path(skill_name), "w", encoding="utf-8") as f:
|
|
31
|
+
json.dump(meta, f, ensure_ascii=False, indent=2)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def uninstall_skill(skill_name: str) -> None:
|
|
35
|
+
import shutil
|
|
36
|
+
path = _skill_path(skill_name)
|
|
37
|
+
if not os.path.exists(path):
|
|
38
|
+
raise FileNotFoundError(skill_name)
|
|
39
|
+
shutil.rmtree(path)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def list_skills():
|
|
43
|
+
if not os.path.isdir(SKILLS_DIR):
|
|
44
|
+
return []
|
|
45
|
+
return sorted(
|
|
46
|
+
name for name in os.listdir(SKILLS_DIR)
|
|
47
|
+
if os.path.isdir(os.path.join(SKILLS_DIR, name)) and not name.startswith(".")
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def update_skill(skill_name=None):
|
|
52
|
+
"""更新指定或全部已安装 Skill。当前为占位实现:只刷新元数据时间戳。"""
|
|
53
|
+
targets = [skill_name] if skill_name else list_skills()
|
|
54
|
+
updated = []
|
|
55
|
+
for name in targets:
|
|
56
|
+
if not os.path.isdir(_skill_path(name)):
|
|
57
|
+
continue
|
|
58
|
+
try:
|
|
59
|
+
install_skill(name, force=True)
|
|
60
|
+
updated.append(name)
|
|
61
|
+
except Exception:
|
|
62
|
+
continue
|
|
63
|
+
return updated
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def info_skill(skill_name: str):
|
|
67
|
+
mp = _meta_path(skill_name)
|
|
68
|
+
if not os.path.isfile(mp):
|
|
69
|
+
sp = _skill_path(skill_name)
|
|
70
|
+
if not os.path.isdir(sp):
|
|
71
|
+
return None
|
|
72
|
+
return {"status": "installed", "version": "unknown"}
|
|
73
|
+
with open(mp, "r", encoding="utf-8") as f:
|
|
74
|
+
return json.load(f)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: advai-cli
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 跨平台 AI Skill 管理器 — 一键 install / uninstall / list / update
|
|
5
|
+
Author: advai
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Advai-X/advai-x-cli
|
|
8
|
+
Project-URL: Issues, https://github.com/Advai-X/advai-x-cli/issues
|
|
9
|
+
Requires-Python: >=3.8
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: click>=8.1
|
|
12
|
+
|
|
13
|
+
# advai — 跨平台 AI Skill 管理器
|
|
14
|
+
|
|
15
|
+
一个用 Python 写的 CLI,让你可以像安装软件包一样安装/卸载 AI Skills。
|
|
16
|
+
|
|
17
|
+
- **平台**:macOS / Linux / Windows
|
|
18
|
+
- **安装方式**:`pip` / `npm` / `brew` / `curl | bash` 任选
|
|
19
|
+
- **核心命令**:`install` / `uninstall` / `list` / `update` / `info`
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 方式一:pip
|
|
27
|
+
pip install advai
|
|
28
|
+
|
|
29
|
+
# 方式二:npm
|
|
30
|
+
npm install -g advai
|
|
31
|
+
|
|
32
|
+
# 方式三:brew
|
|
33
|
+
brew install https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/Formula/advai.rb
|
|
34
|
+
|
|
35
|
+
# 方式四:一键脚本
|
|
36
|
+
curl -fsSL https://raw.githubusercontent.com/Advai-X/advai-x-cli/main/install.sh | bash
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
安装完成后:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
advai --version
|
|
43
|
+
advai --help
|
|
44
|
+
advai install demo-skill
|
|
45
|
+
advai list
|
|
46
|
+
advai info demo-skill
|
|
47
|
+
advai uninstall demo-skill
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 项目结构
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
advai/ # 核心 CLI(Python)
|
|
56
|
+
__init__.py
|
|
57
|
+
cli.py # 命令行入口(基于 click)
|
|
58
|
+
skills.py # Skill 安装 / 卸载 / 元数据逻辑
|
|
59
|
+
Formula/advai.rb # Homebrew 配方
|
|
60
|
+
bin/advai.js # npm 入口桥接脚本
|
|
61
|
+
install.sh # curl | bash 一键安装脚本
|
|
62
|
+
pyproject.toml # PyPI 打包配置
|
|
63
|
+
package.json # npm 打包配置
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 本地开发
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 从源码运行
|
|
72
|
+
python3 -m advai.cli --help
|
|
73
|
+
|
|
74
|
+
# 构建发布包
|
|
75
|
+
python3 -m pip install --upgrade build twine
|
|
76
|
+
python3 -m build
|
|
77
|
+
python3 -m twine upload dist/*
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## License
|
|
83
|
+
|
|
84
|
+
MIT
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
advai/__init__.py
|
|
4
|
+
advai/cli.py
|
|
5
|
+
advai/skills.py
|
|
6
|
+
advai_cli.egg-info/PKG-INFO
|
|
7
|
+
advai_cli.egg-info/SOURCES.txt
|
|
8
|
+
advai_cli.egg-info/dependency_links.txt
|
|
9
|
+
advai_cli.egg-info/entry_points.txt
|
|
10
|
+
advai_cli.egg-info/requires.txt
|
|
11
|
+
advai_cli.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
click>=8.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
advai
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "advai-cli"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "跨平台 AI Skill 管理器 — 一键 install / uninstall / list / update"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "advai" }]
|
|
13
|
+
dependencies = [
|
|
14
|
+
"click>=8.1",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.scripts]
|
|
18
|
+
advai = "advai.cli:cli"
|
|
19
|
+
|
|
20
|
+
[project.urls]
|
|
21
|
+
Homepage = "https://github.com/Advai-X/advai-x-cli"
|
|
22
|
+
Issues = "https://github.com/Advai-X/advai-x-cli/issues"
|
|
23
|
+
|
|
24
|
+
[tool.setuptools]
|
|
25
|
+
packages = ["advai"]
|