@pippit-dev/cli 0.0.23 → 0.0.25
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.
- package/README.md +5 -5
- package/checksums.txt +6 -6
- package/cmd/update/update.go +29 -1
- package/cmd/update/update_test.go +25 -0
- package/package.json +2 -2
- package/scripts/install.js +3 -1
- package/scripts/skills.js +22 -0
- package/skills/short-drama/SKILL.md +1 -1
- package/skills/xyq-nest-skill/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
| 技能 | 说明 | 路径 |
|
|
10
10
|
|-------|-------------|------|
|
|
11
|
-
| `
|
|
12
|
-
| `xyq-
|
|
11
|
+
| `xyq-short-drama-skill` | 短剧工作流技能,支持提交创作任务、上传参考文件、查询进度、列出会话文件和下载产物。 | `skills/short-drama/` |
|
|
12
|
+
| `xyq-skill` | 通用 NestAgent 技能,支持图片/视频生成、编辑、文件上传、进度查询和结果下载。 | `skills/xyq-nest-skill/` |
|
|
13
13
|
|
|
14
14
|
## 通用 NestAgent 技能
|
|
15
15
|
|
|
16
|
-
`xyq-
|
|
16
|
+
`xyq-skill` 通过接入小云雀 NestAgent 的综合创作能力,实现 AI 图片/视频生成、编辑、风格转换、文件上传、进度查询和结果下载。
|
|
17
17
|
|
|
18
18
|
### 功能特性
|
|
19
19
|
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
### 配置
|
|
34
34
|
|
|
35
|
-
所有 `xyq-
|
|
35
|
+
所有 `xyq-skill` 脚本都使用 Bearer 令牌鉴权:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
38
|
export XYQ_ACCESS_KEY="<access-key>"
|
|
@@ -214,4 +214,4 @@ pippit-tool-cli short-drama +download-result --output-path ./thread_123/results/
|
|
|
214
214
|
|
|
215
215
|
## 鉴权
|
|
216
216
|
|
|
217
|
-
`short-drama +submit-run`、`short-drama +get-thread`、`short-drama +upload-file` 以及 `xyq-
|
|
217
|
+
`short-drama +submit-run`、`short-drama +get-thread`、`short-drama +upload-file` 以及 `xyq-skill` Python 脚本都使用 `Authorization: Bearer <XYQ_ACCESS_KEY>` 鉴权。OAuth 命令代码仍保留在仓库中,但短剧运行时请求不使用 OAuth。
|
package/checksums.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
b962c9bb2ce808ab57ed4cb7ea08f35f7ac407e92d1bab0c60c124e333df3882 pippit-tool-cli-0.0.25-darwin-amd64.tar.gz
|
|
2
|
+
f99080aa1a7e5efbb46f86f21b677ca954e542ecd6722198d0f371d1d901410e pippit-tool-cli-0.0.25-darwin-arm64.tar.gz
|
|
3
|
+
ae8f76ed27eb3d9af19d083526d8da53ed43a515e61eb497932af6eef77e91b6 pippit-tool-cli-0.0.25-linux-amd64.tar.gz
|
|
4
|
+
621b466278ca3be564cf996cfc884e4e1976f9e19227c2fa99c0a364a19c7087 pippit-tool-cli-0.0.25-linux-arm64.tar.gz
|
|
5
|
+
1d44b6a9a3f6f785d00e65693038119203d21b391c77733d84f6172846713252 pippit-tool-cli-0.0.25-windows-amd64.zip
|
|
6
|
+
e978f14a65d6da4714fa9589c2e616ef42c68bc99031156bc86c1071606c244d pippit-tool-cli-0.0.25-windows-arm64.zip
|
package/cmd/update/update.go
CHANGED
|
@@ -14,6 +14,11 @@ import (
|
|
|
14
14
|
|
|
15
15
|
const defaultPackage = "@pippit-dev/cli"
|
|
16
16
|
|
|
17
|
+
var legacyGlobalSkills = []string{
|
|
18
|
+
"pippit-short-drama-skill",
|
|
19
|
+
"xyq-nest-skill",
|
|
20
|
+
}
|
|
21
|
+
|
|
17
22
|
// NewCommand builds the update command.
|
|
18
23
|
func NewCommand(stdout, stderr io.Writer) *cobra.Command {
|
|
19
24
|
cmd := &cobra.Command{
|
|
@@ -74,7 +79,30 @@ func installSkills(root string, stderr io.Writer) error {
|
|
|
74
79
|
} else if !info.IsDir() {
|
|
75
80
|
return fmt.Errorf("%s is not a directory", filepath.Join(root, "skills"))
|
|
76
81
|
}
|
|
77
|
-
|
|
82
|
+
if err := runInherit(stderr, "npx", "-y", "skills", "add", root, "-g", "-y", "--skill", "*"); err != nil {
|
|
83
|
+
return err
|
|
84
|
+
}
|
|
85
|
+
return cleanupLegacyGlobalSkills(defaultGlobalSkillsDir())
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
func defaultGlobalSkillsDir() string {
|
|
89
|
+
home, err := os.UserHomeDir()
|
|
90
|
+
if err != nil {
|
|
91
|
+
return ""
|
|
92
|
+
}
|
|
93
|
+
return filepath.Join(home, ".agents", "skills")
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
func cleanupLegacyGlobalSkills(globalSkillsDir string) error {
|
|
97
|
+
if globalSkillsDir == "" {
|
|
98
|
+
return nil
|
|
99
|
+
}
|
|
100
|
+
for _, skillName := range legacyGlobalSkills {
|
|
101
|
+
if err := os.RemoveAll(filepath.Join(globalSkillsDir, skillName)); err != nil {
|
|
102
|
+
return err
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return nil
|
|
78
106
|
}
|
|
79
107
|
|
|
80
108
|
func runInherit(stderr io.Writer, name string, args ...string) error {
|
|
@@ -29,6 +29,7 @@ func TestInstallSkillsInstallsAllBundledSkills(t *testing.T) {
|
|
|
29
29
|
|
|
30
30
|
t.Setenv("PATH", binDir+string(os.PathListSeparator)+os.Getenv("PATH"))
|
|
31
31
|
t.Setenv("CAPTURE_ARGS", capturePath)
|
|
32
|
+
t.Setenv("HOME", t.TempDir())
|
|
32
33
|
|
|
33
34
|
var stderr bytes.Buffer
|
|
34
35
|
if err := installSkills(root, &stderr); err != nil {
|
|
@@ -45,3 +46,27 @@ func TestInstallSkillsInstallsAllBundledSkills(t *testing.T) {
|
|
|
45
46
|
t.Fatalf("npx args mismatch\ngot: %#v\nwant: %#v", got, want)
|
|
46
47
|
}
|
|
47
48
|
}
|
|
49
|
+
|
|
50
|
+
func TestCleanupLegacyGlobalSkills(t *testing.T) {
|
|
51
|
+
globalSkillsDir := t.TempDir()
|
|
52
|
+
for _, skillName := range []string{"pippit-short-drama-skill", "xyq-nest-skill", "xyq-short-drama-skill", "xyq-skill"} {
|
|
53
|
+
if err := os.Mkdir(filepath.Join(globalSkillsDir, skillName), 0o755); err != nil {
|
|
54
|
+
t.Fatal(err)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if err := cleanupLegacyGlobalSkills(globalSkillsDir); err != nil {
|
|
59
|
+
t.Fatalf("cleanupLegacyGlobalSkills() error = %v", err)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
for _, skillName := range []string{"pippit-short-drama-skill", "xyq-nest-skill"} {
|
|
63
|
+
if _, err := os.Stat(filepath.Join(globalSkillsDir, skillName)); !os.IsNotExist(err) {
|
|
64
|
+
t.Fatalf("legacy skill %s still exists or stat failed: %v", skillName, err)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for _, skillName := range []string{"xyq-short-drama-skill", "xyq-skill"} {
|
|
68
|
+
if _, err := os.Stat(filepath.Join(globalSkillsDir, skillName)); err != nil {
|
|
69
|
+
t.Fatalf("new skill %s was not preserved: %v", skillName, err)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pippit-dev/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
4
4
|
"description": "Pippit CLI",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pippit-tool-cli": "scripts/run.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
9
|
"postinstall": "node scripts/install.js",
|
|
10
|
-
"test": "node scripts/version-check.test.js && go test ./... && go vet ./..."
|
|
10
|
+
"test": "node scripts/version-check.test.js && node scripts/skills.test.js && go test ./... && go vet ./..."
|
|
11
11
|
},
|
|
12
12
|
"os": [
|
|
13
13
|
"darwin",
|
package/scripts/install.js
CHANGED
|
@@ -5,7 +5,7 @@ const fs = require("fs");
|
|
|
5
5
|
const os = require("os");
|
|
6
6
|
const path = require("path");
|
|
7
7
|
const { isWindows, run } = require("./platform");
|
|
8
|
-
const { installSkillsFromRoot } = require("./skills");
|
|
8
|
+
const { cleanupLegacyGlobalSkills, installSkillsFromRoot } = require("./skills");
|
|
9
9
|
|
|
10
10
|
const VERSION = require("../package.json").version.replace(/-.*$/, "");
|
|
11
11
|
const REPO = "Pippit-dev/cli";
|
|
@@ -134,6 +134,8 @@ function install() {
|
|
|
134
134
|
|
|
135
135
|
if (process.env.PIPPIT_CLI_SKIP_SKILLS !== "1") {
|
|
136
136
|
installSkillsFromRoot(ROOT);
|
|
137
|
+
} else {
|
|
138
|
+
cleanupLegacyGlobalSkills();
|
|
137
139
|
}
|
|
138
140
|
console.log(`${NAME} v${VERSION} installed successfully`);
|
|
139
141
|
} finally {
|
package/scripts/skills.js
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
const fs = require("fs");
|
|
2
|
+
const os = require("os");
|
|
2
3
|
const path = require("path");
|
|
3
4
|
const { run, runSilent } = require("./platform");
|
|
4
5
|
|
|
5
6
|
const DEFAULT_PKG = "@pippit-dev/cli";
|
|
7
|
+
const LEGACY_GLOBAL_SKILLS = [
|
|
8
|
+
"pippit-short-drama-skill",
|
|
9
|
+
"xyq-nest-skill",
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
function defaultGlobalSkillsDir() {
|
|
13
|
+
return path.join(os.homedir(), ".agents", "skills");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function cleanupLegacyGlobalSkills(globalSkillsDir = defaultGlobalSkillsDir()) {
|
|
17
|
+
for (const skillName of LEGACY_GLOBAL_SKILLS) {
|
|
18
|
+
fs.rmSync(path.join(globalSkillsDir, skillName), {
|
|
19
|
+
force: true,
|
|
20
|
+
recursive: true,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
6
24
|
|
|
7
25
|
function installSkillsFromRoot(root, opts = {}) {
|
|
8
26
|
const source = path.resolve(root);
|
|
@@ -13,6 +31,7 @@ function installSkillsFromRoot(root, opts = {}) {
|
|
|
13
31
|
run("npx", ["-y", "skills", "add", source, "-g", "-y", "--skill", "*"], {
|
|
14
32
|
timeout: opts.timeout || 120000,
|
|
15
33
|
});
|
|
34
|
+
cleanupLegacyGlobalSkills(opts.globalSkillsDir);
|
|
16
35
|
}
|
|
17
36
|
|
|
18
37
|
function globalPackageRoot(pkg = DEFAULT_PKG) {
|
|
@@ -26,6 +45,9 @@ function installGlobalPackageSkills(pkg = DEFAULT_PKG, opts = {}) {
|
|
|
26
45
|
|
|
27
46
|
module.exports = {
|
|
28
47
|
DEFAULT_PKG,
|
|
48
|
+
LEGACY_GLOBAL_SKILLS,
|
|
49
|
+
cleanupLegacyGlobalSkills,
|
|
50
|
+
defaultGlobalSkillsDir,
|
|
29
51
|
globalPackageRoot,
|
|
30
52
|
installGlobalPackageSkills,
|
|
31
53
|
installSkillsFromRoot,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: xyq-short-drama-skill
|
|
3
3
|
description: 使用 pippit-tool-cli 的短剧场景能力提交和查询短剧创作任务。覆盖短剧生成、续写、改写、剧情扩展、人物设定、分集草稿、世界观设定、会话文件获取、文件资源下载等创作场景。当用户要求创作短剧、写短剧剧本、续写故事、修改剧情、补充角色设定、查询短剧任务进展、获取短剧会话文件或下载短剧文件资源,或提到 pippit-tool-cli short-drama / 小云雀短剧时触发。
|
|
4
4
|
user-invocable: true
|
|
5
5
|
metadata:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: xyq-
|
|
2
|
+
name: xyq-skill
|
|
3
3
|
description: 通过小云雀的 AI 能力进行综合创作,支持生成和编辑图片/视频。覆盖场景包括:生成(文生图、文生视频、图生视频、做动画、画一个xxx、来段xxx)、编辑修改(把xxx换成yyy、去掉xxx、加上xxx、改成xxx、调整xxx、局部修改、改镜头)、风格转换(风格迁移、转绘、换风格)、视频续写延长、复刻视频/TVC/宣传片、短剧/短漫剧生成、音乐MV生成、产品广告/展示片制作、分镜/故事板设计、教育视频/短视频制作。当用户提到小云雀、xyq、上传参考图/视频、查看生成进度时也应触发。关键判断:只要用户的请求涉及 AI 视频的创作、生成、编辑、修改,无论措辞如何(如"画只猫"、"做个海报"、"做个视频"、"这个视频帮我改一下"、"帮我复刻这段视频"、"用这首歌做个MV"、"一句话生成短剧"),都必须触发此技能。
|
|
4
4
|
user-invocable: true
|
|
5
5
|
metadata:
|