exponential-cli 1.13.0 → 1.16.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/README.md +94 -2
- package/dist/index.js +1503 -243
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -19,14 +19,14 @@ npx exponential-cli --help
|
|
|
19
19
|
### 1. Generate an API Token
|
|
20
20
|
|
|
21
21
|
1. Log into Exponential
|
|
22
|
-
2. Navigate to `/
|
|
22
|
+
2. Navigate to `/settings/api-keys`
|
|
23
23
|
3. Create a new API key with type "JWT"
|
|
24
24
|
4. Copy the generated token
|
|
25
25
|
|
|
26
26
|
### 2. Configure the CLI
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
exponential auth login --token <your-jwt-token> --api-url https://
|
|
29
|
+
exponential auth login --token <your-jwt-token> --api-url https://www.exponential.im
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
### 3. Verify Authentication
|
|
@@ -194,12 +194,104 @@ cat transcript.txt | exponential meetings create -t "Standup" --transcript-file
|
|
|
194
194
|
# Update — only the fields you pass are written
|
|
195
195
|
exponential meetings update --id <cuid> -t "Renamed" --summary "Recap ..."
|
|
196
196
|
|
|
197
|
+
# Permanently delete meetings you own. More than one id requires --force; ids that
|
|
198
|
+
# aren't yours are skipped and reported (and the exit code is non-zero).
|
|
199
|
+
exponential meetings delete <cuid>
|
|
200
|
+
exponential meetings delete --force <cuid> <cuid> <cuid>
|
|
201
|
+
# DANGER: deletes every meeting the filter matches — permanently. Filter deliberately.
|
|
202
|
+
exponential meetings list --mine --archived | jq -r '.meetings[] | select(.archivedAt != null) | .id' | exponential meetings delete --force --ids-file -
|
|
203
|
+
|
|
197
204
|
# Meeting notes: read raw Markdown (safe to redirect), replace, or append a block
|
|
198
205
|
exponential meetings notes get <cuid> > notes.md # --json for a {id, notes} envelope
|
|
199
206
|
exponential meetings notes set <cuid> --file notes.md # or inline, or --file - for stdin
|
|
200
207
|
exponential meetings notes append <cuid> "Follow-up: ship it" # separated by a blank line
|
|
201
208
|
```
|
|
202
209
|
|
|
210
|
+
### Decisions and open questions
|
|
211
|
+
|
|
212
|
+
The workspace Decision Log. **An open question is a decision with `--status OPEN`** —
|
|
213
|
+
there is no separate model, and that is exactly what a meeting's "Open questions"
|
|
214
|
+
panel shows.
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# The log, and the open questions in it
|
|
218
|
+
exponential decisions list --workspace clear
|
|
219
|
+
exponential decisions list --workspace clear --status OPEN
|
|
220
|
+
exponential decisions list --workspace clear --product clear --search "retention"
|
|
221
|
+
exponential decisions list --workspace clear --number 3 --limit 20 # D-0003; cap the page
|
|
222
|
+
|
|
223
|
+
# Everything logged from one meeting — both panels (drafts too, if you can edit it)
|
|
224
|
+
exponential decisions list --meeting <meeting-cuid>
|
|
225
|
+
|
|
226
|
+
# One decision in full: body, evidence, deciders, chain and links
|
|
227
|
+
exponential decisions get <cuid>
|
|
228
|
+
|
|
229
|
+
# Log a decision from a meeting. Markdown bodies come from a file or stdin.
|
|
230
|
+
exponential decisions create -s "Ship the importer behind a flag" \
|
|
231
|
+
--status ACCEPTED --source AGENT --meeting <meeting-cuid> \
|
|
232
|
+
--body-file ./decision.md \
|
|
233
|
+
--decider "Ada Lovelace <ada@example.com>" --decider "Grace Hopper"
|
|
234
|
+
|
|
235
|
+
# Log an open question from the same meeting
|
|
236
|
+
exponential decisions create -s "Do we backfill historical rows?" \
|
|
237
|
+
--status OPEN --meeting <meeting-cuid>
|
|
238
|
+
|
|
239
|
+
# Bulk: a JSON array of decisions in one call — the flags become its defaults.
|
|
240
|
+
# This is the path for filing everything that came out of one meeting.
|
|
241
|
+
exponential decisions create --from-file ./decisions.json --meeting <meeting-cuid> --source AGENT
|
|
242
|
+
jq '.decisions' notes.json | exponential decisions create --from-file - --meeting <meeting-cuid>
|
|
243
|
+
|
|
244
|
+
# Answer an open question; supersede or deprecate a decision
|
|
245
|
+
exponential decisions status --id <cuid> --status ACCEPTED
|
|
246
|
+
exponential decisions status --id <cuid> --status SUPERSEDED --superseded-by <cuid>
|
|
247
|
+
|
|
248
|
+
# Record what implements it (unlink takes the LINK id, from `decisions get`)
|
|
249
|
+
exponential decisions link --id <cuid> --ticket <ticket-cuid>
|
|
250
|
+
exponential decisions unlink --link <link-cuid>
|
|
251
|
+
|
|
252
|
+
# Let the server propose decisions from a meeting, then review them
|
|
253
|
+
exponential decisions draft extract --meeting <meeting-cuid>
|
|
254
|
+
exponential decisions draft confirm --id <cuid>
|
|
255
|
+
exponential decisions draft reject --id <cuid>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
`--from-file` takes a JSON array (or `{"decisions": [...]}`), each entry a create
|
|
259
|
+
input — `statement` is the only required field:
|
|
260
|
+
|
|
261
|
+
```json
|
|
262
|
+
[
|
|
263
|
+
{
|
|
264
|
+
"statement": "Ship the importer behind a flag",
|
|
265
|
+
"body": "## Context\n...\n## Consequences\n...",
|
|
266
|
+
"status": "ACCEPTED",
|
|
267
|
+
"deciders": ["Ada Lovelace <ada@example.com>"],
|
|
268
|
+
"evidence": [{ "turnIndex": 41, "speaker": "Ada", "text": "Behind a flag then." }]
|
|
269
|
+
},
|
|
270
|
+
{ "statement": "Do we backfill historical rows?", "status": "OPEN" }
|
|
271
|
+
]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Entries are written one at a time so a failure names the entry that failed; the
|
|
275
|
+
exit code is non-zero unless every entry landed.
|
|
276
|
+
|
|
277
|
+
Scope flags on the command (`--meeting`, `--workspace`, `--product`, `--source`,
|
|
278
|
+
`--status`, `--decided-at`, `--decider`, ...) apply to every entry that doesn't
|
|
279
|
+
set its own. `--body`, `--body-file` and `--evidence-file` are per-decision
|
|
280
|
+
content rather than shared scope, so they are refused alongside `--from-file` —
|
|
281
|
+
put `body` and `evidence` on the entries. An entry carrying a field this format
|
|
282
|
+
doesn't know (a typo'd `"decider"`, say) is rejected rather than filed without
|
|
283
|
+
it.
|
|
284
|
+
|
|
285
|
+
**Evidence is checked.** Turns are quotes from the meeting's transcript: the
|
|
286
|
+
`turnIndex` must resolve and the words must be that turn's (compared loosely for
|
|
287
|
+
case, punctuation and whitespace). Quotes that don't match are dropped by the
|
|
288
|
+
server without complaint, and `speaker`/`startTime` are replaced with the
|
|
289
|
+
transcript's own values — so evidence always needs `--meeting`, and the CLI
|
|
290
|
+
refuses it without one rather than letting the server reject the whole call.
|
|
291
|
+
|
|
292
|
+
Statuses: `OPEN` (an open question) · `PROPOSED` · `ACCEPTED` · `SUPERSEDED` ·
|
|
293
|
+
`DEPRECATED`. The last two are reached with `decisions status`, never at creation.
|
|
294
|
+
|
|
203
295
|
### Projects
|
|
204
296
|
|
|
205
297
|
```bash
|