@audienti/cli 0.1.11 → 0.1.15

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 CHANGED
@@ -4,12 +4,49 @@ All notable changes to the Audienti CLI are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.1.15] - 2026-07-16
8
+
9
+ ### Added
10
+
11
+ - Add `audienti prospects check` for listing people missing certified company employment citations, with direct app URLs for operator review.
12
+ - Add `audienti motions run-discovery` for queuing immediate discovery through the API launch gate.
13
+ - Add `audienti analytics dashboard` for CLI access to campaign cohort counts, including distinct company targets filtered by play tag, motion, offer, ICP, or user.
14
+
15
+ ## [0.1.14] - 2026-07-16
16
+
17
+ ### Added
18
+
19
+ - Add `audienti update check` for comparing the local CLI version to the latest published `@audienti/cli` package.
20
+
21
+ ## [0.1.13] - 2026-07-16
22
+
23
+ ### Added
24
+
25
+ - Add ICP tags to `audienti icps list/create/update` and add `audienti icps add-tag/remove-tag`.
26
+ - Include ICP usage in `audienti tags list` and `audienti tags show <tag>`.
27
+ - Add `audienti icps show <icp_id>` for single ICP inspection.
28
+ - Add full offer CLI/API CRUD with `audienti offers show/update/delete`.
29
+ - Add `audienti prospects reject`, `audienti prospects nurture`, and `audienti prospects restore` through the shared prospect disposition paths.
30
+
31
+ ## [0.1.12] - 2026-07-16
32
+
33
+ ### Added
34
+
35
+ - Add `audienti motions add-tag/remove-tag` and `audienti lists add-tag/remove-tag` for managing play and list tags through the CLI/API contract.
36
+ - Allow tags to be sent during list create/update and motion create/update payloads.
37
+ - Add `audienti tags list` to show normalized list and motion tags currently in use.
38
+ - Add `audienti tags show <tag>` plus `--tag` filters for list and motion listing commands.
39
+
7
40
  ## [0.1.11] - 2026-07-15
8
41
 
9
42
  ### Added
10
43
 
11
44
  - Add `audienti users select <account_user_id|email|name|me>` to save a default account user for CLI commands that accept `me` or default to the current operator.
12
45
 
46
+ ### Changed
47
+
48
+ - Restrict inbound motion creation to the executable LinkedIn and Reddit channels and reject undeployed channel names.
49
+
13
50
  ## [0.1.10] - 2026-07-15
14
51
 
15
52
  ### Added
package/README.md CHANGED
@@ -57,23 +57,34 @@ creating, changing, or deleting data.
57
57
  Common inspection commands:
58
58
 
59
59
  ```bash
60
+ audienti update check
60
61
  audienti operator next --plan
61
62
  audienti writer test-run <prsp_id>
62
63
  audienti motions analytics <motn_id>
64
+ audienti motions run-discovery <motn_id>
63
65
  audienti motions update <motn_id> --status paused
64
66
  audienti motions activate <motn_id>
65
67
  audienti motions delete <motn_id> --confirm yes
66
68
  audienti prospects show <prsp_id> --json
67
69
  audienti prospects list --profiles
68
70
  audienti prospects list --assigned-user unassigned
71
+ audienti prospects check --all --csv
69
72
  audienti prospects assign <prsp_id> --assigned-user me
70
73
  audienti users activity --window 7d
71
74
  audienti analytics prospects --window 24h
75
+ audienti analytics dashboard --play-tag wine_campaign
72
76
  audienti analytics users --user me --window 30d
73
77
  audienti analytics visibility --window 24h --user me
74
78
  audienti analytics content --window week
75
79
  ```
76
80
 
81
+ To let an agent or operator check whether the local CLI is behind the latest
82
+ published package:
83
+
84
+ ```bash
85
+ audienti update check --json
86
+ ```
87
+
77
88
  To work the supported prospect operator queue from the CLI, inspect the next move
78
89
  and record the outcome against that same row:
79
90
 
@@ -102,6 +113,20 @@ produced-day cohort currently sits in the funnel:
102
113
  audienti motions analytics <motn_id>
103
114
  ```
104
115
 
116
+ To count the people and distinct companies currently targeted by one campaign
117
+ tag without waiting on the web dashboard filter:
118
+
119
+ ```bash
120
+ audienti analytics dashboard --play-tag wine_campaign --cohort-start 2026-07-01 --cohort-end 2026-07-07
121
+ ```
122
+
123
+ To queue an immediate discovery run for a motion through the same launch gate
124
+ used by the operator surface:
125
+
126
+ ```bash
127
+ audienti motions run-discovery <motn_id>
128
+ ```
129
+
105
130
  To audit one account user's outbound actions, optionally narrowed to one motion
106
131
  and one AccountProspect.created_at cohort:
107
132
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@audienti/cli",
3
- "version": "0.1.11",
3
+ "version": "0.1.15",
4
4
  "description": "Agent-first command-line client for Audienti.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/api-client.js CHANGED
@@ -51,6 +51,10 @@ export class AudientiClient {
51
51
  return this.requestJson(accountPath(accountId, ["offers"]));
52
52
  }
53
53
 
54
+ offer(accountId, offerId) {
55
+ return this.requestJson(accountPath(accountId, ["offers", offerId]));
56
+ }
57
+
54
58
  createOffer(accountId, body) {
55
59
  return this.requestJson(accountPath(accountId, ["offers"]), {
56
60
  method: "POST",
@@ -58,10 +62,27 @@ export class AudientiClient {
58
62
  });
59
63
  }
60
64
 
65
+ updateOffer(accountId, offerId, body) {
66
+ return this.requestJson(accountPath(accountId, ["offers", offerId]), {
67
+ method: "PATCH",
68
+ body
69
+ });
70
+ }
71
+
72
+ deleteOffer(accountId, offerId) {
73
+ return this.requestJson(accountPath(accountId, ["offers", offerId]), {
74
+ method: "DELETE"
75
+ });
76
+ }
77
+
61
78
  icps(accountId) {
62
79
  return this.requestJson(accountPath(accountId, ["icps"]));
63
80
  }
64
81
 
82
+ icp(accountId, icpId) {
83
+ return this.requestJson(accountPath(accountId, ["icps", icpId]));
84
+ }
85
+
65
86
  createIcp(accountId, body) {
66
87
  return this.requestJson(accountPath(accountId, ["icps"]), {
67
88
  method: "POST",
@@ -69,10 +90,35 @@ export class AudientiClient {
69
90
  });
70
91
  }
71
92
 
93
+ updateIcp(accountId, icpId, body) {
94
+ return this.requestJson(accountPath(accountId, ["icps", icpId]), {
95
+ method: "PATCH",
96
+ body
97
+ });
98
+ }
99
+
100
+ addIcpTag(accountId, icpId, body) {
101
+ return this.requestJson(accountPath(accountId, ["icps", icpId, "add_tag"]), {
102
+ method: "POST",
103
+ body
104
+ });
105
+ }
106
+
107
+ removeIcpTag(accountId, icpId, body) {
108
+ return this.requestJson(accountPath(accountId, ["icps", icpId, "remove_tag"]), {
109
+ method: "DELETE",
110
+ body
111
+ });
112
+ }
113
+
72
114
  companies(accountId, query = {}) {
73
115
  return this.requestJson(accountPath(accountId, ["companies"], query));
74
116
  }
75
117
 
118
+ tags(accountId) {
119
+ return this.requestJson(accountPath(accountId, ["tags"]));
120
+ }
121
+
76
122
  lists(accountId) {
77
123
  return this.requestJson(accountPath(accountId, ["lists"]));
78
124
  }
@@ -95,6 +141,20 @@ export class AudientiClient {
95
141
  });
96
142
  }
97
143
 
144
+ addListTag(accountId, listId, body) {
145
+ return this.requestJson(accountPath(accountId, ["lists", listId, "add_tag"]), {
146
+ method: "POST",
147
+ body
148
+ });
149
+ }
150
+
151
+ removeListTag(accountId, listId, body) {
152
+ return this.requestJson(accountPath(accountId, ["lists", listId, "remove_tag"]), {
153
+ method: "DELETE",
154
+ body
155
+ });
156
+ }
157
+
98
158
  deleteList(accountId, listId) {
99
159
  return this.requestJson(accountPath(accountId, ["lists", listId]), {
100
160
  method: "DELETE"
@@ -141,6 +201,20 @@ export class AudientiClient {
141
201
  });
142
202
  }
143
203
 
204
+ addMotionTag(accountId, motionId, body) {
205
+ return this.requestJson(accountPath(accountId, ["motions", motionId, "add_tag"]), {
206
+ method: "POST",
207
+ body
208
+ });
209
+ }
210
+
211
+ removeMotionTag(accountId, motionId, body) {
212
+ return this.requestJson(accountPath(accountId, ["motions", motionId, "remove_tag"]), {
213
+ method: "DELETE",
214
+ body
215
+ });
216
+ }
217
+
144
218
  deleteMotion(accountId, motionId) {
145
219
  return this.requestJson(accountPath(accountId, ["motions", motionId]), {
146
220
  method: "DELETE"
@@ -165,6 +239,13 @@ export class AudientiClient {
165
239
  return this.requestJson(accountPath(accountId, ["motions", motionId, "status"]));
166
240
  }
167
241
 
242
+ runMotionDiscovery(accountId, motionId, body = {}) {
243
+ return this.requestJson(accountPath(accountId, ["motions", motionId, "run_discovery"]), {
244
+ method: "POST",
245
+ body
246
+ });
247
+ }
248
+
168
249
  motionProspects(accountId, motionId, query = {}) {
169
250
  return this.requestJson(accountPath(accountId, ["motions", motionId, "prospects"], query));
170
251
  }
@@ -206,6 +287,25 @@ export class AudientiClient {
206
287
  });
207
288
  }
208
289
 
290
+ rejectProspect(accountId, prospectId) {
291
+ return this.requestJson(accountPath(accountId, ["prospects", prospectId, "reject"]), {
292
+ method: "POST"
293
+ });
294
+ }
295
+
296
+ nurtureProspect(accountId, prospectId, body = {}) {
297
+ return this.requestJson(accountPath(accountId, ["prospects", prospectId, "nurture"]), {
298
+ method: "POST",
299
+ body
300
+ });
301
+ }
302
+
303
+ restoreProspect(accountId, prospectId) {
304
+ return this.requestJson(accountPath(accountId, ["prospects", prospectId, "restore"]), {
305
+ method: "POST"
306
+ });
307
+ }
308
+
209
309
  prospectSequencePreview(accountId, prospectId, body = {}) {
210
310
  return this.requestJson(accountPath(accountId, ["prospects", prospectId, "sequence_preview"]), {
211
311
  method: "POST",
@@ -283,6 +383,10 @@ export class AudientiClient {
283
383
  return this.requestJson(accountPath(accountId, ["analytics", "content"], query));
284
384
  }
285
385
 
386
+ analyticsDashboard(accountId, query = {}) {
387
+ return this.requestJson(accountPath(accountId, ["analytics", "dashboard"], query));
388
+ }
389
+
286
390
  async requestJson(path, { method = "GET", body } = {}) {
287
391
  const response = await this.fetchImpl(new URL(path, `${this.host}/`), {
288
392
  method,