@avocadostudio-ai/orchestrator-core 0.1.0
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/LICENSE +201 -0
- package/dist/agent/agent-context.d.ts +19 -0
- package/dist/agent/agent-context.js +67 -0
- package/dist/agent/agent-logger.d.ts +5 -0
- package/dist/agent/agent-logger.js +22 -0
- package/dist/agent/agent-loop-openai.d.ts +8 -0
- package/dist/agent/agent-loop-openai.js +172 -0
- package/dist/agent/agent-loop.d.ts +56 -0
- package/dist/agent/agent-loop.js +167 -0
- package/dist/agent/agent-provider.d.ts +28 -0
- package/dist/agent/agent-provider.js +63 -0
- package/dist/agent/agent-tools.d.ts +28 -0
- package/dist/agent/agent-tools.js +899 -0
- package/dist/agent/context/editing-guidelines.md +46 -0
- package/dist/agent/context/role.md +39 -0
- package/dist/agent/integration-prompt.d.ts +9 -0
- package/dist/agent/integration-prompt.js +154 -0
- package/dist/agent/sites-agent-context.d.ts +12 -0
- package/dist/agent/sites-agent-context.js +316 -0
- package/dist/agent/sites-agent-shared.d.ts +161 -0
- package/dist/agent/sites-agent-shared.js +1101 -0
- package/dist/agent/sites-agent-tools.d.ts +18 -0
- package/dist/agent/sites-agent-tools.js +1227 -0
- package/dist/chat/anthropic-cache.d.ts +20 -0
- package/dist/chat/anthropic-cache.js +54 -0
- package/dist/chat/anthropic-planner.d.ts +98 -0
- package/dist/chat/anthropic-planner.js +1012 -0
- package/dist/chat/changelog-coverage-validator.d.ts +37 -0
- package/dist/chat/changelog-coverage-validator.js +215 -0
- package/dist/chat/chat-pipeline-context.d.ts +211 -0
- package/dist/chat/chat-pipeline-context.js +249 -0
- package/dist/chat/chat-pipeline-deterministic.d.ts +61 -0
- package/dist/chat/chat-pipeline-deterministic.js +407 -0
- package/dist/chat/chat-pipeline-image.d.ts +86 -0
- package/dist/chat/chat-pipeline-image.js +897 -0
- package/dist/chat/chat-pipeline-shared.d.ts +69 -0
- package/dist/chat/chat-pipeline-shared.js +212 -0
- package/dist/chat/chat-pipeline-translation.d.ts +27 -0
- package/dist/chat/chat-pipeline-translation.js +417 -0
- package/dist/chat/chat-pipeline-ui.d.ts +14 -0
- package/dist/chat/chat-pipeline-ui.js +244 -0
- package/dist/chat/chat-pipeline.d.ts +99 -0
- package/dist/chat/chat-pipeline.js +3999 -0
- package/dist/chat/decomposer.d.ts +21 -0
- package/dist/chat/decomposer.js +65 -0
- package/dist/chat/gemini-planner.d.ts +70 -0
- package/dist/chat/gemini-planner.js +541 -0
- package/dist/chat/hallucination-validator.d.ts +36 -0
- package/dist/chat/hallucination-validator.js +110 -0
- package/dist/chat/locale-strings.d.ts +47 -0
- package/dist/chat/locale-strings.js +100 -0
- package/dist/chat/plan-json-schema.d.ts +133 -0
- package/dist/chat/plan-json-schema.js +112 -0
- package/dist/chat/planner-types.d.ts +120 -0
- package/dist/chat/planner-types.js +66 -0
- package/dist/chat/planner.d.ts +148 -0
- package/dist/chat/planner.js +1361 -0
- package/dist/chat/prompts.d.ts +67 -0
- package/dist/chat/prompts.js +356 -0
- package/dist/chat/provider-routing.d.ts +14 -0
- package/dist/chat/provider-routing.js +27 -0
- package/dist/chat/variation-pipeline.d.ts +135 -0
- package/dist/chat/variation-pipeline.js +837 -0
- package/dist/chat/vision-alt-generator.d.ts +35 -0
- package/dist/chat/vision-alt-generator.js +152 -0
- package/dist/cms/adapter.d.ts +62 -0
- package/dist/cms/adapter.js +1 -0
- package/dist/cms/bootstrap.d.ts +17 -0
- package/dist/cms/bootstrap.js +85 -0
- package/dist/cms/editor-api-adapter.d.ts +23 -0
- package/dist/cms/editor-api-adapter.js +71 -0
- package/dist/cms/index.d.ts +4 -0
- package/dist/cms/index.js +3 -0
- package/dist/cms/json-file-adapter.d.ts +11 -0
- package/dist/cms/json-file-adapter.js +62 -0
- package/dist/demo-mode.d.ts +59 -0
- package/dist/demo-mode.js +201 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.js +129 -0
- package/dist/http/chat-stream-resumable.d.ts +108 -0
- package/dist/http/chat-stream-resumable.js +290 -0
- package/dist/http/chat-stream.d.ts +99 -0
- package/dist/http/chat-stream.js +92 -0
- package/dist/image/gdrive-client.d.ts +22 -0
- package/dist/image/gdrive-client.js +215 -0
- package/dist/image/image-helpers.d.ts +95 -0
- package/dist/image/image-helpers.js +488 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/jira/jira-approval.d.ts +22 -0
- package/dist/jira/jira-approval.js +51 -0
- package/dist/jira/jira-client.d.ts +44 -0
- package/dist/jira/jira-client.js +313 -0
- package/dist/jira/jira-poller.d.ts +46 -0
- package/dist/jira/jira-poller.js +184 -0
- package/dist/jira/jira-processor.d.ts +103 -0
- package/dist/jira/jira-processor.js +1085 -0
- package/dist/jira/jira-types.d.ts +117 -0
- package/dist/jira/jira-types.js +38 -0
- package/dist/logger.d.ts +12 -0
- package/dist/logger.js +28 -0
- package/dist/migration/mcp-server-stdio.d.ts +8 -0
- package/dist/migration/mcp-server-stdio.js +672 -0
- package/dist/migration/migration-prompt.d.ts +7 -0
- package/dist/migration/migration-prompt.js +197 -0
- package/dist/migration/migration-tools.d.ts +17 -0
- package/dist/migration/migration-tools.js +159 -0
- package/dist/migration/scrape-cache.d.ts +9 -0
- package/dist/migration/scrape-cache.js +19 -0
- package/dist/nlp/deterministic-planner-context.d.ts +141 -0
- package/dist/nlp/deterministic-planner-context.js +362 -0
- package/dist/nlp/deterministic-planner-pages.d.ts +26 -0
- package/dist/nlp/deterministic-planner-pages.js +170 -0
- package/dist/nlp/deterministic-planner-patches.d.ts +80 -0
- package/dist/nlp/deterministic-planner-patches.js +508 -0
- package/dist/nlp/deterministic-planner-refs.d.ts +33 -0
- package/dist/nlp/deterministic-planner-refs.js +164 -0
- package/dist/nlp/deterministic-planner-suggestions.d.ts +49 -0
- package/dist/nlp/deterministic-planner-suggestions.js +579 -0
- package/dist/nlp/deterministic-planner.d.ts +85 -0
- package/dist/nlp/deterministic-planner.js +1631 -0
- package/dist/nlp/intent-detection.d.ts +309 -0
- package/dist/nlp/intent-detection.js +730 -0
- package/dist/nlp/intent-helpers.d.ts +15 -0
- package/dist/nlp/intent-helpers.js +243 -0
- package/dist/nlp/intent-patterns.d.ts +40 -0
- package/dist/nlp/intent-patterns.js +223 -0
- package/dist/nlp/plan-normalizer.d.ts +41 -0
- package/dist/nlp/plan-normalizer.js +1537 -0
- package/dist/ops/destructive-action-gate.d.ts +44 -0
- package/dist/ops/destructive-action-gate.js +90 -0
- package/dist/ops/ops-engine.d.ts +151 -0
- package/dist/ops/ops-engine.js +1394 -0
- package/dist/publish/diff-engine.d.ts +18 -0
- package/dist/publish/diff-engine.js +305 -0
- package/dist/publish/publish-helpers.d.ts +87 -0
- package/dist/publish/publish-helpers.js +521 -0
- package/dist/publish/publish-target-registry.d.ts +7 -0
- package/dist/publish/publish-target-registry.js +61 -0
- package/dist/publish/publish-target.d.ts +81 -0
- package/dist/publish/publish-target.js +1 -0
- package/dist/publish/targets/deploy-hook.d.ts +13 -0
- package/dist/publish/targets/deploy-hook.js +123 -0
- package/dist/publish/targets/git.d.ts +13 -0
- package/dist/publish/targets/git.js +55 -0
- package/dist/publish/targets/site-contract.d.ts +19 -0
- package/dist/publish/targets/site-contract.js +124 -0
- package/dist/state/content-source.d.ts +17 -0
- package/dist/state/content-source.js +1 -0
- package/dist/state/in-memory-content-source.d.ts +27 -0
- package/dist/state/in-memory-content-source.js +51 -0
- package/dist/state/session-lock.d.ts +13 -0
- package/dist/state/session-lock.js +29 -0
- package/dist/state/session-state.d.ts +310 -0
- package/dist/state/session-state.js +1083 -0
- package/dist/state/sqlite-store-singleton.d.ts +31 -0
- package/dist/state/sqlite-store-singleton.js +170 -0
- package/dist/state/sqlite-store.d.ts +135 -0
- package/dist/state/sqlite-store.js +421 -0
- package/dist/telemetry/chat-telemetry.d.ts +105 -0
- package/dist/telemetry/chat-telemetry.js +247 -0
- package/dist/telemetry/eval-candidate-store.d.ts +50 -0
- package/dist/telemetry/eval-candidate-store.js +120 -0
- package/dist/telemetry/feedback-store.d.ts +34 -0
- package/dist/telemetry/feedback-store.js +76 -0
- package/dist/telemetry/jira-telemetry.d.ts +57 -0
- package/dist/telemetry/jira-telemetry.js +68 -0
- package/dist/telemetry/migration-telemetry.d.ts +35 -0
- package/dist/telemetry/migration-telemetry.js +40 -0
- package/dist/telemetry/usage.d.ts +24 -0
- package/dist/telemetry/usage.js +80 -0
- package/dist/tools/builtin-registrations.d.ts +12 -0
- package/dist/tools/builtin-registrations.js +33 -0
- package/dist/tools/builtins/gdrive-browse.d.ts +3 -0
- package/dist/tools/builtins/gdrive-browse.js +68 -0
- package/dist/tools/builtins/image-generate.d.ts +3 -0
- package/dist/tools/builtins/image-generate.js +211 -0
- package/dist/tools/builtins/unsplash-get-by-id.d.ts +23 -0
- package/dist/tools/builtins/unsplash-get-by-id.js +119 -0
- package/dist/tools/builtins/unsplash-search.d.ts +3 -0
- package/dist/tools/builtins/unsplash-search.js +74 -0
- package/dist/tools/executor.d.ts +23 -0
- package/dist/tools/executor.js +169 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +5 -0
- package/dist/tools/registry.d.ts +21 -0
- package/dist/tools/registry.js +75 -0
- package/dist/tools/runtime.d.ts +27 -0
- package/dist/tools/runtime.js +48 -0
- package/dist/tools/schema-validator.d.ts +24 -0
- package/dist/tools/schema-validator.js +88 -0
- package/dist/tools/types.d.ts +86 -0
- package/dist/tools/types.js +1 -0
- package/dist/variation-images.d.ts +19 -0
- package/dist/variation-images.js +12 -0
- package/package.json +78 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { inferBlockTypeFromText } from "./plan-normalizer.js";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Block type inference from message
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export function inferAddedBlockTypeFromMessage(message) {
|
|
6
|
+
const normalized = message.toLowerCase();
|
|
7
|
+
const addMatch = normalized.match(/\b(add|create|insert)\b\s+(?:(?:a|an)\b)?\s*([a-z -]+)/);
|
|
8
|
+
if (!addMatch?.[2])
|
|
9
|
+
return undefined;
|
|
10
|
+
const chunk = addMatch[2]
|
|
11
|
+
.trim()
|
|
12
|
+
.replace(/^(?:new|another)\s+/, "");
|
|
13
|
+
if (chunk.startsWith("card grid") || chunk.startsWith("cardgrid"))
|
|
14
|
+
return "CardGrid";
|
|
15
|
+
if (chunk.startsWith("card"))
|
|
16
|
+
return "Card";
|
|
17
|
+
if (chunk.startsWith("feature grid") || chunk.startsWith("featuregrid") || chunk.startsWith("features"))
|
|
18
|
+
return "FeatureGrid";
|
|
19
|
+
if (chunk.startsWith("testimonial") || chunk.startsWith("social proof") || chunk.startsWith("review") || chunk.startsWith("quote"))
|
|
20
|
+
return "Testimonials";
|
|
21
|
+
if (chunk.startsWith("faq"))
|
|
22
|
+
return "FAQAccordion";
|
|
23
|
+
if (chunk.startsWith("two column") || chunk.startsWith("twocolumn") || chunk.startsWith("2 column"))
|
|
24
|
+
return "TwoColumn";
|
|
25
|
+
if (chunk.startsWith("stats") || chunk.startsWith("statistics") || chunk.startsWith("metrics") || chunk.startsWith("numbers"))
|
|
26
|
+
return "Stats";
|
|
27
|
+
if (chunk.startsWith("cta"))
|
|
28
|
+
return "CTA";
|
|
29
|
+
if (chunk.startsWith("hero"))
|
|
30
|
+
return "Hero";
|
|
31
|
+
if (chunk.startsWith("rich text") || chunk.startsWith("richtext") || chunk.startsWith("rich-text") || chunk.startsWith("prose") || chunk.startsWith("text block") || chunk.startsWith("section") || chunk.startsWith("paragraph") || chunk.startsWith("copy"))
|
|
32
|
+
return "RichText";
|
|
33
|
+
if (chunk.startsWith("benefit") || chunk.startsWith("advantage"))
|
|
34
|
+
return "FeatureGrid";
|
|
35
|
+
if (chunk.startsWith("pricing"))
|
|
36
|
+
return "CardGrid";
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Block reference resolution
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
export function resolveBlockRef(args) {
|
|
43
|
+
const { ref, currentPage, activeBlockId, fallbackType } = args;
|
|
44
|
+
const blocks = currentPage.blocks;
|
|
45
|
+
if (typeof ref === "string" && ref.length > 0) {
|
|
46
|
+
const exact = blocks.find((b) => b.id === ref);
|
|
47
|
+
if (exact)
|
|
48
|
+
return exact;
|
|
49
|
+
const key = ref.toLowerCase().replace(/[\s_-]/g, "");
|
|
50
|
+
if (["selected", "active", "current", "this"].includes(key) && activeBlockId) {
|
|
51
|
+
const selected = blocks.find((b) => b.id === activeBlockId);
|
|
52
|
+
if (selected)
|
|
53
|
+
return selected;
|
|
54
|
+
}
|
|
55
|
+
const byType = inferBlockTypeFromText(key);
|
|
56
|
+
if (byType) {
|
|
57
|
+
const found = blocks.find((b) => b.type === byType);
|
|
58
|
+
if (found)
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
const contains = blocks.find((b) => b.id.toLowerCase().includes(key));
|
|
62
|
+
if (contains)
|
|
63
|
+
return contains;
|
|
64
|
+
// User named something specific that doesn't exist — don't fall back to selected block
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
if (activeBlockId) {
|
|
68
|
+
const selected = blocks.find((b) => b.id === activeBlockId);
|
|
69
|
+
if (selected)
|
|
70
|
+
return selected;
|
|
71
|
+
}
|
|
72
|
+
if (fallbackType) {
|
|
73
|
+
const found = blocks.find((b) => b.type === fallbackType);
|
|
74
|
+
if (found)
|
|
75
|
+
return found;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
export function ordinalToIndex(value) {
|
|
80
|
+
const key = value.toLowerCase();
|
|
81
|
+
if (key === "first" || key === "1st")
|
|
82
|
+
return 0;
|
|
83
|
+
if (key === "second" || key === "2nd")
|
|
84
|
+
return 1;
|
|
85
|
+
if (key === "third" || key === "3rd")
|
|
86
|
+
return 2;
|
|
87
|
+
if (key === "fourth" || key === "4th")
|
|
88
|
+
return 3;
|
|
89
|
+
if (key === "fifth" || key === "5th")
|
|
90
|
+
return 4;
|
|
91
|
+
if (key === "last")
|
|
92
|
+
return -1;
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
export function resolveByDescriptor(args) {
|
|
96
|
+
const { descriptor, currentPage, activeBlockId } = args;
|
|
97
|
+
const normalized = descriptor.trim().toLowerCase();
|
|
98
|
+
if (!normalized)
|
|
99
|
+
return null;
|
|
100
|
+
if (["this", "this block", "this section", "selected", "selected block", "current block"].includes(normalized)) {
|
|
101
|
+
if (!activeBlockId)
|
|
102
|
+
return null;
|
|
103
|
+
return currentPage.blocks.find((b) => b.id === activeBlockId) ?? null;
|
|
104
|
+
}
|
|
105
|
+
const exact = currentPage.blocks.find((b) => b.id.toLowerCase() === normalized);
|
|
106
|
+
if (exact)
|
|
107
|
+
return exact;
|
|
108
|
+
const type = inferBlockTypeFromText(normalized);
|
|
109
|
+
if (!type)
|
|
110
|
+
return null;
|
|
111
|
+
const typed = currentPage.blocks.filter((b) => b.type === type);
|
|
112
|
+
if (typed.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
const ord = normalized.match(/\b(first|second|third|fourth|fifth|last|1st|2nd|3rd|4th|5th)\b/)?.[1];
|
|
115
|
+
const idx = ord ? ordinalToIndex(ord) : 0;
|
|
116
|
+
if (idx === null)
|
|
117
|
+
return typed[0];
|
|
118
|
+
if (idx === -1)
|
|
119
|
+
return typed[typed.length - 1];
|
|
120
|
+
return typed[idx] ?? typed[0];
|
|
121
|
+
}
|
|
122
|
+
export function resolveReferencesFromMessage(args) {
|
|
123
|
+
const { message, currentPage, activeBlockId } = args;
|
|
124
|
+
const lower = message.toLowerCase();
|
|
125
|
+
const mentioned = new Map();
|
|
126
|
+
const addMention = (block, reason) => {
|
|
127
|
+
if (!block)
|
|
128
|
+
return;
|
|
129
|
+
if (!mentioned.has(block.id))
|
|
130
|
+
mentioned.set(block.id, { id: block.id, type: block.type, reason });
|
|
131
|
+
};
|
|
132
|
+
if (activeBlockId) {
|
|
133
|
+
const selected = currentPage.blocks.find((b) => b.id === activeBlockId) ?? null;
|
|
134
|
+
addMention(selected, "active_selection");
|
|
135
|
+
}
|
|
136
|
+
const descriptorMatches = lower.match(/\b(first|second|third|fourth|fifth|last)?\s*(hero|feature grid|features|testimonials?|faq|cta|card grid|card)s?\b/g);
|
|
137
|
+
for (const match of descriptorMatches ?? []) {
|
|
138
|
+
addMention(resolveByDescriptor({ descriptor: match, currentPage, activeBlockId }), "descriptor_match");
|
|
139
|
+
}
|
|
140
|
+
for (const block of currentPage.blocks) {
|
|
141
|
+
if (lower.includes(block.id.toLowerCase()))
|
|
142
|
+
addMention(block, "id_match");
|
|
143
|
+
}
|
|
144
|
+
const afterDescriptor = lower.match(/\b(?:after|below|under)\s+([a-z0-9_\-\s]+?)(?:[,.]|$)/)?.[1]?.trim();
|
|
145
|
+
const beforeDescriptor = lower.match(/\b(?:before|above)\s+([a-z0-9_\-\s]+?)(?:[,.]|$)/)?.[1]?.trim();
|
|
146
|
+
const primaryDescriptor = lower.match(/\b(?:update|change|edit|remove|delete|move)\s+([a-z0-9_\-\s]+?)(?:\b(?:to|into|with|after|before|above|below|under)\b|[,.]|$)/)?.[1]?.trim();
|
|
147
|
+
const anchor = resolveByDescriptor({
|
|
148
|
+
descriptor: afterDescriptor ?? beforeDescriptor ?? "",
|
|
149
|
+
currentPage,
|
|
150
|
+
activeBlockId
|
|
151
|
+
});
|
|
152
|
+
const target = resolveByDescriptor({
|
|
153
|
+
descriptor: primaryDescriptor ?? "",
|
|
154
|
+
currentPage,
|
|
155
|
+
activeBlockId
|
|
156
|
+
});
|
|
157
|
+
addMention(anchor, "anchor_match");
|
|
158
|
+
addMention(target, "target_match");
|
|
159
|
+
return {
|
|
160
|
+
target: target ? { id: target.id, type: target.type } : null,
|
|
161
|
+
anchor: anchor ? { id: anchor.id, type: anchor.type } : null,
|
|
162
|
+
mentionedBlocks: Array.from(mentioned.values()).slice(0, 8)
|
|
163
|
+
};
|
|
164
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type BlockType, type EditPlan, type PageDoc, type BlockManifest } from "@avocadostudio-ai/shared";
|
|
2
|
+
import { type ChatRequestBody } from "./intent-detection.ts";
|
|
3
|
+
export declare function editablePropsFromBlock(block: PageDoc["blocks"][number]): string[];
|
|
4
|
+
export declare function promptFromPropKey(propKey: string, blockType?: string): string;
|
|
5
|
+
export declare function userFacingPropNames(blockType: BlockType, keys: string[]): string[];
|
|
6
|
+
export declare const ORDINALS: string[];
|
|
7
|
+
export declare function humanizeArrayPath(root: string): string;
|
|
8
|
+
export declare function childSuggestions(args: {
|
|
9
|
+
selected: PageDoc["blocks"][number];
|
|
10
|
+
editablePath: string;
|
|
11
|
+
}): string[];
|
|
12
|
+
export declare function clarificationSuggestions(args: {
|
|
13
|
+
body: ChatRequestBody;
|
|
14
|
+
current: PageDoc;
|
|
15
|
+
selected?: PageDoc["blocks"][number] | null;
|
|
16
|
+
}): string[];
|
|
17
|
+
export declare function postEditSuggestions(args: {
|
|
18
|
+
plan: EditPlan;
|
|
19
|
+
current: PageDoc;
|
|
20
|
+
body: ChatRequestBody;
|
|
21
|
+
}): string[];
|
|
22
|
+
export declare function demoPlanFromMessage(message: string, slug: string, activeBlockId?: string, activeBlockType?: string): EditPlan;
|
|
23
|
+
export declare function titleCaseSentence(text: string): string;
|
|
24
|
+
export declare function pageMetaContractSummary(): {
|
|
25
|
+
op: string;
|
|
26
|
+
fields: {
|
|
27
|
+
title: string;
|
|
28
|
+
description: string;
|
|
29
|
+
ogImage: string;
|
|
30
|
+
};
|
|
31
|
+
notes: string;
|
|
32
|
+
};
|
|
33
|
+
type BlockContract = {
|
|
34
|
+
allowedProps: string[];
|
|
35
|
+
required: string[];
|
|
36
|
+
optional?: string[];
|
|
37
|
+
notes: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Derive block contracts from the registry so new blocks are automatically
|
|
41
|
+
* included without maintaining a parallel hardcoded map.
|
|
42
|
+
*
|
|
43
|
+
* When a `manifest` is provided (external site), manifest-declared props are
|
|
44
|
+
* merged into the contract for shared-name blocks (e.g. Hero with extra
|
|
45
|
+
* `logoUrl`, `carouselImages`), and manifest-only blocks (e.g. ContactForm)
|
|
46
|
+
* get a contract derived from their JSON schema.
|
|
47
|
+
*/
|
|
48
|
+
export declare function blockContractsSummary(manifest?: BlockManifest): Record<string, BlockContract>;
|
|
49
|
+
export {};
|