@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 +37 -0
- package/README.md +25 -0
- package/package.json +1 -1
- package/src/api-client.js +104 -0
- package/src/cli.js +1327 -98
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
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,
|