@aglyn/plugins-ai 1.0.0-beta.246 → 1.0.0-beta.249
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 +5 -1
- package/src/lib/activity/ai-activity-actions.js.map +1 -1
- package/src/lib/components/ai-job-links.js +14 -0
- package/src/lib/components/ai-job-links.js.map +1 -1
- package/src/lib/components/ai-site-start-card.component.d.ts +1 -1
- package/src/lib/components/ai-site-start-card.component.js +92 -19
- package/src/lib/components/ai-site-start-card.component.js.map +1 -1
- package/src/lib/declarations.server.js +12 -0
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/jobs/ai-build-capabilities.js +56 -2
- package/src/lib/jobs/ai-build-capabilities.js.map +1 -1
- package/src/lib/jobs/ai-job-build-step.d.ts +3 -8
- package/src/lib/jobs/ai-job-build-step.js +49 -12
- package/src/lib/jobs/ai-job-build-step.js.map +1 -1
- package/src/lib/jobs/ai-job-form-dataset.d.ts +8 -5
- package/src/lib/jobs/ai-job-form-dataset.js +28 -10
- package/src/lib/jobs/ai-job-form-dataset.js.map +1 -1
- package/src/lib/jobs/ai-job-form-step.d.ts +20 -4
- package/src/lib/jobs/ai-job-form-step.js +98 -28
- package/src/lib/jobs/ai-job-form-step.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-language.d.ts +6 -2
- package/src/lib/jobs/ai-job-layout-language.js +16 -5
- package/src/lib/jobs/ai-job-layout-language.js.map +1 -1
- package/src/lib/jobs/ai-job-layout-step.js +4 -1
- package/src/lib/jobs/ai-job-layout-step.js.map +1 -1
- package/src/lib/jobs/ai-job-media-step.d.ts +239 -0
- package/src/lib/jobs/ai-job-media-step.js +610 -0
- package/src/lib/jobs/ai-job-media-step.js.map +1 -0
- package/src/lib/jobs/ai-job-page-language.d.ts +2 -0
- package/src/lib/jobs/ai-job-page-language.js +9 -0
- package/src/lib/jobs/ai-job-page-language.js.map +1 -1
- package/src/lib/jobs/ai-job-page-sections.js +4 -3
- package/src/lib/jobs/ai-job-page-sections.js.map +1 -1
- package/src/lib/jobs/ai-job-page-step.js +3 -2
- package/src/lib/jobs/ai-job-page-step.js.map +1 -1
- package/src/lib/jobs/ai-job-plan-step.d.ts +10 -1
- package/src/lib/jobs/ai-job-plan-step.js +73 -15
- package/src/lib/jobs/ai-job-plan-step.js.map +1 -1
- package/src/lib/jobs/ai-job-settings-step.d.ts +0 -4
- package/src/lib/jobs/ai-job-settings-step.js +2 -7
- package/src/lib/jobs/ai-job-settings-step.js.map +1 -1
- package/src/lib/jobs/ai-job-site-content.d.ts +2 -2
- package/src/lib/jobs/ai-job-site-content.js +5 -3
- package/src/lib/jobs/ai-job-site-content.js.map +1 -1
- package/src/lib/jobs/ai-job-site-datasets.d.ts +1 -1
- package/src/lib/jobs/ai-job-site-datasets.js +3 -2
- package/src/lib/jobs/ai-job-site-datasets.js.map +1 -1
- package/src/lib/jobs/ai-job-site-events.d.ts +148 -0
- package/src/lib/jobs/ai-job-site-events.js +313 -0
- package/src/lib/jobs/ai-job-site-events.js.map +1 -0
- package/src/lib/jobs/ai-job-site-step.d.ts +9 -3
- package/src/lib/jobs/ai-job-site-step.js +63 -17
- package/src/lib/jobs/ai-job-site-step.js.map +1 -1
- package/src/lib/jobs/ai-job-tracking-step.d.ts +184 -0
- package/src/lib/jobs/ai-job-tracking-step.js +501 -0
- package/src/lib/jobs/ai-job-tracking-step.js.map +1 -0
- package/src/lib/jobs/ai-layout-stock-photos.d.ts +41 -0
- package/src/lib/jobs/ai-layout-stock-photos.js +71 -3
- package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
- package/src/lib/jobs/ai-site-publish.js +2 -3
- package/src/lib/jobs/ai-site-publish.js.map +1 -1
- package/src/lib/jobs/ai-stock-photo-picker.d.ts +24 -0
- package/src/lib/jobs/ai-stock-photo-picker.js +108 -0
- package/src/lib/jobs/ai-stock-photo-picker.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.d.ts +37 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js +47 -0
- package/src/lib/jobs/fixtures/ai-jazz-events-build-plan-recording.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.d.ts +21 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js +128 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3760-recordings.js.map +1 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.d.ts +21 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.js +126 -0
- package/src/lib/jobs/fixtures/ai-stock-photo-agl3769-recordings.js.map +1 -0
- package/src/lib/layout-language/ai-layout-compiler.d.ts +10 -4
- package/src/lib/layout-language/ai-layout-compiler.js +38 -19
- package/src/lib/layout-language/ai-layout-compiler.js.map +1 -1
- package/src/lib/layout-language/ai-layout-frame.d.ts +7 -5
- package/src/lib/layout-language/ai-layout-frame.js +12 -9
- package/src/lib/layout-language/ai-layout-frame.js.map +1 -1
- package/src/lib/layout-language/ai-layout-gaps.js +3 -1
- package/src/lib/layout-language/ai-layout-gaps.js.map +1 -1
- package/src/lib/layout-language/ai-layout-labels.d.ts +70 -0
- package/src/lib/layout-language/ai-layout-labels.js +162 -0
- package/src/lib/layout-language/ai-layout-labels.js.map +1 -0
- package/src/lib/layout-language/ai-layout-links.js +5 -2
- package/src/lib/layout-language/ai-layout-links.js.map +1 -1
- package/src/lib/layout-language/ai-layout-listings.d.ts +14 -1
- package/src/lib/layout-language/ai-layout-listings.js +32 -5
- package/src/lib/layout-language/ai-layout-listings.js.map +1 -1
- package/src/lib/model/ai-build-event-page.d.ts +70 -0
- package/src/lib/model/ai-build-event-page.js +145 -0
- package/src/lib/model/ai-build-event-page.js.map +1 -0
- package/src/lib/model/ai-build-job.d.ts +21 -0
- package/src/lib/model/ai-build-job.js +39 -0
- package/src/lib/model/ai-build-job.js.map +1 -1
- package/src/lib/model/ai-build-plan.d.ts +25 -14
- package/src/lib/model/ai-build-plan.js +33 -23
- package/src/lib/model/ai-build-plan.js.map +1 -1
- package/src/lib/model/ai-job-activity.js +3 -1
- package/src/lib/model/ai-job-activity.js.map +1 -1
- package/src/lib/model/ai-jobs.types.d.ts +10 -2
- package/src/lib/model/ai-jobs.types.js +3 -1
- package/src/lib/model/ai-jobs.types.js.map +1 -1
- package/src/lib/model/ai-plan-capabilities.d.ts +8 -0
- package/src/lib/model/ai-plan-capabilities.js.map +1 -1
- package/src/lib/model/ai-site-inventory.d.ts +2 -0
- package/src/lib/model/ai-site-inventory.js +5 -0
- package/src/lib/model/ai-site-inventory.js.map +1 -1
- package/src/lib/model/ai-site-job.d.ts +2 -2
- package/src/lib/model/ai-site-job.js +3 -3
- package/src/lib/model/ai-site-job.js.map +1 -1
- package/src/lib/runtime/ai-doctrine-validators.d.ts +25 -3
- package/src/lib/runtime/ai-doctrine-validators.js +53 -6
- package/src/lib/runtime/ai-doctrine-validators.js.map +1 -1
- package/src/lib/runtime/ai-doctrine.d.ts +6 -1
- package/src/lib/runtime/ai-doctrine.js +13 -9
- package/src/lib/runtime/ai-doctrine.js.map +1 -1
- package/src/lib/runtime/ai-eval-live.d.ts +1 -1
- package/src/lib/runtime/ai-eval-live.js +1 -1
- package/src/lib/runtime/ai-eval-live.js.map +1 -1
- package/src/lib/runtime/ai-palette.d.ts +3 -1
- package/src/lib/runtime/ai-palette.generated.js +498 -10
- package/src/lib/runtime/ai-palette.generated.js.map +1 -1
- package/src/lib/runtime/ai-palette.js +5 -3
- package/src/lib/runtime/ai-palette.js.map +1 -1
- package/src/lib/runtime/ai-template-examples.js +8 -2
- package/src/lib/runtime/ai-template-examples.js.map +1 -1
- package/src/lib/server.js +8 -0
- package/src/lib/server.js.map +1 -1
|
@@ -0,0 +1,239 @@
|
|
|
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 { PluginAiCapabilityArgsSchema } from '@aglyn/aglyn/plugin-manager/plugin-ai-capabilities';
|
|
18
|
+
import { getLockdownVerdict } from '@aglyn/tenant-data-admin/server/lockdown';
|
|
19
|
+
import { resolveOrgIdForHost } from '@aglyn/tenant-data-admin/server/organizations';
|
|
20
|
+
import { type Firestore } from 'firebase-admin/firestore';
|
|
21
|
+
import { type AiJobAdmission } from './ai-job-admission';
|
|
22
|
+
import type { AiJobStepRunner } from './ai-job-text-step';
|
|
23
|
+
/**
|
|
24
|
+
* The `media` step (AGL-3752): organizing files already in a site's own media
|
|
25
|
+
* library — the folder each is filed in, its tags, its alt text and its name —
|
|
26
|
+
* as a first-class build operation, so "put the kiln photos in a Studio
|
|
27
|
+
* folder", "tag these portfolio" or "write the missing alt text" is one item
|
|
28
|
+
* on Assist's plan card.
|
|
29
|
+
*
|
|
30
|
+
* NO MODEL. The planner wrote the values as the item's arguments; this holds
|
|
31
|
+
* each to the rule the media library's own controls hold it to and writes it,
|
|
32
|
+
* so it costs no credits.
|
|
33
|
+
*
|
|
34
|
+
* ── Only the library's own fields ────────────────────────────────────────
|
|
35
|
+
*
|
|
36
|
+
* Exactly what the Details drawer and the grid's bulk actions write on a
|
|
37
|
+
* file's document: `fileName` (200), `alt` (`MEDIA_ALT_MAX_LENGTH`), `tags`
|
|
38
|
+
* (`normalizeMediaTags`: lower case, 20 of 40 characters), and `folderId`
|
|
39
|
+
* with the legacy `folder` name beside it, with the library's filter and
|
|
40
|
+
* search keys re-derived from the document as the write leaves it
|
|
41
|
+
* (`mediaFilterKeys`). A new folder is the New folder button's: a
|
|
42
|
+
* `mediaFolders` document made by `newMediaFolderDoc`, its name held by
|
|
43
|
+
* `normalizeFolderName`, unique among its siblings without case, at most
|
|
44
|
+
* `MEDIA_FOLDER_MAX_DEPTH` deep. Filing a file writes its folder as the
|
|
45
|
+
* drawer's save does; the stored object takes the folder's path the next time
|
|
46
|
+
* that folder is moved or renamed, as after a drawer save. Its address never
|
|
47
|
+
* changes, so no page that uses it breaks.
|
|
48
|
+
*
|
|
49
|
+
* NEVER: uploading, copying, replacing or deleting a file, its bytes or the
|
|
50
|
+
* details inside them, its sharing or privacy, renaming or deleting a folder,
|
|
51
|
+
* or anything in the organization's shared library (every site of the
|
|
52
|
+
* workspace uses it). Those are not arguments.
|
|
53
|
+
*
|
|
54
|
+
* ── Alt text ─────────────────────────────────────────────────────────────
|
|
55
|
+
*
|
|
56
|
+
* Alt text describes ONE image: `alt` is for one image the request says what
|
|
57
|
+
* it shows. `altFromDetails` writes a missing alt from what the library
|
|
58
|
+
* already holds about the image — its description, or the caption, headline
|
|
59
|
+
* or title inside the file — and names the images that hold none. Never the
|
|
60
|
+
* file name, which read aloud is worse than silence (`inheritedMediaAlt`).
|
|
61
|
+
* The library's alt is what a placement takes when the image is placed;
|
|
62
|
+
* placements made before keep their own.
|
|
63
|
+
*
|
|
64
|
+
* ── Who may ──────────────────────────────────────────────────────────────
|
|
65
|
+
*
|
|
66
|
+
* The rules' own for a site library (`canWriteHostContent`,
|
|
67
|
+
* `hostWritesFrozen`): a member with the admin, editor or author role, while
|
|
68
|
+
* no lockdown freezes the site, its org or the platform. Asked at the door,
|
|
69
|
+
* before the write, and the role again inside the transaction that writes.
|
|
70
|
+
*
|
|
71
|
+
* ── Idempotent ───────────────────────────────────────────────────────────
|
|
72
|
+
*
|
|
73
|
+
* One transaction reads the files and folders as they are stored and writes
|
|
74
|
+
* only what differs; a folder of the asked name is found before one is made.
|
|
75
|
+
* A pass asked again writes nothing.
|
|
76
|
+
*/
|
|
77
|
+
export declare const AI_MEDIA_KIND: "media";
|
|
78
|
+
/** ASSUMED: the site, the org, up to 20 file lookups and one transaction. No model. */
|
|
79
|
+
export declare const AI_JOB_MEDIA_STEP_MINIMUM_MS = 8000;
|
|
80
|
+
export declare const AI_MEDIA_NO_SITE_COPY = "Open the site whose media library should change.";
|
|
81
|
+
export declare const AI_MEDIA_ROLE_COPY = "Organizing the media library needs the admin, editor or author role on this site.";
|
|
82
|
+
export declare const AI_MEDIA_LOCKED_COPY = "This site is not accepting changes right now.";
|
|
83
|
+
export declare const AI_MEDIA_NOTHING_COPY = "The request named no file in the media library and no change this could make to it.";
|
|
84
|
+
/** Where a person finds what the op changed. */
|
|
85
|
+
export declare const AI_MEDIA_WHERE = "the site\u2019s Media library";
|
|
86
|
+
/** The output's fixed id: one site's library, whatever changed. */
|
|
87
|
+
export declare const AI_MEDIA_OUTPUT_ID = "library";
|
|
88
|
+
/** The library's own limits, each from the control that edits the field. */
|
|
89
|
+
export declare const AI_MEDIA_LIMITS: {
|
|
90
|
+
/** Files one item may name or select. */
|
|
91
|
+
readonly files: 20;
|
|
92
|
+
/** The Details drawer's file name. */
|
|
93
|
+
readonly fileName: 200;
|
|
94
|
+
readonly alt: 300;
|
|
95
|
+
readonly tags: 20;
|
|
96
|
+
readonly tag: 40;
|
|
97
|
+
/** A folder path: five names of 60 and their separators. */
|
|
98
|
+
readonly folder: number;
|
|
99
|
+
};
|
|
100
|
+
/** The item's arguments, as the planner fills them in. */
|
|
101
|
+
export declare const AI_MEDIA_ARGS_SCHEMA: PluginAiCapabilityArgsSchema;
|
|
102
|
+
/** What an item asks, each value read and held to the library's rule. */
|
|
103
|
+
export interface AiMediaRequest {
|
|
104
|
+
files: string[];
|
|
105
|
+
missingAlt: boolean;
|
|
106
|
+
/** The folder path's names, root first. */
|
|
107
|
+
folder?: string[];
|
|
108
|
+
addTags: string[];
|
|
109
|
+
removeTags: string[];
|
|
110
|
+
rename?: string;
|
|
111
|
+
alt?: string;
|
|
112
|
+
altFromDetails: boolean;
|
|
113
|
+
}
|
|
114
|
+
export interface AiMediaRead {
|
|
115
|
+
request: AiMediaRequest;
|
|
116
|
+
problems: string[];
|
|
117
|
+
}
|
|
118
|
+
/** A folder path's names, root first, or a sentence saying why it cannot be one. */
|
|
119
|
+
export declare function aiMediaFolderPathOf(value: string): string[] | {
|
|
120
|
+
error: string;
|
|
121
|
+
};
|
|
122
|
+
/** Why this alt text describes nothing, or `null`. */
|
|
123
|
+
export declare function aiMediaAltProblem(alt: string, fileName: string): string | null;
|
|
124
|
+
/** The item's arguments read: what may be written, and a sentence for each that may not. */
|
|
125
|
+
export declare function aiMediaRequestOf(inputs: Readonly<Record<string, unknown>> | null | undefined): AiMediaRead;
|
|
126
|
+
/** Whether a read request names files and a change to make to them. */
|
|
127
|
+
export declare function aiMediaRequestEmpty(request: AiMediaRequest): boolean;
|
|
128
|
+
/** A site library row, as the op reads it. */
|
|
129
|
+
export interface AiMediaRow {
|
|
130
|
+
id: string;
|
|
131
|
+
/** The document as stored, which the filter keys are derived from. */
|
|
132
|
+
data: Record<string, unknown>;
|
|
133
|
+
}
|
|
134
|
+
/** A media folder, as the op reads it. */
|
|
135
|
+
export interface AiMediaFolderRow {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
parentId: string | null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The file a name or id names among the rows read from the site's library:
|
|
142
|
+
* never a deleted one. Its id wins over a file name; two files of one name
|
|
143
|
+
* are refused in words.
|
|
144
|
+
*/
|
|
145
|
+
export declare function aiMediaFileOf(source: string, rows: readonly AiMediaRow[]): AiMediaRow | {
|
|
146
|
+
error: string;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Alt text written from what the library already holds about an image: its
|
|
150
|
+
* own description, else the caption, headline or title read from inside the
|
|
151
|
+
* file (only while that record still describes the file's bytes). `null`
|
|
152
|
+
* when it holds none that says what the image shows.
|
|
153
|
+
*/
|
|
154
|
+
export declare function aiMediaAltFromDetails(row: AiMediaRow): string | null;
|
|
155
|
+
/** A folder to make: its name, and its parent's id or its index among those made before it. */
|
|
156
|
+
export interface AiMediaFolderCreate {
|
|
157
|
+
name: string;
|
|
158
|
+
parent: {
|
|
159
|
+
id: string | null;
|
|
160
|
+
} | {
|
|
161
|
+
made: number;
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Where a folder path lands: the existing folders it walks, matched without
|
|
166
|
+
* case among siblings as the library's sibling rule matches them, and the
|
|
167
|
+
* folders left to make below the last one found.
|
|
168
|
+
*/
|
|
169
|
+
export declare function aiMediaFolderPlan(path: readonly string[], folders: readonly AiMediaFolderRow[]): {
|
|
170
|
+
existingId: string | null;
|
|
171
|
+
create: AiMediaFolderCreate[];
|
|
172
|
+
};
|
|
173
|
+
/** One file's change: the fields to write and the sentences that say it. */
|
|
174
|
+
export interface AiMediaFileChange {
|
|
175
|
+
update: Record<string, unknown>;
|
|
176
|
+
said: string[];
|
|
177
|
+
notDone: string[];
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* What the request changes on one file, compared with what is stored: only
|
|
181
|
+
* the fields that differ, with the filter keys re-derived from the document
|
|
182
|
+
* as the change leaves it, exactly as the Details drawer derives them.
|
|
183
|
+
*/
|
|
184
|
+
export declare function aiMediaFileChange(row: AiMediaRow, request: AiMediaRequest, folder: {
|
|
185
|
+
id: string;
|
|
186
|
+
name: string;
|
|
187
|
+
} | null): AiMediaFileChange;
|
|
188
|
+
export type AiMediaWrite = {
|
|
189
|
+
ok: true;
|
|
190
|
+
done: string[];
|
|
191
|
+
notDone: string[];
|
|
192
|
+
changedFiles: number;
|
|
193
|
+
madeFolders: string[];
|
|
194
|
+
altChanged: boolean;
|
|
195
|
+
} | {
|
|
196
|
+
ok: false;
|
|
197
|
+
error: string;
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* The library change, written in one transaction that reads the site, its
|
|
201
|
+
* folders and the named files as they are stored NOW: the member still holds
|
|
202
|
+
* a write role, a folder of the asked name is used before one is made, and
|
|
203
|
+
* only fields that differ are written.
|
|
204
|
+
*/
|
|
205
|
+
export declare function writeAiMediaChanges(firestore: Firestore, input: {
|
|
206
|
+
hostId: string;
|
|
207
|
+
uid: string;
|
|
208
|
+
request: AiMediaRequest;
|
|
209
|
+
now: Date;
|
|
210
|
+
}): Promise<AiMediaWrite>;
|
|
211
|
+
/** Why this member may not organize this site's library now, or `null`. */
|
|
212
|
+
export declare function aiMediaAccessRefusal(input: {
|
|
213
|
+
host: FirebaseFirestore.DocumentSnapshot;
|
|
214
|
+
uid: string;
|
|
215
|
+
org: object | null;
|
|
216
|
+
}, deps?: {
|
|
217
|
+
lockdown?: typeof getLockdownVerdict;
|
|
218
|
+
}): Promise<string | null>;
|
|
219
|
+
/** The output's note: what changed, that it is live, and what was not done. */
|
|
220
|
+
export declare function aiMediaOutputNote(done: readonly string[], notDone: readonly string[], altChanged: boolean): string;
|
|
221
|
+
export interface AiJobMediaStepDeps {
|
|
222
|
+
write?: typeof writeAiMediaChanges;
|
|
223
|
+
lockdown?: typeof getLockdownVerdict;
|
|
224
|
+
}
|
|
225
|
+
export declare function createAiJobMediaStep(deps?: AiJobMediaStepDeps): AiJobStepRunner;
|
|
226
|
+
export declare const runAiJobMediaStep: AiJobStepRunner;
|
|
227
|
+
export interface AiMediaJobAdmissionDeps {
|
|
228
|
+
ownerOf?: typeof resolveOrgIdForHost;
|
|
229
|
+
lockdown?: typeof getLockdownVerdict;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* A library change is admitted on a site of the job's own org, for a member
|
|
233
|
+
* who may write its library now, where the request names files and a change
|
|
234
|
+
* this can make. Refused in those words before anything is written.
|
|
235
|
+
*/
|
|
236
|
+
export declare function createAiMediaJobAdmission(deps?: AiMediaJobAdmissionDeps): AiJobAdmission;
|
|
237
|
+
export declare const aiMediaJobAdmission: AiJobAdmission;
|
|
238
|
+
/** Registers the media library step and its door (AGL-3752). */
|
|
239
|
+
export declare function registerAiMediaJob(): void;
|