@aglyn/plugins-ai 1.0.0-beta.288 → 1.0.0-beta.290
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 +17 -17
- package/src/lib/activity/ai-activity-actions.d.ts +3 -2
- package/src/lib/activity/ai-activity-actions.js +3 -0
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-job-requests.d.ts +2 -0
- package/src/lib/components/ai-job-requests.js +2 -0
- package/src/lib/components/ai-job-requests.js.map +1 -1
- package/src/lib/components/ai-site-build-page.component.js +4 -0
- package/src/lib/components/ai-site-build-page.component.js.map +1 -1
- package/src/lib/components/ai-site-import-job.component.d.ts +6 -1
- package/src/lib/components/ai-site-import-job.component.js +124 -17
- package/src/lib/components/ai-site-import-job.component.js.map +1 -1
- package/src/lib/components/ai-site-import-start.component.d.ts +6 -0
- package/src/lib/components/ai-site-import-start.component.js +18 -4
- package/src/lib/components/ai-site-import-start.component.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.js +2 -1
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/jobs/ai-image-reads.d.ts +20 -2
- package/src/lib/jobs/ai-image-reads.js +47 -0
- package/src/lib/jobs/ai-image-reads.js.map +1 -1
- package/src/lib/jobs/ai-job-import-step.d.ts +53 -3
- package/src/lib/jobs/ai-job-import-step.js +386 -64
- package/src/lib/jobs/ai-job-import-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +33 -0
- package/src/lib/jobs/ai-job-layout-language.js +75 -1
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +8 -3
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +29 -0
- package/src/lib/jobs/ai-job-page-language.js +178 -2
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +3 -0
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-site-import-document.d.ts +117 -0
- package/src/lib/jobs/ai-site-import-document.js +710 -0
- package/src/lib/jobs/ai-site-import-document.js.map +1 -0
- package/src/lib/jobs/ai-site-import-look.d.ts +112 -0
- package/src/lib/jobs/ai-site-import-look.js +402 -0
- package/src/lib/jobs/ai-site-import-look.js.map +1 -0
- package/src/lib/jobs/ai-site-import-publish.d.ts +41 -0
- package/src/lib/jobs/ai-site-import-publish.js +92 -0
- package/src/lib/jobs/ai-site-import-publish.js.map +1 -0
- package/src/lib/jobs/ai-theme-brand-inputs.d.ts +27 -2
- package/src/lib/jobs/ai-theme-brand-inputs.js +37 -8
- package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.d.ts +17 -0
- package/src/lib/layout-language/ai-layout-frame.js +73 -2
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +43 -0
- package/src/lib/layout-language/ai-layout-language.js +199 -0
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/model/ai-credit-estimate.d.ts +15 -0
- package/src/lib/model/ai-credit-estimate.js +14 -1
- package/src/lib/model/ai-credit-estimate.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +13 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-site-import-view.d.ts +47 -3
- package/src/lib/model/ai-site-import-view.js +122 -20
- package/src/lib/model/ai-site-import-view.js.map +1 -1
- package/src/lib/model/ai-site-import.d.ts +232 -7
- package/src/lib/model/ai-site-import.js +365 -35
- package/src/lib/model/ai-site-import.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +18 -0
- package/src/lib/runtime/ai-doctrine-validators.js +16 -5
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-palette.generated.js +31 -0
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/server/ai-image-reads-route.js +24 -1
- package/src/lib/server/ai-image-reads-route.js.map +1 -1
- package/src/lib/server/ai-jobs-resume.js +7 -1
- package/src/lib/server/ai-jobs-resume.js.map +1 -1
- package/src/lib/site-import/fixtures/aglyn-com-recordings.d.ts +57 -0
- package/src/lib/site-import/fixtures/aglyn-com-recordings.js +172 -0
- package/src/lib/site-import/fixtures/aglyn-com-recordings.js.map +1 -0
- package/src/lib/site-import/site-import-crawl.d.ts +32 -7
- package/src/lib/site-import/site-import-crawl.js +133 -44
- package/src/lib/site-import/site-import-crawl.js.map +1 -1
- package/src/lib/site-import/site-import-edge-server.d.ts +31 -0
- package/src/lib/site-import/site-import-edge-server.js +31 -0
- package/src/lib/site-import/site-import-edge-server.js.map +1 -0
- package/src/lib/site-import/site-import-edge.d.ts +44 -0
- package/src/lib/site-import/site-import-edge.js +108 -0
- package/src/lib/site-import/site-import-edge.js.map +1 -0
- package/src/lib/site-import/site-import-html.d.ts +73 -3
- package/src/lib/site-import/site-import-html.js +332 -45
- package/src/lib/site-import/site-import-html.js.map +1 -1
- package/src/lib/site-import/site-import-images.d.ts +22 -0
- package/src/lib/site-import/site-import-images.js +78 -2
- package/src/lib/site-import/site-import-images.js.map +1 -1
- package/src/lib/site-import/site-import-page.d.ts +44 -2
- package/src/lib/site-import/site-import-page.js +116 -16
- package/src/lib/site-import/site-import-page.js.map +1 -1
|
@@ -28,20 +28,28 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
28
28
|
* current, the day's limit has room, the plan still has room; the
|
|
29
29
|
* wave's pages are read again, fresh, and a page that became a sign-in
|
|
30
30
|
* page, went away or is now off limits to AglynBot is left out.
|
|
31
|
-
* 3. THE
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* the
|
|
31
|
+
* 3. THE LOOK, in the first wave (no model, AGL-4084): the theme drawn
|
|
32
|
+
* from the owner's own home page, its logo into the library, the site's
|
|
33
|
+
* listing from the home page's own words (`ai-site-import-look.ts`).
|
|
34
|
+
* 4. THE HEADER AND FOOTER, in the first wave: the layout step's own pass,
|
|
35
|
+
* with the source's brand as its header draws it, its own header and
|
|
36
|
+
* footer words as the footer's facts, and the site's menu order.
|
|
37
|
+
* 5. EACH PAGE: its photos into the media library (no model, deduped by
|
|
38
|
+
* source key), then the page step's own passes, NEVER REWRITTEN
|
|
39
|
+
* (AGL-4084, `ai-site-import-document.ts`): a collection's page or a
|
|
40
|
+
* long page is copied as it is, every word in order, with no model; a
|
|
41
|
+
* main page is arranged, the model placing the source's numbered lines
|
|
42
|
+
* and code writing every word as the source has it.
|
|
43
|
+
* 6. CLOSE THE WAVE: its pages go live in the site's preview (AGL-4084,
|
|
44
|
+
* `ai-site-import-publish.ts`), where only its team sees them, and the
|
|
45
|
+
* job waits again until the person starts the next wave, or, where the
|
|
46
|
+
* person chose "Start every remaining wave", starts it. The last wave
|
|
47
|
+
* ends the job.
|
|
39
48
|
*
|
|
40
49
|
* Every page is an item of the job's ledger, so a page that fails on our
|
|
41
50
|
* side gives back its own spend (the machine's `refundBuildCredits`) and the
|
|
42
|
-
* wave goes on. Nothing
|
|
43
|
-
*
|
|
44
|
-
* once the import, behind its ownership proof, has written something.
|
|
51
|
+
* wave goes on. Nothing is ever public by this job: a wave lands only in a
|
|
52
|
+
* site that is in preview, and a site that is not keeps its pages as drafts.
|
|
45
53
|
*=========================================*/ import { resolveEffectivePlan } from "@aglyn/aglyn/app-utils/plan-entitlements";
|
|
46
54
|
import { createResourceUid } from "@aglyn/aglyn/app-utils/create-resource-uid";
|
|
47
55
|
import { pluginMediaIngest } from "@aglyn/aglyn/plugin-manager/plugin-media-ingest";
|
|
@@ -49,17 +57,22 @@ import { listDomainOwnershipClaims, normalizeOwnershipDomain } from "@aglyn/tena
|
|
|
49
57
|
import { getOrgForUser, memberHasOrgPermission } from "@aglyn/tenant-data-admin/server/organizations";
|
|
50
58
|
import { consumeRateLimit } from "@aglyn/tenant-data-admin/server/rate-limit-store";
|
|
51
59
|
import { isServerReleaseFlagOnForOrg } from "@aglyn/tenant-data-admin/server/release-flags";
|
|
52
|
-
import { AI_SITE_IMPORT_DOMAIN_INPUT, AI_SITE_IMPORT_FRAME_SLOT, AI_SITE_IMPORT_LEFT_OUT_COPY, AI_SITE_IMPORT_MAX_PAGES, AI_SITE_IMPORT_MIN_WORDS, AI_SITE_IMPORT_WAVE_PAGES, aiSiteImportInventory, aiSiteImportItemOpen, aiSiteImportLedger, aiSiteImportNextWork, aiSiteImportPageSettled, aiSiteImportPagesRead, aiSiteImportPhotosIn, aiSiteImportWaveClosed, aiSiteImportWaveMessage, aiSiteImportWaveStarted } from "../model/ai-site-import.js";
|
|
60
|
+
import { AI_SITE_IMPORT_DOMAIN_INPUT, AI_SITE_IMPORT_FRAME_SLOT, AI_SITE_IMPORT_LABEL_MAX_CHARS, AI_SITE_IMPORT_LEFT_OUT_COPY, AI_SITE_IMPORT_MAX_PAGES, AI_SITE_IMPORT_MIN_WORDS, AI_SITE_IMPORT_WAVE_PAGES, aiSiteImportInventory, aiSiteImportItemOpen, aiSiteImportLedger, aiSiteImportNextWork, aiSiteImportPageBuild, aiSiteImportPageSettled, aiSiteImportPagesRead, aiSiteImportPhotosIn, aiSiteImportReadStops, aiSiteImportReadVerdict, aiSiteImportReadVerdictMessage, aiSiteImportReadVerdictReason, aiSiteImportWaveClosed, aiSiteImportWaveMessage, aiSiteImportWaveStarted } from "../model/ai-site-import.js";
|
|
53
61
|
import { aiModelForStep } from "../providers/routing.js";
|
|
54
62
|
import { SITE_IMPORT_RELEASE_FLAG } from "../site-import/site-import-flag.js";
|
|
55
63
|
import { crawlSiteForImport } from "../site-import/site-import-crawl.js";
|
|
56
64
|
import { bringInSiteImportPhotos } from "../site-import/site-import-images.js";
|
|
57
|
-
import { siteImportLeftOutReason, siteImportListedPage, siteImportPageRead, siteImportPageWords } from "../site-import/site-import-page.js";
|
|
65
|
+
import { siteImportHeaderBrand, siteImportLabel, siteImportLeftOutReason, siteImportListedPage, siteImportPageRead, siteImportPageWords, siteImportSiteFacts, siteImportSiteName } from "../site-import/site-import-page.js";
|
|
66
|
+
import { aiSiteKindFor } from "../model/ai-site-kinds.js";
|
|
67
|
+
import { AI_LAYOUT_SITE_BRAND_INPUT, AI_LAYOUT_SITE_FACTS_INPUT } from "./ai-job-layout-language.js";
|
|
68
|
+
import { AI_LAYOUT_IMPORTED_SECTIONS_INPUT, aiSiteImportDocLines } from "./ai-site-import-document.js";
|
|
69
|
+
import { aiRunSiteImportLook } from "./ai-site-import-look.js";
|
|
70
|
+
import { aiPublishImportedWave } from "./ai-site-import-publish.js";
|
|
58
71
|
import { fileSiteImportReview } from "../site-import/site-import-review.js";
|
|
59
72
|
import { aiUnitErrorRetryable, aiUnitFailure, aiUnitSpend } from "./ai-build-unit-outcome.js";
|
|
60
73
|
import { registerAiJobAdmission } from "./ai-job-admission.js";
|
|
61
74
|
import { AI_JOB_STEP_OVERHEAD_MS } from "./ai-job-budget.js";
|
|
62
|
-
import { readAiScreenRoom } from "./ai-job-drafts.js";
|
|
75
|
+
import { readAiDraftNodes, readAiScreenRoom } from "./ai-job-drafts.js";
|
|
63
76
|
import { aiUnspentOutcome } from "./ai-job-generation.js";
|
|
64
77
|
import { AI_LAYOUT_PAGE_PHOTOS_INPUT } from "./ai-layout-owner-photos.js";
|
|
65
78
|
import { AI_LAYOUT_SITE_PAGES_INPUT, AI_LAYOUT_SITE_PAGES_MAX } from "./ai-job-layout-site-pages.js";
|
|
@@ -163,9 +176,43 @@ const delivered = (items, slot)=>items.some((row)=>row.slot === slot && (row.sta
|
|
|
163
176
|
...pages.filter((page)=>page.slug !== '/')
|
|
164
177
|
].slice(0, AI_LAYOUT_SITE_PAGES_MAX);
|
|
165
178
|
}
|
|
166
|
-
/**
|
|
167
|
-
|
|
168
|
-
|
|
179
|
+
/**
|
|
180
|
+
* How a page is built (AGL-4084): a collection's page, or a long page, is
|
|
181
|
+
* copied as it is; a main page is arranged. The home page is always
|
|
182
|
+
* arranged, however long: it is the site's front door, never a document.
|
|
183
|
+
*/ export function aiSiteImportBuildOf(page) {
|
|
184
|
+
return page.group === 'main' && page.slug === '/' ? 'arranged' : aiSiteImportPageBuild(page);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* The name the header and footer carry (AGL-4084): the site's own name where
|
|
188
|
+
* it is the name the person gave Create site but for its case or its
|
|
189
|
+
* punctuation, else the person's.
|
|
190
|
+
*/ export function aiSiteImportBrandName(given, own) {
|
|
191
|
+
const key = (text)=>text.toLowerCase().replace(RegExp("[^\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088F\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C8A\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}]+", "gu"), '');
|
|
192
|
+
return own && key(own) && key(own) === key(given) ? own : given;
|
|
193
|
+
}
|
|
194
|
+
/** The design inputs every unit of an import is drawn with: the kind of site its own words say, and its look (AGL-4084). */ function aiSiteImportDesignInputs(state) {
|
|
195
|
+
var _look_style, _look_style1, _look_style2;
|
|
196
|
+
const home = state.home;
|
|
197
|
+
const kind = home ? aiSiteKindFor(`${home.siteName} ${home.description}`) : null;
|
|
198
|
+
const look = state.look;
|
|
199
|
+
return _extends({}, kind ? {
|
|
200
|
+
siteKind: kind.id
|
|
201
|
+
} : {}, look && look.seed !== null ? {
|
|
202
|
+
siteStyle: _extends({
|
|
203
|
+
seed: look.seed
|
|
204
|
+
}, ((_look_style = look.style) == null ? void 0 : _look_style.headerAlign) ? {
|
|
205
|
+
headerAlign: look.style.headerAlign
|
|
206
|
+
} : {}, ((_look_style1 = look.style) == null ? void 0 : _look_style1.rhythm) ? {
|
|
207
|
+
rhythm: look.style.rhythm
|
|
208
|
+
} : {}, ((_look_style2 = look.style) == null ? void 0 : _look_style2.motion) ? {
|
|
209
|
+
motion: look.style.motion
|
|
210
|
+
} : {})
|
|
211
|
+
} : {});
|
|
212
|
+
}
|
|
213
|
+
/** The header and footer's job: a layout of the site's brand, linking the wave's pages, in the layout language. */ export function aiSiteImportFrameJob(job, state, wave, items) {
|
|
214
|
+
var _ref, _state_home, _ref1, _ref2;
|
|
215
|
+
var _state_frame, _state_look;
|
|
169
216
|
const draftId = (_ref = (_state_frame = state.frame) == null ? void 0 : _state_frame.draftId) != null ? _ref : `${job.$id}-${AI_SITE_IMPORT_FRAME_SLOT}`;
|
|
170
217
|
const creation = {
|
|
171
218
|
kind: 'layout',
|
|
@@ -180,6 +227,16 @@ const delivered = (items, slot)=>items.some((row)=>row.slot === slot && (row.sta
|
|
|
180
227
|
],
|
|
181
228
|
id: draftId
|
|
182
229
|
};
|
|
230
|
+
const home = (_state_home = state.home) != null ? _state_home : null;
|
|
231
|
+
const logo = (_ref1 = (_state_look = state.look) == null ? void 0 : _state_look.logo) != null ? _ref1 : null;
|
|
232
|
+
// The brand as the source's header draws it; with no logo in the library, its name.
|
|
233
|
+
const brand = home ? _extends({}, logo && home.brand.kind !== 'name-only' ? {
|
|
234
|
+
logo: {
|
|
235
|
+
src: logo.src
|
|
236
|
+
}
|
|
237
|
+
} : {}, {
|
|
238
|
+
name: !logo || home.brand.kind !== 'logo-only'
|
|
239
|
+
}) : null;
|
|
183
240
|
return _extends({}, job, {
|
|
184
241
|
$id: draftId,
|
|
185
242
|
kind: 'layout',
|
|
@@ -192,22 +249,56 @@ const delivered = (items, slot)=>items.some((row)=>row.slot === slot && (row.sta
|
|
|
192
249
|
creation
|
|
193
250
|
]
|
|
194
251
|
}),
|
|
195
|
-
inputs: {
|
|
252
|
+
inputs: _extends({
|
|
196
253
|
originJobId: job.$id,
|
|
197
|
-
businessName: state.siteName,
|
|
254
|
+
businessName: aiSiteImportBrandName(state.siteName, (_ref2 = home == null ? void 0 : home.siteName) != null ? _ref2 : ''),
|
|
198
255
|
[AI_LAYOUT_LANGUAGE_INPUT]: true,
|
|
199
256
|
[AI_LAYOUT_SITE_PAGES_INPUT]: aiSiteImportLinkedPages(state, items, wave.index)
|
|
200
|
-
},
|
|
201
|
-
|
|
257
|
+
}, aiSiteImportDesignInputs(state), brand ? {
|
|
258
|
+
[AI_LAYOUT_SITE_BRAND_INPUT]: brand
|
|
259
|
+
} : {}, home ? {
|
|
260
|
+
[AI_LAYOUT_SITE_FACTS_INPUT]: {
|
|
261
|
+
url: home.url,
|
|
262
|
+
description: home.description,
|
|
263
|
+
lines: home.facts.lines
|
|
264
|
+
}
|
|
265
|
+
} : {}),
|
|
266
|
+
// Never words a footer could print as the site's own (AGL-4084): the prompt shows the source's.
|
|
267
|
+
brief: `The header and footer of the site “${state.siteName}”.`.slice(0, AI_JOB_BRIEF_MAX_CHARS)
|
|
202
268
|
});
|
|
203
269
|
}
|
|
204
|
-
/**
|
|
205
|
-
var
|
|
206
|
-
var _page_read,
|
|
207
|
-
const
|
|
270
|
+
/** The page brought in, as its page job carries it: its lines, its photos, and the pages its links may go to (AGL-4084). */ export function aiSiteImportDocumentFor(state, page) {
|
|
271
|
+
var _page_build, _ref;
|
|
272
|
+
var _page_read, _page_photos;
|
|
273
|
+
const blocks = (_page_read = page.read) == null ? void 0 : _page_read.blocks;
|
|
274
|
+
if (!(blocks == null ? void 0 : blocks.length)) return null;
|
|
275
|
+
return {
|
|
276
|
+
build: (_page_build = page.build) != null ? _page_build : aiSiteImportBuildOf(page),
|
|
277
|
+
title: page.title,
|
|
278
|
+
url: page.url,
|
|
279
|
+
blocks,
|
|
280
|
+
photos: (_ref = (_page_photos = page.photos) == null ? void 0 : _page_photos.assets) != null ? _ref : [],
|
|
281
|
+
// Home's own links are words: a link home says home, which the source's words may not.
|
|
282
|
+
links: state.pages.filter((entry)=>entry.slug !== '/' && !entry.refused).map((entry)=>({
|
|
283
|
+
path: entry.path.replace(/\/+$/, '') || '/',
|
|
284
|
+
id: entry.draftId
|
|
285
|
+
})),
|
|
286
|
+
origins: [
|
|
287
|
+
`https://${state.domain}`,
|
|
288
|
+
`https://www.${state.domain.replace(/^www\./, '')}`
|
|
289
|
+
]
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/** One page's job: a page job's plan of one screen, its sections the old page's own, its words carried as they are. */ export function aiSiteImportPageJob(job, state, page, items) {
|
|
293
|
+
var _ref, _ref1, _ref2, _ref3;
|
|
294
|
+
var _page_read, _state_home, _page_read1, _page_photos;
|
|
295
|
+
const doc = aiSiteImportDocumentFor(state, page);
|
|
296
|
+
// The page's sections are the source's own (AGL-4084): its opening, then one at each second-level heading.
|
|
297
|
+
const names = doc ? aiSiteImportDocLines(doc.blocks, doc.title).sections.map((section)=>section.name) : (_ref = (_page_read = page.read) == null ? void 0 : _page_read.sections) != null ? _ref : [];
|
|
298
|
+
const sections = (names.length ? names : [
|
|
208
299
|
'Introduction'
|
|
209
300
|
]).map((name)=>({
|
|
210
|
-
name,
|
|
301
|
+
name: name.slice(0, AI_SITE_IMPORT_LABEL_MAX_CHARS),
|
|
211
302
|
uses: [],
|
|
212
303
|
items: 0
|
|
213
304
|
}));
|
|
@@ -241,20 +332,78 @@ const delivered = (items, slot)=>items.some((row)=>row.slot === slot && (row.sta
|
|
|
241
332
|
}),
|
|
242
333
|
inputs: _extends({
|
|
243
334
|
originJobId: job.$id,
|
|
244
|
-
businessName: state.siteName,
|
|
335
|
+
businessName: aiSiteImportBrandName(state.siteName, (_ref1 = (_state_home = state.home) == null ? void 0 : _state_home.siteName) != null ? _ref1 : ''),
|
|
245
336
|
[AI_LAYOUT_LANGUAGE_INPUT]: true,
|
|
246
|
-
[AI_LAYOUT_SITE_PAGES_INPUT]: aiSiteImportLinkedPages(state, items, page.wave)
|
|
337
|
+
[AI_LAYOUT_SITE_PAGES_INPUT]: aiSiteImportLinkedPages(state, items, page.wave)
|
|
338
|
+
}, aiSiteImportDesignInputs(state), doc ? {
|
|
339
|
+
[AI_LAYOUT_IMPORTED_SECTIONS_INPUT]: doc
|
|
340
|
+
} : {
|
|
247
341
|
[AI_LAYOUT_IMPORTED_PAGE_INPUT]: {
|
|
248
342
|
url: page.url,
|
|
249
|
-
text: (
|
|
250
|
-
}
|
|
251
|
-
|
|
343
|
+
text: (_ref2 = (_page_read1 = page.read) == null ? void 0 : _page_read1.text) != null ? _ref2 : ''
|
|
344
|
+
}
|
|
345
|
+
}, {
|
|
346
|
+
[AI_LAYOUT_PAGE_PHOTOS_INPUT]: (_ref3 = (_page_photos = page.photos) == null ? void 0 : _page_photos.assets) != null ? _ref3 : []
|
|
252
347
|
}, others.length ? {
|
|
253
348
|
[AI_STOCK_PHOTO_PAGES_INPUT]: others
|
|
254
349
|
} : {}),
|
|
255
350
|
brief: `Bring in the page “${page.title}” of ${state.domain} as a page of “${state.siteName}”.`.slice(0, AI_JOB_BRIEF_MAX_CHARS)
|
|
256
351
|
});
|
|
257
352
|
}
|
|
353
|
+
/** What the home page says of the site as a whole (AGL-4084), kept for the look, the header and footer and the listing. */ export function aiSiteImportHomeOf(crawled) {
|
|
354
|
+
var _crawled_pages_find, _page_title, _page_description, _page_ogImage, _ref;
|
|
355
|
+
var _facts_organization;
|
|
356
|
+
const page = (_crawled_pages_find = crawled.pages.find((entry)=>entry.foundBy === 'home')) != null ? _crawled_pages_find : crawled.pages.find((entry)=>(entry.path.replace(/\/+$/, '') || '/') === '/');
|
|
357
|
+
if (!page) return null;
|
|
358
|
+
const brand = siteImportHeaderBrand(page);
|
|
359
|
+
const facts = siteImportSiteFacts(page);
|
|
360
|
+
const lines = [];
|
|
361
|
+
let chars = 0;
|
|
362
|
+
for (const block of [
|
|
363
|
+
...facts.header,
|
|
364
|
+
...facts.footer
|
|
365
|
+
]){
|
|
366
|
+
if (block.kind === 'image' || block.kind === 'link' && block.inline) continue;
|
|
367
|
+
const text = block.text.replace(/\s+/g, ' ').trim();
|
|
368
|
+
const line = block.kind === 'link' && /^(?:mailto|tel):/i.test(block.href) ? text : block.kind === 'link' && facts.social.includes(block.href) ? `${text}: ${block.href}` : text;
|
|
369
|
+
if (!line || lines.includes(line) || chars + line.length > 3000 || lines.length >= 60) continue;
|
|
370
|
+
lines.push(line);
|
|
371
|
+
chars += line.length;
|
|
372
|
+
}
|
|
373
|
+
// And what the site states of itself in its structured data, as written: its address, phone and email.
|
|
374
|
+
const organization = facts.organization;
|
|
375
|
+
for (const line of [
|
|
376
|
+
organization == null ? void 0 : organization.address,
|
|
377
|
+
organization == null ? void 0 : organization.telephone,
|
|
378
|
+
organization == null ? void 0 : organization.email
|
|
379
|
+
]){
|
|
380
|
+
const text = (line != null ? line : '').replace(/\s+/g, ' ').trim();
|
|
381
|
+
if (text && !lines.some((entry)=>entry.includes(text))) lines.push(text);
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
url: page.url,
|
|
385
|
+
title: siteImportLabel((_page_title = page.title) != null ? _page_title : '', 160),
|
|
386
|
+
description: siteImportLabel((_page_description = page.description) != null ? _page_description : '', 320),
|
|
387
|
+
ogImage: (_page_ogImage = page.ogImage) != null ? _page_ogImage : null,
|
|
388
|
+
siteName: siteImportSiteName(page),
|
|
389
|
+
brand: {
|
|
390
|
+
kind: brand.kind,
|
|
391
|
+
text: brand.text,
|
|
392
|
+
logo: brand.logo ? {
|
|
393
|
+
url: brand.logo.url,
|
|
394
|
+
alt: brand.logo.alt,
|
|
395
|
+
type: brand.logo.type
|
|
396
|
+
} : null
|
|
397
|
+
},
|
|
398
|
+
facts: {
|
|
399
|
+
lines,
|
|
400
|
+
emails: facts.emails,
|
|
401
|
+
phones: facts.phones,
|
|
402
|
+
social: facts.social,
|
|
403
|
+
address: (_ref = (_facts_organization = facts.organization) == null ? void 0 : _facts_organization.address) != null ? _ref : ''
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
}
|
|
258
407
|
/** The least time the import's next pass needs: a read's, a photo pass's, or the time of the step its unit is handed to. */ export function aiSiteImportRunMinimumMs(job, runnerFor = aiJobStepRunnerFor) {
|
|
259
408
|
var _job_siteImport, _job_items;
|
|
260
409
|
const state = (_job_siteImport = job.siteImport) != null ? _job_siteImport : null;
|
|
@@ -292,12 +441,65 @@ const delivered = (items, slot)=>items.some((row)=>row.slot === slot && (row.sta
|
|
|
292
441
|
}) : row;
|
|
293
442
|
});
|
|
294
443
|
}
|
|
444
|
+
/**
|
|
445
|
+
* The state with how each page is built (AGL-4084): from its main region's
|
|
446
|
+
* words as the inventory listed them, and again from a wave's fresh read,
|
|
447
|
+
* which is what the page is built from.
|
|
448
|
+
*/ export function aiSiteImportWithBuilds(state, mainWords) {
|
|
449
|
+
return _extends({}, state, {
|
|
450
|
+
pages: state.pages.map((page)=>{
|
|
451
|
+
var _ref, _ref1;
|
|
452
|
+
var _page_read;
|
|
453
|
+
const words = (_ref = (_ref1 = (_page_read = page.read) == null ? void 0 : _page_read.words) != null ? _ref1 : mainWords == null ? void 0 : mainWords.get(page.url)) != null ? _ref : page.words;
|
|
454
|
+
const build = aiSiteImportBuildOf(_extends({}, page, {
|
|
455
|
+
words
|
|
456
|
+
}));
|
|
457
|
+
return page.build === build ? page : _extends({}, page, {
|
|
458
|
+
build
|
|
459
|
+
});
|
|
460
|
+
})
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
/** The words a stored page shows (AGL-4084): its text, its list lines and its buttons. */ export function aiSiteImportShownWords(nodes) {
|
|
464
|
+
let words = 0;
|
|
465
|
+
for (const node of Object.values(nodes)){
|
|
466
|
+
var _ref;
|
|
467
|
+
const props = (_ref = node == null ? void 0 : node.props) != null ? _ref : {};
|
|
468
|
+
for (const key of [
|
|
469
|
+
'children',
|
|
470
|
+
'primary',
|
|
471
|
+
'secondary'
|
|
472
|
+
]){
|
|
473
|
+
var _value_match;
|
|
474
|
+
const value = props[key];
|
|
475
|
+
if (typeof value === 'string') words += ((_value_match = value.match(RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088F\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C8A\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}]+", "gu"))) != null ? _value_match : []).length;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
return words;
|
|
479
|
+
}
|
|
480
|
+
async function readDraftWords(firestore, hostId, draftId) {
|
|
481
|
+
const stored = await readAiDraftNodes(firestore, {
|
|
482
|
+
kind: 'screen',
|
|
483
|
+
hostId,
|
|
484
|
+
id: draftId
|
|
485
|
+
});
|
|
486
|
+
return stored ? aiSiteImportShownWords(stored.nodes) : null;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* The review a wave that went live in the site's preview parks on (AGL-4084):
|
|
490
|
+
* where its pages are now, who sees them, and the next wave's start.
|
|
491
|
+
*/ export function aiSiteImportPreviewMessage(state, wave, published) {
|
|
492
|
+
const pages = `${published.toLocaleString('en-US')} ${published === 1 ? 'page is' : 'pages are'}`;
|
|
493
|
+
const lead = `${wave.label} is in your site’s preview: ${pages} on your site, where only you and your team can see ${published === 1 ? 'it' : 'them'}.`;
|
|
494
|
+
const next = state.waves.find((entry)=>entry.status === 'waiting');
|
|
495
|
+
return next ? `${lead} Start ${next.label} when you are ready.` : lead;
|
|
496
|
+
}
|
|
295
497
|
/** Whether every row of the wave is settled, its header and footer included. */ function waveSettled(state, wave, items) {
|
|
296
498
|
if (wave.frame && state.frame && aiSiteImportItemOpen(items, AI_SITE_IMPORT_FRAME_SLOT)) return false;
|
|
297
499
|
return wave.slots.every((slot)=>!aiSiteImportItemOpen(items, slot));
|
|
298
500
|
}
|
|
299
501
|
export function createAiJobImportStep(deps = {}) {
|
|
300
|
-
var _deps_crawl, _deps_runnerFor, _deps_ownership, _deps_rateLimit, _deps_releaseFlagOn, _deps_ingest, _deps_readRoom, _deps_readSiteName, _deps_fileReview, _deps_pageWritten, _deps_mintId, _deps_clock;
|
|
502
|
+
var _deps_crawl, _deps_runnerFor, _deps_ownership, _deps_rateLimit, _deps_releaseFlagOn, _deps_ingest, _deps_readRoom, _deps_readSiteName, _deps_fileReview, _deps_pageWritten, _deps_mintId, _deps_clock, _deps_look, _deps_publishWave, _deps_draftWords;
|
|
301
503
|
const crawl = (_deps_crawl = deps.crawl) != null ? _deps_crawl : crawlSiteForImport;
|
|
302
504
|
const runnerFor = (_deps_runnerFor = deps.runnerFor) != null ? _deps_runnerFor : aiJobStepRunnerFor;
|
|
303
505
|
const ownershipOf = (_deps_ownership = deps.ownership) != null ? _deps_ownership : readOwnership;
|
|
@@ -310,8 +512,12 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
310
512
|
const pageWritten = (_deps_pageWritten = deps.pageWritten) != null ? _deps_pageWritten : aiSitePageWritten;
|
|
311
513
|
const mintId = (_deps_mintId = deps.mintId) != null ? _deps_mintId : createResourceUid;
|
|
312
514
|
const clock = (_deps_clock = deps.clock) != null ? _deps_clock : Date.now;
|
|
515
|
+
const runLook = (_deps_look = deps.look) != null ? _deps_look : aiRunSiteImportLook;
|
|
516
|
+
const publishWave = (_deps_publishWave = deps.publishWave) != null ? _deps_publishWave : aiPublishImportedWave;
|
|
517
|
+
const draftWordsOf = (_deps_draftWords = deps.draftWords) != null ? _deps_draftWords : readDraftWords;
|
|
313
518
|
return async (context)=>{
|
|
314
519
|
var _job_siteImport, _job_items;
|
|
520
|
+
var _state_waves_;
|
|
315
521
|
const { job, firestore, now, signal } = context;
|
|
316
522
|
const model = aiModelForStep('job.page');
|
|
317
523
|
const unspent = (rest = {})=>_extends({}, aiUnspentOutcome(model), rest);
|
|
@@ -345,16 +551,51 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
345
551
|
continue: true
|
|
346
552
|
});
|
|
347
553
|
const closed = aiSiteImportWaveClosed(next, wave.index, nowIso);
|
|
554
|
+
// The wave's pages go live in the site's preview, where only its team sees them (AGL-4084).
|
|
555
|
+
let sitePublish = null;
|
|
556
|
+
try {
|
|
557
|
+
var _job_outputs, _outcome_outputs;
|
|
558
|
+
sitePublish = await publishWave(firestore, {
|
|
559
|
+
job,
|
|
560
|
+
state: closed,
|
|
561
|
+
wave,
|
|
562
|
+
items: ledger,
|
|
563
|
+
outputs: [
|
|
564
|
+
...(_job_outputs = job.outputs) != null ? _job_outputs : [],
|
|
565
|
+
...(_outcome_outputs = outcome.outputs) != null ? _outcome_outputs : []
|
|
566
|
+
],
|
|
567
|
+
now
|
|
568
|
+
});
|
|
569
|
+
} catch (error) {
|
|
570
|
+
// A publish that failed leaves the pages drafts; the wave is still in.
|
|
571
|
+
console.error('ai site import: a wave could not be published into the preview', {
|
|
572
|
+
orgId: job.orgId,
|
|
573
|
+
jobId: job.$id,
|
|
574
|
+
wave: wave.index,
|
|
575
|
+
error
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
const published = sitePublish ? {
|
|
579
|
+
sitePublish
|
|
580
|
+
} : {};
|
|
348
581
|
await review('wave-finished', closed, ledger, wave.index);
|
|
349
582
|
const waiting = ((_closed_waves_find = closed.waves.find((entry)=>entry.index === wave.index)) == null ? void 0 : _closed_waves_find.status) === 'review';
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
583
|
+
if (waiting) {
|
|
584
|
+
const message = (sitePublish == null ? void 0 : sitePublish.published.length) ? aiSiteImportPreviewMessage(closed, wave, sitePublish.published.length) : aiSiteImportWaveMessage(closed, ledger);
|
|
585
|
+
return _extends({}, outcome, published, {
|
|
586
|
+
siteImport: closed,
|
|
587
|
+
review: waveReview(message)
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
// "Start every remaining wave" (AGL-4083): the next wave starts with no review between them.
|
|
591
|
+
const more = closed.autoContinue === true && closed.waves.some((entry)=>entry.status === 'waiting');
|
|
592
|
+
return _extends({}, outcome, published, {
|
|
354
593
|
siteImport: closed
|
|
355
|
-
}
|
|
594
|
+
}, more ? {
|
|
595
|
+
continue: true
|
|
596
|
+
} : {});
|
|
356
597
|
};
|
|
357
|
-
/** The proof, the flag and the day's limit, asked before anything is read. */ const gate = async ()=>{
|
|
598
|
+
/** The proof, the flag and the day's limit, asked before anything is read. */ const gate = async (counted = true)=>{
|
|
358
599
|
if (!await flagOn(job.orgId)) return unspent({
|
|
359
600
|
review: waveReview(AI_SITE_IMPORT_COPY.unavailable)
|
|
360
601
|
});
|
|
@@ -368,17 +609,19 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
368
609
|
}
|
|
369
610
|
});
|
|
370
611
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
612
|
+
if (counted) {
|
|
613
|
+
const window = await rateLimit(siteImportRateKey(job.orgId), {
|
|
614
|
+
limit: SITE_IMPORT_WAVES_PER_ORG_PER_DAY,
|
|
615
|
+
windowMs: DAY_MS
|
|
616
|
+
});
|
|
617
|
+
if (!window.allowed) return unspent({
|
|
618
|
+
review: {
|
|
619
|
+
reason: 'limit',
|
|
620
|
+
message: AI_SITE_IMPORT_COPY.limit,
|
|
621
|
+
findings: []
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
}
|
|
382
625
|
return {
|
|
383
626
|
ownership
|
|
384
627
|
};
|
|
@@ -412,13 +655,8 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
412
655
|
url: entry.url,
|
|
413
656
|
reason: siteImportLeftOutReason(entry.reason, entry.status)
|
|
414
657
|
}));
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
const blocked = skipped.some((entry)=>entry.reason === 'blocked');
|
|
418
|
-
return unspent({
|
|
419
|
-
review: waveReview(AI_SITE_IMPORT_COPY[blocked ? 'blocked' : 'nothing'](domain))
|
|
420
|
-
});
|
|
421
|
-
}
|
|
658
|
+
// Home first (AGL-4083): a site read without its home page plans nothing, quotes nothing and spends nothing.
|
|
659
|
+
const verdict = aiSiteImportReadVerdict(crawled);
|
|
422
660
|
const inventory = aiSiteImportInventory({
|
|
423
661
|
domain,
|
|
424
662
|
siteName: await siteNameOf(firestore, hostId),
|
|
@@ -435,11 +673,36 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
435
673
|
stoppedBy: crawled.stoppedBy,
|
|
436
674
|
pageLimit: room.limit,
|
|
437
675
|
existingPages: room.used,
|
|
676
|
+
verdict,
|
|
438
677
|
mintId
|
|
439
678
|
});
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
679
|
+
if (aiSiteImportReadStops(inventory.verdict)) {
|
|
680
|
+
var _aiSiteImportReadVerdictReason, _aiSiteImportReadVerdictMessage;
|
|
681
|
+
// Check again is the read again: the job waits, with why and what to do, and no ledger.
|
|
682
|
+
return unspent({
|
|
683
|
+
items: [],
|
|
684
|
+
siteImport: inventory,
|
|
685
|
+
review: {
|
|
686
|
+
reason: (_aiSiteImportReadVerdictReason = aiSiteImportReadVerdictReason(inventory.verdict)) != null ? _aiSiteImportReadVerdictReason : 'unreadable',
|
|
687
|
+
message: (_aiSiteImportReadVerdictMessage = aiSiteImportReadVerdictMessage(inventory.verdict, domain)) != null ? _aiSiteImportReadVerdictMessage : AI_SITE_IMPORT_COPY.nothing(domain),
|
|
688
|
+
findings: []
|
|
689
|
+
}
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
// How each page is built, from its main region's own words (AGL-4084), and what the home page says of the site.
|
|
693
|
+
const mainWords = new Map(crawled.pages.map((page)=>[
|
|
694
|
+
page.url,
|
|
695
|
+
siteImportPageWords({
|
|
696
|
+
title: '',
|
|
697
|
+
blocks: page.blocks.filter((block)=>block.region === 'main')
|
|
698
|
+
})
|
|
699
|
+
]));
|
|
700
|
+
const planned = _extends({}, aiSiteImportWithBuilds(inventory, mainWords), {
|
|
701
|
+
home: aiSiteImportHomeOf(crawled)
|
|
702
|
+
});
|
|
703
|
+
const ledger = aiSiteImportLedger(planned);
|
|
704
|
+
const reviewId = await review('read', planned, ledger);
|
|
705
|
+
const next = _extends({}, planned, {
|
|
443
706
|
reviewId
|
|
444
707
|
});
|
|
445
708
|
return unspent({
|
|
@@ -455,7 +718,9 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
455
718
|
// ── 2. Start a wave ──
|
|
456
719
|
if (work.kind === 'start-wave') {
|
|
457
720
|
var _context_org1;
|
|
458
|
-
|
|
721
|
+
// A wave "Start every remaining wave" started after the one the person did is that same start.
|
|
722
|
+
const counted = !(state.autoContinue && typeof state.autoContinueFrom === 'number' && work.wave.index > state.autoContinueFrom);
|
|
723
|
+
const passed = await gate(counted);
|
|
459
724
|
if (!('ownership' in passed)) return passed;
|
|
460
725
|
const wave = work.wave;
|
|
461
726
|
const pages = wave.slots.map((slot)=>state.pages.find((page)=>page.slot === slot)).filter((page)=>!!page);
|
|
@@ -505,7 +770,7 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
505
770
|
note: 'Not built: no page of this wave could be read.'
|
|
506
771
|
}) : row);
|
|
507
772
|
}
|
|
508
|
-
const started = aiSiteImportWaveStarted(state, wave.index, nowIso, reads);
|
|
773
|
+
const started = aiSiteImportWithBuilds(aiSiteImportWaveStarted(state, wave.index, nowIso, reads));
|
|
509
774
|
await review('wave-started', started, ledger, wave.index);
|
|
510
775
|
const running = started.waves.find((entry)=>entry.index === wave.index);
|
|
511
776
|
return closing(started, ledger, running, unspent({
|
|
@@ -530,11 +795,40 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
530
795
|
cutShort: crawled.stoppedBy === 'time'
|
|
531
796
|
});
|
|
532
797
|
const ledger = withLeftOutRows(items, reads);
|
|
533
|
-
return closing(aiSiteImportPagesRead(state, reads), ledger, wave, unspent({
|
|
798
|
+
return closing(aiSiteImportWithBuilds(aiSiteImportPagesRead(state, reads)), ledger, wave, unspent({
|
|
534
799
|
items: ledger
|
|
535
800
|
}));
|
|
536
801
|
}
|
|
537
|
-
// ── 3. The
|
|
802
|
+
// ── 3. The look, before anything of the first wave is built (AGL-4084): no model ──
|
|
803
|
+
const firstWave = ((_state_waves_ = state.waves[0]) == null ? void 0 : _state_waves_.index) === wave.index;
|
|
804
|
+
if (firstWave && !state.look && state.home && (work.kind === 'frame' || work.kind === 'images' || work.kind === 'page')) {
|
|
805
|
+
var _deps_crawlSeams, _deps_crawlSeams1;
|
|
806
|
+
const look = await runLook(_extends({
|
|
807
|
+
firestore,
|
|
808
|
+
hostId,
|
|
809
|
+
orgId: job.orgId,
|
|
810
|
+
uid: job.createdBy,
|
|
811
|
+
jobId: job.$id,
|
|
812
|
+
domain,
|
|
813
|
+
home: state.home,
|
|
814
|
+
at: nowIso
|
|
815
|
+
}, signal ? {
|
|
816
|
+
signal
|
|
817
|
+
} : {}), _extends({
|
|
818
|
+
ingest: ingestOf()
|
|
819
|
+
}, ((_deps_crawlSeams = deps.crawlSeams) == null ? void 0 : _deps_crawlSeams.fetch) ? {
|
|
820
|
+
fetch: deps.crawlSeams.fetch
|
|
821
|
+
} : {}, ((_deps_crawlSeams1 = deps.crawlSeams) == null ? void 0 : _deps_crawlSeams1.headersFor) ? {
|
|
822
|
+
headersFor: deps.crawlSeams.headersFor
|
|
823
|
+
} : {}, deps.lookDeps));
|
|
824
|
+
return unspent({
|
|
825
|
+
siteImport: _extends({}, state, {
|
|
826
|
+
look
|
|
827
|
+
}),
|
|
828
|
+
continue: true
|
|
829
|
+
});
|
|
830
|
+
}
|
|
831
|
+
// ── 4. The header and footer ──
|
|
538
832
|
if (work.kind === 'frame') {
|
|
539
833
|
const runner = runnerFor('layout');
|
|
540
834
|
if (!runner) {
|
|
@@ -672,7 +966,19 @@ export function createAiJobImportStep(deps = {}) {
|
|
|
672
966
|
outputs: spent.outputs.map((output)=>output.id)
|
|
673
967
|
};
|
|
674
968
|
}
|
|
675
|
-
|
|
969
|
+
// What came through, for the row that says it beside what the old page had (AGL-4084).
|
|
970
|
+
let withBrought = current;
|
|
971
|
+
if (page && item.status === 'succeeded') {
|
|
972
|
+
const words = await draftWordsOf(firestore, hostId, page.draftId).catch(()=>null);
|
|
973
|
+
if (words !== null) withBrought = _extends({}, current, {
|
|
974
|
+
pages: current.pages.map((entry)=>entry.slot === slot ? _extends({}, entry, {
|
|
975
|
+
brought: {
|
|
976
|
+
words
|
|
977
|
+
}
|
|
978
|
+
}) : entry)
|
|
979
|
+
});
|
|
980
|
+
}
|
|
981
|
+
const settledState = page ? aiSiteImportPageSettled(withBrought, slot) : withBrought;
|
|
676
982
|
return closing(settledState, aiApplyJobItemRecord(items, item, 0, now), wave, _extends({}, spent, {
|
|
677
983
|
outputs: item.status === 'succeeded' ? spent.outputs : [],
|
|
678
984
|
item
|
|
@@ -751,6 +1057,22 @@ function siteImportReadOrEmpty(page, at) {
|
|
|
751
1057
|
if (siteImportPageWords(page) < AI_SITE_IMPORT_MIN_WORDS && !page.images.length) return 'empty';
|
|
752
1058
|
return siteImportPageRead(page, at);
|
|
753
1059
|
}
|
|
1060
|
+
/**
|
|
1061
|
+
* "Start every remaining wave" (AGL-4083, wired by AGL-4084), as the resume
|
|
1062
|
+
* door writes it onto an import waiting to start its next wave: every
|
|
1063
|
+
* remaining wave starts after the one before it closes, with no review
|
|
1064
|
+
* between them, and the person's one start is the one the day's limit
|
|
1065
|
+
* counts. `null` when the job is not an import waiting for a wave.
|
|
1066
|
+
*/ export function aiSiteImportStartAllUpdate(job) {
|
|
1067
|
+
var _job_review, _job_siteImport;
|
|
1068
|
+
if (job.kind !== 'import' || job.status !== 'needs_review' || ((_job_review = job.review) == null ? void 0 : _job_review.reason) !== 'wave') return null;
|
|
1069
|
+
const next = (_job_siteImport = job.siteImport) == null ? void 0 : _job_siteImport.waves.find((wave)=>wave.status === 'waiting');
|
|
1070
|
+
if (!next) return null;
|
|
1071
|
+
return {
|
|
1072
|
+
'siteImport.autoContinue': true,
|
|
1073
|
+
'siteImport.autoContinueFrom': next.index
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
754
1076
|
/**
|
|
755
1077
|
* What an import asks before it exists and before each wave (AGL-3976): the
|
|
756
1078
|
* release flag, a site to bring it into, a paid plan, the owner or an admin,
|