owner-clone-ai-mcp 1.78.2 → 1.80.0
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/domains/video.js +56 -0
- package/package.json +1 -1
package/domains/video.js
CHANGED
|
@@ -19,6 +19,42 @@ function lintLines(d) {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const tools = [
|
|
22
|
+
{
|
|
23
|
+
name: 'insert_video_slide',
|
|
24
|
+
description: `動画が参照しているスライド資料に新しいスライドを1枚挿入し、タイムラインも同時に揃えます。
|
|
25
|
+
⚠️ 末尾への追加(position 省略)は既存の表示・出現の打点が一切変わらないため安全です。
|
|
26
|
+
⚠️ 途中への挿入は以降のスライドが1つ後ろへずれます。同じスライド資料を他の動画でも使っている場合、
|
|
27
|
+
その動画の表示はずれるので作り直しが必要です(応答の warning で知らせます)。
|
|
28
|
+
⚠️ 編集対象は共有のスライド資料そのものです。資料側や他の動画にも反映されます。【書き込み権限付きキーが必要】`,
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {
|
|
32
|
+
id: { type: 'string', description: '動画プロジェクトID(list_video_projects で確認)' },
|
|
33
|
+
position: { type: 'number', description: '何枚目の前に入れるか(1始まり)。省略すると末尾に追加(安全)' },
|
|
34
|
+
duration: { type: 'number', description: '新しいスライドの尺(秒)。既定4' },
|
|
35
|
+
kind: { type: 'string', description: 'テンプレート(23種)。見出し+箇条書き=content / チェックリスト=checklist / 数字=stats / 比較=compare / 表紙=cover / 引用=quote / 手順=flow / FAQ=faq / 年表=timeline / 料金=services など。省略時は content。⚠️ 中身まで作りたいときは chapter を使う' },
|
|
36
|
+
chapter: { type: 'object', description: 'スライドの中身({kind, title, ...})。指定すると kind より優先。get_slide_schema で形式を確認できる' },
|
|
37
|
+
base_updated_at: { type: 'string', description: 'get_slide_deck で取得したスライド資料の updated_at。渡すと、その後に人が編集していた場合は挿入せずエラーにする(推奨)' },
|
|
38
|
+
},
|
|
39
|
+
required: ['id'],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'delete_video_slide',
|
|
44
|
+
description: `動画が参照しているスライド資料から1枚削除し、タイムラインも同時に詰めます。
|
|
45
|
+
⚠️ そのスライドに付けていた出現の打点も一緒に消えます。
|
|
46
|
+
⚠️ スライド資料そのものから消えるため、同じ資料を使う他の動画の表示もずれます。
|
|
47
|
+
⚠️ 最後の1枚は削除できません。【書き込み権限付きキーが必要】`,
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
id: { type: 'string', description: '動画プロジェクトID' },
|
|
52
|
+
position: { type: 'number', description: '何枚目を消すか(1始まり・必須)' },
|
|
53
|
+
base_updated_at: { type: 'string', description: 'get_slide_deck で取得したスライド資料の updated_at(推奨)' },
|
|
54
|
+
},
|
|
55
|
+
required: ['id', 'position'],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
22
58
|
{
|
|
23
59
|
name: 'get_video_timeline_spec',
|
|
24
60
|
description: '動画タイムライン(timeline JSON)の仕様を取得します。クリップ形式・transition/animの語彙・reveals(要素の段階出現)の組み方・メディアの結びつけ方・用途別の尺の目安・音声同期のコツ。動画を作る前に必ず一度読んでください。',
|
|
@@ -190,6 +226,26 @@ const handlers = {
|
|
|
190
226
|
const d = await callApi(`/video/${id}`, { method: 'PATCH', body: JSON.stringify(rest) });
|
|
191
227
|
return `✅ ${d.message}\nID: ${d.id}\n更新日時: ${d.updated_at}${lintLines(d)}`;
|
|
192
228
|
},
|
|
229
|
+
delete_video_slide: async ({ id, position, base_updated_at }) => {
|
|
230
|
+
const body = { at: Math.max(0, Math.round(position) - 1) };
|
|
231
|
+
if (base_updated_at !== undefined) body.base_updated_at = base_updated_at;
|
|
232
|
+
const d = await callApi(`/video/${id}/delete-slide`, { method: 'POST', body: JSON.stringify(body) });
|
|
233
|
+
return `✅ ${d.message}\n全${d.slide_count}枚 / 動画の updated_at: ${d.updated_at}`
|
|
234
|
+
+ (d.warning ? `\n${d.warning}` : '');
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
insert_video_slide: async ({ id, position, duration, chapter, kind, base_updated_at }) => {
|
|
238
|
+
const body = {};
|
|
239
|
+
if (position !== undefined) body.at = Math.max(0, Math.round(position) - 1);
|
|
240
|
+
if (duration !== undefined) body.duration = duration;
|
|
241
|
+
if (kind !== undefined) body.kind = kind;
|
|
242
|
+
if (chapter !== undefined) body.chapter = chapter;
|
|
243
|
+
if (base_updated_at !== undefined) body.base_updated_at = base_updated_at;
|
|
244
|
+
const d = await callApi(`/video/${id}/insert-slide`, { method: 'POST', body: JSON.stringify(body) });
|
|
245
|
+
return `✅ ${d.message}\n全${d.slide_count}枚 / 動画の updated_at: ${d.updated_at}`
|
|
246
|
+
+ (d.warning ? `\n${d.warning}` : '');
|
|
247
|
+
},
|
|
248
|
+
|
|
193
249
|
lint_video_timeline: async ({ id, purpose }) => {
|
|
194
250
|
const q = purpose ? `?purpose=${encodeURIComponent(purpose)}` : '';
|
|
195
251
|
const d = await callApi(`/video/${id}/lint${q}`);
|