@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.
- package/package.json +11 -11
- package/src/lib/app-utils/advertising-tag-mounts.js +9 -1
- package/src/lib/app-utils/advertising-tag-mounts.js.map +1 -1
- package/src/lib/app-utils/crm.d.ts +33 -5
- package/src/lib/app-utils/crm.js +59 -12
- package/src/lib/app-utils/crm.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.js +9 -9
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/faq-page.d.ts +53 -0
- package/src/lib/app-utils/faq-page.js +265 -0
- package/src/lib/app-utils/faq-page.js.map +1 -0
- package/src/lib/app-utils/health-report.d.ts +10 -1
- package/src/lib/app-utils/health-report.js +12 -2
- package/src/lib/app-utils/health-report.js.map +1 -1
- package/src/lib/app-utils/llms-txt.d.ts +55 -38
- package/src/lib/app-utils/llms-txt.js +135 -6
- package/src/lib/app-utils/llms-txt.js.map +1 -1
- package/src/lib/app-utils/operator-alerts.js +19 -0
- package/src/lib/app-utils/operator-alerts.js.map +1 -1
- package/src/lib/app-utils/page-idle.d.ts +77 -0
- package/src/lib/app-utils/page-idle.js +129 -0
- package/src/lib/app-utils/page-idle.js.map +1 -0
- package/src/lib/app-utils/page-markdown.js +20 -0
- package/src/lib/app-utils/page-markdown.js.map +1 -1
- package/src/lib/app-utils/server.d.ts +1 -0
- package/src/lib/app-utils/server.js +3 -0
- package/src/lib/app-utils/server.js.map +1 -1
- package/src/lib/types/nodes.d.ts +27 -0
- package/src/lib/types/nodes.js.map +1 -1
|
@@ -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
|
|
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
|
|
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
|
|
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.\
|
|
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
|
|
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.\
|
|
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',
|