@aglyn/aglyn 1.0.0-beta.151 → 1.0.0-beta.153

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.
Files changed (51) hide show
  1. package/package.json +10 -10
  2. package/src/lib/app-utils/crm-csv.d.ts +10 -3
  3. package/src/lib/app-utils/crm-csv.js +37 -2
  4. package/src/lib/app-utils/crm-csv.js.map +1 -1
  5. package/src/lib/app-utils/crm-email-templates.js +15 -0
  6. package/src/lib/app-utils/crm-email-templates.js.map +1 -1
  7. package/src/lib/app-utils/crm.d.ts +69 -2
  8. package/src/lib/app-utils/crm.js +126 -1
  9. package/src/lib/app-utils/crm.js.map +1 -1
  10. package/src/lib/app-utils/docs-help.generated.d.ts +1 -1
  11. package/src/lib/app-utils/docs-help.generated.js +2 -0
  12. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  13. package/src/lib/app-utils/docs-index.generated.js +30 -16
  14. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  15. package/src/lib/app-utils/email-starter-policy.js +5 -3
  16. package/src/lib/app-utils/email-starter-policy.js.map +1 -1
  17. package/src/lib/app-utils/notifications.d.ts +11 -0
  18. package/src/lib/app-utils/notifications.js +11 -1
  19. package/src/lib/app-utils/notifications.js.map +1 -1
  20. package/src/lib/app-utils/plan-entitlements.d.ts +34 -0
  21. package/src/lib/app-utils/plan-entitlements.js +40 -0
  22. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  23. package/src/lib/app-utils/server.d.ts +0 -1
  24. package/src/lib/app-utils/server.js +0 -1
  25. package/src/lib/app-utils/server.js.map +1 -1
  26. package/src/lib/plugin-manager/first-party-plugins.generated.js +1 -0
  27. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  28. package/src/lib/plugin-manager/plugin-artifact-inventory.d.ts +145 -0
  29. package/src/lib/plugin-manager/plugin-artifact-inventory.js +126 -0
  30. package/src/lib/plugin-manager/plugin-artifact-inventory.js.map +1 -0
  31. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +32 -1
  32. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
  33. package/src/lib/plugin-manager/plugin-lead-conversion.d.ts +67 -0
  34. package/src/lib/plugin-manager/plugin-lead-conversion.js +93 -0
  35. package/src/lib/plugin-manager/plugin-lead-conversion.js.map +1 -0
  36. package/src/lib/plugin-manager/plugin-org-capacity.d.ts +12 -0
  37. package/src/lib/plugin-manager/plugin-org-capacity.js.map +1 -1
  38. package/src/lib/plugin-manager/plugin-permissions.d.ts +7 -0
  39. package/src/lib/plugin-manager/plugin-permissions.js +30 -0
  40. package/src/lib/plugin-manager/plugin-permissions.js.map +1 -1
  41. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +8 -1
  42. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  43. package/src/lib/plugin-manager/plugin-trust-signing.d.ts +51 -0
  44. package/src/lib/plugin-manager/plugin-trust-signing.js +119 -0
  45. package/src/lib/plugin-manager/plugin-trust-signing.js.map +1 -0
  46. package/src/lib/app-utils/marketplace-verification.d.ts +0 -95
  47. package/src/lib/app-utils/marketplace-verification.js +0 -81
  48. package/src/lib/app-utils/marketplace-verification.js.map +0 -1
  49. package/src/lib/app-utils/publisher-attestation.d.ts +0 -99
  50. package/src/lib/app-utils/publisher-attestation.js +0 -158
  51. package/src/lib/app-utils/publisher-attestation.js.map +0 -1
@@ -296,7 +296,7 @@ export declare const PLUGIN_DOCS_ANCHORS: {
296
296
  readonly contactRecord: readonly ["#adding-a-contact-by-hand", "#the-record-page", "#deleting-and-erasing", "#what-each-site-keeps-to-itself", "#merging-two-records", "#likely-duplicates", "#owner", "#last-engaged", "#lifecycle-stages", "#where-the-persons-lead-is", "#finding-a-contact", "#files", "#related"];
297
297
  readonly contacts: readonly ["#whats-in-the-crm-area", "#unified-ingestion", "#what-each-plan-includes", "#the-contacts-page", "#import-from-csv", "#segments", "#everywhere-the-crm-shows-up", "#capture-replies", "#at-the-organization-level", "#who-can-open-the-crm", "#related"];
298
298
  readonly crmEmailTemplates: readonly ["#templates-and-snippets", "#merge-fields", "#saving", "#managing-templates", "#duplicate-a-template", "#shared-or-personal", "#over-the-rest-api", "#related"];
299
- readonly crmLeads: readonly ["#what-makes-a-lead", "#the-leads-list", "#working-a-lead-from-the-row", "#several-leads-at-once", "#export-csv", "#import-from-csv", "#who-owns-a-lead", "#a-leads-page", "#converting-a-lead", "#unqualifying-a-lead", "#erasing-the-person", "#who-can-do-this", "#related"];
299
+ readonly crmLeads: readonly ["#what-makes-a-lead", "#what-a-lead-holds", "#adding-a-lead-by-hand", "#the-leads-list", "#working-a-lead-from-the-row", "#several-leads-at-once", "#export-csv", "#import-from-csv", "#who-owns-a-lead", "#a-leads-page", "#converting-a-lead", "#unqualifying-a-lead", "#erasing-the-person", "#who-can-do-this", "#related"];
300
300
  readonly crmReports: readonly ["#choosing-a-period", "#contacts", "#sources-and-lifecycle", "#conversion-by-source", "#lead-funnel", "#pipeline", "#forecast-by-close-month", "#won-and-lost", "#won-and-lost-by-owner", "#activity-by-teammate", "#tasks", "#exporting-a-table", "#crm-at-a-glance", "#how-the-numbers-are-counted", "#related"];
301
301
  readonly crmSettings: readonly ["#companies", "#create-companies-from-work-email-domains", "#default-owner", "#assignment-rules", "#round-robin", "#email-templates", "#email-capture", "#your-sending-addresses", "#recipes", "#related"];
302
302
  readonly crmTasks: readonly ["#the-tasks-page", "#the-calendar-view", "#snoozing-a-task", "#selecting-exporting-and-acting-on-many", "#import-from-csv", "#creating-a-task", "#assigning-a-task-to-someone-else", "#completing-and-reopening", "#organization-tasks", "#tasks-on-a-contact-company-or-deal", "#reminders", "#turning-reminders-off", "#next-activity", "#the-daily-digest", "#turning-it-off", "#the-dashboard-card", "#who-can-do-what", "#related"];
@@ -596,6 +596,8 @@ export const PLUGIN_DOCS_ANCHORS = {
596
596
  ],
597
597
  crmLeads: [
598
598
  '#what-makes-a-lead',
599
+ '#what-a-lead-holds',
600
+ '#adding-a-lead-by-hand',
599
601
  '#the-leads-list',
600
602
  '#working-a-lead-from-the-row',
601
603
  '#several-leads-at-once',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/docs-help.generated.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// GENERATED FILE — do not edit. Regenerate with:\n// node tools/scripts/generate-docs-help.mjs\n// Source of truth: apps/docs/docs frontmatter + headings (AGL-602).\n\n// The first-party plugin consoles live in `libs/plugins/*` and cannot import\n// the console's constants, so they carry their own generated subset of the\n// docs help registry — the topics their cards actually link to, and no others.\n\nexport interface PluginDocsTopic {\n /** Docs-site path, e.g. `/commerce-and-bookings/commerce/overview`. */\n path: string\n /** Docs page title. */\n title: string\n /** Verbatim docs frontmatter description — the tooltip excerpt. */\n excerpt: string\n}\n\nexport const PLUGIN_DOCS = {\n abuseReports: {\n path: '/staff-console/abuse-reports',\n title: 'Abuse reports',\n excerpt: 'The public abuse-report queue — where outside reports land, how to triage by severity, which lever answers which report, and the CSAM and DMCA paths that are not takedown buttons.',\n },\n actionsBuilder: {\n path: '/marketing-and-automation/workflows-and-actions/actions-builder',\n title: 'Actions builder',\n excerpt: 'Map a single event to a single action without building a full workflow.',\n },\n aglynAssist: {\n path: '/getting-started/aglyn-assist',\n title: 'Aglyn Assist',\n excerpt: 'Ask the built-in AI helper how to do anything in Aglyn — it answers from these docs and links you straight to the right page.',\n },\n aiAutomations: {\n path: '/ai/automations-with-ai',\n title: 'Explain automations with AI',\n excerpt: 'Aglyn AI can explain an automation you already have and tell you why one of its runs failed. Drafting an automation from a description is not available yet.',\n },\n aiCrm: {\n path: '/ai/crm-by-ai',\n title: 'The AI CRM built into Aglyn',\n excerpt: 'An AI CRM for small business: a short summary and a suggested next step on a contact, company, deal or lead, a one-to-one email drafted into the composer, and an import\\'s columns matched to fields.',\n },\n aiExperiments: {\n path: '/ai/ab-tests-with-ai',\n title: 'A/B tests by AI: write variants, read the result',\n excerpt: 'Have Aglyn AI write two to four variants for a screen, section or email experiment, and put a finished test into plain language — with the verdict decided from the counts before the model is asked anything.',\n },\n aiMonitoring: {\n path: '/staff-console/ai-monitoring',\n title: 'AI monitoring',\n excerpt: 'How staff watch one organization\\'s AI usage — the add-on, credit pool, overage, refusals, jobs, tokens and cache hit rate, top spenders and margin — and where those figures appear across the staff console.',\n },\n aiProducts: {\n path: '/ai/products-with-ai',\n title: 'Product copy and catalogs with AI',\n excerpt: 'An AI product description generator for your catalog: write copy for one product or a whole import, propose a first catalog, and propose categories and discounts — all as proposals you review.',\n },\n aiSeo: {\n path: '/building-sites/seo/seo-by-ai',\n title: 'AI SEO for your website',\n excerpt: 'AI SEO for websites, on the pages you already have: have AI write a page or product\\'s search listing, audit every published page with a proposed fix for each finding, and draft your structured data and /llms.txt.',\n },\n aiThemes: {\n path: '/ai/theme-assist',\n title: 'Change your site\\'s theme with AI',\n excerpt: 'Describe a change to your site\\'s theme and get a proposal for the theme editor\\'s own controls, previewed before and after, that you save in the editor. Rolling out.',\n },\n assistSignals: {\n path: '/staff-console/assist-signals',\n title: 'Assist Signal',\n excerpt: 'The docs-gap and cost board behind Assist — how the ranking is ordered, why ungrounded questions are counted separately, and what the cache-read rate says about margin.',\n },\n billing: {\n path: '/workspace-and-billing/billing-and-plans/overview',\n title: 'Billing & Plans',\n excerpt: 'How Aglyn\\'s tiers, entitlements, quotas, usage meters, and seat add-ons work.',\n },\n bindings: {\n path: '/building-sites/bindings/overview',\n title: 'Bindings, Variables & Functions',\n excerpt: 'Live values in your content — typed variables, no-code functions, and rename-safe id tokens.',\n },\n bookings: {\n path: '/commerce-and-bookings/bookings/overview',\n title: 'Bookings & Scheduling',\n excerpt: 'Offer services with availability, let visitors book, take payment, and send reminders.',\n },\n buildAWorkflow: {\n path: '/marketing-and-automation/workflows-and-actions/build-a-workflow',\n title: 'Build a workflow',\n excerpt: 'Create a multi-step workflow that runs when a site event fires.',\n },\n catalog: {\n path: '/commerce-and-bookings/commerce/catalog',\n title: 'Product catalog',\n excerpt: 'Products with options and variants, categories, tags, and manual or smart collections.',\n },\n commerce: {\n path: '/commerce-and-bookings/commerce/overview',\n title: 'Commerce',\n excerpt: 'Sell physical, digital, and service products with a full catalog, orders pipeline, shipping, taxes, and your own Stripe account.',\n },\n commerceEndToEnd: {\n path: '/guides/commerce-end-to-end',\n title: 'Commerce end to end',\n excerpt: 'Create products with billing modes, design the storefront with Commerce blocks, take Stripe checkout for one-time and subscription sales, and run orders from the console.',\n },\n companies: {\n path: '/content-and-data/crm/companies',\n title: 'Companies',\n excerpt: 'Group your contacts under the businesses they belong to — one record per company, with its domain, owner, address and the people who work there.',\n },\n consoleTour: {\n path: '/getting-started/console-tour',\n title: 'The console tour',\n excerpt: 'Where things live in the Aglyn console app bar and navigation.',\n },\n contactActivities: {\n path: '/content-and-data/crm/activities',\n title: 'Activities & the timeline',\n excerpt: 'Log calls, emails, meetings and notes against a contact, a company, a deal or a lead, email one person from their record, and read it all in one timeline beside everything captured and every campaign sent.',\n },\n contactFields: {\n path: '/content-and-data/crm/custom-fields',\n title: 'Custom fields',\n excerpt: 'Define your own properties on contacts, companies and deals — text, number, date, choice, checkbox or link — show them on every record and its list, and save form answers straight into a contact\\'s.',\n },\n contactRecord: {\n path: '/content-and-data/crm/contact-record',\n title: 'The contact record',\n excerpt: 'Add a contact by hand, keep a profile on them — phone, company, title, address, owner and lifecycle stage — open their own page in the CRM, and merge two records that turn out to be one person.',\n },\n contacts: {\n path: '/content-and-data/crm/overview',\n title: 'CRM',\n excerpt: 'One place for the people who interact with your sites — contacts captured from forms, members, orders and bookings, with leads, companies, a deals pipeline, tasks, a timeline, reports and custom fields.',\n },\n crmEmailTemplates: {\n path: '/content-and-data/crm/email-templates',\n title: 'Email templates',\n excerpt: 'Keep the letters your team sends from a record — templates that fill in the subject and the message, snippets that drop in a paragraph, and merge fields that fill in the person\\'s name, their company, the deal and you.',\n },\n crmLeads: {\n path: '/content-and-data/crm/leads',\n title: 'Leads',\n excerpt: 'Work the people your site has captured — a status, an owner and notes on every lead — and convert one into a contact, a company and a deal.',\n },\n crmReports: {\n path: '/content-and-data/crm/reports',\n title: 'Reports',\n excerpt: 'New contacts, where they came from and which sources convert, the lead funnel, the open pipeline and its forecast, won and lost, who logged what, and the task load — counted on the server, every table exportable as CSV.',\n },\n crmSettings: {\n path: '/content-and-data/crm/settings',\n title: 'CRM settings',\n excerpt: 'What the CRM does on its own for every site — whether a company is created from a contact\\'s work email domain, who a new contact is assigned to, the address that files replies on a record, and each site\\'s recipes.',\n },\n crmTasks: {\n path: '/content-and-data/crm/tasks',\n title: 'Tasks & follow-ups',\n excerpt: 'Calls, emails, meetings and to-dos with a due date, an assignee and a link to the record they are for — overdue and today read off the clock, a snooze, a reminder at its own time, and a morning digest.',\n },\n crmViews: {\n path: '/content-and-data/crm/views',\n title: 'Saved views',\n excerpt: 'Keep a CRM list\\'s filters, columns and sort under a name, open it from the views menu or a link, share it with the team, and use a contacts view as an email audience.',\n },\n datasets: {\n path: '/content-and-data/datasets/overview',\n title: 'Datasets & Dynamic Content',\n excerpt: 'Model structured content with typed fields and relations, then bind it into repeatable components.',\n },\n deals: {\n path: '/content-and-data/crm/deals',\n title: 'Deals pipeline',\n excerpt: 'Every open deal by stage — with an amount, an owner and an expected close — as a board you drag across or a table you page through, and the won and lost history behind it.',\n },\n designedEmails: {\n path: '/marketing-and-automation/email-campaigns/designed-emails',\n title: 'Designed emails',\n excerpt: 'Build campaign emails in the besigner with email-safe blocks and merge tokens — no separate editor.',\n },\n emailCampaigns: {\n path: '/marketing-and-automation/email-campaigns/overview',\n title: 'Email Campaigns',\n excerpt: 'Campaigns to audiences built from your contacts. Campaign email starts at Pro and needs a sending domain of the site\\'s own; receipts and account email send on every plan.',\n },\n events: {\n path: '/content-and-data/events/overview',\n title: 'Events Calendar',\n excerpt: 'Keep a schedule of events in the console and publish the ones you choose to any screen, with search-engine event markup.',\n },\n forms: {\n path: '/content-and-data/forms/overview',\n title: 'Forms & Lead Capture',\n excerpt: 'Add forms to your site, collect submissions in an inbox, and write them into datasets.',\n },\n installYourFirstPlugin: {\n path: '/guides/install-your-first-plugin',\n title: 'Install your first marketplace item',\n excerpt: 'A click-by-click walkthrough of the Marketplace — find something, choose which sites get it, install it, and turn it off again.',\n },\n inviteTeammates: {\n path: '/workspace-and-billing/teams-and-roles/invite-teammates',\n title: 'Invite teammates',\n excerpt: 'Add people to your site and understand how team members act within your organization.',\n },\n manifestAndEnvs: {\n path: '/developers/plugins/reference/manifest-and-envs',\n title: 'Manifests, trust lifecycle & environment',\n excerpt: 'The plugin manifest schema, the marketplace listing/version documents, the trust state machine, and every PLUGIN_* environment variable.',\n },\n marketingOverlays: {\n path: '/marketing-and-automation/marketing-overlays/overview',\n title: 'Marketing Overlays',\n excerpt: 'Site-wide announcement bars and promotional popups with triggers, scheduling, and email capture.',\n },\n membersOnly: {\n path: '/workspace-and-billing/teams-and-roles/members-only',\n title: 'Members-only areas',\n excerpt: 'Let visitors sign up as members and gate screens so only members can view them.',\n },\n plugins: {\n path: '/developers/plugins/overview',\n title: 'Plugins & Marketplace',\n excerpt: 'Extend Aglyn with sandboxed plugins — install from the marketplace, configure them, and publish your own.',\n },\n pos: {\n path: '/commerce-and-bookings/commerce/pos-and-reservations',\n title: 'POS & reservations',\n excerpt: 'Sell in person from the console register and take date-range reservations with deposits.',\n },\n publishAPlugin: {\n path: '/developers/plugins/publish-a-plugin',\n title: 'Publish a plugin',\n excerpt: 'Ship your own plugin to the marketplace with version pinning.',\n },\n publisherHandbook: {\n path: '/developers/plugins/publishing/publisher-handbook',\n title: 'Publisher handbook',\n excerpt: 'Publishing to the Aglyn marketplace — from profile setup through listing authoring, review, updates, and getting paid.',\n },\n redirects: {\n path: '/building-sites/redirects/overview',\n title: 'Redirects',\n excerpt: 'Manage URL redirects with validation, loop detection, and hit metrics.',\n },\n sandboxSecurity: {\n path: '/developers/plugins/reference/sandbox-security',\n title: 'Sandbox security model',\n excerpt: 'How sandboxed marketplace plugins are isolated — separate origin, per-manifest CSP, pinned artifacts — and what that means when you write one.',\n },\n sequences: {\n path: '/content-and-data/crm/sequences',\n title: 'Sequences',\n excerpt: 'One-to-one email sequences a rep sends to a person from their own connected mailbox, kept with the CRM. Rolling out.',\n },\n webhooks: {\n path: '/marketing-and-automation/workflows-and-actions/webhooks',\n title: 'Webhooks',\n excerpt: 'Connect Aglyn to other systems with outbound and inbound webhooks.',\n },\n} as const satisfies Record<string, PluginDocsTopic>\n\nexport type PluginDocsKey = keyof typeof PLUGIN_DOCS\n\nexport const PLUGIN_DOCS_ANCHORS = {\n abuseReports: ['#where-reports-come-from', '#triage-by-severity', '#csam', '#which-lever', '#statuses', '#disclosure', '#dmca', '#counter-notices', '#counter-notice-clock', '#counter-notice-steps', '#repeat-infringers', '#repeat-infringer-threshold', '#known-gaps', '#related'],\n actionsBuilder: ['#create-an-action', '#recipes', '#describe-it', '#triggers', '#crm-events', '#only-run-when-a-field-matches', '#chain-multiple-conditions-andor', '#steps', '#crm-steps', '#step-conditions', '#sequences', '#run-history', '#what-is-and-isnt-recorded', '#interactions-from-the-besigner', '#when-to-use-which', '#related'],\n aglynAssist: ['#what-it-can-do', '#aglyn-ai', '#answers-for-beginners-and-developers', '#offers-to-open-a-page', '#edits-in-the-besigner', '#where-an-answer-came-from', '#answers-straight-from-the-documentation', '#message-limits', '#feedback', '#privacy'],\n aiAutomations: ['#draft', '#explain', '#why-a-run-failed', '#what-is-sent', '#who-can-use-it', '#related'],\n aiCrm: ['#summarize-a-record', '#summaries-are-reused-until-the-record-changes', '#draft-an-email', '#match-columns', '#what-is-sent', '#who-can-use-it', '#related'],\n aiExperiments: ['#it-proposes-you-write', '#write-variants', '#putting-them-in', '#what-it-will-not-write', '#read-a-result', '#the-verdict', '#the-words', '#undecided', '#what-is-sent', '#who-can-use-it', '#related'],\n aiMonitoring: ['#the-ai-card', '#where-else', '#one-account', '#the-spend-leaderboard', '#alerts', '#related'],\n aiProducts: ['#write-a-products-copy', '#write-copy-for-many-products', '#when-you-import-products', '#propose-a-first-catalog', '#propose-categories-and-discounts', '#what-the-copy-never-says', '#what-is-sent-to-the-ai-provider', '#who-can-use-it', '#related'],\n aiSeo: ['#write-a-pages-listing', '#write-a-products-listing', '#audit-the-whole-site', '#target-keywords', '#apply-all-as-drafts', '#structured-data-and-llmstxt', '#related'],\n aiThemes: ['#change-what-you-describe-or-design-a-new-theme', '#match-your-brand', '#review-the-proposal', '#save-it-or-dont', '#who-can-use-it', '#related'],\n assistSignals: ['#the-workflow-this-board-exists-for', '#fleet', '#the-cache-read-rate-and-what-a-bad-number-looks-like', '#where-the-money-goes', '#tokens-by-kind', '#docs-gaps', '#questions-the-docs-could-not-answer', '#what-people-actually-asked', '#what-assist-costs-by-workspace', '#reading-the-sample-honestly', '#related'],\n billing: ['#tiers--entitlements', '#enterprise', '#single-sign-on-and-enforcement', '#usage-meters', '#who-is-generating-what', '#ai-allotments', '#storage-overage', '#if-you-would-rather-uploads-stopped', '#assist-overage', '#stop-ai-assist-at-the-included-band', '#ai-overage-ceiling', '#free-ai-credits', '#ai-credit-alerts', '#usage-budget', '#seats', '#crm-records', '#the-crm-suite', '#one-to-one-email', '#organization-data', '#api-access', '#payments', '#outstanding', '#plan-total', '#billing-email', '#payment-methods', '#billing-address', '#tax-ids', '#sales-tax', '#platform-fees', '#related'],\n bindings: ['#binding-tokens', '#rename-safe-id-tokens', '#insert-a-variable', '#token-pills', '#in-the-canvas-text-editor', '#site-details', '#typed-variables', '#no-code-functions', '#parameters-a-visitor-can-answer', '#a-calculator-you-lay-out', '#where-used--safety', '#workflows', '#related'],\n bookings: ['#set-up-bookings', '#taking-bookings', '#reminders', '#payments-and-fees', '#service-tax', '#manage', '#booking-from-the-crm', '#canceling-and-refunding', '#related'],\n buildAWorkflow: ['#1-open-the-workflows-page', '#2-choose-a-trigger', '#3-add-steps', '#waiting', '#4-save-and-test', '#duplicate-a-workflow', '#tips', '#related'],\n catalog: ['#products-options-and-variants', '#billing-modes-and-subscriptions', '#ai', '#categories-and-tags', '#collections', '#slugs', '#merchant-center-feed', '#related'],\n commerce: ['#products-hub', '#inventory', '#reserved-stock', '#stock-movements', '#gift-cards', '#recovery-and-alerts', '#orders', '#orders-screen', '#order-statuses', '#order-money-tiles', '#a-lost-dispute', '#shipping--taxes', '#lodging-tax-on-reservations', '#storefront-sales-tax', '#destination-coverage', '#dropshipping', '#related'],\n commerceEndToEnd: ['#1-connect-payments', '#2-create-products', '#3-design-the-storefront', '#catalog-search-filters-and-sort', '#category-pages', '#the-product-page-template', '#4-what-checkout-does', '#paying-without-leaving-your-site', '#5-run-orders-from-the-console', '#6-subscriptions--the-stripe-portal', '#related'],\n companies: ['#the-companies-list', '#create-a-company', '#a-companys-page', '#contacts-at-a-company', '#linked-on-capture', '#import-from-csv', '#export-csv', '#deleting-a-company', '#who-can-see-a-company', '#files', '#related'],\n consoleTour: ['#the-app-bar', '#in-context-help', '#primary-navigation', '#editing-vs-managing', '#the-sites-list', '#the-status-pill', '#how-the-pill-is-decided', '#your-site-allowance', '#a-sites-dashboard', '#next', '#workspace-settings--notifications', '#the-notifications-feed', '#notification-settings', '#workspace-and-site-overrides', '#daily-digests', '#alerts-on-this-device'],\n contactActivities: ['#four-kinds-of-history', '#campaign-email', '#logging-an-activity', '#meeting-from-a-booking', '#click-to-call', '#sending-an-email', '#delivery-states', '#captured-email', '#where-an-activity-is-visible', '#the-recent-activity-feed', '#related'],\n contactFields: ['#define-a-field', '#fields-per-record', '#where-values-show', '#save-a-form-field', '#over-the-api', '#retire-restore-delete', '#recompute-next-activity', '#related'],\n contactRecord: ['#adding-a-contact-by-hand', '#the-record-page', '#deleting-and-erasing', '#what-each-site-keeps-to-itself', '#merging-two-records', '#likely-duplicates', '#owner', '#last-engaged', '#lifecycle-stages', '#where-the-persons-lead-is', '#finding-a-contact', '#files', '#related'],\n contacts: ['#whats-in-the-crm-area', '#unified-ingestion', '#what-each-plan-includes', '#the-contacts-page', '#import-from-csv', '#segments', '#everywhere-the-crm-shows-up', '#capture-replies', '#at-the-organization-level', '#who-can-open-the-crm', '#related'],\n crmEmailTemplates: ['#templates-and-snippets', '#merge-fields', '#saving', '#managing-templates', '#duplicate-a-template', '#shared-or-personal', '#over-the-rest-api', '#related'],\n crmLeads: ['#what-makes-a-lead', '#the-leads-list', '#working-a-lead-from-the-row', '#several-leads-at-once', '#export-csv', '#import-from-csv', '#who-owns-a-lead', '#a-leads-page', '#converting-a-lead', '#unqualifying-a-lead', '#erasing-the-person', '#who-can-do-this', '#related'],\n crmReports: ['#choosing-a-period', '#contacts', '#sources-and-lifecycle', '#conversion-by-source', '#lead-funnel', '#pipeline', '#forecast-by-close-month', '#won-and-lost', '#won-and-lost-by-owner', '#activity-by-teammate', '#tasks', '#exporting-a-table', '#crm-at-a-glance', '#how-the-numbers-are-counted', '#related'],\n crmSettings: ['#companies', '#create-companies-from-work-email-domains', '#default-owner', '#assignment-rules', '#round-robin', '#email-templates', '#email-capture', '#your-sending-addresses', '#recipes', '#related'],\n crmTasks: ['#the-tasks-page', '#the-calendar-view', '#snoozing-a-task', '#selecting-exporting-and-acting-on-many', '#import-from-csv', '#creating-a-task', '#assigning-a-task-to-someone-else', '#completing-and-reopening', '#organization-tasks', '#tasks-on-a-contact-company-or-deal', '#reminders', '#turning-reminders-off', '#next-activity', '#the-daily-digest', '#turning-it-off', '#the-dashboard-card', '#who-can-do-what', '#related'],\n crmViews: ['#the-views-control', '#a-view-is-a-link', '#filters-on-the-contacts-list', '#columns-and-sort', '#segments-and-views', '#who-sees-what', '#related'],\n datasets: ['#model-builder', '#typed-documents', '#relations', '#query-layer', '#repeatable-components', '#who-a-dataset-is-shared-with', '#import--export', '#related'],\n deals: ['#pipelines', '#stages', '#the-board-and-the-table', '#import-from-csv', '#creating-a-deal', '#line-items', '#moving-winning-and-losing', '#a-won-deal-makes-its-contact-a-customer', '#a-deals-page', '#files', '#related'],\n designedEmails: ['#create-a-template', '#duplicate-a-template', '#styling-email-blocks', '#merge-tokens', '#send-it', '#the-plain-text-version', '#start-from-a-brief-instead'],\n emailCampaigns: ['#send-a-campaign', '#campaigns-group-emails', '#what-belongs-to-a-campaign', '#who-the-email-comes-from', '#sending-domains', '#account-email-always-sends', '#marketing-needs-a-domain', '#two-ways-to-get-a-domain', '#a-domain-we-set-up-is-a-request', '#domain-states', '#senders', '#send-a-test', '#preview-the-email', '#monthly-send-cap', '#personalize-with-merge-tags', '#recipient-count', '#who-a-campaign-is-allowed-to-reach', '#schedule-a-send', '#duplicate-an-email', '#email-lists', '#manual-lists', '#list-members', '#add-to-a-list', '#import-a-list', '#remove-from-a-list', '#lists-built-from-a-rule', '#experiments', '#opens--clicks', '#the-campaign-report', '#per-contact-engagement', '#which-links-were-clicked', '#revenue-from-a-campaign', '#compliance', '#topics', '#preference-page', '#frequency-opt-down', '#double-opt-in', '#marketing-mail', '#frequency-cap', '#suppressions', '#add-a-suppression', '#platform-suppressions', '#related'],\n events: ['#manage-events', '#show-events-on-a-screen', '#search-engines', '#related'],\n forms: ['#reading-submissions-from-code', '#build-a-form', '#monthly-allowance-per-plan', '#spam-and-abuse-protection', '#the-per-site-monthly-ceiling', '#field-types', '#labels-and-placeholders', '#example-a-quick-survey', '#after-submit', '#example-grow-an-email-list-from-a-signup-form', '#where-submissions-go', '#the-inbox', '#who-a-submission-is-from', '#where-this-one-went', '#replying-to-a-submission', '#one-forms-own-page', '#duplicate-a-form', '#switch-forms-off-for-one-site', '#related'],\n installYourFirstPlugin: ['#before-you-start', '#step-1-open', '#step-2-browse', '#step-3-reviews', '#step-4-targeting', '#step-5-install', '#step-6-use', '#step-7-off', '#what-to-do-next', '#related'],\n inviteTeammates: ['#invite-someone', '#pending-invites', '#who-gets-told', '#accepting-an-invite', '#an-invitation-never-changes-who-owns-the-workspace', '#how-team-members-act', '#you-are-a-site-collaborators-support-channel', '#help-a-teammate-who-is-locked-out', '#why-you-cant-always-set-a-password', '#activity-log', '#ai-actions', '#ai-usage', '#ai-allotment', '#tips', '#related'],\n manifestAndEnvs: ['#plugin-manifest-published-with-every-version', '#contributes--where-the-plugin-loads', '#config--settings-without-writing-a-settings-screen', '#listing--version-documents', '#review--trust-lifecycle', '#environment-variables', '#pluginsconfigjson-first-party-contributors'],\n marketingOverlays: ['#announcement-bar', '#promotional-popups', '#frequency', '#popup-v2', '#multiple-overlays-scheduling--page-targeting', '#variables-in-copy', '#engagement-stats', '#related'],\n membersOnly: ['#let-visitors-sign-up', '#sign-in-sign-up-and-recovery-pages', '#forgotten-passwords', '#gate-a-screen', '#manage-your-members', '#suspend-or-reactivate-a-member', '#tips', '#related'],\n plugins: ['#install--upgrade', '#browse-card', '#whats-included', '#what-the-badges-on-a-listing-mean', '#how-plugins-run', '#when-one-plugin-depends-on-another', '#a-dependency-that-is-off-for-one-site', '#configure', '#configure-site', '#publish-your-own', '#related'],\n pos: ['#registers', '#the-register', '#platform-fees-at-the-register', '#selling-past-the-count', '#when-something-disconnects', '#reservations', '#related'],\n publishAPlugin: ['#the-publish-pipeline', '#private-plugins', '#paid-listings', '#your-publisher-profile', '#tips', '#related'],\n publisherHandbook: ['#before-your-first-publish', '#the-publisher-agreement', '#where-to-publish-from', '#what-installing-each-type-does', '#rules-an-email-starter-has-to-meet', '#publishing-a-version', '#before-you-publish', '#review-what-happens-after-you-publish', '#the-two-badges-and-what-each-one-promises', '#asking-to-be-verified', '#testing-a-version-before-it-is-approved', '#watching-your-own-submission', '#disabled-versions', '#private-plugins', '#authoring-your-listing', '#what-your-listing-can-say-about-aglyn', '#versioning--updates', '#shipping-a-new-version', '#how-installs-work-the-buyer-side', '#getting-paid', '#low-prices-and-processing'],\n redirects: ['#manage-redirects', '#sending-visitors-to-another-site', '#metrics', '#match-modes-v2', '#related'],\n sandboxSecurity: ['#a-separate-origin', '#per-manifest-network-policy', '#when-you-cant-declare-the-origin', '#pinned-immutable-artifacts', '#what-this-means-when-you-build', '#related'],\n sequences: ['#what-it-is-for', '#sent-from-your-own-mailbox', '#where-it-lives', '#connect-a-mailbox', '#send-as', '#daily-cap', '#mailbox-status', '#auto-pause', '#mailbox-actions', '#compliance-settings', '#allowed-countries', '#sequences', '#build-a-sequence', '#sequence-status', '#enroll', '#cold-contacts', '#enrollments', '#sending', '#what-stops-a-sequence', '#unsubscribe', '#related'],\n webhooks: ['#outbound-webhooks', '#inbound-webhooks', '#tips', '#related'],\n} as const satisfies Partial<Record<PluginDocsKey, readonly `#${string}`[]>>\n\ntype PluginAnchorMap = typeof PLUGIN_DOCS_ANCHORS\n\n/** Valid heading anchors for a plugin docs page (`never` when none). */\nexport type PluginDocsAnchor<K extends PluginDocsKey> =\n K extends keyof PluginAnchorMap ? PluginAnchorMap[K][number] : never\n"],"names":["PLUGIN_DOCS","abuseReports","path","title","excerpt","actionsBuilder","aglynAssist","aiAutomations","aiCrm","aiExperiments","aiMonitoring","aiProducts","aiSeo","aiThemes","assistSignals","billing","bindings","bookings","buildAWorkflow","catalog","commerce","commerceEndToEnd","companies","consoleTour","contactActivities","contactFields","contactRecord","contacts","crmEmailTemplates","crmLeads","crmReports","crmSettings","crmTasks","crmViews","datasets","deals","designedEmails","emailCampaigns","events","forms","installYourFirstPlugin","inviteTeammates","manifestAndEnvs","marketingOverlays","membersOnly","plugins","pos","publishAPlugin","publisherHandbook","redirects","sandboxSecurity","sequences","webhooks","PLUGIN_DOCS_ANCHORS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD,iDAAiD;AACjD,8CAA8C;AAC9C,oEAAoE;AAEpE,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAW/E,OAAO,MAAMA,cAAc;IACzBC,cAAc;QACZC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAC,gBAAgB;QACdH,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAE,aAAa;QACXJ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAG,eAAe;QACbL,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAI,OAAO;QACLN,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAK,eAAe;QACbP,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAM,cAAc;QACZR,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAO,YAAY;QACVT,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAQ,OAAO;QACLV,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAS,UAAU;QACRX,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAU,eAAe;QACbZ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAW,SAAS;QACPb,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAY,UAAU;QACRd,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAa,UAAU;QACRf,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAc,gBAAgB;QACdhB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAe,SAAS;QACPjB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgB,UAAU;QACRlB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiB,kBAAkB;QAChBnB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkB,WAAW;QACTpB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmB,aAAa;QACXrB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoB,mBAAmB;QACjBtB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqB,eAAe;QACbvB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsB,eAAe;QACbxB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuB,UAAU;QACRzB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwB,mBAAmB;QACjB1B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyB,UAAU;QACR3B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0B,YAAY;QACV5B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2B,aAAa;QACX7B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4B,UAAU;QACR9B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA6B,UAAU;QACR/B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA8B,UAAU;QACRhC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA+B,OAAO;QACLjC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgC,gBAAgB;QACdlC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiC,gBAAgB;QACdnC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkC,QAAQ;QACNpC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmC,OAAO;QACLrC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoC,wBAAwB;QACtBtC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqC,iBAAiB;QACfvC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsC,iBAAiB;QACfxC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuC,mBAAmB;QACjBzC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwC,aAAa;QACX1C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyC,SAAS;QACP3C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0C,KAAK;QACH5C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2C,gBAAgB;QACd7C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4C,mBAAmB;QACjB9C,MAAM;QACNC,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"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/docs-help.generated.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// GENERATED FILE — do not edit. Regenerate with:\n// node tools/scripts/generate-docs-help.mjs\n// Source of truth: apps/docs/docs frontmatter + headings (AGL-602).\n\n// The first-party plugin consoles live in `libs/plugins/*` and cannot import\n// the console's constants, so they carry their own generated subset of the\n// docs help registry — the topics their cards actually link to, and no others.\n\nexport interface PluginDocsTopic {\n /** Docs-site path, e.g. `/commerce-and-bookings/commerce/overview`. */\n path: string\n /** Docs page title. */\n title: string\n /** Verbatim docs frontmatter description — the tooltip excerpt. */\n excerpt: string\n}\n\nexport const PLUGIN_DOCS = {\n abuseReports: {\n path: '/staff-console/abuse-reports',\n title: 'Abuse reports',\n excerpt: 'The public abuse-report queue — where outside reports land, how to triage by severity, which lever answers which report, and the CSAM and DMCA paths that are not takedown buttons.',\n },\n actionsBuilder: {\n path: '/marketing-and-automation/workflows-and-actions/actions-builder',\n title: 'Actions builder',\n excerpt: 'Map a single event to a single action without building a full workflow.',\n },\n aglynAssist: {\n path: '/getting-started/aglyn-assist',\n title: 'Aglyn Assist',\n excerpt: 'Ask the built-in AI helper how to do anything in Aglyn — it answers from these docs and links you straight to the right page.',\n },\n aiAutomations: {\n path: '/ai/automations-with-ai',\n title: 'Explain automations with AI',\n excerpt: 'Aglyn AI can explain an automation you already have and tell you why one of its runs failed. Drafting an automation from a description is not available yet.',\n },\n aiCrm: {\n path: '/ai/crm-by-ai',\n title: 'The AI CRM built into Aglyn',\n excerpt: 'An AI CRM for small business: a short summary and a suggested next step on a contact, company, deal or lead, a one-to-one email drafted into the composer, and an import\\'s columns matched to fields.',\n },\n aiExperiments: {\n path: '/ai/ab-tests-with-ai',\n title: 'A/B tests by AI: write variants, read the result',\n excerpt: 'Have Aglyn AI write two to four variants for a screen, section or email experiment, and put a finished test into plain language — with the verdict decided from the counts before the model is asked anything.',\n },\n aiMonitoring: {\n path: '/staff-console/ai-monitoring',\n title: 'AI monitoring',\n excerpt: 'How staff watch one organization\\'s AI usage — the add-on, credit pool, overage, refusals, jobs, tokens and cache hit rate, top spenders and margin — and where those figures appear across the staff console.',\n },\n aiProducts: {\n path: '/ai/products-with-ai',\n title: 'Product copy and catalogs with AI',\n excerpt: 'An AI product description generator for your catalog: write copy for one product or a whole import, propose a first catalog, and propose categories and discounts — all as proposals you review.',\n },\n aiSeo: {\n path: '/building-sites/seo/seo-by-ai',\n title: 'AI SEO for your website',\n excerpt: 'AI SEO for websites, on the pages you already have: have AI write a page or product\\'s search listing, audit every published page with a proposed fix for each finding, and draft your structured data and /llms.txt.',\n },\n aiThemes: {\n path: '/ai/theme-assist',\n title: 'Change your site\\'s theme with AI',\n excerpt: 'Describe a change to your site\\'s theme and get a proposal for the theme editor\\'s own controls, previewed before and after, that you save in the editor. Rolling out.',\n },\n assistSignals: {\n path: '/staff-console/assist-signals',\n title: 'Assist Signal',\n excerpt: 'The docs-gap and cost board behind Assist — how the ranking is ordered, why ungrounded questions are counted separately, and what the cache-read rate says about margin.',\n },\n billing: {\n path: '/workspace-and-billing/billing-and-plans/overview',\n title: 'Billing & Plans',\n excerpt: 'How Aglyn\\'s tiers, entitlements, quotas, usage meters, and seat add-ons work.',\n },\n bindings: {\n path: '/building-sites/bindings/overview',\n title: 'Bindings, Variables & Functions',\n excerpt: 'Live values in your content — typed variables, no-code functions, and rename-safe id tokens.',\n },\n bookings: {\n path: '/commerce-and-bookings/bookings/overview',\n title: 'Bookings & Scheduling',\n excerpt: 'Offer services with availability, let visitors book, take payment, and send reminders.',\n },\n buildAWorkflow: {\n path: '/marketing-and-automation/workflows-and-actions/build-a-workflow',\n title: 'Build a workflow',\n excerpt: 'Create a multi-step workflow that runs when a site event fires.',\n },\n catalog: {\n path: '/commerce-and-bookings/commerce/catalog',\n title: 'Product catalog',\n excerpt: 'Products with options and variants, categories, tags, and manual or smart collections.',\n },\n commerce: {\n path: '/commerce-and-bookings/commerce/overview',\n title: 'Commerce',\n excerpt: 'Sell physical, digital, and service products with a full catalog, orders pipeline, shipping, taxes, and your own Stripe account.',\n },\n commerceEndToEnd: {\n path: '/guides/commerce-end-to-end',\n title: 'Commerce end to end',\n excerpt: 'Create products with billing modes, design the storefront with Commerce blocks, take Stripe checkout for one-time and subscription sales, and run orders from the console.',\n },\n companies: {\n path: '/content-and-data/crm/companies',\n title: 'Companies',\n excerpt: 'Group your contacts under the businesses they belong to — one record per company, with its domain, owner, address and the people who work there.',\n },\n consoleTour: {\n path: '/getting-started/console-tour',\n title: 'The console tour',\n excerpt: 'Where things live in the Aglyn console app bar and navigation.',\n },\n contactActivities: {\n path: '/content-and-data/crm/activities',\n title: 'Activities & the timeline',\n excerpt: 'Log calls, emails, meetings and notes against a contact, a company, a deal or a lead, email one person from their record, and read it all in one timeline beside everything captured and every campaign sent.',\n },\n contactFields: {\n path: '/content-and-data/crm/custom-fields',\n title: 'Custom fields',\n excerpt: 'Define your own properties on contacts, companies and deals — text, number, date, choice, checkbox or link — show them on every record and its list, and save form answers straight into a contact\\'s.',\n },\n contactRecord: {\n path: '/content-and-data/crm/contact-record',\n title: 'The contact record',\n excerpt: 'Add a contact by hand, keep a profile on them — phone, company, title, address, owner and lifecycle stage — open their own page in the CRM, and merge two records that turn out to be one person.',\n },\n contacts: {\n path: '/content-and-data/crm/overview',\n title: 'CRM',\n excerpt: 'One place for the people who interact with your sites — contacts captured from forms, members, orders and bookings, with leads, companies, a deals pipeline, tasks, a timeline, reports and custom fields.',\n },\n crmEmailTemplates: {\n path: '/content-and-data/crm/email-templates',\n title: 'Email templates',\n excerpt: 'Keep the letters your team sends from a record — templates that fill in the subject and the message, snippets that drop in a paragraph, and merge fields that fill in the person\\'s name, their company, the deal and you.',\n },\n crmLeads: {\n path: '/content-and-data/crm/leads',\n title: 'Leads',\n excerpt: 'Work the people your site has captured — a status, an owner and notes on every lead — and convert one into a contact, a company and a deal.',\n },\n crmReports: {\n path: '/content-and-data/crm/reports',\n title: 'Reports',\n excerpt: 'New contacts, where they came from and which sources convert, the lead funnel, the open pipeline and its forecast, won and lost, who logged what, and the task load — counted on the server, every table exportable as CSV.',\n },\n crmSettings: {\n path: '/content-and-data/crm/settings',\n title: 'CRM settings',\n excerpt: 'What the CRM does on its own for every site — whether a company is created from a contact\\'s work email domain, who a new contact is assigned to, the address that files replies on a record, and each site\\'s recipes.',\n },\n crmTasks: {\n path: '/content-and-data/crm/tasks',\n title: 'Tasks & follow-ups',\n excerpt: 'Calls, emails, meetings and to-dos with a due date, an assignee and a link to the record they are for — overdue and today read off the clock, a snooze, a reminder at its own time, and a morning digest.',\n },\n crmViews: {\n path: '/content-and-data/crm/views',\n title: 'Saved views',\n excerpt: 'Keep a CRM list\\'s filters, columns and sort under a name, open it from the views menu or a link, share it with the team, and use a contacts view as an email audience.',\n },\n datasets: {\n path: '/content-and-data/datasets/overview',\n title: 'Datasets & Dynamic Content',\n excerpt: 'Model structured content with typed fields and relations, then bind it into repeatable components.',\n },\n deals: {\n path: '/content-and-data/crm/deals',\n title: 'Deals pipeline',\n excerpt: 'Every open deal by stage — with an amount, an owner and an expected close — as a board you drag across or a table you page through, and the won and lost history behind it.',\n },\n designedEmails: {\n path: '/marketing-and-automation/email-campaigns/designed-emails',\n title: 'Designed emails',\n excerpt: 'Build campaign emails in the besigner with email-safe blocks and merge tokens — no separate editor.',\n },\n emailCampaigns: {\n path: '/marketing-and-automation/email-campaigns/overview',\n title: 'Email Campaigns',\n excerpt: 'Campaigns to audiences built from your contacts. Campaign email starts at Pro and needs a sending domain of the site\\'s own; receipts and account email send on every plan.',\n },\n events: {\n path: '/content-and-data/events/overview',\n title: 'Events Calendar',\n excerpt: 'Keep a schedule of events in the console and publish the ones you choose to any screen, with search-engine event markup.',\n },\n forms: {\n path: '/content-and-data/forms/overview',\n title: 'Forms & Lead Capture',\n excerpt: 'Add forms to your site, collect submissions in an inbox, and write them into datasets.',\n },\n installYourFirstPlugin: {\n path: '/guides/install-your-first-plugin',\n title: 'Install your first marketplace item',\n excerpt: 'A click-by-click walkthrough of the Marketplace — find something, choose which sites get it, install it, and turn it off again.',\n },\n inviteTeammates: {\n path: '/workspace-and-billing/teams-and-roles/invite-teammates',\n title: 'Invite teammates',\n excerpt: 'Add people to your site and understand how team members act within your organization.',\n },\n manifestAndEnvs: {\n path: '/developers/plugins/reference/manifest-and-envs',\n title: 'Manifests, trust lifecycle & environment',\n excerpt: 'The plugin manifest schema, the marketplace listing/version documents, the trust state machine, and every PLUGIN_* environment variable.',\n },\n marketingOverlays: {\n path: '/marketing-and-automation/marketing-overlays/overview',\n title: 'Marketing Overlays',\n excerpt: 'Site-wide announcement bars and promotional popups with triggers, scheduling, and email capture.',\n },\n membersOnly: {\n path: '/workspace-and-billing/teams-and-roles/members-only',\n title: 'Members-only areas',\n excerpt: 'Let visitors sign up as members and gate screens so only members can view them.',\n },\n plugins: {\n path: '/developers/plugins/overview',\n title: 'Plugins & Marketplace',\n excerpt: 'Extend Aglyn with sandboxed plugins — install from the marketplace, configure them, and publish your own.',\n },\n pos: {\n path: '/commerce-and-bookings/commerce/pos-and-reservations',\n title: 'POS & reservations',\n excerpt: 'Sell in person from the console register and take date-range reservations with deposits.',\n },\n publishAPlugin: {\n path: '/developers/plugins/publish-a-plugin',\n title: 'Publish a plugin',\n excerpt: 'Ship your own plugin to the marketplace with version pinning.',\n },\n publisherHandbook: {\n path: '/developers/plugins/publishing/publisher-handbook',\n title: 'Publisher handbook',\n excerpt: 'Publishing to the Aglyn marketplace — from profile setup through listing authoring, review, updates, and getting paid.',\n },\n redirects: {\n path: '/building-sites/redirects/overview',\n title: 'Redirects',\n excerpt: 'Manage URL redirects with validation, loop detection, and hit metrics.',\n },\n sandboxSecurity: {\n path: '/developers/plugins/reference/sandbox-security',\n title: 'Sandbox security model',\n excerpt: 'How sandboxed marketplace plugins are isolated — separate origin, per-manifest CSP, pinned artifacts — and what that means when you write one.',\n },\n sequences: {\n path: '/content-and-data/crm/sequences',\n title: 'Sequences',\n excerpt: 'One-to-one email sequences a rep sends to a person from their own connected mailbox, kept with the CRM. Rolling out.',\n },\n webhooks: {\n path: '/marketing-and-automation/workflows-and-actions/webhooks',\n title: 'Webhooks',\n excerpt: 'Connect Aglyn to other systems with outbound and inbound webhooks.',\n },\n} as const satisfies Record<string, PluginDocsTopic>\n\nexport type PluginDocsKey = keyof typeof PLUGIN_DOCS\n\nexport const PLUGIN_DOCS_ANCHORS = {\n abuseReports: ['#where-reports-come-from', '#triage-by-severity', '#csam', '#which-lever', '#statuses', '#disclosure', '#dmca', '#counter-notices', '#counter-notice-clock', '#counter-notice-steps', '#repeat-infringers', '#repeat-infringer-threshold', '#known-gaps', '#related'],\n actionsBuilder: ['#create-an-action', '#recipes', '#describe-it', '#triggers', '#crm-events', '#only-run-when-a-field-matches', '#chain-multiple-conditions-andor', '#steps', '#crm-steps', '#step-conditions', '#sequences', '#run-history', '#what-is-and-isnt-recorded', '#interactions-from-the-besigner', '#when-to-use-which', '#related'],\n aglynAssist: ['#what-it-can-do', '#aglyn-ai', '#answers-for-beginners-and-developers', '#offers-to-open-a-page', '#edits-in-the-besigner', '#where-an-answer-came-from', '#answers-straight-from-the-documentation', '#message-limits', '#feedback', '#privacy'],\n aiAutomations: ['#draft', '#explain', '#why-a-run-failed', '#what-is-sent', '#who-can-use-it', '#related'],\n aiCrm: ['#summarize-a-record', '#summaries-are-reused-until-the-record-changes', '#draft-an-email', '#match-columns', '#what-is-sent', '#who-can-use-it', '#related'],\n aiExperiments: ['#it-proposes-you-write', '#write-variants', '#putting-them-in', '#what-it-will-not-write', '#read-a-result', '#the-verdict', '#the-words', '#undecided', '#what-is-sent', '#who-can-use-it', '#related'],\n aiMonitoring: ['#the-ai-card', '#where-else', '#one-account', '#the-spend-leaderboard', '#alerts', '#related'],\n aiProducts: ['#write-a-products-copy', '#write-copy-for-many-products', '#when-you-import-products', '#propose-a-first-catalog', '#propose-categories-and-discounts', '#what-the-copy-never-says', '#what-is-sent-to-the-ai-provider', '#who-can-use-it', '#related'],\n aiSeo: ['#write-a-pages-listing', '#write-a-products-listing', '#audit-the-whole-site', '#target-keywords', '#apply-all-as-drafts', '#structured-data-and-llmstxt', '#related'],\n aiThemes: ['#change-what-you-describe-or-design-a-new-theme', '#match-your-brand', '#review-the-proposal', '#save-it-or-dont', '#who-can-use-it', '#related'],\n assistSignals: ['#the-workflow-this-board-exists-for', '#fleet', '#the-cache-read-rate-and-what-a-bad-number-looks-like', '#where-the-money-goes', '#tokens-by-kind', '#docs-gaps', '#questions-the-docs-could-not-answer', '#what-people-actually-asked', '#what-assist-costs-by-workspace', '#reading-the-sample-honestly', '#related'],\n billing: ['#tiers--entitlements', '#enterprise', '#single-sign-on-and-enforcement', '#usage-meters', '#who-is-generating-what', '#ai-allotments', '#storage-overage', '#if-you-would-rather-uploads-stopped', '#assist-overage', '#stop-ai-assist-at-the-included-band', '#ai-overage-ceiling', '#free-ai-credits', '#ai-credit-alerts', '#usage-budget', '#seats', '#crm-records', '#the-crm-suite', '#one-to-one-email', '#organization-data', '#api-access', '#payments', '#outstanding', '#plan-total', '#billing-email', '#payment-methods', '#billing-address', '#tax-ids', '#sales-tax', '#platform-fees', '#related'],\n bindings: ['#binding-tokens', '#rename-safe-id-tokens', '#insert-a-variable', '#token-pills', '#in-the-canvas-text-editor', '#site-details', '#typed-variables', '#no-code-functions', '#parameters-a-visitor-can-answer', '#a-calculator-you-lay-out', '#where-used--safety', '#workflows', '#related'],\n bookings: ['#set-up-bookings', '#taking-bookings', '#reminders', '#payments-and-fees', '#service-tax', '#manage', '#booking-from-the-crm', '#canceling-and-refunding', '#related'],\n buildAWorkflow: ['#1-open-the-workflows-page', '#2-choose-a-trigger', '#3-add-steps', '#waiting', '#4-save-and-test', '#duplicate-a-workflow', '#tips', '#related'],\n catalog: ['#products-options-and-variants', '#billing-modes-and-subscriptions', '#ai', '#categories-and-tags', '#collections', '#slugs', '#merchant-center-feed', '#related'],\n commerce: ['#products-hub', '#inventory', '#reserved-stock', '#stock-movements', '#gift-cards', '#recovery-and-alerts', '#orders', '#orders-screen', '#order-statuses', '#order-money-tiles', '#a-lost-dispute', '#shipping--taxes', '#lodging-tax-on-reservations', '#storefront-sales-tax', '#destination-coverage', '#dropshipping', '#related'],\n commerceEndToEnd: ['#1-connect-payments', '#2-create-products', '#3-design-the-storefront', '#catalog-search-filters-and-sort', '#category-pages', '#the-product-page-template', '#4-what-checkout-does', '#paying-without-leaving-your-site', '#5-run-orders-from-the-console', '#6-subscriptions--the-stripe-portal', '#related'],\n companies: ['#the-companies-list', '#create-a-company', '#a-companys-page', '#contacts-at-a-company', '#linked-on-capture', '#import-from-csv', '#export-csv', '#deleting-a-company', '#who-can-see-a-company', '#files', '#related'],\n consoleTour: ['#the-app-bar', '#in-context-help', '#primary-navigation', '#editing-vs-managing', '#the-sites-list', '#the-status-pill', '#how-the-pill-is-decided', '#your-site-allowance', '#a-sites-dashboard', '#next', '#workspace-settings--notifications', '#the-notifications-feed', '#notification-settings', '#workspace-and-site-overrides', '#daily-digests', '#alerts-on-this-device'],\n contactActivities: ['#four-kinds-of-history', '#campaign-email', '#logging-an-activity', '#meeting-from-a-booking', '#click-to-call', '#sending-an-email', '#delivery-states', '#captured-email', '#where-an-activity-is-visible', '#the-recent-activity-feed', '#related'],\n contactFields: ['#define-a-field', '#fields-per-record', '#where-values-show', '#save-a-form-field', '#over-the-api', '#retire-restore-delete', '#recompute-next-activity', '#related'],\n contactRecord: ['#adding-a-contact-by-hand', '#the-record-page', '#deleting-and-erasing', '#what-each-site-keeps-to-itself', '#merging-two-records', '#likely-duplicates', '#owner', '#last-engaged', '#lifecycle-stages', '#where-the-persons-lead-is', '#finding-a-contact', '#files', '#related'],\n contacts: ['#whats-in-the-crm-area', '#unified-ingestion', '#what-each-plan-includes', '#the-contacts-page', '#import-from-csv', '#segments', '#everywhere-the-crm-shows-up', '#capture-replies', '#at-the-organization-level', '#who-can-open-the-crm', '#related'],\n crmEmailTemplates: ['#templates-and-snippets', '#merge-fields', '#saving', '#managing-templates', '#duplicate-a-template', '#shared-or-personal', '#over-the-rest-api', '#related'],\n crmLeads: ['#what-makes-a-lead', '#what-a-lead-holds', '#adding-a-lead-by-hand', '#the-leads-list', '#working-a-lead-from-the-row', '#several-leads-at-once', '#export-csv', '#import-from-csv', '#who-owns-a-lead', '#a-leads-page', '#converting-a-lead', '#unqualifying-a-lead', '#erasing-the-person', '#who-can-do-this', '#related'],\n crmReports: ['#choosing-a-period', '#contacts', '#sources-and-lifecycle', '#conversion-by-source', '#lead-funnel', '#pipeline', '#forecast-by-close-month', '#won-and-lost', '#won-and-lost-by-owner', '#activity-by-teammate', '#tasks', '#exporting-a-table', '#crm-at-a-glance', '#how-the-numbers-are-counted', '#related'],\n crmSettings: ['#companies', '#create-companies-from-work-email-domains', '#default-owner', '#assignment-rules', '#round-robin', '#email-templates', '#email-capture', '#your-sending-addresses', '#recipes', '#related'],\n crmTasks: ['#the-tasks-page', '#the-calendar-view', '#snoozing-a-task', '#selecting-exporting-and-acting-on-many', '#import-from-csv', '#creating-a-task', '#assigning-a-task-to-someone-else', '#completing-and-reopening', '#organization-tasks', '#tasks-on-a-contact-company-or-deal', '#reminders', '#turning-reminders-off', '#next-activity', '#the-daily-digest', '#turning-it-off', '#the-dashboard-card', '#who-can-do-what', '#related'],\n crmViews: ['#the-views-control', '#a-view-is-a-link', '#filters-on-the-contacts-list', '#columns-and-sort', '#segments-and-views', '#who-sees-what', '#related'],\n datasets: ['#model-builder', '#typed-documents', '#relations', '#query-layer', '#repeatable-components', '#who-a-dataset-is-shared-with', '#import--export', '#related'],\n deals: ['#pipelines', '#stages', '#the-board-and-the-table', '#import-from-csv', '#creating-a-deal', '#line-items', '#moving-winning-and-losing', '#a-won-deal-makes-its-contact-a-customer', '#a-deals-page', '#files', '#related'],\n designedEmails: ['#create-a-template', '#duplicate-a-template', '#styling-email-blocks', '#merge-tokens', '#send-it', '#the-plain-text-version', '#start-from-a-brief-instead'],\n emailCampaigns: ['#send-a-campaign', '#campaigns-group-emails', '#what-belongs-to-a-campaign', '#who-the-email-comes-from', '#sending-domains', '#account-email-always-sends', '#marketing-needs-a-domain', '#two-ways-to-get-a-domain', '#a-domain-we-set-up-is-a-request', '#domain-states', '#senders', '#send-a-test', '#preview-the-email', '#monthly-send-cap', '#personalize-with-merge-tags', '#recipient-count', '#who-a-campaign-is-allowed-to-reach', '#schedule-a-send', '#duplicate-an-email', '#email-lists', '#manual-lists', '#list-members', '#add-to-a-list', '#import-a-list', '#remove-from-a-list', '#lists-built-from-a-rule', '#experiments', '#opens--clicks', '#the-campaign-report', '#per-contact-engagement', '#which-links-were-clicked', '#revenue-from-a-campaign', '#compliance', '#topics', '#preference-page', '#frequency-opt-down', '#double-opt-in', '#marketing-mail', '#frequency-cap', '#suppressions', '#add-a-suppression', '#platform-suppressions', '#related'],\n events: ['#manage-events', '#show-events-on-a-screen', '#search-engines', '#related'],\n forms: ['#reading-submissions-from-code', '#build-a-form', '#monthly-allowance-per-plan', '#spam-and-abuse-protection', '#the-per-site-monthly-ceiling', '#field-types', '#labels-and-placeholders', '#example-a-quick-survey', '#after-submit', '#example-grow-an-email-list-from-a-signup-form', '#where-submissions-go', '#the-inbox', '#who-a-submission-is-from', '#where-this-one-went', '#replying-to-a-submission', '#one-forms-own-page', '#duplicate-a-form', '#switch-forms-off-for-one-site', '#related'],\n installYourFirstPlugin: ['#before-you-start', '#step-1-open', '#step-2-browse', '#step-3-reviews', '#step-4-targeting', '#step-5-install', '#step-6-use', '#step-7-off', '#what-to-do-next', '#related'],\n inviteTeammates: ['#invite-someone', '#pending-invites', '#who-gets-told', '#accepting-an-invite', '#an-invitation-never-changes-who-owns-the-workspace', '#how-team-members-act', '#you-are-a-site-collaborators-support-channel', '#help-a-teammate-who-is-locked-out', '#why-you-cant-always-set-a-password', '#activity-log', '#ai-actions', '#ai-usage', '#ai-allotment', '#tips', '#related'],\n manifestAndEnvs: ['#plugin-manifest-published-with-every-version', '#contributes--where-the-plugin-loads', '#config--settings-without-writing-a-settings-screen', '#listing--version-documents', '#review--trust-lifecycle', '#environment-variables', '#pluginsconfigjson-first-party-contributors'],\n marketingOverlays: ['#announcement-bar', '#promotional-popups', '#frequency', '#popup-v2', '#multiple-overlays-scheduling--page-targeting', '#variables-in-copy', '#engagement-stats', '#related'],\n membersOnly: ['#let-visitors-sign-up', '#sign-in-sign-up-and-recovery-pages', '#forgotten-passwords', '#gate-a-screen', '#manage-your-members', '#suspend-or-reactivate-a-member', '#tips', '#related'],\n plugins: ['#install--upgrade', '#browse-card', '#whats-included', '#what-the-badges-on-a-listing-mean', '#how-plugins-run', '#when-one-plugin-depends-on-another', '#a-dependency-that-is-off-for-one-site', '#configure', '#configure-site', '#publish-your-own', '#related'],\n pos: ['#registers', '#the-register', '#platform-fees-at-the-register', '#selling-past-the-count', '#when-something-disconnects', '#reservations', '#related'],\n publishAPlugin: ['#the-publish-pipeline', '#private-plugins', '#paid-listings', '#your-publisher-profile', '#tips', '#related'],\n publisherHandbook: ['#before-your-first-publish', '#the-publisher-agreement', '#where-to-publish-from', '#what-installing-each-type-does', '#rules-an-email-starter-has-to-meet', '#publishing-a-version', '#before-you-publish', '#review-what-happens-after-you-publish', '#the-two-badges-and-what-each-one-promises', '#asking-to-be-verified', '#testing-a-version-before-it-is-approved', '#watching-your-own-submission', '#disabled-versions', '#private-plugins', '#authoring-your-listing', '#what-your-listing-can-say-about-aglyn', '#versioning--updates', '#shipping-a-new-version', '#how-installs-work-the-buyer-side', '#getting-paid', '#low-prices-and-processing'],\n redirects: ['#manage-redirects', '#sending-visitors-to-another-site', '#metrics', '#match-modes-v2', '#related'],\n sandboxSecurity: ['#a-separate-origin', '#per-manifest-network-policy', '#when-you-cant-declare-the-origin', '#pinned-immutable-artifacts', '#what-this-means-when-you-build', '#related'],\n sequences: ['#what-it-is-for', '#sent-from-your-own-mailbox', '#where-it-lives', '#connect-a-mailbox', '#send-as', '#daily-cap', '#mailbox-status', '#auto-pause', '#mailbox-actions', '#compliance-settings', '#allowed-countries', '#sequences', '#build-a-sequence', '#sequence-status', '#enroll', '#cold-contacts', '#enrollments', '#sending', '#what-stops-a-sequence', '#unsubscribe', '#related'],\n webhooks: ['#outbound-webhooks', '#inbound-webhooks', '#tips', '#related'],\n} as const satisfies Partial<Record<PluginDocsKey, readonly `#${string}`[]>>\n\ntype PluginAnchorMap = typeof PLUGIN_DOCS_ANCHORS\n\n/** Valid heading anchors for a plugin docs page (`never` when none). */\nexport type PluginDocsAnchor<K extends PluginDocsKey> =\n K extends keyof PluginAnchorMap ? PluginAnchorMap[K][number] : never\n"],"names":["PLUGIN_DOCS","abuseReports","path","title","excerpt","actionsBuilder","aglynAssist","aiAutomations","aiCrm","aiExperiments","aiMonitoring","aiProducts","aiSeo","aiThemes","assistSignals","billing","bindings","bookings","buildAWorkflow","catalog","commerce","commerceEndToEnd","companies","consoleTour","contactActivities","contactFields","contactRecord","contacts","crmEmailTemplates","crmLeads","crmReports","crmSettings","crmTasks","crmViews","datasets","deals","designedEmails","emailCampaigns","events","forms","installYourFirstPlugin","inviteTeammates","manifestAndEnvs","marketingOverlays","membersOnly","plugins","pos","publishAPlugin","publisherHandbook","redirects","sandboxSecurity","sequences","webhooks","PLUGIN_DOCS_ANCHORS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GACD,iDAAiD;AACjD,8CAA8C;AAC9C,oEAAoE;AAEpE,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAW/E,OAAO,MAAMA,cAAc;IACzBC,cAAc;QACZC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAC,gBAAgB;QACdH,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAE,aAAa;QACXJ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAG,eAAe;QACbL,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAI,OAAO;QACLN,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAK,eAAe;QACbP,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAM,cAAc;QACZR,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAO,YAAY;QACVT,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAQ,OAAO;QACLV,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAS,UAAU;QACRX,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAU,eAAe;QACbZ,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAW,SAAS;QACPb,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAY,UAAU;QACRd,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAa,UAAU;QACRf,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAc,gBAAgB;QACdhB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAe,SAAS;QACPjB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgB,UAAU;QACRlB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiB,kBAAkB;QAChBnB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkB,WAAW;QACTpB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmB,aAAa;QACXrB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoB,mBAAmB;QACjBtB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqB,eAAe;QACbvB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsB,eAAe;QACbxB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuB,UAAU;QACRzB,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwB,mBAAmB;QACjB1B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyB,UAAU;QACR3B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0B,YAAY;QACV5B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2B,aAAa;QACX7B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4B,UAAU;QACR9B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA6B,UAAU;QACR/B,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA8B,UAAU;QACRhC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA+B,OAAO;QACLjC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAgC,gBAAgB;QACdlC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAiC,gBAAgB;QACdnC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAkC,QAAQ;QACNpC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAmC,OAAO;QACLrC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAoC,wBAAwB;QACtBtC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAqC,iBAAiB;QACfvC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAsC,iBAAiB;QACfxC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAuC,mBAAmB;QACjBzC,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAwC,aAAa;QACX1C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACAyC,SAAS;QACP3C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA0C,KAAK;QACH5C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA2C,gBAAgB;QACd7C,MAAM;QACNC,OAAO;QACPC,SAAS;IACX;IACA4C,mBAAmB;QACjB9C,MAAM;QACNC,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"}
@@ -3691,7 +3691,7 @@ export const ASSIST_DOCS_INDEX = [
3691
3691
  title: 'The contact record',
3692
3692
  heading: 'Lifecycle stages',
3693
3693
  anchor: '#lifecycle-stages',
3694
- text: 'The Stage says where a person is in your funnel. The list has a Stage column and a Stage filter; the record page lets you set it.\nEvery capture on your site sets the earliest stage that describes what happened, and never moves anyone back: a form submission makes a Lead, a newsletter opt-in or a member sign-up makes a Subscriber, a booking makes a Lead — a Customer once it is paid — an order makes a Customer, and so does a deal marked won with the person on it. A subscriber who then submits a form becomes a lead; a customer who submits one stays a customer. A contact you add by hand, import, or create over the API gets the stage you give it, or none, and a contact captured before this rule carries the stage its earlier captures imply.\n| Stage | Meaning |\n| Subscriber | Signed up to hear from you and nothing more yet. Set by a newsletter opt-in or a member sign-up. |\n| Lead | Showed interest — filled in a form, asked a question. Set by a form submission or a booking request. |\n| Marketing qualified | Engaged enough for marketing to hand over. |\n| Sales qualified | A real prospect somebody is working. |\n| Opportunity | There is a deal on the table. |\n| Customer | Has bought. A purchase on your site, or a deal with them marked won, sets this automatically for anyone at an earlier stage, and never moves anyone back. |\n| Evangelist | A customer who sends others your way. |\n| Other | A step of your own that none of the names fit. A sale never overwrites it. |\nWhere the person\'s lead is\nThe Relationship card shows Lead on this site when this site holds a lead for the address — a sign-up, a booking, or a submission to a form with lead routing on. It opens the lead. A contact that came in through an order, an import or a form without lead routing has no lead, and the link is sim'
3694
+ text: 'The Stage says where a person is in your funnel. The list has a Stage column and a Stage filter; the record page lets you set it.\nEvery capture that reaches a contact sets the earliest stage that describes what happened, and never moves anyone back: a newsletter opt-in or a member sign-up makes a Subscriber, a paid booking or an order makes a Customer, and so does a deal marked won with the person on it. A converted lead arrives at Sales qualified. A form or a booking by somebody who is not yet a contact makes a lead, not a contact, so Lead is a stage you set by hand rather than one a capture sets; a customer who submits a form stays a customer. A contact you add by hand, import, or create over the API gets the stage you give it, or none, and a contact captured before this rule carries the stage its earlier captures imply.\n| Stage | Meaning |\n| Subscriber | Signed up to hear from you and nothing more yet. Set by a newsletter opt-in or a member sign-up. |\n| Lead | Showed interest — filled in a form, asked a question. Set by a form submission or a booking request. |\n| Marketing qualified | Engaged enough for marketing to hand over. |\n| Sales qualified | A real prospect somebody is working. |\n| Opportunity | There is a deal on the table. |\n| Customer | Has bought. A purchase on your site, or a deal with them marked won, sets this automatically for anyone at an earlier stage, and never moves anyone back. |\n| Evangelist | A customer who sends others your way. |\n| Other | A step of your own that none of the names fit. A sale never overwrites it. |\nWhere the person\'s lead is\nThe Relationship card shows Lead on this site when this site holds a lead for the address — the lead this contact was converted from, or one closed when the person signed up or bought. It opens the lead. A'
3695
3695
  },
3696
3696
  {
3697
3697
  path: '/content-and-data/crm/contact-record',
@@ -3943,35 +3943,42 @@ export const ASSIST_DOCS_INDEX = [
3943
3943
  title: 'Leads',
3944
3944
  heading: '',
3945
3945
  anchor: '',
3946
- text: 'Leads\nA lead is somebody your site has met but you have not yet qualified: a visitor who signed up, booked, or submitted a form that routes leads. The Leads section of the CRM is where the team works them — decides who owns each one, keeps notes, and either converts the lead into a contact or closes it with a reason.\nLeads live under the site that captured them, so each site\'s list is its own. Open CRM → Leads in the console, or use Open in CRM on a lead row in the Inbox\'s Site Members & Leads section.\nPlan availability Leads are part of the CRM, included from Starter. On Free the section is shown locked, with the rest of the CRM. Leads are still filed on Free, exactly as described below, and kept; workspace owners and admins can export every lead, or erase a person, from Settings → Privacy. See What each plan includes.'
3946
+ text: 'Leads\nA lead is somebody you have heard of but not yet qualified: a visitor who booked or wrote in through a form that routes leads, a person from a list you imported, or one you added by hand. It is a record of its own — the way it is in Salesforce — and it becomes a contact only when you convert it. The Leads section of the CRM is where the team works them — decides who owns each one, keeps notes, and either converts the lead into a contact or closes it with a reason.\nLeads live under the site that captured them, so each site\'s list is its own. Open CRM → Leads in the console, or use Open in CRM on a lead row in the Inbox\'s Site Members & Leads section.\nPlan availability Leads are part of the CRM, included from Starter. On Free the section is shown locked, with the rest of the CRM. Leads are still filed on Free, exactly as described below, and kept; workspace owners and admins can export every lead, or erase a person, from Settings → Privacy. See What each plan includes.'
3947
3947
  },
3948
3948
  {
3949
3949
  path: '/content-and-data/crm/leads',
3950
3950
  title: 'Leads',
3951
3951
  heading: 'What makes a lead',
3952
3952
  anchor: '#what-makes-a-lead',
3953
- text: 'Every capture lands in Contacts — one row per person, at the earliest lifecycle stage that describes what happened. A lead is created in addition, and only by a lead surface:\n- a member sign-up;\n- a booking;\n- a form whose own page has Also create a lead from the address someone gives this form switched on. A form without it still updates the contact at stage Lead; it just files nothing here.\nThe plan changes none of this. On Free too, a form files a lead only when its lead routing is on, and the lead is kept, though the Leads section that lists it is locked with the rest of the CRM.\nSo Contacts is the address book and Leads is the working list. The Leads section opens with which surfaces create leads on this site — sign-ups, bookings, and the lead-routed forms by name, each linking to the form\'s page — and offers Turn on lead routing beside a form that could route. A form with no email field cannot key a lead, and a form that records no consent would file leads the team cannot email; in either case the control says so instead of switching, because publishing the form would refuse the same thing. One person is one lead: a second submission updates the lead the first one created. Leads from before the Leads section existed were created from those earlier submissions and bookings, so a person who wrote in through a lead-routed form before lead routing existed is in the Open view too, unassigned.\nAt the organization level — CRM → Leads from the organization\'s own tab, where every site\'s leads are one list — the same note opens the section grouped by site. Sign-ups and bookings are named once, since they create a lead on every site; then each site is a group of its own, named and linking to that site\'s Leads section, with its lead-routed forms by name, Turn on lead routing '
3953
+ text: 'One person is one record: a lead until somebody qualifies them, a contact after. A lead is created by a lead surface, and by nothing else:\n- a booking;\n- a form whose own page has Also create a lead from the address someone gives this form switched on;\n- Import CSV, New lead, and POST /v1/leads over the REST API.\nA lead surface files a lead and no contact. The one exception is a person the workspace already holds as a contact — a customer who books a demo, say: their booking lands on the contact\'s timeline, and no lead is filed, because a contact is what a lead becomes and a person cannot be both.\nThe other doors work the other way round:\n- A form without lead routing and a newsletter opt-in update the open lead when this site holds one for the address — its consent and its history stay on the one record the team is working — and the contact otherwise.\n- A member sign-up and an order make the person a contact, because an account or a purchase is a relationship. An open lead the site held for the address is closed as Qualified, converted onto that contact, so nobody keeps working a lead who already joined or bought.\nThe plan changes none of this. On Free too, a form files a lead only when its lead routing is on, and the lead is kept, though the Leads section that lists it is locked with the rest of the CRM.\nSo Contacts is the people you have a relationship with and Leads is the working list. The Leads section opens with which surfaces create leads on this site — sign-ups, bookings, and the lead-routed forms by name, each linking to the form\'s page — and offers Turn on lead routing beside a form that could route. A form with no email field cannot key a lead, and a form that records no consent would file leads the team cannot email; in either case the control says so inste'
3954
+ },
3955
+ {
3956
+ path: '/content-and-data/crm/leads',
3957
+ title: 'Leads',
3958
+ heading: 'What a lead holds',
3959
+ anchor: '#what-a-lead-holds',
3960
+ text: 'A lead is a record of its own — the way it is in Salesforce — and carries the person and their company as text until it converts:\n| Field | Notes |\n| Email | The identity: a site holds one lead per address. |\n| Name | The person\'s name. |\n| Company | The company\'s name, typed. Not a link — a thousand imported leads must not create a thousand companies. Converting is what links or creates the company record, by this name or by the address\'s domain. |\n| Job title, Phone, Website | As on a business card. The phone is stored with its country code; the website as a full address. |\n| Lead source | Where the lead came from, in your words — Sales Navigator, Trade show, Referral. Distinct from Sources below, which the site records. |\n| Tags | Comma-separated, lower-cased. |\n| Address | Street, city, state, postal code and a two-letter country code. |\n| Status, Owner, Notes | The working state — see The Leads list. |\nEvery one of them is editable on the lead\'s page, comes in through Import CSV, and is handed to the contact when the lead converts.\nAdding a lead by hand\nNew lead, at the top of the Leads list, opens a drawer over the list — the list stays exactly where it was. Type what you know: the email is the one required field, and the company, title, phone, website, lead source, status, owner, tags, address and notes are optional. At the organization level the drawer first asks which site to file the lead under, since a lead is private to one site.\nIt creates a lead and nothing else. No contact and no company are made — that is what converting does, once the lead is real. If the site already holds a lead for the address, what you typed is written onto it and the page says so. Adding a lead is never marketing consent, so none is recorded.'
3954
3961
  },
3955
3962
  {
3956
3963
  path: '/content-and-data/crm/leads',
3957
3964
  title: 'Leads',
3958
3965
  heading: 'The Leads list',
3959
3966
  anchor: '#the-leads-list',
3960
- text: 'The list shows the most recently seen leads first — a person who booked yesterday sits above one who signed up last month, whichever came first. Each row carries:\n| Column | What it shows |\n| Lead | The name the person gave, with their email beneath it — or the email alone. |\n| Status | New, Working, Qualified or Unqualified. Change it in place from the row. |\n| Owner | The team member working the lead, or Unassigned. A lead inherits its contact\'s owner when one is assigned on capture. |\n| Source | Every surface that captured this person: Sign-up, Booking, or the form they submitted. |\n| Last seen | When the person last did something on your site. |\nThe Show control at the top of the card picks the view. Open — the default — is every lead that still needs working (New and Working). The other views are one status each, and All shows everything. A lead nobody has touched yet has no status of its own and reads as New, so the leads your site collected before the CRM existed are already in the Open view.\nThe list reads the 200 most recently seen leads and shows them a page at a time, with the usual footer to turn the page and pick how many rows it holds. When a site holds more than 200, a notice says so; the status filter narrows those 200, and older leads are still listed in the Inbox and still reached by campaign audiences.\nWorking a lead from the row\n- Status — click the status chip to change it to New or Working. Choosing Unqualified… asks for a reason first.\n- Row menu (⋮) — Open lead, Convert…, Assign owner, or Unqualify. Convert… opens the same dialog as the lead\'s page (see Converting a lead) without opening the page first; on a lead already converted, unqualified, or whose person has an erasure pending, it is disabled with the reason as its tooltip.\n- Click anywhere'
3967
+ text: 'The list shows the most recently seen leads first — a person who booked yesterday sits above one who signed up last month, whichever came first. Each row carries:\n| Column | What it shows |\n| Lead | The name the person gave, with their email beneath it — or the email alone. |\n| Company, Title | The lead\'s own company and job title, as text. |\n| Status | New, Working, Qualified or Unqualified. Change it in place from the row. |\n| Owner | The team member working the lead, or Unassigned. A lead inherits its contact\'s owner when one is assigned on capture. |\n| Source | Every surface that captured this person: Booking, the form they submitted, an import, New lead, or the API — and Sign-up on leads filed before sign-ups stopped making leads. |\n| Tags | The lead\'s tags. |\n| Last seen | When the person last did something on your site. |\nThe Show control at the top of the card picks the view. Open — the default — is every lead that still needs working (New and Working). The other views are one status each, and All shows everything. A lead nobody has touched yet has no status of its own and reads as New, so the leads your site collected before the CRM existed are already in the Open view.\nThe list reads the 200 most recently seen leads and shows them a page at a time, with the usual footer to turn the page and pick how many rows it holds. When a site holds more than 200, a notice says so; the status filter narrows those 200, and older leads are still listed in the Inbox and still reached by campaign audiences.\nWorking a lead from the row\n- Status — click the status chip to change it to New or Working. Choosing Unqualified… asks for a reason first.\n- Row menu (⋮) — Open lead, Convert…, Assign owner, or Unqualify. Convert… opens the same dialog as the lead\'s page (see Converting a '
3961
3968
  },
3962
3969
  {
3963
3970
  path: '/content-and-data/crm/leads',
3964
3971
  title: 'Leads',
3965
3972
  heading: 'A lead\'s page',
3966
3973
  anchor: '#a-leads-page',
3967
- text: 'Click a row to open the lead. The page has two cards.\nLead holds what the team decides: the status, the owner, and free-text notes with a Save notes button. It also shows the identity the capture recorded — email and name, and a phone number when the form that captured them took one — and the person\'s marketing consent: whether they opted in (and when), declined, or never recorded a choice. A lead with no recorded consent cannot be sent marketing email, which is worth knowing before you promise them a newsletter. The card\'s header carries Call and Log a call beside Send email — see click to call.\nCaptured history is read-only: when the person was first and last seen, how many times your site captured them, every source that did, and — under Where this lead came from — the campaign the capture is credited to, when there is one.'
3974
+ text: 'Click a row to open the lead. The page has two cards.\nLead holds what the team decides: the status, the owner, the lead\'s profile — company, job title, phone, website, lead source, tags and address, edited together under one Save — and free-text notes with a Save notes button. It also shows the identity the capture recorded — email and name — and the person\'s marketing consent: whether they opted in (and when), declined, or never recorded a choice. Once the lead converts, the profile is read-only here: the contact is the record then. A lead with no recorded consent cannot be sent marketing email, which is worth knowing before you promise them a newsletter. The card\'s header carries Call and Log a call beside Send email — see click to call.\nCaptured history is read-only: when the person was first and last seen, how many times your site captured them, every source that did, and — under Where this lead came from — the campaign the capture is credited to, when there is one.'
3968
3975
  },
3969
3976
  {
3970
3977
  path: '/content-and-data/crm/leads',
3971
3978
  title: 'Leads',
3972
3979
  heading: 'Converting a lead',
3973
3980
  anchor: '#converting-a-lead',
3974
- text: 'When a lead is real, click Convert on the lead\'s page, or choose Convert… from its row\'s menu on the list — the same dialog either way, from the list in one click. The dialog asks three things:\n1. Contact. The lead becomes a contact at the Sales qualified lifecycle stage, owned by whoever you pick — the lead\'s owner by default. Pick nobody and the workspace\'s assignment rules and the site\'s default owner decide, and failing those the contact is yours. A colleague you pick is notified; you are not told about a contact you kept. If this email address is already a contact, the conversion joins that contact rather than creating a second one — the address book stays one row per person — and a contact that already has an owner keeps them.\n2. Company. No company, Link an existing company, or Create a company. The dialog proposes the company the lead\'s email domain implies: if your workspace already has a company at that domain, it is preselected; otherwise a new one is proposed, named after the domain, with the domain filled in. Public mailboxes such as Gmail propose nothing.\n3. Deal. Tick Open a deal to open one in your default pipeline with a title, an amount, a currency and a starting stage. A workspace with no pipeline yet gets a Sales pipeline with the default stages created along with the deal.\nConverting marks the lead Qualified, records what it became, and takes you to the new contact\'s page. Back on the lead, the card links to the contact, the company and the deal. A converted lead cannot be converted again — opening the dialog on one simply takes you to its contact.\nA lead whose person has an erasure pending cannot be converted either: Convert stays on the page but is disabled, with the reason as its tooltip, until the nightly job has run — and the job removes the le'
3981
+ text: 'When a lead is real, click Convert on the lead\'s page, or choose Convert… from its row\'s menu on the list — the same dialog either way, from the list in one click. The dialog asks three things:\n1. Contact. The lead becomes a contact at the Sales qualified lifecycle stage, carrying the lead\'s phone, job title, address, tags, notes and company name, owned by whoever you pick — the lead\'s owner by default. Pick nobody and the workspace\'s assignment rules and the site\'s default owner decide, and failing those the contact is yours. A colleague you pick is notified; you are not told about a contact you kept. If this email address is already a contact, the conversion joins that contact rather than creating a second one — the address book stays one row per person — and a contact that already has an owner keeps them.\n2. Company. No company, Link an existing company, or Create a company. The dialog proposes from the lead\'s own Company text first: a company your workspace already files under that name is preselected, whatever its domain; otherwise one at the address\'s domain; otherwise a new company named as the lead names it, with the domain filled in when the address has one. A lead with no company text at a public mailbox such as Gmail proposes nothing.\n3. Deal. Tick Open a deal to open one in your default pipeline with a title, an amount, a currency and a starting stage. A workspace with no pipeline yet gets a Sales pipeline with the default stages created along with the deal.\nConverting marks the lead Qualified, records what it became, and takes you to the new contact\'s page. What was filed on the lead follows it: the calls, emails, notes and tasks logged on the lead appear on the contact\'s timeline and task list too, and a sequence the lead was enrolled in carries on with th'
3975
3982
  },
3976
3983
  {
3977
3984
  path: '/content-and-data/crm/leads',
@@ -4020,14 +4027,14 @@ export const ASSIST_DOCS_INDEX = [
4020
4027
  title: 'CRM',
4021
4028
  heading: 'Unified ingestion',
4022
4029
  anchor: '#unified-ingestion',
4023
- text: 'Contacts are ingested from across your site:\n- Form submissions\n- Site members (sign-ups)\n- Orders from commerce\n- Bookings from scheduling\nDuplicate signals from the same person are unified into one contact. A person your site has met but not yet qualified is also a lead; converting the lead joins the same contact rather than making a second one.\nEvery plan with the CRM includes a CRM records band — one number for contacts, companies and deals together. Paid tiers never drop a record: growth past the band meters as overage on the monthly invoice. Free has no CRM, but the same count caps what its sites capture — past 100 records a site adds no new person. See CRM records under Billing & plans.'
4030
+ text: 'Contacts are ingested from across your site:\n- Form submissions\n- Site members (sign-ups)\n- Orders from commerce\n- Bookings from scheduling\nDuplicate signals from the same person are unified into one contact. A person your site has met but not yet qualified is a lead instead — a record of its own, with no contact beside it — and converting the lead is what makes the contact. A person who is already a contact is never filed as a lead.\nEvery plan with the CRM includes a CRM records band — one number for contacts, companies and deals together. Paid tiers never drop a record: growth past the band meters as overage on the monthly invoice. Free has no CRM, but the same count caps what its sites capture — past 100 records a site adds no new person. See CRM records under Billing & plans.'
4024
4031
  },
4025
4032
  {
4026
4033
  path: '/content-and-data/crm/overview',
4027
4034
  title: 'CRM',
4028
4035
  heading: 'What each plan includes',
4029
4036
  anchor: '#what-each-plan-includes',
4030
- text: '| | Free | Starter and above |\n| The CRM — Leads, Contacts, Companies, Deals, Tasks, Reports, Fields and Settings; working a lead — status, owner, notes, conversion and import; on Contacts, New contact, Import CSV, saved views, and every edit to a contact — profile, tags, notes, owner, lifecycle stage, company, custom fields, tasks, deals, files, logged calls and activities and merges — one record at a time or from the bulk bar; CSV export and Erase this person from the CRM\'s own pages; the two CRM dashboard cards; the CRM automation steps; the CRM\'s REST API resources | None. The CRM tab stays in the navigation, and every section is shown locked beside the upgrade notice | Yes |\n| One-to-one email from a record | None | A daily cap by tier — see One-to-one email |\n| Capture — form submissions, member sign-ups, orders and bookings updating the person in Contacts, and a lead from a form whose lead routing is on | Yes, up to the 100-record band | Yes |\n| Privacy requests — exporting every contact and every lead, and erasing a person, from Settings → Privacy | Yes | Yes |\nThe CRM is for a plan that includes it, from Starter, while the subscription is live. On Free — and on a paid plan whose subscription has ended — the CRM tab stays in the navigation, every section is drawn locked in the rail beside a notice that the CRM is not included in your current plan, with View plans, and a bare …/crm shows that notice. Nothing in the CRM can be read or changed there: not in the console, not through its routes, and not over the REST API, whose CRM resources refuse with planrequired.\nCapture does not wait for the plan. Every form submission, sign-up, order or booking that carries an email address updates the person in Contacts, and a form files a lead only when its lead routing is on'
4037
+ text: '| | Free | Starter and above |\n| The CRM — Leads, Contacts, Companies, Deals, Tasks, Reports, Fields and Settings; working a lead — status, owner, notes, conversion and import; on Contacts, New contact, Import CSV, saved views, and every edit to a contact — profile, tags, notes, owner, lifecycle stage, company, custom fields, tasks, deals, files, logged calls and activities and merges — one record at a time or from the bulk bar; CSV export and Erase this person from the CRM\'s own pages; the two CRM dashboard cards; the CRM automation steps; the CRM\'s REST API resources | None. The CRM tab stays in the navigation, and every section is shown locked beside the upgrade notice | Yes |\n| One-to-one email from a record | None | A daily cap by tier — see One-to-one email |\n| Capture — member sign-ups and orders updating the person in Contacts; bookings and forms with lead routing on filing a lead; other forms and newsletter opt-ins landing on whichever record the person is | Yes, up to the 100-record band | Yes |\n| Privacy requests — exporting every contact and every lead, and erasing a person, from Settings → Privacy | Yes | Yes |\nThe CRM is for a plan that includes it, from Starter, while the subscription is live. On Free — and on a paid plan whose subscription has ended — the CRM tab stays in the navigation, every section is drawn locked in the rail beside a notice that the CRM is not included in your current plan, with View plans, and a bare …/crm shows that notice. Nothing in the CRM can be read or changed there: not in the console, not through its routes, and not over the REST API, whose CRM resources refuse with planrequired.\nCapture does not wait for the plan. Every form submission, sign-up, order or booking that carries an email address updates the person\'s record — a '
4031
4038
  },
4032
4039
  {
4033
4040
  path: '/content-and-data/crm/overview',
@@ -4237,7 +4244,7 @@ export const ASSIST_DOCS_INDEX = [
4237
4244
  title: 'Sequences',
4238
4245
  heading: 'Compliance settings',
4239
4246
  anchor: '#compliance-settings',
4240
- text: 'Every email a sequence sends ends with a footer saying who sent it, where they can be reached by post, that the email is a business solicitation, and how to stop more of them:\nThe United States\' CAN-SPAM Act requires those things of a commercial email, so the footer is added to every email after your text — no template or merge field can leave it off. You set what it says in Sequences → Compliance:\n- Legal name — your organization\'s legal name, as the footer prints it.\n- Brand name — the name the solicitation sentence uses, when it isn\'t the legal name. Leave it empty to use the legal name.\n- Postal address — a valid physical postal address: a street address, a post office box registered with the US Postal Service, or a private mailbox registered with the US Postal Service under its rules for commercial mail receiving agencies. Write it over as many lines as it takes; the footer prints them on one line.\nNo sequence can be activated while the legal name or the postal address is empty, and an email with neither is never sent.\nAllowed countries {#allowed-countries}\nThe countries a sequence may send to at all, United States by default. Every sequence sends only to the countries both it and this list allow, so taking a country off here takes it off every sequence at once.\nThe others are off because the law is different there. Canada, the United Kingdom and most of the European Union require a consent basis that an email to someone who never contacted you does not have. So a cold email — to someone who never filled in a form, signed up, ordered or booked with you, or wrote to you — never goes outside the United States, whatever this list says. Add another country only for people who came to you first.'
4247
+ text: 'Every email a sequence sends ends with a footer saying who sent it, where they can be reached by post, that the email is a sales email, and how to stop more of them:\nThe United States\' CAN-SPAM Act requires those things of a commercial email, so the footer is added to every email after your text — no template or merge field can leave it off. You set what it says in Sequences → Compliance:\n- Legal name — your organization\'s legal name, as the footer prints it.\n- Brand name — the name the solicitation sentence uses, when it isn\'t the legal name. Leave it empty to use the legal name.\n- Postal address — a valid physical postal address: a street address, a post office box registered with the US Postal Service, or a private mailbox registered with the US Postal Service under its rules for commercial mail receiving agencies. Write it over as many lines as it takes; the footer prints them on one line.\nNo sequence can be activated while the legal name or the postal address is empty, and an email with neither is never sent.\nAllowed countries {#allowed-countries}\nThe countries a sequence may send to at all, United States by default. Every sequence sends only to the countries both it and this list allow, so taking a country off here takes it off every sequence at once.\nThe others are off because the law is different there. Canada, the United Kingdom and most of the European Union require a consent basis that an email to someone who never contacted you does not have. So a cold email — to someone who never filled in a form, signed up, ordered or booked with you, or wrote to you — never goes outside the United States, whatever this list says. Add another country only for people who came to you first.'
4241
4248
  },
4242
4249
  {
4243
4250
  path: '/content-and-data/crm/sequences',
@@ -4251,14 +4258,14 @@ export const ASSIST_DOCS_INDEX = [
4251
4258
  title: 'Sequences',
4252
4259
  heading: 'Enroll people',
4253
4260
  anchor: '#enroll',
4254
- text: 'Select Enroll people on an active sequence, and choose them from a saved Contacts view or by searching your contacts at the sequence\'s site — up to 50 at a time. Enrolling reads your contacts, so it takes the Manage data permission as well as Use Sequences.\nBefore anything is enrolled, each person is marked:\n- Eligible — enrolled as they are.\n- Needs you — enrolled once you\'ve written their personal line and confirmed what\'s asked below.\n- Blocked — not enrolled, with the reason: a personal mailbox, which a cold email never goes to; an address outside the allowed countries, or in no known country; on the platform\'s or your site\'s suppression list after a bounce, a complaint or an unsubscribe; opted out of sales email from the site; on your organization\'s do-not-contact list; a member of your workspace; a customer, unless the sequence includes customers; or already in a sequence.\nCold contacts {#cold-contacts}\nA contact is cold when nothing on your site shows they came to you: no form, sign-up, order or booking, and no email from them. For each cold contact you write a personal line — one sentence on why you\'re writing to this person now, which the sequence puts where {{enrollment.personalLine}} is — and confirm three things only you can know:\n- This is a US business address.\n- They or their company published this address, or they gave it to us — never guessed from a name, and never bought.\n- This address was verified as deliverable.\nEach confirmation is stored on the enrollment with who made it and when.\nEnroll checks every person again as it enrolls them, so someone who unsubscribed a moment ago is refused even though they were eligible when you looked. A person goes through a sequence once: they can\'t be enrolled in the same sequence again, even after it finishes.'
4261
+ text: 'Select Enroll people on an active sequence, and choose them from a saved Contacts or Leads view, by searching your contacts at the sequence\'s site, or from the Leads tab — the site\'s open leads — up to 50 at a time. Enrolling reads your contacts and leads, so it takes the Manage data permission as well as Use Sequences.\nA lead is enrolled as it is, with no contact made: the emails read the lead\'s name, company and title wherever the steps say {{contact.firstName}}, {{contact.company}} or {{contact.title}} (and {{lead.…}} reads the same fields), the sends and replies land on the lead\'s page, a call step files its task on the lead, and a reply moves a lead from New to Working. When the lead converts, its enrollment carries on as the contact\'s — same thread, same place in the steps — so a person is never enrolled twice by being two records. A lead that already converted, one whose address is already a contact, and one closed as unqualified are blocked with the reason: enroll the contact, or reopen the lead.\nBefore anything is enrolled, each person is marked:\n- Eligible — enrolled as they are.\n- Needs you — enrolled once you\'ve written their personal line and confirmed what\'s asked below.\n- Blocked — not enrolled, with the reason: a personal mailbox, which a cold email never goes to; an address outside the allowed countries, or in no known country; on the platform\'s or your site\'s suppression list after a bounce, a complaint or an unsubscribe; opted out of sales email from the site; on your organization\'s do-not-contact list; a member of your workspace; a customer, unless the sequence includes customers; already in a sequence; or a lead that converted, is already a contact, or was closed as unqualified.\nCold contacts {#cold-contacts}\nA contact is cold when nothing on your s'
4255
4262
  },
4256
4263
  {
4257
4264
  path: '/content-and-data/crm/sequences',
4258
4265
  title: 'Sequences',
4259
4266
  heading: 'Enrollments',
4260
4267
  anchor: '#enrollments',
4261
- text: 'A sequence\'s Enrollments tab lists everyone in it: their status, the step they\'re on, when the next one is due in the mailbox\'s timezone, when the last one went, and why they stopped when they have. For each one you can:\n- Pause and Resume — nothing is sent while they\'re paused.\n- Stop — they get nothing more from this sequence.\n- Mark do-not-contact — puts the address on your organization\'s do-not-contact list, which every sequence checks before every send, and stops them in every other sequence too.'
4268
+ text: 'A sequence\'s Enrollments tab lists everyone in it: their status, the step they\'re on, when the next one is due in the mailbox\'s timezone, when the last one went, and why they stopped when they have. A person enrolled as a lead is marked Lead until the lead converts. For each one you can:\n- Pause and Resume — nothing is sent while they\'re paused.\n- Stop — they get nothing more from this sequence.\n- Mark do-not-contact — puts the address on your organization\'s do-not-contact list, which every sequence checks before every send, and stops them in every other sequence too.'
4262
4269
  },
4263
4270
  {
4264
4271
  path: '/content-and-data/crm/sequences',
@@ -4937,7 +4944,7 @@ export const ASSIST_DOCS_INDEX = [
4937
4944
  title: 'Building feature plugins',
4938
4945
  heading: 'Remote bundles: the trusted realm tier (AGL-420)',
4939
4946
  anchor: '#remote-bundles-the-trusted-realm-tier-agl-420',
4940
- text: 'Marketplace plugins normally run sandboxed in the cross-origin PluginFrame. Listings a staff member has reviewed and signed (trust: \'realm\' + an Ed25519 signature over the bundle\'s sha256 on the version doc) instead load INTO the app realm and use every registry above — first-party-grade extensions installed per workspace, no repo change.\n- Build with tools/plugin-loader/realm/rollup.config.mjs: your react, react/jsx-runtime, and @aglyn/aglyn imports compile to lookups on globalThis.AGLYNPLUGINHOST (the app\'s own singletons), so the emitted bundle imports nothing. Export register(host) for client surfaces; registerApi() for server handlers.\n- Publish through the marketplace pipeline, install (pins {version, sha256}), then staff grant trust via POST /api/admin/sign-plugin.\n- The console loads an org\'s realm installs before the shell renders; published sites load them post-hydration (additive runtimes — first paint never waits on a marketplace CDN). Every load verifies the sha256 pin and the platform signature and fails closed; revocations is the hard kill switch.\n- Server handler bundles are additionally gated by PLUGINREMOTESERVER=enabled + a per-deploy PLUGINREMOTESERVERBUNDLES allowlist, default off everywhere.\nFull trust chain, env matrix, and walkthrough: docs/PLUGINLOADING.md in the repo; a runnable demo lives at tools/plugin-loader/realm/demo.'
4947
+ text: 'Marketplace plugins normally run sandboxed in the cross-origin PluginFrame. Listings a staff member has reviewed and signed (trust: \'realm\' + an Ed25519 signature over the bundle\'s sha256 on the version doc) instead load INTO the app realm and use every registry above — first-party-grade extensions installed per workspace, no repo change.\n- Build with tools/plugin-loader/realm/rollup.config.mjs: your react, react/jsx-runtime, and @aglyn/aglyn imports compile to lookups on globalThis.AGLYNPLUGINHOST (the app\'s own singletons), so the emitted bundle imports nothing. Export register(host) for client surfaces; registerApi() for server handlers.\n- Publish through the marketplace pipeline, install (pins {version, sha256}), then staff grant trust via POST /api/marketplace/admin/trust.\n- The console loads an org\'s realm installs before the shell renders; published sites load them post-hydration (additive runtimes — first paint never waits on a marketplace CDN). Every load verifies the sha256 pin and the platform signature and fails closed; revocations is the hard kill switch.\n- Server handler bundles are additionally gated by PLUGINREMOTESERVER=enabled + a per-deploy PLUGINREMOTESERVERBUNDLES allowlist, default off everywhere.\nFull trust chain, env matrix, and walkthrough: docs/PLUGINLOADING.md in the repo; a runnable demo lives at tools/plugin-loader/realm/demo.'
4941
4948
  },
4942
4949
  {
4943
4950
  path: '/developers/plugins/building-feature-plugins',
@@ -5105,7 +5112,7 @@ export const ASSIST_DOCS_INDEX = [
5105
5112
  title: 'Guide: trusted realm bundles',
5106
5113
  heading: 'Granting trust (staff)',
5107
5114
  anchor: '#granting-trust-staff',
5108
- text: 'Admin → Plugin reviews has a Listed plugins — realm trust section: every listed and verified plugin with its recent versions, each showing a Realm-trusted or Sandboxed chip and a Latest marker, with per-version Grant realm trust and Revoke realm trust buttons. Trust is granted to a specific reviewed version, not to the listing — a newer version stays sandboxed until it is reviewed and granted in turn.\nBoth actions are super-staff only and adminAudit\'d. The equivalent API is POST /api/admin/sign-plugin { listingId, version }, with { action: \'revoke\' } to revoke; a hard-kill still needs a revocation doc. Signing requires PLUGINTRUSTPRIVATEKEY on the console deployment — generate the pair with tools/scripts/generate-plugin-trust-key.mjs.'
5115
+ text: 'Admin → Plugin reviews has a Listed plugins — realm trust section: every listed and verified plugin with its recent versions, each showing a Realm-trusted or Sandboxed chip and a Latest marker, with per-version Grant realm trust and Revoke realm trust buttons. Trust is granted to a specific reviewed version, not to the listing — a newer version stays sandboxed until it is reviewed and granted in turn.\nBoth actions are super-staff only and adminAudit\'d. The equivalent API is POST /api/marketplace/admin/trust { listingId, version }, with { action: \'revoke\' } to revoke; a hard-kill still needs a revocation doc. Signing requires PLUGINTRUSTPRIVATEKEY on the console deployment — generate the pair with tools/scripts/generate-plugin-trust-key.mjs.'
5109
5116
  },
5110
5117
  {
5111
5118
  path: '/developers/plugins/guides/realm-bundles',
@@ -5455,7 +5462,7 @@ export const ASSIST_DOCS_INDEX = [
5455
5462
  title: 'Manifests, trust lifecycle & environment',
5456
5463
  heading: 'Review & trust lifecycle',
5457
5464
  anchor: '#review--trust-lifecycle',
5458
- text: '- listed/verified (or legacy/absent) plugin listings appear in browse; everything else is owner-and-staff-only. Verified adds the ✅ badge.\n- Realm trust is separate and orthogonal: a super-staff signature over a version\'s sha256 (POST /api/admin/sign-plugin) sets trust: \'realm\', letting that version load into the app realm. The revocations/{listingId} kill switch beats everything.'
5465
+ text: '- listed/verified (or legacy/absent) plugin listings appear in browse; everything else is owner-and-staff-only. Verified adds the ✅ badge.\n- Realm trust is separate and orthogonal: a super-staff signature over a version\'s sha256 (POST /api/marketplace/admin/trust) sets trust: \'realm\', letting that version load into the app realm. The revocations/{listingId} kill switch beats everything.'
5459
5466
  },
5460
5467
  {
5461
5468
  path: '/developers/plugins/reference/manifest-and-envs',
@@ -5623,7 +5630,7 @@ export const ASSIST_DOCS_INDEX = [
5623
5630
  title: 'Plugin-manager API reference',
5624
5631
  heading: 'Contact capture — `plugin-contact-capture` (`/server`)',
5625
5632
  anchor: '#contact-capture--plugin-contact-capture-server',
5626
- text: 'A silo that meets a person — a form submission, a member sign-up, an order, a booking — hands them to whichever plugin keeps people, instead of importing its writer.\n| API | Semantics |\n| registerPluginContactCaptureWriter(writer, { pluginId? }) | A slot: a workspace keeps one set of people, so a second plugin\'s writer throws naming both and the incumbent keeps serving. |\n| capturePluginContact(request) | { ok: true, contactId, created } — created: false is a returning visit — or { ok: false, reason, error }, or null when no plugin keeps people. null and a refusal are different answers: null is a workspace with no record system, where nothing has gone wrong. |\n| registerPluginContactSource({ source, label, openLabel?, recordKind? }, { pluginId? }) | One source word has one owner. openLabel is what a link from a timeline entry says, and a door with nothing to open declares none. recordKind is the kind plugin-record-routes addresses the silo\'s own document by. |\n| pluginContactCaptureWriter() / listPluginContactSources() / pluginContactSource(source) | The writer with its owner, every declared door, and one by its word. |\nA refusal is returned, never thrown. Each of these silos has already accepted the submission or taken the money, so a throw would cost it the thing it was recording. reason is invalid-email, band, erased or error, and error is customer-safe.\nprofile is the owner\'s own field names with scalar values, not a core type. A person\'s record shape belongs to the plugin that models it. So does everything else the owner decides: normalizing and keying the address, new person or returning visit, what a stage, an owner, a company or a tag means, and what a new person sets off. The silo reports what it saw. Like plugin-record-timeline, the registry authenticates nobo'
5633
+ text: 'A silo that meets a person — a form submission, a member sign-up, an order, a booking — hands them to whichever plugin keeps people, instead of importing its writer.\n| API | Semantics |\n| registerPluginContactCaptureWriter(writer, { pluginId? }) | A slot: a workspace keeps one set of people, so a second plugin\'s writer throws naming both and the incumbent keeps serving. |\n| capturePluginContact(request) | { ok: true, record: \'contact\', contactId, created } or { ok: true, record: \'lead\', leadId, created } — created: false is a returning visit — or { ok: false, reason, error }, or null when no plugin keeps people. null and a refusal are different answers: null is a workspace with no record system, where nothing has gone wrong. |\n| registerPluginContactSource({ source, label, openLabel?, recordKind? }, { pluginId? }) | One source word has one owner. openLabel is what a link from a timeline entry says, and a door with nothing to open declares none. recordKind is the kind plugin-record-routes addresses the silo\'s own document by. |\n| pluginContactCaptureWriter() / listPluginContactSources() / pluginContactSource(source) | The writer with its owner, every declared door, and one by its word. |\nA refusal is returned, never thrown. Each of these silos has already accepted the submission or taken the money, so a throw would cost it the thing it was recording. reason is invalid-email, band, erased or error, and error is customer-safe.\nsurface says what kind of door this is, and the owner decides which record the person lands on. lead is a lead surface — a form its author routes to leads, a booking request: the owner files a lead and no contact, unless the workspace already holds the address as a contact. relationship is an act that makes the person known — a member account, a purc'
5627
5634
  },
5628
5635
  {
5629
5636
  path: '/developers/plugins/reference/plugin-manager-api',
@@ -5674,6 +5681,13 @@ export const ASSIST_DOCS_INDEX = [
5674
5681
  anchor: '#person-erasure--plugin-person-erasure-server',
5675
5682
  text: 'The person erasure removes one person from one workspace: the contact, what the CRM files beside it, and the leads, list memberships and delivery log under the address. A plugin that keeps records about such a person under the organization — keyed by the contact or by the address — registers an eraser from its declarations:\n| API | Semantics |\n| registerPluginPersonEraser(eraser, { pluginId? }) | One eraser per plugin; registering again replaces it in place. |\n| runPluginPersonErasers({ orgId, email, key, contactIds, dryRun }) | What the erasure calls after every site\'s suppression row is written and before the contacts are deleted. Every eraser in registration order; each plugin\'s report by plugin id, or null for an eraser that threw — logged, and never the erasure\'s failure. |\nkey is personKey(email): how every suppression list names the person without the address. A record that the person asked not to be contacted, keyed that way, is kept — the promise outlives the data — with anything that could identify the person removed from it. A dry run counts and writes nothing. Reports land under plugins on the erasure\'s counts and audit row.'
5676
5683
  },
5684
+ {
5685
+ path: '/developers/plugins/reference/plugin-manager-api',
5686
+ title: 'Plugin-manager API reference',
5687
+ heading: 'Lead conversion — `plugin-lead-conversion` (`/server`)',
5688
+ anchor: '#lead-conversion--plugin-lead-conversion-server',
5689
+ text: 'When a lead becomes a contact — from the console, over the REST API, or on its own when the person signs up or buys — the record system stamps the lead, moves its activities and tasks onto the contact, then tells every plugin with a listener, so a plugin that keeps records naming the lead can re-point them:\n| API | Semantics |\n| registerPluginLeadConversionListener(listener, { pluginId? }) | One listener per plugin; registering again replaces it in place. |\n| runPluginLeadConversionListeners({ orgId, hostId, leadId, contactId, email, by }) | What the conversion calls after the lead carries convertedContactId and its own records have moved. Every listener in registration order; each plugin\'s report by plugin id, or null for one that threw — logged, and never the conversion\'s failure, which has already happened. |\nby names the door: member, api, signup, purchase or backfill. leadId is the person key the lead is filed under on hostId.'
5690
+ },
5677
5691
  {
5678
5692
  path: '/developers/plugins/reference/plugin-manager-api',
5679
5693
  title: 'Plugin-manager API reference',
@@ -6344,7 +6358,7 @@ export const ASSIST_DOCS_INDEX = [
6344
6358
  title: 'The console tour',
6345
6359
  heading: 'Workspace settings & notifications',
6346
6360
  anchor: '#workspace-settings--notifications',
6347
- text: 'Organization-wide settings (name, workspace URL) live under Organization → Settings, which also holds Profile, API keys, Branding, Single sign-on, Privacy, Ownership and Delete. Turning plugins on and off for the workspace is its own section, Organization → Plugins — Marketplace is for finding and installing new ones, not for administering what you already run:\nThe notifications feed\nYour in-app notification feed — billing, publishing, workflow failures — lives under Notifications. The page shows what arrived, newest first, with Mark all read and a Notification settings button beside it:\nNotification settings\nEverything about what reaches you lives on its own page, Notification settings, reachable from that button or from the Manage tab strip.\nWhat you are told about is a table: one row per category, one column for In console and one for Email.\n- In console is on for every category. Switching it off stops that category appearing in the feed and in the bell.\n- Email is off for every category. Switch one on and you also get a message in your inbox when one of those notifications arrives. This does not touch the mail Aglyn already sends you — invites, verification, receipts, password resets and dunning are separate, and are not affected by anything on this page.\nWorkspace and site overrides\nOne workspace or one site sets the same answers for a single workspace or a single site, rather than for your whole account. Each cell starts at Inherit, which means it follows the level above it: a site follows its workspace, a workspace follows your account. Set one to On or Off and only that scope changes. This is how you take form submissions by email from one busy site without taking them from the other five.\nDaily digests\nDaily CRM digest is on by default. Each morning it sends yo'
6361
+ text: 'Organization-wide settings (name, workspace URL) live under Organization → Settings, which also holds Profile, API keys, Branding, Single sign-on, Privacy, Ownership and Delete. Turning plugins on and off for the workspace is its own section, Organization → Plugins — Marketplace is for finding and installing new ones, not for administering what you already run:\nThe notifications feed\nYour in-app notification feed — billing, publishing, workflow failures — lives under Notifications, which has two sections in the rail on the left: All notifications and Settings. The first shows what arrived, newest first, with Mark all read above it:\nNotification settings\nEverything about what reaches you lives on the second section, Settings.\nWhat you are told about is a table: one row per category, one column for In console and one for Email.\n- In console is on for every category. Switching it off stops that category appearing in the feed and in the bell.\n- Email is off for every category. Switch one on and you also get a message in your inbox when one of those notifications arrives. This does not touch the mail Aglyn already sends you — invites, verification, receipts, password resets and dunning are separate, and are not affected by anything on this page.\nWorkspace and site overrides\nOne workspace or one site sets the same answers for a single workspace or a single site, rather than for your whole account. Each cell starts at Inherit, which means it follows the level above it: a site follows its workspace, a workspace follows your account. Set one to On or Off and only that scope changes. This is how you take form submissions by email from one busy site without taking them from the other five.\nDaily digests\nDaily CRM digest is on by default. Each morning it sends you one notification '
6348
6362
  },
6349
6363
  {
6350
6364
  path: '/getting-started/create-a-site',