@vellumai/assistant 0.4.37 → 0.4.41
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 +3 -1
- 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 +30 -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/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 +28 -28
- package/src/cli/dev.ts +2 -2
- package/src/cli/doctor.ts +2 -2
- package/src/cli/email.ts +82 -82
- 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 +18 -18
- 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 +8 -8
- 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 (
|
|
@@ -509,9 +509,9 @@ not appear here. The "rejected" status only applies to provider-side
|
|
|
509
509
|
delivery failures.
|
|
510
510
|
|
|
511
511
|
Examples:
|
|
512
|
-
$
|
|
513
|
-
$
|
|
514
|
-
$
|
|
512
|
+
$ assistant email draft list
|
|
513
|
+
$ assistant email draft list --status pending
|
|
514
|
+
$ assistant email draft list --status sent --json`,
|
|
515
515
|
)
|
|
516
516
|
.action(async (opts: { status?: string }, cmd: Command) => {
|
|
517
517
|
await run(cmd, async () => {
|
|
@@ -535,9 +535,9 @@ status, and timestamps. Use --inbox to scope the lookup in multi-inbox
|
|
|
535
535
|
setups.
|
|
536
536
|
|
|
537
537
|
Examples:
|
|
538
|
-
$
|
|
539
|
-
$
|
|
540
|
-
$
|
|
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`,
|
|
541
541
|
)
|
|
542
542
|
.action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
|
|
543
543
|
await run(cmd, async () => {
|
|
@@ -568,8 +568,8 @@ pending state and can be retried after adjusting guardrails.
|
|
|
568
568
|
Aliases: "draft send", "draft approve"
|
|
569
569
|
|
|
570
570
|
Examples:
|
|
571
|
-
$
|
|
572
|
-
$
|
|
571
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm
|
|
572
|
+
$ assistant email draft approve-send --draft-id d_abc123 --confirm --json`,
|
|
573
573
|
)
|
|
574
574
|
.action(
|
|
575
575
|
async (
|
|
@@ -605,9 +605,9 @@ sent. The --reason flag is accepted for logging but the draft itself is
|
|
|
605
605
|
removed from the provider and cannot be recovered.
|
|
606
606
|
|
|
607
607
|
Examples:
|
|
608
|
-
$
|
|
609
|
-
$
|
|
610
|
-
$
|
|
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`,
|
|
611
611
|
)
|
|
612
612
|
.action(
|
|
613
613
|
async (
|
|
@@ -636,8 +636,8 @@ result in permanent deletion; use "reject" when you want to log a reason
|
|
|
636
636
|
for not sending. Use --inbox to scope the deletion in multi-inbox setups.
|
|
637
637
|
|
|
638
638
|
Examples:
|
|
639
|
-
$
|
|
640
|
-
$
|
|
639
|
+
$ assistant email draft delete d_abc123
|
|
640
|
+
$ assistant email draft delete d_abc123 --inbox inbox_456`,
|
|
641
641
|
)
|
|
642
642
|
.action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
|
|
643
643
|
await run(cmd, async () => {
|
|
@@ -661,9 +661,9 @@ Use "inbound list" to browse received messages and "inbound get" to
|
|
|
661
661
|
retrieve the full content of a specific message.
|
|
662
662
|
|
|
663
663
|
Examples:
|
|
664
|
-
$
|
|
665
|
-
$
|
|
666
|
-
$
|
|
664
|
+
$ assistant email inbound list
|
|
665
|
+
$ assistant email inbound list --thread-id thr_abc123
|
|
666
|
+
$ assistant email inbound get msg_def456`,
|
|
667
667
|
);
|
|
668
668
|
|
|
669
669
|
inbound
|
|
@@ -679,10 +679,10 @@ thread ID to see only messages belonging to a specific conversation, or
|
|
|
679
679
|
by inbox ID to scope to a particular inbox.
|
|
680
680
|
|
|
681
681
|
Examples:
|
|
682
|
-
$
|
|
683
|
-
$
|
|
684
|
-
$
|
|
685
|
-
$
|
|
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`,
|
|
686
686
|
)
|
|
687
687
|
.action(
|
|
688
688
|
async (opts: { threadId?: string; inbox?: string }, cmd: Command) => {
|
|
@@ -706,8 +706,8 @@ Returns the full inbound message including sender, recipients, subject,
|
|
|
706
706
|
body, headers, and timestamps.
|
|
707
707
|
|
|
708
708
|
Examples:
|
|
709
|
-
$
|
|
710
|
-
$
|
|
709
|
+
$ assistant email inbound get msg_abc123
|
|
710
|
+
$ assistant email inbound get msg_abc123 --json`,
|
|
711
711
|
)
|
|
712
712
|
.action(async (messageId: string, _opts: unknown, cmd: Command) => {
|
|
713
713
|
await run(cmd, async () => {
|
|
@@ -731,8 +731,8 @@ Use "thread list" to browse all threads and "thread get" to retrieve
|
|
|
731
731
|
the full conversation history for a specific thread.
|
|
732
732
|
|
|
733
733
|
Examples:
|
|
734
|
-
$
|
|
735
|
-
$
|
|
734
|
+
$ assistant email thread list
|
|
735
|
+
$ assistant email thread get thr_abc123`,
|
|
736
736
|
);
|
|
737
737
|
|
|
738
738
|
thread
|
|
@@ -745,8 +745,8 @@ Lists all email threads. Each thread entry includes its ID, subject,
|
|
|
745
745
|
participant addresses, message count, and timestamps.
|
|
746
746
|
|
|
747
747
|
Examples:
|
|
748
|
-
$
|
|
749
|
-
$
|
|
748
|
+
$ assistant email thread list
|
|
749
|
+
$ assistant email thread list --json`,
|
|
750
750
|
)
|
|
751
751
|
.action(async (_opts: unknown, cmd: Command) => {
|
|
752
752
|
await run(cmd, async () => {
|
|
@@ -768,8 +768,8 @@ Returns the full thread including all messages (inbound and outbound),
|
|
|
768
768
|
participants, subject, and timestamps. Messages are ordered chronologically.
|
|
769
769
|
|
|
770
770
|
Examples:
|
|
771
|
-
$
|
|
772
|
-
$
|
|
771
|
+
$ assistant email thread get thr_abc123
|
|
772
|
+
$ assistant email thread get thr_abc123 --json`,
|
|
773
773
|
)
|
|
774
774
|
.action(async (threadId: string, _opts: unknown, cmd: Command) => {
|
|
775
775
|
await run(cmd, async () => {
|
|
@@ -799,10 +799,10 @@ When a guardrail blocks a send, exit code 2 is returned with the specific
|
|
|
799
799
|
guardrail error in the response.
|
|
800
800
|
|
|
801
801
|
Examples:
|
|
802
|
-
$
|
|
803
|
-
$
|
|
804
|
-
$
|
|
805
|
-
$
|
|
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"`,
|
|
806
806
|
);
|
|
807
807
|
|
|
808
808
|
guardrails
|
|
@@ -817,8 +817,8 @@ daily send cap, today's send count, and a summary of address rules.
|
|
|
817
817
|
Use this to verify guardrail settings before sending emails.
|
|
818
818
|
|
|
819
819
|
Examples:
|
|
820
|
-
$
|
|
821
|
-
$
|
|
820
|
+
$ assistant email guardrails get
|
|
821
|
+
$ assistant email guardrails get --json`,
|
|
822
822
|
)
|
|
823
823
|
.action((_opts: unknown, cmd: Command) => {
|
|
824
824
|
output({ ok: true, ...svc.getGuardrails() }, getJson(cmd));
|
|
@@ -841,9 +841,9 @@ value unchanged.
|
|
|
841
841
|
calendar day. Set to 0 to disable sending entirely.
|
|
842
842
|
|
|
843
843
|
Examples:
|
|
844
|
-
$
|
|
845
|
-
$
|
|
846
|
-
$
|
|
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`,
|
|
847
847
|
)
|
|
848
848
|
.action((opts: { paused?: string; dailyCap?: string }, cmd: Command) => {
|
|
849
849
|
const updates: { paused?: boolean; dailyCap?: number } = {};
|
|
@@ -877,8 +877,8 @@ pattern will be rejected with exit code 2. Rules are evaluated in order;
|
|
|
877
877
|
block rules take precedence over allow rules for the same address.
|
|
878
878
|
|
|
879
879
|
Examples:
|
|
880
|
-
$
|
|
881
|
-
$
|
|
880
|
+
$ assistant email guardrails block "*@spam.com"
|
|
881
|
+
$ assistant email guardrails block "marketing@*"`,
|
|
882
882
|
)
|
|
883
883
|
.action((pattern: string, _opts: unknown, cmd: Command) => {
|
|
884
884
|
const rule = svc.addRule("block", pattern);
|
|
@@ -900,8 +900,8 @@ address-rule guardrail check during "approve-send". Note that block rules
|
|
|
900
900
|
take precedence over allow rules for the same address.
|
|
901
901
|
|
|
902
902
|
Examples:
|
|
903
|
-
$
|
|
904
|
-
$
|
|
903
|
+
$ assistant email guardrails allow "*@partner.com"
|
|
904
|
+
$ assistant email guardrails allow "vip@example.com"`,
|
|
905
905
|
)
|
|
906
906
|
.action((pattern: string, _opts: unknown, cmd: Command) => {
|
|
907
907
|
const rule = svc.addRule("allow", pattern);
|
|
@@ -920,8 +920,8 @@ entry includes its ID, type (block or allow), and the glob pattern.
|
|
|
920
920
|
Use the rule ID with "guardrails unrule" to remove a specific rule.
|
|
921
921
|
|
|
922
922
|
Examples:
|
|
923
|
-
$
|
|
924
|
-
$
|
|
923
|
+
$ assistant email guardrails rules
|
|
924
|
+
$ assistant email guardrails rules --json`,
|
|
925
925
|
)
|
|
926
926
|
.action((_opts: unknown, cmd: Command) => {
|
|
927
927
|
output({ ok: true, rules: svc.listAddressRules() }, getJson(cmd));
|
|
@@ -941,8 +941,8 @@ Permanently removes a block or allow rule. The rule takes effect immediately —
|
|
|
941
941
|
subsequent "approve-send" calls will no longer be affected by the removed rule.
|
|
942
942
|
|
|
943
943
|
Examples:
|
|
944
|
-
$
|
|
945
|
-
$
|
|
944
|
+
$ assistant email guardrails unrule rule_abc123
|
|
945
|
+
$ assistant email guardrails rules # list rules to find the ID first`,
|
|
946
946
|
)
|
|
947
947
|
.action((ruleId: string, _opts: unknown, cmd: Command) => {
|
|
948
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 () => {
|