@kenkaiiii/gg-editor 0.6.3 → 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.
Files changed (114) hide show
  1. package/README.md +5 -1
  2. package/dist/core/doctor-runner.js +1 -3
  3. package/dist/core/doctor-runner.js.map +1 -1
  4. package/dist/core/hosts/lazy.d.ts +5 -5
  5. package/dist/core/hosts/lazy.d.ts.map +1 -1
  6. package/dist/core/hosts/lazy.js +16 -0
  7. package/dist/core/hosts/lazy.js.map +1 -1
  8. package/dist/core/hosts/premiere/adapter.d.ts +4 -1
  9. package/dist/core/hosts/premiere/adapter.d.ts.map +1 -1
  10. package/dist/core/hosts/premiere/adapter.js +6 -5
  11. package/dist/core/hosts/premiere/adapter.js.map +1 -1
  12. package/dist/core/hosts/premiere/bridge-source.d.ts.map +1 -1
  13. package/dist/core/hosts/premiere/bridge-source.js +45 -0
  14. package/dist/core/hosts/premiere/bridge-source.js.map +1 -1
  15. package/dist/core/hosts/resolve/adapter.d.ts +6 -2
  16. package/dist/core/hosts/resolve/adapter.d.ts.map +1 -1
  17. package/dist/core/hosts/resolve/adapter.js +13 -5
  18. package/dist/core/hosts/resolve/adapter.js.map +1 -1
  19. package/dist/core/hosts/resolve/bridge-source.d.ts.map +1 -1
  20. package/dist/core/hosts/resolve/bridge-source.js +376 -2
  21. package/dist/core/hosts/resolve/bridge-source.js.map +1 -1
  22. package/dist/core/hosts/resolve/bridge.d.ts +22 -4
  23. package/dist/core/hosts/resolve/bridge.d.ts.map +1 -1
  24. package/dist/core/hosts/resolve/bridge.integration.test.js +338 -0
  25. package/dist/core/hosts/resolve/bridge.integration.test.js.map +1 -1
  26. package/dist/core/hosts/resolve/bridge.js +56 -6
  27. package/dist/core/hosts/resolve/bridge.js.map +1 -1
  28. package/dist/core/hosts/resolve/bridge.test.js +61 -1
  29. package/dist/core/hosts/resolve/bridge.test.js.map +1 -1
  30. package/dist/core/hosts/types.d.ts +81 -0
  31. package/dist/core/hosts/types.d.ts.map +1 -1
  32. package/dist/core/hosts/types.js.map +1 -1
  33. package/dist/core/safe-paths.d.ts +47 -0
  34. package/dist/core/safe-paths.d.ts.map +1 -0
  35. package/dist/core/safe-paths.js +102 -0
  36. package/dist/core/safe-paths.js.map +1 -0
  37. package/dist/core/safe-paths.test.d.ts +2 -0
  38. package/dist/core/safe-paths.test.d.ts.map +1 -0
  39. package/dist/core/safe-paths.test.js +76 -0
  40. package/dist/core/safe-paths.test.js.map +1 -0
  41. package/dist/skills.d.ts.map +1 -1
  42. package/dist/skills.js +125 -0
  43. package/dist/skills.js.map +1 -1
  44. package/dist/system-prompt.d.ts.map +1 -1
  45. package/dist/system-prompt.js +33 -1
  46. package/dist/system-prompt.js.map +1 -1
  47. package/dist/tools/compose-layered.d.ts.map +1 -1
  48. package/dist/tools/compose-layered.js +2 -1
  49. package/dist/tools/compose-layered.js.map +1 -1
  50. package/dist/tools/compose-thumbnail.d.ts.map +1 -1
  51. package/dist/tools/compose-thumbnail.js +10 -2
  52. package/dist/tools/compose-thumbnail.js.map +1 -1
  53. package/dist/tools/concat-videos.d.ts.map +1 -1
  54. package/dist/tools/concat-videos.js +2 -1
  55. package/dist/tools/concat-videos.js.map +1 -1
  56. package/dist/tools/cut-filler-words.d.ts.map +1 -1
  57. package/dist/tools/cut-filler-words.js +2 -1
  58. package/dist/tools/cut-filler-words.js.map +1 -1
  59. package/dist/tools/extract-frame.d.ts.map +1 -1
  60. package/dist/tools/extract-frame.js +9 -2
  61. package/dist/tools/extract-frame.js.map +1 -1
  62. package/dist/tools/fusion-comp.d.ts +49 -0
  63. package/dist/tools/fusion-comp.d.ts.map +1 -0
  64. package/dist/tools/fusion-comp.js +129 -0
  65. package/dist/tools/fusion-comp.js.map +1 -0
  66. package/dist/tools/generate-gif.d.ts.map +1 -1
  67. package/dist/tools/generate-gif.js +12 -2
  68. package/dist/tools/generate-gif.js.map +1 -1
  69. package/dist/tools/host-eval.d.ts +35 -0
  70. package/dist/tools/host-eval.d.ts.map +1 -0
  71. package/dist/tools/host-eval.js +70 -0
  72. package/dist/tools/host-eval.js.map +1 -0
  73. package/dist/tools/host-tools.test.js +42 -0
  74. package/dist/tools/host-tools.test.js.map +1 -1
  75. package/dist/tools/index.d.ts +2 -0
  76. package/dist/tools/index.d.ts.map +1 -1
  77. package/dist/tools/index.js +9 -0
  78. package/dist/tools/index.js.map +1 -1
  79. package/dist/tools/index.test.js +4 -0
  80. package/dist/tools/index.test.js.map +1 -1
  81. package/dist/tools/overlay-watermark.d.ts.map +1 -1
  82. package/dist/tools/overlay-watermark.js +2 -1
  83. package/dist/tools/overlay-watermark.js.map +1 -1
  84. package/dist/tools/reformat-timeline.d.ts.map +1 -1
  85. package/dist/tools/reformat-timeline.js +3 -2
  86. package/dist/tools/reformat-timeline.js.map +1 -1
  87. package/dist/tools/reorder-timeline.d.ts.map +1 -1
  88. package/dist/tools/reorder-timeline.js +3 -2
  89. package/dist/tools/reorder-timeline.js.map +1 -1
  90. package/dist/tools/transcribe.d.ts.map +1 -1
  91. package/dist/tools/transcribe.js +2 -1
  92. package/dist/tools/transcribe.js.map +1 -1
  93. package/dist/tools/write-ass.d.ts.map +1 -1
  94. package/dist/tools/write-ass.js +3 -2
  95. package/dist/tools/write-ass.js.map +1 -1
  96. package/dist/tools/write-edl.d.ts.map +1 -1
  97. package/dist/tools/write-edl.js +3 -2
  98. package/dist/tools/write-edl.js.map +1 -1
  99. package/dist/tools/write-fcpxml.d.ts.map +1 -1
  100. package/dist/tools/write-fcpxml.js +3 -2
  101. package/dist/tools/write-fcpxml.js.map +1 -1
  102. package/dist/tools/write-keyword-captions.d.ts.map +1 -1
  103. package/dist/tools/write-keyword-captions.js +2 -1
  104. package/dist/tools/write-keyword-captions.js.map +1 -1
  105. package/dist/tools/write-lower-third.d.ts.map +1 -1
  106. package/dist/tools/write-lower-third.js +3 -2
  107. package/dist/tools/write-lower-third.js.map +1 -1
  108. package/dist/tools/write-srt.d.ts.map +1 -1
  109. package/dist/tools/write-srt.js +3 -2
  110. package/dist/tools/write-srt.js.map +1 -1
  111. package/dist/tools/write-title-card.d.ts.map +1 -1
  112. package/dist/tools/write-title-card.js +3 -2
  113. package/dist/tools/write-title-card.js.map +1 -1
  114. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from "vitest";
1
+ import { describe, expect, it, vi } from "vitest";
2
2
  import { findPython, resolveEnv } from "./bridge.js";
3
3
  describe("findPython", () => {
4
4
  it("returns a python3 candidate or undefined cleanly", () => {
@@ -46,5 +46,65 @@ describe("resolveEnv", () => {
46
46
  process.env.RESOLVE_SCRIPT_API = before;
47
47
  }
48
48
  });
49
+ it("sets PYTHONHOME to the python prefix on Windows when not preset", async () => {
50
+ // Mock node:os.platform() to report Windows. resolveEnv() reads platform()
51
+ // lazily so we re-import after mocking.
52
+ vi.resetModules();
53
+ vi.doMock("node:os", async () => {
54
+ const real = await vi.importActual("node:os");
55
+ return { ...real, platform: () => "win32" };
56
+ });
57
+ const before = process.env.PYTHONHOME;
58
+ delete process.env.PYTHONHOME;
59
+ try {
60
+ const mod = await import("./bridge.js");
61
+ const env = mod.resolveEnv({ cmd: "python", args: [], prefix: "C:/Python311" });
62
+ expect(env.PYTHONHOME).toBe("C:/Python311");
63
+ }
64
+ finally {
65
+ if (before === undefined)
66
+ delete process.env.PYTHONHOME;
67
+ else
68
+ process.env.PYTHONHOME = before;
69
+ vi.doUnmock("node:os");
70
+ vi.resetModules();
71
+ }
72
+ });
73
+ it("does not set PYTHONHOME on darwin/linux", () => {
74
+ // Real platform() on the test runner is darwin or linux — no Windows path
75
+ // taken, so PYTHONHOME stays undefined unless the user pre-set it.
76
+ const beforeHome = process.env.PYTHONHOME;
77
+ delete process.env.PYTHONHOME;
78
+ try {
79
+ const env = resolveEnv({ cmd: "python3", args: [], prefix: "/usr/local" });
80
+ expect(env.PYTHONHOME).toBeUndefined();
81
+ }
82
+ finally {
83
+ if (beforeHome !== undefined)
84
+ process.env.PYTHONHOME = beforeHome;
85
+ }
86
+ });
87
+ it("preserves a pre-set PYTHONHOME on Windows", async () => {
88
+ vi.resetModules();
89
+ vi.doMock("node:os", async () => {
90
+ const real = await vi.importActual("node:os");
91
+ return { ...real, platform: () => "win32" };
92
+ });
93
+ const before = process.env.PYTHONHOME;
94
+ process.env.PYTHONHOME = "C:/User/CustomHome";
95
+ try {
96
+ const mod = await import("./bridge.js");
97
+ const env = mod.resolveEnv({ cmd: "python", args: [], prefix: "C:/Python311" });
98
+ expect(env.PYTHONHOME).toBe("C:/User/CustomHome");
99
+ }
100
+ finally {
101
+ if (before === undefined)
102
+ delete process.env.PYTHONHOME;
103
+ else
104
+ process.env.PYTHONHOME = before;
105
+ vi.doUnmock("node:os");
106
+ vi.resetModules();
107
+ }
108
+ });
49
109
  });
50
110
  //# sourceMappingURL=bridge.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.test.js","sourceRoot":"","sources":["../../../../src/core/hosts/resolve/bridge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACxD,CAAC;QACD,uEAAuE;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,cAAc,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;gBAC3D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACT,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;gBAC3D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bridge.test.js","sourceRoot":"","sources":["../../../../src/core/hosts/resolve/bridge.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,51 @@
1
1
  import type { ClipInfo, Frame, FrameRange, HostCapabilities, HostName, MarkerInfo, TimelineState } from "../../types.js";
2
+ /**
3
+ * Discriminated union of every fusion_comp action the bridge supports. Kept
4
+ * in lockstep with `m_fusion_comp` in bridge-source.ts.
5
+ */
6
+ export type FusionCompArgs = {
7
+ action: "list_nodes";
8
+ clipId?: string;
9
+ } | {
10
+ action: "add_node";
11
+ toolId: string;
12
+ name?: string;
13
+ clipId?: string;
14
+ } | {
15
+ action: "delete_node";
16
+ name: string;
17
+ clipId?: string;
18
+ } | {
19
+ action: "connect";
20
+ fromNode: string;
21
+ toNode: string;
22
+ fromOutput?: string;
23
+ toInput?: string;
24
+ clipId?: string;
25
+ } | {
26
+ action: "set_input";
27
+ node: string;
28
+ input: string;
29
+ value: unknown;
30
+ clipId?: string;
31
+ } | {
32
+ action: "get_input";
33
+ node: string;
34
+ input: string;
35
+ clipId?: string;
36
+ } | {
37
+ action: "set_keyframe";
38
+ node: string;
39
+ input: string;
40
+ frame: number;
41
+ value: unknown;
42
+ clipId?: string;
43
+ } | {
44
+ action: "set_render_range";
45
+ start: number;
46
+ end: number;
47
+ clipId?: string;
48
+ };
2
49
  /**
3
50
  * VideoHost — the NLE-agnostic interface every adapter implements.
4
51
  *
@@ -146,6 +193,40 @@ export interface VideoHost {
146
193
  * have a page concept. Adapters that don't support it should omit this method.
147
194
  */
148
195
  openPage?(name: "media" | "cut" | "edit" | "fusion" | "color" | "fairlight" | "deliver"): Promise<void>;
196
+ /**
197
+ * Drive a Fusion composition (motion-graphics graph) inside Resolve.
198
+ * Optional; Resolve-only — adapters without a Fusion equivalent omit it.
199
+ *
200
+ * `clipId` (optional): scope the call to that clip's first Fusion comp
201
+ * (or auto-create one). When omitted, operates on the active Fusion-page
202
+ * comp.
203
+ *
204
+ * Actions are dispatched server-side; see `bridge-source.ts:m_fusion_comp`
205
+ * for the canonical action set.
206
+ */
207
+ executeFusionComp?(args: FusionCompArgs): Promise<unknown>;
208
+ /**
209
+ * Escape hatch — run a snippet of host-native scripting code with the live
210
+ * NLE objects pre-bound and return its result + captured stdout. Optional;
211
+ * only adapters with a real scripting bridge implement it (Resolve = Python,
212
+ * Premiere = ExtendScript). The `none` adapter omits it.
213
+ *
214
+ * Usage rule (enforced by the tool's system-prompt guidance, not the type):
215
+ * this is for things no named tool covers. Don't use it to do work the
216
+ * dedicated tools already do — those tools have validation, output shaping,
217
+ * and capability fallbacks this raw path skips.
218
+ *
219
+ * Resolve pre-bound globals: resolve, project, projectManager, mediaPool,
220
+ * mediaStorage, timeline, fusion, dvr; result via `set_result(value)` or
221
+ * top-level `result =`.
222
+ *
223
+ * Premiere pre-bound globals: app, project, sequence, qe; result via
224
+ * `setResult(value)` or top-level `result = `.
225
+ */
226
+ executeCode?(code: string): Promise<{
227
+ result: unknown;
228
+ stdout?: string;
229
+ }>;
149
230
  }
150
231
  /**
151
232
  * Thrown by adapters when an op is not supported by the live host API.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/hosts/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/hosts/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/hosts/types.ts"],"names":[],"mappings":"AAyLA;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE3B;IACA;IAFlB,YACkB,IAAc,EACd,EAAU,EAC1B,OAAgB;QAEhB,KAAK,CAAC,OAAO,IAAI,SAAS,IAAI,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;QAJjE,SAAI,GAAJ,IAAI,CAAU;QACd,OAAE,GAAF,EAAE,CAAQ;QAI1B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE3B;IADlB,YACkB,IAAc,EAC9B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAU;QAI9B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/hosts/types.ts"],"names":[],"mappings":"AAsPA;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE3B;IACA;IAFlB,YACkB,IAAc,EACd,EAAU,EAC1B,OAAgB;QAEhB,KAAK,CAAC,OAAO,IAAI,SAAS,IAAI,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;QAJjE,SAAI,GAAJ,IAAI,CAAU;QACd,OAAE,GAAF,EAAE,CAAQ;QAI1B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE3B;IADlB,YACkB,IAAc,EAC9B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAU;QAI9B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Path-safety helpers for file-writing tools.
3
+ *
4
+ * Two distinct guards live here:
5
+ *
6
+ * 1. `safeOutputPath()` — path-traversal guard. Resolves `requested` against
7
+ * `cwd`, then refuses absolute paths that escape the configured allow-list
8
+ * of roots (cwd, system tempdir, the per-user output dir under ~/Documents).
9
+ * Tools writing on behalf of the agent must call this before opening any
10
+ * file handle — it stops the agent from writing to `../../etc/passwd` even
11
+ * when the user has not validated the value.
12
+ *
13
+ * 2. `safeResolveOutputPath()` — sandbox redirect for paths that NLE hosts
14
+ * (Resolve, Premiere) need to read back. macOS-sandboxed Node writes under
15
+ * `/var/folders/...` are invisible to the host process, so we transparently
16
+ * redirect to `~/Documents/gg-editor-out/`. The redirect is reported back
17
+ * through tool output so the agent can surface it.
18
+ */
19
+ /** Default user-visible output directory for sandbox-redirected files. */
20
+ export declare const USER_OUTPUT_DIR_NAME = "gg-editor-out";
21
+ /** Build the full path of the per-user output directory. */
22
+ export declare function userOutputDir(): string;
23
+ export interface SafeOutputOptions {
24
+ /** Additional absolute paths that are valid output roots. */
25
+ allowRoots?: string[];
26
+ }
27
+ /**
28
+ * Resolve `requested` against `cwd` and verify it lies under an allowed root.
29
+ * Throws an Error whose message follows the `error:` format consumed by tools.
30
+ */
31
+ export declare function safeOutputPath(cwd: string, requested: string, opts?: SafeOutputOptions): string;
32
+ export interface SafeResolveResult {
33
+ /** Final absolute path after redirect (if any). */
34
+ path: string;
35
+ /** True when the original request landed in a sandbox-only location. */
36
+ redirected: boolean;
37
+ /** Human-readable reason for the redirect, when applicable. */
38
+ reason?: string;
39
+ }
40
+ /**
41
+ * Like `safeOutputPath`, but additionally redirects sandbox-only paths to the
42
+ * user-visible output dir so that NLE host processes (which run outside Node's
43
+ * sandbox) can read the result back. Use for stills / thumbnails / GIFs that
44
+ * the host might import.
45
+ */
46
+ export declare function safeResolveOutputPath(cwd: string, requested: string, opts?: SafeOutputOptions): SafeResolveResult;
47
+ //# sourceMappingURL=safe-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-paths.d.ts","sourceRoot":"","sources":["../../src/core/safe-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,kBAAkB,CAAC;AAEpD,4DAA4D;AAC5D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAuBD,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAY/F;AA2BD,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,iBAAiB,GACvB,iBAAiB,CAWnB"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Path-safety helpers for file-writing tools.
3
+ *
4
+ * Two distinct guards live here:
5
+ *
6
+ * 1. `safeOutputPath()` — path-traversal guard. Resolves `requested` against
7
+ * `cwd`, then refuses absolute paths that escape the configured allow-list
8
+ * of roots (cwd, system tempdir, the per-user output dir under ~/Documents).
9
+ * Tools writing on behalf of the agent must call this before opening any
10
+ * file handle — it stops the agent from writing to `../../etc/passwd` even
11
+ * when the user has not validated the value.
12
+ *
13
+ * 2. `safeResolveOutputPath()` — sandbox redirect for paths that NLE hosts
14
+ * (Resolve, Premiere) need to read back. macOS-sandboxed Node writes under
15
+ * `/var/folders/...` are invisible to the host process, so we transparently
16
+ * redirect to `~/Documents/gg-editor-out/`. The redirect is reported back
17
+ * through tool output so the agent can surface it.
18
+ */
19
+ import { homedir, tmpdir } from "node:os";
20
+ import { basename, isAbsolute, resolve as resolvePath } from "node:path";
21
+ /** Default user-visible output directory for sandbox-redirected files. */
22
+ export const USER_OUTPUT_DIR_NAME = "gg-editor-out";
23
+ /** Build the full path of the per-user output directory. */
24
+ export function userOutputDir() {
25
+ return resolvePath(homedir(), "Documents", USER_OUTPUT_DIR_NAME);
26
+ }
27
+ function realTmpdir() {
28
+ // On macOS, tmpdir() returns /var/folders/... which itself is one of the
29
+ // sandbox roots we redirect FROM. We still allow it as an output root for
30
+ // ffmpeg-only tools that don't feed Resolve back; the redirect helper is
31
+ // the one that pushes Resolve-facing writes elsewhere.
32
+ return resolvePath(tmpdir());
33
+ }
34
+ function defaultAllowRoots(cwd) {
35
+ return [resolvePath(cwd), realTmpdir(), userOutputDir()];
36
+ }
37
+ function isUnderRoot(absPath, root) {
38
+ const a = absPath;
39
+ const r = root.endsWith("/") || root.endsWith("\\") ? root.slice(0, -1) : root;
40
+ if (a === r)
41
+ return true;
42
+ // Use platform-aware separator: on Windows the resolve() output uses '\\'.
43
+ const sep = a.includes("\\") && !a.includes("/") ? "\\" : "/";
44
+ return a.startsWith(r + sep);
45
+ }
46
+ /**
47
+ * Resolve `requested` against `cwd` and verify it lies under an allowed root.
48
+ * Throws an Error whose message follows the `error:` format consumed by tools.
49
+ */
50
+ export function safeOutputPath(cwd, requested, opts) {
51
+ if (!requested || typeof requested !== "string") {
52
+ throw new Error("output path is empty");
53
+ }
54
+ const abs = resolvePath(cwd, requested);
55
+ const roots = [...defaultAllowRoots(cwd), ...(opts?.allowRoots ?? []).map((r) => resolvePath(r))];
56
+ for (const root of roots) {
57
+ if (isUnderRoot(abs, root))
58
+ return abs;
59
+ }
60
+ throw new Error(`output path '${requested}' resolves outside allowed roots (cwd, tempdir, ~/Documents/${USER_OUTPUT_DIR_NAME})`);
61
+ }
62
+ /** Sandbox roots whose writes are invisible to host (Resolve/Premiere) processes. */
63
+ function sandboxRoots() {
64
+ const roots = ["/var/folders/", "/private/var/folders/", "/private/tmp/", "/tmp/", "/var/tmp/"];
65
+ // On Windows, %LOCALAPPDATA%\Temp comes back via tmpdir(); treat the system
66
+ // tempdir as a sandbox if it's not directly under the user profile.
67
+ const t = realTmpdir();
68
+ const home = resolvePath(homedir());
69
+ if (!isUnderRoot(t, home))
70
+ roots.push(t);
71
+ return roots;
72
+ }
73
+ function isSandboxPath(absPath) {
74
+ for (const root of sandboxRoots()) {
75
+ if (absPath === root ||
76
+ absPath.startsWith(root) ||
77
+ // Tolerate trailing-slash absent variants on POSIX:
78
+ (root.endsWith("/") && absPath.startsWith(root.slice(0, -1) + "/"))) {
79
+ return true;
80
+ }
81
+ }
82
+ return false;
83
+ }
84
+ /**
85
+ * Like `safeOutputPath`, but additionally redirects sandbox-only paths to the
86
+ * user-visible output dir so that NLE host processes (which run outside Node's
87
+ * sandbox) can read the result back. Use for stills / thumbnails / GIFs that
88
+ * the host might import.
89
+ */
90
+ export function safeResolveOutputPath(cwd, requested, opts) {
91
+ const abs = isAbsolute(requested) ? resolvePath(requested) : safeOutputPath(cwd, requested, opts);
92
+ if (!isSandboxPath(abs)) {
93
+ return { path: abs, redirected: false };
94
+ }
95
+ const out = resolvePath(userOutputDir(), basename(abs));
96
+ return {
97
+ path: out,
98
+ redirected: true,
99
+ reason: `original path '${abs}' is in a sandboxed temp directory and would be invisible to the host process`,
100
+ };
101
+ }
102
+ //# sourceMappingURL=safe-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-paths.js","sourceRoot":"","sources":["../../src/core/safe-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=safe-paths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-paths.test.d.ts","sourceRoot":"","sources":["../../src/core/safe-paths.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { homedir, tmpdir } from "node:os";
2
+ import { resolve as resolvePath } from "node:path";
3
+ import { describe, expect, it } from "vitest";
4
+ import { USER_OUTPUT_DIR_NAME, safeOutputPath, safeResolveOutputPath, userOutputDir, } from "./safe-paths.js";
5
+ const cwd = resolvePath(homedir(), "sample-project");
6
+ describe("safeOutputPath", () => {
7
+ it("accepts a relative path under cwd", () => {
8
+ const out = safeOutputPath(cwd, "out/clip.mp4");
9
+ expect(out).toBe(resolvePath(cwd, "out/clip.mp4"));
10
+ });
11
+ it("rejects escape via parent-dir traversal", () => {
12
+ expect(() => safeOutputPath("/Users/agent/proj", "../../etc/passwd")).toThrow(/outside allowed roots/);
13
+ });
14
+ it("accepts absolute paths under the user output dir", () => {
15
+ const target = resolvePath(userOutputDir(), "thumb.jpg");
16
+ const out = safeOutputPath(cwd, target);
17
+ expect(out).toBe(target);
18
+ });
19
+ it("accepts absolute paths under the system tempdir", () => {
20
+ const target = resolvePath(tmpdir(), "scratch", "x.wav");
21
+ const out = safeOutputPath(cwd, target);
22
+ expect(out).toBe(target);
23
+ });
24
+ it("rejects an absolute path outside the allowlist", () => {
25
+ expect(() => safeOutputPath(cwd, "/etc/hosts")).toThrow(/outside allowed roots/);
26
+ });
27
+ it("accepts paths under user-supplied allowRoots", () => {
28
+ const root = resolvePath(homedir(), "Movies", "raw");
29
+ const target = resolvePath(root, "a.mp4");
30
+ const out = safeOutputPath(cwd, target, { allowRoots: [root] });
31
+ expect(out).toBe(target);
32
+ });
33
+ it("rejects empty input", () => {
34
+ expect(() => safeOutputPath(cwd, "")).toThrow(/empty/);
35
+ });
36
+ it("treats Windows-style drive letters consistently with node:path", () => {
37
+ // On POSIX runners this becomes a relative-looking path; the assertion
38
+ // just guarantees we don't throw on the segment shape — node:path picks
39
+ // the platform behaviour and we trust it.
40
+ const out = safeOutputPath(cwd, "C:/Users/me/out.mp4");
41
+ expect(out.endsWith("out.mp4")).toBe(true);
42
+ });
43
+ });
44
+ describe("safeResolveOutputPath", () => {
45
+ it("leaves a regular cwd-relative path unchanged", () => {
46
+ const r = safeResolveOutputPath(cwd, "thumb.jpg");
47
+ expect(r.redirected).toBe(false);
48
+ expect(r.path.endsWith("thumb.jpg")).toBe(true);
49
+ });
50
+ it("redirects /tmp paths to ~/Documents/gg-editor-out", () => {
51
+ const r = safeResolveOutputPath(cwd, "/tmp/grab.jpg");
52
+ expect(r.redirected).toBe(true);
53
+ expect(r.path).toBe(resolvePath(userOutputDir(), "grab.jpg"));
54
+ expect(r.reason).toMatch(/sandbox/);
55
+ });
56
+ it("redirects /var/folders sandbox paths", () => {
57
+ const r = safeResolveOutputPath(cwd, "/var/folders/zz/abc/T/grab.jpg");
58
+ expect(r.redirected).toBe(true);
59
+ expect(r.path).toBe(resolvePath(userOutputDir(), "grab.jpg"));
60
+ });
61
+ it("redirects /private/var paths", () => {
62
+ const r = safeResolveOutputPath(cwd, "/private/var/folders/zz/T/grab.jpg");
63
+ expect(r.redirected).toBe(true);
64
+ });
65
+ it("preserves an absolute path under the user output dir", () => {
66
+ const target = resolvePath(userOutputDir(), "explicit.jpg");
67
+ const r = safeResolveOutputPath(cwd, target);
68
+ expect(r.redirected).toBe(false);
69
+ expect(r.path).toBe(target);
70
+ });
71
+ it("exports a sensible USER_OUTPUT_DIR_NAME constant", () => {
72
+ expect(USER_OUTPUT_DIR_NAME).toBe("gg-editor-out");
73
+ expect(userOutputDir().endsWith(USER_OUTPUT_DIR_NAME)).toBe(true);
74
+ });
75
+ });
76
+ //# sourceMappingURL=safe-paths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-paths.test.js","sourceRoot":"","sources":["../../src/core/safe-paths.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkoBD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA+B/C,CAAC;AAEF,eAAO,MAAM,WAAW,UAAsB,CAAC"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2vBD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAqC/C,CAAC;AAEF,eAAO,MAAM,WAAW,UAAsB,CAAC"}
package/dist/skills.js CHANGED
@@ -643,6 +643,126 @@ better reference frame if confidence was low.
643
643
  - Don't bake \`grade_skin_tones\` over the original target file. Always
644
644
  write to a new path.
645
645
  `;
646
+ const FUSION_LOWER_THIRD = `# fusion-lower-third
647
+
648
+ **When to use:** the user asks for a name/title chyron that should be
649
+ *editable inside the NLE* (not baked-in pixels), or wants a quick
650
+ title card built natively in DaVinci Resolve's Fusion page.
651
+
652
+ **Goal:** compose a Background + TextPlus + Merge graph in Fusion via
653
+ \`fusion_comp\`. Resolve only — Premiere has no Fusion equivalent; for
654
+ that, fall back to \`write_lower_third\` + \`burn_subtitles\`.
655
+
656
+ ---
657
+
658
+ ## When to pick which
659
+
660
+ - **fusion_comp** — Resolve, comp lives inside the project, user can
661
+ tweak it later. Best when the user is already on the Fusion page or
662
+ wants a chyron that travels with the project file.
663
+ - **write_lower_third + burn_subtitles** — works on any host, output
664
+ is a baked-in pixel layer. Faster to iterate from the agent side
665
+ but the user can no longer edit the text without re-running the
666
+ pipeline.
667
+
668
+ If unsure, ask: "Resolve-native (editable) or baked-in?"
669
+
670
+ ---
671
+
672
+ ## Recipe — name + title lower-third on the active comp
673
+
674
+ Pre-flight: \`host_info\` must report \`name === "resolve"\`. If it doesn't,
675
+ stop and tell the user this skill is Resolve-only.
676
+
677
+ \`\`\`
678
+ host_info # confirm Resolve
679
+
680
+ # 1. Get to the Fusion page so the user can see the result.
681
+ open_page(name="fusion")
682
+
683
+ # 2. Build the graph.
684
+ fusion_comp(action="add_node", toolId="Background", name="LT_Strap")
685
+ fusion_comp(action="add_node", toolId="TextPlus", name="LT_Text")
686
+ fusion_comp(action="add_node", toolId="Merge", name="LT_Comp")
687
+
688
+ # 3. Wire it: strap as Background, text as Foreground.
689
+ fusion_comp(action="connect", fromNode="LT_Strap", toNode="LT_Comp",
690
+ toInput="Background")
691
+ fusion_comp(action="connect", fromNode="LT_Text", toNode="LT_Comp",
692
+ toInput="Foreground")
693
+
694
+ # 4. Set the text content + colour.
695
+ fusion_comp(action="set_input", node="LT_Text", input="StyledText",
696
+ value="<Name>\\n<Title>")
697
+ fusion_comp(action="set_input", node="LT_Text", input="Size", value=0.06)
698
+ fusion_comp(action="set_input", node="LT_Text", input="Color1Red", value=1)
699
+ fusion_comp(action="set_input", node="LT_Text", input="Color1Green", value=1)
700
+ fusion_comp(action="set_input", node="LT_Text", input="Color1Blue", value=1)
701
+
702
+ # 5. Park the strap in the lower-left third.
703
+ fusion_comp(action="set_input", node="LT_Strap", input="TopLeftRed", value=0)
704
+ fusion_comp(action="set_input", node="LT_Strap", input="TopLeftGreen", value=0)
705
+ fusion_comp(action="set_input", node="LT_Strap", input="TopLeftBlue", value=0)
706
+ fusion_comp(action="set_input", node="LT_Strap", input="TopLeftAlpha", value=0.85)
707
+ \`\`\`
708
+
709
+ The Merge node is the comp's MediaOut by default; the user sees the
710
+ result on the active timeline clip immediately.
711
+
712
+ ---
713
+
714
+ ## Animating in / out
715
+
716
+ Use \`set_keyframe\` on the Merge's \`Blend\` input (overall opacity):
717
+
718
+ \`\`\`
719
+ fusion_comp(action="set_keyframe", node="LT_Comp", input="Blend",
720
+ frame=0, value=0) # invisible at clip start
721
+ fusion_comp(action="set_keyframe", node="LT_Comp", input="Blend",
722
+ frame=12, value=1) # fade in over 12f
723
+ fusion_comp(action="set_keyframe", node="LT_Comp", input="Blend",
724
+ frame=72, value=1) # hold
725
+ fusion_comp(action="set_keyframe", node="LT_Comp", input="Blend",
726
+ frame=84, value=0) # fade out
727
+ \`\`\`
728
+
729
+ Frames are relative to the comp's render range — set it explicitly if
730
+ the agent needs to control the in/out range:
731
+
732
+ \`\`\`
733
+ fusion_comp(action="set_render_range", start=0, end=120)
734
+ \`\`\`
735
+
736
+ ---
737
+
738
+ ## Targeting a specific clip's comp
739
+
740
+ Pass \`clipId\` to scope every action to that clip's first Fusion comp
741
+ (auto-created if the clip has none). Useful for batched lower-thirds
742
+ across multiple clips:
743
+
744
+ \`\`\`
745
+ get_timeline # discover clipIds
746
+ fusion_comp(action="add_node", toolId="TextPlus",
747
+ name="LT_Text", clipId="<clipId>")
748
+ \`\`\`
749
+
750
+ ---
751
+
752
+ ## Troubleshooting
753
+
754
+ - **\`Resolve.Fusion() unavailable\`** — Resolve build is too old or
755
+ user is on a free seat. Fusion is Studio-only at scriptable depth.
756
+ - **\`No active Fusion comp\`** — user hasn't switched to the Fusion
757
+ page on a clip with a comp. Either call \`open_page("fusion")\` first
758
+ on a known clip, or pass \`clipId\` so we operate on that clip's comp
759
+ directly.
760
+ - **\`AddTool('X') returned None\`** — \`toolId\` is wrong. The canonical
761
+ IDs the agent will hit: \`Background\`, \`TextPlus\`, \`Merge\`,
762
+ \`Transform\`, \`ColorCorrector\`, \`DeltaKeyer\`, \`Brightness\`, \`Glow\`,
763
+ \`Blur\`. There's no scriptable enumeration; check Fusion's docs if
764
+ the user names a tool not in this list.
765
+ `;
646
766
  export const SKILLS = {
647
767
  "long-form-content-edit": {
648
768
  name: "long-form-content-edit",
@@ -669,6 +789,11 @@ export const SKILLS = {
669
789
  description: "Recipe for matching faces across clips when host scripting can't reach power windows or qualifiers. Two paths: grade_skin_tones (file-only, every host — bakes a vision-derived colorbalance + selectivecolor + eq grade into a new mp4, pair with replace_clip) and match_clip_color (Resolve only — derives the same grade as a CDL and pipes it through set_primary_correction, non-baked). Both share one vision pass over a reference frame and a target frame; below confidence 0.4 the grade is unreliable.",
670
790
  content: SKIN_TONE_MATCHING,
671
791
  },
792
+ "fusion-lower-third": {
793
+ name: "fusion-lower-third",
794
+ description: "Recipe for building a name/title chyron natively in DaVinci Resolve's Fusion page via fusion_comp. Walks the agent through Background + TextPlus + Merge node graph, wiring, text styling, lower-third positioning, and keyframed fade in/out via Merge.Blend. Resolve-only (Studio); for cross-host pixel-baked chyrons fall back to write_lower_third + burn_subtitles.",
795
+ content: FUSION_LOWER_THIRD,
796
+ },
672
797
  };
673
798
  export const SKILL_NAMES = Object.keys(SKILLS);
674
799
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4G9B,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgH/B,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FvB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6K7B,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJ1B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAiC;IAClD,wBAAwB,EAAE;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,iUAAiU;QACnU,OAAO,EAAE,sBAAsB;KAChC;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,gOAAgO;QAClO,OAAO,EAAE,uBAAuB;KACjC;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,iPAAiP;QACnP,OAAO,EAAE,eAAe;KACzB;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,sfAAsf;QACxf,OAAO,EAAE,qBAAqB;KAC/B;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,ofAAof;QACtf,OAAO,EAAE,kBAAkB;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4G9B,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgH/B,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FvB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6K7B,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJ1B,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuH1B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAiC;IAClD,wBAAwB,EAAE;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,iUAAiU;QACnU,OAAO,EAAE,sBAAsB;KAChC;IACD,yBAAyB,EAAE;QACzB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,gOAAgO;QAClO,OAAO,EAAE,uBAAuB;KACjC;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,iPAAiP;QACnP,OAAO,EAAE,eAAe;KACzB;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,sfAAsf;QACxf,OAAO,EAAE,qBAAqB;KAC/B;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,ofAAof;QACtf,OAAO,EAAE,kBAAkB;KAC5B;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,2WAA2W;QAC7W,OAAO,EAAE,kBAAkB;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6B9F,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAiZ5F;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO7E"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA6B9F,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAib5F;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO7E"}