aeon-ui-engine 1.3.1 → 1.4.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 (153) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/package.json +1 -1
  3. package/packages/cli/README.md +13 -1
  4. package/packages/cli/dist/bin.js +23 -5
  5. package/packages/cli/dist/chunk-5L47SLNV.js +247 -0
  6. package/packages/cli/dist/index.d.ts +17 -1
  7. package/packages/cli/dist/index.js +5 -3
  8. package/packages/cli/src/bin.ts +21 -3
  9. package/packages/cli/src/index.ts +1 -0
  10. package/packages/cli/src/migrate.ts +170 -0
  11. package/packages/core/dist/index.d.ts +35 -7
  12. package/packages/core/dist/index.js +102 -2
  13. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  14. package/packages/core/src/anatomy.ts +39 -3
  15. package/packages/core/src/identicon.test.ts +39 -0
  16. package/packages/core/src/identicon.ts +79 -0
  17. package/packages/core/src/index.ts +1 -0
  18. package/packages/panda/panda.config.ts +4 -0
  19. package/packages/panda/src/recipes/composer.ts +58 -4
  20. package/packages/panda/src/recipes/file-upload.ts +100 -0
  21. package/packages/panda/src/recipes/index.ts +2 -0
  22. package/packages/panda/src/recipes/range-slider.ts +59 -0
  23. package/packages/panda/src/recipes/thread.ts +77 -2
  24. package/packages/panda/styled-system/recipes/aeon-composer.d.ts +1 -1
  25. package/packages/panda/styled-system/recipes/aeon-composer.mjs +12 -0
  26. package/packages/panda/styled-system/recipes/aeon-file-upload.d.ts +31 -0
  27. package/packages/panda/styled-system/recipes/aeon-file-upload.mjs +61 -0
  28. package/packages/panda/styled-system/recipes/aeon-range-slider.d.ts +31 -0
  29. package/packages/panda/styled-system/recipes/aeon-range-slider.mjs +49 -0
  30. package/packages/panda/styled-system/recipes/aeon-thread.d.ts +1 -1
  31. package/packages/panda/styled-system/recipes/aeon-thread.mjs +20 -0
  32. package/packages/panda/styled-system/recipes/index.d.ts +2 -0
  33. package/packages/panda/styled-system/recipes/index.mjs +2 -0
  34. package/packages/panda/styled-system/styles.css +292 -0
  35. package/packages/primitives/dist/chunk-CV4UXXZF.js +44 -0
  36. package/packages/primitives/dist/chunk-IZKQSCYU.js +164 -0
  37. package/packages/primitives/dist/index.d.ts +2 -0
  38. package/packages/primitives/dist/index.js +22 -6
  39. package/packages/primitives/dist/machines/file-upload.d.ts +39 -0
  40. package/packages/primitives/dist/machines/file-upload.js +8 -0
  41. package/packages/primitives/dist/machines/range-slider.d.ts +129 -0
  42. package/packages/primitives/dist/machines/range-slider.js +12 -0
  43. package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  44. package/packages/primitives/src/__tests__/file-upload.test.ts +25 -0
  45. package/packages/primitives/src/__tests__/range-slider.test.ts +39 -0
  46. package/packages/primitives/src/index.ts +2 -0
  47. package/packages/primitives/src/machines/file-upload.ts +55 -0
  48. package/packages/primitives/src/machines/range-slider.ts +209 -0
  49. package/packages/react/dist/index.d.ts +117 -25
  50. package/packages/react/dist/index.js +1731 -1006
  51. package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  52. package/packages/react/src/button/index.tsx +50 -15
  53. package/packages/react/src/combobox/index.tsx +13 -8
  54. package/packages/react/src/composer/index.tsx +58 -3
  55. package/packages/react/src/file-upload/index.tsx +322 -0
  56. package/packages/react/src/index.ts +3 -0
  57. package/packages/react/src/prompt/index.tsx +45 -0
  58. package/packages/react/src/range-slider/index.tsx +322 -0
  59. package/packages/react/src/thread/index.tsx +74 -3
  60. package/packages/react/src/tooltip/index.tsx +48 -22
  61. package/packages/react/src/utils/slot.tsx +47 -0
  62. package/packages/schemas/dist/index.d.ts +73 -24
  63. package/packages/schemas/dist/index.js +514 -50
  64. package/packages/schemas/json/appNav.json +146 -0
  65. package/packages/schemas/json/appShell.json +151 -0
  66. package/packages/schemas/json/avatar.json +130 -0
  67. package/packages/schemas/json/bar.json +126 -0
  68. package/packages/schemas/json/button.json +6 -0
  69. package/packages/schemas/json/catalog.json +3496 -15
  70. package/packages/schemas/json/combobox.json +19 -7
  71. package/packages/schemas/json/composer.json +125 -0
  72. package/packages/schemas/json/content.json +167 -0
  73. package/packages/schemas/json/conversation.json +166 -0
  74. package/packages/schemas/json/entry.json +182 -0
  75. package/packages/schemas/json/fileUpload.json +168 -0
  76. package/packages/schemas/json/identity.json +147 -0
  77. package/packages/schemas/json/listRow.json +131 -0
  78. package/packages/schemas/json/metricStrip.json +132 -0
  79. package/packages/schemas/json/nav.json +136 -0
  80. package/packages/schemas/json/panel.json +143 -0
  81. package/packages/schemas/json/pinInput.json +112 -0
  82. package/packages/schemas/json/profileHeader.json +138 -0
  83. package/packages/schemas/json/prompt.json +155 -0
  84. package/packages/schemas/json/radioGroup.json +130 -0
  85. package/packages/schemas/json/rangeSlider.json +157 -0
  86. package/packages/schemas/json/separator.json +105 -0
  87. package/packages/schemas/json/slider.json +147 -0
  88. package/packages/schemas/json/statusBanner.json +149 -0
  89. package/packages/schemas/json/stickyBar.json +153 -0
  90. package/packages/schemas/json/thread.json +129 -0
  91. package/packages/schemas/json/tooltip.json +21 -7
  92. package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  93. package/packages/schemas/prompts/cursorrules.md +6 -4
  94. package/packages/schemas/prompts/statecharts.md +23 -2
  95. package/packages/schemas/prompts/system.md +2 -2
  96. package/packages/schemas/registry/catalog.json +313 -4
  97. package/packages/schemas/registry/components/appNav.json +146 -0
  98. package/packages/schemas/registry/components/appShell.json +151 -0
  99. package/packages/schemas/registry/components/avatar.json +130 -0
  100. package/packages/schemas/registry/components/bar.json +126 -0
  101. package/packages/schemas/registry/components/button.json +6 -0
  102. package/packages/schemas/registry/components/combobox.json +19 -7
  103. package/packages/schemas/registry/components/composer.json +125 -0
  104. package/packages/schemas/registry/components/content.json +167 -0
  105. package/packages/schemas/registry/components/conversation.json +166 -0
  106. package/packages/schemas/registry/components/entry.json +182 -0
  107. package/packages/schemas/registry/components/fileUpload.json +168 -0
  108. package/packages/schemas/registry/components/identity.json +147 -0
  109. package/packages/schemas/registry/components/listRow.json +131 -0
  110. package/packages/schemas/registry/components/metricStrip.json +132 -0
  111. package/packages/schemas/registry/components/nav.json +136 -0
  112. package/packages/schemas/registry/components/panel.json +143 -0
  113. package/packages/schemas/registry/components/pinInput.json +112 -0
  114. package/packages/schemas/registry/components/profileHeader.json +138 -0
  115. package/packages/schemas/registry/components/prompt.json +155 -0
  116. package/packages/schemas/registry/components/radioGroup.json +130 -0
  117. package/packages/schemas/registry/components/rangeSlider.json +157 -0
  118. package/packages/schemas/registry/components/separator.json +105 -0
  119. package/packages/schemas/registry/components/slider.json +147 -0
  120. package/packages/schemas/registry/components/statusBanner.json +149 -0
  121. package/packages/schemas/registry/components/stickyBar.json +153 -0
  122. package/packages/schemas/registry/components/thread.json +129 -0
  123. package/packages/schemas/registry/components/tooltip.json +21 -7
  124. package/packages/schemas/registry/machines/accordion.json +58 -0
  125. package/packages/schemas/registry/machines/appNav.json +108 -0
  126. package/packages/schemas/registry/machines/appShell.json +128 -0
  127. package/packages/schemas/registry/machines/contentRegion.json +314 -0
  128. package/packages/schemas/registry/machines/fileUpload.json +182 -0
  129. package/packages/schemas/registry/machines/panel.json +131 -0
  130. package/packages/schemas/registry/machines/popover.json +143 -0
  131. package/packages/schemas/registry/machines/rangeSlider.json +201 -0
  132. package/packages/schemas/registry/machines/slider.json +151 -0
  133. package/packages/schemas/registry/machines/stickyBar.json +261 -0
  134. package/packages/schemas/registry/machines/tabs.json +58 -0
  135. package/packages/schemas/registry/machines/toast.json +89 -0
  136. package/packages/schemas/registry/machines/toggle.json +134 -0
  137. package/packages/schemas/scripts/emit.ts +27 -0
  138. package/packages/schemas/src/components.ts +499 -6
  139. package/packages/schemas/src/index.test.ts +83 -0
  140. package/packages/schemas/src/index.ts +1 -0
  141. package/packages/schemas/src/machine-id.ts +7 -0
  142. package/packages/schemas/src/prompts.ts +25 -4
  143. package/packages/schemas/src/registry.ts +28 -39
  144. package/packages/schemas/tsconfig.json +1 -1
  145. package/packages/ui/dist/index.d.ts +100 -46
  146. package/packages/ui/dist/index.js +463 -341
  147. package/packages/ui/src/composer.tsx +37 -11
  148. package/packages/ui/src/file-upload.tsx +36 -0
  149. package/packages/ui/src/index.ts +2 -0
  150. package/packages/ui/src/prompt.tsx +3 -0
  151. package/packages/ui/src/range-slider.tsx +24 -0
  152. package/packages/ui/src/thread.tsx +40 -0
  153. package/packages/cli/dist/chunk-IW5NT2Z2.js +0 -103
@@ -35,6 +35,30 @@ declare const componentSchemas: {
35
35
  readonly toast: JsonSchema;
36
36
  readonly scroll: JsonSchema;
37
37
  readonly progress: JsonSchema;
38
+ readonly radioGroup: JsonSchema;
39
+ readonly slider: JsonSchema;
40
+ readonly rangeSlider: JsonSchema;
41
+ readonly fileUpload: JsonSchema;
42
+ readonly pinInput: JsonSchema;
43
+ readonly avatar: JsonSchema;
44
+ readonly content: JsonSchema;
45
+ readonly panel: JsonSchema;
46
+ readonly appShell: JsonSchema;
47
+ readonly stickyBar: JsonSchema;
48
+ readonly bar: JsonSchema;
49
+ readonly nav: JsonSchema;
50
+ readonly appNav: JsonSchema;
51
+ readonly prompt: JsonSchema;
52
+ readonly statusBanner: JsonSchema;
53
+ readonly separator: JsonSchema;
54
+ readonly composer: JsonSchema;
55
+ readonly thread: JsonSchema;
56
+ readonly identity: JsonSchema;
57
+ readonly profileHeader: JsonSchema;
58
+ readonly metricStrip: JsonSchema;
59
+ readonly listRow: JsonSchema;
60
+ readonly entry: JsonSchema;
61
+ readonly conversation: JsonSchema;
38
62
  };
39
63
  type ComponentSchemaId = keyof typeof componentSchemas;
40
64
  declare const catalog: {
@@ -63,6 +87,30 @@ declare const catalog: {
63
87
  readonly toast: JsonSchema;
64
88
  readonly scroll: JsonSchema;
65
89
  readonly progress: JsonSchema;
90
+ readonly radioGroup: JsonSchema;
91
+ readonly slider: JsonSchema;
92
+ readonly rangeSlider: JsonSchema;
93
+ readonly fileUpload: JsonSchema;
94
+ readonly pinInput: JsonSchema;
95
+ readonly avatar: JsonSchema;
96
+ readonly content: JsonSchema;
97
+ readonly panel: JsonSchema;
98
+ readonly appShell: JsonSchema;
99
+ readonly stickyBar: JsonSchema;
100
+ readonly bar: JsonSchema;
101
+ readonly nav: JsonSchema;
102
+ readonly appNav: JsonSchema;
103
+ readonly prompt: JsonSchema;
104
+ readonly statusBanner: JsonSchema;
105
+ readonly separator: JsonSchema;
106
+ readonly composer: JsonSchema;
107
+ readonly thread: JsonSchema;
108
+ readonly identity: JsonSchema;
109
+ readonly profileHeader: JsonSchema;
110
+ readonly metricStrip: JsonSchema;
111
+ readonly listRow: JsonSchema;
112
+ readonly entry: JsonSchema;
113
+ readonly conversation: JsonSchema;
66
114
  };
67
115
  };
68
116
 
@@ -70,14 +118,18 @@ declare const catalog: {
70
118
  * Statecharts packaged as system-prompt fragments for AI coding agents.
71
119
  * Embed before code generation so agents cannot invent impossible UI states.
72
120
  */
73
- declare const AEON_SYSTEM_PROMPT = "# Aeon UI \u2014 agent system prompt\n\nYou are building UI with **Aeon UI**, a React component library powered by finite statecharts.\n\n## Order of work (mandatory)\n1. **Build the state machines first** \u2014 name every lifecycle the UX needs (states + events). Prefer machines from `@aeon-ui/primitives` (or documented prop projections such as Button `status`).\n2. **Then project UI from those machines** \u2014 compound parts, copy, and layout exist only to reflect the chart. Never invent UI for states that are not in a machine.\n3. **UI = f(state)** \u2014 the DOM exposes `data-aeon-scope`, `data-aeon-part`, `data-aeon-state`. Style targets those attributes. Do not drive the same concern with parallel React `useState` flags.\n\n## Non-negotiable rules\n1. Do not duplicate open/checked/lifecycle in `useState` when a machine exists in `@aeon-ui/primitives`.\n2. **Button `status` is a prop** (`idle|pending|success|failure|disabled`). Optional: drive it from `buttonLifecycleMachine` via `useAeonMachine` in app code.\n3. **Select / Menu / Popover** share `popoverMachine` \u2014 never fork another open/closed chart.\n4. **Combobox** and **Tooltip** use React state today \u2014 do not add floating machines without the component checklist.\n5. **Scroll** uses `getScrollSnapshot()` \u2014 no XState machine.\n6. If a machine lists N stable states, the UI must represent all N (totality).\n7. Prefer `@aeon-ui/react` (headless) or `@aeon-ui/ui` (styled). Relative TS imports use `.js` extensions inside the Aeon monorepo only.\n8. Primitives stay **universal** \u2014 never invent niche components (dating, colour-blind test, pong). Compose from generic parts.\n\n## DOM contract\nEvery interactive surface sets anatomy via `partAttrs` from `@aeon-ui/core`:\n- `data-aeon-scope` \u2014 family (`button`, `async`, `field`, \u2026)\n- `data-aeon-part` \u2014 anatomy key (`root`, `trigger`, \u2026)\n- `data-aeon-state` \u2014 allowed snapshot / prop state only\n\n## Before writing JSX\n1. Enumerate machines (or documented status props) for the flow \u2014 states and events.\n2. Read the component JSON Schema from `@aeon-ui/schemas` (or pasted catalog) and match parts to those charts.\n3. Compose with documented compound parts (`Dialog.Root`, `Field.Control`, \u2026).\n4. Wire events to machine events or documented props \u2014 never invent `isLoading && !isError && hasData` spaghetti when a named state exists.\n";
121
+ declare const AEON_SYSTEM_PROMPT = "# Aeon UI \u2014 agent system prompt\n\nYou are building UI with **Aeon UI**, a React component library powered by finite statecharts.\n\n## Order of work (mandatory)\n1. **Build the state machines first** \u2014 name every lifecycle the UX needs (states + events). Prefer machines from `@aeon-ui/primitives` (or documented prop projections such as Button `status`).\n2. **Then project UI from those machines** \u2014 compound parts, copy, and layout exist only to reflect the chart. Never invent UI for states that are not in a machine.\n3. **UI = f(state)** \u2014 the DOM exposes `data-aeon-scope`, `data-aeon-part`, `data-aeon-state`. Style targets those attributes. Do not drive the same concern with parallel React `useState` flags.\n\n## Non-negotiable rules\n1. Do not duplicate open/checked/lifecycle in `useState` when a machine exists in `@aeon-ui/primitives`.\n2. **Button `status` is a prop** (`idle|pending|success|failure|disabled`). Optional: drive it from `buttonLifecycleMachine` via `useAeonMachine` in app code.\n3. **Select / Menu / Popover / Combobox / Tooltip** share `popoverMachine` for open/closed \u2014 never fork another open/closed chart. Combobox keeps query/highlight in React; Tooltip keeps openDelay/closeDelay/touchDuration in React.\n4. **PinInput** digit buffer is React-local today \u2014 do not invent a pin machine without the component checklist.\n5. **Scroll** uses `getScrollSnapshot()` \u2014 no XState machine.\n6. If a machine lists N stable states, the UI must represent all N (totality).\n7. Prefer `@aeon-ui/react` (headless) or `@aeon-ui/ui` (styled). Relative TS imports use `.js` extensions inside the Aeon monorepo only.\n8. Primitives stay **universal** \u2014 never invent niche components (dating, colour-blind test, pong). Compose from generic parts.\n\n## DOM contract\nEvery interactive surface sets anatomy via `partAttrs` from `@aeon-ui/core`:\n- `data-aeon-scope` \u2014 family (`button`, `async`, `field`, \u2026)\n- `data-aeon-part` \u2014 anatomy key (`root`, `trigger`, \u2026)\n- `data-aeon-state` \u2014 allowed snapshot / prop state only\n\n## Before writing JSX\n1. Enumerate machines (or documented status props) for the flow \u2014 states and events.\n2. Read the component JSON Schema from `@aeon-ui/schemas` (or pasted catalog) and match parts to those charts.\n3. Compose with documented compound parts (`Dialog.Root`, `Field.Control`, \u2026).\n4. Wire events to machine events or documented props \u2014 never invent `isLoading && !isError && hasData` spaghetti when a named state exists.\n";
74
122
  declare const STATECHART_PROMPTS: {
75
123
  readonly async: "## Async region statechart\nStates: idle → loading → (success | empty | failure); REFRESH from success/empty/failure; STALE flag while success.\nEvents: FETCH, RESOLVE{data}, REJECT{error}, RESET, STALE, REFRESH.\nRule: Render track segments for idle, loading, success, empty, failure. Never hide empty/failure behind a generic spinner.";
76
124
  readonly field: "## Field parallel statechart\nRegions:\n- interaction: pristine | dirty\n- validation: valid | invalid\n- submission: idle | pending\nEvents: INPUT, BLUR, VALIDATE{valid}, SUBMIT, SUBMIT_DONE, SUBMIT_FAIL, RESET.\nRule: Do not collapse validation + submission into one `error` boolean. Message UI follows validation region; pending follows submission.";
77
125
  readonly button: "## Button lifecycle\nPreferred headless API: `status` prop ∈ idle | pending | success | failure | disabled.\nOptional machine: buttonLifecycleMachine with PRESS / RESOLVE / REJECT / RESET.\nRule: Pending must set aria-busy. Do not use disabled alone to mean \"saving\".";
78
126
  readonly dialog: "## Dialog statechart\nStates: open | closed. Events: OPEN, CLOSE, TOGGLE.\nRule: Backdrop click and Escape are CLOSE transitions. Title/Description are required for a11y when open.";
79
- readonly popoverFamily: "## Popover family (Popover, Menu, Select open state)\nMachine: popoverMachine — states open | closed.\nRule: Reuse this chart. Never create selectOpenMachine / menuOpenMachine forks.";
127
+ readonly popoverFamily: "## Popover family (Popover, Menu, Select, Combobox, Tooltip open state)\nMachine: popoverMachine — states open | closed.\nRule: Reuse this chart. Never create selectOpenMachine / menuOpenMachine / comboboxOpenMachine / tooltipOpenMachine forks.\nCombobox: query + highlight stay React-local; open/closed must still be popoverMachine.\nTooltip: openDelay / closeDelay / touchDuration stay React-local; open/closed must still be popoverMachine.";
80
128
  readonly toggle: "## Switch / Checkbox\nMachine: toggleMachine — checked | unchecked. Events: TOGGLE, CHECK, UNCHECK.\nRule: Hidden input stays in sync with snapshot for forms.";
129
+ readonly slider: "## Slider statechart\nMachine: sliderMachine — idle | dragging; value/min/max/step in context.\nEvents: SET_VALUE, STEP, POINTER_DOWN, POINTER_UP, HOME, END.\nRule: Disabled blocks SET_VALUE / drag; project idle vs dragging on data-aeon-state.";
130
+ readonly contentRegion: "## Content region statechart\nMachine: contentRegionMachine — idle → pending → (empty | error | ready) → loadingMore | success.\nEvents: LOAD, RESOLVE, REJECT, RETRY, LOAD_MORE, MORE_DONE, SUCCEED, RESET.\nRule: Every stable state has a slot. Pair with Async for fetch; do not hide empty/error behind a spinner.";
131
+ readonly toast: "## Toast item statechart\nMachine: toastMachine — hidden | visible. Events: SHOW, HIDE, DISMISS.\nRule: Provider list orchestration may use React; each toast item uses the machine.";
132
+ readonly stickyBar: "## StickyBar statechart\nMachine: stickyBarMachine — floating | docked | collapsed | hidden.\nEvents: DOCK, FLOAT, COLLAPSE, EXPAND, HIDE, SHOW, SET_OFFSET.\nRule: DOM scope is bar (bar anatomy zones). Do not invent a parallel sticky useState.";
81
133
  };
82
134
  /** Checkout-form example used on the landing "AI playground" proof. */
83
135
  declare const GENERATIVE_UI_EXAMPLE: {
@@ -247,6 +299,8 @@ type AgentEventBridge = ReturnType<typeof createAgentEventBridge>;
247
299
  * Fetch at runtime: GET https://aeon-ui.com/registry/catalog.json
248
300
  * Per component: GET https://aeon-ui.com/registry/components/{id}.json
249
301
  * Machines: GET https://aeon-ui.com/registry/machines/{id}.json
302
+ *
303
+ * Components are derived from `componentSchemas` — do not hand-maintain a parallel list.
250
304
  */
251
305
  type RegistryEntry = {
252
306
  id: string;
@@ -259,29 +313,24 @@ type RegistryEntry = {
259
313
  };
260
314
  declare const REGISTRY_BASE: "https://aeon-ui.com/registry";
261
315
  declare const registryCatalog: {
262
- readonly $id: "https://aeon-ui.com/registry/catalog.json";
263
- readonly version: "0.1.0";
264
- readonly principle: "UI = f(state)";
265
- readonly description: "Lightweight runtime registry — fetch Aeon component schemas and state-tree JSON on demand instead of bundling every primitive.";
266
- readonly endpoints: {
267
- readonly catalog: "https://aeon-ui.com/registry/catalog.json";
268
- readonly component: "https://aeon-ui.com/registry/components/{id}.json";
269
- readonly machine: "https://aeon-ui.com/registry/machines/{id}.json";
316
+ $id: string;
317
+ version: string;
318
+ principle: string;
319
+ description: string;
320
+ endpoints: {
321
+ catalog: string;
322
+ component: string;
323
+ machine: string;
270
324
  };
271
- readonly components: {
272
- id: string;
273
- title: string;
274
- scope: string;
275
- schemaUrl: string;
276
- machineUrl: string;
277
- runtime: string;
278
- description: string;
279
- }[];
280
- readonly client: {
281
- readonly fetchCatalog: "fetch('https://aeon-ui.com/registry/catalog.json').then(r => r.json())";
282
- readonly fetchComponent: "id => fetch(`https://aeon-ui.com/registry/components/${id}.json`).then(r => r.json())";
283
- readonly fetchMachine: "id => fetch(`https://aeon-ui.com/registry/machines/${id}.json`).then(r => r.json())";
325
+ components: RegistryEntry[];
326
+ client: {
327
+ fetchCatalog: string;
328
+ fetchComponent: string;
329
+ fetchMachine: string;
284
330
  };
285
331
  };
286
332
 
287
- export { AEON_SYSTEM_PROMPT, type AeonMachineSchema, type AeonSnapshotSchema, type AeonStateTreeNode, type AgentBridgeOptions, type AgentEventBridge, type AgentEventMap, type AgentStreamEvent, CURSOR_RULES_SNIPPET, type ComponentSchemaId, GENERATIVE_UI_EXAMPLE, type JsonSchema, REGISTRY_BASE, type RegistryEntry, STATECHART_PROMPTS, aeonInitialAgentContext, aeonSnapshotSchema, aeonToPrompt, aeonToSchema, catalog, componentSchema, componentSchemas, createAgentEventBridge, registryCatalog };
333
+ /** Map component schema `machine` export names → registry/machines/{id}.json ids. */
334
+ declare function machineRegistryId(machine: string | null | undefined): string | undefined;
335
+
336
+ export { AEON_SYSTEM_PROMPT, type AeonMachineSchema, type AeonSnapshotSchema, type AeonStateTreeNode, type AgentBridgeOptions, type AgentEventBridge, type AgentEventMap, type AgentStreamEvent, CURSOR_RULES_SNIPPET, type ComponentSchemaId, GENERATIVE_UI_EXAMPLE, type JsonSchema, REGISTRY_BASE, type RegistryEntry, STATECHART_PROMPTS, aeonInitialAgentContext, aeonSnapshotSchema, aeonToPrompt, aeonToSchema, catalog, componentSchema, componentSchemas, createAgentEventBridge, machineRegistryId, registryCatalog };