@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.
Files changed (196) hide show
  1. package/LICENSE +201 -0
  2. package/dist/agent/agent-context.d.ts +19 -0
  3. package/dist/agent/agent-context.js +67 -0
  4. package/dist/agent/agent-logger.d.ts +5 -0
  5. package/dist/agent/agent-logger.js +22 -0
  6. package/dist/agent/agent-loop-openai.d.ts +8 -0
  7. package/dist/agent/agent-loop-openai.js +172 -0
  8. package/dist/agent/agent-loop.d.ts +56 -0
  9. package/dist/agent/agent-loop.js +167 -0
  10. package/dist/agent/agent-provider.d.ts +28 -0
  11. package/dist/agent/agent-provider.js +63 -0
  12. package/dist/agent/agent-tools.d.ts +28 -0
  13. package/dist/agent/agent-tools.js +899 -0
  14. package/dist/agent/context/editing-guidelines.md +46 -0
  15. package/dist/agent/context/role.md +39 -0
  16. package/dist/agent/integration-prompt.d.ts +9 -0
  17. package/dist/agent/integration-prompt.js +154 -0
  18. package/dist/agent/sites-agent-context.d.ts +12 -0
  19. package/dist/agent/sites-agent-context.js +316 -0
  20. package/dist/agent/sites-agent-shared.d.ts +161 -0
  21. package/dist/agent/sites-agent-shared.js +1101 -0
  22. package/dist/agent/sites-agent-tools.d.ts +18 -0
  23. package/dist/agent/sites-agent-tools.js +1227 -0
  24. package/dist/chat/anthropic-cache.d.ts +20 -0
  25. package/dist/chat/anthropic-cache.js +54 -0
  26. package/dist/chat/anthropic-planner.d.ts +98 -0
  27. package/dist/chat/anthropic-planner.js +1012 -0
  28. package/dist/chat/changelog-coverage-validator.d.ts +37 -0
  29. package/dist/chat/changelog-coverage-validator.js +215 -0
  30. package/dist/chat/chat-pipeline-context.d.ts +211 -0
  31. package/dist/chat/chat-pipeline-context.js +249 -0
  32. package/dist/chat/chat-pipeline-deterministic.d.ts +61 -0
  33. package/dist/chat/chat-pipeline-deterministic.js +407 -0
  34. package/dist/chat/chat-pipeline-image.d.ts +86 -0
  35. package/dist/chat/chat-pipeline-image.js +897 -0
  36. package/dist/chat/chat-pipeline-shared.d.ts +69 -0
  37. package/dist/chat/chat-pipeline-shared.js +212 -0
  38. package/dist/chat/chat-pipeline-translation.d.ts +27 -0
  39. package/dist/chat/chat-pipeline-translation.js +417 -0
  40. package/dist/chat/chat-pipeline-ui.d.ts +14 -0
  41. package/dist/chat/chat-pipeline-ui.js +244 -0
  42. package/dist/chat/chat-pipeline.d.ts +99 -0
  43. package/dist/chat/chat-pipeline.js +3999 -0
  44. package/dist/chat/decomposer.d.ts +21 -0
  45. package/dist/chat/decomposer.js +65 -0
  46. package/dist/chat/gemini-planner.d.ts +70 -0
  47. package/dist/chat/gemini-planner.js +541 -0
  48. package/dist/chat/hallucination-validator.d.ts +36 -0
  49. package/dist/chat/hallucination-validator.js +110 -0
  50. package/dist/chat/locale-strings.d.ts +47 -0
  51. package/dist/chat/locale-strings.js +100 -0
  52. package/dist/chat/plan-json-schema.d.ts +133 -0
  53. package/dist/chat/plan-json-schema.js +112 -0
  54. package/dist/chat/planner-types.d.ts +120 -0
  55. package/dist/chat/planner-types.js +66 -0
  56. package/dist/chat/planner.d.ts +148 -0
  57. package/dist/chat/planner.js +1361 -0
  58. package/dist/chat/prompts.d.ts +67 -0
  59. package/dist/chat/prompts.js +356 -0
  60. package/dist/chat/provider-routing.d.ts +14 -0
  61. package/dist/chat/provider-routing.js +27 -0
  62. package/dist/chat/variation-pipeline.d.ts +135 -0
  63. package/dist/chat/variation-pipeline.js +837 -0
  64. package/dist/chat/vision-alt-generator.d.ts +35 -0
  65. package/dist/chat/vision-alt-generator.js +152 -0
  66. package/dist/cms/adapter.d.ts +62 -0
  67. package/dist/cms/adapter.js +1 -0
  68. package/dist/cms/bootstrap.d.ts +17 -0
  69. package/dist/cms/bootstrap.js +85 -0
  70. package/dist/cms/editor-api-adapter.d.ts +23 -0
  71. package/dist/cms/editor-api-adapter.js +71 -0
  72. package/dist/cms/index.d.ts +4 -0
  73. package/dist/cms/index.js +3 -0
  74. package/dist/cms/json-file-adapter.d.ts +11 -0
  75. package/dist/cms/json-file-adapter.js +62 -0
  76. package/dist/demo-mode.d.ts +59 -0
  77. package/dist/demo-mode.js +201 -0
  78. package/dist/errors.d.ts +67 -0
  79. package/dist/errors.js +129 -0
  80. package/dist/http/chat-stream-resumable.d.ts +108 -0
  81. package/dist/http/chat-stream-resumable.js +290 -0
  82. package/dist/http/chat-stream.d.ts +99 -0
  83. package/dist/http/chat-stream.js +92 -0
  84. package/dist/image/gdrive-client.d.ts +22 -0
  85. package/dist/image/gdrive-client.js +215 -0
  86. package/dist/image/image-helpers.d.ts +95 -0
  87. package/dist/image/image-helpers.js +488 -0
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.js +1 -0
  90. package/dist/jira/jira-approval.d.ts +22 -0
  91. package/dist/jira/jira-approval.js +51 -0
  92. package/dist/jira/jira-client.d.ts +44 -0
  93. package/dist/jira/jira-client.js +313 -0
  94. package/dist/jira/jira-poller.d.ts +46 -0
  95. package/dist/jira/jira-poller.js +184 -0
  96. package/dist/jira/jira-processor.d.ts +103 -0
  97. package/dist/jira/jira-processor.js +1085 -0
  98. package/dist/jira/jira-types.d.ts +117 -0
  99. package/dist/jira/jira-types.js +38 -0
  100. package/dist/logger.d.ts +12 -0
  101. package/dist/logger.js +28 -0
  102. package/dist/migration/mcp-server-stdio.d.ts +8 -0
  103. package/dist/migration/mcp-server-stdio.js +672 -0
  104. package/dist/migration/migration-prompt.d.ts +7 -0
  105. package/dist/migration/migration-prompt.js +197 -0
  106. package/dist/migration/migration-tools.d.ts +17 -0
  107. package/dist/migration/migration-tools.js +159 -0
  108. package/dist/migration/scrape-cache.d.ts +9 -0
  109. package/dist/migration/scrape-cache.js +19 -0
  110. package/dist/nlp/deterministic-planner-context.d.ts +141 -0
  111. package/dist/nlp/deterministic-planner-context.js +362 -0
  112. package/dist/nlp/deterministic-planner-pages.d.ts +26 -0
  113. package/dist/nlp/deterministic-planner-pages.js +170 -0
  114. package/dist/nlp/deterministic-planner-patches.d.ts +80 -0
  115. package/dist/nlp/deterministic-planner-patches.js +508 -0
  116. package/dist/nlp/deterministic-planner-refs.d.ts +33 -0
  117. package/dist/nlp/deterministic-planner-refs.js +164 -0
  118. package/dist/nlp/deterministic-planner-suggestions.d.ts +49 -0
  119. package/dist/nlp/deterministic-planner-suggestions.js +579 -0
  120. package/dist/nlp/deterministic-planner.d.ts +85 -0
  121. package/dist/nlp/deterministic-planner.js +1631 -0
  122. package/dist/nlp/intent-detection.d.ts +309 -0
  123. package/dist/nlp/intent-detection.js +730 -0
  124. package/dist/nlp/intent-helpers.d.ts +15 -0
  125. package/dist/nlp/intent-helpers.js +243 -0
  126. package/dist/nlp/intent-patterns.d.ts +40 -0
  127. package/dist/nlp/intent-patterns.js +223 -0
  128. package/dist/nlp/plan-normalizer.d.ts +41 -0
  129. package/dist/nlp/plan-normalizer.js +1537 -0
  130. package/dist/ops/destructive-action-gate.d.ts +44 -0
  131. package/dist/ops/destructive-action-gate.js +90 -0
  132. package/dist/ops/ops-engine.d.ts +151 -0
  133. package/dist/ops/ops-engine.js +1394 -0
  134. package/dist/publish/diff-engine.d.ts +18 -0
  135. package/dist/publish/diff-engine.js +305 -0
  136. package/dist/publish/publish-helpers.d.ts +87 -0
  137. package/dist/publish/publish-helpers.js +521 -0
  138. package/dist/publish/publish-target-registry.d.ts +7 -0
  139. package/dist/publish/publish-target-registry.js +61 -0
  140. package/dist/publish/publish-target.d.ts +81 -0
  141. package/dist/publish/publish-target.js +1 -0
  142. package/dist/publish/targets/deploy-hook.d.ts +13 -0
  143. package/dist/publish/targets/deploy-hook.js +123 -0
  144. package/dist/publish/targets/git.d.ts +13 -0
  145. package/dist/publish/targets/git.js +55 -0
  146. package/dist/publish/targets/site-contract.d.ts +19 -0
  147. package/dist/publish/targets/site-contract.js +124 -0
  148. package/dist/state/content-source.d.ts +17 -0
  149. package/dist/state/content-source.js +1 -0
  150. package/dist/state/in-memory-content-source.d.ts +27 -0
  151. package/dist/state/in-memory-content-source.js +51 -0
  152. package/dist/state/session-lock.d.ts +13 -0
  153. package/dist/state/session-lock.js +29 -0
  154. package/dist/state/session-state.d.ts +310 -0
  155. package/dist/state/session-state.js +1083 -0
  156. package/dist/state/sqlite-store-singleton.d.ts +31 -0
  157. package/dist/state/sqlite-store-singleton.js +170 -0
  158. package/dist/state/sqlite-store.d.ts +135 -0
  159. package/dist/state/sqlite-store.js +421 -0
  160. package/dist/telemetry/chat-telemetry.d.ts +105 -0
  161. package/dist/telemetry/chat-telemetry.js +247 -0
  162. package/dist/telemetry/eval-candidate-store.d.ts +50 -0
  163. package/dist/telemetry/eval-candidate-store.js +120 -0
  164. package/dist/telemetry/feedback-store.d.ts +34 -0
  165. package/dist/telemetry/feedback-store.js +76 -0
  166. package/dist/telemetry/jira-telemetry.d.ts +57 -0
  167. package/dist/telemetry/jira-telemetry.js +68 -0
  168. package/dist/telemetry/migration-telemetry.d.ts +35 -0
  169. package/dist/telemetry/migration-telemetry.js +40 -0
  170. package/dist/telemetry/usage.d.ts +24 -0
  171. package/dist/telemetry/usage.js +80 -0
  172. package/dist/tools/builtin-registrations.d.ts +12 -0
  173. package/dist/tools/builtin-registrations.js +33 -0
  174. package/dist/tools/builtins/gdrive-browse.d.ts +3 -0
  175. package/dist/tools/builtins/gdrive-browse.js +68 -0
  176. package/dist/tools/builtins/image-generate.d.ts +3 -0
  177. package/dist/tools/builtins/image-generate.js +211 -0
  178. package/dist/tools/builtins/unsplash-get-by-id.d.ts +23 -0
  179. package/dist/tools/builtins/unsplash-get-by-id.js +119 -0
  180. package/dist/tools/builtins/unsplash-search.d.ts +3 -0
  181. package/dist/tools/builtins/unsplash-search.js +74 -0
  182. package/dist/tools/executor.d.ts +23 -0
  183. package/dist/tools/executor.js +169 -0
  184. package/dist/tools/index.d.ts +5 -0
  185. package/dist/tools/index.js +5 -0
  186. package/dist/tools/registry.d.ts +21 -0
  187. package/dist/tools/registry.js +75 -0
  188. package/dist/tools/runtime.d.ts +27 -0
  189. package/dist/tools/runtime.js +48 -0
  190. package/dist/tools/schema-validator.d.ts +24 -0
  191. package/dist/tools/schema-validator.js +88 -0
  192. package/dist/tools/types.d.ts +86 -0
  193. package/dist/tools/types.js +1 -0
  194. package/dist/variation-images.d.ts +19 -0
  195. package/dist/variation-images.js +12 -0
  196. 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 {};