outrank-cli 0.11.0 → 0.12.0
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 +5 -6
- package/SKILL.md +3 -3
- package/package.json +3 -3
- package/src/adapters/mcp/prompts.js +4 -5
- package/src/adapters/mcp/toolNotes.js +6 -10
- package/src/commands/aiCitedLists.js +24 -34
package/README.md
CHANGED
|
@@ -290,7 +290,7 @@ Tools that take a JSON `body` describe its fields in their description; `product
|
|
|
290
290
|
Generated from the command registry with `npm run docs:tools`. The registry is checked against the Outrank server's route list in `tests/fixtures/agentApiSurface.json`, refreshed from a checkout of the Outrank app with `npm run surface:extract -- <path-to-outrank-repo>`: a server route without a tool, a tool without a server route, a guidance sentence naming an endpoint the server cannot map to a tool, or a rewritten argument the named tool would refuse fails the tests. The fixture records the server commit and, as `sourceDirty`, whether that checkout had uncommitted changes in the files it reads; extract again from a clean checkout before a release. To see whether the fixture is stale, run `node scripts/extractAgentApiSurface.js --check <path-to-outrank-repo>`, or run the tests with `OUTRANK_SERVER_DIR=<path-to-outrank-repo>`: both list the routes and guidance mentions that differ, and without the variable that one test is skipped. Kinds: `read` changes nothing; `write` changes Outrank or the connected site; `destructive` deletes or cannot be undone; `money` changes what the organization pays; `local` makes no request. Tools marked ★ are always listed in `auto` mode.
|
|
291
291
|
|
|
292
292
|
<!-- mcp-tools:start -->
|
|
293
|
-
|
|
293
|
+
244 tools.
|
|
294
294
|
|
|
295
295
|
| Tool | CLI command | Kind | Toolset | What it does |
|
|
296
296
|
| --- | --- | --- | --- | --- |
|
|
@@ -526,13 +526,12 @@ Generated from the command registry with `npm run docs:tools`. The registry is c
|
|
|
526
526
|
| `ai_cited_lists_settings_get` | `ai-cited-lists settings get` | read | ai-cited-lists | Get the AI-Cited Lists settings of a product: sender details, positions, pause, entry. |
|
|
527
527
|
| `ai_cited_lists_settings_update` | `ai-cited-lists settings update` | write | ai-cited-lists | Update the AI-Cited Lists settings of a product from a JSON body. |
|
|
528
528
|
| `ai_cited_lists_mailbox_get` | `ai-cited-lists mailbox get` | read | ai-cited-lists | Get the connected Google mailbox and its four sending checks. |
|
|
529
|
-
| `ai_cited_lists_mailbox_connect` | `ai-cited-lists mailbox connect` | write | ai-cited-lists |
|
|
530
|
-
| `ai_cited_lists_mailbox_poll` | `ai-cited-lists mailbox poll` | read | ai-cited-lists | Poll a mailbox connection attempt until Google consent completed. |
|
|
529
|
+
| `ai_cited_lists_mailbox_connect` | `ai-cited-lists mailbox connect` | write | ai-cited-lists | Connect the Google mailbox that sends the offers with its address and a Google app password. |
|
|
531
530
|
| `ai_cited_lists_mailbox_domain_check` | `ai-cited-lists mailbox domain-check` | write | ai-cited-lists | Re-run the SPF, DKIM and DMARC check of the mailbox domain. |
|
|
532
531
|
| `ai_cited_lists_mailbox_inbox_test` | `ai-cited-lists mailbox inbox-test` | write | ai-cited-lists | Send the seed-list inbox test from the mailbox (server rate-limited). |
|
|
533
532
|
| `ai_cited_lists_mailbox_filter_test` | `ai-cited-lists mailbox filter-test` | write | ai-cited-lists | Send the reply-filter test email to confirm replies reach Outrank. |
|
|
534
533
|
| `ai_cited_lists_mailbox_dkim_selector` | `ai-cited-lists mailbox dkim-selector` | write | ai-cited-lists | Set the Google Workspace DKIM selector of the mailbox domain, or reset it to the default. |
|
|
535
|
-
| `ai_cited_lists_mailbox_disconnect` | `ai-cited-lists mailbox disconnect` | destructive | ai-cited-lists | Disconnect the Google mailbox and
|
|
534
|
+
| `ai_cited_lists_mailbox_disconnect` | `ai-cited-lists mailbox disconnect` | destructive | ai-cited-lists | Disconnect the Google mailbox and delete its stored app password. |
|
|
536
535
|
| `ai_cited_lists_top_up_consent_get` | `ai-cited-lists top-up-consent get` | read | ai-cited-lists | Read the automatic credit top-up terms and whether they were confirmed. |
|
|
537
536
|
| `ai_cited_lists_top_up_consent_confirm` | `ai-cited-lists top-up-consent confirm` | money | ai-cited-lists | Confirm the automatic credit top-up: authorizes credit-pack purchases on the card on file. |
|
|
538
537
|
| `ai_cited_lists_entry_generate` | `ai-cited-lists entry generate` | write | ai-cited-lists | Write a fresh base entry for the product from its site (multi-minute). |
|
|
@@ -575,7 +574,7 @@ outrank-cli improvements executions push 00000000-0000-0000-0000-000000000000
|
|
|
575
574
|
outrank-cli ai-cited-lists status 00000000-0000-0000-0000-000000000000
|
|
576
575
|
outrank-cli ai-cited-lists lists list 00000000-0000-0000-0000-000000000000 --view to_send
|
|
577
576
|
outrank-cli ai-cited-lists questions add 00000000-0000-0000-0000-000000000000 --question "What is the best privacy-friendly analytics tool?"
|
|
578
|
-
outrank-cli ai-cited-lists mailbox connect 00000000-0000-0000-0000-000000000000 --
|
|
577
|
+
echo '{"email":"ada@acme.com","app_password":"abcd efgh ijkl mnop"}' | outrank-cli ai-cited-lists mailbox connect 00000000-0000-0000-0000-000000000000 --json-stdin
|
|
579
578
|
outrank-cli subscription status
|
|
580
579
|
outrank-cli usage stats
|
|
581
580
|
outrank-cli products get 00000000-0000-0000-0000-000000000000
|
|
@@ -826,7 +825,7 @@ For a product with a hosted Outrank Blog (`products blog get` shows it):
|
|
|
826
825
|
AI-Cited Lists is part of the Backlinks Enterprise plan. Outrank asks ChatGPT the product's buyer questions several times a week, keeps the "best of" lists it cites, and emails each list's owner from the customer's own Google mailbox with a paid offer for the #1 or #2 spot. The `ai-cited-lists` toolset is listed only for organizations with a product on that plan; on any other product every command except `mailbox disconnect` (admin-only, so a leaving customer can still revoke the Google token) returns `AI_CITED_LISTS_ENTERPRISE_REQUIRED` with `details.upgrade_url`, and while Outrank has outreach switched off they return `AI_CITED_LISTS_UNAVAILABLE`, which is not a plan problem.
|
|
827
826
|
|
|
828
827
|
- `ai-cited-lists status <product-id>` is the entry point: `data.setup.missing` names what outreach still needs (`mailbox`, `sender_details`, `top_up_consent`) and `data.checked` says whether ChatGPT was asked yet.
|
|
829
|
-
- Setup needs an admin key for the top-up consent, the mailbox and the settings (questions, `entry generate` and `setup finish` do not) and happens in three parts: `top-up-consent get`, then `top-up-consent confirm` after the human agreed to the terms (it authorizes credit-pack purchases on the card on file when the balance cannot cover a verified spot); `mailbox connect`
|
|
828
|
+
- Setup needs an admin key for the top-up consent, the mailbox and the settings (questions, `entry generate` and `setup finish` do not) and happens in three parts: `top-up-consent get`, then `top-up-consent confirm` after the human agreed to the terms (it authorizes credit-pack purchases on the card on file when the balance cannot cover a verified spot); `mailbox connect --json-stdin` takes `{"email","app_password"}` (a Google app password the human created at https://myaccount.google.com/apppasswords; pass it on stdin so it stays out of the shell history) and connects at once, and `mailbox get` shows the four checks (`connection`, `domain`, `reply_filter`, `inbox_test`) with `mailbox domain-check`, `mailbox filter-test`, `mailbox inbox-test` and `mailbox dkim-selector --selector <name>` (or `--reset`) to fix them; `settings update --json '{"sender_name":"...","sender_title":"...","postal_address":"..."}'` signs the emails.
|
|
830
829
|
- `questions list|add|edit|remove` manage the buyer questions. `citations check` asks ChatGPT now unless fresh data or a running check exists; `citations summary [--weeks 4|12]` shows the answers naming the product and the pages ChatGPT cited.
|
|
831
830
|
- `lists list [--view to_send|skipped]` shows this week's cited lists; nothing needs approval, every list gets an offer on `next_send_at` unless `lists skip` is called. `outreach` lists every offer with its stage, the latest owner replies and the sending health; `offers get` opens one and `offers withdraw` cancels a draft or sent offer; `wins get` is the proof page of a won list. `settings update --json '{"outreach_paused":true}'` pauses new emails without hiding live spots.
|
|
832
831
|
- `entry generate` rewrites the base entry owners publish (minutes; read it with `settings get`); `settings update --json '{"entry_mode":"custom","custom_entry":{"markdown":"..."}}'` publishes custom wording instead (links may only point to the product site).
|
package/SKILL.md
CHANGED
|
@@ -610,8 +610,8 @@ Inspect before mutating:
|
|
|
610
610
|
Setup (the top-up consent, the mailbox and the settings need a key that belongs to an organization admin; questions, `entry generate` and `setup finish` do not):
|
|
611
611
|
|
|
612
612
|
1. `outrank-cli ai-cited-lists top-up-consent get <productId>`, show the terms, and only after the human agrees in their own words run `top-up-consent confirm <productId>` — it authorizes credit-pack purchases on the card on file when the balance cannot cover a verified spot
|
|
613
|
-
2.
|
|
614
|
-
3. `outrank-cli ai-cited-lists mailbox get <productId>` shows the four checks: `connection`, `domain` (SPF, DKIM, DMARC; `mailbox domain-check` re-runs it, `mailbox dkim-selector --selector <name>` sets a Workspace selector, `--reset` restores the default), `reply_filter` (the human creates a Gmail filter that forwards replies to
|
|
613
|
+
2. Ask the human for the Gmail or Google Workspace address and a Google app password created for it at https://myaccount.google.com/apppasswords (2-Step Verification must be on), then pipe `{"email":"...","app_password":"..."}` into `outrank-cli ai-cited-lists mailbox connect <productId> --json-stdin`; on an error, report the error message to the human. Never repeat the app password back or store it
|
|
614
|
+
3. `outrank-cli ai-cited-lists mailbox get <productId>` shows the four checks: `connection`, `domain` (SPF, DKIM, DMARC; `mailbox domain-check` re-runs it, `mailbox dkim-selector --selector <name>` sets a Workspace selector, `--reset` restores the default), `reply_filter` (the human adds `reply_filter.forward_address` under Forwarding and POP/IMAP in Gmail, confirms it by opening `reply_filter.forwarding_confirmation_url`, keeps Disable forwarding selected, creates a Gmail filter that forwards replies to that address, then `mailbox filter-test`; `reply_filter.forwards_all_mail_since` means Gmail forwards every email and the human must select Disable forwarding), `inbox_test` (`mailbox inbox-test`). Sending starts only when `ready_to_send` is true
|
|
615
615
|
4. `outrank-cli ai-cited-lists settings update <productId> --json '{"sender_name":"...","sender_title":"...","postal_address":"..."}'` signs the emails
|
|
616
616
|
5. optionally `questions add|edit|remove` (written the way a buyer asks ChatGPT), `entry generate <productId>` (minutes; read the result with `settings get`) or `settings update --json '{"entry_mode":"custom","custom_entry":{"markdown":"..."}}'`, and `setup finish <productId>` so the dashboard opens on the tabs
|
|
617
617
|
|
|
@@ -689,4 +689,4 @@ Then: `placements list`, `placements regenerate|revalidate`, `article get/edit <
|
|
|
689
689
|
|
|
690
690
|
## Current limitation
|
|
691
691
|
|
|
692
|
-
The implementation plan is broader than the current live API. Keywords, core article flows, article improvements, linking, backlink exchange management, marketplace seller and buyer flows, AI-Cited Lists, and the current integration-management flows are exposed in `outrank-cli`, including direct setup for webhook, Ghost, Shopify, Webflow, Wix, Framer, WordPress Plugin, and Next.js Blog, plus OAuth flows for WordPress.com and Notion. Purchasing or changing backlink add-ons, marketplace Enterprise checkout, Stripe Express identity/bank onboarding, marketplace plan upgrades, the Google
|
|
692
|
+
The implementation plan is broader than the current live API. Keywords, core article flows, article improvements, linking, backlink exchange management, marketplace seller and buyer flows, AI-Cited Lists, and the current integration-management flows are exposed in `outrank-cli`, including direct setup for webhook, Ghost, Shopify, Webflow, Wix, Framer, WordPress Plugin, and Next.js Blog, plus OAuth flows for WordPress.com and Notion. Purchasing or changing backlink add-ons, marketplace Enterprise checkout, Stripe Express identity/bank onboarding, marketplace plan upgrades, the creation of the Google app password for the AI-Cited Lists mailbox and the AI-Cited Lists entry chat with image uploads still require the dashboard or a browser. If the user asks for something not present in `outrank-cli --help`, say that exact command surface is not shipped yet and do not invent unsupported commands.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "outrank-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"mcpName": "so.outrank/outrank",
|
|
5
5
|
"description": "Agent-first CLI and MCP server for the Outrank agent API",
|
|
6
6
|
"type": "module",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"LICENSE"
|
|
13
13
|
],
|
|
14
14
|
"bin": {
|
|
15
|
-
"outrank-cli": "
|
|
16
|
-
"outrank-mcp": "
|
|
15
|
+
"outrank-cli": "bin/outrank-cli.js",
|
|
16
|
+
"outrank-mcp": "bin/outrank-mcp.js"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
19
|
"start": "node ./src/index.js",
|
|
@@ -135,11 +135,10 @@ const setupAiCitedListsText = (productId) =>
|
|
|
135
135
|
'2. Top-up consent: read the terms with ai_cited_lists_top_up_consent_get, explain that a verified spot costs ' +
|
|
136
136
|
'credits and that a short balance triggers a credit-pack purchase on the card on file, and call ' +
|
|
137
137
|
'ai_cited_lists_top_up_consent_confirm only after the user agrees in their own words.',
|
|
138
|
-
'3. Mailbox:
|
|
139
|
-
'
|
|
140
|
-
'
|
|
141
|
-
'
|
|
142
|
-
'before any fresh connect. Once completed, ' +
|
|
138
|
+
'3. Mailbox: ask the user for the Gmail or Google Workspace address and a Google app password created for it ' +
|
|
139
|
+
'at https://myaccount.google.com/apppasswords, then call ai_cited_lists_mailbox_connect with the address and ' +
|
|
140
|
+
'that app password; on an error, tell the user the error message. Never repeat the app password back. Once ' +
|
|
141
|
+
'connected, ' +
|
|
143
142
|
'ai_cited_lists_mailbox_get shows the four checks (connection, domain, reply filter, inbox test). Fix them ' +
|
|
144
143
|
'with ai_cited_lists_mailbox_domain_check, ai_cited_lists_mailbox_filter_test (after the user created the ' +
|
|
145
144
|
'Gmail forwarding filter) and ai_cited_lists_mailbox_inbox_test.',
|
|
@@ -274,17 +274,13 @@ export const TOOL_NOTES = Object.freeze({
|
|
|
274
274
|
},
|
|
275
275
|
'ai-cited-lists.mailbox.connect': {
|
|
276
276
|
note:
|
|
277
|
-
'Admin-only and needs the top-up consent.
|
|
278
|
-
'
|
|
279
|
-
'
|
|
280
|
-
'
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
'Google address to pin (optional): the consent screen pre-selects it and only that address can finish the ' +
|
|
284
|
-
'connection, so a leaked link cannot bind another mailbox.',
|
|
285
|
-
},
|
|
277
|
+
'Admin-only and needs the top-up consent. Ask the user for the Gmail or Google Workspace address and a Google ' +
|
|
278
|
+
'app password created for it at https://myaccount.google.com/apppasswords (2-Step Verification must be on). ' +
|
|
279
|
+
'The call checks the login with Google and connects at once; on an error, tell the user the error.message ' +
|
|
280
|
+
'(a regular password, a wrong app password, app passwords turned off by a Workspace admin, or too many ' +
|
|
281
|
+
'attempts). Never repeat the app password back or keep it.',
|
|
282
|
+
body: 'Fields (all required): email, app_password.',
|
|
286
283
|
},
|
|
287
|
-
'ai-cited-lists.mailbox.poll': { fields: { attemptId: 'attempt_id returned by ai_cited_lists_mailbox_connect.' } },
|
|
288
284
|
'ai-cited-lists.mailbox.dkim-selector': {
|
|
289
285
|
note: 'Pass exactly one of selector or reset.',
|
|
290
286
|
fields: {
|
|
@@ -3,10 +3,7 @@ import { Surface } from '../core/context.js';
|
|
|
3
3
|
import { usageError } from '../core/errors.js';
|
|
4
4
|
import { bool, list, object, oneOf, string, uuid } from '../core/schema.js';
|
|
5
5
|
import {
|
|
6
|
-
ATTEMPT_ID_PLACEHOLDERS,
|
|
7
6
|
PRODUCT_CLI,
|
|
8
|
-
attemptIdInput,
|
|
9
|
-
attemptIdQuery,
|
|
10
7
|
productInput,
|
|
11
8
|
productParams,
|
|
12
9
|
productParamsWith,
|
|
@@ -15,6 +12,10 @@ import {
|
|
|
15
12
|
import { BodyMode, CommandKind, Toolset, defineCommand, defineGroup } from './registry.js';
|
|
16
13
|
import { subGroup } from './subGroup.js';
|
|
17
14
|
|
|
15
|
+
const MAILBOX_EMAIL_HINT = 'Gmail or Google Workspace address that sends the offers.';
|
|
16
|
+
const APP_PASSWORD_HINT =
|
|
17
|
+
'Google app password created for that address at https://myaccount.google.com/apppasswords (16 letters; ' +
|
|
18
|
+
'spaces are ignored). Never repeat it back or store it.';
|
|
18
19
|
const SENDER_NAME_HINT = 'Name that signs the outreach emails.';
|
|
19
20
|
const SENDER_TITLE_HINT = 'Job title under the signature.';
|
|
20
21
|
const POSTAL_ADDRESS_HINT = 'Company postal address printed in every email (required by anti-spam law).';
|
|
@@ -27,6 +28,11 @@ const ENTRY_MODE_HINT = 'generated uses the entry Outrank wrote; custom uses cus
|
|
|
27
28
|
const CUSTOM_ENTRY_HINT = 'Entry written by the customer; links may only point to the product site.';
|
|
28
29
|
const CUSTOM_ENTRY_MARKDOWN_HINT = 'The entry text as markdown.';
|
|
29
30
|
|
|
31
|
+
const MAILBOX_CONNECT_BODY = object().shape({
|
|
32
|
+
email: string().required().describe(MAILBOX_EMAIL_HINT),
|
|
33
|
+
app_password: string().required().describe(APP_PASSWORD_HINT),
|
|
34
|
+
});
|
|
35
|
+
|
|
30
36
|
const SETTINGS_BODY = object().shape({
|
|
31
37
|
sender_name: string().describe(SENDER_NAME_HINT),
|
|
32
38
|
sender_title: string().describe(SENDER_TITLE_HINT),
|
|
@@ -61,8 +67,7 @@ export const AI_CITED_LISTS_HELP = `Usage:
|
|
|
61
67
|
outrank-cli ai-cited-lists settings get <product-id>
|
|
62
68
|
outrank-cli ai-cited-lists settings update <product-id> --json <object>
|
|
63
69
|
outrank-cli ai-cited-lists mailbox get <product-id>
|
|
64
|
-
outrank-cli ai-cited-lists mailbox connect <product-id>
|
|
65
|
-
outrank-cli ai-cited-lists mailbox poll <product-id> --attempt-id <attempt-id>
|
|
70
|
+
outrank-cli ai-cited-lists mailbox connect <product-id> --json-stdin
|
|
66
71
|
outrank-cli ai-cited-lists mailbox domain-check <product-id>
|
|
67
72
|
outrank-cli ai-cited-lists mailbox inbox-test <product-id>
|
|
68
73
|
outrank-cli ai-cited-lists mailbox filter-test <product-id>
|
|
@@ -85,7 +90,9 @@ Notes:
|
|
|
85
90
|
the product (top-up-consent get shows the prices); a short balance is covered by an automatic credit-pack
|
|
86
91
|
purchase that an organization admin confirms once with top-up-consent confirm. Sending needs a connected
|
|
87
92
|
mailbox with four green checks, the sender details and that consent: status lists what is still missing.
|
|
88
|
-
mailbox connect
|
|
93
|
+
mailbox connect takes {"email","app_password"}: the Google app password the human created at
|
|
94
|
+
https://myaccount.google.com/apppasswords. Pass it with --json-stdin so it stays out of the shell history.
|
|
95
|
+
entry generate takes a few minutes.
|
|
89
96
|
|
|
90
97
|
Examples:
|
|
91
98
|
outrank-cli ai-cited-lists status 00000000-0000-0000-0000-000000000000
|
|
@@ -93,8 +100,7 @@ Examples:
|
|
|
93
100
|
outrank-cli ai-cited-lists lists skip 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000
|
|
94
101
|
outrank-cli ai-cited-lists questions add 00000000-0000-0000-0000-000000000000 --question "What is the best privacy-friendly analytics tool?"
|
|
95
102
|
outrank-cli ai-cited-lists settings update 00000000-0000-0000-0000-000000000000 --json '{"sender_name":"Ada Lovelace","sender_title":"Founder","postal_address":"1 Main St, Austin, TX 78701"}'
|
|
96
|
-
outrank-cli ai-cited-lists mailbox connect 00000000-0000-0000-0000-000000000000 --
|
|
97
|
-
outrank-cli ai-cited-lists mailbox poll 00000000-0000-0000-0000-000000000000 --attempt-id <attempt-id>
|
|
103
|
+
echo '{"email":"ada@acme.com","app_password":"abcd efgh ijkl mnop"}' | outrank-cli ai-cited-lists mailbox connect 00000000-0000-0000-0000-000000000000 --json-stdin
|
|
98
104
|
outrank-cli ai-cited-lists top-up-consent confirm 00000000-0000-0000-0000-000000000000
|
|
99
105
|
outrank-cli ai-cited-lists citations summary 00000000-0000-0000-0000-000000000000 --weeks 12
|
|
100
106
|
`;
|
|
@@ -123,8 +129,7 @@ const SETTINGS_HELP = `Usage:
|
|
|
123
129
|
`;
|
|
124
130
|
const MAILBOX_HELP = `Usage:
|
|
125
131
|
outrank-cli ai-cited-lists mailbox get <product-id>
|
|
126
|
-
outrank-cli ai-cited-lists mailbox connect <product-id>
|
|
127
|
-
outrank-cli ai-cited-lists mailbox poll <product-id> --attempt-id <attempt-id>
|
|
132
|
+
outrank-cli ai-cited-lists mailbox connect <product-id> --json-stdin
|
|
128
133
|
outrank-cli ai-cited-lists mailbox domain-check <product-id>
|
|
129
134
|
outrank-cli ai-cited-lists mailbox inbox-test <product-id>
|
|
130
135
|
outrank-cli ai-cited-lists mailbox filter-test <product-id>
|
|
@@ -157,7 +162,6 @@ const POLL_SETTINGS_GET = 'ai-cited-lists.settings.get';
|
|
|
157
162
|
const QUESTION_REQUIRED = {
|
|
158
163
|
guidance: 'Pass the buyer question as text, e.g. `--question "What is the best CRM?"`.',
|
|
159
164
|
};
|
|
160
|
-
const ATTEMPT_ID_GUIDANCE = 'Pass the attempt_id returned by `ai-cited-lists mailbox connect`.';
|
|
161
165
|
const DKIM_SELECTOR_WORDING = Object.freeze({
|
|
162
166
|
[Surface.CLI]: {
|
|
163
167
|
message: 'Pass exactly one of --selector or --reset.',
|
|
@@ -482,7 +486,7 @@ const mailboxGet = defineCommand({
|
|
|
482
486
|
|
|
483
487
|
const mailboxDisconnect = defineCommand({
|
|
484
488
|
id: `${GROUP_ID}.mailbox.disconnect`,
|
|
485
|
-
summary: 'Disconnect the Google mailbox and
|
|
489
|
+
summary: 'Disconnect the Google mailbox and delete its stored app password.',
|
|
486
490
|
kind: CommandKind.DESTRUCTIVE,
|
|
487
491
|
toolsets: TOOLSETS,
|
|
488
492
|
input: productInput(),
|
|
@@ -497,33 +501,20 @@ const mailboxDisconnect = defineCommand({
|
|
|
497
501
|
|
|
498
502
|
const mailboxConnect = defineCommand({
|
|
499
503
|
id: `${GROUP_ID}.mailbox.connect`,
|
|
500
|
-
summary: '
|
|
504
|
+
summary: 'Connect the Google mailbox that sends the offers with its address and a Google app password.',
|
|
501
505
|
kind: CommandKind.WRITE,
|
|
502
506
|
toolsets: TOOLSETS,
|
|
503
|
-
input:
|
|
504
|
-
cli:
|
|
507
|
+
input: productInput(),
|
|
508
|
+
cli: PRODUCT_CLI,
|
|
509
|
+
mcp: { sensitiveBody: true },
|
|
510
|
+
body: BodyMode.JSON,
|
|
511
|
+
bodyField: MAILBOX_CONNECT_BODY,
|
|
505
512
|
run: (input, ctx) =>
|
|
506
513
|
ctx.http({
|
|
507
514
|
method: 'POST',
|
|
508
515
|
path: `${BASE_PATH}/mailbox/connect`,
|
|
509
516
|
pathParams: productParams(input),
|
|
510
|
-
body:
|
|
511
|
-
}),
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
const mailboxPoll = defineCommand({
|
|
515
|
-
id: `${GROUP_ID}.mailbox.poll`,
|
|
516
|
-
summary: 'Poll a mailbox connection attempt until Google consent completed.',
|
|
517
|
-
kind: CommandKind.READ,
|
|
518
|
-
toolsets: TOOLSETS,
|
|
519
|
-
input: { ...productInput(), ...attemptIdInput(ATTEMPT_ID_GUIDANCE) },
|
|
520
|
-
cli: { ...PRODUCT_CLI, placeholders: ATTEMPT_ID_PLACEHOLDERS },
|
|
521
|
-
run: (input, ctx) =>
|
|
522
|
-
ctx.http({
|
|
523
|
-
method: 'GET',
|
|
524
|
-
path: `${BASE_PATH}/mailbox/connect`,
|
|
525
|
-
pathParams: productParams(input),
|
|
526
|
-
query: attemptIdQuery(input),
|
|
517
|
+
body: input.body,
|
|
527
518
|
}),
|
|
528
519
|
});
|
|
529
520
|
|
|
@@ -720,11 +711,10 @@ export const aiCitedListsGroup = defineGroup({
|
|
|
720
711
|
subGroup({
|
|
721
712
|
id: `${GROUP_ID}.mailbox`,
|
|
722
713
|
usage: MAILBOX_HELP,
|
|
723
|
-
actions: 'get|connect|
|
|
714
|
+
actions: 'get|connect|domain-check|inbox-test|filter-test|dkim-selector|disconnect',
|
|
724
715
|
children: [
|
|
725
716
|
mailboxGet,
|
|
726
717
|
mailboxConnect,
|
|
727
|
-
mailboxPoll,
|
|
728
718
|
mailboxDomainCheck,
|
|
729
719
|
mailboxInboxTest,
|
|
730
720
|
mailboxFilterTest,
|