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.
- package/README.md +15 -18
- 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 +1 -1
- package/dist/cli-runtime.js +1 -1
- 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 +51 -0
- package/dist/cli-types.d.ts.map +1 -1
- 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 +2 -2
- package/dist/command-metadata.d.ts.map +1 -1
- package/dist/command-metadata.js +31 -5
- package/dist/command-metadata.js.map +1 -1
- package/dist/command-registry.d.ts +1 -1
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +36 -853
- package/dist/command-registry.js.map +1 -1
- 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 +18 -0
- package/dist/commands/exports.d.ts.map +1 -1
- package/dist/commands/exports.js +55 -0
- package/dist/commands/exports.js.map +1 -1
- 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 +16 -0
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +118 -1
- package/dist/commands/projects.js.map +1 -1
- 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 +454 -5053
- package/dist/index.js.map +1 -1
- package/dist/preview-first-edit.d.ts +6 -0
- package/dist/preview-first-edit.d.ts.map +1 -1
- package/dist/preview-first-edit.js +14 -2
- package/dist/preview-first-edit.js.map +1 -1
- 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
|
@@ -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,
|
|
39
|
-
|
|
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.
|
|
107
|
-
blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.
|
|
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
|
|
125
|
-
blitzreels captions
|
|
126
|
-
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
|
|
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
|
-
##
|
|
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
|
-
|
|
159
|
-
|
|
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"}
|