@aglyn/plugins-ai 1.0.0-beta.231 → 1.0.0-beta.232
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.js +8 -4
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-job-follow.component.js +1 -0
- package/src/lib/components/ai-job-follow.component.js.map +1 -1
- package/src/lib/components/ai-job-links.js +13 -0
- package/src/lib/components/ai-job-links.js.map +1 -1
- package/src/lib/components/ai-jobs-list-page.component.js +1 -0
- package/src/lib/components/ai-jobs-list-page.component.js.map +1 -1
- package/src/lib/components/ai-media-create.component.d.ts +20 -7
- package/src/lib/components/ai-media-create.component.js +107 -55
- package/src/lib/components/ai-media-create.component.js.map +1 -1
- package/src/lib/components/ai-seo-fields-card.component.js +1 -0
- package/src/lib/components/ai-seo-fields-card.component.js.map +1 -1
- package/src/lib/components/ai-site-memory-card.component.d.ts +32 -0
- package/src/lib/components/ai-site-memory-card.component.js +187 -0
- package/src/lib/components/ai-site-memory-card.component.js.map +1 -0
- package/src/lib/components/ai-site-start-card.component.js +80 -77
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/components/ai-theme-proposal-card.component.js +4 -0
- package/src/lib/components/ai-theme-proposal-card.component.js.map +1 -1
- package/src/lib/components/ai-usage-strip.component.js +1 -0
- package/src/lib/components/ai-usage-strip.component.js.map +1 -1
- package/src/lib/components/assist-panel.component.d.ts +10 -0
- package/src/lib/components/assist-panel.component.js +119 -9
- package/src/lib/components/assist-panel.component.js.map +1 -1
- package/src/lib/components/assist-signals-page.component.js +2 -0
- package/src/lib/components/assist-signals-page.component.js.map +1 -1
- package/src/lib/components/billing-ai-allotments.component.js +3 -0
- package/src/lib/components/billing-ai-allotments.component.js.map +1 -1
- package/src/lib/components/billing-ai-top-users.component.js +1 -0
- package/src/lib/components/billing-ai-top-users.component.js.map +1 -1
- package/src/lib/components/billing-assist-overage-card.component.js +2 -0
- package/src/lib/components/billing-assist-overage-card.component.js.map +1 -1
- package/src/lib/components/member-ai-usage-card.component.js +10 -0
- package/src/lib/components/member-ai-usage-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-card.component.js +1 -0
- package/src/lib/components/staff-org-ai-card.component.js.map +1 -1
- package/src/lib/components/staff-org-ai-conversations.component.d.ts +23 -0
- package/src/lib/components/staff-org-ai-conversations.component.js +346 -0
- package/src/lib/components/staff-org-ai-conversations.component.js.map +1 -0
- package/src/lib/jobs/ai-build-capabilities.d.ts +13 -1
- package/src/lib/jobs/ai-build-capabilities.js +101 -7
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
- package/src/lib/jobs/ai-business-profile-prefill.d.ts +29 -0
- package/src/lib/jobs/ai-business-profile-prefill.js +85 -0
- package/src/lib/jobs/ai-business-profile-prefill.js.map +1 -0
- package/src/lib/jobs/ai-job-build-step.js +3 -1
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-edit-step.d.ts +225 -0
- package/src/lib/jobs/ai-job-edit-step.js +631 -0
- package/src/lib/jobs/ai-job-edit-step.js.map +1 -0
- package/src/lib/jobs/ai-job-insight-step.js +21 -4
- package/src/lib/jobs/ai-job-insight-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +8 -3
- package/src/lib/jobs/ai-job-layout-language.js +8 -2
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +7 -6
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-logic-step.d.ts +20 -0
- package/src/lib/jobs/ai-job-logic-step.js +87 -6
- package/src/lib/jobs/ai-job-logic-step.js.map +1 -1
- package/src/lib/jobs/ai-job-page-language.d.ts +52 -7
- package/src/lib/jobs/ai-job-page-language.js +72 -9
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +12 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +19 -5
- package/src/lib/jobs/ai-job-plan-step.js +54 -20
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-content.d.ts +163 -0
- package/src/lib/jobs/ai-job-site-content.js +443 -0
- package/src/lib/jobs/ai-job-site-content.js.map +1 -0
- package/src/lib/jobs/ai-job-site-look.d.ts +112 -0
- package/src/lib/jobs/ai-job-site-look.js +322 -0
- package/src/lib/jobs/ai-job-site-look.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +26 -5
- package/src/lib/jobs/ai-job-site-step.js +163 -24
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-jobs-notify.d.ts +6 -1
- package/src/lib/jobs/ai-jobs-notify.js +15 -3
- package/src/lib/jobs/ai-jobs-notify.js.map +1 -1
- package/src/lib/layout-language/ai-layout-compiler.d.ts +9 -0
- package/src/lib/layout-language/ai-layout-compiler.js +120 -33
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.js +5 -4
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-language.d.ts +12 -5
- package/src/lib/layout-language/ai-layout-language.js +92 -9
- package/src/lib/layout-language/ai-layout-language.js.map +1 -1
- package/src/lib/layout-language/ai-layout-pictures.d.ts +144 -0
- package/src/lib/layout-language/ai-layout-pictures.js +214 -0
- package/src/lib/layout-language/ai-layout-pictures.js.map +1 -0
- package/src/lib/layout-language/ai-layout-store.d.ts +2 -0
- package/src/lib/layout-language/ai-layout-store.js +7 -1
- package/src/lib/layout-language/ai-layout-store.js.map +1 -1
- package/src/lib/model/ai-build-progress.js +4 -1
- package/src/lib/model/ai-build-progress.js.map +1 -1
- package/src/lib/model/ai-edit-job.d.ts +109 -0
- package/src/lib/model/ai-edit-job.js +157 -0
- package/src/lib/model/ai-edit-job.js.map +1 -0
- package/src/lib/model/ai-job-activity.js +1 -0
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +3 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-logic-job.d.ts +18 -1
- package/src/lib/model/ai-logic-job.js +24 -3
- package/src/lib/model/ai-logic-job.js.map +1 -1
- package/src/lib/model/ai-media-credits.d.ts +8 -4
- package/src/lib/model/ai-media-credits.js +11 -4
- package/src/lib/model/ai-media-credits.js.map +1 -1
- package/src/lib/model/ai-media-kinds.d.ts +68 -0
- package/src/lib/model/ai-media-kinds.js +98 -0
- package/src/lib/model/ai-media-kinds.js.map +1 -0
- package/src/lib/model/ai-site-build-progress.d.ts +4 -0
- package/src/lib/model/ai-site-build-progress.js +28 -11
- package/src/lib/model/ai-site-build-progress.js.map +1 -1
- package/src/lib/model/ai-site-context.d.ts +111 -0
- package/src/lib/model/ai-site-context.js +222 -0
- package/src/lib/model/ai-site-context.js.map +1 -0
- package/src/lib/model/ai-site-job.d.ts +10 -2
- package/src/lib/model/ai-site-job.js +12 -5
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/model/ai-site-kinds.d.ts +164 -0
- package/src/lib/model/ai-site-kinds.js +1942 -0
- package/src/lib/model/ai-site-kinds.js.map +1 -0
- package/src/lib/model/ai-site-look.d.ts +150 -0
- package/src/lib/model/ai-site-look.js +1236 -0
- package/src/lib/model/ai-site-look.js.map +1 -0
- package/src/lib/model/ai-site-memory.d.ts +80 -0
- package/src/lib/model/ai-site-memory.js +171 -0
- package/src/lib/model/ai-site-memory.js.map +1 -0
- package/src/lib/model/ai-site-start.d.ts +10 -1
- package/src/lib/model/ai-site-start.js +16 -2
- package/src/lib/model/ai-site-start.js.map +1 -1
- package/src/lib/model/assist-follow-up.d.ts +92 -0
- package/src/lib/model/assist-follow-up.js +128 -0
- package/src/lib/model/assist-follow-up.js.map +1 -0
- package/src/lib/plugin-config.js +2 -0
- package/src/lib/plugin-config.js.map +1 -1
- package/src/lib/plugin.js +20 -1
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/providers/anthropic.d.ts +9 -1
- package/src/lib/providers/anthropic.js +143 -9
- package/src/lib/providers/anthropic.js.map +1 -1
- package/src/lib/providers/catalog.d.ts +37 -7
- package/src/lib/providers/catalog.js +103 -11
- package/src/lib/providers/catalog.js.map +1 -1
- package/src/lib/providers/contract.d.ts +29 -0
- package/src/lib/providers/contract.js.map +1 -1
- package/src/lib/providers/image-contract.d.ts +22 -1
- package/src/lib/providers/image-contract.js +40 -1
- package/src/lib/providers/image-contract.js.map +1 -1
- package/src/lib/providers/image-endpoints.d.ts +24 -0
- package/src/lib/providers/image-endpoints.js +28 -0
- package/src/lib/providers/image-endpoints.js.map +1 -0
- package/src/lib/providers/model-choice.js +23 -2
- package/src/lib/providers/model-choice.js.map +1 -1
- package/src/lib/providers/routing.js +18 -0
- package/src/lib/providers/routing.js.map +1 -1
- package/src/lib/providers/vertex-image-endpoint.d.ts +48 -0
- package/src/lib/providers/vertex-image-endpoint.js +80 -0
- package/src/lib/providers/vertex-image-endpoint.js.map +1 -0
- package/src/lib/providers/vertex-image.d.ts +13 -27
- package/src/lib/providers/vertex-image.js +15 -42
- package/src/lib/providers/vertex-image.js.map +1 -1
- package/src/lib/runtime/ai-blog-post-generation.d.ts +62 -0
- package/src/lib/runtime/ai-blog-post-generation.js +89 -0
- package/src/lib/runtime/ai-blog-post-generation.js.map +1 -0
- package/src/lib/runtime/ai-dev-env.d.ts +53 -0
- package/src/lib/runtime/ai-dev-env.js +72 -0
- package/src/lib/runtime/ai-dev-env.js.map +1 -0
- package/src/lib/runtime/ai-dev-replay.d.ts +116 -0
- package/src/lib/runtime/ai-dev-replay.js +313 -0
- package/src/lib/runtime/ai-dev-replay.js.map +1 -0
- package/src/lib/runtime/ai-doctrine.js +5 -1
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.js +4 -0
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-eval.d.ts +13 -1
- package/src/lib/runtime/ai-eval.js +84 -1
- package/src/lib/runtime/ai-eval.js.map +1 -1
- package/src/lib/runtime/ai-live-batch.d.ts +45 -0
- package/src/lib/runtime/ai-live-batch.js +89 -0
- package/src/lib/runtime/ai-live-batch.js.map +1 -0
- package/src/lib/runtime/ai-runtime.js +46 -2
- package/src/lib/runtime/ai-runtime.js.map +1 -1
- package/src/lib/runtime/site-context.d.ts +58 -0
- package/src/lib/runtime/site-context.js +127 -0
- package/src/lib/runtime/site-context.js.map +1 -0
- package/src/lib/server/ai-admin-conversations.d.ts +22 -0
- package/src/lib/server/ai-admin-conversations.js +197 -0
- package/src/lib/server/ai-admin-conversations.js.map +1 -0
- package/src/lib/server/ai-media-image.d.ts +5 -5
- package/src/lib/server/ai-media-image.js +25 -11
- package/src/lib/server/ai-media-image.js.map +1 -1
- package/src/lib/server/ai-media-raster-prompt.d.ts +34 -0
- package/src/lib/server/ai-media-raster-prompt.js +53 -0
- package/src/lib/server/ai-media-raster-prompt.js.map +1 -0
- package/src/lib/server/assist-chat.d.ts +11 -0
- package/src/lib/server/assist-chat.js +57 -18
- package/src/lib/server/assist-chat.js.map +1 -1
- package/src/lib/server/assist-edit-applied.js +16 -3
- package/src/lib/server/assist-edit-applied.js.map +1 -1
- package/src/lib/server/assist-view-context.d.ts +19 -1
- package/src/lib/server/assist-view-context.js +38 -1
- package/src/lib/server/assist-view-context.js.map +1 -1
- package/src/lib/server.js +10 -0
- package/src/lib/server.js.map +1 -1
- package/src/lib/subprocessors.js +17 -1
- package/src/lib/subprocessors.js.map +1 -1
- package/src/lib/tools/ai-blog-post-tool.d.ts +60 -0
- package/src/lib/tools/ai-blog-post-tool.js +175 -0
- package/src/lib/tools/ai-blog-post-tool.js.map +1 -0
- package/src/lib/usage/assist-usage.d.ts +3 -0
- package/src/lib/usage/assist-usage.js +4 -2
- package/src/lib/usage/assist-usage.js.map +1 -1
- package/src/lib/usage/staff-org-ai-conversations.d.ts +103 -0
- package/src/lib/usage/staff-org-ai-conversations.js +152 -0
- package/src/lib/usage/staff-org-ai-conversations.js.map +1 -0
|
@@ -0,0 +1,225 @@
|
|
|
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 { SCREEN_SEO_TEXT_FIELDS } from '@aglyn/aglyn/app-utils/screen-seo-fields';
|
|
18
|
+
import { CanvasManager } from '@aglyn/aglyn/canvas-manager/canvas-manager';
|
|
19
|
+
import type { NodesMap } from '@aglyn/aglyn/types/nodes';
|
|
20
|
+
import { resolveOrgIdForHost } from '@aglyn/tenant-data-admin/server/organizations';
|
|
21
|
+
import { type AiEditJobInputs, type AiEditPlacement, type AiEditTargetKind } from '../model/ai-edit-job';
|
|
22
|
+
import type { AiJob, AiJobOutput } from '../model/ai-jobs.types';
|
|
23
|
+
import { type AssistEditCanvasContext, type AssistEditOp, type AssistEditProposal, type AssistEditTarget } from '../model/assist-edit';
|
|
24
|
+
import { type AiCustomGenerationInput } from '../runtime/ai-doctrine';
|
|
25
|
+
import type { AiSystemBlock } from '../runtime/ai-runtime';
|
|
26
|
+
import { type AiJobAdmission } from './ai-job-admission';
|
|
27
|
+
import { type AiJobStepRunner } from './ai-job-text-step';
|
|
28
|
+
/**
|
|
29
|
+
* The `edit` step (AGL-3616): a change to a page or a layout the site already
|
|
30
|
+
* has, from a description, made on the server with no editor open.
|
|
31
|
+
*
|
|
32
|
+
* It is the Assist edit rung, run as a job. The model is shown the stored
|
|
33
|
+
* document as the rung's outline and proposes through the rung's own tool;
|
|
34
|
+
* its answer is held to the rung's closed world and palette validators
|
|
35
|
+
* (`checkAssistEditAnswer`) and re-asked once, naming what was left out; and
|
|
36
|
+
* what survives lands through the canvas's own guarded mutators
|
|
37
|
+
* (`applyAssistEdit`), on a `CanvasManager` built headless from the stored
|
|
38
|
+
* nodes, inside the transaction that writes it.
|
|
39
|
+
*
|
|
40
|
+
* ── Where the change lands, decided before anything is spent ────────────
|
|
41
|
+
*
|
|
42
|
+
* Never on a version a visitor sees. With version history, a NEW version
|
|
43
|
+
* beside the one it started from — a copy of that version's stored fields with
|
|
44
|
+
* the changed nodes — which becomes the page's current version only when the
|
|
45
|
+
* page is not published; a published page's current version, and a layout's,
|
|
46
|
+
* never move. Without it, in place, on a version no visitor reaches: an
|
|
47
|
+
* unpublished page's, or one that is not the current version and no schedule
|
|
48
|
+
* will publish. Anything else is refused as a plan limit, charged nothing.
|
|
49
|
+
*
|
|
50
|
+
* ── What a job cannot do that the editor can ────────────────────────────
|
|
51
|
+
*
|
|
52
|
+
* The rung's chat door never offers saving part of a page as a reusable
|
|
53
|
+
* component, and neither does this. A page's search title and description
|
|
54
|
+
* live on the page itself, not on a version, so they are written only for a
|
|
55
|
+
* page that is not published; on a published page they are left out, and the
|
|
56
|
+
* output's note says so, as it says every change it left out.
|
|
57
|
+
*
|
|
58
|
+
* ── One version per job ──────────────────────────────────────────────────
|
|
59
|
+
*
|
|
60
|
+
* The new version is named by the job's id — a build's unit is named by its
|
|
61
|
+
* plan item's id — so a run asked again finds what it wrote and spends
|
|
62
|
+
* nothing. A change made in place stamps the version with the job's id for
|
|
63
|
+
* the same reason.
|
|
64
|
+
*/
|
|
65
|
+
/** The longest the step may take reading the page and writing it. */
|
|
66
|
+
export declare const AI_EDIT_READS_MS = 2000;
|
|
67
|
+
/** The step's time: its answer and its re-ask at the `job.edit` ceiling, with its own reads. */
|
|
68
|
+
export declare const AI_JOB_EDIT_STEP_BUDGET: import("./ai-job-budget").AiJobStepBudget;
|
|
69
|
+
export declare const AI_JOB_EDIT_STEP_MINIMUM_MS: number;
|
|
70
|
+
export declare function aiJobEditModel(): string;
|
|
71
|
+
/**
|
|
72
|
+
* The job's own rules, byte-identical on every request, ahead of the rung's
|
|
73
|
+
* protocol and catalog for the document's kind, which carries the breakpoint:
|
|
74
|
+
* both are the same for every site, so a kind's whole prefix caches once.
|
|
75
|
+
*/
|
|
76
|
+
export declare const AI_JOB_EDIT_RULES: AiSystemBlock;
|
|
77
|
+
/** The system blocks for one kind of document. */
|
|
78
|
+
export declare function aiJobEditInstructions(kind: AiEditTargetKind): AiSystemBlock[];
|
|
79
|
+
/** What the change is asked from: the document's outline, then the request. */
|
|
80
|
+
export declare function aiJobEditPrompt(input: {
|
|
81
|
+
brief: string;
|
|
82
|
+
context: AssistEditCanvasContext;
|
|
83
|
+
}): string;
|
|
84
|
+
/** The edit as the doctrine's loop runs it: the rung's tool, held to the rung's check. */
|
|
85
|
+
export declare function aiJobEditGeneration(request: {
|
|
86
|
+
brief: string;
|
|
87
|
+
context: AssistEditCanvasContext;
|
|
88
|
+
target: AssistEditTarget;
|
|
89
|
+
model: string;
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
}): AiCustomGenerationInput<AssistEditProposal>;
|
|
92
|
+
/** A canvas over a stored node map, with the editor's own guarded mutators and no editor. */
|
|
93
|
+
export declare function aiEditCanvas(nodes: NodesMap): CanvasManager;
|
|
94
|
+
/**
|
|
95
|
+
* Lands a proposal on a stored node map, as the editor lands one on its open
|
|
96
|
+
* canvas: checked whole first, then one batch, all or nothing. The session is
|
|
97
|
+
* the version being written, which is never one a visitor sees; a page's
|
|
98
|
+
* search fields are captured into `seo` only where `seo` is given.
|
|
99
|
+
*/
|
|
100
|
+
export declare function aiApplyEditToNodes(nodes: NodesMap, proposal: AssistEditProposal, seo?: Partial<Record<(typeof SCREEN_SEO_TEXT_FIELDS)[number], string>>): {
|
|
101
|
+
ok: true;
|
|
102
|
+
nodes: NodesMap;
|
|
103
|
+
} | {
|
|
104
|
+
ok: false;
|
|
105
|
+
reason: string;
|
|
106
|
+
};
|
|
107
|
+
type Firestore = FirebaseFirestore.Firestore;
|
|
108
|
+
/** The page or layout an edit job changes, as it stands before anything is spent. */
|
|
109
|
+
export interface AiEditTargetRead {
|
|
110
|
+
kind: AiEditTargetKind;
|
|
111
|
+
id: string;
|
|
112
|
+
name: string;
|
|
113
|
+
hostSubdomain: string | null;
|
|
114
|
+
/** The document's current version. */
|
|
115
|
+
pointerVersionId: string | null;
|
|
116
|
+
/** The version the change starts from. */
|
|
117
|
+
sourceVersionId: string;
|
|
118
|
+
nodes: NodesMap;
|
|
119
|
+
/** Whether visitors see the document's current version: a published page, a collection template, any layout. */
|
|
120
|
+
served: boolean;
|
|
121
|
+
/** The version a pending publish schedule will make current, if any. */
|
|
122
|
+
scheduledVersionId: string | null;
|
|
123
|
+
/** What this job already wrote, when a run of it got that far. */
|
|
124
|
+
written: {
|
|
125
|
+
versionId: string;
|
|
126
|
+
placement: AiEditPlacement;
|
|
127
|
+
} | null;
|
|
128
|
+
}
|
|
129
|
+
export interface AiEditTargetRefusal {
|
|
130
|
+
status: 400 | 404;
|
|
131
|
+
error: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The document an edit job changes, on the job's own site: the page or
|
|
135
|
+
* layout named, not deleted, not an email design, and the version it starts
|
|
136
|
+
* from with a document in it. A refusal names what is wrong.
|
|
137
|
+
*/
|
|
138
|
+
export declare function readAiEditTarget(firestore: Firestore, input: {
|
|
139
|
+
orgId: string;
|
|
140
|
+
hostId: string;
|
|
141
|
+
inputs: AiEditJobInputs;
|
|
142
|
+
/** The job's own version id, to find what a run of it wrote; `null` at the door, before there is one. */
|
|
143
|
+
jobId: string | null;
|
|
144
|
+
}): Promise<AiEditTargetRead | AiEditTargetRefusal>;
|
|
145
|
+
/**
|
|
146
|
+
* Where a change may land (see the module head), or `refused` when the only
|
|
147
|
+
* place is a version visitors see and the plan keeps no version history.
|
|
148
|
+
*/
|
|
149
|
+
export declare function aiEditPlacement(input: {
|
|
150
|
+
versioning: boolean;
|
|
151
|
+
served: boolean;
|
|
152
|
+
sourceIsPointer: boolean;
|
|
153
|
+
sourceScheduled: boolean;
|
|
154
|
+
}): AiEditPlacement | 'refused';
|
|
155
|
+
export interface AiEditWriteInput {
|
|
156
|
+
hostId: string;
|
|
157
|
+
kind: AiEditTargetKind;
|
|
158
|
+
id: string;
|
|
159
|
+
sourceVersionId: string;
|
|
160
|
+
/** The new version's id, which is the job's; also the stamp a change in place carries. */
|
|
161
|
+
jobVersionId: string;
|
|
162
|
+
versioning: boolean;
|
|
163
|
+
proposal: AssistEditProposal;
|
|
164
|
+
/** Whether the page's search fields may be written: a page no visitor reaches. */
|
|
165
|
+
writeSeo: boolean;
|
|
166
|
+
versionName: string;
|
|
167
|
+
uid: string;
|
|
168
|
+
/** The job the member started, stamped as `aiJobId` on a new version. */
|
|
169
|
+
aiJobId: string;
|
|
170
|
+
now: Date;
|
|
171
|
+
}
|
|
172
|
+
export type AiEditWrite = {
|
|
173
|
+
ok: true;
|
|
174
|
+
versionId: string;
|
|
175
|
+
placement: AiEditPlacement;
|
|
176
|
+
seoWritten: boolean;
|
|
177
|
+
} | {
|
|
178
|
+
ok: false;
|
|
179
|
+
error: string;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* The change written, in one transaction that reads the document as it is
|
|
183
|
+
* stored NOW — a member may have saved, published or changed plan's history
|
|
184
|
+
* since the read — decides where it lands again on that, and applies the
|
|
185
|
+
* proposal to the stored nodes through the canvas's guards. An element that
|
|
186
|
+
* changed since the model saw it refuses the whole change, as the editor does.
|
|
187
|
+
*/
|
|
188
|
+
export declare function writeAiEdit(firestore: Firestore, input: AiEditWriteInput): Promise<AiEditWrite>;
|
|
189
|
+
export interface AiJobEditStepDeps {
|
|
190
|
+
readTarget?: typeof readAiEditTarget;
|
|
191
|
+
writeEdit?: typeof writeAiEdit;
|
|
192
|
+
}
|
|
193
|
+
/** What an edit wrote, as the job's output: a link into the Besigner on the version written. */
|
|
194
|
+
export declare function aiEditOutput(read: Pick<AiEditTargetRead, 'kind' | 'id' | 'name' | 'hostSubdomain'>, hostId: string, written: {
|
|
195
|
+
versionId: string;
|
|
196
|
+
placement: AiEditPlacement;
|
|
197
|
+
}, leftOut: readonly string[]): AiJobOutput;
|
|
198
|
+
/** The new version's id: the job's own, which a build's unit takes from its plan item. */
|
|
199
|
+
export declare function aiEditVersionId(job: Pick<AiJob, '$id'>): string;
|
|
200
|
+
/**
|
|
201
|
+
* The ops a job may save, and why it left the rest out: never a component
|
|
202
|
+
* save, and a page's search fields only where no visitor reaches the page.
|
|
203
|
+
*/
|
|
204
|
+
export declare function aiEditJobOps(ops: readonly AssistEditOp[], options: {
|
|
205
|
+
seo: boolean;
|
|
206
|
+
}): {
|
|
207
|
+
ops: AssistEditOp[];
|
|
208
|
+
leftOut: string[];
|
|
209
|
+
};
|
|
210
|
+
export declare function createAiJobEditStep(deps?: AiJobEditStepDeps): AiJobStepRunner;
|
|
211
|
+
export declare const runAiJobEditStep: AiJobStepRunner;
|
|
212
|
+
export interface AiEditJobAdmissionDeps {
|
|
213
|
+
readTarget?: typeof readAiEditTarget;
|
|
214
|
+
ownerOf?: typeof resolveOrgIdForHost;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* An edit job is admitted for a page or layout of a site of its own org,
|
|
218
|
+
* and only where the change has somewhere to land that no visitor sees on
|
|
219
|
+
* this workspace's plan — refused in the plan's words before anything exists.
|
|
220
|
+
*/
|
|
221
|
+
export declare function createAiEditJobAdmission(deps?: AiEditJobAdmissionDeps): AiJobAdmission;
|
|
222
|
+
export declare const aiEditJobAdmission: AiJobAdmission;
|
|
223
|
+
/** Registers the edit step and the check an edit job passes before it is created or resumed. */
|
|
224
|
+
export declare function registerAiEditJob(): void;
|
|
225
|
+
export {};
|