@syntrologie/runtime-sdk 0.2.21 → 1.0.0-canary.1

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 (311) hide show
  1. package/CAPABILITIES.md +721 -460
  2. package/README.md +310 -68
  3. package/dist/RuntimeProvider.d.ts +51 -0
  4. package/dist/RuntimeProvider.js +113 -0
  5. package/dist/RuntimeProvider.js.map +1 -0
  6. package/dist/SmartCanvasApp.d.ts +16 -10
  7. package/dist/SmartCanvasApp.js +45 -49
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/SmartCanvasElement.d.ts +5 -5
  10. package/dist/SmartCanvasElement.js +24 -14
  11. package/dist/SmartCanvasElement.js.map +1 -1
  12. package/dist/SmartCanvasPortal.d.ts +2 -2
  13. package/dist/SmartCanvasPortal.js +2 -2
  14. package/dist/actions/ActionEngine.d.ts +11 -0
  15. package/dist/actions/ActionEngine.js +274 -0
  16. package/dist/actions/ActionEngine.js.map +1 -0
  17. package/dist/actions/executors/index.d.ts +117 -0
  18. package/dist/actions/executors/index.js +242 -0
  19. package/dist/actions/executors/index.js.map +1 -0
  20. package/dist/actions/executors/tour.d.ts +18 -0
  21. package/dist/actions/executors/tour.js +332 -0
  22. package/dist/actions/executors/tour.js.map +1 -0
  23. package/dist/actions/index.d.ts +10 -0
  24. package/dist/actions/index.js +12 -0
  25. package/dist/actions/index.js.map +1 -0
  26. package/dist/actions/types.d.ts +399 -0
  27. package/dist/actions/types.js +8 -0
  28. package/dist/actions/types.js.map +1 -0
  29. package/dist/actions/validation.d.ts +14 -0
  30. package/dist/actions/validation.js +602 -0
  31. package/dist/actions/validation.js.map +1 -0
  32. package/dist/antiFlicker.js +1 -1
  33. package/dist/api.d.ts +40 -26
  34. package/dist/api.js +86 -56
  35. package/dist/api.js.map +1 -1
  36. package/dist/apps/AppContext.d.ts +31 -0
  37. package/dist/apps/AppContext.js +93 -0
  38. package/dist/apps/AppContext.js.map +1 -0
  39. package/dist/apps/AppLoader.d.ts +84 -0
  40. package/dist/apps/AppLoader.js +256 -0
  41. package/dist/apps/AppLoader.js.map +1 -0
  42. package/dist/apps/AppRegistry.d.ts +102 -0
  43. package/dist/apps/AppRegistry.js +317 -0
  44. package/dist/apps/AppRegistry.js.map +1 -0
  45. package/dist/apps/adaptive-chatbot/index.js +7 -0
  46. package/dist/apps/adaptive-chatbot/index.js.map +7 -0
  47. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  48. package/dist/apps/examples/gamification-app.example.js +329 -0
  49. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  50. package/dist/apps/faq/index.js +11 -0
  51. package/dist/apps/faq/index.js.map +7 -0
  52. package/dist/apps/gamification/index.js +2 -0
  53. package/dist/apps/gamification/index.js.map +7 -0
  54. package/dist/apps/index.d.ts +15 -0
  55. package/dist/apps/index.js +17 -0
  56. package/dist/apps/index.js.map +1 -0
  57. package/dist/apps/nav/index.js +11 -0
  58. package/dist/apps/nav/index.js.map +7 -0
  59. package/dist/apps/types.d.ts +231 -0
  60. package/dist/apps/types.js +8 -0
  61. package/dist/apps/types.js.map +1 -0
  62. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  63. package/dist/blocks/data/ComparisonBlock.js +40 -40
  64. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  65. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  66. package/dist/blocks/data/StatsBlock.js +41 -41
  67. package/dist/blocks/data/StatsBlock.js.map +1 -1
  68. package/dist/blocks/data/index.d.ts +2 -2
  69. package/dist/blocks/data/index.js +2 -2
  70. package/dist/blocks/index.d.ts +5 -5
  71. package/dist/blocks/index.js +29 -29
  72. package/dist/blocks/index.js.map +1 -1
  73. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  74. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  75. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  76. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  77. package/dist/blocks/interactive/RatingBlock.js +75 -65
  78. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  79. package/dist/blocks/interactive/index.d.ts +2 -2
  80. package/dist/blocks/interactive/index.js +2 -2
  81. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  82. package/dist/blocks/notification/NotificationBlock.js +67 -63
  83. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  84. package/dist/blocks/notification/index.d.ts +1 -1
  85. package/dist/blocks/notification/index.js +1 -1
  86. package/dist/bootstrap.d.ts +32 -8
  87. package/dist/bootstrap.js +204 -85
  88. package/dist/bootstrap.js.map +1 -1
  89. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  90. package/dist/components/ShadowCanvasOverlay.js +144 -107
  91. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  92. package/dist/components/TileCard.d.ts +5 -5
  93. package/dist/components/TileCard.js +204 -154
  94. package/dist/components/TileCard.js.map +1 -1
  95. package/dist/components/TileWheel.d.ts +3 -3
  96. package/dist/components/TileWheel.js +7 -7
  97. package/dist/components/TileWheel.js.map +1 -1
  98. package/dist/config-validator.d.ts +49 -0
  99. package/dist/config-validator.js +173 -0
  100. package/dist/config-validator.js.map +1 -0
  101. package/dist/configFetcher.d.ts +2 -2
  102. package/dist/configFetcher.js +20 -8
  103. package/dist/configFetcher.js.map +1 -1
  104. package/dist/context/ContextManager.d.ts +3 -3
  105. package/dist/context/ContextManager.js +15 -15
  106. package/dist/context/ContextManager.js.map +1 -1
  107. package/dist/context/index.d.ts +4 -4
  108. package/dist/context/index.js +3 -3
  109. package/dist/context/schema.d.ts +17 -17
  110. package/dist/context/schema.js +1 -1
  111. package/dist/decisions/engine.d.ts +5 -5
  112. package/dist/decisions/engine.js +13 -13
  113. package/dist/decisions/index.d.ts +6 -6
  114. package/dist/decisions/index.js +5 -5
  115. package/dist/decisions/schema.d.ts +97 -97
  116. package/dist/decisions/schema.js +20 -20
  117. package/dist/decisions/strategies/rules.d.ts +1 -1
  118. package/dist/decisions/strategies/rules.js +24 -24
  119. package/dist/decisions/strategies/rules.js.map +1 -1
  120. package/dist/decisions/strategies/score.d.ts +1 -1
  121. package/dist/decisions/strategies/score.js +3 -3
  122. package/dist/decisions/types.d.ts +19 -19
  123. package/dist/earlyPatcher.d.ts +8 -20
  124. package/dist/earlyPatcher.js +13 -62
  125. package/dist/earlyPatcher.js.map +1 -1
  126. package/dist/editorLoader.d.ts +2 -0
  127. package/dist/editorLoader.js +104 -58
  128. package/dist/editorLoader.js.map +1 -1
  129. package/dist/events/EventBus.d.ts +3 -3
  130. package/dist/events/EventBus.js +5 -7
  131. package/dist/events/EventBus.js.map +1 -1
  132. package/dist/events/index.d.ts +6 -6
  133. package/dist/events/index.js +5 -5
  134. package/dist/events/normalizers/canvas.d.ts +2 -2
  135. package/dist/events/normalizers/canvas.js +3 -3
  136. package/dist/events/normalizers/canvas.js.map +1 -1
  137. package/dist/events/normalizers/posthog.d.ts +25 -1
  138. package/dist/events/normalizers/posthog.js +35 -27
  139. package/dist/events/normalizers/posthog.js.map +1 -1
  140. package/dist/events/schema.d.ts +13 -13
  141. package/dist/events/schema.js +2 -2
  142. package/dist/events/types.d.ts +7 -1
  143. package/dist/events/types.js +29 -21
  144. package/dist/events/types.js.map +1 -1
  145. package/dist/experiments/adapters/growthbook.d.ts +4 -4
  146. package/dist/experiments/adapters/growthbook.js +5 -5
  147. package/dist/experiments/adapters/growthbook.js.map +1 -1
  148. package/dist/experiments/index.d.ts +3 -3
  149. package/dist/experiments/index.js +1 -1
  150. package/dist/experiments/registry.d.ts +2 -2
  151. package/dist/experiments/registry.js +2 -2
  152. package/dist/experiments/types.d.ts +5 -1
  153. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  154. package/dist/fetchers/cdnFetcher.js +4 -8
  155. package/dist/fetchers/cdnFetcher.js.map +1 -1
  156. package/dist/fetchers/experimentsFetcher.d.ts +2 -2
  157. package/dist/fetchers/experimentsFetcher.js +7 -7
  158. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  159. package/dist/fetchers/index.d.ts +3 -3
  160. package/dist/fetchers/index.js +2 -2
  161. package/dist/fetchers/index.js.map +1 -1
  162. package/dist/fetchers/registry.d.ts +1 -1
  163. package/dist/fetchers/registry.js +4 -4
  164. package/dist/fetchers/types.d.ts +1 -1
  165. package/dist/hooks/useCanvasOverlays.d.ts +8 -5
  166. package/dist/hooks/useCanvasOverlays.js +66 -17
  167. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  168. package/dist/hooks/useHostPatches.d.ts +2 -2
  169. package/dist/hooks/useHostPatches.js +8 -8
  170. package/dist/hooks/useHostPatches.js.map +1 -1
  171. package/dist/hooks/useShadowCanvasConfig.d.ts +5 -9
  172. package/dist/hooks/useShadowCanvasConfig.js +7 -5
  173. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  174. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  175. package/dist/hostPatcher/core/patcher.js +18 -9
  176. package/dist/hostPatcher/core/patcher.js.map +1 -1
  177. package/dist/hostPatcher/core/sanitizer.js +24 -3
  178. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  179. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  180. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  181. package/dist/hostPatcher/utils/anchors.js +4 -6
  182. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  183. package/dist/index.d.ts +34 -27
  184. package/dist/index.js +36 -24
  185. package/dist/index.js.map +1 -1
  186. package/dist/logger.d.ts +29 -0
  187. package/dist/logger.js +81 -0
  188. package/dist/logger.js.map +1 -0
  189. package/dist/metrics/index.d.ts +1 -1
  190. package/dist/metrics/index.js +1 -1
  191. package/dist/metrics/sessionMetrics.d.ts +1 -1
  192. package/dist/metrics/sessionMetrics.js +6 -6
  193. package/dist/overlays/fetcher.d.ts +2 -2
  194. package/dist/overlays/fetcher.js +4 -4
  195. package/dist/overlays/recipeRegistry.js +2 -2
  196. package/dist/overlays/recipeRegistry.js.map +1 -1
  197. package/dist/overlays/runtime/anchor/resolve.js +1 -1
  198. package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
  199. package/dist/overlays/runtime/index.d.ts +7 -7
  200. package/dist/overlays/runtime/index.js +7 -7
  201. package/dist/overlays/runtime/overlay/highlight.js +39 -39
  202. package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
  203. package/dist/overlays/runtime/overlay/modal.js +5 -5
  204. package/dist/overlays/runtime/overlay/modal.js.map +1 -1
  205. package/dist/overlays/runtime/overlay/root.js +1 -1
  206. package/dist/overlays/runtime/overlay/runner.js +70 -23
  207. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  208. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  209. package/dist/overlays/runtime/overlay/tooltip.js +10 -10
  210. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  211. package/dist/overlays/runtime/utils/dom.js +4 -1
  212. package/dist/overlays/runtime/utils/dom.js.map +1 -1
  213. package/dist/overlays/schema.d.ts +146 -146
  214. package/dist/overlays/schema.js +12 -8
  215. package/dist/overlays/schema.js.map +1 -1
  216. package/dist/react.d.ts +7 -7
  217. package/dist/react.js +4 -4
  218. package/dist/react.js.map +1 -1
  219. package/dist/render/RenderContext.d.ts +2 -2
  220. package/dist/render/RenderContext.js +5 -5
  221. package/dist/render/RenderContext.js.map +1 -1
  222. package/dist/render/index.d.ts +3 -3
  223. package/dist/render/index.js +1 -1
  224. package/dist/render/types.d.ts +4 -4
  225. package/dist/runtime.d.ts +32 -8
  226. package/dist/runtime.js +87 -13
  227. package/dist/runtime.js.map +1 -1
  228. package/dist/smart-canvas.esm.js +155 -78
  229. package/dist/smart-canvas.esm.js.map +4 -4
  230. package/dist/smart-canvas.js +38776 -33216
  231. package/dist/smart-canvas.js.map +4 -4
  232. package/dist/smart-canvas.min.js +156 -78
  233. package/dist/smart-canvas.min.js.map +4 -4
  234. package/dist/state/StateStore.d.ts +1 -1
  235. package/dist/state/StateStore.js +9 -9
  236. package/dist/state/StateStore.js.map +1 -1
  237. package/dist/state/helpers/cooldowns.d.ts +1 -1
  238. package/dist/state/helpers/cooldowns.js +1 -1
  239. package/dist/state/helpers/dismissals.d.ts +1 -1
  240. package/dist/state/helpers/dismissals.js +1 -1
  241. package/dist/state/helpers/frequency.d.ts +1 -1
  242. package/dist/state/helpers/frequency.js +1 -1
  243. package/dist/state/index.d.ts +4 -4
  244. package/dist/state/index.js +3 -3
  245. package/dist/state/schema.d.ts +1 -1
  246. package/dist/state/schema.js +1 -1
  247. package/dist/store/example.d.ts +1 -0
  248. package/dist/store/example.js +43 -0
  249. package/dist/store/example.js.map +1 -0
  250. package/dist/store/mini-effector.d.ts +46 -0
  251. package/dist/store/mini-effector.js +88 -0
  252. package/dist/store/mini-effector.js.map +1 -0
  253. package/dist/surfaces/Surfaces.d.ts +11 -0
  254. package/dist/surfaces/Surfaces.js +361 -0
  255. package/dist/surfaces/Surfaces.js.map +1 -0
  256. package/dist/surfaces/index.d.ts +9 -0
  257. package/dist/surfaces/index.js +12 -0
  258. package/dist/surfaces/index.js.map +1 -0
  259. package/dist/surfaces/positioning.d.ts +50 -0
  260. package/dist/surfaces/positioning.js +228 -0
  261. package/dist/surfaces/positioning.js.map +1 -0
  262. package/dist/surfaces/types.d.ts +167 -0
  263. package/dist/surfaces/types.js +23 -0
  264. package/dist/surfaces/types.js.map +1 -0
  265. package/dist/telemetry/adapters/noop.d.ts +12 -0
  266. package/dist/telemetry/adapters/noop.js +42 -0
  267. package/dist/telemetry/adapters/noop.js.map +1 -0
  268. package/dist/telemetry/adapters/posthog.d.ts +8 -2
  269. package/dist/telemetry/adapters/posthog.js +36 -14
  270. package/dist/telemetry/adapters/posthog.js.map +1 -1
  271. package/dist/telemetry/index.d.ts +4 -3
  272. package/dist/telemetry/index.js +3 -2
  273. package/dist/telemetry/index.js.map +1 -1
  274. package/dist/telemetry/registry.d.ts +2 -2
  275. package/dist/telemetry/registry.js +4 -2
  276. package/dist/telemetry/registry.js.map +1 -1
  277. package/dist/telemetry/types.d.ts +1 -1
  278. package/dist/theme/ThemeProvider.d.ts +2 -2
  279. package/dist/theme/ThemeProvider.js +21 -21
  280. package/dist/theme/ThemeProvider.js.map +1 -1
  281. package/dist/theme/defaultTheme.d.ts +2 -2
  282. package/dist/theme/defaultTheme.js +111 -111
  283. package/dist/theme/defaultTheme.js.map +1 -1
  284. package/dist/theme/extractHostTheme.d.ts +1 -1
  285. package/dist/theme/extractHostTheme.js +42 -44
  286. package/dist/theme/extractHostTheme.js.map +1 -1
  287. package/dist/theme/index.d.ts +5 -5
  288. package/dist/theme/index.js +3 -3
  289. package/dist/theme/index.js.map +1 -1
  290. package/dist/theme/types.d.ts +2 -2
  291. package/dist/token.d.ts +2 -0
  292. package/dist/token.js +3 -6
  293. package/dist/token.js.map +1 -1
  294. package/dist/types-only.d.ts +32 -0
  295. package/dist/types-only.js +11 -0
  296. package/dist/types-only.js.map +1 -0
  297. package/dist/types.d.ts +89 -56
  298. package/dist/types.js +15 -2
  299. package/dist/types.js.map +1 -1
  300. package/dist/version.d.ts +13 -0
  301. package/dist/version.js +14 -0
  302. package/dist/version.js.map +1 -0
  303. package/dist/widgets/WidgetRegistry.d.ts +139 -0
  304. package/dist/widgets/WidgetRegistry.js +182 -0
  305. package/dist/widgets/WidgetRegistry.js.map +1 -0
  306. package/dist/widgets/index.d.ts +7 -0
  307. package/dist/widgets/index.js +7 -0
  308. package/dist/widgets/index.js.map +1 -0
  309. package/package.json +26 -10
  310. package/schema/canvas-config.schema.json +488 -254
  311. package/schema/runtime-context.schema.json +1 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppRegistry.js","sourceRoot":"","sources":["../../src/apps/AppRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import{useRef as R,useEffect as M}from"react";import{useState as g,useCallback as f,useRef as m}from"react";import{jsx as A,jsxs as I}from"react/jsx-runtime";var n={mount(t,r){let{config:s,runtime:i,tileId:a="chatbot-widget"}=r||{};return!s||!i?(t.innerHTML='<div style="padding: 16px; color: #94a3b8;">Chat widget requires config and runtime.</div>',()=>{t.innerHTML=""}):(t.innerHTML=`
2
+ <div style="padding: 16px; font-family: system-ui; color: #e2e8f0;">
3
+ <p style="margin: 0 0 8px; color: #94a3b8;">${s.greeting||"Hi! How can I help?"}</p>
4
+ <p style="margin: 0; font-size: 12px; color: #64748b;">Chat widget mounted. Awaiting React renderer.</p>
5
+ </div>
6
+ `,()=>{t.innerHTML=""})}};var e={id:"adaptive-chatbot",version:"1.0.0",name:"Chat Assistant",description:"AI chat assistant with action execution capabilities",executors:[],widgets:[{id:"adaptive-chatbot:assistant",component:n,metadata:{name:"Chat Assistant",description:"AI-powered chat assistant that can execute DOM actions",icon:"\u{1F4AC}"}}]};var o={id:"adaptive-chatbot",version:e.version,name:e.name,description:e.description,runtime:{actions:[],widgets:e.widgets},metadata:{isBuiltIn:!1}};if(typeof window<"u"){let t=window.__SYNOS_APP_REGISTRY__;t&&typeof t.register=="function"&&t.register(o)}var T=o;export{T as default,o as manifest};
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../adaptives/adaptive-chatbot/src/ChatAssistant.tsx", "../../../../adaptives/adaptive-chatbot/src/useChat.ts", "../../../../adaptives/adaptive-chatbot/src/runtime.ts", "../../../../adaptives/adaptive-chatbot/src/cdn.ts"],
4
+ "sourcesContent": ["/**\n * Adaptive Chatbot - ChatAssistant Component\n *\n * Main React component for the AI chat assistant widget.\n * Renders a message list with auto-scroll, loading indicator, and input form.\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport { useChat } from './useChat';\nimport type { ChatMessage, ChatbotWidgetRuntime, ChatbotConfig } from './types';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n },\n messageList: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '12px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '8px',\n },\n messageBubble: {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n lineHeight: 1.5,\n wordBreak: 'break-word' as const,\n },\n userMessage: {\n alignSelf: 'flex-end' as const,\n backgroundColor: '#6366f1',\n color: '#ffffff',\n borderBottomRightRadius: '4px',\n },\n assistantMessage: {\n alignSelf: 'flex-start' as const,\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n color: '#e2e8f0',\n borderBottomLeftRadius: '4px',\n },\n loadingDots: {\n alignSelf: 'flex-start' as const,\n padding: '8px 16px',\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n borderRadius: '12px',\n color: '#94a3b8',\n fontSize: '13px',\n },\n errorBanner: {\n padding: '8px 12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: '#ef4444',\n fontSize: '13px',\n borderRadius: '8px',\n margin: '0 12px',\n },\n inputForm: {\n display: 'flex',\n gap: '8px',\n padding: '12px',\n borderTop: '1px solid rgba(255, 255, 255, 0.06)',\n },\n input: {\n flex: 1,\n padding: '8px 12px',\n borderRadius: '8px',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n color: '#f1f5f9',\n fontSize: '14px',\n outline: 'none',\n fontFamily: 'inherit',\n },\n sendButton: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: '#6366f1',\n color: '#ffffff',\n fontWeight: 600,\n fontSize: '13px',\n cursor: 'pointer',\n whiteSpace: 'nowrap' as const,\n },\n sendButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed' as const,\n },\n};\n\n// ============================================================================\n// MessageBubble Component\n// ============================================================================\n\nfunction MessageBubble({ message }: { message: ChatMessage }) {\n const isUser = message.role === 'user';\n const bubbleStyle = {\n ...styles.messageBubble,\n ...(isUser ? styles.userMessage : styles.assistantMessage),\n };\n\n return <div style={bubbleStyle}>{message.text}</div>;\n}\n\n// ============================================================================\n// ChatAssistant Component\n// ============================================================================\n\nexport interface ChatAssistantProps {\n config: ChatbotConfig;\n runtime: ChatbotWidgetRuntime;\n tileId: string;\n}\n\nexport function ChatAssistant({ config, runtime, tileId }: ChatAssistantProps) {\n const {\n messages,\n isLoading,\n error,\n sendMessage,\n clearMessages: _clearMessages,\n } = useChat({\n backendUrl: config.backendUrl,\n tileId,\n runtime,\n greeting: config.greeting,\n maxHistory: config.maxHistory,\n mlflowRunId: config.mlflowRunId,\n });\n\n const messageListRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Auto-scroll to bottom on new messages\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, [messages, isLoading]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const input = inputRef.current;\n if (!input || !input.value.trim() || isLoading) return;\n\n const text = input.value;\n input.value = '';\n sendMessage(text);\n };\n\n return (\n <div style={styles.container} data-testid=\"chat-assistant\">\n {/* Message list */}\n <div ref={messageListRef} style={styles.messageList}>\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} />\n ))}\n {isLoading && <div style={styles.loadingDots}>Thinking...</div>}\n </div>\n\n {/* Error banner */}\n {error && <div style={styles.errorBanner}>{error}</div>}\n\n {/* Input form */}\n <form onSubmit={handleSubmit} style={styles.inputForm}>\n <input\n ref={inputRef}\n style={styles.input}\n placeholder=\"Ask anything...\"\n disabled={isLoading}\n data-testid=\"chat-input\"\n />\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n ...styles.sendButton,\n ...(isLoading ? styles.sendButtonDisabled : {}),\n }}\n data-testid=\"chat-send\"\n >\n Send\n </button>\n </form>\n </div>\n );\n}\n\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n\nexport const ChatAssistantMountableWidget = {\n mount(container: HTMLElement, mountConfig?: Record<string, unknown>) {\n const {\n config,\n runtime,\n tileId: _tileId = 'chatbot-widget',\n } = (mountConfig || {}) as {\n config?: ChatbotConfig;\n runtime?: ChatbotWidgetRuntime;\n tileId?: string;\n };\n\n if (!config || !runtime) {\n container.innerHTML =\n '<div style=\"padding: 16px; color: #94a3b8;\">Chat widget requires config and runtime.</div>';\n return () => {\n container.innerHTML = '';\n };\n }\n\n // Simple HTML fallback \u2014 full React rendering is handled by the runtime\n container.innerHTML = `\n <div style=\"padding: 16px; font-family: system-ui; color: #e2e8f0;\">\n <p style=\"margin: 0 0 8px; color: #94a3b8;\">${config.greeting || 'Hi! How can I help?'}</p>\n <p style=\"margin: 0; font-size: 12px; color: #64748b;\">Chat widget mounted. Awaiting React renderer.</p>\n </div>\n `;\n\n return () => {\n container.innerHTML = '';\n };\n },\n};\n\nexport default ChatAssistant;\n", "/**\n * Adaptive Chatbot - useChat Hook\n *\n * React hook managing chat message state, API communication,\n * history management, and action execution via the runtime ActionEngine.\n */\n\nimport { useState, useCallback, useRef } from 'react';\nimport { sendMessage } from './apiClient';\nimport { parseActions } from './actionParser';\nimport type { ChatMessage, ChatbotWidgetRuntime, BatchActionHandle } from './types';\n\nexport interface UseChatOptions {\n backendUrl: string;\n tileId: string;\n runtime: ChatbotWidgetRuntime;\n greeting?: string;\n maxHistory?: number;\n mlflowRunId?: string;\n config?: Record<string, unknown>;\n}\n\nexport interface UseChatReturn {\n messages: ChatMessage[];\n isLoading: boolean;\n error: string | null;\n sendMessage: (text: string) => Promise<void>;\n clearMessages: () => void;\n}\n\nlet nextId = 0;\nfunction generateId(): string {\n return `msg-${Date.now()}-${++nextId}`;\n}\n\nexport function useChat(options: UseChatOptions): UseChatReturn {\n const { backendUrl, tileId, runtime, greeting, maxHistory = 20, mlflowRunId, config } = options;\n\n const [messages, setMessages] = useState<ChatMessage[]>(() => {\n if (greeting) {\n return [\n {\n id: generateId(),\n role: 'assistant' as const,\n text: greeting,\n timestamp: Date.now(),\n },\n ];\n }\n return [];\n });\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const batchHandleRef = useRef<BatchActionHandle | null>(null);\n\n const send = useCallback(\n async (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n setError(null);\n\n const userMessage: ChatMessage = {\n id: generateId(),\n role: 'user',\n text: trimmed,\n timestamp: Date.now(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n setIsLoading(true);\n\n try {\n // Build history from current messages + new user message\n const currentMessages = [...messages, userMessage];\n const historySlice = currentMessages.slice(-maxHistory).map((m) => ({\n role: m.role,\n content: m.text,\n }));\n\n const response = await sendMessage(backendUrl, {\n message: trimmed,\n history: historySlice,\n mlflow_run_id: mlflowRunId,\n current_config: config,\n });\n\n // Parse actions from the LLM response\n const { displayText, actions } = parseActions(response.response);\n\n const assistantMessage: ChatMessage = {\n id: generateId(),\n role: 'assistant',\n text: displayText,\n timestamp: Date.now(),\n };\n\n setMessages((prev) => [...prev, assistantMessage]);\n\n // Execute actions if present\n if (actions.length > 0) {\n // Revert previous batch\n if (batchHandleRef.current?.isApplied()) {\n await batchHandleRef.current.revertAll();\n }\n\n batchHandleRef.current = await runtime.actions.applyBatch(actions);\n\n runtime.events.publish('chatbot.actions_applied', {\n count: actions.length,\n kinds: actions.map((a) => a.kind),\n tileId,\n });\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(message);\n } finally {\n setIsLoading(false);\n }\n },\n [backendUrl, messages, maxHistory, mlflowRunId, config, runtime, tileId]\n );\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n setError(null);\n // Revert any active actions\n if (batchHandleRef.current?.isApplied()) {\n batchHandleRef.current.revertAll();\n batchHandleRef.current = null;\n }\n sessionStorage.removeItem(`syntro:chatbot:history:${tileId}`);\n }, [tileId]);\n\n return {\n messages,\n isLoading,\n error,\n sendMessage: send,\n clearMessages,\n };\n}\n", "/**\n * Adaptive Chatbot - Runtime Module\n *\n * Runtime manifest for the AI chat assistant adaptive.\n * This is a widget-based adaptive with no action executors.\n */\n\nimport { ChatAssistantMountableWidget } from './ChatAssistant';\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\nexport const runtime = {\n id: 'adaptive-chatbot',\n version: '1.0.0',\n name: 'Chat Assistant',\n description: 'AI chat assistant with action execution capabilities',\n\n /** No action executors \u2014 chatbot uses existing action kinds via applyBatch */\n executors: [],\n\n /** Widget definitions for the runtime's WidgetRegistry */\n widgets: [\n {\n id: 'adaptive-chatbot:assistant',\n component: ChatAssistantMountableWidget,\n metadata: {\n name: 'Chat Assistant',\n description: 'AI-powered chat assistant that can execute DOM actions',\n icon: '\uD83D\uDCAC',\n },\n },\n ],\n};\n\nexport default runtime;\n", "/**\n * CDN Entry Point for Adaptive Chatbot\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport { runtime } from './runtime';\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: 'adaptive-chatbot',\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n actions: [],\n widgets: runtime.widgets,\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== 'undefined') {\n const globalRegistry = (window as any).__SYNOS_APP_REGISTRY__;\n if (globalRegistry && typeof globalRegistry.register === 'function') {\n globalRegistry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
5
+ "mappings": "AAOA,OAAgB,UAAAA,EAAQ,aAAAC,MAAiB,QCAzC,OAAS,YAAAC,EAAU,eAAAC,EAAa,UAAAC,MAAc,QDwGrC,cAAAC,EAoDH,QAAAC,MApDG,oBA2FF,IAAMC,EAA+B,CAC1C,MAAMC,EAAwBC,EAAuC,CACnE,GAAM,CACJ,OAAAC,EACA,QAAAC,EACA,OAAQC,EAAU,gBACpB,EAAKH,GAAe,CAAC,EAMrB,MAAI,CAACC,GAAU,CAACC,GACdH,EAAU,UACR,6FACK,IAAM,CACXA,EAAU,UAAY,EACxB,IAIFA,EAAU,UAAY;AAAA;AAAA,sDAE4BE,EAAO,UAAY,qBAAqB;AAAA;AAAA;AAAA,MAKnF,IAAM,CACXF,EAAU,UAAY,EACxB,EACF,CACF,EE7NO,IAAMK,EAAU,CACrB,GAAI,mBACJ,QAAS,QACT,KAAM,iBACN,YAAa,uDAGb,UAAW,CAAC,EAGZ,QAAS,CACP,CACE,GAAI,6BACJ,UAAWC,EACX,SAAU,CACR,KAAM,iBACN,YAAa,yDACb,KAAM,WACR,CACF,CACF,CACF,ECrBO,IAAMC,EAAW,CACtB,GAAI,mBACJ,QAASC,EAAQ,QACjB,KAAMA,EAAQ,KACd,YAAaA,EAAQ,YACrB,QAAS,CACP,QAAS,CAAC,EACV,QAASA,EAAQ,OACnB,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAkB,OAAe,uBACnCA,GAAkB,OAAOA,EAAe,UAAa,YACvDA,EAAe,SAASF,CAAQ,CAEpC,CAEA,IAAOG,EAAQH",
6
+ "names": ["useRef", "useEffect", "useState", "useCallback", "useRef", "jsx", "jsxs", "ChatAssistantMountableWidget", "container", "mountConfig", "config", "runtime", "_tileId", "runtime", "ChatAssistantMountableWidget", "manifest", "runtime", "globalRegistry", "cdn_default"]
7
+ }
@@ -0,0 +1,305 @@
1
+ /**
2
+ * EXAMPLE: Gamification App
3
+ *
4
+ * This file demonstrates the complete structure of a SynOS app.
5
+ * Apps are self-contained modules that can be loaded from CDN.
6
+ *
7
+ * An app provides:
8
+ * 1. Runtime extensions (actions, widgets, event handlers)
9
+ * 2. Config schema (Zod validation)
10
+ * 3. Editor component (for visual editing)
11
+ *
12
+ * This file would be bundled as a standalone module (ES or UMD)
13
+ * and deployed to CDN at: {cdnBase}/apps/gamification/index.js
14
+ */
15
+ import { z } from 'zod';
16
+ import type { NormalizedEvent } from '../../events/types';
17
+ import type { AppEventContext } from '../types';
18
+ /**
19
+ * App config schema - defines what config this app expects.
20
+ */
21
+ export declare const configSchema: z.ZodObject<{
22
+ badges: z.ZodDefault<z.ZodArray<z.ZodObject<{
23
+ id: z.ZodString;
24
+ name: z.ZodString;
25
+ description: z.ZodOptional<z.ZodString>;
26
+ icon: z.ZodString;
27
+ trigger: z.ZodObject<{
28
+ event: z.ZodString;
29
+ count: z.ZodOptional<z.ZodNumber>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ event: string;
32
+ count?: number | undefined;
33
+ }, {
34
+ event: string;
35
+ count?: number | undefined;
36
+ }>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ trigger: {
39
+ event: string;
40
+ count?: number | undefined;
41
+ };
42
+ name: string;
43
+ id: string;
44
+ icon: string;
45
+ description?: string | undefined;
46
+ }, {
47
+ trigger: {
48
+ event: string;
49
+ count?: number | undefined;
50
+ };
51
+ name: string;
52
+ id: string;
53
+ icon: string;
54
+ description?: string | undefined;
55
+ }>, "many">>;
56
+ showProgress: z.ZodDefault<z.ZodBoolean>;
57
+ celebrationStyle: z.ZodDefault<z.ZodEnum<["confetti", "toast", "modal"]>>;
58
+ }, "strip", z.ZodTypeAny, {
59
+ badges: {
60
+ trigger: {
61
+ event: string;
62
+ count?: number | undefined;
63
+ };
64
+ name: string;
65
+ id: string;
66
+ icon: string;
67
+ description?: string | undefined;
68
+ }[];
69
+ showProgress: boolean;
70
+ celebrationStyle: "toast" | "modal" | "confetti";
71
+ }, {
72
+ badges?: {
73
+ trigger: {
74
+ event: string;
75
+ count?: number | undefined;
76
+ };
77
+ name: string;
78
+ id: string;
79
+ icon: string;
80
+ description?: string | undefined;
81
+ }[] | undefined;
82
+ showProgress?: boolean | undefined;
83
+ celebrationStyle?: "toast" | "modal" | "confetti" | undefined;
84
+ }>;
85
+ export type GamificationConfig = z.infer<typeof configSchema>;
86
+ /**
87
+ * Action: Award a badge to the user.
88
+ */
89
+ declare const AwardBadgeSchema: z.ZodObject<{
90
+ kind: z.ZodLiteral<"gamification:award_badge">;
91
+ badgeId: z.ZodString;
92
+ showCelebration: z.ZodDefault<z.ZodBoolean>;
93
+ label: z.ZodOptional<z.ZodString>;
94
+ }, "strip", z.ZodTypeAny, {
95
+ kind: "gamification:award_badge";
96
+ badgeId: string;
97
+ showCelebration: boolean;
98
+ label?: string | undefined;
99
+ }, {
100
+ kind: "gamification:award_badge";
101
+ badgeId: string;
102
+ label?: string | undefined;
103
+ showCelebration?: boolean | undefined;
104
+ }>;
105
+ /**
106
+ * Action: Show the progress widget.
107
+ */
108
+ declare const ShowProgressSchema: z.ZodObject<{
109
+ kind: z.ZodLiteral<"gamification:show_progress">;
110
+ slot: z.ZodDefault<z.ZodString>;
111
+ label: z.ZodOptional<z.ZodString>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ kind: "gamification:show_progress";
114
+ slot: string;
115
+ label?: string | undefined;
116
+ }, {
117
+ kind: "gamification:show_progress";
118
+ slot?: string | undefined;
119
+ label?: string | undefined;
120
+ }>;
121
+ /**
122
+ * Award badge executor.
123
+ */
124
+ declare function executeAwardBadge(action: z.infer<typeof AwardBadgeSchema>, context: any): Promise<{
125
+ cleanup: () => void;
126
+ }>;
127
+ /**
128
+ * Show progress executor.
129
+ */
130
+ declare function executeShowProgress(action: z.infer<typeof ShowProgressSchema>, context: any): Promise<{
131
+ cleanup: () => void;
132
+ }>;
133
+ /**
134
+ * Props passed to the editor component.
135
+ */
136
+ interface EditorPanelProps {
137
+ config: Record<string, unknown>;
138
+ onChange: (config: Record<string, unknown>) => void;
139
+ editor: {
140
+ setDirty: (dirty: boolean) => void;
141
+ navigateHome: () => Promise<boolean>;
142
+ save: () => Promise<void>;
143
+ publish: (captureScreenshot?: boolean) => Promise<void>;
144
+ };
145
+ platformClient?: unknown;
146
+ }
147
+ /**
148
+ * Gamification editor component.
149
+ */
150
+ declare function GamificationEditor({ config, onChange, editor }: EditorPanelProps): import("react/jsx-runtime").JSX.Element;
151
+ /**
152
+ * The complete app manifest.
153
+ * This is what gets registered with the AppRegistry.
154
+ */
155
+ export declare const manifest: {
156
+ id: string;
157
+ version: string;
158
+ name: string;
159
+ description: string;
160
+ runtime: {
161
+ actions: ({
162
+ kind: string;
163
+ schema: z.ZodObject<{
164
+ kind: z.ZodLiteral<"gamification:award_badge">;
165
+ badgeId: z.ZodString;
166
+ showCelebration: z.ZodDefault<z.ZodBoolean>;
167
+ label: z.ZodOptional<z.ZodString>;
168
+ }, "strip", z.ZodTypeAny, {
169
+ kind: "gamification:award_badge";
170
+ badgeId: string;
171
+ showCelebration: boolean;
172
+ label?: string | undefined;
173
+ }, {
174
+ kind: "gamification:award_badge";
175
+ badgeId: string;
176
+ label?: string | undefined;
177
+ showCelebration?: boolean | undefined;
178
+ }>;
179
+ executor: typeof executeAwardBadge;
180
+ } | {
181
+ kind: string;
182
+ schema: z.ZodObject<{
183
+ kind: z.ZodLiteral<"gamification:show_progress">;
184
+ slot: z.ZodDefault<z.ZodString>;
185
+ label: z.ZodOptional<z.ZodString>;
186
+ }, "strip", z.ZodTypeAny, {
187
+ kind: "gamification:show_progress";
188
+ slot: string;
189
+ label?: string | undefined;
190
+ }, {
191
+ kind: "gamification:show_progress";
192
+ slot?: string | undefined;
193
+ label?: string | undefined;
194
+ }>;
195
+ executor: typeof executeShowProgress;
196
+ })[];
197
+ widgets: ({
198
+ id: string;
199
+ component: {
200
+ mount(container: HTMLElement, config?: {
201
+ badgeId: string;
202
+ icon: string;
203
+ name: string;
204
+ }): () => void;
205
+ };
206
+ metadata: {
207
+ name: string;
208
+ icon: string;
209
+ };
210
+ } | {
211
+ id: string;
212
+ component: {
213
+ mount(container: HTMLElement, config?: {
214
+ progress: number;
215
+ total: number;
216
+ }): () => void;
217
+ };
218
+ metadata: {
219
+ name: string;
220
+ icon: string;
221
+ };
222
+ })[];
223
+ events: {
224
+ names: string[];
225
+ handler: (event: NormalizedEvent, _ctx: AppEventContext) => void;
226
+ }[];
227
+ };
228
+ configSchema: z.ZodObject<{
229
+ badges: z.ZodDefault<z.ZodArray<z.ZodObject<{
230
+ id: z.ZodString;
231
+ name: z.ZodString;
232
+ description: z.ZodOptional<z.ZodString>;
233
+ icon: z.ZodString;
234
+ trigger: z.ZodObject<{
235
+ event: z.ZodString;
236
+ count: z.ZodOptional<z.ZodNumber>;
237
+ }, "strip", z.ZodTypeAny, {
238
+ event: string;
239
+ count?: number | undefined;
240
+ }, {
241
+ event: string;
242
+ count?: number | undefined;
243
+ }>;
244
+ }, "strip", z.ZodTypeAny, {
245
+ trigger: {
246
+ event: string;
247
+ count?: number | undefined;
248
+ };
249
+ name: string;
250
+ id: string;
251
+ icon: string;
252
+ description?: string | undefined;
253
+ }, {
254
+ trigger: {
255
+ event: string;
256
+ count?: number | undefined;
257
+ };
258
+ name: string;
259
+ id: string;
260
+ icon: string;
261
+ description?: string | undefined;
262
+ }>, "many">>;
263
+ showProgress: z.ZodDefault<z.ZodBoolean>;
264
+ celebrationStyle: z.ZodDefault<z.ZodEnum<["confetti", "toast", "modal"]>>;
265
+ }, "strip", z.ZodTypeAny, {
266
+ badges: {
267
+ trigger: {
268
+ event: string;
269
+ count?: number | undefined;
270
+ };
271
+ name: string;
272
+ id: string;
273
+ icon: string;
274
+ description?: string | undefined;
275
+ }[];
276
+ showProgress: boolean;
277
+ celebrationStyle: "toast" | "modal" | "confetti";
278
+ }, {
279
+ badges?: {
280
+ trigger: {
281
+ event: string;
282
+ count?: number | undefined;
283
+ };
284
+ name: string;
285
+ id: string;
286
+ icon: string;
287
+ description?: string | undefined;
288
+ }[] | undefined;
289
+ showProgress?: boolean | undefined;
290
+ celebrationStyle?: "toast" | "modal" | "confetti" | undefined;
291
+ }>;
292
+ editor: {
293
+ component: typeof GamificationEditor;
294
+ panel: {
295
+ title: string;
296
+ icon: string;
297
+ description: string;
298
+ };
299
+ };
300
+ metadata: {
301
+ author: string;
302
+ tags: string[];
303
+ };
304
+ };
305
+ export default manifest;