blitzreels 0.1.4 → 0.1.5

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 (196) hide show
  1. package/README.md +15 -18
  2. package/dist/agent-context.d.ts +43 -0
  3. package/dist/agent-context.d.ts.map +1 -0
  4. package/dist/agent-context.js +170 -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 +29 -0
  11. package/dist/cli-errors.d.ts.map +1 -0
  12. package/dist/cli-errors.js +25 -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 +23 -0
  23. package/dist/cli-presenter.d.ts.map +1 -0
  24. package/dist/cli-presenter.js +117 -0
  25. package/dist/cli-presenter.js.map +1 -0
  26. package/dist/cli-runtime.d.ts +1 -1
  27. package/dist/cli-runtime.js +1 -1
  28. package/dist/cli-timing.d.ts +4 -0
  29. package/dist/cli-timing.d.ts.map +1 -0
  30. package/dist/cli-timing.js +6 -0
  31. package/dist/cli-timing.js.map +1 -0
  32. package/dist/cli-types.d.ts +51 -0
  33. package/dist/cli-types.d.ts.map +1 -1
  34. package/dist/cli-value-parsers.d.ts +76 -0
  35. package/dist/cli-value-parsers.d.ts.map +1 -0
  36. package/dist/cli-value-parsers.js +266 -0
  37. package/dist/cli-value-parsers.js.map +1 -0
  38. package/dist/command-metadata.d.ts +2 -2
  39. package/dist/command-metadata.d.ts.map +1 -1
  40. package/dist/command-metadata.js +31 -5
  41. package/dist/command-metadata.js.map +1 -1
  42. package/dist/command-registry.d.ts +1 -1
  43. package/dist/command-registry.d.ts.map +1 -1
  44. package/dist/command-registry.js +36 -853
  45. package/dist/command-registry.js.map +1 -1
  46. package/dist/commands/ai-edit.d.ts +45 -0
  47. package/dist/commands/ai-edit.d.ts.map +1 -0
  48. package/dist/commands/ai-edit.js +368 -0
  49. package/dist/commands/ai-edit.js.map +1 -0
  50. package/dist/commands/api.d.ts +20 -0
  51. package/dist/commands/api.d.ts.map +1 -0
  52. package/dist/commands/api.js +56 -0
  53. package/dist/commands/api.js.map +1 -0
  54. package/dist/commands/audio.d.ts +65 -0
  55. package/dist/commands/audio.d.ts.map +1 -0
  56. package/dist/commands/audio.js +261 -0
  57. package/dist/commands/audio.js.map +1 -0
  58. package/dist/commands/auth-runtime.d.ts +24 -0
  59. package/dist/commands/auth-runtime.d.ts.map +1 -0
  60. package/dist/commands/auth-runtime.js +169 -0
  61. package/dist/commands/auth-runtime.js.map +1 -0
  62. package/dist/commands/auth.d.ts +26 -0
  63. package/dist/commands/auth.d.ts.map +1 -0
  64. package/dist/commands/auth.js +59 -0
  65. package/dist/commands/auth.js.map +1 -0
  66. package/dist/commands/caption-command-types.d.ts +66 -0
  67. package/dist/commands/caption-command-types.d.ts.map +1 -0
  68. package/dist/commands/caption-command-types.js +2 -0
  69. package/dist/commands/caption-command-types.js.map +1 -0
  70. package/dist/commands/caption-dry-run.d.ts +66 -0
  71. package/dist/commands/caption-dry-run.d.ts.map +1 -0
  72. package/dist/commands/caption-dry-run.js +205 -0
  73. package/dist/commands/caption-dry-run.js.map +1 -0
  74. package/dist/commands/caption-overrides.d.ts +43 -0
  75. package/dist/commands/caption-overrides.d.ts.map +1 -0
  76. package/dist/commands/caption-overrides.js +245 -0
  77. package/dist/commands/caption-overrides.js.map +1 -0
  78. package/dist/commands/caption-selection.d.ts +71 -0
  79. package/dist/commands/caption-selection.d.ts.map +1 -0
  80. package/dist/commands/caption-selection.js +89 -0
  81. package/dist/commands/caption-selection.js.map +1 -0
  82. package/dist/commands/caption-style-commands.d.ts +3 -0
  83. package/dist/commands/caption-style-commands.d.ts.map +1 -0
  84. package/dist/commands/caption-style-commands.js +240 -0
  85. package/dist/commands/caption-style-commands.js.map +1 -0
  86. package/dist/commands/caption-style-flags.d.ts +30 -0
  87. package/dist/commands/caption-style-flags.d.ts.map +1 -0
  88. package/dist/commands/caption-style-flags.js +199 -0
  89. package/dist/commands/caption-style-flags.js.map +1 -0
  90. package/dist/commands/caption-text-updates.d.ts +21 -0
  91. package/dist/commands/caption-text-updates.d.ts.map +1 -0
  92. package/dist/commands/caption-text-updates.js +23 -0
  93. package/dist/commands/caption-text-updates.js.map +1 -0
  94. package/dist/commands/captions-specs.d.ts +3 -0
  95. package/dist/commands/captions-specs.d.ts.map +1 -0
  96. package/dist/commands/captions-specs.js +219 -0
  97. package/dist/commands/captions-specs.js.map +1 -0
  98. package/dist/commands/captions.d.ts +7 -0
  99. package/dist/commands/captions.d.ts.map +1 -0
  100. package/dist/commands/captions.js +181 -0
  101. package/dist/commands/captions.js.map +1 -0
  102. package/dist/commands/clip-runtime.d.ts +70 -0
  103. package/dist/commands/clip-runtime.d.ts.map +1 -0
  104. package/dist/commands/clip-runtime.js +269 -0
  105. package/dist/commands/clip-runtime.js.map +1 -0
  106. package/dist/commands/clips.d.ts +59 -0
  107. package/dist/commands/clips.d.ts.map +1 -0
  108. package/dist/commands/clips.js +242 -0
  109. package/dist/commands/clips.js.map +1 -0
  110. package/dist/commands/command-operation.d.ts +26 -0
  111. package/dist/commands/command-operation.d.ts.map +1 -0
  112. package/dist/commands/command-operation.js +18 -0
  113. package/dist/commands/command-operation.js.map +1 -0
  114. package/dist/commands/editing-workflow-runtime.d.ts +42 -0
  115. package/dist/commands/editing-workflow-runtime.d.ts.map +1 -0
  116. package/dist/commands/editing-workflow-runtime.js +128 -0
  117. package/dist/commands/editing-workflow-runtime.js.map +1 -0
  118. package/dist/commands/editing-workflows.d.ts +70 -0
  119. package/dist/commands/editing-workflows.d.ts.map +1 -0
  120. package/dist/commands/editing-workflows.js +252 -0
  121. package/dist/commands/editing-workflows.js.map +1 -0
  122. package/dist/commands/effects-runtime.d.ts +64 -0
  123. package/dist/commands/effects-runtime.d.ts.map +1 -0
  124. package/dist/commands/effects-runtime.js +100 -0
  125. package/dist/commands/effects-runtime.js.map +1 -0
  126. package/dist/commands/effects.d.ts +69 -0
  127. package/dist/commands/effects.d.ts.map +1 -0
  128. package/dist/commands/effects.js +275 -0
  129. package/dist/commands/effects.js.map +1 -0
  130. package/dist/commands/exports.d.ts +18 -0
  131. package/dist/commands/exports.d.ts.map +1 -1
  132. package/dist/commands/exports.js +55 -0
  133. package/dist/commands/exports.js.map +1 -1
  134. package/dist/commands/media-assets.d.ts +100 -0
  135. package/dist/commands/media-assets.d.ts.map +1 -0
  136. package/dist/commands/media-assets.js +572 -0
  137. package/dist/commands/media-assets.js.map +1 -0
  138. package/dist/commands/media-overlays.d.ts +52 -0
  139. package/dist/commands/media-overlays.d.ts.map +1 -0
  140. package/dist/commands/media-overlays.js +270 -0
  141. package/dist/commands/media-overlays.js.map +1 -0
  142. package/dist/commands/media-runtime.d.ts +61 -0
  143. package/dist/commands/media-runtime.d.ts.map +1 -0
  144. package/dist/commands/media-runtime.js +221 -0
  145. package/dist/commands/media-runtime.js.map +1 -0
  146. package/dist/commands/project-read.d.ts +40 -0
  147. package/dist/commands/project-read.d.ts.map +1 -0
  148. package/dist/commands/project-read.js +155 -0
  149. package/dist/commands/project-read.js.map +1 -0
  150. package/dist/commands/projects.d.ts +16 -0
  151. package/dist/commands/projects.d.ts.map +1 -1
  152. package/dist/commands/projects.js +118 -1
  153. package/dist/commands/projects.js.map +1 -1
  154. package/dist/commands/stock-library.d.ts +72 -0
  155. package/dist/commands/stock-library.d.ts.map +1 -0
  156. package/dist/commands/stock-library.js +175 -0
  157. package/dist/commands/stock-library.js.map +1 -0
  158. package/dist/commands/system.d.ts +16 -0
  159. package/dist/commands/system.d.ts.map +1 -0
  160. package/dist/commands/system.js +110 -0
  161. package/dist/commands/system.js.map +1 -0
  162. package/dist/commands/text-overlay-spec.d.ts +18 -0
  163. package/dist/commands/text-overlay-spec.d.ts.map +1 -0
  164. package/dist/commands/text-overlay-spec.js +169 -0
  165. package/dist/commands/text-overlay-spec.js.map +1 -0
  166. package/dist/commands/text-overlays.d.ts +61 -0
  167. package/dist/commands/text-overlays.d.ts.map +1 -0
  168. package/dist/commands/text-overlays.js +199 -0
  169. package/dist/commands/text-overlays.js.map +1 -0
  170. package/dist/commands/timeline-runtime.d.ts +102 -0
  171. package/dist/commands/timeline-runtime.d.ts.map +1 -0
  172. package/dist/commands/timeline-runtime.js +415 -0
  173. package/dist/commands/timeline-runtime.js.map +1 -0
  174. package/dist/commands/timeline.d.ts +116 -0
  175. package/dist/commands/timeline.d.ts.map +1 -0
  176. package/dist/commands/timeline.js +549 -0
  177. package/dist/commands/timeline.js.map +1 -0
  178. package/dist/commands/workspace-defaults.d.ts +12 -0
  179. package/dist/commands/workspace-defaults.d.ts.map +1 -0
  180. package/dist/commands/workspace-defaults.js +115 -0
  181. package/dist/commands/workspace-defaults.js.map +1 -0
  182. package/dist/commands/workspace.d.ts +50 -0
  183. package/dist/commands/workspace.d.ts.map +1 -0
  184. package/dist/commands/workspace.js +116 -0
  185. package/dist/commands/workspace.js.map +1 -0
  186. package/dist/index.js +454 -5053
  187. package/dist/index.js.map +1 -1
  188. package/dist/preview-first-edit.d.ts +6 -0
  189. package/dist/preview-first-edit.d.ts.map +1 -1
  190. package/dist/preview-first-edit.js +14 -2
  191. package/dist/preview-first-edit.js.map +1 -1
  192. package/dist/update-notifier.d.ts +42 -0
  193. package/dist/update-notifier.d.ts.map +1 -0
  194. package/dist/update-notifier.js +265 -0
  195. package/dist/update-notifier.js.map +1 -0
  196. package/package.json +2 -2
package/README.md CHANGED
@@ -16,7 +16,6 @@ After the first real publish:
16
16
  ```bash
17
17
  npx blitzreels version
18
18
  npx blitzreels doctor
19
- npx blitzreels prime
20
19
  npx blitzreels agent-context --json
21
20
  npx blitzreels auth login
22
21
  ```
@@ -35,8 +34,9 @@ blitzreels auth set-key --api-key br_live_...
35
34
  blitzreels auth whoami
36
35
  ```
37
36
 
38
- `auth login` opens BlitzReels in your browser, asks you to approve a one-time
39
- CLI code, then stores the generated API key in macOS Keychain when available or
37
+ `auth login` opens BlitzReels in your browser, shows the one-time CLI code, and
38
+ waits for you to click `Connect CLI`. After confirmation, it stores the
39
+ generated API key in macOS Keychain when available or
40
40
  `~/.blitzreels/config.json` as a fallback. Use `--no-browser` on remote shells
41
41
  and open the printed URL manually.
42
42
 
@@ -103,13 +103,15 @@ blitzreels text update --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID
103
103
  blitzreels text remove --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID
104
104
 
105
105
  blitzreels audio search --query "ambient riser" --license cc0 --json
106
- blitzreels audio import --provider openverse --external-id AUDIO_ID --project-id PROJECT_ID --at 0 --duration 12 --volume 0.5
107
- blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.6
106
+ blitzreels audio import --provider openverse --external-id AUDIO_ID --project-id PROJECT_ID --at 0 --duration 12 --volume 0.03
107
+ blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.03
108
108
 
109
109
  blitzreels captions words list --project-id PROJECT_ID --match-text "Supabase" --json
110
110
  blitzreels captions words text --project-id PROJECT_ID --word-id WORD_ID --text "Supabase"
111
111
  blitzreels captions words batch-text --project-id PROJECT_ID --updates-json '[{"word_id":"WORD_ID","new_text":"Supabase"}]'
112
+ blitzreels captions words batch-text --project-id PROJECT_ID --updates-file caption-updates.json
112
113
  blitzreels captions words style --project-id PROJECT_ID --word-id WORD_ID --font-family Pacifico --color "#17FFA6" --scale 1.45
114
+ blitzreels captions words style --project-id PROJECT_ID --all --style-file caption-word-style.json
113
115
  blitzreels captions words emphasis --project-id PROJECT_ID --match-text "MCP" --emphasis true
114
116
  blitzreels captions words delete --project-id PROJECT_ID --word-id WORD_ID
115
117
  blitzreels captions words merge --project-id PROJECT_ID --word-ids WORD_ID_1,WORD_ID_2 --text "serveurs MCP"
@@ -121,11 +123,11 @@ blitzreels silence apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITE
121
123
  blitzreels mistakes plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --json
122
124
  blitzreels mistakes apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --confirm-preview
123
125
 
124
- blitzreels captions themes list --json
125
- blitzreels captions theme set --project-id PROJECT_ID --theme-id THEME_ID
126
- blitzreels captions theme set-default --theme-id THEME_ID
126
+ blitzreels captions looks list --json
127
+ blitzreels captions look set --project-id PROJECT_ID --look-id editor-premium-lime
128
+ blitzreels captions style update --project-id PROJECT_ID --look-id paper-karaoke --text-stroke-enabled false
127
129
 
128
- blitzreels exports start --project-id PROJECT_ID
130
+ blitzreels exports start --project-id PROJECT_ID --cover-frame-seconds 1
129
131
  blitzreels exports wait --export-id EXPORT_ID
130
132
  blitzreels exports download --export-id EXPORT_ID --output ./short.mp4
131
133
 
@@ -135,28 +137,23 @@ blitzreels api spec
135
137
 
136
138
  Use `--json` for script and AI-agent workflows.
137
139
  Use `--fields id,name` with `--json` to trim large responses.
140
+ Export status responses include `thumbnail_url`, `thumbnail.frame_seconds`, `thumbnail.rationale`, and first-pass `platform_metadata` suggestions for YouTube, TikTok, and Instagram.
138
141
 
139
- ## Agent Workflows
142
+ ## Machine-Readable Contract
140
143
 
141
144
  ```bash
142
- blitzreels prime
143
- blitzreels prime --command "media attach"
144
145
  blitzreels agent-context --json
145
146
  blitzreels agent-context --command "media attach" --json
146
147
  blitzreels schema --command "captions words style" --json
147
148
  blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 6 --dry-run
148
149
  ```
149
150
 
150
- `prime` prints plain-language instructions that coding agents should read before
151
- editing BlitzReels projects. It is inspired by agent-first CLIs like Beans'
152
- `prime` command. `llms` is an alias.
153
-
154
151
  `agent-context` is the machine-readable command contract for agents. It includes
155
152
  command metadata, typed flags, examples, read/write markers, destructive markers,
156
153
  and known error categories.
157
154
 
158
- When the CLI detects an agent environment, command help also points agents to
159
- `prime` and `agent-context` for the focused command.
155
+ Agent workflow strategy lives in BlitzReels skills and docs, not in CLI command
156
+ metadata or normal command output.
160
157
 
161
158
  `--dry-run` is available on mutating commands and prints the API request that
162
159
  would be made without making the write request. Destructive dry-runs still require
@@ -0,0 +1,43 @@
1
+ import { type CliExitCode } from "./cli-errors.js";
2
+ import type { CommandSpec, FlagSpec } from "./command-metadata.js";
3
+ export type AgentContext = {
4
+ schema_version: "1";
5
+ cli: {
6
+ name: "blitzreels";
7
+ version: string;
8
+ default_base_url: string;
9
+ exit_codes: Array<{
10
+ code: CliExitCode;
11
+ meaning: string;
12
+ retryable: boolean;
13
+ }>;
14
+ };
15
+ commands: Array<{
16
+ operation_id: string;
17
+ command: string;
18
+ category: string;
19
+ description: string;
20
+ usage: string;
21
+ mutates: boolean;
22
+ destructive: boolean;
23
+ requires_auth: boolean;
24
+ dry_run_supported: boolean;
25
+ flags: readonly FlagSpec[];
26
+ examples: readonly string[];
27
+ errors: Array<{
28
+ code: string;
29
+ description: string;
30
+ exit_code: CliExitCode;
31
+ retryable: boolean;
32
+ }>;
33
+ }>;
34
+ };
35
+ export declare function buildAgentContext({ commandFilter, commandSpecs, surfaceName, }: {
36
+ commandFilter: string | undefined;
37
+ commandSpecs: CommandSpec[];
38
+ surfaceName?: string;
39
+ }): AgentContext;
40
+ export declare function buildAgentContextLines({ value, }: {
41
+ value: AgentContext;
42
+ }): string[];
43
+ //# sourceMappingURL=agent-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-context.d.ts","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQnE,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,EAAE,GAAG,CAAC;IACpB,GAAG,EAAE;QACH,IAAI,EAAE,YAAY,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,WAAW,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;QAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,WAAW,CAAC;YACvB,SAAS,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,YAAY,EACZ,WAA6B,GAC9B,EAAE;IACD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,YAAY,CA0Cf;AAED,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,GACN,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;CACrB,GAAG,MAAM,EAAE,CAKX"}
@@ -0,0 +1,170 @@
1
+ import { CliUsageError } from "./cli-errors.js";
2
+ import { CLI_VERSION, DEFAULT_BASE_URL } from "./cli-runtime.js";
3
+ import { commandLabel, commandsEqual, flagsForCommand, suggestCommandSpecs, } from "./command-metadata.js";
4
+ export function buildAgentContext({ commandFilter, commandSpecs, surfaceName = "agent-context", }) {
5
+ const commands = commandFilter
6
+ ? commandSpecs.filter((spec) => commandsEqual(spec.command, splitCommandFilter({ value: commandFilter })))
7
+ : commandSpecs;
8
+ if (commandFilter && commands.length === 0) {
9
+ throw new CliUsageError({
10
+ code: "unknown_command",
11
+ message: `Unknown command for ${surfaceName}: ${commandFilter}`,
12
+ suggestions: suggestCommandSpecs({
13
+ command: splitCommandFilter({ value: commandFilter }),
14
+ specs: commandSpecs,
15
+ }).map((spec) => commandLabel({ command: spec.command })),
16
+ });
17
+ }
18
+ return {
19
+ schema_version: "1",
20
+ cli: {
21
+ name: "blitzreels",
22
+ version: CLI_VERSION,
23
+ default_base_url: DEFAULT_BASE_URL,
24
+ exit_codes: buildCliExitCodeContract(),
25
+ },
26
+ commands: commands.map((spec) => ({
27
+ operation_id: operationIdForCommand({ command: spec.command }),
28
+ command: commandLabel({ command: spec.command }),
29
+ category: spec.command[0] ?? "unknown",
30
+ description: spec.description,
31
+ usage: spec.usage,
32
+ mutates: spec.mutates,
33
+ destructive: spec.destructive,
34
+ requires_auth: spec.requiresAuth,
35
+ dry_run_supported: spec.dryRunSupported,
36
+ flags: flagsForCommand({ spec }),
37
+ examples: spec.examples,
38
+ errors: buildCommandErrors({ spec }),
39
+ })),
40
+ };
41
+ }
42
+ export function buildAgentContextLines({ value, }) {
43
+ return value.commands.map((command) => `${command.command} ${command.mutates ? "write" : "read"}${command.destructive ? " destructive" : ""}${command.dry_run_supported ? " dry-run" : ""} - ${command.description}`);
44
+ }
45
+ function splitCommandFilter({ value }) {
46
+ return value
47
+ .trim()
48
+ .split(/\s+/)
49
+ .filter((part) => part.length > 0);
50
+ }
51
+ function buildCommandErrors({ spec }) {
52
+ const errors = [
53
+ {
54
+ code: "unknown_command",
55
+ description: "Command is not registered.",
56
+ exit_code: 2,
57
+ retryable: false,
58
+ },
59
+ {
60
+ code: "unknown_flag",
61
+ description: "Flag is not accepted by command.",
62
+ exit_code: 2,
63
+ retryable: false,
64
+ },
65
+ {
66
+ code: "missing_required_flag",
67
+ description: "A required flag was not provided.",
68
+ exit_code: 2,
69
+ retryable: false,
70
+ },
71
+ {
72
+ code: "invalid_flag_value",
73
+ description: "A flag value could not be parsed.",
74
+ exit_code: 2,
75
+ retryable: false,
76
+ },
77
+ {
78
+ code: "cli_error",
79
+ description: "Input or local execution failed.",
80
+ exit_code: 1,
81
+ retryable: false,
82
+ },
83
+ ];
84
+ if (spec.requiresAuth) {
85
+ errors.push({
86
+ code: "api_error",
87
+ description: "BlitzReels API returned a non-2xx response.",
88
+ exit_code: 1,
89
+ retryable: false,
90
+ });
91
+ errors.push({
92
+ code: "auth_error",
93
+ description: "Authentication or permission failed.",
94
+ exit_code: 3,
95
+ retryable: false,
96
+ });
97
+ errors.push({
98
+ code: "not_found",
99
+ description: "Requested BlitzReels resource was not found.",
100
+ exit_code: 4,
101
+ retryable: false,
102
+ });
103
+ errors.push({
104
+ code: "conflict",
105
+ description: "Requested operation conflicted with current project state.",
106
+ exit_code: 5,
107
+ retryable: false,
108
+ });
109
+ errors.push({
110
+ code: "rate_limited",
111
+ description: "Request was rate limited.",
112
+ exit_code: 6,
113
+ retryable: true,
114
+ });
115
+ errors.push({
116
+ code: "server_error",
117
+ description: "BlitzReels API returned a transient server error.",
118
+ exit_code: 7,
119
+ retryable: true,
120
+ });
121
+ }
122
+ if (spec.mutates && !spec.dryRunSupported) {
123
+ errors.push({
124
+ code: "unsupported_dry_run",
125
+ description: "--dry-run was used on a command that cannot preview.",
126
+ exit_code: 2,
127
+ retryable: false,
128
+ });
129
+ }
130
+ if (spec.destructive) {
131
+ errors.push({
132
+ code: "missing_confirmation",
133
+ description: "Required destructive confirmation flag was not provided.",
134
+ exit_code: 2,
135
+ retryable: false,
136
+ });
137
+ }
138
+ return errors;
139
+ }
140
+ function operationIdForCommand({ command }) {
141
+ const [first = "unknown", ...rest] = command;
142
+ return [
143
+ first,
144
+ ...rest.map((part) => part.replace(/-([a-z0-9])/g, (_match, value) => value.toUpperCase())),
145
+ ].join(".");
146
+ }
147
+ function buildCliExitCodeContract() {
148
+ return [
149
+ { code: 1, meaning: "Local or generic API failure.", retryable: false },
150
+ {
151
+ code: 2,
152
+ meaning: "Usage error: command, flag, or input is invalid.",
153
+ retryable: false,
154
+ },
155
+ {
156
+ code: 3,
157
+ meaning: "Authentication or permission failure.",
158
+ retryable: false,
159
+ },
160
+ { code: 4, meaning: "Requested resource was not found.", retryable: false },
161
+ {
162
+ code: 5,
163
+ meaning: "Conflict with current server state.",
164
+ retryable: false,
165
+ },
166
+ { code: 6, meaning: "Rate limited; retry after backoff.", retryable: true },
167
+ { code: 7, meaning: "Transient server/provider failure.", retryable: true },
168
+ ];
169
+ }
170
+ //# sourceMappingURL=agent-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-context.js","sourceRoot":"","sources":["../src/agent-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { CliUsageError } from "./cli-errors.js";
2
+ import type { ParsedArgs } from "./cli-types.js";
3
+ import { type CommandSpec } from "./command-metadata.js";
4
+ export declare function parseArgs({ argv }: {
5
+ argv: string[];
6
+ }): ParsedArgs;
7
+ export declare function validateParsedArgs({ parsed }: {
8
+ parsed: ParsedArgs;
9
+ }): void;
10
+ export declare function validateSafeInputs({ parsed }: {
11
+ parsed: ParsedArgs;
12
+ }): void;
13
+ export declare function findCommandSpec({ command, }: {
14
+ command: string[];
15
+ }): CommandSpec | undefined;
16
+ export declare function findGroupCommandSpecs({ command, }: {
17
+ command: string[];
18
+ }): CommandSpec[];
19
+ export declare function printCommandOrGroupHelpOrThrow({ command, }: {
20
+ command: string[];
21
+ }): void;
22
+ export declare function printHelp(): void;
23
+ export declare function buildUnknownCommandError({ command, }: {
24
+ command: string[];
25
+ }): CliUsageError;
26
+ export declare function usageForCurrentCommand(): string | undefined;
27
+ //# sourceMappingURL=cli-command-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-routing.d.ts","sourceRoot":"","sources":["../src/cli-command-routing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,KAAK,WAAW,EAOjB,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,UAAU,CAiClE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAwB3E;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAgB3E;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,WAAW,GAAG,SAAS,CAE1B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,WAAW,EAAE,CAOhB;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,IAAI,CAYP;AAED,wBAAgB,SAAS,IAAI,IAAI,CAWhC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,aAAa,CAQhB;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAG3D"}
@@ -0,0 +1,236 @@
1
+ import { homedir } from "node:os";
2
+ import { join, resolve } from "node:path";
3
+ import { CliUsageError } from "./cli-errors.js";
4
+ import { commandLabel, commandsEqual, flagsForCommand, GLOBAL_FLAGS, suggestCommandSpecs, suggestValues, } from "./command-metadata.js";
5
+ import { COMMAND_SPECS } from "./command-registry.js";
6
+ export function parseArgs({ argv }) {
7
+ const command = [];
8
+ const flags = {};
9
+ for (let index = 0; index < argv.length; index++) {
10
+ const value = argv[index];
11
+ if (value === undefined) {
12
+ continue;
13
+ }
14
+ if (!value.startsWith("--")) {
15
+ command.push(value);
16
+ continue;
17
+ }
18
+ const [rawKey, inlineValue] = value.slice(2).split("=", 2);
19
+ const key = rawKey ?? "";
20
+ if (inlineValue !== undefined) {
21
+ flags[key] = inlineValue;
22
+ continue;
23
+ }
24
+ const next = argv[index + 1];
25
+ if (next !== undefined && !next.startsWith("--")) {
26
+ flags[key] = next;
27
+ index++;
28
+ continue;
29
+ }
30
+ flags[key] = true;
31
+ }
32
+ return { command, flags };
33
+ }
34
+ export function validateParsedArgs({ parsed }) {
35
+ const spec = findCommandSpec({ command: parsed.command });
36
+ if (!spec) {
37
+ throw buildUnknownCommandError({ command: parsed.command });
38
+ }
39
+ const allowedFlags = new Set([
40
+ ...GLOBAL_FLAGS,
41
+ ...spec.flags.map((flag) => flag.name),
42
+ ]);
43
+ for (const flag of Object.keys(parsed.flags)) {
44
+ if (!allowedFlags.has(flag)) {
45
+ throw buildUnknownFlagError({ spec, flag });
46
+ }
47
+ }
48
+ if (getBooleanFlag({ flags: parsed.flags, name: "dry-run" })) {
49
+ if (!spec.dryRunSupported) {
50
+ throw new CliUsageError({
51
+ code: "unsupported_dry_run",
52
+ message: "--dry-run is not supported for this command.",
53
+ usage: spec.usage,
54
+ });
55
+ }
56
+ }
57
+ }
58
+ export function validateSafeInputs({ parsed }) {
59
+ for (const [name, value] of Object.entries(parsed.flags)) {
60
+ if (typeof value !== "string") {
61
+ continue;
62
+ }
63
+ rejectControlChars({ name, value });
64
+ if (isIdLikeFlag({ name })) {
65
+ rejectUnsafeId({ name, value });
66
+ }
67
+ if (name === "url") {
68
+ rejectUnsafeUrl({ name, value });
69
+ }
70
+ if (name === "output") {
71
+ rejectUnsafeOutputPath({ value });
72
+ }
73
+ }
74
+ }
75
+ export function findCommandSpec({ command, }) {
76
+ return COMMAND_SPECS.find((spec) => commandsEqual(spec.command, command));
77
+ }
78
+ export function findGroupCommandSpecs({ command, }) {
79
+ if (command.length === 0) {
80
+ return [];
81
+ }
82
+ return COMMAND_SPECS.filter((spec) => commandsEqual(spec.command.slice(0, command.length), command));
83
+ }
84
+ export function printCommandOrGroupHelpOrThrow({ command, }) {
85
+ const spec = findCommandSpec({ command });
86
+ if (spec) {
87
+ printCommandHelp({ spec });
88
+ return;
89
+ }
90
+ const groupSpecs = findGroupCommandSpecs({ command });
91
+ if (groupSpecs.length > 0) {
92
+ printGroupHelp({ command, specs: groupSpecs });
93
+ return;
94
+ }
95
+ throw buildUnknownCommandError({ command });
96
+ }
97
+ export function printHelp() {
98
+ console.log(`blitzreels
99
+
100
+ Usage:
101
+ ${COMMAND_SPECS.map((spec) => ` ${spec.usage}`).join("\n")}
102
+
103
+ Global flags:
104
+ --api-key KEY
105
+ --base-url URL
106
+ --json
107
+ `);
108
+ }
109
+ export function buildUnknownCommandError({ command, }) {
110
+ const suggestions = suggestCommands({ command }).map((spec) => spec.usage);
111
+ return new CliUsageError({
112
+ code: "unknown_command",
113
+ message: `Unknown command: ${commandLabel({ command })}`,
114
+ suggestions,
115
+ usage: suggestions[0],
116
+ });
117
+ }
118
+ export function usageForCurrentCommand() {
119
+ const parsed = parseArgs({ argv: process.argv.slice(2) });
120
+ return findCommandSpec({ command: parsed.command })?.usage;
121
+ }
122
+ function printCommandHelp({ spec }) {
123
+ const flags = flagsForCommand({ spec });
124
+ console.log(`Usage:
125
+ ${spec.usage}
126
+
127
+ Description:
128
+ ${spec.description}
129
+
130
+ Flags:
131
+ ${flags
132
+ .map((flag) => {
133
+ const required = flag.required ? " required" : "";
134
+ const values = flag.enum ? ` (${flag.enum.join("|")})` : "";
135
+ const defaultValue = flag.default === undefined ? "" : ` default=${String(flag.default)}`;
136
+ return ` --${flag.name} ${flag.type}${required}${values}${defaultValue} ${flag.description}`;
137
+ })
138
+ .join("\n")}
139
+
140
+ Examples:
141
+ ${spec.examples.map((example) => ` ${example}`).join("\n")}
142
+ `);
143
+ }
144
+ function printGroupHelp({ command, specs, }) {
145
+ const label = commandLabel({ command });
146
+ console.log(`blitzreels ${label}
147
+
148
+ Available commands:
149
+ ${specs.map((spec) => ` ${spec.usage}`).join("\n")}
150
+
151
+ Examples:
152
+ ${specs
153
+ .slice(0, 4)
154
+ .flatMap((spec) => spec.examples.slice(0, 1))
155
+ .map((example) => ` ${example}`)
156
+ .join("\n")}
157
+ `);
158
+ }
159
+ function buildUnknownFlagError({ spec, flag, }) {
160
+ const flags = [
161
+ ...new Set([
162
+ ...spec.flags.map((candidate) => candidate.name),
163
+ ...GLOBAL_FLAGS,
164
+ ]),
165
+ ];
166
+ const suggestions = suggestValues({ value: flag, candidates: flags }).map((candidate) => `--${candidate}`);
167
+ return new CliUsageError({
168
+ code: "unknown_flag",
169
+ message: `Unknown flag --${flag} for \`${commandLabel({ command: spec.command })}\`.`,
170
+ suggestions,
171
+ usage: spec.usage,
172
+ });
173
+ }
174
+ function suggestCommands({ command }) {
175
+ return suggestCommandSpecs({ command, specs: COMMAND_SPECS });
176
+ }
177
+ function getBooleanFlag({ flags, name, }) {
178
+ return flags[name] === true || flags[name] === "true";
179
+ }
180
+ function rejectControlChars({ name, value, }) {
181
+ if (Array.from(value).some((character) => {
182
+ const code = character.charCodeAt(0);
183
+ return code < 32 || code === 127;
184
+ })) {
185
+ throw new CliUsageError({
186
+ code: "unsafe_input",
187
+ message: `--${name} contains control characters.`,
188
+ });
189
+ }
190
+ }
191
+ function isIdLikeFlag({ name }) {
192
+ return name === "id" || name.endsWith("-id") || name.endsWith("-ids");
193
+ }
194
+ function rejectUnsafeId({ name, value, }) {
195
+ if (/[?#%]/.test(value)) {
196
+ throw new CliUsageError({
197
+ code: "unsafe_input",
198
+ message: `--${name} must be an ID, not a URL or encoded path.`,
199
+ });
200
+ }
201
+ }
202
+ function rejectUnsafeUrl({ name, value, }) {
203
+ let url;
204
+ try {
205
+ url = new URL(value);
206
+ }
207
+ catch {
208
+ throw new CliUsageError({
209
+ code: "unsafe_input",
210
+ message: `--${name} must be a valid URL.`,
211
+ });
212
+ }
213
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
214
+ throw new CliUsageError({
215
+ code: "unsafe_input",
216
+ message: `--${name} must use http or https.`,
217
+ });
218
+ }
219
+ if (url.username || url.password) {
220
+ throw new CliUsageError({
221
+ code: "unsafe_input",
222
+ message: `--${name} must not include embedded credentials.`,
223
+ });
224
+ }
225
+ }
226
+ function rejectUnsafeOutputPath({ value }) {
227
+ const outputPath = resolve(value);
228
+ const sensitiveDirs = [join(homedir(), ".ssh"), join(homedir(), ".gnupg")];
229
+ if (sensitiveDirs.some((dir) => outputPath.startsWith(`${dir}/`) || outputPath === dir)) {
230
+ throw new CliUsageError({
231
+ code: "unsafe_input",
232
+ message: "--output cannot write into sensitive home directories.",
233
+ });
234
+ }
235
+ }
236
+ //# sourceMappingURL=cli-command-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-command-routing.js","sourceRoot":"","sources":["../src/cli-command-routing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type CliExitCode = 1 | 2 | 3 | 4 | 5 | 6 | 7;
2
+ export type CliErrorContract = {
3
+ code: string;
4
+ exitCode: CliExitCode;
5
+ retryable: boolean;
6
+ };
7
+ export declare class CliUsageError extends Error {
8
+ code: string;
9
+ suggestions: string[];
10
+ usage: string | undefined;
11
+ constructor({ code, message, suggestions, usage, }: {
12
+ code: string;
13
+ message: string;
14
+ suggestions?: string[];
15
+ usage?: string;
16
+ });
17
+ }
18
+ export declare class CliOperationError extends Error {
19
+ code: string;
20
+ exitCode: CliExitCode;
21
+ retryable: boolean;
22
+ constructor({ code, exitCode, message, retryable, }: {
23
+ code: string;
24
+ exitCode: CliExitCode;
25
+ message: string;
26
+ retryable: boolean;
27
+ });
28
+ }
29
+ //# sourceMappingURL=cli-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-errors.d.ts","sourceRoot":"","sources":["../src/cli-errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEd,EACV,IAAI,EACJ,OAAO,EACP,WAAgB,EAChB,KAAK,GACN,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;CAOF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;gBAEP,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,WAAW,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;KACpB;CAOF"}
@@ -0,0 +1,25 @@
1
+ export class CliUsageError extends Error {
2
+ code;
3
+ suggestions;
4
+ usage;
5
+ constructor({ code, message, suggestions = [], usage, }) {
6
+ super(message);
7
+ this.name = "CliUsageError";
8
+ this.code = code;
9
+ this.suggestions = suggestions;
10
+ this.usage = usage;
11
+ }
12
+ }
13
+ export class CliOperationError extends Error {
14
+ code;
15
+ exitCode;
16
+ retryable;
17
+ constructor({ code, exitCode, message, retryable, }) {
18
+ super(message);
19
+ this.name = "CliOperationError";
20
+ this.code = code;
21
+ this.exitCode = exitCode;
22
+ this.retryable = retryable;
23
+ }
24
+ }
25
+ //# sourceMappingURL=cli-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-errors.js","sourceRoot":"","sources":["../src/cli-errors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,CAAS;IACb,WAAW,CAAW;IACtB,KAAK,CAAqB;IAE1B,YAAY,EACV,IAAI,EACJ,OAAO,EACP,WAAW,GAAG,EAAE,EAChB,KAAK,GAMN;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,IAAI,CAAS;IACb,QAAQ,CAAc;IACtB,SAAS,CAAU;IAEnB,YAAY,EACV,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,GAMV;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}