exponential-cli 1.14.0 → 1.18.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 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 `/tokens`
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://app.exponential.so
29
+ exponential auth login --token <your-jwt-token> --api-url https://www.exponential.im
30
30
  ```
31
31
 
32
32
  ### 3. Verify Authentication
@@ -207,6 +207,91 @@ exponential meetings notes set <cuid> --file notes.md # or inline, or -
207
207
  exponential meetings notes append <cuid> "Follow-up: ship it" # separated by a blank line
208
208
  ```
209
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
+
210
295
  ### Projects
211
296
 
212
297
  ```bash