blitzreels 0.1.3 → 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.
- package/README.md +65 -7
- package/dist/agent-context.d.ts +43 -0
- package/dist/agent-context.d.ts.map +1 -0
- package/dist/agent-context.js +170 -0
- package/dist/agent-context.js.map +1 -0
- package/dist/cli-command-routing.d.ts +27 -0
- package/dist/cli-command-routing.d.ts.map +1 -0
- package/dist/cli-command-routing.js +236 -0
- package/dist/cli-command-routing.js.map +1 -0
- package/dist/cli-errors.d.ts +29 -0
- package/dist/cli-errors.d.ts.map +1 -0
- package/dist/cli-errors.js +25 -0
- package/dist/cli-errors.js.map +1 -0
- package/dist/cli-flag-reader.d.ts +61 -0
- package/dist/cli-flag-reader.d.ts.map +1 -0
- package/dist/cli-flag-reader.js +207 -0
- package/dist/cli-flag-reader.js.map +1 -0
- package/dist/cli-http.d.ts +6 -0
- package/dist/cli-http.d.ts.map +1 -0
- package/dist/cli-http.js +42 -0
- package/dist/cli-http.js.map +1 -0
- package/dist/cli-presenter.d.ts +23 -0
- package/dist/cli-presenter.d.ts.map +1 -0
- package/dist/cli-presenter.js +117 -0
- package/dist/cli-presenter.js.map +1 -0
- package/dist/cli-runtime.d.ts +25 -0
- package/dist/cli-runtime.d.ts.map +1 -0
- package/dist/cli-runtime.js +125 -0
- package/dist/cli-runtime.js.map +1 -0
- package/dist/cli-timing.d.ts +4 -0
- package/dist/cli-timing.d.ts.map +1 -0
- package/dist/cli-timing.js +6 -0
- package/dist/cli-timing.js.map +1 -0
- package/dist/cli-types.d.ts +71 -0
- package/dist/cli-types.d.ts.map +1 -0
- package/dist/cli-types.js +2 -0
- package/dist/cli-types.js.map +1 -0
- package/dist/cli-value-parsers.d.ts +76 -0
- package/dist/cli-value-parsers.d.ts.map +1 -0
- package/dist/cli-value-parsers.js +266 -0
- package/dist/cli-value-parsers.js.map +1 -0
- package/dist/command-metadata.d.ts +54 -0
- package/dist/command-metadata.d.ts.map +1 -0
- package/dist/command-metadata.js +483 -0
- package/dist/command-metadata.js.map +1 -0
- package/dist/command-registry.d.ts +3 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +39 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/commands/ai-edit.d.ts +45 -0
- package/dist/commands/ai-edit.d.ts.map +1 -0
- package/dist/commands/ai-edit.js +368 -0
- package/dist/commands/ai-edit.js.map +1 -0
- package/dist/commands/api.d.ts +20 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +56 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/audio.d.ts +65 -0
- package/dist/commands/audio.d.ts.map +1 -0
- package/dist/commands/audio.js +261 -0
- package/dist/commands/audio.js.map +1 -0
- package/dist/commands/auth-runtime.d.ts +24 -0
- package/dist/commands/auth-runtime.d.ts.map +1 -0
- package/dist/commands/auth-runtime.js +169 -0
- package/dist/commands/auth-runtime.js.map +1 -0
- package/dist/commands/auth.d.ts +26 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +59 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/caption-command-types.d.ts +66 -0
- package/dist/commands/caption-command-types.d.ts.map +1 -0
- package/dist/commands/caption-command-types.js +2 -0
- package/dist/commands/caption-command-types.js.map +1 -0
- package/dist/commands/caption-dry-run.d.ts +66 -0
- package/dist/commands/caption-dry-run.d.ts.map +1 -0
- package/dist/commands/caption-dry-run.js +205 -0
- package/dist/commands/caption-dry-run.js.map +1 -0
- package/dist/commands/caption-overrides.d.ts +43 -0
- package/dist/commands/caption-overrides.d.ts.map +1 -0
- package/dist/commands/caption-overrides.js +245 -0
- package/dist/commands/caption-overrides.js.map +1 -0
- package/dist/commands/caption-selection.d.ts +71 -0
- package/dist/commands/caption-selection.d.ts.map +1 -0
- package/dist/commands/caption-selection.js +89 -0
- package/dist/commands/caption-selection.js.map +1 -0
- package/dist/commands/caption-style-commands.d.ts +3 -0
- package/dist/commands/caption-style-commands.d.ts.map +1 -0
- package/dist/commands/caption-style-commands.js +240 -0
- package/dist/commands/caption-style-commands.js.map +1 -0
- package/dist/commands/caption-style-flags.d.ts +30 -0
- package/dist/commands/caption-style-flags.d.ts.map +1 -0
- package/dist/commands/caption-style-flags.js +199 -0
- package/dist/commands/caption-style-flags.js.map +1 -0
- package/dist/commands/caption-text-updates.d.ts +21 -0
- package/dist/commands/caption-text-updates.d.ts.map +1 -0
- package/dist/commands/caption-text-updates.js +23 -0
- package/dist/commands/caption-text-updates.js.map +1 -0
- package/dist/commands/captions-specs.d.ts +3 -0
- package/dist/commands/captions-specs.d.ts.map +1 -0
- package/dist/commands/captions-specs.js +219 -0
- package/dist/commands/captions-specs.js.map +1 -0
- package/dist/commands/captions.d.ts +7 -0
- package/dist/commands/captions.d.ts.map +1 -0
- package/dist/commands/captions.js +181 -0
- package/dist/commands/captions.js.map +1 -0
- package/dist/commands/clip-runtime.d.ts +70 -0
- package/dist/commands/clip-runtime.d.ts.map +1 -0
- package/dist/commands/clip-runtime.js +269 -0
- package/dist/commands/clip-runtime.js.map +1 -0
- package/dist/commands/clips.d.ts +59 -0
- package/dist/commands/clips.d.ts.map +1 -0
- package/dist/commands/clips.js +242 -0
- package/dist/commands/clips.js.map +1 -0
- package/dist/commands/command-operation.d.ts +26 -0
- package/dist/commands/command-operation.d.ts.map +1 -0
- package/dist/commands/command-operation.js +18 -0
- package/dist/commands/command-operation.js.map +1 -0
- package/dist/commands/editing-workflow-runtime.d.ts +42 -0
- package/dist/commands/editing-workflow-runtime.d.ts.map +1 -0
- package/dist/commands/editing-workflow-runtime.js +128 -0
- package/dist/commands/editing-workflow-runtime.js.map +1 -0
- package/dist/commands/editing-workflows.d.ts +70 -0
- package/dist/commands/editing-workflows.d.ts.map +1 -0
- package/dist/commands/editing-workflows.js +252 -0
- package/dist/commands/editing-workflows.js.map +1 -0
- package/dist/commands/effects-runtime.d.ts +64 -0
- package/dist/commands/effects-runtime.d.ts.map +1 -0
- package/dist/commands/effects-runtime.js +100 -0
- package/dist/commands/effects-runtime.js.map +1 -0
- package/dist/commands/effects.d.ts +69 -0
- package/dist/commands/effects.d.ts.map +1 -0
- package/dist/commands/effects.js +275 -0
- package/dist/commands/effects.js.map +1 -0
- package/dist/commands/exports.d.ts +51 -0
- package/dist/commands/exports.d.ts.map +1 -0
- package/dist/commands/exports.js +126 -0
- package/dist/commands/exports.js.map +1 -0
- package/dist/commands/media-assets.d.ts +100 -0
- package/dist/commands/media-assets.d.ts.map +1 -0
- package/dist/commands/media-assets.js +572 -0
- package/dist/commands/media-assets.js.map +1 -0
- package/dist/commands/media-overlays.d.ts +52 -0
- package/dist/commands/media-overlays.d.ts.map +1 -0
- package/dist/commands/media-overlays.js +270 -0
- package/dist/commands/media-overlays.js.map +1 -0
- package/dist/commands/media-runtime.d.ts +61 -0
- package/dist/commands/media-runtime.d.ts.map +1 -0
- package/dist/commands/media-runtime.js +221 -0
- package/dist/commands/media-runtime.js.map +1 -0
- package/dist/commands/project-read.d.ts +40 -0
- package/dist/commands/project-read.d.ts.map +1 -0
- package/dist/commands/project-read.js +155 -0
- package/dist/commands/project-read.js.map +1 -0
- package/dist/commands/projects.d.ts +68 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +274 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/stock-library.d.ts +72 -0
- package/dist/commands/stock-library.d.ts.map +1 -0
- package/dist/commands/stock-library.js +175 -0
- package/dist/commands/stock-library.js.map +1 -0
- package/dist/commands/system.d.ts +16 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +110 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/text-overlay-spec.d.ts +18 -0
- package/dist/commands/text-overlay-spec.d.ts.map +1 -0
- package/dist/commands/text-overlay-spec.js +169 -0
- package/dist/commands/text-overlay-spec.js.map +1 -0
- package/dist/commands/text-overlays.d.ts +61 -0
- package/dist/commands/text-overlays.d.ts.map +1 -0
- package/dist/commands/text-overlays.js +199 -0
- package/dist/commands/text-overlays.js.map +1 -0
- package/dist/commands/timeline-runtime.d.ts +102 -0
- package/dist/commands/timeline-runtime.d.ts.map +1 -0
- package/dist/commands/timeline-runtime.js +415 -0
- package/dist/commands/timeline-runtime.js.map +1 -0
- package/dist/commands/timeline.d.ts +116 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +549 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/workspace-defaults.d.ts +12 -0
- package/dist/commands/workspace-defaults.d.ts.map +1 -0
- package/dist/commands/workspace-defaults.js +115 -0
- package/dist/commands/workspace-defaults.js.map +1 -0
- package/dist/commands/workspace.d.ts +50 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +116 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/index.js +478 -2913
- package/dist/index.js.map +1 -1
- package/dist/preview-first-edit.d.ts +43 -0
- package/dist/preview-first-edit.d.ts.map +1 -0
- package/dist/preview-first-edit.js +37 -0
- package/dist/preview-first-edit.js.map +1 -0
- package/dist/update-notifier.d.ts +42 -0
- package/dist/update-notifier.d.ts.map +1 -0
- package/dist/update-notifier.js +265 -0
- package/dist/update-notifier.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -14,6 +14,9 @@ package for users who prefer scoped installs.
|
|
|
14
14
|
After the first real publish:
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
+
npx blitzreels version
|
|
18
|
+
npx blitzreels doctor
|
|
19
|
+
npx blitzreels agent-context --json
|
|
17
20
|
npx blitzreels auth login
|
|
18
21
|
```
|
|
19
22
|
|
|
@@ -31,8 +34,9 @@ blitzreels auth set-key --api-key br_live_...
|
|
|
31
34
|
blitzreels auth whoami
|
|
32
35
|
```
|
|
33
36
|
|
|
34
|
-
`auth login` opens BlitzReels in your browser,
|
|
35
|
-
|
|
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
|
|
36
40
|
`~/.blitzreels/config.json` as a fallback. Use `--no-browser` on remote shells
|
|
37
41
|
and open the printed URL manually.
|
|
38
42
|
|
|
@@ -70,6 +74,14 @@ blitzreels media folders rename --folder-id FOLDER_ID --name "New folder name"
|
|
|
70
74
|
blitzreels media folders update --folder-id FOLDER_ID --parent-folder-id root
|
|
71
75
|
blitzreels media folders delete --folder-id FOLDER_ID --confirm-delete
|
|
72
76
|
|
|
77
|
+
blitzreels clips create --source-type youtube --youtube-url "https://www.youtube.com/watch?v=..." --name "MKBHD hero loop" --min-duration 8 --max-duration 12 --qa-mode permissive
|
|
78
|
+
blitzreels clips create --source-type asset --asset-id ASSET_ID --selection-mode time_range --start-seconds 52 --end-seconds 64 --max-duration 12
|
|
79
|
+
blitzreels clips get --clip-id CLIP_ID --json
|
|
80
|
+
blitzreels clips wait --clip-id CLIP_ID --json
|
|
81
|
+
blitzreels clips reselect --clip-id CLIP_ID --selection-mode time_range --start-seconds 52 --end-seconds 64 --min-duration 8 --max-duration 12
|
|
82
|
+
blitzreels clips repair --clip-id CLIP_ID --repair-mode auto
|
|
83
|
+
blitzreels clips export --clip-id CLIP_ID --resolution 1080p --format mp4 --allow-blocking-qa-bypass false
|
|
84
|
+
|
|
73
85
|
blitzreels project inspect --project-id PROJECT_ID --json
|
|
74
86
|
blitzreels project timeline --project-id PROJECT_ID --json
|
|
75
87
|
blitzreels project snapshot --project-id PROJECT_ID --at 00:03
|
|
@@ -79,18 +91,27 @@ blitzreels timeline transform --project-id PROJECT_ID --timeline-item-id TIMELIN
|
|
|
79
91
|
blitzreels timeline move --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --at 00:06 --layer-index 2
|
|
80
92
|
blitzreels timeline delete --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --auto-pack false
|
|
81
93
|
|
|
94
|
+
blitzreels effects zoom add --project-id PROJECT_ID --at 9.8 --duration 1.8 --scale-start 1 --scale-end 1.1 --easing easeInOut
|
|
95
|
+
blitzreels effects zoom update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --scale-end 1.1 --easing easeInOut --duration 1.8
|
|
96
|
+
blitzreels effects mask add --project-id PROJECT_ID --settings-json '{"shape":"rounded","size":{"width":0.8,"height":0.8}}'
|
|
97
|
+
blitzreels effects colorgrade update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --settings-json '{"brightness":1.1,"vignetteEnabled":true}'
|
|
98
|
+
|
|
82
99
|
blitzreels text add --project-id PROJECT_ID --text "Hook" --at 0 --duration 4
|
|
83
100
|
blitzreels text add --project-id PROJECT_ID --text "SERVEURS MCP" --at 24.33 --duration 2.8 --font-family Pacifico --font-size 82 --color "#17FFA6" --background-color "rgba(3,7,18,0.82)" --top "24%"
|
|
84
101
|
blitzreels text list --project-id PROJECT_ID --json
|
|
85
102
|
blitzreels text update --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID --text "New hook" --font-family Inter --font-size 64 --color "#FFFFFF"
|
|
86
103
|
blitzreels text remove --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID
|
|
87
104
|
|
|
88
|
-
blitzreels audio
|
|
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.03
|
|
107
|
+
blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.03
|
|
89
108
|
|
|
90
109
|
blitzreels captions words list --project-id PROJECT_ID --match-text "Supabase" --json
|
|
91
110
|
blitzreels captions words text --project-id PROJECT_ID --word-id WORD_ID --text "Supabase"
|
|
92
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
|
|
93
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
|
|
94
115
|
blitzreels captions words emphasis --project-id PROJECT_ID --match-text "MCP" --emphasis true
|
|
95
116
|
blitzreels captions words delete --project-id PROJECT_ID --word-id WORD_ID
|
|
96
117
|
blitzreels captions words merge --project-id PROJECT_ID --word-ids WORD_ID_1,WORD_ID_2 --text "serveurs MCP"
|
|
@@ -102,11 +123,11 @@ blitzreels silence apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITE
|
|
|
102
123
|
blitzreels mistakes plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --json
|
|
103
124
|
blitzreels mistakes apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --confirm-preview
|
|
104
125
|
|
|
105
|
-
blitzreels captions
|
|
106
|
-
blitzreels captions
|
|
107
|
-
blitzreels captions
|
|
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
|
|
108
129
|
|
|
109
|
-
blitzreels exports start --project-id PROJECT_ID
|
|
130
|
+
blitzreels exports start --project-id PROJECT_ID --cover-frame-seconds 1
|
|
110
131
|
blitzreels exports wait --export-id EXPORT_ID
|
|
111
132
|
blitzreels exports download --export-id EXPORT_ID --output ./short.mp4
|
|
112
133
|
|
|
@@ -115,6 +136,43 @@ blitzreels api spec
|
|
|
115
136
|
```
|
|
116
137
|
|
|
117
138
|
Use `--json` for script and AI-agent workflows.
|
|
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.
|
|
141
|
+
|
|
142
|
+
## Machine-Readable Contract
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
blitzreels agent-context --json
|
|
146
|
+
blitzreels agent-context --command "media attach" --json
|
|
147
|
+
blitzreels schema --command "captions words style" --json
|
|
148
|
+
blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 6 --dry-run
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`agent-context` is the machine-readable command contract for agents. It includes
|
|
152
|
+
command metadata, typed flags, examples, read/write markers, destructive markers,
|
|
153
|
+
and known error categories.
|
|
154
|
+
|
|
155
|
+
Agent workflow strategy lives in BlitzReels skills and docs, not in CLI command
|
|
156
|
+
metadata or normal command output.
|
|
157
|
+
|
|
158
|
+
`--dry-run` is available on mutating commands and prints the API request that
|
|
159
|
+
would be made without making the write request. Destructive dry-runs still require
|
|
160
|
+
the same explicit confirmation flags as real destructive commands.
|
|
161
|
+
|
|
162
|
+
## Updates
|
|
163
|
+
|
|
164
|
+
The CLI checks `https://www.blitzreels.com/api/cli/releases` at most once per
|
|
165
|
+
day and prints a short update notice to stderr when a newer version is
|
|
166
|
+
available. The notice is skipped for `--json`, CI, non-interactive shells, and
|
|
167
|
+
commands where it would be noisy.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
blitzreels version
|
|
171
|
+
blitzreels doctor
|
|
172
|
+
npm i -g blitzreels@latest
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Set `BLITZREELS_NO_UPDATE_NOTIFIER=1` to disable passive update notices.
|
|
118
176
|
|
|
119
177
|
## Faulty Commands
|
|
120
178
|
|
|
@@ -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
|