@yugoo-design/dsh-design-studio-dsh 0.1.2 → 0.2.2

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.
Files changed (56) hide show
  1. package/README.md +438 -3
  2. package/lib/authoring/panel-components.json +10790 -0
  3. package/lib/authoring/studio-creators/material.json +1 -0
  4. package/lib/authoring-agent-vc786tS0.js +648 -0
  5. package/lib/authoring-agent.d.ts +24 -0
  6. package/lib/authoring-agent.js +2 -0
  7. package/lib/authoring-agent.types-0S0xnlDW.d.ts +87 -0
  8. package/lib/authoring-entry.d.ts +20 -0
  9. package/lib/authoring-entry.js +77 -0
  10. package/lib/authoring-host-m8-GmXIx.js +348 -0
  11. package/lib/authoring-host.d.ts +5 -0
  12. package/lib/authoring-host.js +2 -0
  13. package/lib/authoring-host.types-BZt9l0xK.d.ts +77 -0
  14. package/lib/authoring-reference-store.d.ts +39 -0
  15. package/lib/authoring-reference-store.js +385 -0
  16. package/lib/authoring-service-WClXJGik.js +347 -0
  17. package/lib/authoring-service.d.ts +121 -0
  18. package/lib/authoring-service.js +2 -0
  19. package/lib/authoring-session.d.ts +5 -0
  20. package/lib/authoring-session.js +204 -0
  21. package/lib/authoring-session.types-C6HosIWU.d.ts +58 -0
  22. package/lib/authoring-sources-BzRuEuub.d.ts +17 -0
  23. package/lib/authoring-sources.d.ts +2 -0
  24. package/lib/authoring-sources.js +95 -0
  25. package/lib/authoring-workbench.d.ts +15 -0
  26. package/lib/authoring-workbench.js +782 -0
  27. package/lib/authoring.page-rpc-CYYWsmxc.d.ts +30 -0
  28. package/lib/authoring.page-rpc.d.ts +2 -0
  29. package/lib/authoring.page-rpc.js +55 -0
  30. package/lib/authoring.remote-client.d.ts +2557 -0
  31. package/lib/authoring.remote-client.js +435 -0
  32. package/lib/client-adapter-BmIzQcMT.d.ts +65 -0
  33. package/lib/client-adapter.d.ts +2 -64
  34. package/lib/client.js +1 -2
  35. package/lib/css-assets/dsh-design-studio-page/9178281a0695f79ff8bff8eca529231b67f896dc1c12c8dbaaad24b32dd3fc07.eot +0 -0
  36. package/lib/css-assets/dsh-design-studio-page/b366faf39f6bcc48f10b10f2860e5ebe57091cb2a15beeed8a0977e24560bbba.svg +224 -0
  37. package/lib/css-assets/dsh-design-studio-page/manifest.json +20 -0
  38. package/lib/index.js +4 -105
  39. package/lib/kit-files-DKBlBOG8.js +159 -0
  40. package/lib/page-client.js +4 -23849
  41. package/lib/page-path-BkPiqrUH.d.ts +25 -0
  42. package/lib/page-path.d.ts +2 -2
  43. package/lib/page-path.js +70 -2
  44. package/lib/page-rpc-DXbf4seT.d.ts +24 -0
  45. package/lib/page-rpc.d.ts +2 -15
  46. package/lib/page-rpc.js +9 -4
  47. package/lib/page.d.ts +5 -3
  48. package/lib/page.js +219 -2
  49. package/lib/remote-method-ab_lHwWN.js +16 -0
  50. package/lib/typert.host.d.ts +827 -2
  51. package/lib/typert.host.js +2 -1
  52. package/lib/typert.remote-client-CWz-anTr.d.ts +37 -0
  53. package/lib/typert.remote-client.d.ts +1 -36
  54. package/licenses/dsh-distribution.json +8644 -149
  55. package/package.json +73 -10
  56. package/lib/page-path-wn8e_fid.d.ts +0 -14
@@ -0,0 +1,204 @@
1
+ import { t as createStudioAuthoringAgent } from "./authoring-agent-vc786tS0.js";
2
+ import { normalizeStudioInstanceChanges } from "@yugoo-design/dsh-design-studio";
3
+ import { isAbsolute } from "node:path";
4
+ import assert from "node:assert/strict";
5
+ import { createStudioAuthoring } from "@yugoo-design/dsh-design-studio/node";
6
+ //#region src/authoring-session.ts
7
+ /** Trusted live parent -> existing S2 capability -> H2. No storage or model client. */
8
+ const clone = (value) => structuredClone(value);
9
+ const samePin = (a, b) => a?.name === b?.name && a?.version === b?.version;
10
+ const key = (ref) => `${ref.sessionId}:${ref.epoch}`;
11
+ /** Snapshot all caller intent before the first native or source await. */
12
+ function snapshot(request) {
13
+ const { invocationId, prompt, signal, onPrepared } = request;
14
+ assert.ok(typeof invocationId === "string" && invocationId.length > 0 && invocationId.length <= 128, "An exact invocation identity is required");
15
+ assert.ok(typeof prompt === "string" && prompt.trim() && Buffer.byteLength(prompt) <= 131072, "A bounded new authoring prompt is required");
16
+ assert.ok(onPrepared === void 0 || typeof onPrepared === "function");
17
+ assert.ok(Array.isArray(request.paths), "Select source paths in this working copy");
18
+ const normalized = normalizeStudioInstanceChanges({
19
+ id: request.id,
20
+ expectedRevision: request.expectedRevision,
21
+ changes: request.paths.map((path) => ({
22
+ path,
23
+ content: ""
24
+ })),
25
+ ...request.bundle ? { bundle: request.bundle } : {}
26
+ });
27
+ return Object.freeze({
28
+ invocationId,
29
+ prompt,
30
+ signal,
31
+ onPrepared,
32
+ id: normalized.id,
33
+ expectedRevision: normalized.expectedRevision,
34
+ paths: Object.freeze(normalized.changes.map((change) => change.path)),
35
+ ...normalized.bundle ? { bundle: normalized.bundle } : {}
36
+ });
37
+ }
38
+ function createStudioAuthoringSession(options) {
39
+ const { ctx, parent, instances, readComponents, workspaceRoot, retainReference } = options;
40
+ assert.ok(isAbsolute(workspaceRoot), "A trusted isolated workspace is required");
41
+ assert.equal(typeof retainReference, "function", "The caller must retain native references before dispatch");
42
+ assert.ok(ctx.agents.get(parent.id) === parent, "The exact native authoring parent is disconnected");
43
+ const source = {
44
+ read: instances.read.bind(instances),
45
+ readFile: instances.readFile.bind(instances),
46
+ ...instances.readMountedBundle ? { readMountedBundle: instances.readMountedBundle.bind(instances) } : {},
47
+ prepareChanges: instances.prepareChanges.bind(instances)
48
+ };
49
+ const native = createStudioAuthoringAgent(ctx), lifetime = new AbortController();
50
+ const owned = /* @__PURE__ */ new Map();
51
+ const parentIsLive = () => assert.ok(ctx.agents.get(parent.id) === parent, "The exact native authoring parent is disconnected");
52
+ const active = () => {
53
+ lifetime.signal.throwIfAborted();
54
+ parentIsLive();
55
+ };
56
+ parentIsLive();
57
+ const referenceForParent = (value) => {
58
+ const ref = clone(value);
59
+ assert.equal(ref.parentSessionId, String(parent.id), "Authoring reference belongs to another native parent");
60
+ return ref;
61
+ };
62
+ const ownedRun = (value) => {
63
+ active();
64
+ const ref = referenceForParent(value), run = owned.get(key(ref));
65
+ assert.ok(run, "No exact owned authoring run; cold references permit observation only");
66
+ assert.deepEqual(ref, run.reference, "Authoring reference differs from the exact owned run");
67
+ return run;
68
+ };
69
+ const observe = async (value) => {
70
+ parentIsLive();
71
+ const ref = referenceForParent(value), result = await native.observe(ref);
72
+ parentIsLive();
73
+ return result;
74
+ };
75
+ const readCurrent = (id, signal) => new Promise((resolve, reject) => {
76
+ signal.throwIfAborted();
77
+ const abort = () => reject(signal.reason);
78
+ signal.addEventListener("abort", abort, { once: true });
79
+ Promise.resolve().then(() => {
80
+ signal.throwIfAborted();
81
+ return source.read({ id });
82
+ }).then((value) => {
83
+ signal.removeEventListener("abort", abort);
84
+ resolve(value);
85
+ }, (error) => {
86
+ signal.removeEventListener("abort", abort);
87
+ reject(error);
88
+ });
89
+ });
90
+ const project = (value, scope) => {
91
+ assert.ok(value && typeof value === "object");
92
+ const raw = value;
93
+ assert.deepEqual(raw.scope, scope, "Prepared scope differs from the native binding");
94
+ const request = normalizeStudioInstanceChanges(raw.request), candidate = raw.candidate;
95
+ assert.deepEqual(request, raw.request);
96
+ assert.equal(request.id, scope.id);
97
+ assert.equal(request.expectedRevision, scope.expectedRevision);
98
+ assert.ok(samePin(request.bundle, scope.bundle));
99
+ assert.equal(candidate.id, scope.id);
100
+ assert.equal(candidate.baseRevision, scope.expectedRevision);
101
+ assert.equal(candidate.revision, scope.expectedRevision + 1);
102
+ assert.ok(/^[a-f0-9]{64}$/.test(candidate.digest));
103
+ return clone({
104
+ request,
105
+ candidate
106
+ });
107
+ };
108
+ const begin = async (input, previous) => {
109
+ active();
110
+ const request = snapshot(input), prior = previous === void 0 ? void 0 : referenceForParent(previous);
111
+ const signal = request.signal ? AbortSignal.any([request.signal, lifetime.signal]) : lifetime.signal;
112
+ signal.throwIfAborted();
113
+ if (prior) assert.equal(prior.scope.id, request.id, "Resume cannot select another working copy");
114
+ const record = await readCurrent(request.id, signal);
115
+ active();
116
+ signal.throwIfAborted();
117
+ assert.equal(record.id, request.id);
118
+ assert.equal(record.revision, request.expectedRevision, "Working copy changed; reopen before authoring");
119
+ assert.ok(record.recordVersion === 2 && !record.deletedAt && Array.isArray(record.files), "Select a current complete-source working copy");
120
+ for (const path of request.paths) assert.ok(!record.files.some((file) => file.path === path && !file.editable), "Select an editable source path in this exact working copy");
121
+ const bundle = record.kind === "bundle" ? record.bundle : request.bundle;
122
+ assert.ok(record.kind === "bundle" ? bundle && (request.bundle === void 0 || samePin(request.bundle, bundle)) : bundle === void 0 || record.mounts.some((mount) => samePin(mount.bundle, bundle)), "Select the exact Bundle or an explicit mounted Bundle for this Kit");
123
+ const scope = Object.freeze({
124
+ id: record.id,
125
+ expectedRevision: record.revision,
126
+ allowedPaths: request.paths,
127
+ ...bundle ? { bundle: Object.freeze({ ...bundle }) } : {}
128
+ });
129
+ const capability = createStudioAuthoring({
130
+ scope,
131
+ instances: source,
132
+ readComponents
133
+ });
134
+ const nativeRequest = {
135
+ parent,
136
+ invocationId: request.invocationId,
137
+ workspaceRoot,
138
+ scope,
139
+ prompt: request.prompt,
140
+ signal,
141
+ ports: {
142
+ read: (input) => capability.read(input),
143
+ prepare: (input) => capability.prepare(input)
144
+ },
145
+ onReference: async (value) => {
146
+ active();
147
+ assert.deepEqual(value.scope, scope);
148
+ referenceForParent(value);
149
+ await retainReference(clone(value));
150
+ active();
151
+ },
152
+ onPrepared: (value) => {
153
+ active();
154
+ return request.onPrepared?.(project(value, scope));
155
+ }
156
+ };
157
+ const run = prior ? await native.resume({
158
+ ...nativeRequest,
159
+ previous: prior,
160
+ explicit: true
161
+ }) : await native.start(nativeRequest);
162
+ try {
163
+ active();
164
+ signal.throwIfAborted();
165
+ } catch (error) {
166
+ await run.dispose();
167
+ throw error;
168
+ }
169
+ const wrapped = Object.freeze({
170
+ reference: run.reference,
171
+ result: run.result,
172
+ observe: () => observe(run.reference),
173
+ cancel: (input) => {
174
+ active();
175
+ return run.cancel({ expectedTurn: input.expectedTurn });
176
+ },
177
+ readPrepared: () => {
178
+ active();
179
+ const value = run.readPrepared();
180
+ return value === void 0 ? void 0 : project(value, scope);
181
+ }
182
+ });
183
+ owned.set(key(run.reference), wrapped);
184
+ return wrapped;
185
+ };
186
+ const dispose = () => {
187
+ lifetime.abort(/* @__PURE__ */ new Error("Studio authoring session is disposed"));
188
+ return native.dispose();
189
+ };
190
+ ctx.effect(() => dispose);
191
+ return Object.freeze({
192
+ start: (request) => begin(request),
193
+ resume: (request) => {
194
+ assert.equal(request.explicit, true, "Resume requires explicit authorization and a new prompt");
195
+ return begin(request, request.previous);
196
+ },
197
+ observe,
198
+ cancel: (ref, input) => ownedRun(ref).cancel(input),
199
+ readPrepared: (ref) => ownedRun(ref).readPrepared(),
200
+ dispose
201
+ });
202
+ }
203
+ //#endregion
204
+ export { createStudioAuthoringSession };
@@ -0,0 +1,58 @@
1
+ import { r as StudioAuthoringReference, t as StudioAuthoringObservation } from "./authoring-agent.types-0S0xnlDW.js";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ import { DesignBundleVersionPin, StudioInstanceCandidate, StudioInstanceChangeRequest } from "@yugoo-design/dsh-design-studio";
4
+ import { Agent } from "@deepseek-ai/dsh-agent";
5
+ import { StudioAuthoringComponentCatalog, StudioAwaitable, StudioInstances } from "@yugoo-design/dsh-design-studio/node";
6
+ //#region src/authoring-session.types.d.ts
7
+ /** A projection of the existing S2/S1 receipt, not another candidate authority. */
8
+ interface StudioSessionPrepared {
9
+ readonly request: StudioInstanceChangeRequest;
10
+ readonly candidate: StudioInstanceCandidate;
11
+ }
12
+ interface StudioAuthoringSessionOptions {
13
+ readonly ctx: Context;
14
+ readonly parent: Agent;
15
+ readonly instances: Pick<StudioInstances, 'read' | 'readFile' | 'prepareChanges'> & Partial<Pick<StudioInstances, 'readMountedBundle'>>;
16
+ readonly readComponents: () => StudioAwaitable<StudioAuthoringComponentCatalog>;
17
+ /** Host-selected isolated workspace, never a browser-supplied path. */
18
+ readonly workspaceRoot: string;
19
+ /** Caller persists the native address before H2 attempts dispatch. */
20
+ readonly retainReference: (reference: StudioAuthoringReference) => void | Promise<void>;
21
+ }
22
+ interface StudioSessionStart {
23
+ readonly invocationId: string;
24
+ readonly id: string;
25
+ readonly expectedRevision: number;
26
+ readonly paths: readonly string[];
27
+ readonly bundle?: DesignBundleVersionPin;
28
+ readonly prompt: string;
29
+ readonly signal?: AbortSignal;
30
+ readonly onPrepared?: (prepared: StudioSessionPrepared) => void | Promise<void>;
31
+ }
32
+ interface StudioSessionResume extends StudioSessionStart {
33
+ readonly previous: StudioAuthoringReference;
34
+ readonly explicit: true;
35
+ }
36
+ interface StudioSessionRun {
37
+ readonly reference: StudioAuthoringReference;
38
+ /** Native turn outcome, independently of candidate validity or user save. */
39
+ readonly result: Promise<StudioAuthoringObservation>;
40
+ observe(): Promise<StudioAuthoringObservation>;
41
+ cancel(options: {
42
+ readonly expectedTurn: number | null;
43
+ }): Promise<StudioAuthoringObservation>;
44
+ readPrepared(): StudioSessionPrepared | undefined;
45
+ }
46
+ interface StudioAuthoringSession {
47
+ start(request: StudioSessionStart): Promise<StudioSessionRun>;
48
+ resume(request: StudioSessionResume): Promise<StudioSessionRun>;
49
+ observe(reference: StudioAuthoringReference): Promise<StudioAuthoringObservation>;
50
+ /** Only this session object's exact retained run handle can be cancelled. */
51
+ cancel(reference: StudioAuthoringReference, options: {
52
+ readonly expectedTurn: number | null;
53
+ }): Promise<StudioAuthoringObservation>;
54
+ readPrepared(reference: StudioAuthoringReference): StudioSessionPrepared | undefined;
55
+ dispose(): Promise<void>;
56
+ }
57
+ //#endregion
58
+ export { StudioSessionRun as a, StudioSessionResume as i, StudioAuthoringSessionOptions as n, StudioSessionStart as o, StudioSessionPrepared as r, StudioAuthoringSession as t };
@@ -0,0 +1,17 @@
1
+ import DesignService from "@yugoo-design/dsh-design-core";
2
+ import { StudioInstanceAdapters, StudioInstances } from "@yugoo-design/dsh-design-studio/node";
3
+ import { FileSystem } from "@deepseek-ai/dsh-fs";
4
+ //#region src/authoring-sources.d.ts
5
+ interface DshStudioInstanceSources {
6
+ readonly design: Pick<DesignService, 'listBundles' | 'resolveBundle' | 'resolveKit'>;
7
+ readonly fs: FileSystem;
8
+ }
9
+ /** A trusted library source for initial project copies, never a project registry. */
10
+ declare function registerDshStudioCurrentKitSource(design: Pick<DesignService, 'registerCurrentKitSource' | 'listKits'>, instances: Pick<StudioInstances, 'list' | 'editCurrent' | 'loadKit'>): () => void;
11
+ /**
12
+ * No source discovery, Node source I/O, stateRoot or native session. S2 remains
13
+ * the compiler, snapshot, composition and save owner, including its list policy.
14
+ */
15
+ declare function createDshStudioInstanceAdapters({ design, fs }: DshStudioInstanceSources): StudioInstanceAdapters;
16
+ //#endregion
17
+ export { createDshStudioInstanceAdapters as n, registerDshStudioCurrentKitSource as r, DshStudioInstanceSources as t };
@@ -0,0 +1,2 @@
1
+ import { n as createDshStudioInstanceAdapters, r as registerDshStudioCurrentKitSource, t as DshStudioInstanceSources } from "./authoring-sources-BzRuEuub.js";
2
+ export { DshStudioInstanceSources, createDshStudioInstanceAdapters, registerDshStudioCurrentKitSource };
@@ -0,0 +1,95 @@
1
+ import { n as openInstalledSourceFiles, t as kitFileError } from "./kit-files-DKBlBOG8.js";
2
+ import { DesignKitVersion } from "@yugoo-design/dsh-design-core";
3
+ import { createStudioInstanceAdapters } from "@yugoo-design/dsh-design-studio/node";
4
+ //#region src/authoring-sources.ts
5
+ /** A trusted library source for initial project copies, never a project registry. */
6
+ function registerDshStudioCurrentKitSource(design, instances) {
7
+ const records = async () => (await instances.list({
8
+ kind: "kit",
9
+ includeReadiness: false
10
+ })).filter((record) => record.kit);
11
+ return design.registerCurrentKitSource({
12
+ async load(name) {
13
+ const matches = (await records()).filter((record) => record.kit.name === name);
14
+ const selected = matches.find((record) => record.current) ?? matches[0];
15
+ if (selected) return instances.loadKit({
16
+ id: selected.id,
17
+ expectedRevision: selected.revision
18
+ });
19
+ const installed = design.listKits().find((kit) => kit.name === name);
20
+ if (!installed) return void 0;
21
+ const current = await instances.editCurrent({
22
+ kind: "kit",
23
+ kit: {
24
+ name: installed.name,
25
+ version: String(installed.version)
26
+ }
27
+ });
28
+ return instances.loadKit({
29
+ id: current.id,
30
+ expectedRevision: current.revision
31
+ });
32
+ },
33
+ async list() {
34
+ return (await records()).map((record) => {
35
+ const description = [...new Set([
36
+ record.title?.zh,
37
+ record.title?.en,
38
+ record.description
39
+ ].filter(Boolean))].join(" · ");
40
+ return {
41
+ name: record.kit.name,
42
+ version: record.kit.version,
43
+ ...description ? { description } : {}
44
+ };
45
+ });
46
+ }
47
+ });
48
+ }
49
+ /**
50
+ * No source discovery, Node source I/O, stateRoot or native session. S2 remains
51
+ * the compiler, snapshot, composition and save owner, including its list policy.
52
+ */
53
+ function createDshStudioInstanceAdapters({ design, fs }) {
54
+ const unavailable = (message) => kitFileError("studio.source_unavailable", message);
55
+ const bundle = (pin) => {
56
+ const content = design.resolveBundle(pin);
57
+ if (!content) throw unavailable(`Independent Bundle ${pin.name}@${pin.version} is not registered.`);
58
+ if ((content.skill.catalogName ?? content.skill.name) !== pin.name || String(content.skill.version) !== pin.version) throw kitFileError("studio.source_pin_mismatch", "Resolved Bundle differs from the exact requested pin.");
59
+ if (typeof content.sourceId !== "string" || !content.sourceId || content.sourceId.length > 4096 || /[\u0000-\u001f\u007f]/u.test(content.sourceId)) throw unavailable("Registered Bundle has no valid trusted sourceId.");
60
+ if (typeof content.resourceRoot !== "string" || !content.resourceRoot) throw unavailable("Registered Bundle has no resourceRoot.");
61
+ return {
62
+ sourceId: content.sourceId,
63
+ root: content.resourceRoot
64
+ };
65
+ };
66
+ return createStudioInstanceAdapters({
67
+ async listBundles() {
68
+ const skills = design.listBundles();
69
+ if (skills.length > 1024) throw kitFileError("studio.source_limit", "Bundle catalog exceeds 1024 entries.");
70
+ return skills.map((skill) => ({
71
+ name: skill.catalogName ?? skill.name,
72
+ version: String(skill.version)
73
+ })).filter((pin) => design.resolveBundle(pin) !== void 0).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : a.version < b.version ? -1 : a.version > b.version ? 1 : 0);
74
+ },
75
+ async captureBundle(pin) {
76
+ const { root, sourceId } = bundle(pin);
77
+ return {
78
+ sourceId,
79
+ files: await (await openInstalledSourceFiles(fs, root)).captureTree()
80
+ };
81
+ },
82
+ async captureKit(pin) {
83
+ const kit = design.resolveKit({
84
+ kit: pin.name,
85
+ version: DesignKitVersion(pin.version)
86
+ });
87
+ if (!kit) throw unavailable(`Kit ${pin.name}@${pin.version} is not registered.`);
88
+ if (kit.name !== pin.name || String(kit.version) !== pin.version) throw kitFileError("studio.source_pin_mismatch", "Resolved Kit differs from the exact requested pin.");
89
+ if (typeof kit.sourceRoot !== "string" || !kit.sourceRoot) throw unavailable("Registered Kit has no sourceRoot.");
90
+ return { files: await (await openInstalledSourceFiles(fs, kit.sourceRoot, "Kit")).captureTree() };
91
+ }
92
+ });
93
+ }
94
+ //#endregion
95
+ export { createDshStudioInstanceAdapters, registerDshStudioCurrentKitSource };
@@ -0,0 +1,15 @@
1
+ import { a as StudioPreparedLocator } from "./authoring-host.types-BZt9l0xK.js";
2
+ import { n as StudioPageAuthoringClient } from "./authoring.page-rpc-CYYWsmxc.js";
3
+ import { InstanceWorkbenchProps } from "@yugoo-design/dsh-design-studio-ui";
4
+ //#region src/authoring-workbench.d.ts
5
+ interface StudioAuthoringWorkbenchProps extends Omit<InstanceWorkbenchProps, 'client' | 'renderSupplement' | 'embedded' | 'initialView' | 'sourceChanges'> {
6
+ /** Already scoped to the native parent by the page. Identity changes invalidate this open editor. */
7
+ client: StudioPageAuthoringClient;
8
+ presentation?: 'content-only' | 'full';
9
+ preparedLocator?: StudioPreparedLocator;
10
+ initialPrompt?: string;
11
+ }
12
+ declare const StudioAuthoringPromptContext: import("react").Context<string | undefined>;
13
+ declare function StudioAuthoringWorkbench(props: StudioAuthoringWorkbenchProps): import("react").JSX.Element;
14
+ //#endregion
15
+ export { StudioAuthoringPromptContext, StudioAuthoringWorkbench, StudioAuthoringWorkbenchProps };