@audienti/cli 0.1.11 → 0.1.17
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 +50 -0
- package/README.md +48 -0
- package/package.json +1 -1
- package/skills/audienti/SKILL.md +3 -0
- package/src/api-client.js +177 -0
- package/src/cli.js +1887 -156
package/CHANGELOG.md
CHANGED
|
@@ -4,12 +4,62 @@ All notable changes to the Audienti CLI are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.1.17] - 2026-07-17
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Add `audienti dnc list/add/import/remove` for account DNC settings.
|
|
12
|
+
- Add `audienti company-rules list/create/update/remove/apply` for account-wide and user-scoped company disposition policies.
|
|
13
|
+
|
|
14
|
+
## [0.1.16] - 2026-07-17
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Add direct prospect emergency state commands: `audienti prospects set-status`, `audienti prospects lock`, and `audienti prospects unlock`.
|
|
19
|
+
|
|
20
|
+
## [0.1.15] - 2026-07-16
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- Add `audienti prospects check` for listing people missing certified company employment citations, with direct app URLs for operator review.
|
|
25
|
+
- Add `audienti motions run-discovery` for queuing immediate discovery through the API launch gate.
|
|
26
|
+
- Add `audienti analytics dashboard` for CLI access to campaign cohort counts, including distinct company targets filtered by play tag, motion, offer, ICP, or user.
|
|
27
|
+
|
|
28
|
+
## [0.1.14] - 2026-07-16
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- Add `audienti update check` for comparing the local CLI version to the latest published `@audienti/cli` package.
|
|
33
|
+
|
|
34
|
+
## [0.1.13] - 2026-07-16
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Add ICP tags to `audienti icps list/create/update` and add `audienti icps add-tag/remove-tag`.
|
|
39
|
+
- Include ICP usage in `audienti tags list` and `audienti tags show <tag>`.
|
|
40
|
+
- Add `audienti icps show <icp_id>` for single ICP inspection.
|
|
41
|
+
- Add full offer CLI/API CRUD with `audienti offers show/update/delete`.
|
|
42
|
+
- Add `audienti prospects reject`, `audienti prospects nurture`, and `audienti prospects restore` through the shared prospect disposition paths.
|
|
43
|
+
|
|
44
|
+
## [0.1.12] - 2026-07-16
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- 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.
|
|
49
|
+
- Allow tags to be sent during list create/update and motion create/update payloads.
|
|
50
|
+
- Add `audienti tags list` to show normalized list and motion tags currently in use.
|
|
51
|
+
- Add `audienti tags show <tag>` plus `--tag` filters for list and motion listing commands.
|
|
52
|
+
|
|
7
53
|
## [0.1.11] - 2026-07-15
|
|
8
54
|
|
|
9
55
|
### Added
|
|
10
56
|
|
|
11
57
|
- 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
58
|
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- Restrict inbound motion creation to the executable LinkedIn and Reddit channels and reject undeployed channel names.
|
|
62
|
+
|
|
13
63
|
## [0.1.10] - 2026-07-15
|
|
14
64
|
|
|
15
65
|
### Added
|
package/README.md
CHANGED
|
@@ -57,23 +57,38 @@ 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
|
|
73
|
+
audienti prospects set-status <prsp_id> --status not_fit
|
|
74
|
+
audienti prospects lock <prsp_id> --note "Emergency hold"
|
|
75
|
+
audienti dnc list
|
|
76
|
+
audienti company-rules list
|
|
70
77
|
audienti users activity --window 7d
|
|
71
78
|
audienti analytics prospects --window 24h
|
|
79
|
+
audienti analytics dashboard --play-tag wine_campaign
|
|
72
80
|
audienti analytics users --user me --window 30d
|
|
73
81
|
audienti analytics visibility --window 24h --user me
|
|
74
82
|
audienti analytics content --window week
|
|
75
83
|
```
|
|
76
84
|
|
|
85
|
+
To let an agent or operator check whether the local CLI is behind the latest
|
|
86
|
+
published package:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
audienti update check --json
|
|
90
|
+
```
|
|
91
|
+
|
|
77
92
|
To work the supported prospect operator queue from the CLI, inspect the next move
|
|
78
93
|
and record the outcome against that same row:
|
|
79
94
|
|
|
@@ -102,6 +117,20 @@ produced-day cohort currently sits in the funnel:
|
|
|
102
117
|
audienti motions analytics <motn_id>
|
|
103
118
|
```
|
|
104
119
|
|
|
120
|
+
To count the people and distinct companies currently targeted by one campaign
|
|
121
|
+
tag without waiting on the web dashboard filter:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
audienti analytics dashboard --play-tag wine_campaign --cohort-start 2026-07-01 --cohort-end 2026-07-07
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
To queue an immediate discovery run for a motion through the same launch gate
|
|
128
|
+
used by the operator surface:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
audienti motions run-discovery <motn_id>
|
|
132
|
+
```
|
|
133
|
+
|
|
105
134
|
To audit one account user's outbound actions, optionally narrowed to one motion
|
|
106
135
|
and one AccountProspect.created_at cohort:
|
|
107
136
|
|
|
@@ -145,6 +174,25 @@ audienti prospects assign <prsp_id> --assigned-user <account_user_id|me>
|
|
|
145
174
|
audienti prospects assign <prsp_id> --assigned-user unassign
|
|
146
175
|
```
|
|
147
176
|
|
|
177
|
+
To make emergency prospect state changes without going through a motion:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
audienti prospects set-status <prsp_id> --status nurture
|
|
181
|
+
audienti prospects set-status <prsp_id> --status not_fit
|
|
182
|
+
audienti prospects lock <prsp_id> --note "Emergency hold"
|
|
183
|
+
audienti prospects unlock <prsp_id>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
To manage account DNC and company disposition rules from the CLI:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
audienti dnc add prospect@example.com
|
|
190
|
+
audienti dnc import --file dnc.txt
|
|
191
|
+
audienti company-rules create --linkedin-url https://www.linkedin.com/company/example --disposition monitor
|
|
192
|
+
audienti company-rules create --domain example.com --disposition not_fit --user me
|
|
193
|
+
audienti company-rules apply --all
|
|
194
|
+
```
|
|
195
|
+
|
|
148
196
|
To import multiple LinkedIn people through the same per-prospect import path:
|
|
149
197
|
|
|
150
198
|
```bash
|
package/package.json
CHANGED
package/skills/audienti/SKILL.md
CHANGED
|
@@ -53,6 +53,9 @@ audienti help agent-workflows
|
|
|
53
53
|
audienti prospects list --query "name or company" --wide --json
|
|
54
54
|
audienti prospects list --assigned-user unassigned --json
|
|
55
55
|
audienti prospects assign <prsp_id> --assigned-user me --json
|
|
56
|
+
audienti prospects set-status <prsp_id> --status not_fit --json
|
|
57
|
+
audienti prospects lock <prsp_id> --note "Emergency hold" --json
|
|
58
|
+
audienti prospects unlock <prsp_id> --json
|
|
56
59
|
audienti users activity me --window 7d --json
|
|
57
60
|
audienti prospects import-batch --file prospects.csv --motion <motn_id> --assigned-user me --json
|
|
58
61
|
audienti lists create --name "Target list" --json
|
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,95 @@ 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
|
+
dncEntries(accountId, query = {}) {
|
|
119
|
+
return this.requestJson(accountPath(accountId, ["dnc"], query));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
createDncEntry(accountId, body) {
|
|
123
|
+
return this.requestJson(accountPath(accountId, ["dnc"]), {
|
|
124
|
+
method: "POST",
|
|
125
|
+
body
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
importDncEntries(accountId, body) {
|
|
130
|
+
return this.requestJson(accountPath(accountId, ["dnc", "import"]), {
|
|
131
|
+
method: "POST",
|
|
132
|
+
body
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
deleteDncEntry(accountId, entryId) {
|
|
137
|
+
return this.requestJson(accountPath(accountId, ["dnc", entryId]), {
|
|
138
|
+
method: "DELETE"
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
companyRules(accountId) {
|
|
143
|
+
return this.requestJson(accountPath(accountId, ["company_rules"]));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
createCompanyRule(accountId, body) {
|
|
147
|
+
return this.requestJson(accountPath(accountId, ["company_rules"]), {
|
|
148
|
+
method: "POST",
|
|
149
|
+
body
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
updateCompanyRule(accountId, ruleId, body) {
|
|
154
|
+
return this.requestJson(accountPath(accountId, ["company_rules", ruleId]), {
|
|
155
|
+
method: "PATCH",
|
|
156
|
+
body
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
deleteCompanyRule(accountId, ruleId) {
|
|
161
|
+
return this.requestJson(accountPath(accountId, ["company_rules", ruleId]), {
|
|
162
|
+
method: "DELETE"
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
applyCompanyRule(accountId, ruleId) {
|
|
167
|
+
return this.requestJson(accountPath(accountId, ["company_rules", ruleId, "apply"]), {
|
|
168
|
+
method: "POST"
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
applyAllCompanyRules(accountId) {
|
|
173
|
+
return this.requestJson(accountPath(accountId, ["company_rules", "apply_all"]), {
|
|
174
|
+
method: "POST"
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
tags(accountId) {
|
|
179
|
+
return this.requestJson(accountPath(accountId, ["tags"]));
|
|
180
|
+
}
|
|
181
|
+
|
|
76
182
|
lists(accountId) {
|
|
77
183
|
return this.requestJson(accountPath(accountId, ["lists"]));
|
|
78
184
|
}
|
|
@@ -95,6 +201,20 @@ export class AudientiClient {
|
|
|
95
201
|
});
|
|
96
202
|
}
|
|
97
203
|
|
|
204
|
+
addListTag(accountId, listId, body) {
|
|
205
|
+
return this.requestJson(accountPath(accountId, ["lists", listId, "add_tag"]), {
|
|
206
|
+
method: "POST",
|
|
207
|
+
body
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
removeListTag(accountId, listId, body) {
|
|
212
|
+
return this.requestJson(accountPath(accountId, ["lists", listId, "remove_tag"]), {
|
|
213
|
+
method: "DELETE",
|
|
214
|
+
body
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
98
218
|
deleteList(accountId, listId) {
|
|
99
219
|
return this.requestJson(accountPath(accountId, ["lists", listId]), {
|
|
100
220
|
method: "DELETE"
|
|
@@ -141,6 +261,20 @@ export class AudientiClient {
|
|
|
141
261
|
});
|
|
142
262
|
}
|
|
143
263
|
|
|
264
|
+
addMotionTag(accountId, motionId, body) {
|
|
265
|
+
return this.requestJson(accountPath(accountId, ["motions", motionId, "add_tag"]), {
|
|
266
|
+
method: "POST",
|
|
267
|
+
body
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
removeMotionTag(accountId, motionId, body) {
|
|
272
|
+
return this.requestJson(accountPath(accountId, ["motions", motionId, "remove_tag"]), {
|
|
273
|
+
method: "DELETE",
|
|
274
|
+
body
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
144
278
|
deleteMotion(accountId, motionId) {
|
|
145
279
|
return this.requestJson(accountPath(accountId, ["motions", motionId]), {
|
|
146
280
|
method: "DELETE"
|
|
@@ -165,6 +299,13 @@ export class AudientiClient {
|
|
|
165
299
|
return this.requestJson(accountPath(accountId, ["motions", motionId, "status"]));
|
|
166
300
|
}
|
|
167
301
|
|
|
302
|
+
runMotionDiscovery(accountId, motionId, body = {}) {
|
|
303
|
+
return this.requestJson(accountPath(accountId, ["motions", motionId, "run_discovery"]), {
|
|
304
|
+
method: "POST",
|
|
305
|
+
body
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
168
309
|
motionProspects(accountId, motionId, query = {}) {
|
|
169
310
|
return this.requestJson(accountPath(accountId, ["motions", motionId, "prospects"], query));
|
|
170
311
|
}
|
|
@@ -206,6 +347,38 @@ export class AudientiClient {
|
|
|
206
347
|
});
|
|
207
348
|
}
|
|
208
349
|
|
|
350
|
+
rejectProspect(accountId, prospectId) {
|
|
351
|
+
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "reject"]), {
|
|
352
|
+
method: "POST"
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
nurtureProspect(accountId, prospectId, body = {}) {
|
|
357
|
+
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "nurture"]), {
|
|
358
|
+
method: "POST",
|
|
359
|
+
body
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
restoreProspect(accountId, prospectId) {
|
|
364
|
+
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "restore"]), {
|
|
365
|
+
method: "POST"
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
lockProspect(accountId, prospectId, body = {}) {
|
|
370
|
+
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "lock"]), {
|
|
371
|
+
method: "POST",
|
|
372
|
+
body
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
unlockProspect(accountId, prospectId) {
|
|
377
|
+
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "unlock"]), {
|
|
378
|
+
method: "POST"
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
|
|
209
382
|
prospectSequencePreview(accountId, prospectId, body = {}) {
|
|
210
383
|
return this.requestJson(accountPath(accountId, ["prospects", prospectId, "sequence_preview"]), {
|
|
211
384
|
method: "POST",
|
|
@@ -283,6 +456,10 @@ export class AudientiClient {
|
|
|
283
456
|
return this.requestJson(accountPath(accountId, ["analytics", "content"], query));
|
|
284
457
|
}
|
|
285
458
|
|
|
459
|
+
analyticsDashboard(accountId, query = {}) {
|
|
460
|
+
return this.requestJson(accountPath(accountId, ["analytics", "dashboard"], query));
|
|
461
|
+
}
|
|
462
|
+
|
|
286
463
|
async requestJson(path, { method = "GET", body } = {}) {
|
|
287
464
|
const response = await this.fetchImpl(new URL(path, `${this.host}/`), {
|
|
288
465
|
method,
|