jacky-creator 0.1.0-beta.6 → 0.1.0-beta.7
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 +11 -5
- package/docs/installation.md +11 -3
- package/docs/usage.md +22 -22
- package/lib/client.js +3 -3
- package/lib/index.js +48 -48
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,17 +43,17 @@ Jacky Creator 把 DeepSeek Harness 的对话能力和本地创作目录连起来
|
|
|
43
43
|
|
|
44
44
|
### 2. 安装 Jacky Creator
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
推荐在 DSH Desktop 的内置终端安装 npm 成品包;插件市场同步完成后也可以一键安装。
|
|
47
47
|
|
|
48
|
-
####
|
|
48
|
+
#### 方式一:通过 DSH Plugin Hub 安装
|
|
49
49
|
|
|
50
50
|
先打开 DSH Desktop 的内置终端,安装可视化插件市场:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
dsh plugin --profile web add
|
|
53
|
+
dsh plugin --profile web add dsh-plugin
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
彻底退出并重新打开 DSH Desktop
|
|
56
|
+
彻底退出并重新打开 DSH Desktop。市场目录同步并显示 `Jacky Creator` 后,进入“设置 → 插件市场”,打开插件卡片并点击安装。
|
|
57
57
|
|
|
58
58
|
插件市场目录按周期同步。如果市场显示的版本低于 GitHub 最新版本,可以改用下面的命令行方式。
|
|
59
59
|
|
|
@@ -62,7 +62,13 @@ dsh plugin --profile web add dshmarket
|
|
|
62
62
|
打开 DSH Desktop 的内置终端,复制下面一行并回车:
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
dsh plugin --profile web add
|
|
65
|
+
dsh plugin --profile web add jacky-creator
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
如果 npm 通道暂时不可用,可以改装同版本的 GitHub Release 成品包:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
dsh plugin --profile web add https://github.com/Jackywxsz/DSH-Creator/releases/download/v0.1.0-beta.7/jacky-creator-0.1.0-beta.7.tgz
|
|
66
72
|
```
|
|
67
73
|
|
|
68
74
|
无论使用哪种方式,安装完成后都要彻底退出并重新打开 DSH Desktop。侧边栏左上角出现 **Jacky Creator**,并能进入“内容 / 运营 / 灵感”,即表示安装成功。
|
package/docs/installation.md
CHANGED
|
@@ -19,11 +19,17 @@ DSH Desktop 和 Jacky Creator 均为社区项目。
|
|
|
19
19
|
### 2. 运行安装命令
|
|
20
20
|
|
|
21
21
|
~~~bash
|
|
22
|
-
dsh plugin add
|
|
22
|
+
dsh plugin --profile web add jacky-creator
|
|
23
23
|
~~~
|
|
24
24
|
|
|
25
25
|
等待命令结束,不要在安装过程中重复执行。
|
|
26
26
|
|
|
27
|
+
如果 npm 通道暂时不可用,可以安装同版本的 GitHub Release 成品包:
|
|
28
|
+
|
|
29
|
+
~~~bash
|
|
30
|
+
dsh plugin --profile web add https://github.com/Jackywxsz/DSH-Creator/releases/download/v0.1.0-beta.7/jacky-creator-0.1.0-beta.7.tgz
|
|
31
|
+
~~~
|
|
32
|
+
|
|
27
33
|
如果日志出现 `Issues with peer dependencies found`,先看命令最后是否显示安装完成。只有出现 `dsh: pnpm failed` 或其他明确失败提示时,才需要提交日志排查。
|
|
28
34
|
|
|
29
35
|
### 3. 重启 DSH Desktop
|
|
@@ -67,7 +73,7 @@ Jacky Creator 会检查内容目录和可选能力,只显示凭据是否已配
|
|
|
67
73
|
|
|
68
74
|
### 安装日志提示构建脚本被阻止
|
|
69
75
|
|
|
70
|
-
这通常说明安装的是 GitHub 源码地址。普通用户不要修改 DSH Profile,重新复制本页的
|
|
76
|
+
这通常说明安装的是 GitHub 源码地址。普通用户不要修改 DSH Profile,重新复制本页的 `jacky-creator` npm 安装命令;npm 通道不可用时再使用 GitHub Release 成品包。
|
|
71
77
|
|
|
72
78
|
### 安装完成但侧边栏没有变化
|
|
73
79
|
|
|
@@ -91,9 +97,11 @@ dsh plugin remove dsh-oil-creator
|
|
|
91
97
|
|
|
92
98
|
然后执行本页的新安装命令并重启 DSH Desktop。Jacky Creator 会把旧工作台状态复制到新目录,不删除旧目录,也不覆盖已经存在的新数据。
|
|
93
99
|
|
|
100
|
+
升级到统一 `jacky_creator_*` Agent 命令的版本后,请新建会话再继续创作。升级前已经打开的会话仍保存旧工具目录,继续使用可能出现 `UNKNOWN_TOOL`;不要为此删除历史会话或内容目录。
|
|
101
|
+
|
|
94
102
|
## 更新
|
|
95
103
|
|
|
96
|
-
看到新版本后,打开 [GitHub Releases](https://github.com/Jackywxsz/DSH-Creator/releases)
|
|
104
|
+
看到新版本后,打开 [GitHub Releases](https://github.com/Jackywxsz/DSH-Creator/releases),按该版本说明中的安装命令更新。更新后彻底退出并重新打开 DSH Desktop,再新建会话。更新不会主动删除内容目录,重要内容仍建议提前备份。
|
|
97
105
|
|
|
98
106
|
## 数据保留
|
|
99
107
|
|
package/docs/usage.md
CHANGED
|
@@ -29,13 +29,13 @@ DeepSeek Harness 打开后,左侧切到「内容」,中间是一条片子的
|
|
|
29
29
|
|
|
30
30
|
环境状态中的“重新检测”会检查内容目录、Screen Studio、字幕、Jacky Cover、自动剪辑、自动发布、Jacky Motion 和 Ego Browser。公开依赖可以在明确确认后安装到 `~/.agents/skills`,不会覆盖已有目录;字幕安装会运行固定版本自带的 `setup.sh`。Jacky Cover 和 Jacky Motion 的品牌私有层没有可验证公开安装源时,页面只说明缺失,不伪造一键安装。自动发布的公开兼容包仍保留 `video-publisher` 身份,首次配置会按已保存的平台写入其发布偏好。
|
|
31
31
|
|
|
32
|
-
脚本规则是写 `script.md` 时 AI 必须遵循的语气、结构和禁忌,也可以直接在对话里让 AI 记录,AI 会用 `
|
|
32
|
+
脚本规则是写 `script.md` 时 AI 必须遵循的语气、结构和禁忌,也可以直接在对话里让 AI 记录,AI 会用 `jacky_creator_script_rules` 存到同一个地方。字幕转录使用百炼 `DASHSCOPE_API_KEY`,封面使用 ZenMux `ZENMUX_API_KEY`,两者和视觉识别共用官方凭据;页面只显示已配置或未配置,不会把 Key 读回来。
|
|
33
33
|
|
|
34
|
-
首次使用推荐选 Harness 的 `standard` 或 `code` Agent preset,再直接说「检查并配置内容工作台」。内置 `creator-workbench` Skill 会让 AI 先调用 `
|
|
34
|
+
首次使用推荐选 Harness 的 `standard` 或 `code` Agent preset,再直接说「检查并配置内容工作台」。内置 `jacky-creator-workbench` Skill 会让 AI 先调用 `jacky_creator_setup` 检查环境。AI 能从系统发现的目录和能力不再逐项追问;任何写入都会先预览,用户确认后才应用。`minimal` preset 没有 Skill 和文件工具,不适合首次引导、自动整理目录或修改正文。
|
|
35
35
|
|
|
36
|
-
装完不知道能做什么时,直接问「这个插件怎么用」。AI 会调用 `
|
|
36
|
+
装完不知道能做什么时,直接问「这个插件怎么用」。AI 会调用 `jacky_creator_guide`,拿到带当前能力状态的完整指引后告诉你:哪些环节现在就能用,哪些还缺依赖。自动发布和已发布数据回收都依赖 Ego Browser;没装的时候 AI 会明说这两项不可用,片库、脚本、字幕、封面不受影响。
|
|
37
37
|
|
|
38
|
-
候选影片目录不存在时,先让 AI 展示准备创建的完整路径;确认后创建目录,再重新预览配置并确认应用。`
|
|
38
|
+
候选影片目录不存在时,先让 AI 展示准备创建的完整路径;确认后创建目录,再重新预览配置并确认应用。`jacky_creator_setup` 只接受已经存在的目录,不会暗中创建文件夹。
|
|
39
39
|
|
|
40
40
|
## 对话里怎么读片子
|
|
41
41
|
|
|
@@ -45,20 +45,20 @@ DeepSeek Harness 打开后,左侧切到「内容」,中间是一条片子的
|
|
|
45
45
|
|
|
46
46
|
| 工具 | 作用 |
|
|
47
47
|
| --- | --- |
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
48
|
+
| `jacky_creator_guide` | 自举指引:返回完整工作流和当前能力状态,用户问「这个插件怎么用」时先调它 |
|
|
49
|
+
| `jacky_creator_script_rules` | 读或写脚本规则(人设);写改 script.md 前先读 |
|
|
50
|
+
| `jacky_creator_setup` | 只读检查环境,或先预览、确认后保存目录和启用平台 |
|
|
51
|
+
| `jacky_creator_create_content` | 按今天的日期新建文件夹 |
|
|
52
|
+
| `jacky_creator_update_content` | 标记待录制、绑定工程、改某一平台的发布标记 |
|
|
53
|
+
| `jacky_creator_open_studio` | 打开已绑定的 Screen Studio 工程 |
|
|
54
|
+
| `jacky_creator_wait_export` | 等到文件夹里出现稳定的 MP4 / MOV |
|
|
55
|
+
| `jacky_creator_generate_subtitles` | 转录、自动校对、排版;立刻返回;完成后打开预览,出现 `subtitle-transcript.json`,不烧录 |
|
|
56
|
+
| `jacky_creator_open_subtitle_preview` | 在浏览器打开字幕预览编辑器 |
|
|
57
|
+
| `jacky_creator_burn_subtitles` | 用户预览确认后再烧进成片;立刻返回;完成后出现 `*_subtitled.mp4` |
|
|
58
|
+
| `jacky_creator_generate_cover` | 用 Jacky Cover 品牌补丁和 ZenMux 一键生成 3:4 / 4:3 / 16:9 封面,立刻返回;完成后出现对应 png |
|
|
59
|
+
| `jacky_creator_sync_publish` | 用 Ego 翻完启用平台的已发布列表,按标题或已存 id 写回播放 / 赞 / 评 |
|
|
60
|
+
| `jacky_creator_profile` | 读或改 `enabledPlatforms`,即 AI 发布和数据同步使用的平台列表 |
|
|
61
|
+
| `jacky_creator_organize_library` | 预览或把文件夹改成 `日期_可读标题`,默认只预览 |
|
|
62
62
|
|
|
63
63
|
长任务都是先启动,再看文件夹里有没有产物,不要把一次启动当成已经完成。
|
|
64
64
|
|
|
@@ -66,15 +66,15 @@ DeepSeek Harness 打开后,左侧切到「内容」,中间是一条片子的
|
|
|
66
66
|
|
|
67
67
|
先在右边说清楚内容主题,再让对话新建项目、整理选题或生成脚本初稿。
|
|
68
68
|
|
|
69
|
-
对应工具是 `
|
|
69
|
+
对应工具是 `jacky_creator_create_content`。选题写进这一期的 `topic.md`,脚本写进 `script.md`,也可以之后在中间「脚本」页自己改。
|
|
70
70
|
|
|
71
71
|
录制用 Screen Studio。录完把 `.screenstudio` 工程绑到这一期,可以说:「把刚才的工程绑到这条,然后打开。」检查器里也可以点绑定或打开。
|
|
72
72
|
|
|
73
73
|
剪辑在对话里喊 `screen-studio-editor`,对照绑定的工程清理停顿和误讲。工作台只负责打开工程,不替你改时间线。预览满意后,在 Screen Studio 里亲手导出 MP4,导出目标就是这一期的文件夹。
|
|
74
74
|
|
|
75
|
-
导出开始后说:「等这条的成片落盘,落盘后生成字幕和封面。」`
|
|
75
|
+
导出开始后说:「等这条的成片落盘,落盘后生成字幕和封面。」`jacky_creator_wait_export` 会等到文件大小稳定。成片到了再用 `jacky_creator_generate_subtitles` 出字幕稿并打开预览;用户确认后再 `jacky_creator_burn_subtitles`。封面用 `jacky_creator_generate_cover`,调用前按 Jacky Cover 规则提炼主标题传入 `title`。生成后核对标题、人物身份和错别字。
|
|
76
76
|
|
|
77
|
-
首次 clone `oil-subtitle` 后必须运行 `bash ~/.agents/skills/oil-subtitle/setup.sh`,否则字幕工作流不会就绪。不要在预览前烧录。`
|
|
77
|
+
首次 clone `oil-subtitle` 后必须运行 `bash ~/.agents/skills/oil-subtitle/setup.sh`,否则字幕工作流不会就绪。不要在预览前烧录。`jacky_creator_burn_subtitles` 不会覆盖已经带字幕的成片文件名习惯,产物文件名里带 `_subtitled`。
|
|
78
78
|
|
|
79
79
|
每条内容的概览都固定显示发布状态;还没走到发布阶段时也能看到启用平台的进度,点「展开平台状态」可核对。成片、字幕、封面齐了,阶段会变成「待发布」。上传优先用已发现的 `jacky-video-publisher`,否则使用兼容的 `video-publisher`,并且只处理 `enabledPlatforms` 中启用的平台;做到各平台的最终发表按钮前停下,你自己点发表。在运营的待发布卡片点「去确认发布」,或直接打开内容详情,在真实发布的平台上把状态改成「已发布」。系统会默认记录当天为实际发布日期,也可以手动修改。任一启用平台确认发布后,主流程立即进入「已发布」并出现在复盘页;其余平台显示为分发进度,不会卡住复盘。
|
|
80
80
|
|
|
@@ -109,4 +109,4 @@ DeepSeek Harness 打开后,左侧切到「内容」,中间是一条片子的
|
|
|
109
109
|
|
|
110
110
|
第一次用先让 AI 检查环境,再确认影片目录。字幕、封面、Screen Studio 和 Ego Lite 都是可选能力,缺少时不会影响片库和脚本管理。字幕和封面没有 Key 时,对应按钮会提示去设置里填写。有成片后,检查器里可以生成字幕稿并打开预览,确认后再烧录;封面也可以在检查器里生成,不用再走对话。
|
|
111
111
|
|
|
112
|
-
文件夹名被连字符弄乱时,可以说:「预览整理影片目录。」确认后再让它真正重命名。`
|
|
112
|
+
文件夹名被连字符弄乱时,可以说:「预览整理影片目录。」确认后再让它真正重命名。`jacky_creator_organize_library` 默认只预览,不会删文件。
|
package/lib/client.js
CHANGED
|
@@ -6787,7 +6787,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
6787
6787
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("inspector.operations.title") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("inspector.operations.hint") })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
6788
6788
|
type: "button",
|
|
6789
6789
|
onClick: () => {
|
|
6790
|
-
if (!sendCockpitInstruction(`请为 contentId=${contentId} 创作口播脚本。先调用
|
|
6790
|
+
if (!sendCockpitInstruction(`请为 contentId=${contentId} 创作口播脚本。先调用 jacky_creator_get_script_context 读取运营看板中已选的策略、规则和模板,再调用 jacky_creator_script_rules 读取长期人设规则。结合 topic.md 写出成稿,并保存到这条 Jacky 内容项目的 script.md。不要只把脚本发在对话里。`)) window.alert(t("operations.ai.noSession"));
|
|
6791
6791
|
},
|
|
6792
6792
|
children: t("inspector.operations.create")
|
|
6793
6793
|
})] }),
|
|
@@ -10793,7 +10793,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
10793
10793
|
...evaluation === void 0 ? {} : { evaluation },
|
|
10794
10794
|
...freshness[item.id] === void 0 ? {} : { evaluationFresh: freshness[item.id] },
|
|
10795
10795
|
requestEvaluation: () => {
|
|
10796
|
-
if (!sendCockpitInstruction(`请为 Jacky 运营看板中 contentId=${item.id} 的《${item.title}》执行六维评分。先调用
|
|
10796
|
+
if (!sendCockpitInstruction(`请为 Jacky 运营看板中 contentId=${item.id} 的《${item.title}》执行六维评分。先调用 jacky_creator_get_evaluation_context 读取当前内容与评分标准,逐项给出 0 到 5 的整数分、对应证据和改进建议,再调用 jacky_creator_save_evaluation 保存。不要伪造总分,Host 会重新计算。`)) window.alert(t("operations.ai.noSession"));
|
|
10797
10797
|
}
|
|
10798
10798
|
})
|
|
10799
10799
|
}, item.id);
|
|
@@ -12193,7 +12193,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
12193
12193
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
12194
12194
|
type: "button",
|
|
12195
12195
|
onClick: () => {
|
|
12196
|
-
if (!sendCockpitInstruction(`请为 Jacky 运营看板中 contentId=${item.id} 的《${item.title}》生成发布后复盘草稿。先调用
|
|
12196
|
+
if (!sendCockpitInstruction(`请为 Jacky 运营看板中 contentId=${item.id} 的《${item.title}》生成发布后复盘草稿。先调用 jacky_creator_get_review_context 读取真实内容、发布数据、补充指标和最新评分,再分析有效做法、问题、下一步实验,并调用 jacky_creator_save_review_draft 保存为草稿。不得替用户确认复盘,也不得直接沉淀规则或模板。`)) window.alert(t("operations.ai.noSession"));
|
|
12197
12197
|
},
|
|
12198
12198
|
children: latest === void 0 ? t("operations.reviews.ai") : t("operations.reviews.aiAgain")
|
|
12199
12199
|
})] }),
|
package/lib/index.js
CHANGED
|
@@ -1449,7 +1449,7 @@ var CreatorCockpitService = class extends TypertRemoteService {
|
|
|
1449
1449
|
analysis: state.contentMeta[entry.sourceContentId]?.reviews.find((review) => review.id === entry.sourceReviewId)?.analysis
|
|
1450
1450
|
}
|
|
1451
1451
|
})),
|
|
1452
|
-
instruction: "Read
|
|
1452
|
+
instruction: "Read jacky_creator_script_rules, use this Jacky operations context as supporting evidence, then write the finished draft to this content item's real script.md."
|
|
1453
1453
|
};
|
|
1454
1454
|
}
|
|
1455
1455
|
async promoteIdea(request, signal) {
|
|
@@ -1641,8 +1641,8 @@ const evidenceProperties = {
|
|
|
1641
1641
|
};
|
|
1642
1642
|
function registerCockpitTools(ctx, service) {
|
|
1643
1643
|
ctx.tools.register(defineTool({
|
|
1644
|
-
name: "
|
|
1645
|
-
description: "Read the real topic note plus the user-selected Jacky operations strategy, active review rules, and reusable templates for one Jacky content item. Use this before drafting its script; also read
|
|
1644
|
+
name: "jacky_creator_get_script_context",
|
|
1645
|
+
description: "Read the real topic note plus the user-selected Jacky operations strategy, active review rules, and reusable templates for one Jacky content item. Use this before drafting its script; also read jacky_creator_script_rules, then write the result to the real script.md instead of returning an untracked copy.",
|
|
1646
1646
|
parameters: { contentId: {
|
|
1647
1647
|
type: "string",
|
|
1648
1648
|
required: true,
|
|
@@ -1656,7 +1656,7 @@ function registerCockpitTools(ctx, service) {
|
|
|
1656
1656
|
execute: (args, exec) => service.getScriptContext({ id: args.contentId }, exec.signal).then(asJson$1)
|
|
1657
1657
|
}));
|
|
1658
1658
|
ctx.tools.register(defineTool({
|
|
1659
|
-
name: "
|
|
1659
|
+
name: "jacky_creator_get_evaluation_context",
|
|
1660
1660
|
description: "Read the minimum real topic, script, six-dimension rubric, rubric version, and input fingerprint required to evaluate one Jacky content item.",
|
|
1661
1661
|
parameters: { contentId: {
|
|
1662
1662
|
type: "string",
|
|
@@ -1671,7 +1671,7 @@ function registerCockpitTools(ctx, service) {
|
|
|
1671
1671
|
execute: (args, exec) => service.getEvaluationContext({ id: args.contentId }, exec.signal).then(asJson$1)
|
|
1672
1672
|
}));
|
|
1673
1673
|
ctx.tools.register(defineTool({
|
|
1674
|
-
name: "
|
|
1674
|
+
name: "jacky_creator_save_evaluation",
|
|
1675
1675
|
description: "Save one evidence-based six-dimension evaluation after reading its current context. Scores must be integers from 0 to 5. The Host verifies the fingerprint and recomputes total; do not provide a total.",
|
|
1676
1676
|
parameters: {
|
|
1677
1677
|
contentId: {
|
|
@@ -1712,7 +1712,7 @@ function registerCockpitTools(ctx, service) {
|
|
|
1712
1712
|
execute: (args, exec) => service.saveEvaluation(saveEvaluationRequestSchema.parse(args), exec.signal).then(asJson$1)
|
|
1713
1713
|
}));
|
|
1714
1714
|
ctx.tools.register(defineTool({
|
|
1715
|
-
name: "
|
|
1715
|
+
name: "jacky_creator_get_review_context",
|
|
1716
1716
|
description: "Read the minimum real content facts, publishing metrics, supplemental metrics, latest evaluation, and fingerprint needed to draft a post-publication review.",
|
|
1717
1717
|
parameters: { contentId: {
|
|
1718
1718
|
type: "string",
|
|
@@ -1727,7 +1727,7 @@ function registerCockpitTools(ctx, service) {
|
|
|
1727
1727
|
execute: (args, exec) => service.getReviewContext({ id: args.contentId }, exec.signal).then(asJson$1)
|
|
1728
1728
|
}));
|
|
1729
1729
|
ctx.tools.register(defineTool({
|
|
1730
|
-
name: "
|
|
1730
|
+
name: "jacky_creator_save_review_draft",
|
|
1731
1731
|
description: "Save an AI-generated review as a draft only. The Host verifies the context fingerprint. This tool cannot confirm the review or write a formal rule/template; those actions require explicit UI confirmation.",
|
|
1732
1732
|
parameters: {
|
|
1733
1733
|
contentId: {
|
|
@@ -1765,7 +1765,7 @@ function registerCockpitTools(ctx, service) {
|
|
|
1765
1765
|
//#endregion
|
|
1766
1766
|
//#region src/creatorSkill.ts
|
|
1767
1767
|
const CREATOR_WORKBENCH_SKILL = {
|
|
1768
|
-
name: "creator-workbench",
|
|
1768
|
+
name: "jacky-creator-workbench",
|
|
1769
1769
|
description: "配置和使用内容工作台。首次使用、调整内容目录、整理目录、检查字幕/封面/发布能力,或推进一条内容时使用。",
|
|
1770
1770
|
source: "runtime",
|
|
1771
1771
|
invocation: {
|
|
@@ -1776,16 +1776,16 @@ const CREATOR_WORKBENCH_SKILL = {
|
|
|
1776
1776
|
|
|
1777
1777
|
## 开始前
|
|
1778
1778
|
|
|
1779
|
-
1. 用户不知道这个插件能做什么、怎么用,或你不确定下一步时,先调用 \`
|
|
1780
|
-
2. 配置或诊断环境调用 \`
|
|
1779
|
+
1. 用户不知道这个插件能做什么、怎么用,或你不确定下一步时,先调用 \`jacky_creator_guide\`;它会返回带当前能力状态的完整指引。
|
|
1780
|
+
2. 配置或诊断环境调用 \`jacky_creator_setup\`,不要先向用户询问系统能够检查出来的信息。
|
|
1781
1781
|
3. 根据返回的 \`capabilities\` 区分核心能力和可选能力。内容目录是核心;Screen Studio、字幕、封面和发布同步缺失时只降级对应环节。
|
|
1782
1782
|
4. 如果需要寻找目录,先用系统文件工具只读查看候选目录。不要扫描整个磁盘,不要读取与内容工作无关的私人文件。
|
|
1783
1783
|
|
|
1784
1784
|
## 配置
|
|
1785
1785
|
|
|
1786
|
-
- 内容目录和 \`enabledPlatforms\` 通过 \`
|
|
1787
|
-
- 脚本规则(人设)通过 \`
|
|
1788
|
-
- 候选内容目录不存在时,先展示准备创建的完整路径;用户确认后用系统文件工具创建,再重新调用 \`
|
|
1786
|
+
- 内容目录和 \`enabledPlatforms\` 通过 \`jacky_creator_setup\` 配置;这里不配置创作者名称或平台主页。
|
|
1787
|
+
- 脚本规则(人设)通过 \`jacky_creator_script_rules\` 配置:写或改 script.md 前先读;用户第一次让你写脚本而没有规则时,主动问清语气、结构、禁忌和目标观众再存下;之后把新的长期偏好合并进现有规则,不要整体覆盖。
|
|
1788
|
+
- 候选内容目录不存在时,先展示准备创建的完整路径;用户确认后用系统文件工具创建,再重新调用 \`jacky_creator_setup\` 预览。不要把不存在的目录直接交给配置工具。
|
|
1789
1789
|
- 第一次带配置字段调用时保持 \`apply=false\`,把精确变更展示给用户。
|
|
1790
1790
|
- 只有用户确认后,才使用同一组字段和 \`apply=true\`。
|
|
1791
1791
|
- 不向用户索要 API Key 明文。字幕和封面凭据只能让用户在插件设置页通过 Harness Credentials 配置。
|
|
@@ -1796,13 +1796,13 @@ const CREATOR_WORKBENCH_SKILL = {
|
|
|
1796
1796
|
- 磁盘文件是正文真源;工作台 overlay 只保存绑定、阶段和发布状态。
|
|
1797
1797
|
- 一集一个子目录,默认命名为 \`YYYY-MM-DD_可读标题\`。
|
|
1798
1798
|
- 先列目录,再读这一集需要的 \`topic.md\`、\`script.md\`、发布包、字幕或文章文件。
|
|
1799
|
-
- 创建新内容使用 \`
|
|
1799
|
+
- 创建新内容使用 \`jacky_creator_create_content\`;修改普通 Markdown 和 JSON 正文使用系统文件工具。
|
|
1800
1800
|
|
|
1801
1801
|
## 整理与发布安全
|
|
1802
1802
|
|
|
1803
|
-
- 调用 \`
|
|
1803
|
+
- 调用 \`jacky_creator_organize_library\` 时先预览,向用户列出改名前后;确认后才传 \`apply=true\`。它不删除文件。
|
|
1804
1804
|
- 发布默认准备草稿。上传、账号登录和最终发表属于外部发布能力;最终发表必须由用户明确确认。
|
|
1805
|
-
- 自动发布优先使用已发现的 \`jacky-video-publisher\`,未安装时兼容公开的 \`video-publisher\`;不要把兼容包假称为 Jacky Skill。它和已发布数据回收(\`
|
|
1805
|
+
- 自动发布优先使用已发现的 \`jacky-video-publisher\`,未安装时兼容公开的 \`video-publisher\`;不要把兼容包假称为 Jacky Skill。它和已发布数据回收(\`jacky_creator_sync_publish\`)只处理 \`enabledPlatforms\` 中的平台,都依赖 Ego Browser 和已登录的创作者后台;\`enabledPlatforms\` 为空时不执行发布或同步,先配置并确认启用平台。能力检查显示缺失时明确告诉用户这两项不可用,其余功能照常。
|
|
1806
1806
|
|
|
1807
1807
|
## 推进工作
|
|
1808
1808
|
|
|
@@ -1870,16 +1870,16 @@ function enabledPlatformNames(platforms) {
|
|
|
1870
1870
|
}
|
|
1871
1871
|
function libraryConventionText(libraryRoot, dataDir, scriptRules, enabledPlatforms) {
|
|
1872
1872
|
const lines = [
|
|
1873
|
-
`创作者的视频内容以磁盘文件为准,目录是 ${libraryRoot}。首次使用或能力不明确时先调用
|
|
1873
|
+
`创作者的视频内容以磁盘文件为准,目录是 ${libraryRoot}。首次使用或能力不明确时先调用 jacky_creator_setup 做只读检查;用户问这个插件能做什么、怎么用,或你不确定下一步时,调用 jacky_creator_guide 获取带当前能力状态的完整指引。`,
|
|
1874
1874
|
"一集一个子文件夹,名字是 YYYY-MM-DD_可读标题。列出这个目录就是片库;打开一集先列出那个文件夹,再读需要的文件。",
|
|
1875
1875
|
"约定文件:topic.md 选题;script.md 口播脚本;公众号文章/<标题>.md 已转写文章,配图在 公众号文章/images/;publish-package.json 只放标题和 tags,不写平台长文案;*.mp4/*.mov 成片(_subtitled 为烧录版);*.srt/*.ass 字幕;*_3x4.png *_4x3.png *_16x9.png 封面。",
|
|
1876
1876
|
"读或改这些内容,用系统自带的列文件、读文件、写文件工具。不要为了看一集再调插件工具。",
|
|
1877
|
-
"写或改 script.md 必须遵循用户的脚本规则(人设):先用
|
|
1878
|
-
"为已有内容起草脚本时,再调用
|
|
1877
|
+
"写或改 script.md 必须遵循用户的脚本规则(人设):先用 jacky_creator_script_rules 读取;还没配置时主动问清语气、结构和禁忌,再用 jacky_creator_script_rules 存下来。",
|
|
1878
|
+
"为已有内容起草脚本时,再调用 jacky_creator_get_script_context 读取用户在运营看板选中的开头、结构、标签、复盘规则和模板。运营知识只提供创作依据,成稿仍写入这条真实内容的 script.md。",
|
|
1879
1879
|
`插件工具只做文件做不到的事:配置工作台、按约定建文件夹、绑/开 Screen Studio、等导出、生成或烧录字幕、生成封面、同步已发布数据、整理文件夹名。工作台状态在 ${dataDir}/overlay.json,不是正文。`,
|
|
1880
|
-
"自动发布优先使用已发现的 jacky-video-publisher,兼容公开 video-publisher;不要把兼容包假称为 Jacky Skill。它和已发布数据回收(
|
|
1880
|
+
"自动发布优先使用已发现的 jacky-video-publisher,兼容公开 video-publisher;不要把兼容包假称为 Jacky Skill。它和已发布数据回收(jacky_creator_sync_publish)都依赖 Ego Browser;能力检查显示缺失时明确告诉用户,不要假装能同步。"
|
|
1881
1881
|
];
|
|
1882
|
-
if (enabledPlatforms !== void 0) lines.push(enabledPlatforms.length === 0 ? "当前没有启用发布平台。不要调用 video-publisher 或
|
|
1882
|
+
if (enabledPlatforms !== void 0) lines.push(enabledPlatforms.length === 0 ? "当前没有启用发布平台。不要调用 video-publisher 或 jacky_creator_sync_publish。" : `当前启用平台:${enabledPlatformNames(enabledPlatforms)}。video-publisher 和 jacky_creator_sync_publish 只处理这些平台。`);
|
|
1883
1883
|
if (scriptRules !== void 0 && scriptRules.trim() !== "") lines.push("", "当前脚本规则(人设):", scriptRules.trim());
|
|
1884
1884
|
return lines.join("\n");
|
|
1885
1885
|
}
|
|
@@ -3370,20 +3370,20 @@ function subtitleLines(capabilities) {
|
|
|
3370
3370
|
if (capabilities.subtitleSkill.state !== "ready") {
|
|
3371
3371
|
const installedPath = capabilities.subtitleSkill.path;
|
|
3372
3372
|
const needsSetup = capabilities.subtitleSkill.detail.includes("尚未完成 setup.sh");
|
|
3373
|
-
lines.push(needsSetup && installedPath !== void 0 ? `- oil-subtitle 已下载但未初始化:征得用户同意后执行 \`bash "${installedPath}/setup.sh"\`,完成后重新调用
|
|
3373
|
+
lines.push(needsSetup && installedPath !== void 0 ? `- oil-subtitle 已下载但未初始化:征得用户同意后执行 \`bash "${installedPath}/setup.sh"\`,完成后重新调用 jacky_creator_setup 确认。` : installedPath === void 0 ? "- 缺 oil-subtitle:征得用户同意后执行 `git clone https://github.com/oil-oil/oil-subtitle ~/.agents/skills/oil-subtitle && bash ~/.agents/skills/oil-subtitle/setup.sh`,装完重新调用 jacky_creator_setup 确认。" : `- 缺 oil-subtitle:征得用户同意后按能力状态中给出的命令安装到当前配置目录 \`${installedPath}\`,装完重新调用 jacky_creator_setup 确认。`);
|
|
3374
3374
|
}
|
|
3375
3375
|
if (capabilities.subtitleCredential.state !== "ready") lines.push("- 缺 DASHSCOPE_API_KEY:让用户到百炼控制台(https://bailian.console.aliyun.com)申请,在 设置 → 插件 → 内容工作台 填写;不要让用户把 Key 明文发到对话里。");
|
|
3376
3376
|
return lines.length === 0 ? ["- 当前字幕能力可用。"] : lines;
|
|
3377
3377
|
}
|
|
3378
3378
|
function coverLines(capabilities) {
|
|
3379
3379
|
const lines = [];
|
|
3380
|
-
if (capabilities.coverSkill.state !== "ready") lines.push("- 缺 oil-cover:征得用户同意后执行 `git clone https://github.com/oil-oil/oil-cover ~/.agents/skills/oil-cover`,装完重新调用
|
|
3380
|
+
if (capabilities.coverSkill.state !== "ready") lines.push("- 缺 oil-cover:征得用户同意后执行 `git clone https://github.com/oil-oil/oil-cover ~/.agents/skills/oil-cover`,装完重新调用 jacky_creator_setup 确认。");
|
|
3381
3381
|
if (capabilities.coverCredential.state !== "ready") lines.push("- 缺 ZENMUX_API_KEY:让用户到 ZenMux(https://zenmux.ai)控制台申请,在 设置 → 插件 → 内容工作台 填写;不要让用户把 Key 明文发到对话里。");
|
|
3382
3382
|
return lines.length === 0 ? ["- 当前封面能力可用。"] : lines;
|
|
3383
3383
|
}
|
|
3384
3384
|
function publishPlatformLine(enabledPlatforms, publisherName) {
|
|
3385
|
-
if (enabledPlatforms.length === 0) return `- 当前 enabledPlatforms 为空([]):不要调用 ${publisherName},也不要调用
|
|
3386
|
-
return `- 当前 enabledPlatforms:${enabledPlatforms.map((platform) => `${PUBLISH_PLATFORM_DEFINITIONS[platform].name}(${platform})`).join("、")}。${publisherName} 与
|
|
3385
|
+
if (enabledPlatforms.length === 0) return `- 当前 enabledPlatforms 为空([]):不要调用 ${publisherName},也不要调用 jacky_creator_sync_publish;先用 jacky_creator_setup 配置启用平台,用户确认后再继续。`;
|
|
3386
|
+
return `- 当前 enabledPlatforms:${enabledPlatforms.map((platform) => `${PUBLISH_PLATFORM_DEFINITIONS[platform].name}(${platform})`).join("、")}。${publisherName} 与 jacky_creator_sync_publish 只处理这些平台,不得上传或同步其他平台。`;
|
|
3387
3387
|
}
|
|
3388
3388
|
/**
|
|
3389
3389
|
* Build the self-bootstrap guide for the model. The text reflects the live
|
|
@@ -3416,16 +3416,16 @@ function creatorGuideText(status) {
|
|
|
3416
3416
|
"## 内容管理",
|
|
3417
3417
|
`- 片库目录是 ${settings.libraryRoot},一集一个子文件夹,命名为 YYYY-MM-DD_可读标题。`,
|
|
3418
3418
|
"- 正文以磁盘文件为准:topic.md 选题、script.md 口播脚本、公众号文章/ 图文稿、*.mp4 成片、*.srt/*.ass 字幕、*_3x4.png 等封面。读和改这些文件用系统自带的文件工具。",
|
|
3419
|
-
"- 新建一集用
|
|
3419
|
+
"- 新建一集用 jacky_creator_create_content;文件夹名乱了用 jacky_creator_organize_library,先预览、用户确认后再 apply=true。它只改名,不删文件。",
|
|
3420
3420
|
"- 工作台自己的状态(绑定、阶段、发布标记)在 overlay.json,不是正文,不要手改。",
|
|
3421
3421
|
"",
|
|
3422
3422
|
"## 脚本与人设",
|
|
3423
3423
|
"- 每集的口播脚本在 script.md,直接用文件工具读写。",
|
|
3424
|
-
scriptRules === void 0 ? "- 当前没有配置脚本规则(人设)。用户第一次让你写或改脚本时,先主动问清语气、结构、禁忌和目标观众,再用
|
|
3424
|
+
scriptRules === void 0 ? "- 当前没有配置脚本规则(人设)。用户第一次让你写或改脚本时,先主动问清语气、结构、禁忌和目标观众,再用 jacky_creator_script_rules 存下来,之后每次写脚本都遵循。" : "- 已配置脚本规则(人设),写或改 script.md 前先用 jacky_creator_script_rules 读取并严格遵循;用户提出新的长期偏好时,把它合并进规则再保存。",
|
|
3425
3425
|
"",
|
|
3426
3426
|
"## 字幕",
|
|
3427
|
-
"- 成片落盘后:
|
|
3428
|
-
"-
|
|
3427
|
+
"- 成片落盘后:jacky_creator_generate_subtitles 转录、自动校对、排版,完成后打开预览;用户在预览里确认专有名词后,再用 jacky_creator_burn_subtitles 烧录。预览前不要烧录。",
|
|
3428
|
+
"- jacky_creator_generate_subtitles 是长任务,调用后立即返回。完成看 subtitle-transcript.json / subtitle-manifest.json,不要等 *_subtitled.mp4,也不要把启动说成完成。",
|
|
3429
3429
|
...subtitleLines(capabilities),
|
|
3430
3430
|
"",
|
|
3431
3431
|
"## 演示",
|
|
@@ -3434,12 +3434,12 @@ function creatorGuideText(status) {
|
|
|
3434
3434
|
"- 产物写入这一集的 演示/ 目录,命名为 内容ID-16x9.html 或 内容ID-3x4.html,方便工作台稳定识别和预览。",
|
|
3435
3435
|
"",
|
|
3436
3436
|
"## 封面",
|
|
3437
|
-
"-
|
|
3437
|
+
"- jacky_creator_generate_cover 前先按 Jacky Cover 规则从脚本或字幕提炼封面主标题,通过 title 传入;ZenMux 负责分析和整图生成人物融合版三画幅。不要把文件夹名直接当封面结论。生成后请用户核对标题、人物身份和错别字。",
|
|
3438
3438
|
...coverLines(capabilities),
|
|
3439
3439
|
"",
|
|
3440
3440
|
"## 录制与剪辑",
|
|
3441
3441
|
"- Screen Studio 是可选的录制与自动剪辑路线(仅 macOS),不是内容流程的必经步骤。使用它时,录制和导出成片由用户亲手完成;自动剪辑走外部 skill screen-studio-editor,它操作的是 .screenstudio 工程。",
|
|
3442
|
-
capabilities.screenStudio.state === "ready" ? "- 当前已发现 Screen Studio。用
|
|
3442
|
+
capabilities.screenStudio.state === "ready" ? "- 当前已发现 Screen Studio。用 jacky_creator_update_content 把工程绑到对应一集,jacky_creator_open_studio 打开,jacky_creator_wait_export 等待成片落盘。" : "- 当前没有可用的 Screen Studio:绑定工程和 screen-studio-editor 不可用,但内容制作不受阻。用户可用剪映或其他工具剪片,把成片文件放进这一集的文件夹,工作台会继续推进。",
|
|
3443
3443
|
capabilities.editingSkill.state === "ready" ? "- 已发现 screen-studio-editor,用户要求清理时间线时直接使用。" : "- 缺 screen-studio-editor:征得用户同意后执行 `git clone https://github.com/oil-oil/screen-studio-editor ~/.agents/skills/screen-studio-editor`;没有它时剪辑由用户自己完成。",
|
|
3444
3444
|
"",
|
|
3445
3445
|
"## 自动发布与数据回收",
|
|
@@ -3447,7 +3447,7 @@ function creatorGuideText(status) {
|
|
|
3447
3447
|
"- 发布配置会写入 ~/.config/video-publisher,作业状态会写入 ~/.video-publisher;在 DSH 中运行配置或生产编排器时,首次运行就申请宿主写权限,不要先在沙箱内失败后再重试。",
|
|
3448
3448
|
"- 某个平台需要登录或安全验证时,只暂停该平台,其余已登录平台继续准备草稿;完成登录后用同一发布包和任务后缀续跑,不要新建重复作业。",
|
|
3449
3449
|
publishPlatformLine(enabledPlatforms, publisherName),
|
|
3450
|
-
capabilities.publishSync.state === "ready" ? enabledPlatforms.length === 0 ? "- 已发现 Ego Browser,但当前没有启用平台,不执行自动发布和数据回收。" : `- 当前已发现 Ego Browser。上传发布走外部 skill ${publisherName},停在最终发表按钮前由用户点;发布后或用户要求时用
|
|
3450
|
+
capabilities.publishSync.state === "ready" ? enabledPlatforms.length === 0 ? "- 已发现 Ego Browser,但当前没有启用平台,不执行自动发布和数据回收。" : `- 当前已发现 Ego Browser。上传发布走外部 skill ${publisherName},停在最终发表按钮前由用户点;发布后或用户要求时用 jacky_creator_sync_publish 回收播放、赞、评论并写回工作台。` : "- 当前未发现 Ego Browser:自动发布和 jacky_creator_sync_publish 数据回收都不可用。告诉用户到 https://lite.ego.app 下载 ego lite,完成首次引导后 ego-browser 命令可用,再登录各平台创作者后台;片库、脚本、字幕、封面不受影响,不要假装能同步。",
|
|
3451
3451
|
capabilities.publishSkill.state === "ready" ? enabledPlatforms.length === 0 ? `- 已发现 ${publisherName},但当前没有启用平台,不使用它。` : `- 已发现 ${publisherName},并且首次发布配置与当前启用平台一致。` : enabledPlatforms.length === 0 ? `- 当前没有启用平台,先配置 enabledPlatforms,再考虑安装或配置 ${publisherName}。` : "- 发布 Skill 缺失或首次配置不一致:让用户在 设置 → 插件 → Jacky Creator 中确认后点一键安装/配置;公开兼容包仍使用 video-publisher 身份,不伪装成 jacky-video-publisher。没有它时可在插件里手动标记发布状态。",
|
|
3452
3452
|
"",
|
|
3453
3453
|
"## 公众号图文",
|
|
@@ -5736,7 +5736,7 @@ function present(title, rawInput) {
|
|
|
5736
5736
|
const JSON_VALUE = { type: "json" };
|
|
5737
5737
|
function registerCreatorTools(ctx, service) {
|
|
5738
5738
|
ctx.tools.register(defineTool({
|
|
5739
|
-
name: "
|
|
5739
|
+
name: "jacky_creator_guide",
|
|
5740
5740
|
description: "Self-bootstrap guide for this plugin. Call this when the user asks what this plugin does, how to use it, or when you are unsure which step comes next. Returns the full workflow (library, script rules, subtitles, covers, publish, data sync) with the live capability status, including whether Ego Browser is available for auto-publish and data collection.",
|
|
5741
5741
|
parameters: {},
|
|
5742
5742
|
output: {
|
|
@@ -5751,7 +5751,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5751
5751
|
execute: (_args, exec) => service.getCreatorGuide(signalOf(exec)).then(asJson)
|
|
5752
5752
|
}));
|
|
5753
5753
|
ctx.tools.register(defineTool({
|
|
5754
|
-
name: "
|
|
5754
|
+
name: "jacky_creator_script_rules",
|
|
5755
5755
|
description: "Read or update the creator's script rules (persona): tone, structure, audience, and taboos that every script.md must follow. Omit text to read. Send text to save. Empty text clears. Ask the user about their persona before writing rules for the first time; merge new long-term preferences into the existing rules instead of replacing them.",
|
|
5756
5756
|
parameters: { text: {
|
|
5757
5757
|
type: "string",
|
|
@@ -5771,7 +5771,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5771
5771
|
}
|
|
5772
5772
|
}));
|
|
5773
5773
|
ctx.tools.register(defineTool({
|
|
5774
|
-
name: "
|
|
5774
|
+
name: "jacky_creator_setup",
|
|
5775
5775
|
description: "Inspect the creator workspace, optional local capabilities, credential status, and current configuration. Omit fields for a read-only diagnosis. Proposed changes are previewed unless apply=true. Only use apply=true after the user confirms the exact directory and enabled platform changes.",
|
|
5776
5776
|
parameters: {
|
|
5777
5777
|
apply: {
|
|
@@ -5811,7 +5811,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5811
5811
|
}
|
|
5812
5812
|
}));
|
|
5813
5813
|
ctx.tools.register(defineTool({
|
|
5814
|
-
name: "
|
|
5814
|
+
name: "jacky_creator_create_content",
|
|
5815
5815
|
description: "Create an empty dated library folder named YYYY-MM-DD_title using today's date and a readable title.",
|
|
5816
5816
|
parameters: { title: {
|
|
5817
5817
|
type: "string",
|
|
@@ -5842,7 +5842,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5842
5842
|
}
|
|
5843
5843
|
}));
|
|
5844
5844
|
ctx.tools.register(defineTool({
|
|
5845
|
-
name: "
|
|
5845
|
+
name: "jacky_creator_update_content",
|
|
5846
5846
|
description: "Write overlay-only marks for one episode: readyToRecord, bind a Screen Studio project, or set a platform publish status. To change topic.md or script.md, write those files in the episode folder with the built-in file tools.",
|
|
5847
5847
|
parameters: {
|
|
5848
5848
|
id: {
|
|
@@ -5911,7 +5911,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5911
5911
|
}
|
|
5912
5912
|
}));
|
|
5913
5913
|
ctx.tools.register(defineTool({
|
|
5914
|
-
name: "
|
|
5914
|
+
name: "jacky_creator_profile",
|
|
5915
5915
|
description: "Read or update the list of enabled publishing platforms. Omit the list to read. Send the complete list to replace it.",
|
|
5916
5916
|
parameters: { enabledPlatforms: {
|
|
5917
5917
|
type: "array",
|
|
@@ -5935,7 +5935,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5935
5935
|
}
|
|
5936
5936
|
}));
|
|
5937
5937
|
ctx.tools.register(defineTool({
|
|
5938
|
-
name: "
|
|
5938
|
+
name: "jacky_creator_organize_library",
|
|
5939
5939
|
description: "Preview or apply library folder cleanup to YYYY-MM-DD_readable title. Adds a date from the recording/folder time when missing, and turns hyphens/underscores in titles into spaces. Never deletes files. apply=false (default) only previews. Pass ids to limit the batch.",
|
|
5940
5940
|
parameters: {
|
|
5941
5941
|
apply: {
|
|
@@ -5962,7 +5962,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
5962
5962
|
}, signalOf(exec)))
|
|
5963
5963
|
}));
|
|
5964
5964
|
ctx.tools.register(defineTool({
|
|
5965
|
-
name: "
|
|
5965
|
+
name: "jacky_creator_sync_publish",
|
|
5966
5966
|
description: "Sync published titles, URLs, and counts from logged-in creator dashboards. Pass id to update one episode only and stop paging once that title is found. Omit id to match the whole library and collect every page. Requires Ego Lite and an already-logged-in creator session. Repeats within 90 seconds reuse the last snapshot.",
|
|
5967
5967
|
parameters: {
|
|
5968
5968
|
id: {
|
|
@@ -6007,7 +6007,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
6007
6007
|
}
|
|
6008
6008
|
}));
|
|
6009
6009
|
ctx.tools.register(defineTool({
|
|
6010
|
-
name: "
|
|
6010
|
+
name: "jacky_creator_open_studio",
|
|
6011
6011
|
description: "Open the bound Screen Studio project for this episode so the user can review and export.",
|
|
6012
6012
|
parameters: { id: {
|
|
6013
6013
|
type: "string",
|
|
@@ -6028,7 +6028,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
6028
6028
|
}
|
|
6029
6029
|
}));
|
|
6030
6030
|
ctx.tools.register(defineTool({
|
|
6031
|
-
name: "
|
|
6031
|
+
name: "jacky_creator_wait_export",
|
|
6032
6032
|
description: "Start watching the episode folder for a finished MP4/MOV (Screen Studio export) and return immediately. When the file is stable, the folder has the video and waitingForExport clears. If the wait times out, waitingForExport stays and exportTimedOut is true. Do not block this call. After starting, poll files or getContent instead of waiting here.",
|
|
6033
6033
|
parameters: {
|
|
6034
6034
|
id: {
|
|
@@ -6058,7 +6058,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
6058
6058
|
}
|
|
6059
6059
|
}));
|
|
6060
6060
|
ctx.tools.register(defineTool({
|
|
6061
|
-
name: "
|
|
6061
|
+
name: "jacky_creator_open_subtitle_preview",
|
|
6062
6062
|
description: "Open the oil-subtitle preview editor in the browser for this episode (video + editable cues).",
|
|
6063
6063
|
parameters: { id: {
|
|
6064
6064
|
type: "string",
|
|
@@ -6089,8 +6089,8 @@ function registerCreatorTools(ctx, service) {
|
|
|
6089
6089
|
}
|
|
6090
6090
|
}));
|
|
6091
6091
|
ctx.tools.register(defineTool({
|
|
6092
|
-
name: "
|
|
6093
|
-
description: "Burn the current oil-subtitle draft onto the raw video after the user has previewed and confirmed it. Do not call this before
|
|
6092
|
+
name: "jacky_creator_burn_subtitles",
|
|
6093
|
+
description: "Burn the current oil-subtitle draft onto the raw video after the user has previewed and confirmed it. Do not call this before jacky_creator_open_subtitle_preview (or the preview opened by jacky_creator_generate_subtitles). Returns immediately. When finished, the episode folder has a *_subtitled.mp4.",
|
|
6094
6094
|
parameters: { id: {
|
|
6095
6095
|
type: "string",
|
|
6096
6096
|
required: true,
|
|
@@ -6109,8 +6109,8 @@ function registerCreatorTools(ctx, service) {
|
|
|
6109
6109
|
}
|
|
6110
6110
|
}));
|
|
6111
6111
|
ctx.tools.register(defineTool({
|
|
6112
|
-
name: "
|
|
6113
|
-
description: "Run the oil-subtitle draft workflow: transcribe, auto-review, and lay out captions. Does not burn. When it finishes, a preview editor opens; wait for the user to proofread, then call
|
|
6112
|
+
name: "jacky_creator_generate_subtitles",
|
|
6113
|
+
description: "Run the oil-subtitle draft workflow: transcribe, auto-review, and lay out captions. Does not burn. When it finishes, a preview editor opens; wait for the user to proofread, then call jacky_creator_burn_subtitles. Requires DASHSCOPE_API_KEY in Settings → Plugins → 内容工作台. Returns immediately. Completion is subtitle-transcript.json / subtitle-manifest.json, not *_subtitled.mp4.",
|
|
6114
6114
|
parameters: { id: {
|
|
6115
6115
|
type: "string",
|
|
6116
6116
|
required: true,
|
|
@@ -6129,7 +6129,7 @@ function registerCreatorTools(ctx, service) {
|
|
|
6129
6129
|
}
|
|
6130
6130
|
}));
|
|
6131
6131
|
ctx.tools.register(defineTool({
|
|
6132
|
-
name: "
|
|
6132
|
+
name: "jacky_creator_generate_cover",
|
|
6133
6133
|
description: "Generate 3x4 / 4x3 / 16x9 covers with the Jacky Cover brand patch and ZenMux backend. Extract a cover title first from the episode script or subtitles (Jacky Cover evidence rule: do not leave this to the image model). Pass that title. Requires ZENMUX_API_KEY in Settings → Plugins → 内容工作台. Returns immediately. When finished, the episode folder has *_3x4.png / *_4x3.png / *_16x9.png.",
|
|
6134
6134
|
parameters: {
|
|
6135
6135
|
id: {
|