@vellumai/assistant 0.4.36 → 0.4.40
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/ARCHITECTURE.md +3 -3
- package/README.md +13 -13
- package/bun.lock +80 -24
- package/docs/architecture/integrations.md +126 -128
- package/docs/runbook-trusted-contacts.md +1 -1
- package/docs/trusted-contact-access.md +12 -12
- package/package.json +4 -2
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -14
- package/src/__tests__/app-bundler.test.ts +209 -0
- package/src/__tests__/app-compiler.test.ts +279 -0
- package/src/__tests__/app-executors.test.ts +293 -483
- package/src/__tests__/app-migration.test.ts +148 -0
- package/src/__tests__/app-routes-csp.test.ts +202 -0
- package/src/__tests__/avatar-e2e.test.ts +452 -0
- package/src/__tests__/avatar-generator.test.ts +193 -0
- package/src/__tests__/avatar-router.test.ts +186 -0
- package/src/__tests__/browser-download-timeout.test.ts +28 -0
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +9 -9
- package/src/__tests__/call-domain.test.ts +3 -7
- package/src/__tests__/credential-security-e2e.test.ts +19 -12
- package/src/__tests__/credentials-cli.test.ts +38 -4
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +1 -1
- package/src/__tests__/handlers-slack-config.test.ts +0 -72
- package/src/__tests__/handlers-telegram-config.test.ts +19 -12
- package/src/__tests__/handlers-twitter-config.test.ts +105 -48
- package/src/__tests__/inbound-invite-redemption.test.ts +4 -4
- package/src/__tests__/integration-status.test.ts +15 -5
- package/src/__tests__/integrations-cli.test.ts +1 -1
- package/src/__tests__/invite-redemption-service.test.ts +62 -7
- package/src/__tests__/ipc-snapshot.test.ts +0 -8
- package/src/__tests__/managed-avatar-client.test.ts +280 -0
- package/src/__tests__/mcp-cli.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +203 -0
- package/src/__tests__/relay-server.test.ts +3 -3
- package/src/__tests__/secret-onetime-send.test.ts +19 -12
- package/src/__tests__/secure-keys.test.ts +78 -0
- package/src/__tests__/session-messaging-secret-redirect.test.ts +3 -0
- package/src/__tests__/slack-channel-config.test.ts +23 -16
- package/src/__tests__/slack-share-routes.test.ts +263 -0
- package/src/__tests__/sms-messaging-provider.test.ts +3 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +7 -7
- package/src/__tests__/trusted-contact-multichannel.test.ts +3 -3
- package/src/__tests__/trusted-contact-verification.test.ts +10 -10
- package/src/__tests__/twilio-config.test.ts +15 -36
- package/src/__tests__/twilio-provider.test.ts +4 -0
- package/src/__tests__/twitter-auth-handler.test.ts +27 -14
- package/src/__tests__/twitter-cli-error-shaping.test.ts +1 -1
- package/src/__tests__/twitter-cli-routing.test.ts +38 -53
- package/src/__tests__/twitter-oauth-client.test.ts +18 -47
- package/src/__tests__/voice-invite-redemption.test.ts +27 -3
- package/src/amazon/cart.ts +1 -1
- package/src/amazon/client.ts +89 -7
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/bundler/app-bundler.ts +77 -32
- package/src/bundler/app-compiler.ts +195 -0
- package/src/bundler/manifest.ts +1 -1
- package/src/bundler/package-resolver.ts +185 -0
- package/src/calls/call-domain.ts +4 -14
- package/src/calls/relay-server.ts +2 -2
- package/src/calls/twilio-config.ts +5 -24
- package/src/calls/twilio-rest.ts +19 -5
- package/src/cli/AGENTS.md +1 -1
- package/src/cli/amazon.ts +74 -249
- package/src/cli/audit.ts +2 -2
- package/src/cli/autonomy.ts +9 -9
- package/src/cli/channels.ts +5 -5
- package/src/cli/completions.ts +27 -27
- package/src/cli/config.ts +14 -14
- package/src/cli/contacts.ts +27 -27
- package/src/cli/credentials.ts +29 -29
- package/src/cli/dev.ts +2 -2
- package/src/cli/doctor.ts +2 -2
- package/src/cli/email.ts +86 -83
- package/src/cli/influencer.ts +13 -13
- package/src/cli/integrations.ts +19 -144
- package/src/cli/keys.ts +10 -10
- package/src/cli/map.ts +4 -4
- package/src/cli/mcp.ts +17 -17
- package/src/cli/memory.ts +19 -21
- package/src/cli/notifications.ts +13 -13
- package/src/cli/oauth.ts +77 -0
- package/src/cli/program.ts +2 -0
- package/src/cli/sequence.ts +27 -27
- package/src/cli/sessions.ts +12 -12
- package/src/cli/trust.ts +9 -11
- package/src/cli/twitter.ts +124 -70
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
- package/src/config/bundled-skills/agentmail/SKILL.md +34 -34
- package/src/config/bundled-skills/amazon/SKILL.md +54 -54
- package/src/config/bundled-skills/app-builder/SKILL.md +137 -3
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +10 -4
- package/src/config/bundled-skills/configure-settings/SKILL.md +18 -18
- package/src/config/bundled-skills/contacts/SKILL.md +12 -12
- package/src/config/bundled-skills/doordash/lib/client.ts +7 -9
- package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/frontend-design/icon.svg +16 -0
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +143 -162
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/influencer/SKILL.md +13 -13
- package/src/config/bundled-skills/mcp-setup/SKILL.md +11 -11
- package/src/config/bundled-skills/phone-calls/SKILL.md +48 -54
- package/src/config/bundled-skills/public-ingress/SKILL.md +6 -6
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +1 -1
- package/src/config/bundled-skills/sms-setup/SKILL.md +3 -3
- package/src/config/bundled-skills/telegram-setup/SKILL.md +2 -2
- package/src/config/bundled-skills/twilio-setup/SKILL.md +136 -225
- package/src/config/bundled-skills/twitter/SKILL.md +68 -44
- package/src/config/bundled-skills/voice-setup/SKILL.md +2 -2
- package/src/config/core-schema.ts +26 -0
- package/src/config/env.ts +4 -0
- package/src/config/feature-flag-registry.json +9 -1
- package/src/config/schema.ts +8 -0
- package/src/config/system-prompt.ts +6 -3
- package/src/config/templates/BOOTSTRAP.md +7 -5
- package/src/contacts/contacts-write.ts +5 -1
- package/src/daemon/handlers/apps.ts +31 -4
- package/src/daemon/handlers/config-ingress.ts +3 -3
- package/src/daemon/handlers/config-integrations.ts +120 -49
- package/src/daemon/handlers/config-slack-channel.ts +26 -7
- package/src/daemon/handlers/config-slack.ts +1 -54
- package/src/daemon/handlers/config-telegram.ts +28 -10
- package/src/daemon/handlers/config.ts +1 -4
- package/src/daemon/handlers/twitter-auth.ts +11 -4
- package/src/daemon/ipc-contract/apps.ts +0 -13
- package/src/daemon/ipc-contract-inventory.json +0 -2
- package/src/daemon/lifecycle.ts +8 -1
- package/src/daemon/session-messaging.ts +2 -2
- package/src/daemon/tool-side-effects.ts +30 -0
- package/src/email/providers/agentmail.ts +1 -1
- package/src/email/providers/index.ts +1 -1
- package/src/email/service.ts +1 -1
- package/src/gallery/default-gallery.ts +538 -0
- package/src/gallery/gallery-manifest.ts +5 -1
- package/src/influencer/client.ts +8 -6
- package/src/mcp/client.ts +1 -1
- package/src/media/avatar-router.ts +99 -0
- package/src/media/avatar-types.ts +60 -0
- package/src/media/managed-avatar-client.ts +189 -0
- package/src/memory/app-migration.ts +114 -0
- package/src/memory/app-store.ts +11 -0
- package/src/memory/qdrant-client.ts +1 -1
- package/src/messaging/providers/slack/client.ts +12 -2
- package/src/messaging/providers/sms/adapter.ts +6 -10
- package/src/migrations/data-layout.ts +8 -1
- package/src/oauth/token-persistence.ts +9 -6
- package/src/runtime/assistant-scope.ts +5 -0
- package/src/runtime/auth/route-policy.ts +4 -0
- package/src/runtime/channel-readiness-service.ts +9 -4
- package/src/runtime/gateway-internal-client.ts +11 -3
- package/src/runtime/http-server.ts +2 -0
- package/src/runtime/invite-redemption-service.ts +23 -13
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/app-routes.ts +131 -3
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +3 -3
- package/src/runtime/routes/integration-routes.ts +2 -2
- package/src/runtime/routes/slack-share-routes.ts +235 -0
- package/src/runtime/routes/twilio-routes.ts +47 -34
- package/src/schedule/integration-status.ts +2 -3
- package/src/security/token-manager.ts +11 -3
- package/src/tools/apps/executors.ts +116 -8
- package/src/tools/browser/browser-manager.ts +30 -2
- package/src/tools/browser/chrome-cdp.ts +31 -3
- package/src/tools/credentials/vault.ts +9 -7
- package/src/tools/executor.ts +4 -0
- package/src/tools/system/avatar-generator.ts +55 -34
- package/src/twitter/client.ts +1 -1
- package/src/twitter/oauth-client.ts +31 -43
- package/src/twitter/router.ts +25 -23
- package/src/util/platform.ts +5 -0
- package/src/slack/slack-webhook.ts +0 -66
package/src/cli/email.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI command group: `
|
|
2
|
+
* CLI command group: `assistant email`
|
|
3
3
|
*
|
|
4
4
|
* Provider-agnostic email operations routed through the service facade.
|
|
5
5
|
* All commands output JSON to stdout. Use --json for machine-readable output.
|
|
@@ -86,11 +86,11 @@ enforced at send time. If a guardrail blocks sending, exit code 2 is returned.
|
|
|
86
86
|
Exit codes: 0 = success, 1 = error, 2 = guardrail blocked.
|
|
87
87
|
|
|
88
88
|
Examples:
|
|
89
|
-
$
|
|
90
|
-
$
|
|
91
|
-
$
|
|
92
|
-
$
|
|
93
|
-
$
|
|
89
|
+
$ assistant email status
|
|
90
|
+
$ assistant email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
|
|
91
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm
|
|
92
|
+
$ assistant email guardrails set --daily-cap 50
|
|
93
|
+
$ assistant email setup domain --domain example.com`,
|
|
94
94
|
);
|
|
95
95
|
|
|
96
96
|
const svc = getEmailService();
|
|
@@ -110,8 +110,8 @@ configuration. The active provider determines which backend handles domain
|
|
|
110
110
|
setup, inbox creation, DNS records, and message delivery.
|
|
111
111
|
|
|
112
112
|
Examples:
|
|
113
|
-
$
|
|
114
|
-
$
|
|
113
|
+
$ assistant email provider get
|
|
114
|
+
$ assistant email provider set agentmail`,
|
|
115
115
|
);
|
|
116
116
|
|
|
117
117
|
provider
|
|
@@ -125,8 +125,8 @@ resend). Use this to confirm which backend is handling email operations
|
|
|
125
125
|
before making changes.
|
|
126
126
|
|
|
127
127
|
Examples:
|
|
128
|
-
$
|
|
129
|
-
$
|
|
128
|
+
$ assistant email provider get
|
|
129
|
+
$ assistant email provider get --json`,
|
|
130
130
|
)
|
|
131
131
|
.action((_opts: unknown, cmd: Command) => {
|
|
132
132
|
output({ ok: true, provider: svc.getProviderName() }, getJson(cmd));
|
|
@@ -147,7 +147,7 @@ Persists the provider selection to config. All subsequent email commands
|
|
|
147
147
|
(setup, inbox, draft, guardrails) will route through the selected provider.
|
|
148
148
|
|
|
149
149
|
Examples:
|
|
150
|
-
$
|
|
150
|
+
$ assistant email provider set agentmail`,
|
|
151
151
|
)
|
|
152
152
|
.action((name: string, _opts: unknown, cmd: Command) => {
|
|
153
153
|
if (!SUPPORTED_PROVIDERS.includes(name as SupportedProvider)) {
|
|
@@ -176,8 +176,8 @@ status, configured inboxes with their addresses, and current guardrail state
|
|
|
176
176
|
Use this to verify the email stack is fully configured before sending.
|
|
177
177
|
|
|
178
178
|
Examples:
|
|
179
|
-
$
|
|
180
|
-
$
|
|
179
|
+
$ assistant email status
|
|
180
|
+
$ assistant email status --json`,
|
|
181
181
|
)
|
|
182
182
|
.action(async (_opts: unknown, cmd: Command) => {
|
|
183
183
|
await run(cmd, async () => {
|
|
@@ -206,9 +206,9 @@ The setup workflow configures the email stack in order:
|
|
|
206
206
|
Run each step in sequence. "verify" will fail until DNS records propagate.
|
|
207
207
|
|
|
208
208
|
Examples:
|
|
209
|
-
$
|
|
210
|
-
$
|
|
211
|
-
$
|
|
209
|
+
$ assistant email setup domain --domain example.com
|
|
210
|
+
$ assistant email setup dns --domain example.com
|
|
211
|
+
$ assistant email setup verify --domain example.com`,
|
|
212
212
|
);
|
|
213
213
|
|
|
214
214
|
setup
|
|
@@ -226,8 +226,8 @@ Use --dry-run to preview the registration without creating it. This returns
|
|
|
226
226
|
the DNS records that would need to be configured without committing changes.
|
|
227
227
|
|
|
228
228
|
Examples:
|
|
229
|
-
$
|
|
230
|
-
$
|
|
229
|
+
$ assistant email setup domain --domain example.com
|
|
230
|
+
$ assistant email setup domain --domain example.com --dry-run`,
|
|
231
231
|
)
|
|
232
232
|
.action(
|
|
233
233
|
async (opts: { domain: string; dryRun?: boolean }, cmd: Command) => {
|
|
@@ -252,8 +252,8 @@ behalf of your domain and improve deliverability.
|
|
|
252
252
|
Add all returned records to your DNS provider before running "setup verify".
|
|
253
253
|
|
|
254
254
|
Examples:
|
|
255
|
-
$
|
|
256
|
-
$
|
|
255
|
+
$ assistant email setup dns --domain example.com
|
|
256
|
+
$ assistant email setup dns --domain example.com --json`,
|
|
257
257
|
)
|
|
258
258
|
.action(async (opts: { domain: string }, cmd: Command) => {
|
|
259
259
|
await run(cmd, async () => {
|
|
@@ -277,7 +277,7 @@ Run this after adding all records returned by "setup dns". If verification
|
|
|
277
277
|
fails, wait for propagation and retry.
|
|
278
278
|
|
|
279
279
|
Examples:
|
|
280
|
-
$
|
|
280
|
+
$ assistant email setup verify --domain example.com`,
|
|
281
281
|
)
|
|
282
282
|
.action(async (opts: { domain: string }, cmd: Command) => {
|
|
283
283
|
await run(cmd, async () => {
|
|
@@ -299,7 +299,7 @@ specified domain. Idempotent — re-running skips already existing inboxes.
|
|
|
299
299
|
The domain must be registered and verified before creating inboxes.
|
|
300
300
|
|
|
301
301
|
Examples:
|
|
302
|
-
$
|
|
302
|
+
$ assistant email setup inboxes --domain example.com`,
|
|
303
303
|
)
|
|
304
304
|
.action(async (opts: { domain: string }, cmd: Command) => {
|
|
305
305
|
await run(cmd, async () => {
|
|
@@ -324,8 +324,8 @@ secret so you can verify authenticity. If omitted, the provider may generate
|
|
|
324
324
|
one automatically (provider-dependent).
|
|
325
325
|
|
|
326
326
|
Examples:
|
|
327
|
-
$
|
|
328
|
-
$
|
|
327
|
+
$ assistant email setup webhook --url https://example.com/api/email/inbound
|
|
328
|
+
$ assistant email setup webhook --url https://example.com/api/email/inbound --secret whsec_abc123`,
|
|
329
329
|
)
|
|
330
330
|
.action(async (opts: { url: string; secret?: string }, cmd: Command) => {
|
|
331
331
|
await run(cmd, async () => {
|
|
@@ -347,8 +347,8 @@ configured provider. Each inbox has a username (local part), domain, and
|
|
|
347
347
|
optional display name.
|
|
348
348
|
|
|
349
349
|
Examples:
|
|
350
|
-
$
|
|
351
|
-
$
|
|
350
|
+
$ assistant email inbox list
|
|
351
|
+
$ assistant email inbox create --username sam --domain example.com --display-name "Samwise"`,
|
|
352
352
|
);
|
|
353
353
|
|
|
354
354
|
inbox
|
|
@@ -370,9 +370,9 @@ The --display-name sets the friendly name shown in the "From" header
|
|
|
370
370
|
(e.g. "Samwise <sam@example.com>").
|
|
371
371
|
|
|
372
372
|
Examples:
|
|
373
|
-
$
|
|
374
|
-
$
|
|
375
|
-
$
|
|
373
|
+
$ assistant email inbox create --username sam --domain example.com
|
|
374
|
+
$ assistant email inbox create --username support --domain example.com --display-name "Support Team"
|
|
375
|
+
$ assistant email inbox create --username hello`,
|
|
376
376
|
)
|
|
377
377
|
.action(
|
|
378
378
|
async (
|
|
@@ -403,8 +403,8 @@ Use this to verify which inboxes are available before creating drafts or
|
|
|
403
403
|
configuring inbound webhooks.
|
|
404
404
|
|
|
405
405
|
Examples:
|
|
406
|
-
$
|
|
407
|
-
$
|
|
406
|
+
$ assistant email inbox list
|
|
407
|
+
$ assistant email inbox list --json`,
|
|
408
408
|
)
|
|
409
409
|
.action(async (_opts: unknown, cmd: Command) => {
|
|
410
410
|
await run(cmd, async () => {
|
|
@@ -431,9 +431,9 @@ Drafts can also be listed, inspected by ID, or deleted. Use "draft list
|
|
|
431
431
|
--status pending" to see drafts awaiting approval.
|
|
432
432
|
|
|
433
433
|
Examples:
|
|
434
|
-
$
|
|
435
|
-
$
|
|
436
|
-
$
|
|
434
|
+
$ assistant email draft create --from hello@example.com --to user@test.com --subject "Hi" --body "Hello"
|
|
435
|
+
$ assistant email draft list --status pending
|
|
436
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm`,
|
|
437
437
|
);
|
|
438
438
|
|
|
439
439
|
draft
|
|
@@ -462,9 +462,9 @@ Optional fields:
|
|
|
462
462
|
--in-reply-to Message ID of the email being replied to (for threading)
|
|
463
463
|
|
|
464
464
|
Examples:
|
|
465
|
-
$
|
|
466
|
-
$
|
|
467
|
-
$
|
|
465
|
+
$ assistant email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
|
|
466
|
+
$ assistant email draft create --from hello@example.com --to user@test.com --subject "Re: Question" --body "Sure thing" --in-reply-to msg_abc123
|
|
467
|
+
$ assistant email draft create --from hello@example.com --to user@test.com --subject "Update" --body "FYI" --cc manager@test.com`,
|
|
468
468
|
)
|
|
469
469
|
.action(
|
|
470
470
|
async (
|
|
@@ -502,13 +502,16 @@ Use --status to narrow results to a specific lifecycle stage:
|
|
|
502
502
|
pending — created but not yet approved
|
|
503
503
|
approved — approved and queued for sending
|
|
504
504
|
sent — successfully delivered
|
|
505
|
+
rejected — delivery failed by the provider (e.g. bounce or send error)
|
|
505
506
|
|
|
506
|
-
Note: rejected
|
|
507
|
+
Note: drafts rejected via "draft reject" are permanently deleted and will
|
|
508
|
+
not appear here. The "rejected" status only applies to provider-side
|
|
509
|
+
delivery failures.
|
|
507
510
|
|
|
508
511
|
Examples:
|
|
509
|
-
$
|
|
510
|
-
$
|
|
511
|
-
$
|
|
512
|
+
$ assistant email draft list
|
|
513
|
+
$ assistant email draft list --status pending
|
|
514
|
+
$ assistant email draft list --status sent --json`,
|
|
512
515
|
)
|
|
513
516
|
.action(async (opts: { status?: string }, cmd: Command) => {
|
|
514
517
|
await run(cmd, async () => {
|
|
@@ -532,9 +535,9 @@ status, and timestamps. Use --inbox to scope the lookup in multi-inbox
|
|
|
532
535
|
setups.
|
|
533
536
|
|
|
534
537
|
Examples:
|
|
535
|
-
$
|
|
536
|
-
$
|
|
537
|
-
$
|
|
538
|
+
$ assistant email draft get d_abc123
|
|
539
|
+
$ assistant email draft get d_abc123 --inbox inbox_456
|
|
540
|
+
$ assistant email draft get d_abc123 --json`,
|
|
538
541
|
)
|
|
539
542
|
.action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
|
|
540
543
|
await run(cmd, async () => {
|
|
@@ -565,8 +568,8 @@ pending state and can be retried after adjusting guardrails.
|
|
|
565
568
|
Aliases: "draft send", "draft approve"
|
|
566
569
|
|
|
567
570
|
Examples:
|
|
568
|
-
$
|
|
569
|
-
$
|
|
571
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm
|
|
572
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm --json`,
|
|
570
573
|
)
|
|
571
574
|
.action(
|
|
572
575
|
async (
|
|
@@ -602,9 +605,9 @@ sent. The --reason flag is accepted for logging but the draft itself is
|
|
|
602
605
|
removed from the provider and cannot be recovered.
|
|
603
606
|
|
|
604
607
|
Examples:
|
|
605
|
-
$
|
|
606
|
-
$
|
|
607
|
-
$
|
|
608
|
+
$ assistant email draft reject --draft-id d_abc123
|
|
609
|
+
$ assistant email draft reject --draft-id d_abc123 --reason "Wrong recipient"
|
|
610
|
+
$ assistant email draft reject --draft-id d_abc123 --inbox inbox_456`,
|
|
608
611
|
)
|
|
609
612
|
.action(
|
|
610
613
|
async (
|
|
@@ -633,8 +636,8 @@ result in permanent deletion; use "reject" when you want to log a reason
|
|
|
633
636
|
for not sending. Use --inbox to scope the deletion in multi-inbox setups.
|
|
634
637
|
|
|
635
638
|
Examples:
|
|
636
|
-
$
|
|
637
|
-
$
|
|
639
|
+
$ assistant email draft delete d_abc123
|
|
640
|
+
$ assistant email draft delete d_abc123 --inbox inbox_456`,
|
|
638
641
|
)
|
|
639
642
|
.action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
|
|
640
643
|
await run(cmd, async () => {
|
|
@@ -658,9 +661,9 @@ Use "inbound list" to browse received messages and "inbound get" to
|
|
|
658
661
|
retrieve the full content of a specific message.
|
|
659
662
|
|
|
660
663
|
Examples:
|
|
661
|
-
$
|
|
662
|
-
$
|
|
663
|
-
$
|
|
664
|
+
$ assistant email inbound list
|
|
665
|
+
$ assistant email inbound list --thread-id thr_abc123
|
|
666
|
+
$ assistant email inbound get msg_def456`,
|
|
664
667
|
);
|
|
665
668
|
|
|
666
669
|
inbound
|
|
@@ -676,10 +679,10 @@ thread ID to see only messages belonging to a specific conversation, or
|
|
|
676
679
|
by inbox ID to scope to a particular inbox.
|
|
677
680
|
|
|
678
681
|
Examples:
|
|
679
|
-
$
|
|
680
|
-
$
|
|
681
|
-
$
|
|
682
|
-
$
|
|
682
|
+
$ assistant email inbound list
|
|
683
|
+
$ assistant email inbound list --thread-id thr_abc123
|
|
684
|
+
$ assistant email inbound list --inbox inbox_456
|
|
685
|
+
$ assistant email inbound list --json`,
|
|
683
686
|
)
|
|
684
687
|
.action(
|
|
685
688
|
async (opts: { threadId?: string; inbox?: string }, cmd: Command) => {
|
|
@@ -703,8 +706,8 @@ Returns the full inbound message including sender, recipients, subject,
|
|
|
703
706
|
body, headers, and timestamps.
|
|
704
707
|
|
|
705
708
|
Examples:
|
|
706
|
-
$
|
|
707
|
-
$
|
|
709
|
+
$ assistant email inbound get msg_abc123
|
|
710
|
+
$ assistant email inbound get msg_abc123 --json`,
|
|
708
711
|
)
|
|
709
712
|
.action(async (messageId: string, _opts: unknown, cmd: Command) => {
|
|
710
713
|
await run(cmd, async () => {
|
|
@@ -728,8 +731,8 @@ Use "thread list" to browse all threads and "thread get" to retrieve
|
|
|
728
731
|
the full conversation history for a specific thread.
|
|
729
732
|
|
|
730
733
|
Examples:
|
|
731
|
-
$
|
|
732
|
-
$
|
|
734
|
+
$ assistant email thread list
|
|
735
|
+
$ assistant email thread get thr_abc123`,
|
|
733
736
|
);
|
|
734
737
|
|
|
735
738
|
thread
|
|
@@ -742,8 +745,8 @@ Lists all email threads. Each thread entry includes its ID, subject,
|
|
|
742
745
|
participant addresses, message count, and timestamps.
|
|
743
746
|
|
|
744
747
|
Examples:
|
|
745
|
-
$
|
|
746
|
-
$
|
|
748
|
+
$ assistant email thread list
|
|
749
|
+
$ assistant email thread list --json`,
|
|
747
750
|
)
|
|
748
751
|
.action(async (_opts: unknown, cmd: Command) => {
|
|
749
752
|
await run(cmd, async () => {
|
|
@@ -765,8 +768,8 @@ Returns the full thread including all messages (inbound and outbound),
|
|
|
765
768
|
participants, subject, and timestamps. Messages are ordered chronologically.
|
|
766
769
|
|
|
767
770
|
Examples:
|
|
768
|
-
$
|
|
769
|
-
$
|
|
771
|
+
$ assistant email thread get thr_abc123
|
|
772
|
+
$ assistant email thread get thr_abc123 --json`,
|
|
770
773
|
)
|
|
771
774
|
.action(async (threadId: string, _opts: unknown, cmd: Command) => {
|
|
772
775
|
await run(cmd, async () => {
|
|
@@ -796,10 +799,10 @@ When a guardrail blocks a send, exit code 2 is returned with the specific
|
|
|
796
799
|
guardrail error in the response.
|
|
797
800
|
|
|
798
801
|
Examples:
|
|
799
|
-
$
|
|
800
|
-
$
|
|
801
|
-
$
|
|
802
|
-
$
|
|
802
|
+
$ assistant email guardrails get
|
|
803
|
+
$ assistant email guardrails set --paused true
|
|
804
|
+
$ assistant email guardrails set --daily-cap 100
|
|
805
|
+
$ assistant email guardrails block "*@spam.com"`,
|
|
803
806
|
);
|
|
804
807
|
|
|
805
808
|
guardrails
|
|
@@ -814,8 +817,8 @@ daily send cap, today's send count, and a summary of address rules.
|
|
|
814
817
|
Use this to verify guardrail settings before sending emails.
|
|
815
818
|
|
|
816
819
|
Examples:
|
|
817
|
-
$
|
|
818
|
-
$
|
|
820
|
+
$ assistant email guardrails get
|
|
821
|
+
$ assistant email guardrails get --json`,
|
|
819
822
|
)
|
|
820
823
|
.action((_opts: unknown, cmd: Command) => {
|
|
821
824
|
output({ ok: true, ...svc.getGuardrails() }, getJson(cmd));
|
|
@@ -838,9 +841,9 @@ value unchanged.
|
|
|
838
841
|
calendar day. Set to 0 to disable sending entirely.
|
|
839
842
|
|
|
840
843
|
Examples:
|
|
841
|
-
$
|
|
842
|
-
$
|
|
843
|
-
$
|
|
844
|
+
$ assistant email guardrails set --paused true
|
|
845
|
+
$ assistant email guardrails set --paused false --daily-cap 50
|
|
846
|
+
$ assistant email guardrails set --daily-cap 0`,
|
|
844
847
|
)
|
|
845
848
|
.action((opts: { paused?: string; dailyCap?: string }, cmd: Command) => {
|
|
846
849
|
const updates: { paused?: boolean; dailyCap?: number } = {};
|
|
@@ -874,8 +877,8 @@ pattern will be rejected with exit code 2. Rules are evaluated in order;
|
|
|
874
877
|
block rules take precedence over allow rules for the same address.
|
|
875
878
|
|
|
876
879
|
Examples:
|
|
877
|
-
$
|
|
878
|
-
$
|
|
880
|
+
$ assistant email guardrails block "*@spam.com"
|
|
881
|
+
$ assistant email guardrails block "marketing@*"`,
|
|
879
882
|
)
|
|
880
883
|
.action((pattern: string, _opts: unknown, cmd: Command) => {
|
|
881
884
|
const rule = svc.addRule("block", pattern);
|
|
@@ -897,8 +900,8 @@ address-rule guardrail check during "approve-send". Note that block rules
|
|
|
897
900
|
take precedence over allow rules for the same address.
|
|
898
901
|
|
|
899
902
|
Examples:
|
|
900
|
-
$
|
|
901
|
-
$
|
|
903
|
+
$ assistant email guardrails allow "*@partner.com"
|
|
904
|
+
$ assistant email guardrails allow "vip@example.com"`,
|
|
902
905
|
)
|
|
903
906
|
.action((pattern: string, _opts: unknown, cmd: Command) => {
|
|
904
907
|
const rule = svc.addRule("allow", pattern);
|
|
@@ -917,8 +920,8 @@ entry includes its ID, type (block or allow), and the glob pattern.
|
|
|
917
920
|
Use the rule ID with "guardrails unrule" to remove a specific rule.
|
|
918
921
|
|
|
919
922
|
Examples:
|
|
920
|
-
$
|
|
921
|
-
$
|
|
923
|
+
$ assistant email guardrails rules
|
|
924
|
+
$ assistant email guardrails rules --json`,
|
|
922
925
|
)
|
|
923
926
|
.action((_opts: unknown, cmd: Command) => {
|
|
924
927
|
output({ ok: true, rules: svc.listAddressRules() }, getJson(cmd));
|
|
@@ -938,8 +941,8 @@ Permanently removes a block or allow rule. The rule takes effect immediately —
|
|
|
938
941
|
subsequent "approve-send" calls will no longer be affected by the removed rule.
|
|
939
942
|
|
|
940
943
|
Examples:
|
|
941
|
-
$
|
|
942
|
-
$
|
|
944
|
+
$ assistant email guardrails unrule rule_abc123
|
|
945
|
+
$ assistant email guardrails rules # list rules to find the ID first`,
|
|
943
946
|
)
|
|
944
947
|
.action((ruleId: string, _opts: unknown, cmd: Command) => {
|
|
945
948
|
if (svc.removeRule(ruleId)) {
|
package/src/cli/influencer.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI command group: `
|
|
2
|
+
* CLI command group: `assistant influencer`
|
|
3
3
|
*
|
|
4
4
|
* Research influencers on Instagram, TikTok, and X/Twitter via the Chrome extension relay.
|
|
5
5
|
* All commands output JSON to stdout. Use --json for machine-readable output.
|
|
@@ -71,9 +71,9 @@ platform (Instagram, TikTok, X/Twitter) in Chrome for the relay to work.
|
|
|
71
71
|
Supported platforms: instagram, tiktok, twitter (X).
|
|
72
72
|
|
|
73
73
|
Examples:
|
|
74
|
-
$
|
|
75
|
-
$
|
|
76
|
-
$
|
|
74
|
+
$ assistant influencer search "fitness coach" --platforms instagram,tiktok
|
|
75
|
+
$ assistant influencer profile natgeo --platform instagram
|
|
76
|
+
$ assistant influencer compare instagram:nike twitter:nike tiktok:nike`,
|
|
77
77
|
);
|
|
78
78
|
|
|
79
79
|
// =========================================================================
|
|
@@ -120,9 +120,9 @@ Plain integers are also accepted (e.g. 50000).
|
|
|
120
120
|
--verified restricts results to verified/blue-check accounts only.
|
|
121
121
|
|
|
122
122
|
Examples:
|
|
123
|
-
$
|
|
124
|
-
$
|
|
125
|
-
$
|
|
123
|
+
$ assistant influencer search "vegan food" --min-followers 10k --max-followers 1m
|
|
124
|
+
$ assistant influencer search "tech reviewer" --platforms tiktok --limit 5 --verified
|
|
125
|
+
$ assistant influencer search "streetwear" --platforms instagram,twitter --min-followers 50k`,
|
|
126
126
|
)
|
|
127
127
|
.action(
|
|
128
128
|
async (
|
|
@@ -196,9 +196,9 @@ Returns detailed profile data including follower count, bio, engagement
|
|
|
196
196
|
metrics, and recent post statistics.
|
|
197
197
|
|
|
198
198
|
Examples:
|
|
199
|
-
$
|
|
200
|
-
$
|
|
201
|
-
$
|
|
199
|
+
$ assistant influencer profile natgeo --platform instagram
|
|
200
|
+
$ assistant influencer profile charlidamelio --platform tiktok
|
|
201
|
+
$ assistant influencer profile elonmusk --platform twitter`,
|
|
202
202
|
)
|
|
203
203
|
.action(
|
|
204
204
|
async (username: string, opts: { platform: string }, cmd: Command) => {
|
|
@@ -255,9 +255,9 @@ useful for comparing follower counts, engagement rates, and content
|
|
|
255
255
|
metrics across platforms or between competing accounts.
|
|
256
256
|
|
|
257
257
|
Examples:
|
|
258
|
-
$
|
|
259
|
-
$
|
|
260
|
-
$
|
|
258
|
+
$ assistant influencer compare instagram:nike twitter:nike tiktok:nike
|
|
259
|
+
$ assistant influencer compare instagram:natgeo instagram:discoverearth
|
|
260
|
+
$ assistant influencer compare tiktok:charlidamelio tiktok:addisonre`,
|
|
261
261
|
)
|
|
262
262
|
.action(async (influencers: string[], _opts: unknown, cmd: Command) => {
|
|
263
263
|
await run(cmd, async () => {
|