@aglyn/plugins-ai 1.0.0-beta.271 → 1.0.0-beta.272
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 +4 -3
- 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-site-build-page.component.js +18 -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 +41 -0
- package/src/lib/components/ai-site-import-job.component.js +707 -0
- package/src/lib/components/ai-site-import-job.component.js.map +1 -0
- package/src/lib/components/ai-site-import-start.component.d.ts +64 -0
- package/src/lib/components/ai-site-import-start.component.js +335 -0
- package/src/lib/components/ai-site-import-start.component.js.map +1 -0
- package/src/lib/components/ai-site-ownership-proof.component.d.ts +42 -0
- package/src/lib/components/ai-site-ownership-proof.component.js +353 -0
- package/src/lib/components/ai-site-ownership-proof.component.js.map +1 -0
- package/src/lib/components/ai-site-start-card.component.js +165 -91
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/jobs/ai-job-drafts.d.ts +14 -0
- package/src/lib/jobs/ai-job-drafts.js +24 -0
- package/src/lib/jobs/ai-job-drafts.js.map +1 -1
- package/src/lib/jobs/ai-job-import-step.d.ts +136 -0
- package/src/lib/jobs/ai-job-import-step.js +809 -0
- package/src/lib/jobs/ai-job-import-step.js.map +1 -0
- package/src/lib/jobs/ai-job-page-language.d.ts +39 -1
- package/src/lib/jobs/ai-job-page-language.js +62 -4
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.d.ts +2 -2
- package/src/lib/jobs/ai-job-page-step.js +5 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-text-step.d.ts +7 -0
- package/src/lib/jobs/ai-job-text-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs.d.ts +5 -0
- package/src/lib/jobs/ai-jobs.js +15 -3
- package/src/lib/jobs/ai-jobs.js.map +1 -1
- package/src/lib/jobs/ai-layout-owner-photos.d.ts +16 -1
- package/src/lib/jobs/ai-layout-owner-photos.js +47 -0
- package/src/lib/jobs/ai-layout-owner-photos.js.map +1 -1
- package/src/lib/jobs/ai-theme-brand-inputs.d.ts +61 -3
- package/src/lib/jobs/ai-theme-brand-inputs.js +117 -27
- package/src/lib/jobs/ai-theme-brand-inputs.js.map +1 -1
- package/src/lib/model/ai-credit-estimate.d.ts +20 -0
- package/src/lib/model/ai-credit-estimate.js +13 -0
- package/src/lib/model/ai-credit-estimate.js.map +1 -1
- package/src/lib/model/ai-job-activity.d.ts +2 -2
- package/src/lib/model/ai-job-activity.js +6 -4
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-job-notice.js +18 -4
- package/src/lib/model/ai-job-notice.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +29 -2
- package/src/lib/model/ai-jobs.types.js +2 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-site-import-view.d.ts +130 -0
- package/src/lib/model/ai-site-import-view.js +182 -0
- package/src/lib/model/ai-site-import-view.js.map +1 -0
- package/src/lib/model/ai-site-import.d.ts +302 -0
- package/src/lib/model/ai-site-import.js +526 -0
- package/src/lib/model/ai-site-import.js.map +1 -0
- package/src/lib/model/ai-site-start.d.ts +22 -9
- package/src/lib/model/ai-site-start.js +64 -23
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/server/ai-jobs-route.js +11 -0
- package/src/lib/server/ai-jobs-route.js.map +1 -1
- package/src/lib/server/ai-site-import-route.d.ts +89 -0
- package/src/lib/server/ai-site-import-route.js +356 -0
- package/src/lib/server/ai-site-import-route.js.map +1 -0
- package/src/lib/server.js +14 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/site-import/fixtures/site-import-crawl-recordings.d.ts +45 -0
- package/src/lib/site-import/fixtures/site-import-crawl-recordings.js +313 -0
- package/src/lib/site-import/fixtures/site-import-crawl-recordings.js.map +1 -0
- package/src/lib/site-import/fixtures/site-import-wave-recordings.d.ts +50 -0
- package/src/lib/site-import/fixtures/site-import-wave-recordings.js +217 -0
- package/src/lib/site-import/fixtures/site-import-wave-recordings.js.map +1 -0
- package/src/lib/site-import/site-import-crawl.d.ts +163 -0
- package/src/lib/site-import/site-import-crawl.js +467 -0
- package/src/lib/site-import/site-import-crawl.js.map +1 -0
- package/src/lib/site-import/site-import-flag.d.ts +23 -0
- package/src/lib/site-import/site-import-flag.js +23 -0
- package/src/lib/site-import/site-import-flag.js.map +1 -0
- package/src/lib/site-import/site-import-html.d.ts +94 -0
- package/src/lib/site-import/site-import-html.js +462 -0
- package/src/lib/site-import/site-import-html.js.map +1 -0
- package/src/lib/site-import/site-import-images.d.ts +54 -0
- package/src/lib/site-import/site-import-images.js +204 -0
- package/src/lib/site-import/site-import-images.js.map +1 -0
- package/src/lib/site-import/site-import-page.d.ts +48 -0
- package/src/lib/site-import/site-import-page.js +150 -0
- package/src/lib/site-import/site-import-page.js.map +1 -0
- package/src/lib/site-import/site-import-review.d.ts +40 -0
- package/src/lib/site-import/site-import-review.js +149 -0
- package/src/lib/site-import/site-import-review.js.map +1 -0
- package/src/lib/site-import/site-import-robots.d.ts +52 -0
- package/src/lib/site-import/site-import-robots.js +126 -0
- package/src/lib/site-import/site-import-robots.js.map +1 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { type AiCreditRange } from './ai-credit-estimate';
|
|
18
|
+
import type { AiJobItemLedger } from './ai-jobs.types';
|
|
19
|
+
/** The job kind. */
|
|
20
|
+
export declare const AI_SITE_IMPORT_KIND: "import";
|
|
21
|
+
/** The input naming the proved domain the job brings in. */
|
|
22
|
+
export declare const AI_SITE_IMPORT_DOMAIN_INPUT = "domain";
|
|
23
|
+
/** The most pages one wave brings in. */
|
|
24
|
+
export declare const AI_SITE_IMPORT_WAVE_PAGES = 10;
|
|
25
|
+
/**
|
|
26
|
+
* The most pages one import reads, whatever the plan allows: an unlimited
|
|
27
|
+
* plan is still one crawl's worth, and the crawl's own time budget may stop
|
|
28
|
+
* sooner (the inventory then says so).
|
|
29
|
+
*/
|
|
30
|
+
export declare const AI_SITE_IMPORT_MAX_PAGES = 200;
|
|
31
|
+
/** The fewest pages under one address prefix that make it a collection. */
|
|
32
|
+
export declare const AI_SITE_IMPORT_COLLECTION_MIN = 3;
|
|
33
|
+
/** The most photos brought in from one page. */
|
|
34
|
+
export declare const AI_SITE_IMPORT_IMAGES_PER_PAGE = 8;
|
|
35
|
+
/** The most characters of one page's text a wave keeps for its model answer. */
|
|
36
|
+
export declare const AI_SITE_IMPORT_PAGE_TEXT_MAX_CHARS = 6000;
|
|
37
|
+
/** The most sections one imported page is planned with. */
|
|
38
|
+
export declare const AI_SITE_IMPORT_MAX_SECTIONS = 6;
|
|
39
|
+
/** The most characters a section's name, a page's title or a label keeps. */
|
|
40
|
+
export declare const AI_SITE_IMPORT_LABEL_MAX_CHARS = 60;
|
|
41
|
+
/** A page with fewer words than this and no photo has nothing to bring in. */
|
|
42
|
+
export declare const AI_SITE_IMPORT_MIN_WORDS = 5;
|
|
43
|
+
/** The item ledger slot of the site's header and footer. */
|
|
44
|
+
export declare const AI_SITE_IMPORT_FRAME_SLOT = "frame";
|
|
45
|
+
/** The ceiling one imported page reserves: its answer pass and its listing pass, at 50 each. */
|
|
46
|
+
export declare const AI_SITE_IMPORT_PAGE_CEILING_CREDITS = 100;
|
|
47
|
+
/** The ceiling the header and footer reserve: one answer at 50. */
|
|
48
|
+
export declare const AI_SITE_IMPORT_FRAME_CEILING_CREDITS = 50;
|
|
49
|
+
/** The most left-out pages listed by address; the rest are counted. */
|
|
50
|
+
export declare const AI_SITE_IMPORT_LEFT_OUT_LISTED = 60;
|
|
51
|
+
/** A page the crawl read, as the inventory keeps it: no text, only what plans it. */
|
|
52
|
+
export interface AiSiteImportListedPage {
|
|
53
|
+
url: string;
|
|
54
|
+
path: string;
|
|
55
|
+
title: string;
|
|
56
|
+
foundBy: 'home' | 'sitemap' | 'link';
|
|
57
|
+
words: number;
|
|
58
|
+
images: number;
|
|
59
|
+
}
|
|
60
|
+
export type AiSiteImportGroupKind = 'main' | 'collection';
|
|
61
|
+
export interface AiSiteImportGroup {
|
|
62
|
+
/** `main`, or `c:<prefix>` for a collection. */
|
|
63
|
+
id: string;
|
|
64
|
+
label: string;
|
|
65
|
+
kind: AiSiteImportGroupKind;
|
|
66
|
+
/** Pages of the group the crawl read, kept or not. */
|
|
67
|
+
pages: number;
|
|
68
|
+
}
|
|
69
|
+
/** Why a page the site has is not brought in. */
|
|
70
|
+
export type AiSiteImportLeftOutReason =
|
|
71
|
+
/** Past the site's room under its plan's page count. */
|
|
72
|
+
'plan-limit'
|
|
73
|
+
/** robots.txt keeps AglynBot off it. */
|
|
74
|
+
| 'robots'
|
|
75
|
+
/** A sign-in page: refused outright. */
|
|
76
|
+
| 'login-form'
|
|
77
|
+
/** No text and no photo: nothing to bring in. */
|
|
78
|
+
| 'empty'
|
|
79
|
+
/** It could not be read: an error, no answer, or not a web page. */
|
|
80
|
+
| 'unreadable'
|
|
81
|
+
/** Over the size one page may be. */
|
|
82
|
+
| 'too-large'
|
|
83
|
+
/** It sends visitors to another website. */
|
|
84
|
+
| 'off-site';
|
|
85
|
+
export declare const AI_SITE_IMPORT_LEFT_OUT_REASONS: readonly AiSiteImportLeftOutReason[];
|
|
86
|
+
export interface AiSiteImportLeftOut {
|
|
87
|
+
url: string;
|
|
88
|
+
path: string;
|
|
89
|
+
title: string;
|
|
90
|
+
reason: AiSiteImportLeftOutReason;
|
|
91
|
+
}
|
|
92
|
+
/** A photo brought into the site's media library, as a page places it. */
|
|
93
|
+
export interface AiSiteImportPhoto {
|
|
94
|
+
mediaId: string;
|
|
95
|
+
src: string;
|
|
96
|
+
width?: number;
|
|
97
|
+
height?: number;
|
|
98
|
+
alt?: string;
|
|
99
|
+
}
|
|
100
|
+
/** What a wave's read found on one page, for its model answer. Never on the wire. */
|
|
101
|
+
export interface AiSiteImportPageRead {
|
|
102
|
+
at: string;
|
|
103
|
+
title: string;
|
|
104
|
+
/** The page's text in order, cut to `AI_SITE_IMPORT_PAGE_TEXT_MAX_CHARS`; fenced only when a prompt reads it. */
|
|
105
|
+
text: string;
|
|
106
|
+
/** The page's sections, from its headings. */
|
|
107
|
+
sections: string[];
|
|
108
|
+
/** Its photos' addresses, at most `AI_SITE_IMPORT_IMAGES_PER_PAGE`. */
|
|
109
|
+
images: Array<{
|
|
110
|
+
url: string;
|
|
111
|
+
alt: string;
|
|
112
|
+
}>;
|
|
113
|
+
}
|
|
114
|
+
export interface AiSiteImportPage {
|
|
115
|
+
/** The item ledger slot: `p0`, `p1`, … */
|
|
116
|
+
slot: string;
|
|
117
|
+
url: string;
|
|
118
|
+
path: string;
|
|
119
|
+
title: string;
|
|
120
|
+
group: string;
|
|
121
|
+
wave: number;
|
|
122
|
+
/** The id the page's draft is written under, minted with the inventory. */
|
|
123
|
+
draftId: string;
|
|
124
|
+
/** The page's address on the new site. */
|
|
125
|
+
slug: string;
|
|
126
|
+
words: number;
|
|
127
|
+
images: number;
|
|
128
|
+
/** Filled by the wave's read; the text is cleared once the page is in. */
|
|
129
|
+
read?: AiSiteImportPageRead | null;
|
|
130
|
+
/** Set when the wave's read found the page cannot be brought in after all. */
|
|
131
|
+
refused?: AiSiteImportLeftOutReason | null;
|
|
132
|
+
/** Filled once the page's photos are in the library. */
|
|
133
|
+
photos?: {
|
|
134
|
+
brought: number;
|
|
135
|
+
/** Already in the library from an earlier page or import: the same file, never a second copy. */
|
|
136
|
+
reused: number;
|
|
137
|
+
skipped: number;
|
|
138
|
+
assets: AiSiteImportPhoto[];
|
|
139
|
+
} | null;
|
|
140
|
+
}
|
|
141
|
+
export type AiSiteImportWaveStatus = 'waiting' | 'running' | 'review' | 'done';
|
|
142
|
+
export interface AiSiteImportWave {
|
|
143
|
+
index: number;
|
|
144
|
+
label: string;
|
|
145
|
+
/** The group the wave brings in; the first wave's is `main`. */
|
|
146
|
+
group: string;
|
|
147
|
+
slots: string[];
|
|
148
|
+
/** Whether the wave builds the site's header and footer first. */
|
|
149
|
+
frame: boolean;
|
|
150
|
+
status: AiSiteImportWaveStatus;
|
|
151
|
+
startedAt: string | null;
|
|
152
|
+
finishedAt: string | null;
|
|
153
|
+
}
|
|
154
|
+
export interface AiSiteImportState {
|
|
155
|
+
domain: string;
|
|
156
|
+
/** The site's name, as Create site was given it: the header's name. */
|
|
157
|
+
siteName: string;
|
|
158
|
+
ownership: {
|
|
159
|
+
method: string | null;
|
|
160
|
+
provenAt: number | null;
|
|
161
|
+
detail: string | null;
|
|
162
|
+
};
|
|
163
|
+
readAt: string;
|
|
164
|
+
/** The plan's page count; `null` when it has none. */
|
|
165
|
+
pageLimit: number | null;
|
|
166
|
+
/** Pages the site already had when its import read the old site. */
|
|
167
|
+
existingPages: number;
|
|
168
|
+
/** Pages the crawl read. */
|
|
169
|
+
found: number;
|
|
170
|
+
/** Why the crawl stopped short of the whole site, or `null` when it did not. */
|
|
171
|
+
stoppedBy: string | null;
|
|
172
|
+
groups: AiSiteImportGroup[];
|
|
173
|
+
pages: AiSiteImportPage[];
|
|
174
|
+
waves: AiSiteImportWave[];
|
|
175
|
+
/** At most `AI_SITE_IMPORT_LEFT_OUT_LISTED`, by address. */
|
|
176
|
+
leftOut: AiSiteImportLeftOut[];
|
|
177
|
+
/** Every page left out, by reason, listed or not. */
|
|
178
|
+
leftOutCount: Partial<Record<AiSiteImportLeftOutReason, number>>;
|
|
179
|
+
/** The header and footer's draft id, built in the first wave; `null` when there are no main pages. */
|
|
180
|
+
frame: {
|
|
181
|
+
draftId: string;
|
|
182
|
+
} | null;
|
|
183
|
+
/** The Trust & Safety row this import is logged under. */
|
|
184
|
+
reviewId: string | null;
|
|
185
|
+
}
|
|
186
|
+
/** A collection's prefix for a page address: its first segment, a dated archive's `posts`; `null` for a top-level page. */
|
|
187
|
+
export declare function aiSiteImportPrefix(path: string): string | null;
|
|
188
|
+
/** "news-and-events" → "News and events". */
|
|
189
|
+
export declare function aiSiteImportPrefixLabel(prefix: string): string;
|
|
190
|
+
/**
|
|
191
|
+
* The inventory's groups, in the order they are brought in: the main pages,
|
|
192
|
+
* then each collection — one the home page's menu links first, in menu order,
|
|
193
|
+
* then the larger before the smaller.
|
|
194
|
+
*/
|
|
195
|
+
export declare function aiSiteImportGroups(pages: readonly AiSiteImportListedPage[], menu?: readonly string[]): {
|
|
196
|
+
groups: AiSiteImportGroup[];
|
|
197
|
+
groupOf: (page: AiSiteImportListedPage) => string;
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* The address a page takes on the new site: one segment, as every Aglyn page
|
|
201
|
+
* has, from the last segment of its old address; home is the root. Two pages
|
|
202
|
+
* that would take the same address are told apart by their collection, then
|
|
203
|
+
* by a number. The draft writer still makes it unique on the site itself.
|
|
204
|
+
*/
|
|
205
|
+
export declare function aiSiteImportSlug(path: string, taken: Set<string>): string;
|
|
206
|
+
export interface AiSiteImportInventoryInput {
|
|
207
|
+
domain: string;
|
|
208
|
+
siteName: string;
|
|
209
|
+
ownership: AiSiteImportState['ownership'];
|
|
210
|
+
readAt: string;
|
|
211
|
+
pages: readonly AiSiteImportListedPage[];
|
|
212
|
+
/** Addresses the home page's menu links, in its order. */
|
|
213
|
+
menu: readonly string[];
|
|
214
|
+
/** What the crawl could not read, by reason. */
|
|
215
|
+
skipped: ReadonlyArray<{
|
|
216
|
+
url: string;
|
|
217
|
+
reason: AiSiteImportLeftOutReason;
|
|
218
|
+
}>;
|
|
219
|
+
/** Skips the crawl only counted. */
|
|
220
|
+
skippedOverflow?: number;
|
|
221
|
+
stoppedBy: string | null;
|
|
222
|
+
/** The plan's page count; `null` for none. */
|
|
223
|
+
pageLimit: number | null;
|
|
224
|
+
existingPages: number;
|
|
225
|
+
/** Mints one draft id; the inventory names every page's draft before any is written. */
|
|
226
|
+
mintId: () => string;
|
|
227
|
+
reviewId?: string | null;
|
|
228
|
+
wavePages?: number;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The site's inventory cut into waves, every page left out said with its
|
|
232
|
+
* reason. Pure: the step reads the site, this decides what comes in.
|
|
233
|
+
*/
|
|
234
|
+
export declare function aiSiteImportInventory(input: AiSiteImportInventoryInput): AiSiteImportState;
|
|
235
|
+
/** The item ledger an inventory starts: the header and footer, then every page, all pending. */
|
|
236
|
+
export declare function aiSiteImportLedger(state: AiSiteImportState): AiJobItemLedger[];
|
|
237
|
+
export type AiSiteImportWork = {
|
|
238
|
+
kind: 'inventory';
|
|
239
|
+
} | {
|
|
240
|
+
kind: 'start-wave';
|
|
241
|
+
wave: AiSiteImportWave;
|
|
242
|
+
}
|
|
243
|
+
/** Pages of the running wave its read did not reach before its clock ran out. */
|
|
244
|
+
| {
|
|
245
|
+
kind: 'read';
|
|
246
|
+
wave: AiSiteImportWave;
|
|
247
|
+
pages: AiSiteImportPage[];
|
|
248
|
+
} | {
|
|
249
|
+
kind: 'frame';
|
|
250
|
+
wave: AiSiteImportWave;
|
|
251
|
+
} | {
|
|
252
|
+
kind: 'images';
|
|
253
|
+
wave: AiSiteImportWave;
|
|
254
|
+
page: AiSiteImportPage;
|
|
255
|
+
} | {
|
|
256
|
+
kind: 'page';
|
|
257
|
+
wave: AiSiteImportWave;
|
|
258
|
+
page: AiSiteImportPage;
|
|
259
|
+
} | {
|
|
260
|
+
kind: 'close-wave';
|
|
261
|
+
wave: AiSiteImportWave;
|
|
262
|
+
} | {
|
|
263
|
+
kind: 'done';
|
|
264
|
+
};
|
|
265
|
+
/** Whether an item is still to be built. */
|
|
266
|
+
export declare function aiSiteImportItemOpen(items: readonly AiJobItemLedger[] | null | undefined, slot: string): boolean;
|
|
267
|
+
/** The wave running now, else `null`. */
|
|
268
|
+
export declare function aiSiteImportRunningWave(state: AiSiteImportState | null | undefined): AiSiteImportWave | null;
|
|
269
|
+
/** The next wave a person may start, else `null`. */
|
|
270
|
+
export declare function aiSiteImportNextWave(state: AiSiteImportState | null | undefined): AiSiteImportWave | null;
|
|
271
|
+
/** The wave a person is reviewing, else `null`. */
|
|
272
|
+
export declare function aiSiteImportReviewWave(state: AiSiteImportState | null | undefined): AiSiteImportWave | null;
|
|
273
|
+
/** What the next pass of the step does. */
|
|
274
|
+
export declare function aiSiteImportNextWork(state: AiSiteImportState | null | undefined, items: readonly AiJobItemLedger[] | null | undefined): AiSiteImportWork;
|
|
275
|
+
/** A wave started: running, with what its read found on each page. */
|
|
276
|
+
export declare function aiSiteImportWaveStarted(state: AiSiteImportState, index: number, at: string, reads: ReadonlyMap<string, AiSiteImportPageRead | AiSiteImportLeftOutReason>): AiSiteImportState;
|
|
277
|
+
/** More of a running wave's pages, read now. */
|
|
278
|
+
export declare function aiSiteImportPagesRead(state: AiSiteImportState, reads: ReadonlyMap<string, AiSiteImportPageRead | AiSiteImportLeftOutReason>): AiSiteImportState;
|
|
279
|
+
/** A page's photos are in the library. */
|
|
280
|
+
export declare function aiSiteImportPhotosIn(state: AiSiteImportState, slot: string, photos: NonNullable<AiSiteImportPage['photos']>): AiSiteImportState;
|
|
281
|
+
/** A page is in: its text is no longer kept. */
|
|
282
|
+
export declare function aiSiteImportPageSettled(state: AiSiteImportState, slot: string): AiSiteImportState;
|
|
283
|
+
/** A wave is in: waiting for its review, or done when no wave follows it. */
|
|
284
|
+
export declare function aiSiteImportWaveClosed(state: AiSiteImportState, index: number, at: string): AiSiteImportState;
|
|
285
|
+
/** The state as the console reads it: every page's read text left off. */
|
|
286
|
+
export declare function aiSiteImportWire(state: AiSiteImportState | null | undefined): AiSiteImportState | null;
|
|
287
|
+
/**
|
|
288
|
+
* What bringing in this many pages costs, quoted before it starts (AGL-3976):
|
|
289
|
+
* each page an AI page as measured, its ceiling its two passes, and the
|
|
290
|
+
* site's header and footer once when the wave builds them.
|
|
291
|
+
*/
|
|
292
|
+
export declare function aiSiteImportCreditRange(pages: number, options?: {
|
|
293
|
+
frame?: boolean;
|
|
294
|
+
}): AiCreditRange;
|
|
295
|
+
/** A wave's quote: the pages it has still to bring in, and its header and footer while they are owed. */
|
|
296
|
+
export declare function aiSiteImportWaveCreditRange(state: AiSiteImportState, wave: AiSiteImportWave, items?: readonly AiJobItemLedger[] | null): AiCreditRange;
|
|
297
|
+
/** Why a page is not brought in, as a person reads it. */
|
|
298
|
+
export declare const AI_SITE_IMPORT_LEFT_OUT_COPY: Readonly<Record<AiSiteImportLeftOutReason, string>>;
|
|
299
|
+
/** "3 pages" / "1 page". */
|
|
300
|
+
export declare function aiSiteImportPagesText(count: number): string;
|
|
301
|
+
/** The review a finished wave parks on, or the first wave's go-ahead once the site is read. */
|
|
302
|
+
export declare function aiSiteImportWaveMessage(state: AiSiteImportState, items: readonly AiJobItemLedger[] | null | undefined): string;
|