@shardflux/cli 0.1.0 → 0.3.0
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/CHANGELOG.md +44 -0
- package/README.md +119 -10
- package/dist/args.d.ts +10 -1
- package/dist/args.js +348 -15
- package/dist/commands.d.ts +14 -1
- package/dist/commands.js +622 -28
- package/dist/format.d.ts +20 -1
- package/dist/format.js +132 -1
- package/dist/http.d.ts +6 -1
- package/dist/http.js +14 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/main.js +28 -3
- package/dist/timing.d.ts +17 -0
- package/dist/timing.js +65 -0
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Every command and option the README shows is available from the version named here. Below 1.0, a minor release may
|
|
4
|
+
break compatibility; breaking changes are marked **Breaking**.
|
|
5
|
+
|
|
6
|
+
## 0.3.0 (unreleased)
|
|
7
|
+
|
|
8
|
+
Needs `@shardflux/sdk` 0.6.0 or later.
|
|
9
|
+
|
|
10
|
+
### Where the time went: `--timing`
|
|
11
|
+
|
|
12
|
+
- `--timing` on `workspaces open`, `workspaces suspend|resume|fork|delete|close|reset` (with `--wait`, the whole wait),
|
|
13
|
+
`operations wait` and `templates draft open|test|state|discard` prints the SDK's lifecycle timing on stderr after
|
|
14
|
+
the call: the client phases (the request, each operation state seen while waiting with the server's reason, such as
|
|
15
|
+
`capacity_pending (no_ready_host)`), the operation's own server timing (queued, ran, total; start or resume path),
|
|
16
|
+
the time spent outside the server, and retries. It is printed when the call fails, times out or is interrupted
|
|
17
|
+
too, before the error, and the exit code is unchanged.
|
|
18
|
+
- `workspaces exec`, `files read|write|ls` and `workspaces changes` take `--timing` too: it times the wake, when the
|
|
19
|
+
command had to wake a suspended workspace.
|
|
20
|
+
- With `--json`, the timing is a `timing` field of the JSON on stdout instead (snake_case; `null` when the command
|
|
21
|
+
made no lifecycle call), and of the error document on stderr (`{"error": {...}, "timing": {...}}`). Existing fields
|
|
22
|
+
are unchanged.
|
|
23
|
+
|
|
24
|
+
### Waits are the SDK's
|
|
25
|
+
|
|
26
|
+
- `workspaces open` waits with the SDK's waited open: the API holds the request until the workspace is ready
|
|
27
|
+
(`Prefer: wait`, up to 20 s at a time) instead of the CLI polling and then reading the workspace. The ready
|
|
28
|
+
workspace comes with its first tool token, so the open is listed as an agent session under the CLI's label (as a
|
|
29
|
+
reopen of a running workspace already was). Output, `--timeout` and exit codes are unchanged.
|
|
30
|
+
- Lifecycle commands with `--wait` use the SDK's `wait`. Output and exit codes are unchanged, except that
|
|
31
|
+
`workspaces fork --wait` prints the new workspace as it is after the fork, not as it was requested.
|
|
32
|
+
- Ctrl-C ends a held open at once (exit 130); the open continues server side, and opening the key again keeps
|
|
33
|
+
waiting.
|
|
34
|
+
|
|
35
|
+
## 0.2.0 (2026-09-28)
|
|
36
|
+
|
|
37
|
+
Secrets (`secrets ...`, `workspaces open --secret`, `workspaces secrets`), session workspaces (`--lifetime session`,
|
|
38
|
+
`workspaces close`), layered workspaces (`workspaces reset|save-as-template|changes`), templates
|
|
39
|
+
(`templates list|files|diff|draft ...`), and waking suspended workspaces on use (`--no-wake`, `--wake-timeout`).
|
|
40
|
+
|
|
41
|
+
## 0.1.0 (2026-09-26)
|
|
42
|
+
|
|
43
|
+
First release: `login`, `whoami`, `usage`, `workspaces open|list|get|exec|suspend|resume|fork|delete|sessions`,
|
|
44
|
+
`files read|write|ls`, `operations list|get|wait`, `--json`, and documented exit codes.
|
package/README.md
CHANGED
|
@@ -42,6 +42,8 @@ shard ws suspend acme/demo --wait
|
|
|
42
42
|
| `SHARDFLUX_API_KEY` | Project API key (`sfk_<key id>_<secret>`). Required. `shard` never accepts the key as an argument (`--api-key`, `--token` and similar flags are refused) and never prints it; anything shaped like a key is redacted from error output. |
|
|
43
43
|
| `SHARDFLUX_API_URL` | API base URL. Default `https://api.shardflux.dev`; `--api-url` overrides it. Plain `http://` is allowed only for loopback hosts. |
|
|
44
44
|
| `SHARDFLUX_AGENT_LABEL` | Attribution label for the tool tokens `shard` obtains for exec and files. Default `cli`; `--agent-label` overrides it. Each label is one agent session, listed by `shard ws sessions`. |
|
|
45
|
+
| `SHARDFLUX_NO_WAKE=1` | Do not resume a suspended workspace on use; same as `--no-wake` (see "Suspended workspaces" below). `--wake` overrides it. |
|
|
46
|
+
| `SHARDFLUX_WAKE_TIMEOUT_MS` | Longest wait, in milliseconds, for a workspace to wake or finish a transition. Default `120000`; `--wake-timeout <ms>` overrides it. |
|
|
45
47
|
| `SHARDFLUX_HTTP_KEEPALIVE=1` | Reuse HTTP connections (see "HTTP connections" below). |
|
|
46
48
|
|
|
47
49
|
`shard login` stores nothing. There is no config file: the key is read from the environment on
|
|
@@ -54,22 +56,124 @@ every run.
|
|
|
54
56
|
| `login`, `whoami` | Show the principal behind the key. |
|
|
55
57
|
| `version` | Print the CLI and SDK versions. |
|
|
56
58
|
| `usage [--org <id>]` | Usage summary for the current period: plan, meters and allowances. |
|
|
57
|
-
| `workspaces open <key> --template <slug> [--cpu-millis N --memory-mib N --disk-gib N] [--no-wait] [--timeout 5m]` | Open by key. Creates the workspace on first use and reconnects or resumes it afterwards, never resetting it. Waits until it is ready unless you pass `--no-wait`. |
|
|
58
|
-
| `workspaces list [--state S] [--prefix P] [--include-deleted] [--all] [--limit N] [--cursor C]` | One page, or every page with `--all`. The next cursor is printed on stderr. |
|
|
59
|
+
| `workspaces open <key> --template <slug> [--secret NAME]... [--lifetime persistent\|session] [--cpu-millis N --memory-mib N --disk-gib N] [--no-wait] [--timeout 5m] [--timing]` | Open by key. Creates the workspace on first use and reconnects or resumes it afterwards, never resetting it. Waits until it is ready unless you pass `--no-wait`. `--secret` binds secret names (replacing the binding of an existing workspace). `--lifetime session`: the workspace is discarded when the session ends (`workspaces close` or the idle timeout), and the key then opens a new workspace. |
|
|
60
|
+
| `workspaces list [--state S] [--prefix P] [--lifetime persistent\|session\|any] [--purpose standard\|template_draft\|template_test\|any] [--include-deleted] [--all] [--limit N] [--cursor C]` | One page, or every page with `--all`. The next cursor is printed on stderr. By default only persistent standard workspaces are listed. |
|
|
59
61
|
| `workspaces get <id\|key>` | One workspace (deleted ones included). |
|
|
60
62
|
| `workspaces exec <id\|key> [--cwd D] [--env K=V]... [--timeout T] [--stdin F\|-] -- <cmd> [args...]` | Runs argv with no shell. Output is streamed and resumes from byte offsets after dropped connections. `shard` exits with the command's exit code. Ctrl-C cancels the command. |
|
|
61
63
|
| `files read <id\|key> <path> [--out F]` | Raw bytes to stdout, or to a local file. |
|
|
62
64
|
| `files write <id\|key> <path> [--from F\|-] [--append] [--no-parents]` | Atomic write. The default source is stdin. |
|
|
63
65
|
| `files ls <id\|key> <path> [--limit N]` | Directory listing. |
|
|
64
|
-
| `workspaces suspend\|resume <id\|key> [--wait] [--timeout T]` | Lifecycle operation. Returns immediately unless you pass `--wait`. |
|
|
66
|
+
| `workspaces suspend\|resume <id\|key> [--wait] [--timeout T] [--timing]` | Lifecycle operation. Returns immediately unless you pass `--wait`. |
|
|
65
67
|
| `workspaces fork <id\|key> <new-key> [caps] [--wait]` | Fork into a new key. |
|
|
66
|
-
| `workspaces delete <id\|key> --yes [--wait]` | Delete the workspace. Tool access ends at once
|
|
68
|
+
| `workspaces delete <id\|key> --yes [--wait]` | Delete the workspace. Tool access ends at once. The key of a persistent workspace is never reused. |
|
|
69
|
+
| `workspaces close <id\|key> [--wait]` | End a session workspace now: it is deleted, and the key then opens a new workspace. A persistent workspace is refused (`not_session`). |
|
|
70
|
+
| `workspaces reset <id\|key> --yes [--wait]` | Layered workspaces: wipe every change and restart on the template. The previous state stays restorable for 7 days. |
|
|
71
|
+
| `workspaces save-as-template <id\|key> --template <slug> [--display-name N] [--description T] [--checkpoint ID] [--default-lifetime L] [--default-idle-timeout D] [--acknowledge PATH]... [--no-auto-publish] [--wait]` | Save a layered workspace as the next version of an organization template. `--wait` follows the build. |
|
|
72
|
+
| `workspaces changes <id\|key> [--path P] [--hash] [--summary] [--all] [--limit N] [--cursor C]` | What a layered, running workspace changed against its template. |
|
|
67
73
|
| `workspaces sessions <id\|key>` | Attributed agent sessions: label, principal and tokens issued. |
|
|
68
|
-
| `
|
|
74
|
+
| `workspaces secrets <id\|key> [--set NAME]... [--clear]` | Show the secret names bound to the workspace and their status, or replace them. |
|
|
75
|
+
| `secrets create <NAME> [--from-file F] [--description T] [--tool T]... [--allow-workspace ID]... [--org ID [--allow-project ID]... [--all-projects]]` | Create a secret. The value comes from standard input or `--from-file`, never from an argument. |
|
|
76
|
+
| `secrets list [--org ID] [--include-deleted] [--all]`, `secrets get <id\|NAME>` | Secret metadata. Values are never shown. |
|
|
77
|
+
| `secrets update <id\|NAME> [--description T] [--tool T]... [--allow-workspace ID]... [--any-workspace] [--allow-project ID]... [--all-projects] [--clear-projects]` | Change the description or usage permissions. |
|
|
78
|
+
| `secrets rotate <id\|NAME> [--from-file F]` | Store a new value (standard input or file); older values are erased. |
|
|
79
|
+
| `secrets versions <id\|NAME>`, `secrets delete <id\|NAME> --yes`, `secrets access-log <id\|NAME>` | Versions, deletion (also removes the name from every workspace binding), and the access log. |
|
|
80
|
+
| `operations list <id\|key> [--state S] [--kind K]`, `operations get <op>`, `operations wait <op> [--timeout T] [--timing]` | Operations. |
|
|
81
|
+
| `templates list [--owner platform\|organization] [--include-archived] [--all]` | Templates the project can open, with their open version, layouts, file list state and draft. |
|
|
82
|
+
| `templates files <slug> <version> [path] [--stat] [--owner O] [--all] [--limit N]` | One directory of a version's file tree, or one entry with `--stat`. |
|
|
83
|
+
| `templates diff <slug> --from <version\|base> --to <version> [--prefix P] [--change K] [--all]` | Diff two versions: added, removed, changed, type_changed, metadata. The totals come first. |
|
|
84
|
+
| `templates draft open <slug> [--base slug@version] [caps] [--no-wait]` | Open the template's draft, a layered workspace you edit with `workspaces exec`/`files`. |
|
|
85
|
+
| `templates draft status <slug>` | The draft's workspace, base version, states and live test instances. |
|
|
86
|
+
| `templates draft state <slug> [--label T] [--wait]`, `... state <slug> --list` | Capture a state of the running draft, or list its states. |
|
|
87
|
+
| `templates draft test <slug> [--state ID] [--instance-key K] [--no-wait]`, `... test <slug> --list [--include-ended]` | Open a test instance (a session on a copy of a state), or list them. |
|
|
88
|
+
| `templates draft publish <slug> [--state ID] [--description T] [--default-lifetime L] [--acknowledge PATH]... [--no-auto-publish] [--wait]` | Publish the draft as the template's next version. |
|
|
89
|
+
| `templates draft discard <slug> --yes [--wait]` | Delete the draft and end its live test instances. |
|
|
90
|
+
|
|
91
|
+
Aliases: `ws` for `workspaces`, `ops` for `operations`, `secret` for `secrets`, `template` for `templates`.
|
|
92
|
+
`shard workspaces files ...` and `shard workspaces operations ...` also work. `<id|key>` is tried as an id when it
|
|
93
|
+
is a UUID. Otherwise, or if no workspace has that id, it is matched as an exact workspace key across every lifetime
|
|
94
|
+
and purpose, so sessions, drafts and test instances resolve too. The live workspace wins over tombstones that ended
|
|
95
|
+
sessions left with the same key.
|
|
96
|
+
|
|
97
|
+
## Suspended workspaces
|
|
98
|
+
|
|
99
|
+
`workspaces exec`, `files read|write|ls` and `workspaces changes` wake a suspended workspace: they
|
|
100
|
+
resume it (or join the resume or open already running), wait until it runs, then run the request.
|
|
101
|
+
A request made during a suspend or resume waits for the transition to finish. The request itself
|
|
102
|
+
never runs twice, because the workspace refused it before doing anything.
|
|
103
|
+
|
|
104
|
+
- `--wake-timeout <ms>` (or `SHARDFLUX_WAKE_TIMEOUT_MS`, default `120000`) bounds the wait. Past
|
|
105
|
+
it, `shard` exits 5 and names the operation and its state (for example `Operation <id> (open)
|
|
106
|
+
is still queued after 120000 ms`). The operation continues server side:
|
|
107
|
+
`shard operations wait <id>` keeps waiting.
|
|
108
|
+
- A resume or open that fails exits 6.
|
|
109
|
+
- `--no-wake` (or `SHARDFLUX_NO_WAKE=1`) turns this off. A workspace that is not running is then
|
|
110
|
+
refused at once (exit 1, `workspace_not_running`).
|
|
111
|
+
|
|
112
|
+
## Timing
|
|
113
|
+
|
|
114
|
+
`--timing` (0.3.0+) says where the time of an open or a wait went. After the call, `shard` prints the lifecycle
|
|
115
|
+
timing that [`@shardflux/sdk`](https://www.npmjs.com/package/@shardflux/sdk) measured (its `formatTiming()`) on
|
|
116
|
+
stderr. It is printed when the call fails, times out or is interrupted too, before the error, and the exit code does
|
|
117
|
+
not change. A slow open reads, for example:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
$ shard ws open acme/demo --template python-node-browser --timing
|
|
121
|
+
Workspace acme/demo (01a0e5a8-3edd-74ba-b489-d62b8925e342) is ready.
|
|
122
|
+
...
|
|
123
|
+
open 34.18 s, succeeded (workspace 01a0e5a8-3edd-74ba-b489-d62b8925e342, operation 01a0e5a8-3ef0-7ecb-975e-dff2d5ca6e33)
|
|
124
|
+
client: request 20.01 s (held) → capacity_pending 13.52 s (no_ready_host) → running 0.59 s → view 42 ms ∥ token 61 ms
|
|
125
|
+
server: queued 33.40 s, ran 0.62 s, total 34.02 s; start warm, boot to ready 79 ms
|
|
126
|
+
outside the server: 0.16 s
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Here the time went to waiting for a host with capacity; the network and the VM start were fast.
|
|
130
|
+
|
|
131
|
+
- **client**: phases on your clock. `request` is the API call; `(held)` means the API held it until the workspace
|
|
132
|
+
was ready, up to 20 s at a time. Then come the operation states seen while waiting, with the server's reason, and
|
|
133
|
+
reading the workspace.
|
|
134
|
+
- **server**: the operation's own timing. `queued` runs until the operation began running, including any wait for
|
|
135
|
+
capacity; `ran` is the cell's work. Then the start or resume path the cell reported.
|
|
136
|
+
- **outside the server**: your total minus the operation's, so network, polling and the final reads. A large value
|
|
137
|
+
with a small server total points at the connection, not at the workspace.
|
|
138
|
+
- **retries**: transient failures that were retried.
|
|
139
|
+
|
|
140
|
+
Which call is timed:
|
|
141
|
+
|
|
142
|
+
- `workspaces open` and `templates draft open|test`: the open, including the wait unless `--no-wait`.
|
|
143
|
+
- `workspaces suspend|resume|fork|delete|close|reset` and `templates draft state|discard`: with `--wait`, the request
|
|
144
|
+
and the whole wait; without it, the request.
|
|
145
|
+
- `operations wait`: the wait.
|
|
146
|
+
- `workspaces exec`, `files read|write|ls` and `workspaces changes`: the wake, when the command had to wake a
|
|
147
|
+
suspended workspace. Without a wake nothing is printed.
|
|
148
|
+
|
|
149
|
+
With `--json`, stdout carries the timing as a `timing` field of the command's JSON instead: `action`, `outcome`,
|
|
150
|
+
`workspace_id`, `operation_id`, `total_ms`, `phases` (`phase`, `reason`, `operation_id`, `start_ms`, `duration_ms`),
|
|
151
|
+
`retries`, `server` (`queued_ms`, `run_ms`, `total_ms`, `start_path`, `resume_path`, `boot_to_ready_ms`, ...) and
|
|
152
|
+
`outside_server_ms`. It is `null` when the command made no lifecycle call. On a failure the error document on stderr
|
|
153
|
+
carries it: `{"error": {...}, "timing": {...}}`.
|
|
154
|
+
|
|
155
|
+
`shard` does not stream progress while it waits. For live events, use the SDK's `onProgress`.
|
|
156
|
+
|
|
157
|
+
## Secrets
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
printf %s "$OPENAI_API_KEY" | shard secrets create OPENAI_API_KEY # value from standard input
|
|
161
|
+
shard secrets create DATABASE_URL --from-file ./database-url.txt # or from a file
|
|
162
|
+
shard ws open acme/demo --template python-node-browser --secret OPENAI_API_KEY --secret DATABASE_URL
|
|
163
|
+
shard ws exec acme/demo -- python3 agent.py # sees both as environment variables
|
|
164
|
+
shard ws secrets acme/demo # names and status, never values
|
|
165
|
+
printf %s "$NEW_KEY" | shard secrets rotate OPENAI_API_KEY
|
|
166
|
+
```
|
|
69
167
|
|
|
70
|
-
|
|
71
|
-
`shard
|
|
72
|
-
|
|
168
|
+
- Secret values are read only from standard input or `--from-file` (one trailing newline is
|
|
169
|
+
removed). `shard` refuses `--value`, `--password` and similar flags, and never prints a value.
|
|
170
|
+
- Bound secrets reach every `exec` and terminal of the workspace. A name that is unknown, or a
|
|
171
|
+
secret the workspace may not use, is refused (exit 2, `secret_not_available` with the names).
|
|
172
|
+
- Secrets are project secrets of the API key's project by default. `--org <id>` addresses
|
|
173
|
+
organization-wide secrets; those, and `secrets access-log`, belong to organization owners and
|
|
174
|
+
admins in the console, so a project API key gets 403 (exit 4).
|
|
175
|
+
- `<id|NAME>` is tried as an id when it is a UUID; otherwise it is matched by name in the project
|
|
176
|
+
(or in the organization with `--org`).
|
|
73
177
|
|
|
74
178
|
## Output
|
|
75
179
|
|
|
@@ -82,8 +186,13 @@ otherwise, or if no workspace has that id, it is matched as an exact workspace k
|
|
|
82
186
|
- `login`/`whoami` print `{api_url, organization_id, project_id, api_key:{id,key_id}, tool_permissions}`.
|
|
83
187
|
- `exec` prints `{session_id, exit_code, term_signal, timed_out, canceled, stdout, stderr, truncated, reconnects}`.
|
|
84
188
|
- `files read` prints `{path, bytes, content_base64}`; `files write` prints the write result.
|
|
189
|
+
- `secrets create`/`get`/`update` print the secret's metadata; `list`, `versions` and `access-log`
|
|
190
|
+
print `{data, next_cursor}`; `rotate` prints `{secret, version}`; `delete` prints
|
|
191
|
+
`{deleted, id, name, scope}`; `workspaces secrets` prints `{workspace_id, names, secrets}`.
|
|
85
192
|
|
|
86
193
|
Errors go to stderr as `{"error": {code, message, status, request_id, ...}}`.
|
|
194
|
+
- **`--timing`:** the timing goes to stderr after the output. With `--json` it is a `timing` field instead
|
|
195
|
+
(see "Timing").
|
|
87
196
|
|
|
88
197
|
## Exit codes
|
|
89
198
|
|
|
@@ -94,8 +203,8 @@ otherwise, or if no workspace has that id, it is matched as an exact workspace k
|
|
|
94
203
|
| 2 | usage error: bad arguments, or input the API rejected as `validation_failed` |
|
|
95
204
|
| 3 | not found: workspace, operation or route |
|
|
96
205
|
| 4 | authentication or authorization: missing, malformed, revoked or insufficient key |
|
|
97
|
-
| 5 | timeout: waiting gave up; the operation continues server side (`shard operations wait <id>`) |
|
|
98
|
-
| 6 | the awaited operation ended `failed` or `canceled` |
|
|
206
|
+
| 5 | timeout: waiting gave up (`--timeout`, or `--wake-timeout` while waking a workspace); the operation continues server side (`shard operations wait <id>`) |
|
|
207
|
+
| 6 | the awaited operation ended `failed` or `canceled` (also a resume or open that failed while waking a workspace) |
|
|
99
208
|
| 130 | interrupted (Ctrl-C). Waits stop at once, and exec sends a cancel to the session. |
|
|
100
209
|
| exec | the command's own code: 124 if it timed out, 128+N if killed by signal N. Failures before the command ran use the codes above; use `--json` to tell them apart. |
|
|
101
210
|
|
package/dist/args.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.
|
|
1
|
+
export declare const CLI_VERSION = "0.3.0";
|
|
2
2
|
export interface OptionSpec {
|
|
3
3
|
type: 'string' | 'boolean';
|
|
4
4
|
short?: string;
|
|
@@ -32,8 +32,15 @@ export declare function parsePositiveInt(text: string, option: string, max?: num
|
|
|
32
32
|
/** ["A=1", "B=x=y"] -> { A: "1", B: "x=y" }. */
|
|
33
33
|
export declare function parseEnvPairs(pairs: readonly string[]): Record<string, string>;
|
|
34
34
|
export declare const UUID: RegExp;
|
|
35
|
+
/** Secret names (environment-variable safe; the API's SECRET_NAME_PATTERN). */
|
|
36
|
+
export declare const SECRET_NAME: RegExp;
|
|
35
37
|
/** Validates the API base URL: https, or http only to a loopback address (the key is a bearer credential). */
|
|
36
38
|
export declare function resolveApiUrl(flag: string | undefined, env: string | undefined): string;
|
|
39
|
+
export declare const DEFAULT_WAKE_TIMEOUT_MS = 120000;
|
|
40
|
+
/** Wake on use: --wake / --no-wake, else SHARDFLUX_NO_WAKE (1/true/yes/on disables), else on. */
|
|
41
|
+
export declare function resolveWake(flag: boolean | undefined, noWakeEnv: string | undefined): boolean;
|
|
42
|
+
/** The wake/transition budget per call in ms: --wake-timeout, else SHARDFLUX_WAKE_TIMEOUT_MS, else 120000. */
|
|
43
|
+
export declare function resolveWakeTimeout(flag: string | undefined, env: string | undefined): number;
|
|
37
44
|
export type Values = Record<string, string | boolean | string[] | undefined>;
|
|
38
45
|
export type Parsed = {
|
|
39
46
|
kind: 'help';
|
|
@@ -49,6 +56,8 @@ export type Parsed = {
|
|
|
49
56
|
apiUrl: string | undefined;
|
|
50
57
|
json: boolean;
|
|
51
58
|
agentLabel: string | undefined;
|
|
59
|
+
wake: boolean | undefined;
|
|
60
|
+
wakeTimeout: string | undefined;
|
|
52
61
|
};
|
|
53
62
|
};
|
|
54
63
|
/**
|