blitzreels 0.1.4 → 0.1.6

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 (214) hide show
  1. package/README.md +55 -25
  2. package/dist/agent-context.d.ts +68 -0
  3. package/dist/agent-context.d.ts.map +1 -0
  4. package/dist/agent-context.js +214 -0
  5. package/dist/agent-context.js.map +1 -0
  6. package/dist/cli-command-routing.d.ts +27 -0
  7. package/dist/cli-command-routing.d.ts.map +1 -0
  8. package/dist/cli-command-routing.js +236 -0
  9. package/dist/cli-command-routing.js.map +1 -0
  10. package/dist/cli-errors.d.ts +31 -0
  11. package/dist/cli-errors.d.ts.map +1 -0
  12. package/dist/cli-errors.js +27 -0
  13. package/dist/cli-errors.js.map +1 -0
  14. package/dist/cli-flag-reader.d.ts +61 -0
  15. package/dist/cli-flag-reader.d.ts.map +1 -0
  16. package/dist/cli-flag-reader.js +207 -0
  17. package/dist/cli-flag-reader.js.map +1 -0
  18. package/dist/cli-http.d.ts +6 -0
  19. package/dist/cli-http.d.ts.map +1 -0
  20. package/dist/cli-http.js +42 -0
  21. package/dist/cli-http.js.map +1 -0
  22. package/dist/cli-presenter.d.ts +24 -0
  23. package/dist/cli-presenter.d.ts.map +1 -0
  24. package/dist/cli-presenter.js +161 -0
  25. package/dist/cli-presenter.js.map +1 -0
  26. package/dist/cli-runtime.d.ts +1 -2
  27. package/dist/cli-runtime.d.ts.map +1 -1
  28. package/dist/cli-runtime.js +2 -2
  29. package/dist/cli-runtime.js.map +1 -1
  30. package/dist/cli-timing.d.ts +4 -0
  31. package/dist/cli-timing.d.ts.map +1 -0
  32. package/dist/cli-timing.js +6 -0
  33. package/dist/cli-timing.js.map +1 -0
  34. package/dist/cli-types.d.ts +52 -0
  35. package/dist/cli-types.d.ts.map +1 -1
  36. package/dist/cli-value-parsers.d.ts +76 -0
  37. package/dist/cli-value-parsers.d.ts.map +1 -0
  38. package/dist/cli-value-parsers.js +271 -0
  39. package/dist/cli-value-parsers.js.map +1 -0
  40. package/dist/command-metadata.d.ts +11 -5
  41. package/dist/command-metadata.d.ts.map +1 -1
  42. package/dist/command-metadata.js +64 -9
  43. package/dist/command-metadata.js.map +1 -1
  44. package/dist/command-registry.d.ts +1 -1
  45. package/dist/command-registry.d.ts.map +1 -1
  46. package/dist/command-registry.js +44 -853
  47. package/dist/command-registry.js.map +1 -1
  48. package/dist/commands/ai-edit.d.ts +45 -0
  49. package/dist/commands/ai-edit.d.ts.map +1 -0
  50. package/dist/commands/ai-edit.js +370 -0
  51. package/dist/commands/ai-edit.js.map +1 -0
  52. package/dist/commands/api.d.ts +20 -0
  53. package/dist/commands/api.d.ts.map +1 -0
  54. package/dist/commands/api.js +56 -0
  55. package/dist/commands/api.js.map +1 -0
  56. package/dist/commands/audio.d.ts +65 -0
  57. package/dist/commands/audio.d.ts.map +1 -0
  58. package/dist/commands/audio.js +264 -0
  59. package/dist/commands/audio.js.map +1 -0
  60. package/dist/commands/auth-runtime.d.ts +24 -0
  61. package/dist/commands/auth-runtime.d.ts.map +1 -0
  62. package/dist/commands/auth-runtime.js +169 -0
  63. package/dist/commands/auth-runtime.js.map +1 -0
  64. package/dist/commands/auth.d.ts +26 -0
  65. package/dist/commands/auth.d.ts.map +1 -0
  66. package/dist/commands/auth.js +59 -0
  67. package/dist/commands/auth.js.map +1 -0
  68. package/dist/commands/caption-command-types.d.ts +66 -0
  69. package/dist/commands/caption-command-types.d.ts.map +1 -0
  70. package/dist/commands/caption-command-types.js +2 -0
  71. package/dist/commands/caption-command-types.js.map +1 -0
  72. package/dist/commands/caption-dry-run.d.ts +66 -0
  73. package/dist/commands/caption-dry-run.d.ts.map +1 -0
  74. package/dist/commands/caption-dry-run.js +225 -0
  75. package/dist/commands/caption-dry-run.js.map +1 -0
  76. package/dist/commands/caption-overrides.d.ts +43 -0
  77. package/dist/commands/caption-overrides.d.ts.map +1 -0
  78. package/dist/commands/caption-overrides.js +245 -0
  79. package/dist/commands/caption-overrides.js.map +1 -0
  80. package/dist/commands/caption-selection.d.ts +72 -0
  81. package/dist/commands/caption-selection.d.ts.map +1 -0
  82. package/dist/commands/caption-selection.js +89 -0
  83. package/dist/commands/caption-selection.js.map +1 -0
  84. package/dist/commands/caption-style-commands.d.ts +3 -0
  85. package/dist/commands/caption-style-commands.d.ts.map +1 -0
  86. package/dist/commands/caption-style-commands.js +240 -0
  87. package/dist/commands/caption-style-commands.js.map +1 -0
  88. package/dist/commands/caption-style-flags.d.ts +30 -0
  89. package/dist/commands/caption-style-flags.d.ts.map +1 -0
  90. package/dist/commands/caption-style-flags.js +257 -0
  91. package/dist/commands/caption-style-flags.js.map +1 -0
  92. package/dist/commands/caption-text-updates.d.ts +21 -0
  93. package/dist/commands/caption-text-updates.d.ts.map +1 -0
  94. package/dist/commands/caption-text-updates.js +23 -0
  95. package/dist/commands/caption-text-updates.js.map +1 -0
  96. package/dist/commands/captions-specs.d.ts +3 -0
  97. package/dist/commands/captions-specs.d.ts.map +1 -0
  98. package/dist/commands/captions-specs.js +241 -0
  99. package/dist/commands/captions-specs.js.map +1 -0
  100. package/dist/commands/captions.d.ts +7 -0
  101. package/dist/commands/captions.d.ts.map +1 -0
  102. package/dist/commands/captions.js +203 -0
  103. package/dist/commands/captions.js.map +1 -0
  104. package/dist/commands/clip-runtime.d.ts +67 -0
  105. package/dist/commands/clip-runtime.d.ts.map +1 -0
  106. package/dist/commands/clip-runtime.js +194 -0
  107. package/dist/commands/clip-runtime.js.map +1 -0
  108. package/dist/commands/clips.d.ts +66 -0
  109. package/dist/commands/clips.d.ts.map +1 -0
  110. package/dist/commands/clips.js +625 -0
  111. package/dist/commands/clips.js.map +1 -0
  112. package/dist/commands/command-operation.d.ts +26 -0
  113. package/dist/commands/command-operation.d.ts.map +1 -0
  114. package/dist/commands/command-operation.js +18 -0
  115. package/dist/commands/command-operation.js.map +1 -0
  116. package/dist/commands/editing-workflow-runtime.d.ts +42 -0
  117. package/dist/commands/editing-workflow-runtime.d.ts.map +1 -0
  118. package/dist/commands/editing-workflow-runtime.js +128 -0
  119. package/dist/commands/editing-workflow-runtime.js.map +1 -0
  120. package/dist/commands/editing-workflows.d.ts +70 -0
  121. package/dist/commands/editing-workflows.d.ts.map +1 -0
  122. package/dist/commands/editing-workflows.js +252 -0
  123. package/dist/commands/editing-workflows.js.map +1 -0
  124. package/dist/commands/effects-runtime.d.ts +64 -0
  125. package/dist/commands/effects-runtime.d.ts.map +1 -0
  126. package/dist/commands/effects-runtime.js +100 -0
  127. package/dist/commands/effects-runtime.js.map +1 -0
  128. package/dist/commands/effects.d.ts +69 -0
  129. package/dist/commands/effects.d.ts.map +1 -0
  130. package/dist/commands/effects.js +281 -0
  131. package/dist/commands/effects.js.map +1 -0
  132. package/dist/commands/exports.d.ts +16 -5
  133. package/dist/commands/exports.d.ts.map +1 -1
  134. package/dist/commands/exports.js +119 -2
  135. package/dist/commands/exports.js.map +1 -1
  136. package/dist/commands/faceless.d.ts +44 -0
  137. package/dist/commands/faceless.d.ts.map +1 -0
  138. package/dist/commands/faceless.js +587 -0
  139. package/dist/commands/faceless.js.map +1 -0
  140. package/dist/commands/formats.d.ts +41 -0
  141. package/dist/commands/formats.d.ts.map +1 -0
  142. package/dist/commands/formats.js +140 -0
  143. package/dist/commands/formats.js.map +1 -0
  144. package/dist/commands/jobs.d.ts +20 -0
  145. package/dist/commands/jobs.d.ts.map +1 -0
  146. package/dist/commands/jobs.js +40 -0
  147. package/dist/commands/jobs.js.map +1 -0
  148. package/dist/commands/media-assets.d.ts +100 -0
  149. package/dist/commands/media-assets.d.ts.map +1 -0
  150. package/dist/commands/media-assets.js +644 -0
  151. package/dist/commands/media-assets.js.map +1 -0
  152. package/dist/commands/media-overlays.d.ts +52 -0
  153. package/dist/commands/media-overlays.d.ts.map +1 -0
  154. package/dist/commands/media-overlays.js +314 -0
  155. package/dist/commands/media-overlays.js.map +1 -0
  156. package/dist/commands/media-runtime.d.ts +61 -0
  157. package/dist/commands/media-runtime.d.ts.map +1 -0
  158. package/dist/commands/media-runtime.js +239 -0
  159. package/dist/commands/media-runtime.js.map +1 -0
  160. package/dist/commands/onboarding.d.ts +51 -0
  161. package/dist/commands/onboarding.d.ts.map +1 -0
  162. package/dist/commands/onboarding.js +452 -0
  163. package/dist/commands/onboarding.js.map +1 -0
  164. package/dist/commands/project-read.d.ts +40 -0
  165. package/dist/commands/project-read.d.ts.map +1 -0
  166. package/dist/commands/project-read.js +184 -0
  167. package/dist/commands/project-read.js.map +1 -0
  168. package/dist/commands/projects.d.ts +16 -5
  169. package/dist/commands/projects.d.ts.map +1 -1
  170. package/dist/commands/projects.js +139 -2
  171. package/dist/commands/projects.js.map +1 -1
  172. package/dist/commands/stock-library.d.ts +72 -0
  173. package/dist/commands/stock-library.d.ts.map +1 -0
  174. package/dist/commands/stock-library.js +175 -0
  175. package/dist/commands/stock-library.js.map +1 -0
  176. package/dist/commands/system.d.ts +16 -0
  177. package/dist/commands/system.d.ts.map +1 -0
  178. package/dist/commands/system.js +147 -0
  179. package/dist/commands/system.js.map +1 -0
  180. package/dist/commands/text-overlay-spec.d.ts +24 -0
  181. package/dist/commands/text-overlay-spec.d.ts.map +1 -0
  182. package/dist/commands/text-overlay-spec.js +228 -0
  183. package/dist/commands/text-overlay-spec.js.map +1 -0
  184. package/dist/commands/text-overlays.d.ts +67 -0
  185. package/dist/commands/text-overlays.d.ts.map +1 -0
  186. package/dist/commands/text-overlays.js +272 -0
  187. package/dist/commands/text-overlays.js.map +1 -0
  188. package/dist/commands/timeline-runtime.d.ts +105 -0
  189. package/dist/commands/timeline-runtime.d.ts.map +1 -0
  190. package/dist/commands/timeline-runtime.js +508 -0
  191. package/dist/commands/timeline-runtime.js.map +1 -0
  192. package/dist/commands/timeline.d.ts +120 -0
  193. package/dist/commands/timeline.d.ts.map +1 -0
  194. package/dist/commands/timeline.js +621 -0
  195. package/dist/commands/timeline.js.map +1 -0
  196. package/dist/commands/workspace-defaults.d.ts +12 -0
  197. package/dist/commands/workspace-defaults.d.ts.map +1 -0
  198. package/dist/commands/workspace-defaults.js +115 -0
  199. package/dist/commands/workspace-defaults.js.map +1 -0
  200. package/dist/commands/workspace.d.ts +50 -0
  201. package/dist/commands/workspace.d.ts.map +1 -0
  202. package/dist/commands/workspace.js +116 -0
  203. package/dist/commands/workspace.js.map +1 -0
  204. package/dist/index.js +485 -5035
  205. package/dist/index.js.map +1 -1
  206. package/dist/preview-first-edit.d.ts +9 -1
  207. package/dist/preview-first-edit.d.ts.map +1 -1
  208. package/dist/preview-first-edit.js +16 -4
  209. package/dist/preview-first-edit.js.map +1 -1
  210. package/dist/update-notifier.d.ts +43 -0
  211. package/dist/update-notifier.d.ts.map +1 -0
  212. package/dist/update-notifier.js +265 -0
  213. package/dist/update-notifier.js.map +1 -0
  214. package/package.json +2 -2
@@ -0,0 +1,175 @@
1
+ import { commandSpec } from "../command-metadata.js";
2
+ export const STOCK_LIBRARY_COMMAND_SPECS = [
3
+ commandSpec({
4
+ command: ["stock", "search"],
5
+ usage: "blitzreels stock search --query QUERY --asset-type image|video|audio [--provider pexels|freesound] [--orientation landscape|portrait|square] [--limit 20] [--page 1] [--json]",
6
+ flags: ["query", "asset-type", "provider", "orientation", "limit", "page"],
7
+ }),
8
+ commandSpec({
9
+ command: ["stock", "import"],
10
+ usage: "blitzreels stock import --provider pexels|freesound --provider-asset-id ID --asset-type image|video|audio [--variant-id ID] [--folder-id ID|root] [--audio-type sound_effect|ambient|background_music|other]",
11
+ flags: [
12
+ "provider",
13
+ "provider-asset-id",
14
+ "asset-type",
15
+ "variant-id",
16
+ "folder-id",
17
+ "audio-type",
18
+ ],
19
+ }),
20
+ commandSpec({
21
+ command: ["library", "search"],
22
+ usage: "blitzreels library search [--query QUERY] [--asset-type image|video|audio] [--audio-type music|sound_effect|ambient|background_music|other] [--limit 20] [--offset 0] [--json]",
23
+ flags: ["query", "asset-type", "audio-type", "limit", "offset"],
24
+ description: "Search the BlitzReels global B-roll library.",
25
+ }),
26
+ commandSpec({
27
+ command: ["library", "import"],
28
+ usage: "blitzreels library import --library-asset-id ID [--folder-id ID|root]",
29
+ flags: ["library-asset-id", "folder-id"],
30
+ description: "Import a global B-roll library asset into workspace media.",
31
+ }),
32
+ ];
33
+ export function createStockLibraryCommandOperation({ helpers, }) {
34
+ return {
35
+ name: "stock-library",
36
+ matches: ({ command }) => command[0] === "stock" || command[0] === "library",
37
+ handle: async ({ context }) => {
38
+ const [group, action] = context.args.command;
39
+ const flags = context.args.flags;
40
+ if (group === "stock" && action === "search") {
41
+ const result = await context.client.stockMedia.search({
42
+ query: helpers.requireStringFlag({ flags, name: "query" }),
43
+ assetType: helpers.parseStockAssetType({
44
+ value: helpers.requireStringFlag({
45
+ flags,
46
+ name: "asset-type",
47
+ }),
48
+ }),
49
+ provider: helpers.parseStockProvider({
50
+ value: helpers.getStringFlag({ flags, name: "provider" }),
51
+ }),
52
+ orientation: helpers.parseStockOrientation({
53
+ value: helpers.getStringFlag({
54
+ flags,
55
+ name: "orientation",
56
+ }),
57
+ }),
58
+ limit: helpers.getNumberFlag({ flags, name: "limit" }),
59
+ page: helpers.getNumberFlag({ flags, name: "page" }),
60
+ });
61
+ helpers.printResult({
62
+ json: context.json,
63
+ value: result,
64
+ human: [
65
+ ...result.warnings.map((warning) => `Warning: ${warning}`),
66
+ ...result.items.map((item) => `${item.provider}:${item.provider_asset_id} ${item.asset_type} ${item.title} ${item.duration_seconds ?? "-"}s ${item.license_code}`),
67
+ ],
68
+ });
69
+ return true;
70
+ }
71
+ if (group === "stock" && action === "import") {
72
+ const result = await context.client.stockMedia.importAsset({
73
+ provider: helpers.parseRequiredStockProvider({
74
+ value: helpers.requireStringFlag({
75
+ flags,
76
+ name: "provider",
77
+ }),
78
+ }),
79
+ providerAssetId: helpers.requireStringFlag({
80
+ flags,
81
+ name: "provider-asset-id",
82
+ }),
83
+ assetType: helpers.parseStockAssetType({
84
+ value: helpers.requireStringFlag({
85
+ flags,
86
+ name: "asset-type",
87
+ }),
88
+ }),
89
+ variantId: helpers.parseNullableStringFlag({
90
+ flags,
91
+ name: "variant-id",
92
+ }),
93
+ folderId: helpers.parseFolderIdFlag({
94
+ flags,
95
+ name: "folder-id",
96
+ }),
97
+ audioType: helpers.parseStockAudioType({
98
+ value: helpers.getStringFlag({ flags, name: "audio-type" }),
99
+ }),
100
+ });
101
+ helpers.printResult({
102
+ json: context.json,
103
+ value: result,
104
+ human: [
105
+ `${result.imported ? "Imported" : "Reused"} ${result.asset.name} (${result.asset.id}).`,
106
+ ],
107
+ });
108
+ return true;
109
+ }
110
+ if (group === "library" && action === "search") {
111
+ const result = await context.client.library.search({
112
+ query: helpers.getStringFlag({ flags, name: "query" }),
113
+ assetType: helpers.parseNullableStockAssetType({
114
+ value: helpers.getStringFlag({
115
+ flags,
116
+ name: "asset-type",
117
+ }),
118
+ }),
119
+ audioType: helpers.parseGlobalBrollAudioType({
120
+ value: helpers.getStringFlag({ flags, name: "audio-type" }),
121
+ }),
122
+ limit: helpers.getNumberFlag({ flags, name: "limit" }),
123
+ offset: helpers.getNumberFlag({ flags, name: "offset" }),
124
+ });
125
+ helpers.printResult({
126
+ json: context.json,
127
+ value: result,
128
+ human: result.items.map((item) => `${item.id} ${item.asset_type} ${item.title} ${item.duration_seconds ?? "-"}s ${item.license_code}`),
129
+ });
130
+ return true;
131
+ }
132
+ if (group === "library" && action === "import") {
133
+ const result = await context.client.library.importAsset({
134
+ libraryAssetId: helpers.requireStringFlag({
135
+ flags,
136
+ name: "library-asset-id",
137
+ }),
138
+ folderId: helpers.parseFolderIdFlag({
139
+ flags,
140
+ name: "folder-id",
141
+ }),
142
+ });
143
+ helpers.printResult({
144
+ json: context.json,
145
+ value: result,
146
+ human: [
147
+ `${result.imported ? "Imported" : "Reused"} ${result.asset.name} (${result.asset.id}).`,
148
+ ],
149
+ });
150
+ return true;
151
+ }
152
+ return false;
153
+ },
154
+ buildDryRun: ({ context, spec }) => {
155
+ const [group, action] = context.args.command;
156
+ if (group !== "library" || action !== "import") {
157
+ return undefined;
158
+ }
159
+ const flags = context.args.flags;
160
+ const libraryAssetId = helpers.requireStringFlag({
161
+ flags,
162
+ name: "library-asset-id",
163
+ });
164
+ return helpers.dryRunRequest({
165
+ spec,
166
+ method: "POST",
167
+ path: `/library/broll/${encodeURIComponent(libraryAssetId)}/import`,
168
+ body: {
169
+ folder_id: helpers.parseFolderIdFlag({ flags, name: "folder-id" }),
170
+ },
171
+ });
172
+ },
173
+ };
174
+ }
175
+ //# sourceMappingURL=stock-library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stock-library.js","sourceRoot":"","sources":["../../src/commands/stock-library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type CommandSpec } from "../command-metadata.js";
2
+ import type { CommandOperation } from "./command-operation.js";
3
+ export declare const SYSTEM_COMMAND_SPECS: CommandSpec[];
4
+ export type SystemCommandHelpers = {
5
+ commandSpecs: CommandSpec[];
6
+ printResult: (params: {
7
+ json: boolean;
8
+ value: unknown;
9
+ human: string[];
10
+ fields?: string[];
11
+ }) => void;
12
+ };
13
+ export declare function createSystemCommandOperation({ helpers, }: {
14
+ helpers: SystemCommandHelpers;
15
+ }): CommandOperation;
16
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,wBAAwB,CAAC;AAOvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,oBAAoB,EAAE,WAAW,EAsD7C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,OAAO,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,EAC3C,OAAO,GACR,EAAE;IACD,OAAO,EAAE,oBAAoB,CAAC;CAC/B,GAAG,gBAAgB,CAWnB"}
@@ -0,0 +1,147 @@
1
+ import { buildAgentContext, buildAgentContextIndex, buildAgentContextLines, } from "../agent-context.js";
2
+ import { CliUsageError } from "../cli-errors.js";
3
+ import { CLI_VERSION } from "../cli-runtime.js";
4
+ import { commandSpec } from "../command-metadata.js";
5
+ import { buildDoctorLines, buildVersionLines, getUpdateStatus, isVersionLessThan, } from "../update-notifier.js";
6
+ export const SYSTEM_COMMAND_SPECS = [
7
+ commandSpec({
8
+ command: ["version"],
9
+ usage: "blitzreels version [--json]",
10
+ }),
11
+ commandSpec({
12
+ command: ["doctor"],
13
+ usage: "blitzreels doctor [--json]",
14
+ }),
15
+ commandSpec({
16
+ command: ["agent-context"],
17
+ usage: "blitzreels agent-context [--command 'projects list'|--full] [--json]",
18
+ flags: [
19
+ "command",
20
+ {
21
+ name: "full",
22
+ type: "boolean",
23
+ required: false,
24
+ default: false,
25
+ description: "Return the full command contract.",
26
+ hidden: false,
27
+ },
28
+ ],
29
+ description: "Print a machine-readable map of BlitzReels CLI commands.",
30
+ examples: [
31
+ "blitzreels agent-context --json",
32
+ "blitzreels agent-context --command 'media attach' --json",
33
+ "blitzreels agent-context --full --json",
34
+ ],
35
+ requiresAuth: false,
36
+ }),
37
+ commandSpec({
38
+ command: ["schema"],
39
+ usage: "blitzreels schema [--command 'projects list'|--full] [--json]",
40
+ flags: [
41
+ "command",
42
+ {
43
+ name: "full",
44
+ type: "boolean",
45
+ required: false,
46
+ default: false,
47
+ description: "Return the full command contract.",
48
+ hidden: false,
49
+ },
50
+ ],
51
+ description: "Alias for agent-context.",
52
+ examples: [
53
+ "blitzreels schema --json",
54
+ "blitzreels schema --command 'captions words style' --json",
55
+ "blitzreels schema --full --json",
56
+ ],
57
+ requiresAuth: false,
58
+ }),
59
+ ];
60
+ export function createSystemCommandOperation({ helpers, }) {
61
+ return {
62
+ name: "system",
63
+ matches: ({ command }) => command[0] === "version" ||
64
+ command[0] === "doctor" ||
65
+ command[0] === "agent-context" ||
66
+ command[0] === "schema",
67
+ handle: ({ context }) => handleSystemCommand({ context, helpers }),
68
+ buildDryRun: () => undefined,
69
+ };
70
+ }
71
+ async function handleSystemCommand({ context, helpers, }) {
72
+ const [group] = context.args.command;
73
+ if (group === "version") {
74
+ const update = await getUpdateStatus({
75
+ baseUrl: context.config.baseUrl,
76
+ cachePolicy: "refresh",
77
+ });
78
+ helpers.printResult({
79
+ json: context.json,
80
+ value: {
81
+ current: CLI_VERSION,
82
+ latest: update.manifest.latest,
83
+ update_available: update.updateAvailable,
84
+ upgrade: update.manifest.upgrade,
85
+ changelog_url: update.manifest.url,
86
+ },
87
+ human: buildVersionLines({ update }),
88
+ });
89
+ return true;
90
+ }
91
+ if (group === "doctor") {
92
+ const update = await getUpdateStatus({
93
+ baseUrl: context.config.baseUrl,
94
+ cachePolicy: "refresh",
95
+ });
96
+ helpers.printResult({
97
+ json: context.json,
98
+ value: {
99
+ cli: {
100
+ current: CLI_VERSION,
101
+ latest: update.manifest.latest,
102
+ update_available: update.updateAvailable,
103
+ supported: !isVersionLessThan({
104
+ left: CLI_VERSION,
105
+ right: update.manifest.minSupported,
106
+ }),
107
+ },
108
+ config: {
109
+ api_key: context.config.apiKey ? "configured" : "missing",
110
+ base_url: context.config.baseUrl ?? "https://www.blitzreels.com/api/v1",
111
+ key_storage: context.config.keyStorage ?? "none",
112
+ },
113
+ upgrade: update.manifest.upgrade,
114
+ },
115
+ human: buildDoctorLines({ context, update }),
116
+ });
117
+ return true;
118
+ }
119
+ if (group === "agent-context" || group === "schema") {
120
+ const commandFilter = context.invocation.flags.string({ name: "command" });
121
+ const full = context.invocation.flags.boolean({ name: "full" });
122
+ if (commandFilter !== undefined && full) {
123
+ throw new CliUsageError({
124
+ code: "invalid_flag_value",
125
+ message: "Use --command or --full, not both.",
126
+ usage: group === "schema"
127
+ ? "blitzreels schema [--command 'projects list'|--full] [--json]"
128
+ : "blitzreels agent-context [--command 'projects list'|--full] [--json]",
129
+ });
130
+ }
131
+ const result = commandFilter !== undefined || full
132
+ ? buildAgentContext({
133
+ commandFilter,
134
+ commandSpecs: helpers.commandSpecs,
135
+ surfaceName: group,
136
+ })
137
+ : buildAgentContextIndex({ commandSpecs: helpers.commandSpecs });
138
+ helpers.printResult({
139
+ json: context.json,
140
+ value: result,
141
+ human: buildAgentContextLines({ value: result }),
142
+ });
143
+ return true;
144
+ }
145
+ return false;
146
+ }
147
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CliContext, Flags } from "../cli-types.js";
2
+ export declare function hasTextStyleFlags({ flags }: {
3
+ flags: Flags;
4
+ }): boolean;
5
+ export declare function buildTextOverlaySpec({ text, name, durationSeconds, flags, }: {
6
+ text: string;
7
+ name: string | undefined;
8
+ durationSeconds: number;
9
+ flags: Flags;
10
+ }): Record<string, unknown>;
11
+ export declare function buildTitleCardSpec({ text, name, durationSeconds, flags, }: {
12
+ text: string;
13
+ name: string | undefined;
14
+ durationSeconds: number;
15
+ flags: Flags;
16
+ }): Record<string, unknown>;
17
+ export declare function buildUpdatedTextSpec({ context, projectId, contentItemId, nextText, flags, }: {
18
+ context: CliContext;
19
+ projectId: string;
20
+ contentItemId: string;
21
+ nextText: string | undefined;
22
+ flags: Flags;
23
+ }): Promise<Record<string, unknown>>;
24
+ //# sourceMappingURL=text-overlay-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-overlay-spec.d.ts","sourceRoot":"","sources":["../../src/commands/text-overlay-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAwBzD,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAEtE;AAED,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,KAAK,GACN,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;CACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiD1B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,KAAK,GACN,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC;CACd,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6D1B;AAED,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,SAAS,EACT,aAAa,EACb,QAAQ,EACR,KAAK,GACN,EAAE;IACD,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;CACd,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAanC"}
@@ -0,0 +1,228 @@
1
+ const TEXT_STYLE_FLAG_NAMES = [
2
+ "font-family",
3
+ "font-size",
4
+ "font-weight",
5
+ "color",
6
+ "background-color",
7
+ "padding-x",
8
+ "padding-y",
9
+ "border-radius",
10
+ "top",
11
+ "left",
12
+ "text-align",
13
+ "text-shadow",
14
+ "no-background",
15
+ ];
16
+ export function hasTextStyleFlags({ flags }) {
17
+ return TEXT_STYLE_FLAG_NAMES.some((name) => name in flags);
18
+ }
19
+ export function buildTextOverlaySpec({ text, name, durationSeconds, flags, }) {
20
+ const durationInFrames = Math.max(1, Math.round(durationSeconds * 30));
21
+ const top = getStringFlag({ flags, name: "top" }) ?? "18%";
22
+ const left = getStringFlag({ flags, name: "left" }) ?? "50%";
23
+ const textStyle = buildTextStyle({ flags });
24
+ return {
25
+ id: `cli-${Date.now()}`,
26
+ fps: 30,
27
+ mode: "elements",
28
+ name: name ?? text,
29
+ fonts: [String(textStyle.fontFamily ?? "Inter")],
30
+ width: 1080,
31
+ height: 1920,
32
+ defaults: {
33
+ color: textStyle.color,
34
+ fontSize: textStyle.fontSize,
35
+ fontFamily: textStyle.fontFamily,
36
+ },
37
+ elements: [
38
+ {
39
+ id: `group-${Date.now()}`,
40
+ type: "group",
41
+ style: {
42
+ top,
43
+ left,
44
+ display: "inline-flex",
45
+ opacity: 1,
46
+ position: "absolute",
47
+ transform: "translate(-50%, -50%)",
48
+ alignItems: "center",
49
+ flexDirection: "column",
50
+ },
51
+ children: [
52
+ {
53
+ id: `text-${Date.now()}`,
54
+ type: "text",
55
+ style: textStyle,
56
+ layout: "none",
57
+ content: text,
58
+ },
59
+ ],
60
+ },
61
+ ],
62
+ metadata: {
63
+ kind: "overlay",
64
+ createdBy: "blitzreels-cli",
65
+ },
66
+ durationInFrames,
67
+ };
68
+ }
69
+ export function buildTitleCardSpec({ text, name, durationSeconds, flags, }) {
70
+ const durationInFrames = Math.max(1, Math.round(durationSeconds * 30));
71
+ const textStyle = {
72
+ ...buildTextStyle({ flags }),
73
+ color: getStringFlag({ flags, name: "color" }) ?? "#000000",
74
+ backgroundColor: getBooleanFlag({ flags, name: "no-background" }) === true
75
+ ? "transparent"
76
+ : (getStringFlag({ flags, name: "background-color" }) ?? "#FFFFFF"),
77
+ fontSize: getNumberFlag({ flags, name: "font-size" }) ?? 56,
78
+ fontWeight: getStringFlag({ flags, name: "font-weight" }) ?? "800",
79
+ padding: `${getNumberFlag({ flags, name: "padding-y" }) ?? 20}px ${getNumberFlag({ flags, name: "padding-x" }) ?? 34}px`,
80
+ borderRadius: getNumberFlag({ flags, name: "border-radius" }) ?? 18,
81
+ textShadow: getStringFlag({ flags, name: "text-shadow" }) ?? "none",
82
+ };
83
+ return {
84
+ id: `cli-title-${Date.now()}`,
85
+ fps: 30,
86
+ mode: "elements",
87
+ name: name ?? text,
88
+ fonts: [String(textStyle.fontFamily ?? "Inter")],
89
+ width: 1080,
90
+ height: 1920,
91
+ defaults: {
92
+ color: textStyle.color,
93
+ fontSize: textStyle.fontSize,
94
+ fontFamily: textStyle.fontFamily,
95
+ },
96
+ elements: [
97
+ {
98
+ id: `title-group-${Date.now()}`,
99
+ type: "group",
100
+ style: {
101
+ top: getStringFlag({ flags, name: "top" }) ?? "12%",
102
+ left: getStringFlag({ flags, name: "left" }) ?? "50%",
103
+ display: "inline-flex",
104
+ opacity: 1,
105
+ position: "absolute",
106
+ transform: "translate(-50%, -50%)",
107
+ alignItems: "center",
108
+ flexDirection: "column",
109
+ },
110
+ children: [
111
+ {
112
+ id: `title-text-${Date.now()}`,
113
+ type: "text",
114
+ style: textStyle,
115
+ layout: "none",
116
+ content: text,
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ metadata: {
122
+ kind: "title_card",
123
+ createdBy: "blitzreels-cli",
124
+ },
125
+ durationInFrames,
126
+ };
127
+ }
128
+ export async function buildUpdatedTextSpec({ context, projectId, contentItemId, nextText, flags, }) {
129
+ const items = await context.client.text.list({ projectId });
130
+ const item = items.data.find((candidate) => candidate.content_item_id === contentItemId);
131
+ if (!item?.spec) {
132
+ throw new Error(`Content item ${contentItemId} has no editable text spec.`);
133
+ }
134
+ return applyTextStyleToSpec({
135
+ spec: item.spec,
136
+ text: nextText,
137
+ flags,
138
+ });
139
+ }
140
+ function buildTextStyle({ flags }) {
141
+ const noBackground = getBooleanFlag({ flags, name: "no-background" });
142
+ const textShadow = getStringFlag({ flags, name: "text-shadow" });
143
+ const backgroundColor = noBackground
144
+ ? "transparent"
145
+ : (getStringFlag({ flags, name: "background-color" }) ??
146
+ "rgba(17, 24, 39, 0.86)");
147
+ return {
148
+ color: getStringFlag({ flags, name: "color" }) ?? "#FFFFFF",
149
+ padding: `${getNumberFlag({ flags, name: "padding-y" }) ?? 12}px ${getNumberFlag({ flags, name: "padding-x" }) ?? 24}px`,
150
+ fontSize: getNumberFlag({ flags, name: "font-size" }) ?? 48,
151
+ textAlign: parseTextAlign({
152
+ value: getStringFlag({ flags, name: "text-align" }) ?? "center",
153
+ }),
154
+ fontFamily: getStringFlag({ flags, name: "font-family" }) ?? "Inter",
155
+ fontWeight: getStringFlag({ flags, name: "font-weight" }) ?? "700",
156
+ lineHeight: 1.12,
157
+ textShadow: textShadow ?? (noBackground ? "0 8px 22px rgba(0, 0, 0, 0.52)" : "none"),
158
+ borderRadius: getNumberFlag({ flags, name: "border-radius" }) ?? 18,
159
+ letterSpacing: 0,
160
+ backgroundColor,
161
+ bubbleJoinStyle: "reverse-radius",
162
+ boxDecorationBreak: "clone",
163
+ };
164
+ }
165
+ function applyTextStyleToSpec({ spec, text, flags, }) {
166
+ const cloned = JSON.parse(JSON.stringify(spec));
167
+ const elements = Array.isArray(cloned.elements) ? cloned.elements : [];
168
+ const firstGroup = elements.find((element) => Boolean(element) &&
169
+ typeof element === "object" &&
170
+ element.type === "group");
171
+ const children = Array.isArray(firstGroup?.children)
172
+ ? firstGroup.children
173
+ : [];
174
+ const firstText = children.find((child) => Boolean(child) &&
175
+ typeof child === "object" &&
176
+ child.type === "text");
177
+ if (!firstText) {
178
+ throw new Error("Text overlay spec has no editable text element.");
179
+ }
180
+ firstText.style = {
181
+ ...(firstText.style ?? {}),
182
+ ...buildTextStyle({ flags }),
183
+ };
184
+ if (text !== undefined) {
185
+ firstText.content = text;
186
+ }
187
+ if (firstGroup) {
188
+ const style = (firstGroup.style ??
189
+ {});
190
+ firstGroup.style = {
191
+ ...style,
192
+ top: getStringFlag({ flags, name: "top" }) ?? style.top,
193
+ left: getStringFlag({ flags, name: "left" }) ?? style.left,
194
+ };
195
+ }
196
+ return cloned;
197
+ }
198
+ function getStringFlag({ flags, name, }) {
199
+ const value = flags[name];
200
+ if (value === undefined || value === true) {
201
+ return undefined;
202
+ }
203
+ return String(value);
204
+ }
205
+ function getBooleanFlag({ flags, name, }) {
206
+ return flags[name] === true || flags[name] === "true";
207
+ }
208
+ function getNumberFlag({ flags, name, }) {
209
+ const value = getStringFlag({ flags, name });
210
+ if (value === undefined) {
211
+ return undefined;
212
+ }
213
+ const parsed = Number(value);
214
+ if (!Number.isFinite(parsed)) {
215
+ throw new Error(`--${name} must be a number.`);
216
+ }
217
+ return parsed;
218
+ }
219
+ function parseTextAlign({ value, }) {
220
+ if (value === "left" ||
221
+ value === "center" ||
222
+ value === "right" ||
223
+ value === "justify") {
224
+ return value;
225
+ }
226
+ throw new Error("--text-align must be left, center, right, or justify.");
227
+ }
228
+ //# sourceMappingURL=text-overlay-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-overlay-spec.js","sourceRoot":"","sources":["../../src/commands/text-overlay-spec.ts"],"names":[],"mappings":"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"}