@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 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 <composio_tool_slug> --args '{"key":"value"}' --json
172
+ dench tool run <tool_slug> --args '{"key":"value"}' --json
173
173
  ```
174
174
 
175
- `dench tool connect gmail`, `outlook`, `linkedin`, and `calendar` print Unipile
176
- hosted-auth links using the same application, scopes, and callback as the web
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 Unipile-backed state without requiring Composio.
186
- Other toolkits keep their existing connection provider. `--callback-url` is
187
- only supported for Composio connections; Unipile uses Dench's managed callback.
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 [lead-finding workflow](../convex/lib/seedSkills/lead-finding.md)
313
- and [sales pipeline playbook](../public/references/SALES.md).
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: create one, set its send windows, replace
319
- its steps from a `steps.json`, fill it from a CRM view or explicit record
320
- ids, launch it once the readiness check passes, and watch it. `<campaign>`
321
- is an id or an exact, case-insensitive name.
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 create --name "Founder outreach" --timezone America/Los_Angeles --window "Mon-Fri 9-18" --daily-cap 30 --email-mailboxes <mailboxId1>,<mailboxId2> --linkedin-accounts <linkedinId>
326
- dench campaign set <campaign> --email-mailboxes <mailboxId> --linkedin-accounts none
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 add <campaign> --object lead --view "Q3 targets"
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
- `steps set` works on drafts only; after launch, edit a step's text or wait
338
- time in the Dench app. The schedule, daily cap and stop-on-reply stay
339
- editable with `dench campaign set`. A campaign
340
- holds at most 300 people. Every command takes `--json`. The full guide,
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 Convex. The status probe
369
- does not scan the workspace, contact Convex, or start a mount worker.
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
- See the [daemon isolation and rollout notes](../docs/agent-notes/sandbox-execution.md#workspace-sync-daemon-cli-298)
403
- for recovery limits and why an existing process does not hot-upgrade.
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 Daytona sandbox the unified Dench API key is baked into envVars
408
- at create time (see `src/lib/secrets/sandbox-tokens.ts`). When
409
- `DENCH_API_KEY` and `CONVEX_URL` are both present, the CLI skips the
410
- `dench signin` flow entirely and uses the API key as a bearer for every
411
- org-scoped command — `dench crm`, `dench files`, `dench fs sync`, etc.
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. Explicit `--dev` flag → use the dev workspace env (`NEXT_PUBLIC_CONVEX_URL`,
427
- `DENCH_WORKSPACE`, `DENCH_DEV_AGENT_KEY`).
428
- 2. A locally-stored `dench signin` session for the current backend (set via
429
- `dench backend`, `--host`, `--prod`, or `--staging`).
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
- Explicit shell exports (`GATEWAY_URL=… ./dench …`) always win regardless.
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