@kenkaiiii/gg-editor 0.6.2 → 0.6.4
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 -1
- package/dist/core/doctor-runner.js +45 -11
- package/dist/core/doctor-runner.js.map +1 -1
- package/dist/core/hosts/lazy.d.ts +5 -5
- package/dist/core/hosts/lazy.d.ts.map +1 -1
- package/dist/core/hosts/lazy.js +16 -0
- package/dist/core/hosts/lazy.js.map +1 -1
- package/dist/core/hosts/premiere/adapter.d.ts +4 -1
- package/dist/core/hosts/premiere/adapter.d.ts.map +1 -1
- package/dist/core/hosts/premiere/adapter.js +6 -5
- package/dist/core/hosts/premiere/adapter.js.map +1 -1
- package/dist/core/hosts/premiere/bridge-source.d.ts.map +1 -1
- package/dist/core/hosts/premiere/bridge-source.js +45 -0
- package/dist/core/hosts/premiere/bridge-source.js.map +1 -1
- package/dist/core/hosts/resolve/adapter.d.ts +6 -2
- package/dist/core/hosts/resolve/adapter.d.ts.map +1 -1
- package/dist/core/hosts/resolve/adapter.js +13 -5
- package/dist/core/hosts/resolve/adapter.js.map +1 -1
- package/dist/core/hosts/resolve/bridge-source.d.ts.map +1 -1
- package/dist/core/hosts/resolve/bridge-source.js +376 -2
- package/dist/core/hosts/resolve/bridge-source.js.map +1 -1
- package/dist/core/hosts/resolve/bridge.d.ts +22 -4
- package/dist/core/hosts/resolve/bridge.d.ts.map +1 -1
- package/dist/core/hosts/resolve/bridge.integration.test.js +338 -0
- package/dist/core/hosts/resolve/bridge.integration.test.js.map +1 -1
- package/dist/core/hosts/resolve/bridge.js +56 -6
- package/dist/core/hosts/resolve/bridge.js.map +1 -1
- package/dist/core/hosts/resolve/bridge.test.js +61 -1
- package/dist/core/hosts/resolve/bridge.test.js.map +1 -1
- package/dist/core/hosts/types.d.ts +81 -0
- package/dist/core/hosts/types.d.ts.map +1 -1
- package/dist/core/hosts/types.js.map +1 -1
- package/dist/core/safe-paths.d.ts +47 -0
- package/dist/core/safe-paths.d.ts.map +1 -0
- package/dist/core/safe-paths.js +102 -0
- package/dist/core/safe-paths.js.map +1 -0
- package/dist/core/safe-paths.test.d.ts +2 -0
- package/dist/core/safe-paths.test.d.ts.map +1 -0
- package/dist/core/safe-paths.test.js +76 -0
- package/dist/core/safe-paths.test.js.map +1 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +125 -0
- package/dist/skills.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +33 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/compose-layered.d.ts.map +1 -1
- package/dist/tools/compose-layered.js +2 -1
- package/dist/tools/compose-layered.js.map +1 -1
- package/dist/tools/compose-thumbnail.d.ts.map +1 -1
- package/dist/tools/compose-thumbnail.js +10 -2
- package/dist/tools/compose-thumbnail.js.map +1 -1
- package/dist/tools/concat-videos.d.ts.map +1 -1
- package/dist/tools/concat-videos.js +2 -1
- package/dist/tools/concat-videos.js.map +1 -1
- package/dist/tools/cut-filler-words.d.ts.map +1 -1
- package/dist/tools/cut-filler-words.js +2 -1
- package/dist/tools/cut-filler-words.js.map +1 -1
- package/dist/tools/extract-frame.d.ts.map +1 -1
- package/dist/tools/extract-frame.js +9 -2
- package/dist/tools/extract-frame.js.map +1 -1
- package/dist/tools/fusion-comp.d.ts +49 -0
- package/dist/tools/fusion-comp.d.ts.map +1 -0
- package/dist/tools/fusion-comp.js +129 -0
- package/dist/tools/fusion-comp.js.map +1 -0
- package/dist/tools/generate-gif.d.ts.map +1 -1
- package/dist/tools/generate-gif.js +12 -2
- package/dist/tools/generate-gif.js.map +1 -1
- package/dist/tools/host-eval.d.ts +35 -0
- package/dist/tools/host-eval.d.ts.map +1 -0
- package/dist/tools/host-eval.js +70 -0
- package/dist/tools/host-eval.js.map +1 -0
- package/dist/tools/host-tools.test.js +42 -0
- package/dist/tools/host-tools.test.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/index.test.js +4 -0
- package/dist/tools/index.test.js.map +1 -1
- package/dist/tools/overlay-watermark.d.ts.map +1 -1
- package/dist/tools/overlay-watermark.js +2 -1
- package/dist/tools/overlay-watermark.js.map +1 -1
- package/dist/tools/reformat-timeline.d.ts.map +1 -1
- package/dist/tools/reformat-timeline.js +3 -2
- package/dist/tools/reformat-timeline.js.map +1 -1
- package/dist/tools/reorder-timeline.d.ts.map +1 -1
- package/dist/tools/reorder-timeline.js +3 -2
- package/dist/tools/reorder-timeline.js.map +1 -1
- package/dist/tools/transcribe.d.ts.map +1 -1
- package/dist/tools/transcribe.js +2 -1
- package/dist/tools/transcribe.js.map +1 -1
- package/dist/tools/write-ass.d.ts.map +1 -1
- package/dist/tools/write-ass.js +3 -2
- package/dist/tools/write-ass.js.map +1 -1
- package/dist/tools/write-edl.d.ts.map +1 -1
- package/dist/tools/write-edl.js +3 -2
- package/dist/tools/write-edl.js.map +1 -1
- package/dist/tools/write-fcpxml.d.ts.map +1 -1
- package/dist/tools/write-fcpxml.js +3 -2
- package/dist/tools/write-fcpxml.js.map +1 -1
- package/dist/tools/write-keyword-captions.d.ts.map +1 -1
- package/dist/tools/write-keyword-captions.js +2 -1
- package/dist/tools/write-keyword-captions.js.map +1 -1
- package/dist/tools/write-lower-third.d.ts.map +1 -1
- package/dist/tools/write-lower-third.js +3 -2
- package/dist/tools/write-lower-third.js.map +1 -1
- package/dist/tools/write-srt.d.ts.map +1 -1
- package/dist/tools/write-srt.js +3 -2
- package/dist/tools/write-srt.js.map +1 -1
- package/dist/tools/write-title-card.d.ts.map +1 -1
- package/dist/tools/write-title-card.js +3 -2
- package/dist/tools/write-title-card.js.map +1 -1
- package/package.json +3 -3
package/dist/system-prompt.js
CHANGED
|
@@ -68,7 +68,7 @@ ggeditor is for **long-form** and **short-form** video content.
|
|
|
68
68
|
- **Long-form** (podcasts, interviews, vlogs, courses, talking-head): the work is silence cuts, take selection, filler removal, chapter markers, captions.
|
|
69
69
|
- **Short-form** (TikTok / Reels / Shorts): the work is finding the moment, reformatting to 9:16, burning captions, hooking the first 2 seconds.
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Motion graphics: simple text + lower-thirds via fusion_comp (Resolve only). VFX, generative video, animation, 3D, particles, complex compositing remain out of scope — if the user asks for those, say so and propose what we CAN do.
|
|
72
72
|
|
|
73
73
|
${HOST_BLOCK_TOKEN}
|
|
74
74
|
|
|
@@ -79,6 +79,7 @@ cwd=${cwd}
|
|
|
79
79
|
1. Live API — host_info, get_timeline, get_markers, add_marker, append_clip, cut_at, ripple_delete, set_clip_speed, create_timeline, import_to_media_pool, import_subtitles, open_page (Resolve), render
|
|
80
80
|
2. Bulk import — write_edl / write_fcpxml / reformat_timeline / reorder_timeline / compose_layered + import_edl (use when API can't do per-clip ops, e.g. Resolve has no scriptable razor or scriptable clip-move)
|
|
81
81
|
3. File-only — probe_media, extract_audio, detect_silence, transcribe, read_transcript, cluster_takes, score_shot, write_srt, write_lower_third, write_title_card, mix_audio, speed_ramp, ken_burns, transition_videos (no NLE needed)
|
|
82
|
+
4. Escape hatch — host_eval (raw Python on Resolve / raw ExtendScript on Premiere). LAST RESORT only — see "Escape hatch" section below.
|
|
82
83
|
|
|
83
84
|
# Capability matrix — what's host-scriptable vs file-only
|
|
84
85
|
|
|
@@ -98,6 +99,37 @@ cwd=${cwd}
|
|
|
98
99
|
| Keyword-highlighted captions | NO | NO | write_keyword_captions |
|
|
99
100
|
| SFX on cuts (whoosh) | NO | NO | add_sfx_at_cuts |
|
|
100
101
|
|
|
102
|
+
# Escape hatch — host_eval
|
|
103
|
+
|
|
104
|
+
host_eval(code) runs raw host-native scripting code. **Resolve = Python, Premiere = ExtendScript (ES3-ish JavaScript).** Different languages — the code you write MUST match the connected host. Check host_info first if unsure.
|
|
105
|
+
|
|
106
|
+
Use it ONLY when no named tool fits. Examples of legitimate use:
|
|
107
|
+
- A Resolve / Premiere API surface we don't wrap yet (e.g. project setting reads, render preset details, marker custom-data, Fairlight track props, Fusion comp inspection)
|
|
108
|
+
- A one-off batch operation that would otherwise be 20+ named-tool calls (e.g. "set every clip on V2 to 80% opacity via the API directly")
|
|
109
|
+
- Recovering when a named tool returns 'not_supported' AND the bulk EDL/FCPXML path also doesn't fit
|
|
110
|
+
|
|
111
|
+
NEVER use it for:
|
|
112
|
+
- Anything a named tool already does. Named tools have validation, summarised output, and EDL fallbacks. host_eval is raw — a typo can take the bridge down.
|
|
113
|
+
- Cross-host "write once, run on either" code. The code is host-specific; route on host_info.host first.
|
|
114
|
+
- File I/O, ffmpeg, transcription. Those are file-only tools — host_eval can't reach them and shouldn't try.
|
|
115
|
+
|
|
116
|
+
Resolve scope (Python, all pre-bound):
|
|
117
|
+
- resolve, project, projectManager, mediaPool, mediaStorage, timeline, fusion, dvr (the DaVinciResolveScript module)
|
|
118
|
+
- set_result(value) to return JSON-serialisable data; or assign result = ... at top level
|
|
119
|
+
- print(...) is captured to stdout
|
|
120
|
+
- Example: set_result(project.GetSetting('timelineFrameRate'))
|
|
121
|
+
|
|
122
|
+
Premiere scope (ExtendScript, all pre-bound):
|
|
123
|
+
- app, project, sequence, qe (Quality Engineering DOM — undocumented; use sparingly)
|
|
124
|
+
- setResult(value) to return data; or assign result = ... at top level
|
|
125
|
+
- print(...) is captured to stdout
|
|
126
|
+
- ExtendScript is ES3-ish: no let/const, no arrow functions, no template literals. Use var and string concatenation.
|
|
127
|
+
- Example: setResult(app.version)
|
|
128
|
+
|
|
129
|
+
If host=none, host_eval returns error: not_supported. Don't bother calling it without an NLE attached — open Resolve or Premiere first.
|
|
130
|
+
|
|
131
|
+
Keep snippets small (one logical op per call). Surface 'result' to the user when it answers their question; don't dump opaque PyRemoteObject reprs at them.
|
|
132
|
+
|
|
101
133
|
# Tool output contract (READ THIS)
|
|
102
134
|
|
|
103
135
|
Tool results are NOT for humans. They are compact, machine-shaped, designed for you:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAoB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAoB,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAOxC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAe;IACxD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,OAAO;;OAEF,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,WAAW,GAAG,GAAG;aAC9B,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,cAAc,UAAU,CAAC,CAAC,cAAc,OAAO,CAAC,CAAC,YAAY,WAAW,CAAC,CAAC,qBAAqB;;;;;+BAKvG,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,UAA+B,EAAE;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;;;;;;EAWP,gBAAgB;;MAEZ,GAAG
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-layered.d.ts","sourceRoot":"","sources":["../../src/tools/compose-layered.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"compose-layered.d.ts","sourceRoot":"","sources":["../../src/tools/compose-layered.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA6CxD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBxB,CAAC;AAEH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,GACV,SAAS,CAAC,OAAO,oBAAoB,CAAC,CAyCxC"}
|
|
@@ -4,6 +4,7 @@ import { dirname, join, resolve as resolvePath } from "node:path";
|
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { buildFcpxml } from "../core/fcpxml.js";
|
|
6
6
|
import { compact, err } from "../core/format.js";
|
|
7
|
+
import { safeOutputPath } from "../core/safe-paths.js";
|
|
7
8
|
const LayerSchema = z.object({
|
|
8
9
|
reel: z.string().describe("Source identifier — same reel = same asset."),
|
|
9
10
|
sourcePath: z.string().describe("Absolute (or cwd-relative) source media path."),
|
|
@@ -83,7 +84,7 @@ export function createComposeLayeredTool(host, cwd) {
|
|
|
83
84
|
});
|
|
84
85
|
const xml = buildFcpxml({ title, frameRate, width, height, events });
|
|
85
86
|
const outAbs = fcpxmlOutput
|
|
86
|
-
?
|
|
87
|
+
? safeOutputPath(cwd, fcpxmlOutput)
|
|
87
88
|
: join(mkdtempSync(join(tmpdir(), "gg-compose-")), "composed.fcpxml");
|
|
88
89
|
if (fcpxmlOutput)
|
|
89
90
|
mkdirSync(dirname(outAbs), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-layered.js","sourceRoot":"","sources":["../../src/tools/compose-layered.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"compose-layered.js","sourceRoot":"","sources":["../../src/tools/compose-layered.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-thumbnail.d.ts","sourceRoot":"","sources":["../../src/tools/compose-thumbnail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"compose-thumbnail.d.ts","sourceRoot":"","sources":["../../src/tools/compose-thumbnail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;iBAyB1B,CAAC;AAUH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,sBAAsB,CAAC,CA0EhG;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxD"}
|
|
@@ -3,6 +3,7 @@ import { dirname, resolve as resolvePath } from "node:path";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { compact, err } from "../core/format.js";
|
|
5
5
|
import { checkFfmpeg, runFfmpeg } from "../core/media/ffmpeg.js";
|
|
6
|
+
import { safeResolveOutputPath } from "../core/safe-paths.js";
|
|
6
7
|
const ComposeThumbnailParams = z.object({
|
|
7
8
|
input: z.string().describe("Source video."),
|
|
8
9
|
output: z.string().describe("Thumbnail .jpg or .png."),
|
|
@@ -47,7 +48,8 @@ export function createComposeThumbnailTool(cwd) {
|
|
|
47
48
|
return err("ffmpeg not on PATH", "install ffmpeg");
|
|
48
49
|
try {
|
|
49
50
|
const inAbs = resolvePath(cwd, args.input);
|
|
50
|
-
const
|
|
51
|
+
const resolved = safeResolveOutputPath(cwd, args.output);
|
|
52
|
+
const outAbs = resolved.path;
|
|
51
53
|
const fontFile = args.fontFile ? resolvePath(cwd, args.fontFile) : pickFont();
|
|
52
54
|
if (!fontFile) {
|
|
53
55
|
return err("no system font found", "pass fontFile=<path-to-.ttf> (try ~/Library/Fonts on macOS or /usr/share/fonts on Linux)");
|
|
@@ -83,7 +85,13 @@ export function createComposeThumbnailTool(cwd) {
|
|
|
83
85
|
if (r.code !== 0) {
|
|
84
86
|
return err(`ffmpeg drawtext exited ${r.code}`, "verify atSec is in range and ffmpeg has --enable-libfreetype");
|
|
85
87
|
}
|
|
86
|
-
return compact({
|
|
88
|
+
return compact({
|
|
89
|
+
ok: true,
|
|
90
|
+
path: outAbs,
|
|
91
|
+
atSec: args.atSec,
|
|
92
|
+
fontFile,
|
|
93
|
+
...(resolved.redirected ? { redirected: true, reason: resolved.reason } : {}),
|
|
94
|
+
});
|
|
87
95
|
}
|
|
88
96
|
catch (e) {
|
|
89
97
|
return err(e.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-thumbnail.js","sourceRoot":"","sources":["../../src/tools/compose-thumbnail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"compose-thumbnail.js","sourceRoot":"","sources":["../../src/tools/compose-thumbnail.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat-videos.d.ts","sourceRoot":"","sources":["../../src/tools/concat-videos.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE3D;AACD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"concat-videos.d.ts","sourceRoot":"","sources":["../../src/tools/concat-videos.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE3D;AACD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,QAAA,MAAM,kBAAkB;;;;;;iBAatB,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,kBAAkB,CAAC,CAuExF"}
|
|
@@ -13,6 +13,7 @@ export function buildConcatListBody(paths) {
|
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
import { compact, err } from "../core/format.js";
|
|
15
15
|
import { checkFfmpeg, runFfmpeg } from "../core/media/ffmpeg.js";
|
|
16
|
+
import { safeOutputPath } from "../core/safe-paths.js";
|
|
16
17
|
const ConcatVideosParams = z.object({
|
|
17
18
|
inputs: z.array(z.string().min(1)).min(2).describe("Videos to join in order."),
|
|
18
19
|
output: z.string().describe("Concatenated output path."),
|
|
@@ -37,7 +38,7 @@ export function createConcatVideosTool(cwd) {
|
|
|
37
38
|
return err("ffmpeg not on PATH", "install ffmpeg");
|
|
38
39
|
try {
|
|
39
40
|
const absInputs = inputs.map((p) => resolvePath(cwd, p));
|
|
40
|
-
const outAbs =
|
|
41
|
+
const outAbs = safeOutputPath(cwd, output);
|
|
41
42
|
for (const a of absInputs) {
|
|
42
43
|
if (a === outAbs)
|
|
43
44
|
return err("output path collides with an input", "pick a different output");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat-videos.js","sourceRoot":"","sources":["../../src/tools/concat-videos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AACD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"concat-videos.js","sourceRoot":"","sources":["../../src/tools/concat-videos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cut-filler-words.d.ts","sourceRoot":"","sources":["../../src/tools/cut-filler-words.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"cut-filler-words.d.ts","sourceRoot":"","sources":["../../src/tools/cut-filler-words.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAcrD,QAAA,MAAM,oBAAoB;;;;;;;;;;;;iBAyExB,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,oBAAoB,CAAC,CA8G5F"}
|
|
@@ -6,6 +6,7 @@ import { buildEdl } from "../core/edl.js";
|
|
|
6
6
|
import { DEFAULT_FILLERS, detectFillerRanges, keepRangesFromFillers, keepRangesToFrameRanges, summarizeFillers, } from "../core/filler-words.js";
|
|
7
7
|
import { compact, err } from "../core/format.js";
|
|
8
8
|
import { probeMedia } from "../core/media/ffmpeg.js";
|
|
9
|
+
import { safeOutputPath } from "../core/safe-paths.js";
|
|
9
10
|
const CutFillerWordsParams = z.object({
|
|
10
11
|
transcript: z
|
|
11
12
|
.string()
|
|
@@ -135,7 +136,7 @@ export function createCutFillerWordsTool(cwd) {
|
|
|
135
136
|
})),
|
|
136
137
|
});
|
|
137
138
|
const outAbs = args.edlOutput
|
|
138
|
-
?
|
|
139
|
+
? safeOutputPath(cwd, args.edlOutput)
|
|
139
140
|
: join(mkdtempSync(join(tmpdir(), "gg-fillercut-")), "fillers.edl");
|
|
140
141
|
if (args.edlOutput)
|
|
141
142
|
mkdirSync(dirname(outAbs), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cut-filler-words.js","sourceRoot":"","sources":["../../src/tools/cut-filler-words.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"cut-filler-words.js","sourceRoot":"","sources":["../../src/tools/cut-filler-words.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-frame.d.ts","sourceRoot":"","sources":["../../src/tools/extract-frame.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"extract-frame.d.ts","sourceRoot":"","sources":["../../src/tools/extract-frame.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,QAAA,MAAM,kBAAkB;;;;;;iBAiBtB,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,kBAAkB,CAAC,CA0CxF"}
|
|
@@ -3,6 +3,7 @@ import { dirname, resolve as resolvePath } from "node:path";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { compact, err } from "../core/format.js";
|
|
5
5
|
import { checkFfmpeg, runFfmpeg } from "../core/media/ffmpeg.js";
|
|
6
|
+
import { safeResolveOutputPath } from "../core/safe-paths.js";
|
|
6
7
|
const ExtractFrameParams = z.object({
|
|
7
8
|
input: z.string().describe("Source video file."),
|
|
8
9
|
output: z.string().describe(".jpg or .png path for the extracted frame."),
|
|
@@ -33,7 +34,8 @@ export function createExtractFrameTool(cwd) {
|
|
|
33
34
|
return err("ffmpeg not on PATH", "install ffmpeg");
|
|
34
35
|
try {
|
|
35
36
|
const inAbs = resolvePath(cwd, input);
|
|
36
|
-
const
|
|
37
|
+
const resolved = safeResolveOutputPath(cwd, output);
|
|
38
|
+
const outAbs = resolved.path;
|
|
37
39
|
mkdirSync(dirname(outAbs), { recursive: true });
|
|
38
40
|
const args = [
|
|
39
41
|
"-ss",
|
|
@@ -52,7 +54,12 @@ export function createExtractFrameTool(cwd) {
|
|
|
52
54
|
if (r.code !== 0) {
|
|
53
55
|
return err(`ffmpeg exited ${r.code}`, "verify atSec is within file duration");
|
|
54
56
|
}
|
|
55
|
-
return compact({
|
|
57
|
+
return compact({
|
|
58
|
+
ok: true,
|
|
59
|
+
path: outAbs,
|
|
60
|
+
atSec,
|
|
61
|
+
...(resolved.redirected ? { redirected: true, reason: resolved.reason } : {}),
|
|
62
|
+
});
|
|
56
63
|
}
|
|
57
64
|
catch (e) {
|
|
58
65
|
return err(e.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-frame.js","sourceRoot":"","sources":["../../src/tools/extract-frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"extract-frame.js","sourceRoot":"","sources":["../../src/tools/extract-frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
3
|
+
import type { VideoHost } from "../core/hosts/types.js";
|
|
4
|
+
declare const FusionCompParams: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
5
|
+
action: z.ZodLiteral<"list_nodes">;
|
|
6
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
action: z.ZodLiteral<"add_node">;
|
|
9
|
+
toolId: z.ZodString;
|
|
10
|
+
name: z.ZodOptional<z.ZodString>;
|
|
11
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
action: z.ZodLiteral<"delete_node">;
|
|
14
|
+
name: z.ZodString;
|
|
15
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
17
|
+
action: z.ZodLiteral<"connect">;
|
|
18
|
+
fromNode: z.ZodString;
|
|
19
|
+
toNode: z.ZodString;
|
|
20
|
+
fromOutput: z.ZodOptional<z.ZodString>;
|
|
21
|
+
toInput: z.ZodOptional<z.ZodString>;
|
|
22
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
24
|
+
action: z.ZodLiteral<"set_input">;
|
|
25
|
+
node: z.ZodString;
|
|
26
|
+
input: z.ZodString;
|
|
27
|
+
value: z.ZodUnknown;
|
|
28
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
30
|
+
action: z.ZodLiteral<"get_input">;
|
|
31
|
+
node: z.ZodString;
|
|
32
|
+
input: z.ZodString;
|
|
33
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
action: z.ZodLiteral<"set_keyframe">;
|
|
36
|
+
node: z.ZodString;
|
|
37
|
+
input: z.ZodString;
|
|
38
|
+
frame: z.ZodNumber;
|
|
39
|
+
value: z.ZodUnknown;
|
|
40
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
41
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
42
|
+
action: z.ZodLiteral<"set_render_range">;
|
|
43
|
+
start: z.ZodNumber;
|
|
44
|
+
end: z.ZodNumber;
|
|
45
|
+
clipId: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$strip>], "action">;
|
|
47
|
+
export declare function createFusionCompTool(host: VideoHost): AgentTool<typeof FusionCompParams>;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=fusion-comp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusion-comp.d.ts","sourceRoot":"","sources":["../../src/tools/fusion-comp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA0GxE,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BASpB,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,OAAO,gBAAgB,CAAC,CA4BxF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compact, err } from "../core/format.js";
|
|
3
|
+
/**
|
|
4
|
+
* fusion_comp — single tool with an `action` discriminator that drives
|
|
5
|
+
* Resolve's Fusion node graph for motion graphics.
|
|
6
|
+
*
|
|
7
|
+
* Why one tool with `action=` instead of one tool per action? Fusion is a
|
|
8
|
+
* graph editor — every action takes the same comp scope (timeline-clip comp
|
|
9
|
+
* or active Fusion-page comp), and the agent will typically chain 5-10 of
|
|
10
|
+
* them per lower-third / title build. Splitting into 8 sibling tools would
|
|
11
|
+
* 8x the per-tool description tokens for a feature that's effectively one
|
|
12
|
+
* compound op.
|
|
13
|
+
*
|
|
14
|
+
* Resolve only. Premiere has no Fusion equivalent — agents that need motion
|
|
15
|
+
* graphics on Premiere should render the graphic separately and replace_clip,
|
|
16
|
+
* or use After Effects via Dynamic Link (out of scope here).
|
|
17
|
+
*
|
|
18
|
+
* Common tool IDs the agent will reach for:
|
|
19
|
+
* Background, TextPlus, Merge, Transform, ColorCorrector, DeltaKeyer,
|
|
20
|
+
* Brightness/Contrast, Glow, Blur.
|
|
21
|
+
*
|
|
22
|
+
* Canonical recipe — lower third:
|
|
23
|
+
* 1. add_node toolId=Background name=BG (the strap)
|
|
24
|
+
* 2. add_node toolId=TextPlus name=TXT (the text)
|
|
25
|
+
* 3. add_node toolId=Merge name=COMP (composite text over strap)
|
|
26
|
+
* 4. connect fromNode=BG toNode=COMP toInput=Background
|
|
27
|
+
* 5. connect fromNode=TXT toNode=COMP toInput=Foreground
|
|
28
|
+
* 6. set_input node=TXT input=StyledText value="Name · Title"
|
|
29
|
+
* 7. set_input node=BG input=TopLeft value=[0.05, 0.10]
|
|
30
|
+
*/
|
|
31
|
+
const ListNodes = z.object({
|
|
32
|
+
action: z.literal("list_nodes"),
|
|
33
|
+
clipId: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("When set, operate on this clip's first Fusion comp instead of the active Fusion-page comp."),
|
|
37
|
+
});
|
|
38
|
+
const AddNode = z.object({
|
|
39
|
+
action: z.literal("add_node"),
|
|
40
|
+
toolId: z
|
|
41
|
+
.string()
|
|
42
|
+
.min(1)
|
|
43
|
+
.describe("Fusion tool ID — e.g. 'TextPlus', 'Background', 'Merge', 'Transform', 'ColorCorrector', 'DeltaKeyer'."),
|
|
44
|
+
name: z.string().optional().describe("Optional human name for the new node."),
|
|
45
|
+
clipId: z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
const DeleteNode = z.object({
|
|
48
|
+
action: z.literal("delete_node"),
|
|
49
|
+
name: z.string().min(1),
|
|
50
|
+
clipId: z.string().optional(),
|
|
51
|
+
});
|
|
52
|
+
const Connect = z.object({
|
|
53
|
+
action: z.literal("connect"),
|
|
54
|
+
fromNode: z.string().min(1),
|
|
55
|
+
toNode: z.string().min(1),
|
|
56
|
+
fromOutput: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Defaults to the main 'Output'. Use for non-default outputs (e.g. 'Mask')."),
|
|
60
|
+
toInput: z
|
|
61
|
+
.string()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Defaults to the main input. For Merge, use 'Background' or 'Foreground' explicitly."),
|
|
64
|
+
clipId: z.string().optional(),
|
|
65
|
+
});
|
|
66
|
+
const SetInput = z.object({
|
|
67
|
+
action: z.literal("set_input"),
|
|
68
|
+
node: z.string().min(1),
|
|
69
|
+
input: z.string().min(1),
|
|
70
|
+
value: z.unknown().describe("Number, string, [r,g,b], [x,y], etc. — Fusion input shape."),
|
|
71
|
+
clipId: z.string().optional(),
|
|
72
|
+
});
|
|
73
|
+
const GetInput = z.object({
|
|
74
|
+
action: z.literal("get_input"),
|
|
75
|
+
node: z.string().min(1),
|
|
76
|
+
input: z.string().min(1),
|
|
77
|
+
clipId: z.string().optional(),
|
|
78
|
+
});
|
|
79
|
+
const SetKeyframe = z.object({
|
|
80
|
+
action: z.literal("set_keyframe"),
|
|
81
|
+
node: z.string().min(1),
|
|
82
|
+
input: z.string().min(1),
|
|
83
|
+
frame: z.number().int().min(0),
|
|
84
|
+
value: z.unknown(),
|
|
85
|
+
clipId: z.string().optional(),
|
|
86
|
+
});
|
|
87
|
+
const SetRenderRange = z.object({
|
|
88
|
+
action: z.literal("set_render_range"),
|
|
89
|
+
start: z.number().int().min(0),
|
|
90
|
+
end: z.number().int().min(0),
|
|
91
|
+
clipId: z.string().optional(),
|
|
92
|
+
});
|
|
93
|
+
const FusionCompParams = z.discriminatedUnion("action", [
|
|
94
|
+
ListNodes,
|
|
95
|
+
AddNode,
|
|
96
|
+
DeleteNode,
|
|
97
|
+
Connect,
|
|
98
|
+
SetInput,
|
|
99
|
+
GetInput,
|
|
100
|
+
SetKeyframe,
|
|
101
|
+
SetRenderRange,
|
|
102
|
+
]);
|
|
103
|
+
export function createFusionCompTool(host) {
|
|
104
|
+
return {
|
|
105
|
+
name: "fusion_comp",
|
|
106
|
+
description: "Drive a Fusion composition for motion graphics — lower-thirds, title cards, simple " +
|
|
107
|
+
"comps. Single tool with an `action` discriminator: list_nodes, add_node, delete_node, " +
|
|
108
|
+
"connect, set_input, get_input, set_keyframe, set_render_range. Operates on the active " +
|
|
109
|
+
"Fusion-page comp by default, or pass clipId to scope to that clip's first Fusion comp " +
|
|
110
|
+
"(auto-created if missing). Resolve only — Premiere has no Fusion equivalent. " +
|
|
111
|
+
"Common tool IDs: Background, TextPlus, Merge, Transform, ColorCorrector, DeltaKeyer. " +
|
|
112
|
+
"Lower-third recipe: Background + TextPlus + Merge, wire Background→Merge.Background " +
|
|
113
|
+
"and TextPlus→Merge.Foreground.",
|
|
114
|
+
parameters: FusionCompParams,
|
|
115
|
+
async execute(args) {
|
|
116
|
+
if (typeof host.executeFusionComp !== "function") {
|
|
117
|
+
return err("not_supported: this host has no Fusion equivalent", "switch to Resolve, or render the graphic separately and use replace_clip");
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const result = await host.executeFusionComp(args);
|
|
121
|
+
return compact({ ok: true, result });
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
return err(e.message);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=fusion-comp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fusion-comp.js","sourceRoot":"","sources":["../../src/tools/fusion-comp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-gif.d.ts","sourceRoot":"","sources":["../../src/tools/generate-gif.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-gif.d.ts","sourceRoot":"","sources":["../../src/tools/generate-gif.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,QAAA,MAAM,iBAAiB;;;;;;;iBAsBrB,CAAC;AAEH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,iBAAiB,CAAC,CAgFtF"}
|
|
@@ -4,6 +4,7 @@ import { dirname, join, resolve as resolvePath } from "node:path";
|
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { compact, err } from "../core/format.js";
|
|
6
6
|
import { checkFfmpeg, runFfmpeg } from "../core/media/ffmpeg.js";
|
|
7
|
+
import { safeResolveOutputPath } from "../core/safe-paths.js";
|
|
7
8
|
const GenerateGifParams = z.object({
|
|
8
9
|
input: z.string().describe("Source video file."),
|
|
9
10
|
output: z.string().describe("Output .gif path."),
|
|
@@ -39,7 +40,8 @@ export function createGenerateGifTool(cwd) {
|
|
|
39
40
|
return err("ffmpeg not on PATH", "install ffmpeg");
|
|
40
41
|
try {
|
|
41
42
|
const inAbs = resolvePath(cwd, args.input);
|
|
42
|
-
const
|
|
43
|
+
const resolved = safeResolveOutputPath(cwd, args.output);
|
|
44
|
+
const outAbs = resolved.path;
|
|
43
45
|
if (!/\.gif$/i.test(outAbs)) {
|
|
44
46
|
return err("output must end in .gif", `got: ${outAbs}`);
|
|
45
47
|
}
|
|
@@ -83,7 +85,15 @@ export function createGenerateGifTool(cwd) {
|
|
|
83
85
|
], { signal: ctx.signal });
|
|
84
86
|
if (p2.code !== 0)
|
|
85
87
|
return err(`paletteuse exited ${p2.code}`);
|
|
86
|
-
return compact({
|
|
88
|
+
return compact({
|
|
89
|
+
ok: true,
|
|
90
|
+
path: outAbs,
|
|
91
|
+
startSec: start,
|
|
92
|
+
durationSec: dur,
|
|
93
|
+
fps,
|
|
94
|
+
width,
|
|
95
|
+
...(resolved.redirected ? { redirected: true, reason: resolved.reason } : {}),
|
|
96
|
+
});
|
|
87
97
|
}
|
|
88
98
|
catch (e) {
|
|
89
99
|
return err(e.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-gif.js","sourceRoot":"","sources":["../../src/tools/generate-gif.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-gif.js","sourceRoot":"","sources":["../../src/tools/generate-gif.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,2EAA2E,CAAC;IACxF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;CAClE,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,0FAA0F;YAC1F,0FAA0F;YAC1F,uEAAuE;QACzE,UAAU,EAAE,iBAAiB;QAC7B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;YACrB,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;YACvE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,OAAO,GAAG,CAAC,yBAAyB,EAAE,QAAQ,MAAM,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;gBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;oBACb,OAAO,GAAG,CACR,eAAe,GAAG,QAAQ,EAC1B,qDAAqD,CACtD,CAAC;gBACJ,CAAC;gBACD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACvE,MAAM,WAAW,GAAG,OAAO,GAAG,UAAU,KAAK,mBAAmB,CAAC;gBAEjE,qBAAqB;gBACrB,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB;oBACE,KAAK;oBACL,MAAM,CAAC,KAAK,CAAC;oBACb,IAAI;oBACJ,MAAM,CAAC,GAAG,CAAC;oBACX,IAAI;oBACJ,KAAK;oBACL,KAAK;oBACL,GAAG,WAAW,6BAA6B;oBAC3C,WAAW;iBACZ,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACvB,CAAC;gBACF,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;oBAAE,OAAO,GAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE9D,qBAAqB;gBACrB,MAAM,EAAE,GAAG,MAAM,SAAS,CACxB;oBACE,KAAK;oBACL,MAAM,CAAC,KAAK,CAAC;oBACb,IAAI;oBACJ,MAAM,CAAC,GAAG,CAAC;oBACX,IAAI;oBACJ,KAAK;oBACL,IAAI;oBACJ,WAAW;oBACX,QAAQ;oBACR,GAAG,WAAW,0EAA0E;oBACxF,MAAM;iBACP,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACvB,CAAC;gBACF,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;oBAAE,OAAO,GAAG,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,OAAO,OAAO,CAAC;oBACb,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,GAAG;oBAChB,GAAG;oBACH,KAAK;oBACL,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
3
|
+
import type { VideoHost } from "../core/hosts/types.js";
|
|
4
|
+
declare const HostEvalParams: z.ZodObject<{
|
|
5
|
+
code: z.ZodString;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
/**
|
|
8
|
+
* Escape hatch — runs arbitrary host-native scripting code with the live NLE
|
|
9
|
+
* objects pre-bound. Routes to whichever adapter is connected:
|
|
10
|
+
*
|
|
11
|
+
* - Resolve → Python via the long-lived bridge sidecar
|
|
12
|
+
* - Premiere → ExtendScript via the JSX bridge
|
|
13
|
+
* - none → returns `error: not_supported` (no host attached)
|
|
14
|
+
*
|
|
15
|
+
* **Use this only when no named tool covers what you need.** The named tools
|
|
16
|
+
* have validation, output shaping, capability fallbacks, and EDL/FCPXML
|
|
17
|
+
* bulk-paths this raw eval skips entirely. If a named tool exists for what
|
|
18
|
+
* you're doing, use the named tool.
|
|
19
|
+
*
|
|
20
|
+
* Pre-bound globals on Resolve (Python):
|
|
21
|
+
* - `resolve`, `project`, `projectManager`, `mediaPool`, `mediaStorage`
|
|
22
|
+
* - `timeline`, `fusion`, `dvr` (the DaVinciResolveScript module)
|
|
23
|
+
* - `set_result(value)` — return JSON-serialisable data to the agent
|
|
24
|
+
* - `result` — alternative: assign at top level
|
|
25
|
+
* - `print(...)` — captured to `stdout`
|
|
26
|
+
*
|
|
27
|
+
* Pre-bound globals on Premiere (ExtendScript):
|
|
28
|
+
* - `app`, `project`, `sequence`, `qe` (Quality Engineering DOM, undocumented)
|
|
29
|
+
* - `setResult(value)` — return JSON-serialisable data
|
|
30
|
+
* - `result` — alternative: assign at top level
|
|
31
|
+
* - `print(...)` — captured to `stdout`
|
|
32
|
+
*/
|
|
33
|
+
export declare function createHostEvalTool(host: VideoHost): AgentTool<typeof HostEvalParams>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=host-eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-eval.d.ts","sourceRoot":"","sources":["../../src/tools/host-eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,QAAA,MAAM,cAAc;;iBAQlB,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,OAAO,cAAc,CAAC,CAiCpF"}
|