@dench.com/cli 3.5.8-staging.350 → 3.6.0-staging.356
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 +65 -55
- package/app-sdk.d.ts +1286 -31
- package/apps.ts +1 -1
- package/campaign.ts +1949 -212
- package/crm.ts +21 -12
- package/cron.ts +6 -5
- package/dench.ts +76 -106
- package/fs-daemon.ts +6 -6
- package/image.ts +4 -4
- package/leads.ts +60 -22
- package/lib/api-schemas.ts +1094 -30
- package/lib/app-sdk-catalog.generated.ts +82 -6
- package/lib/app-sdk-surface.ts +240 -0
- package/lib/campaign-agent.ts +1564 -0
- package/lib/campaign-csv.ts +883 -0
- package/lib/campaign-filters.ts +141 -0
- package/lib/campaign-lines.ts +217 -0
- package/lib/campaign-steps.ts +721 -0
- package/lib/campaign-timeline.ts +189 -0
- package/lib/cli-version.ts +14 -0
- package/lib/command-registry.ts +491 -8
- package/lib/connection-source.ts +10 -0
- package/lib/enrichment-gateway.ts +11 -2
- package/lib/public-error.ts +41 -0
- package/lib/search-pricing.ts +9 -0
- package/package.json +1 -1
- package/search.ts +5 -34
- package/tools.ts +51 -42
- package/web.ts +1 -1
package/README.md
CHANGED
|
@@ -169,11 +169,11 @@ Other tool commands:
|
|
|
169
169
|
dench tool status [toolkit] --json
|
|
170
170
|
dench tool connect <toolkit> --json
|
|
171
171
|
dench tool search "list recent gmail emails" --toolkit gmail
|
|
172
|
-
dench tool run <
|
|
172
|
+
dench tool run <tool_slug> --args '{"key":"value"}' --json
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
`dench tool connect gmail`, `outlook`, `linkedin`, and `calendar` print
|
|
176
|
-
|
|
175
|
+
`dench tool connect gmail`, `outlook`, `linkedin`, and `calendar` print Dench
|
|
176
|
+
sign-in links using the same application, scopes, and callback as the web
|
|
177
177
|
app. Sign in with `dench signin` or use a member-owned Dench API key, then open
|
|
178
178
|
the returned link to authorize your account. New mailbox and LinkedIn
|
|
179
179
|
connections are private by default. An organization-only key cannot own a
|
|
@@ -182,9 +182,11 @@ personal connection.
|
|
|
182
182
|
Check the result with `dench tool status <toolkit> --json`. `calendar` shows
|
|
183
183
|
both Google and Outlook calendars; `google-calendar` (`googlecalendar`) and
|
|
184
184
|
`outlook-calendar` (`outlookcalendar`, `microsoft-calendar`) select one provider.
|
|
185
|
-
These status checks use
|
|
186
|
-
Other toolkits
|
|
187
|
-
|
|
185
|
+
These status checks use Dench's own connection state and need no gateway key.
|
|
186
|
+
Other toolkits connect as connected apps. `--callback-url` is only supported
|
|
187
|
+
for connected apps; Dench-connected accounts use Dench's managed callback.
|
|
188
|
+
In the JSON, each connection has a `source` of `app` or `dench`, and
|
|
189
|
+
`nativeAvailable: false` means Dench-connected accounts could not be checked.
|
|
188
190
|
|
|
189
191
|
Start with compact `dench tool search` output. It lists ranked tools with slug,
|
|
190
192
|
toolkit, connection status, and read-only/approval hints. Add `--json` only when
|
|
@@ -309,35 +311,62 @@ CRM records. Inspect the actual Lead status options first. Omit `--status`
|
|
|
309
311
|
to keep the default New; use `--enrichment enriched` for contact-bearing rows.
|
|
310
312
|
Enrichment is optional for explicit imports. Import sets status only, even
|
|
311
313
|
Qualified: it never purchases contacts, sends outreach, or converts records.
|
|
312
|
-
See the
|
|
313
|
-
|
|
314
|
+
See the `lead-finding` skill and the
|
|
315
|
+
[sales pipeline playbook](https://dench.com/references/SALES.md).
|
|
314
316
|
|
|
315
317
|
## Outreach campaigns
|
|
316
318
|
|
|
317
319
|
`dench campaign` runs email + LinkedIn outreach campaigns (the Outreach →
|
|
318
|
-
Campaigns page) from the terminal
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
320
|
+
Campaigns page) from the terminal, from a brief to a launch: search for people
|
|
321
|
+
with filters and exclusions, add them from a search, CSV, saved list, CRM view
|
|
322
|
+
or one at a time, write the steps and AI-written lines, preview the exact
|
|
323
|
+
messages, check readiness, launch, and follow the replies. `<campaign>` is an
|
|
324
|
+
id or an exact, case-insensitive name. Confirm `dench campaign help` lists
|
|
325
|
+
`draft`, `search`, `add`, `steps`, `person` and `preview`. It needs a workspace
|
|
326
|
+
member's credentials (`dench signin`), a paid workspace for searches, and
|
|
327
|
+
connected sender accounts (`dench campaign accounts` lists them).
|
|
322
328
|
|
|
323
329
|
```bash
|
|
324
|
-
dench campaign accounts --json # email + LinkedIn sender ids, availability and capacity
|
|
325
|
-
dench campaign
|
|
326
|
-
dench campaign
|
|
330
|
+
dench campaign accounts --json # email + LinkedIn sender ids, warm-up, availability and capacity
|
|
331
|
+
dench campaign draft --name "Founder outreach" --request-id founders-q4 --timezone America/Los_Angeles --window "Mon-Fri 9-18" --daily-cap 30 --email-mailboxes <mailboxId1>,<mailboxId2> --linkedin-accounts <linkedinId>
|
|
332
|
+
dench campaign search --filters '{"titles":["Founder"],"locations":["United States"]}' --not-industries "Staffing and Recruiting" --limit 25 --out audience.json
|
|
333
|
+
dench campaign add <campaign> --people-file audience.json
|
|
327
334
|
dench campaign steps set <campaign> --file steps.json
|
|
328
|
-
dench campaign
|
|
335
|
+
dench campaign personalize set <campaign> --file lines.json
|
|
336
|
+
dench campaign preview <campaign> --person "Ada Lovelace"
|
|
337
|
+
dench campaign launch <campaign> --check
|
|
329
338
|
dench campaign launch <campaign> --ack-linkedin-risk
|
|
330
339
|
dench campaign get <campaign> # status, schedule, funnel, Now/Next, holds, people
|
|
340
|
+
dench campaign replies <campaign> --since 7d
|
|
331
341
|
dench campaign people <campaign> --status paused
|
|
332
342
|
dench campaign events <campaign>
|
|
333
343
|
dench campaign pause|resume|archive <campaign>
|
|
334
344
|
dench campaign stop <campaign> --person <enrollmentId>
|
|
335
345
|
```
|
|
336
346
|
|
|
337
|
-
`
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
347
|
+
`dench campaign create --name "Founder outreach"` makes the same kind of draft
|
|
348
|
+
as `draft` (which also takes `--request-id`, so a retry returns the same
|
|
349
|
+
draft). A search costs 1 cent per person returned and prints the most it can
|
|
350
|
+
cost before it runs; `add --people-file` adds those people without searching
|
|
351
|
+
again. Other ways to fill a campaign:
|
|
352
|
+
`add <campaign> --csv people.csv`, `--list <artifactId>` (a saved Find list),
|
|
353
|
+
`--search '<filters json>'` (search and add in one billed call),
|
|
354
|
+
`--object lead --view "Q3 targets"`, `--object people --entries <id1>,<id2>`,
|
|
355
|
+
or `--email ada@example.com` for one person. `--not-industries`,
|
|
356
|
+
`--not-titles`, `--not-domains` and the other `--not-<filter>` flags leave
|
|
357
|
+
values out of a search.
|
|
358
|
+
|
|
359
|
+
A campaign holds at most 300 people; for more, `dench campaign duplicate
|
|
360
|
+
<campaign>` makes a new draft with the same steps, schedule and senders, and no
|
|
361
|
+
people, and the next page of the search goes into the copy. Fix a mistake in a
|
|
362
|
+
draft with `dench campaign remove <campaign> --person <enrollmentId>` or
|
|
363
|
+
`dench campaign person set`; `dench campaign sync` pulls new contact details
|
|
364
|
+
from the CRM records. `steps set` replaces every step and works on drafts only;
|
|
365
|
+
`steps edit --file steps.json` changes a step's text and waits in place, also
|
|
366
|
+
after launch. `launch --check` never launches: it lists each blocker with the
|
|
367
|
+
command that fixes it and exits 1 when blocked. The schedule, daily cap and
|
|
368
|
+
stop-on-reply stay editable with `dench campaign set`. Every command takes
|
|
369
|
+
`--json`. The full guide, from reading a brief to monitoring the launch,
|
|
341
370
|
including the `steps.json` shape and the `--window` spec, is
|
|
342
371
|
`references/CAMPAIGNS.md` (`dench campaign help` for the flag list).
|
|
343
372
|
`dench email multichannel` drives the same campaigns with fewer controls.
|
|
@@ -365,8 +394,9 @@ is refused.
|
|
|
365
394
|
## Workspace sync
|
|
366
395
|
|
|
367
396
|
Starting with CLI 2.9.8, `dench fs status` reports cached local daemon
|
|
368
|
-
health, not a live comparison between disk and
|
|
369
|
-
does not scan the workspace, contact
|
|
397
|
+
health, not a live comparison between disk and the cloud copy. The status
|
|
398
|
+
probe does not scan the workspace, contact the backend, or start a mount
|
|
399
|
+
worker.
|
|
370
400
|
|
|
371
401
|
```bash
|
|
372
402
|
dench fs status --json
|
|
@@ -399,20 +429,19 @@ Successful `--wait` means the downloaded original passed its SHA-256 check
|
|
|
399
429
|
and the write finished before the deadline. Without `--wait`, success
|
|
400
430
|
means only that the request was queued.
|
|
401
431
|
|
|
402
|
-
|
|
403
|
-
|
|
432
|
+
A running daemon process does not hot-upgrade: restart it after installing a
|
|
433
|
+
new CLI.
|
|
404
434
|
|
|
405
435
|
## Sandbox / API key auth (no `dench signin` required)
|
|
406
436
|
|
|
407
|
-
Inside a
|
|
408
|
-
|
|
409
|
-
`
|
|
410
|
-
`dench
|
|
411
|
-
|
|
437
|
+
Inside a Dench sandbox the Dench API key is set in the environment when the
|
|
438
|
+
sandbox starts. When `DENCH_API_KEY` is present, the CLI skips the
|
|
439
|
+
`dench signin` flow entirely and uses the key as a bearer for every org-scoped
|
|
440
|
+
command — `dench crm`, `dench files`, `dench fs sync`, etc. The key targets
|
|
441
|
+
production.
|
|
412
442
|
|
|
413
443
|
```bash
|
|
414
444
|
export DENCH_API_KEY=dench_pk_live_…
|
|
415
|
-
export CONVEX_URL=https://your-convex-deployment.convex.cloud
|
|
416
445
|
# Optional but enables nicer URLs in CLI output:
|
|
417
446
|
export DENCH_API_URL=https://app.dench.com
|
|
418
447
|
export DENCH_ORG_ID=…
|
|
@@ -423,32 +452,13 @@ dench crm entries list people
|
|
|
423
452
|
|
|
424
453
|
Auth precedence:
|
|
425
454
|
|
|
426
|
-
1.
|
|
427
|
-
`
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
3. `DENCH_API_KEY` + `CONVEX_URL` (sandbox / automation path).
|
|
431
|
-
|
|
432
|
-
Plain terminal usage does not silently fall back to dev env vars. Without
|
|
433
|
-
`--dev`, a saved session, or `DENCH_API_KEY` + `CONVEX_URL`, live commands
|
|
434
|
-
return `login_required`.
|
|
435
|
-
|
|
436
|
-
### `.env` auto-load is opt-in
|
|
437
|
-
|
|
438
|
-
When `dench` runs from inside the `dench.com` repo it does **not**
|
|
439
|
-
auto-load workspace `.env` / `.env.local` files by default — that used
|
|
440
|
-
to silently flip `NEXT_PUBLIC_CONVEX_URL` to the dev Convex deployment
|
|
441
|
-
and made the CLI talk to local Convex even when the user expected
|
|
442
|
-
production.
|
|
443
|
-
|
|
444
|
-
Auto-load now turns on only when one of:
|
|
445
|
-
|
|
446
|
-
- `--dev` (also switches the runtime to dev-workspace mode)
|
|
447
|
-
- `--use-dev-env` (load `.env` files but keep the rest of the runtime)
|
|
448
|
-
- `DENCH_USE_DEV_ENV=1` in the shell env (e.g. via `direnv`)
|
|
449
|
-
- `dench backend set local` (a stored local backend implies dev env)
|
|
455
|
+
1. A locally-stored `dench signin` session for the current backend (set via
|
|
456
|
+
`dench backend`, `--host`, `--prod`, or `--staging`; `DENCH_HOST=<url>`
|
|
457
|
+
does the same for one command).
|
|
458
|
+
2. `DENCH_API_KEY` (sandbox / automation path).
|
|
450
459
|
|
|
451
|
-
|
|
460
|
+
Plain terminal usage without a saved session or `DENCH_API_KEY` returns
|
|
461
|
+
`login_required`.
|
|
452
462
|
|
|
453
463
|
Commands that need to impersonate a specific agent (`dench memory`,
|
|
454
464
|
`dench approval request`, etc.) still require an agent session
|