@aglyn/aglyn 1.0.0-beta.224 → 1.0.0-beta.225

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.
@@ -296,7 +296,7 @@ export const DOCS_SECTION_INDEX = [
296
296
  title: 'The AI CRM built into Aglyn',
297
297
  heading: 'What AI reads from a record',
298
298
  anchor: '#what-is-sent',
299
- text: 'The CRM decides what AI may read, and it reads the same record you would see. For a summary or an email draft, AI is given:\n- the record\'s name, and for a contact their job title, company, lifecycle stage and tags;\n- how the person came in (for example a form, a booking or an order), a count of their orders and the day of the last one, when they were added, and when they last opened or clicked an email;\n- for a company, its domain, industry and how many people it has; for a deal, its pipeline and stages, stage, status, amount, expected close date, lost reason, the names of the person and company it is with, up to 10 of its contacts by name with the role each plays and which is Primary (a contact you cannot see is left out), and how many products it has; for a lead, its status, how it was captured and how many times, when it was first and last seen, whether it is assigned or converted, and why it was unqualified;\n- the record\'s notes (their first 600 characters);\n- its 12 newest timeline entries: the day, the kind of activity, an email\'s subject and delivery state, and the first 280 characters of what was logged;\n- up to 8 open tasks and, for a contact or company, up to 5 deals.\nAI is never given an email address, phone number or postal address field, anyone\'s marketing consent, a custom field\'s value, which team member owns a record or a task, or a record\'s id. When an email address or a phone number is typed into any text that is sent, such as a name, a note, a logged activity, or a task\'s or deal\'s title, it is replaced before the text is sent. A street address typed into a note is not recognized, so it is sent as typed.'
299
+ text: 'The CRM decides what AI may read, and it reads the same record you would see. For a summary or an email draft, AI is given the whole record as the CRM shows it to you:\n- every standard field — for a person their name and its parts, salutation, job title, department, company, every email address, every phone and fax number, birthdate, assistant, who they report to, mailing and other address, lifecycle stage, lead source and Do not call; for a company its domain, website, phone, fax, account fields, billing and shipping address and parent company; for a deal its pipeline and stages, stage, amount, products, type, lead source, campaign, next step, probability, forecast category, the person and company it is with, and up to 10 of its contacts by name with the role each plays and which is Primary (a contact you cannot see is left out); for a lead its contact details, address, account fields, status and campaigns;\n- your picklists\' labels as the record holds them, and your custom fields, each under its label;\n- the person\'s marketing consent — opted in and since when, declined, or none recorded;\n- who owns the record and who each open task is assigned to, by name;\n- the record\'s notes (their first 600 characters);\n- its 12 newest timeline entries: the day, the kind of activity, an email\'s sender, recipient, subject and delivery state, and the first 280 characters of what was logged;\n- up to 8 open tasks with their notes and, for a contact or company, up to 5 deals.\nText you wrote is sent as written. A record that holds a great deal at once has its longest texts — notes, timeline entries, task notes and custom values — shortened to fit, and no field is left out.\nAI is never given a password, a sign-in token, an account identifier or a record\'s internal id. A related record — t'
300
300
  },
301
301
  {
302
302
  path: '/ai/crm-by-ai',
@@ -555,7 +555,7 @@ export const DOCS_SECTION_INDEX = [
555
555
  title: 'Aglyn AI: the AI website builder',
556
556
  heading: 'What happens to what you send',
557
557
  anchor: '#what-is-sent',
558
- text: 'A build job is sent your brief and what it needs to build against it — the names of the components, layouts, forms and datasets your site already has, your theme\'s values, and the copy of anything it is starting from. Each capability\'s page says exactly what its own job is sent, and the CRM and automation pages say what is removed first.\nYour brief is customer text and is kept with the job for 180 days, then deleted. No contact, lead, deal, form submission or list member is read to build a page.'
558
+ text: 'A build job is sent your brief and what it needs to build against it — the names of the components, layouts, forms and datasets your site already has, your theme\'s values, and the copy of anything it is starting from. Each capability\'s page says exactly what its own job is sent: the CRM page lists what a record sends, and the automation page what is removed first.\nYour brief is customer text and is kept with the job for 180 days, then deleted. No contact, lead, deal, form submission or list member is read to build a page.'
559
559
  },
560
560
  {
561
561
  path: '/ai/overview',
@@ -2522,14 +2522,14 @@ export const DOCS_SECTION_INDEX = [
2522
2522
  title: 'SEO Toolkit',
2523
2523
  heading: 'Structured data',
2524
2524
  anchor: '#structured-data',
2525
- text: 'Published sites emit JSON-LD, giving search engines and AI assistants rich context about your content.\nEvery page carries two site-wide nodes:\n- a top-level Organization (or Person, or a local business type such as Plumber) describing who publishes the site — the entity an assistant reads when someone asks who you are or how to reach you. It is filled in from Setup → SEO → Entity, and it falls back to your site name and description, so a site that has never touched that form still publishes a named, described entity;\n- a WebSite naming the site and its address, with the language it is published in (inLanguage).\nAnd per kind of page:\n| Page | What it publishes |\n| A collection listing, and a category listing | ItemList of the entries on that page, in their real positions |\n| A blog or collection entry | The article type its collection declares — BlogPosting, NewsArticle, Article — with its headline, cover, dates, byline, section and language |\n| An author page | ProfilePage wrapping the author as a Person or Organization |\n| A product page | Product with its Offer, availability and — where you have reviews — an AggregateRating |\n| Any page more than one level deep | BreadcrumbList naming the trail to it |\nYour social links, from Setup → Details → Business details, are published as the entity\'s sameAs — the property that tells a search engine your site, your LinkedIn page and your X account are all the same organization. You do not have to retype them anywhere; the list the site already renders is the list it publishes.\nTwo fields are worth adding by hand, because nothing can guess them:\n- Contact email / phone, published as contactPoint;\n- Address, published as a PostalAddress. Partial is fine — a city and a country are still a real answer.\nLocal businesses\nIf customers '
2525
+ text: 'Published sites emit JSON-LD, giving search engines and AI assistants rich context about your content.\nEvery page carries two site-wide nodes:\n- a top-level Organization (or Person, or a local business type such as Plumber) describing who publishes the site — the entity an assistant reads when someone asks who you are or how to reach you. It is filled in from Setup → SEO → Entity, and it falls back to your site name and description, so a site that has never touched that form still publishes a named, described entity;\n- a WebSite naming the site and its address, with the language it is published in (inLanguage).\nAnd per kind of page:\n| Page | What it publishes |\n| A collection listing, and a category listing | ItemList of the entries on that page, in their real positions |\n| A blog or collection entry | The article type its collection declares — BlogPosting, NewsArticle, Article — with its headline, cover, dates, byline, section and language |\n| An author page | ProfilePage wrapping the author as a Person or Organization |\n| A product page | Product with its Offer, availability and — where you have reviews — an AggregateRating |\n| Any page more than one level deep | BreadcrumbList naming the trail to it |\n| A page with a FAQ section — a Section whose accessible label names it (FAQ, Frequently asked questions) — holding two or more question-and-answer pairs, as two-line items or accordions | FAQPage listing each question with its answer, the block AI search quotes and FAQ rich results read |\nYour social links, from Setup → Details → Business details, are published as the entity\'s sameAs — the property that tells a search engine your site, your LinkedIn page and your X account are all the same organization. You do not have to retype them anywhere; the list the site already'
2526
2526
  },
2527
2527
  {
2528
2528
  path: '/building-sites/seo/overview',
2529
2529
  title: 'SEO Toolkit',
2530
2530
  heading: 'AI agents',
2531
2531
  anchor: '#ai-agents',
2532
- text: 'Agents read a site differently from a browser. Aglyn publishes four things for them, on every site, with nothing to switch on.\nMarkdown for any page\nEvery page serves a Markdown version of itself with the navigation, styling and scripts removed. Two ways to ask:\nBoth return the same document: the page title, its summary, the content region, and a Source: line carrying the canonical URL. Site chrome is left out — that is the point. The HTML page links to its own Markdown with , so an agent reading the HTML can find it.\nA request that accepts neither HTML nor Markdown — Accept: application/pdf, say — is answered 406 Not Acceptable with a plain-text list of what IS available. Ordinary browser requests are never affected.\nThe search page is the one exception: its results are computed in the browser, so there is no Markdown version to serve and it stays HTML.\n/llms.txt\nA short guide at https://your-site/llms.txt telling an agent what the site is for and which addresses answer what — your collections that have published entries and their entry counts, search, the sitemap, the API description, and a contact route when you publish one.\nYou can lead it with your own words. Setup → SEO → AI agents has two boxes:\n- When to use this site — the questions you are the best source for. Be specific; an agent discounts a claim it cannot check, and generic marketing copy does not read as guidance.\n- How an agent should call you — anything worth knowing before it fetches.\nBoth are optional. The rest of the file is derived from what your site actually publishes, so it is never empty and never out of date.\n/openapi.json\nA machine-readable OpenAPI 3.1 description of everything your site serves, generated per site so it always names your own domain. Every operation carries a unique operationId'
2532
+ text: 'Agents read a site differently from a browser. Aglyn publishes four things for them, on every site, with nothing to switch on.\nMarkdown for any page\nEvery page serves a Markdown version of itself with the navigation, styling and scripts removed. Two ways to ask:\nBoth return the same document: the page title, its summary, the content region, and a Source: line carrying the canonical URL. Site chrome is left out — that is the point. The HTML page links to its own Markdown with , so an agent reading the HTML can find it.\nA request that accepts neither HTML nor Markdown — Accept: application/pdf, say — is answered 406 Not Acceptable with a plain-text list of what IS available. Ordinary browser requests are never affected.\nThe search page is the one exception: its results are computed in the browser, so there is no Markdown version to serve and it stays HTML.\n/llms.txt\nA short guide at https://your-site/llms.txt telling an agent what the site is for and which addresses answer what — your collections that have published entries and their entry counts, search, the sitemap, the API description, and a contact route when you publish one.\nIt also lists your pages in the order your site is built: the home page, then the top-level pages as your screens list arranges them, then the pages under each of those. A page you have hidden from search — unlisted, password-protected, members-only — is never listed, so the guide agrees with your robots meta about which pages exist. A very large site lists its first two hundred in that order and leaves the rest to the sitemap.\nYou can lead it with your own words. Setup → SEO → AI agents has two boxes:\n- When to use this site — the questions you are the best source for. Be specific; an agent discounts a claim it cannot check, and generic marketin'
2533
2533
  },
2534
2534
  {
2535
2535
  path: '/building-sites/seo/overview',
@@ -4496,7 +4496,7 @@ export const DOCS_SECTION_INDEX = [
4496
4496
  title: 'Sequences',
4497
4497
  heading: 'Sent from your own mailbox',
4498
4498
  anchor: '#sent-from-your-own-mailbox',
4499
- text: 'A sequence sends from the rep\'s own mailbox, connected to the workspace through the rep\'s Google account. The email leaves from that address, sits in that rep\'s sent mail like any other, and a reply comes back to the same inbox — which is what makes it a conversation between two people rather than a broadcast.'
4499
+ text: 'A sequence sends from the rep\'s own mailbox, connected to the workspace through the rep\'s Google account or Microsoft 365 account. The email leaves from that address, sits in that rep\'s sent mail like any other, and a reply comes back to the same inbox — which is what makes it a conversation between two people rather than a broadcast.'
4500
4500
  },
4501
4501
  {
4502
4502
  path: '/content-and-data/crm/sequences',
@@ -4510,14 +4510,14 @@ export const DOCS_SECTION_INDEX = [
4510
4510
  title: 'Sequences',
4511
4511
  heading: 'Self-hosted installs',
4512
4512
  anchor: '#self-hosted',
4513
- text: 'A self-hosted install runs Sequences with a Google OAuth client of its own:\n1. Create the OAuth client in Google Cloud and set GOOGLEOUTREACHCLIENTID, GOOGLEOUTREACHCLIENTSECRET and OUTREACHTOKENKEY on the console. Environment variables gives each value, the redirect URI to register and the scopes the grant asks for.\n2. Make the consent screen Internal, on a Google Cloud project owned by your own Google Workspace organization. An Internal screen lets that organization\'s users connect their mailboxes without Google\'s app verification or its security assessment. Only accounts in that Workspace organization can connect; a mailbox outside it would need an External screen, which Google has to verify first.\n3. As a staff account on your install, turn Sequences on for the organization that will use it: grant the Sequences entitlement and the releaseoutreach flag in the entitlement editor, or turn releaseoutreach on for every organization under Feature flags.'
4513
+ text: 'A self-hosted install runs Sequences with a Google OAuth client of its own, a Microsoft Entra app registration of its own, or both:\n1. Create the OAuth client in Google Cloud and set GOOGLEOUTREACHCLIENTID, GOOGLEOUTREACHCLIENTSECRET and OUTREACHTOKENKEY on the console. Environment variables gives each value, the redirect URI to register and the scopes the grant asks for. For Microsoft 365 mailboxes, register the app in Microsoft Entra and set MICROSOFTOUTREACHCLIENTID and MICROSOFTOUTREACHCLIENTSECRET; its section lists the permissions and the redirect URI.\n2. Make the consent screen Internal, on a Google Cloud project owned by your own Google Workspace organization. An Internal screen lets that organization\'s users connect their mailboxes without Google\'s app verification or its security assessment. Only accounts in that Workspace organization can connect; a mailbox outside it would need an External screen, which Google has to verify first.\n3. As a staff account on your install, turn Sequences on for the organization that will use it: grant the Sequences entitlement and the releaseoutreach flag in the entitlement editor, or turn releaseoutreach on for every organization under Feature flags.'
4514
4514
  },
4515
4515
  {
4516
4516
  path: '/content-and-data/crm/sequences',
4517
4517
  title: 'Sequences',
4518
4518
  heading: 'Connect a mailbox',
4519
4519
  anchor: '#connect-a-mailbox',
4520
- text: 'Each rep connects their own Google mailbox in Sequences → Mailboxes:\n1. Select Connect with Google and choose your Google account.\n2. Google asks you to let Aglyn send email on your behalf and read your email. Allow both. Sending is how a sequence\'s messages go out as you; reading is how a reply or a bounce is noticed, so a sequence stops when somebody answers. If either is left unticked, the connection is refused and nothing is saved.\n3. You come back to Mailboxes with the mailbox listed as Active.\nThe access Google grants is stored encrypted and is never shown to anyone, administrators included. Connecting the same Google account again updates the mailbox you already have and keeps its settings. Each member can connect up to five mailboxes.\nIf Mailboxes says the Google account does not have Gmail turned on, the account exists but Gmail is not running for it yet. A Google Workspace user created that day can take up to a day before Gmail is ready; otherwise the Workspace administrator turns Gmail on for the account. Then connect again. Nothing was saved by the attempt that was refused.\nIf Mailboxes says connecting a Google mailbox isn\'t configured, your deployment has no Google OAuth client set up. On a self-hosted install, see Environment variables.\nSend-as address and display name {#send-as}\nA mailbox sends as one address: the account\'s own, or an alias Gmail has already verified for it — one added under Settings → Accounts → Send mail as in Gmail and confirmed there. Only addresses Gmail lists as verified are offered. To use a new alias, add it in Gmail first, then connect the mailbox again so the new alias is seen.\nIf the same address is waiting for verification under Your sending addresses, connecting the mailbox verifies it there too, because Gmail has already con'
4520
+ text: 'Each rep connects their own Google or Microsoft 365 mailbox in Sequences → Mailboxes:\n1. Select Connect with Google or Connect with Microsoft and choose your account.\n2. Google or Microsoft asks you to let Aglyn send email on your behalf and read your email. Allow both. Sending is how a sequence\'s messages go out as you; reading is how a reply or a bounce is noticed, so a sequence stops when somebody answers. If either is left unticked, the connection is refused and nothing is saved.\n3. You come back to Mailboxes with the mailbox listed as Active.\nThe access granted is stored encrypted and is never shown to anyone, administrators included. Connecting the same account again updates the mailbox you already have and keeps its settings. Each member can connect up to ten mailboxes.\nA Microsoft 365 mailbox sends through Microsoft Graph. Each email is written the same way a Google mailbox writes it — the same footer, the same unsubscribe link, the same tracked links — and a follow-up answers the earlier email, so it lands in the same conversation for the person you wrote to. A Microsoft account\'s administrator may need to approve the app for the organization before its members can connect.\nIf Mailboxes says the Google account does not have Gmail turned on, the account exists but Gmail is not running for it yet. A Google Workspace user created that day can take up to a day before Gmail is ready; otherwise the Workspace administrator turns Gmail on for the account. Then connect again. Nothing was saved by the attempt that was refused.\nIf Mailboxes says connecting a Google or Microsoft 365 mailbox isn\'t configured, your deployment has no OAuth client set up for that provider. On a self-hosted install, see Environment variables.\nSend-as address and display name {#send-as}\nA Micros'
4521
4521
  },
4522
4522
  {
4523
4523
  path: '/content-and-data/crm/sequences',
@@ -4531,7 +4531,7 @@ export const DOCS_SECTION_INDEX = [
4531
4531
  title: 'Sequences',
4532
4532
  heading: 'Sequences',
4533
4533
  anchor: '#sequences',
4534
- text: 'A sequence is the emails, and the tasks between them, one person gets from one rep. Sequences → All sequences lists each one with its mailbox, its status, and how many people it has enrolled, and how many of them are still active, replied, bounced or opted out.\nThe list is newest first, a page at a time. The table\'s toolbar filters it. Filters narrows it by Status or Mailbox (pick one or several), by Name (a word in it, or the whole name), or by the day it was Created (on, before or after a date). Search finds a sequence by the start of any word of its name. Every filter and the search are answered by the database across all your sequences, not only the page on screen, and each filter in force shows as a chip above the table; remove a chip to drop its filter. The Filters panel edits one filter at a time, and filters on different columns add up. A combination the database cannot answer at once — a name word together with a search, for example — is named above the table rather than applied to some rows. See Filter and search a list.\nBuild a sequence {#build-a-sequence}\nSelect New sequence, name it, and choose the site whose CRM the people you enroll are contacts of and the mailbox it sends from. A sequence sends as the member who connected its mailbox, so only that member, or an organization owner or admin, can edit or activate it.\nThe Mailbox list offers the mailboxes you connected, and an owner or admin every mailbox in the organization. A disconnected mailbox is never offered. When exactly one of your own mailboxes is active, a new sequence starts on it. With none, connect one first.\nA sequence holds up to eight steps, of which up to four are emails:\n- Email — a subject and a body, or a CRM email template whose body is sent. Insert merge fields — the contact\'s first na'
4534
+ text: 'A sequence is the emails, and the tasks between them, one person gets from one rep. Sequences → All sequences lists each one with its mailbox, its status, and how many people it has enrolled, and how many of them are still active, replied, bounced or opted out.\nThe list is newest first, a page at a time. The table\'s toolbar filters it. Filters narrows it by Status or Mailbox (pick one or several), by Name (a word in it, or the whole name), or by the day it was Created (on, before or after a date). Search finds a sequence by the start of any word of its name. Every filter and the search are answered by the database across all your sequences, not only the page on screen, and each filter in force shows as a chip above the table; remove a chip to drop its filter. The Filters panel edits one filter at a time, and filters on different columns add up. A combination the database cannot answer at once — a name word together with a search, for example — is named above the table rather than applied to some rows. See Filter and search a list.\nBuild a sequence {#build-a-sequence}\nSelect New sequence, name it, and choose the site whose CRM the people you enroll are contacts of and the mailbox it sends from. A sequence sends as the member who connected its mailbox, so only that member, or an organization owner or admin, can edit or activate it.\nThe Mailbox list offers the mailboxes you connected, and an owner or admin every mailbox in the organization. A disconnected mailbox is never offered. When exactly one of your own mailboxes is active, a new sequence starts on it. With none, connect one first.\nAlso send from adds more mailboxes the sequence sends from in rotation — several inboxes set up for outreach, for example, each sending its own daily cap. Each person you enroll is given o'
4535
4535
  },
4536
4536
  {
4537
4537
  path: '/content-and-data/crm/sequences',
@@ -6855,7 +6855,7 @@ export const DOCS_SECTION_INDEX = [
6855
6855
  title: 'Security & compliance',
6856
6856
  heading: 'Contract documents',
6857
6857
  anchor: '#contract-documents',
6858
- text: 'Both are published pages — read them without asking anyone, and send them to your reviewers directly:\n- Data Processing Addendum — the processing terms, including the export and deletion obligations the product implements.\n- Subprocessor list — the authoritative one. The table on Trust & security is the engineering view of the same set and may lag it.\nOne thing that list does not contain, stated here so a reviewer does not have to infer it. It names the parties Aglyn engages. It does not name a host your own authors point at — a hotlinked image, or a url(...) in a stylesheet one of them wrote. Those requests go from your visitor\'s browser to that host directly and Aglyn does not proxy them, so the host is a recipient of your visitors\' data that only you can enumerate and disclose. It is a property of the builder rather than an omission from the register, and it is written up in full at Trust & security.\nNeither of those two is acceptance-pinned, so neither carries a version bump your people have to re-accept when it changes. The Terms of Service and the Privacy Policy are the opposite: each acceptance is pinned to a version and to the exact text published under it, and a new version is put back in front of every user. See below.'
6858
+ text: 'Both are published pages — read them without asking anyone, and send them to your reviewers directly:\n- Data Processing Addendum — the processing terms, including the export and deletion obligations the product implements.\n- Subprocessor list — the authoritative one. The table on Trust & security is the engineering view of the same set and may lag it.\nAI assistance in the CRM sends the whole record. When a member asks AI to summarize a contact, company, deal or lead, or to draft an email from one, the AI provider receives the record as the CRM shows it — every standard and custom field, contact details and postal addresses included, with its notes, timeline and related records — and never a password, a sign-in token, an account identifier or a record\'s internal id. CRM by AI lists it field by field.\nOne thing that list does not contain, stated here so a reviewer does not have to infer it. It names the parties Aglyn engages. It does not name a host your own authors point at — a hotlinked image, or a url(...) in a stylesheet one of them wrote. Those requests go from your visitor\'s browser to that host directly and Aglyn does not proxy them, so the host is a recipient of your visitors\' data that only you can enumerate and disclose. It is a property of the builder rather than an omission from the register, and it is written up in full at Trust & security.\nNeither of those two is acceptance-pinned, so neither carries a version bump your people have to re-accept when it changes. The Terms of Service and the Privacy Policy are the opposite: each acceptance is pinned to a version and to the exact text published under it, and a new version is put back in front of every user. See below.'
6859
6859
  },
6860
6860
  {
6861
6861
  path: '/enterprise/security-and-compliance',