synthos 0.7.2 → 0.9.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 (380) hide show
  1. package/README.md +215 -65
  2. package/default-pages/application/page.html +42 -0
  3. package/default-pages/application/page.json +10 -0
  4. package/default-pages/elevenlabs_effects_studio/page.html +1363 -0
  5. package/default-pages/elevenlabs_effects_studio/page.json +11 -0
  6. package/default-pages/elevenlabs_voice_studio/page.html +801 -0
  7. package/default-pages/elevenlabs_voice_studio/page.json +11 -0
  8. package/default-pages/{json_tools.html → json_tools/page.html} +13 -11
  9. package/default-pages/json_tools/page.json +10 -0
  10. package/default-pages/my_notes/notes/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json +5 -0
  11. package/default-pages/my_notes/page.html +132 -0
  12. package/default-pages/{my_notes.json → my_notes/page.json} +2 -2
  13. package/default-pages/neon_asteroids/files/Ambient_Space.mp3 +0 -0
  14. package/default-pages/neon_asteroids/files/Ambient_Space2.mp3 +0 -0
  15. package/default-pages/neon_asteroids/files/Ambient_Space3.mp3 +0 -0
  16. package/default-pages/neon_asteroids/files/Asteroid_Explosion.mp3 +0 -0
  17. package/default-pages/neon_asteroids/files/Hyperspace_Jump.mp3 +0 -0
  18. package/default-pages/neon_asteroids/files/Laser_Fire.mp3 +0 -0
  19. package/default-pages/neon_asteroids/files/Menu_Navigate.mp3 +0 -0
  20. package/default-pages/neon_asteroids/files/Power_Up_Collect.mp3 +0 -0
  21. package/default-pages/neon_asteroids/files/Saucer_Alert.mp3 +0 -0
  22. package/default-pages/neon_asteroids/files/Ship_Thrust.mp3 +0 -0
  23. package/default-pages/neon_asteroids/files/effects.json +74 -0
  24. package/default-pages/neon_asteroids/page.html +1822 -0
  25. package/default-pages/{neon_asteroids.json → neon_asteroids/page.json} +3 -3
  26. package/default-pages/oregon_trail/page.html +323 -0
  27. package/default-pages/oregon_trail/page.json +12 -0
  28. package/default-pages/retro_game_starter/page.html +1308 -0
  29. package/default-pages/retro_game_starter/page.json +12 -0
  30. package/default-pages/{sidebar_builder.html → sidebar_page/page.html} +12 -10
  31. package/default-pages/sidebar_page/page.json +10 -0
  32. package/default-pages/{solar_explorer.html → solar_explorer/page.html} +24 -29
  33. package/default-pages/{solar_explorer.json → solar_explorer/page.json} +4 -4
  34. package/default-pages/{solar_tutorial.html → solar_tutorial/page.html} +12 -10
  35. package/default-pages/solar_tutorial/page.json +10 -0
  36. package/default-pages/{two-panel_builder.html → two-panel_page/page.html} +13 -11
  37. package/default-pages/two-panel_page/page.json +10 -0
  38. package/default-pages/us_map/page.html +193 -0
  39. package/default-pages/us_map/page.json +12 -0
  40. package/default-pages/us_map_1850/page.html +326 -0
  41. package/default-pages/us_map_1850/page.json +12 -0
  42. package/default-pages/western_cities_1850/page.html +527 -0
  43. package/default-pages/western_cities_1850/page.json +12 -0
  44. package/default-themes/aurora-dawn.json +19 -0
  45. package/default-themes/aurora-dawn.v3.css +198 -0
  46. package/default-themes/aurora-dusk.json +19 -0
  47. package/default-themes/aurora-dusk.v3.css +200 -0
  48. package/default-themes/cosmos-dawn.json +19 -0
  49. package/default-themes/cosmos-dawn.v3.css +198 -0
  50. package/default-themes/cosmos-dusk.json +19 -0
  51. package/default-themes/cosmos-dusk.v3.css +200 -0
  52. package/default-themes/high-contrast-dark.json +19 -0
  53. package/default-themes/high-contrast-dark.v3.css +200 -0
  54. package/default-themes/high-contrast-light.json +19 -0
  55. package/default-themes/high-contrast-light.v3.css +198 -0
  56. package/default-themes/{nebula-dawn.css → nebula-dawn.v2.css} +134 -0
  57. package/default-themes/nebula-dawn.v3.css +199 -0
  58. package/default-themes/{nebula-dusk.css → nebula-dusk.v2.css} +128 -0
  59. package/default-themes/nebula-dusk.v3.css +201 -0
  60. package/default-themes/solar-flare-dawn.json +19 -0
  61. package/default-themes/solar-flare-dawn.v3.css +198 -0
  62. package/default-themes/solar-flare-dusk.json +19 -0
  63. package/default-themes/solar-flare-dusk.v3.css +200 -0
  64. package/dist/agents/a2a/a2aProvider.d.ts.map +1 -0
  65. package/dist/agents/a2a/a2aProvider.js +126 -0
  66. package/dist/agents/a2a/a2aProvider.js.map +1 -0
  67. package/dist/agents/discovery.d.ts.map +1 -0
  68. package/dist/agents/discovery.js +52 -0
  69. package/dist/agents/discovery.js.map +1 -0
  70. package/dist/agents/index.d.ts +7 -0
  71. package/dist/agents/index.d.ts.map +1 -0
  72. package/dist/agents/index.js +20 -0
  73. package/dist/agents/index.js.map +1 -0
  74. package/dist/agents/openclaw/gatewayManager.d.ts +117 -0
  75. package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -0
  76. package/dist/agents/openclaw/gatewayManager.js +486 -0
  77. package/dist/agents/openclaw/gatewayManager.js.map +1 -0
  78. package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -0
  79. package/dist/agents/openclaw/openclawProvider.js +237 -0
  80. package/dist/agents/openclaw/openclawProvider.js.map +1 -0
  81. package/dist/agents/openclaw/sshTunnelManager.d.ts +25 -0
  82. package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -0
  83. package/dist/agents/openclaw/sshTunnelManager.js +359 -0
  84. package/dist/agents/openclaw/sshTunnelManager.js.map +1 -0
  85. package/dist/agents/types.d.ts.map +1 -0
  86. package/dist/agents/types.js +6 -0
  87. package/dist/agents/types.js.map +1 -0
  88. package/dist/builders/anthropic.d.ts +31 -0
  89. package/dist/builders/anthropic.d.ts.map +1 -0
  90. package/dist/builders/anthropic.js +227 -0
  91. package/dist/builders/anthropic.js.map +1 -0
  92. package/dist/builders/fireworksai.d.ts +9 -0
  93. package/dist/builders/fireworksai.d.ts.map +1 -0
  94. package/dist/builders/fireworksai.js +57 -0
  95. package/dist/builders/fireworksai.js.map +1 -0
  96. package/dist/builders/index.d.ts +13 -0
  97. package/dist/builders/index.d.ts.map +1 -0
  98. package/dist/builders/index.js +31 -0
  99. package/dist/builders/index.js.map +1 -0
  100. package/dist/builders/openai.d.ts +8 -0
  101. package/dist/builders/openai.d.ts.map +1 -0
  102. package/dist/builders/openai.js +87 -0
  103. package/dist/builders/openai.js.map +1 -0
  104. package/dist/builders/types.d.ts +54 -0
  105. package/dist/builders/types.d.ts.map +1 -0
  106. package/dist/builders/types.js +211 -0
  107. package/dist/builders/types.js.map +1 -0
  108. package/dist/connectors/index.d.ts.map +1 -1
  109. package/dist/connectors/index.js +3 -2
  110. package/dist/connectors/index.js.map +1 -1
  111. package/dist/connectors/registry.d.ts +2 -1
  112. package/dist/connectors/registry.d.ts.map +1 -1
  113. package/dist/connectors/registry.js +65 -96
  114. package/dist/connectors/registry.js.map +1 -1
  115. package/dist/connectors/types.d.ts.map +1 -1
  116. package/dist/customizer/Customizer.d.ts +57 -0
  117. package/dist/customizer/Customizer.d.ts.map +1 -0
  118. package/dist/customizer/Customizer.js +124 -0
  119. package/dist/customizer/Customizer.js.map +1 -0
  120. package/dist/customizer/index.d.ts.map +1 -0
  121. package/dist/customizer/index.js +9 -0
  122. package/dist/customizer/index.js.map +1 -0
  123. package/dist/files.d.ts +17 -0
  124. package/dist/files.d.ts.map +1 -1
  125. package/dist/files.js +75 -1
  126. package/dist/files.js.map +1 -1
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +1 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/init.d.ts +10 -6
  131. package/dist/init.d.ts.map +1 -1
  132. package/dist/init.js +97 -86
  133. package/dist/init.js.map +1 -1
  134. package/dist/migrations.d.ts.map +1 -1
  135. package/dist/migrations.js +142 -145
  136. package/dist/migrations.js.map +1 -1
  137. package/dist/models/anthropic.d.ts +24 -0
  138. package/dist/models/anthropic.d.ts.map +1 -0
  139. package/dist/models/anthropic.js +103 -0
  140. package/dist/models/anthropic.js.map +1 -0
  141. package/dist/models/chainOfThought.d.ts.map +1 -0
  142. package/dist/models/chainOfThought.js +45 -0
  143. package/dist/models/chainOfThought.js.map +1 -0
  144. package/dist/models/fireworksai.d.ts.map +1 -0
  145. package/dist/models/fireworksai.js +141 -0
  146. package/dist/models/fireworksai.js.map +1 -0
  147. package/dist/models/index.d.ts +7 -1
  148. package/dist/models/index.d.ts.map +1 -1
  149. package/dist/models/index.js +20 -1
  150. package/dist/models/index.js.map +1 -1
  151. package/dist/models/logCompletePrompt.d.ts.map +1 -0
  152. package/dist/models/logCompletePrompt.js +23 -0
  153. package/dist/models/logCompletePrompt.js.map +1 -0
  154. package/dist/models/openai.d.ts +24 -0
  155. package/dist/models/openai.d.ts.map +1 -0
  156. package/dist/models/openai.js +101 -0
  157. package/dist/models/openai.js.map +1 -0
  158. package/dist/models/providers.d.ts.map +1 -1
  159. package/dist/models/providers.js +12 -4
  160. package/dist/models/providers.js.map +1 -1
  161. package/dist/models/types.d.ts +53 -2
  162. package/dist/models/types.d.ts.map +1 -1
  163. package/dist/models/types.js +21 -0
  164. package/dist/models/types.js.map +1 -1
  165. package/dist/models/utils.d.ts.map +1 -0
  166. package/dist/models/utils.js +21 -0
  167. package/dist/models/utils.js.map +1 -0
  168. package/dist/pages.d.ts +30 -7
  169. package/dist/pages.d.ts.map +1 -1
  170. package/dist/pages.js +177 -55
  171. package/dist/pages.js.map +1 -1
  172. package/dist/scripts.d.ts.map +1 -1
  173. package/dist/scripts.js +4 -3
  174. package/dist/scripts.js.map +1 -1
  175. package/dist/service/createCompletePrompt.d.ts.map +1 -1
  176. package/dist/service/createCompletePrompt.js +9 -6
  177. package/dist/service/createCompletePrompt.js.map +1 -1
  178. package/dist/service/generateImage.d.ts.map +1 -1
  179. package/dist/service/generateImage.js +3 -3
  180. package/dist/service/generateImage.js.map +1 -1
  181. package/dist/service/server.d.ts.map +1 -1
  182. package/dist/service/server.js +39 -7
  183. package/dist/service/server.js.map +1 -1
  184. package/dist/service/transformPage.d.ts +47 -18
  185. package/dist/service/transformPage.d.ts.map +1 -1
  186. package/dist/service/transformPage.js +559 -270
  187. package/dist/service/transformPage.js.map +1 -1
  188. package/dist/service/useAgentRoutes.d.ts +5 -0
  189. package/dist/service/useAgentRoutes.d.ts.map +1 -0
  190. package/dist/service/useAgentRoutes.js +392 -0
  191. package/dist/service/useAgentRoutes.js.map +1 -0
  192. package/dist/service/useApiRoutes.d.ts.map +1 -1
  193. package/dist/service/useApiRoutes.js +380 -138
  194. package/dist/service/useApiRoutes.js.map +1 -1
  195. package/dist/service/useConnectorRoutes.d.ts.map +1 -1
  196. package/dist/service/useConnectorRoutes.js +20 -9
  197. package/dist/service/useConnectorRoutes.js.map +1 -1
  198. package/dist/service/useFileRoutes.d.ts +4 -0
  199. package/dist/service/useFileRoutes.d.ts.map +1 -0
  200. package/dist/service/useFileRoutes.js +122 -0
  201. package/dist/service/useFileRoutes.js.map +1 -0
  202. package/dist/service/usePageRoutes.d.ts.map +1 -1
  203. package/dist/service/usePageRoutes.js +660 -68
  204. package/dist/service/usePageRoutes.js.map +1 -1
  205. package/dist/service/useSharedDataRoutes.d.ts +4 -0
  206. package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
  207. package/dist/service/useSharedDataRoutes.js +104 -0
  208. package/dist/service/useSharedDataRoutes.js.map +1 -0
  209. package/dist/service/useSharedFileRoutes.d.ts +4 -0
  210. package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
  211. package/dist/service/useSharedFileRoutes.js +121 -0
  212. package/dist/service/useSharedFileRoutes.js.map +1 -0
  213. package/dist/settings.d.ts +3 -1
  214. package/dist/settings.d.ts.map +1 -1
  215. package/dist/settings.js +5 -8
  216. package/dist/settings.js.map +1 -1
  217. package/dist/synthos-cli.d.ts.map +1 -1
  218. package/dist/synthos-cli.js +4 -3
  219. package/dist/synthos-cli.js.map +1 -1
  220. package/dist/themes.d.ts +15 -0
  221. package/dist/themes.d.ts.map +1 -1
  222. package/dist/themes.js +106 -20
  223. package/dist/themes.js.map +1 -1
  224. package/migration-rules/v1-to-v2.md +193 -0
  225. package/migration-rules/v2-to-v3.md +481 -0
  226. package/package.json +15 -11
  227. package/required-pages/builder/page.html +43 -0
  228. package/required-pages/builder/page.json +10 -0
  229. package/required-pages/pages/page.html +924 -0
  230. package/required-pages/pages/page.json +10 -0
  231. package/required-pages/settings/page.html +1753 -0
  232. package/required-pages/settings/page.json +10 -0
  233. package/required-pages/synthos_apis/page.html +846 -0
  234. package/required-pages/synthos_apis/page.json +10 -0
  235. package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
  236. package/required-pages/synthos_scripts/page.json +10 -0
  237. package/service-connectors/airtable/connector.json +27 -0
  238. package/service-connectors/alpha-vantage/connector.json +26 -0
  239. package/service-connectors/brave-search/connector.json +26 -0
  240. package/service-connectors/cloudinary/connector.json +27 -0
  241. package/service-connectors/deepl/connector.json +28 -0
  242. package/service-connectors/elevenlabs/connector.json +30 -0
  243. package/service-connectors/giphy/connector.json +27 -0
  244. package/service-connectors/github/connector.json +29 -0
  245. package/service-connectors/huggingface/connector.json +27 -0
  246. package/service-connectors/imgur/connector.json +29 -0
  247. package/service-connectors/instagram/connector.json +43 -0
  248. package/service-connectors/jira/connector.json +28 -0
  249. package/service-connectors/mapbox/connector.json +26 -0
  250. package/service-connectors/nasa/connector.json +27 -0
  251. package/service-connectors/newsapi/connector.json +27 -0
  252. package/service-connectors/notion/connector.json +28 -0
  253. package/service-connectors/open-exchange-rates/connector.json +27 -0
  254. package/service-connectors/openweathermap/connector.json +26 -0
  255. package/service-connectors/pexels/connector.json +27 -0
  256. package/service-connectors/resend/connector.json +29 -0
  257. package/service-connectors/rss2json/connector.json +27 -0
  258. package/service-connectors/sendgrid/connector.json +27 -0
  259. package/service-connectors/spoonacular/connector.json +28 -0
  260. package/service-connectors/stability-ai/connector.json +27 -0
  261. package/service-connectors/twilio/connector.json +28 -0
  262. package/service-connectors/unsplash/connector.json +27 -0
  263. package/service-connectors/wolfram-alpha/connector.json +26 -0
  264. package/service-connectors/youtube-data/connector.json +30 -0
  265. package/src/agents/a2a/a2aProvider.ts +110 -0
  266. package/src/agents/discovery.ts +74 -0
  267. package/src/agents/index.ts +6 -0
  268. package/src/agents/openclaw/gatewayManager.ts +570 -0
  269. package/src/agents/openclaw/openclawProvider.ts +259 -0
  270. package/src/agents/openclaw/sshTunnelManager.ts +393 -0
  271. package/src/agents/types.ts +82 -0
  272. package/src/builders/anthropic.ts +283 -0
  273. package/src/builders/fireworksai.ts +59 -0
  274. package/src/builders/index.ts +33 -0
  275. package/src/builders/openai.ts +89 -0
  276. package/src/builders/types.ts +261 -0
  277. package/src/connectors/index.ts +3 -1
  278. package/src/connectors/registry.ts +40 -96
  279. package/src/connectors/types.ts +25 -0
  280. package/src/customizer/Customizer.ts +151 -0
  281. package/src/customizer/index.ts +5 -0
  282. package/src/files.ts +71 -0
  283. package/src/index.ts +2 -1
  284. package/src/init.ts +138 -97
  285. package/src/migrations.ts +148 -145
  286. package/src/models/anthropic.ts +119 -0
  287. package/src/models/chainOfThought.ts +56 -0
  288. package/src/models/fireworksai.ts +143 -0
  289. package/src/models/index.ts +7 -1
  290. package/src/models/logCompletePrompt.ts +25 -0
  291. package/src/models/openai.ts +110 -0
  292. package/src/models/providers.ts +12 -3
  293. package/src/models/types.ts +97 -2
  294. package/src/models/utils.ts +16 -0
  295. package/src/pages.ts +176 -54
  296. package/src/scripts.ts +2 -2
  297. package/src/service/createCompletePrompt.ts +3 -1
  298. package/src/service/generateImage.ts +2 -2
  299. package/src/service/server.ts +39 -8
  300. package/src/service/transformPage.ts +605 -301
  301. package/src/service/useAgentRoutes.ts +428 -0
  302. package/src/service/useApiRoutes.ts +309 -45
  303. package/src/service/useConnectorRoutes.ts +21 -10
  304. package/src/service/useFileRoutes.ts +127 -0
  305. package/src/service/usePageRoutes.ts +736 -75
  306. package/src/service/useSharedDataRoutes.ts +106 -0
  307. package/src/service/useSharedFileRoutes.ts +126 -0
  308. package/src/settings.ts +8 -10
  309. package/src/synthos-cli.ts +4 -3
  310. package/src/themes.ts +103 -20
  311. package/static-files/favicon.svg +12 -0
  312. package/static-files/fluentlm-instructions.llmd +868 -0
  313. package/static-files/fluentlm-instructions.md +1595 -0
  314. package/static-files/fluentlm.css +4844 -0
  315. package/static-files/fluentlm.js +3602 -0
  316. package/static-files/fluentlm.min.css +1 -0
  317. package/static-files/fluentlm.min.js +1 -0
  318. package/static-files/helpers.v3.js +304 -0
  319. package/static-files/page.v3.js +1290 -0
  320. package/static-files/recommended-frameworks.llmd +81 -0
  321. package/static-files/recommended-frameworks.md +137 -0
  322. package/static-files/retro-game.js +877 -0
  323. package/static-files/shell.css +797 -0
  324. package/static-files/theme-dark.css +169 -0
  325. package/static-files/theme-light.css +169 -0
  326. package/tests/anthropic.spec.ts +84 -0
  327. package/tests/builders.spec.ts +139 -0
  328. package/tests/chainOfThought.spec.ts +108 -0
  329. package/tests/ensureScripts.spec.ts +82 -0
  330. package/tests/files.spec.ts +233 -0
  331. package/tests/fireworksai.spec.ts +92 -0
  332. package/tests/logCompletePrompt.spec.ts +74 -0
  333. package/tests/migrations.spec.ts +79 -1
  334. package/tests/openai.spec.ts +71 -0
  335. package/tests/pages.spec.ts +226 -1
  336. package/tests/providers.spec.ts +144 -0
  337. package/tests/scripts.spec.ts +209 -0
  338. package/tests/transformPage.spec.ts +456 -0
  339. package/tests/types.spec.ts +23 -0
  340. package/default-pages/app_builder.html +0 -40
  341. package/default-pages/app_builder.json +0 -1
  342. package/default-pages/json_tools.json +0 -1
  343. package/default-pages/my_notes.html +0 -33
  344. package/default-pages/neon_asteroids.html +0 -77
  345. package/default-pages/sidebar_builder.json +0 -1
  346. package/default-pages/solar_tutorial.json +0 -1
  347. package/default-pages/two-panel_builder.json +0 -1
  348. package/dist/connectors/index.d.ts +0 -3
  349. package/dist/connectors/types.d.ts +0 -61
  350. package/dist/index.d.ts +0 -7
  351. package/dist/migrations.d.ts +0 -11
  352. package/dist/models/providers.d.ts +0 -7
  353. package/dist/scripts.d.ts +0 -14
  354. package/dist/service/createCompletePrompt.d.ts +0 -5
  355. package/dist/service/debugLog.d.ts +0 -11
  356. package/dist/service/generateImage.d.ts +0 -32
  357. package/dist/service/index.d.ts +0 -8
  358. package/dist/service/modelInstructions.d.ts +0 -7
  359. package/dist/service/requiresSettings.d.ts +0 -3
  360. package/dist/service/server.d.ts +0 -4
  361. package/dist/service/useApiRoutes.d.ts +0 -4
  362. package/dist/service/useConnectorRoutes.d.ts +0 -4
  363. package/dist/service/useDataRoutes.d.ts +0 -4
  364. package/dist/service/usePageRoutes.d.ts +0 -5
  365. package/dist/synthos-cli.d.ts +0 -2
  366. package/images/home.png +0 -0
  367. package/images/page-management.png +0 -0
  368. package/images/settings.png +0 -0
  369. package/images/synthos-square.png +0 -0
  370. package/page-scripts/helpers-v2.js +0 -121
  371. package/page-scripts/page-v2.js +0 -615
  372. package/required-pages/builder.html +0 -74
  373. package/required-pages/builder.json +0 -1
  374. package/required-pages/pages.html +0 -196
  375. package/required-pages/pages.json +0 -1
  376. package/required-pages/settings.html +0 -841
  377. package/required-pages/settings.json +0 -1
  378. package/required-pages/synthos_apis.html +0 -272
  379. package/required-pages/synthos_apis.json +0 -1
  380. package/required-pages/synthos_scripts.json +0 -1
@@ -0,0 +1,304 @@
1
+ (function() {
2
+ if (window.__synthOSHelpers) return;
3
+ window.__synthOSHelpers = true;
4
+
5
+ function _json(method, url, body) {
6
+ var opts = {
7
+ method: method,
8
+ headers: { 'Content-Type': 'application/json' }
9
+ };
10
+ if (body !== undefined) {
11
+ opts.body = JSON.stringify(body);
12
+ }
13
+ return fetch(url, opts).then(function(res) {
14
+ var ct = res.headers.get('content-type') || '';
15
+ var isJson = ct.indexOf('application/json') !== -1;
16
+ return (isJson ? res.json() : res.text()).then(function(data) {
17
+ if (!res.ok) {
18
+ if (res.status === 404 && isJson && data && data.error === 'table_not_found') {
19
+ return null; // for data.get, return null if the table or row is not found instead of throwing an error
20
+ }
21
+ var err = new Error(isJson && data && data.error ? data.error : data);
22
+ err.status = res.status;
23
+ throw err;
24
+ }
25
+ return data;
26
+ });
27
+ });
28
+ }
29
+
30
+ function _pageName() {
31
+ return (window.pageInfo && window.pageInfo.name) || 'default';
32
+ }
33
+
34
+ window.synthos = {
35
+ data: {
36
+ list: function(table, opts) {
37
+ var url = '/api/data/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(table);
38
+ if (opts && typeof opts.limit === 'number') {
39
+ url += '?limit=' + opts.limit;
40
+ if (typeof opts.offset === 'number') {
41
+ url += '&offset=' + opts.offset;
42
+ }
43
+ }
44
+ return _json('GET', url) || [];
45
+ },
46
+ get: function(table, id) {
47
+ return _json('GET', '/api/data/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(table) + '/' + encodeURIComponent(id)) || null;
48
+ },
49
+ save: function(table, row) {
50
+ return _json('POST', '/api/data/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(table), row);
51
+ },
52
+ remove: function(table, id) {
53
+ return _json('DELETE', '/api/data/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(table) + '/' + encodeURIComponent(id));
54
+ }
55
+ },
56
+
57
+ files: {
58
+ list: function() {
59
+ return _json('GET', '/api/files/' + encodeURIComponent(_pageName()));
60
+ },
61
+ upload: function(filename, blob) {
62
+ return fetch('/api/files/' + encodeURIComponent(_pageName()), {
63
+ method: 'POST',
64
+ headers: { 'x-filename': filename },
65
+ body: blob
66
+ }).then(function(res) {
67
+ if (!res.ok) {
68
+ return res.json().then(function(data) {
69
+ var err = new Error(data && data.error ? data.error : 'Upload failed');
70
+ err.status = res.status;
71
+ throw err;
72
+ });
73
+ }
74
+ return res.json();
75
+ });
76
+ },
77
+ url: function(filename) {
78
+ return '/api/files/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(filename);
79
+ },
80
+ remove: function(filename) {
81
+ return _json('DELETE', '/api/files/' + encodeURIComponent(_pageName()) + '/' + encodeURIComponent(filename));
82
+ }
83
+ },
84
+
85
+ shared: {
86
+ data: {
87
+ list: function(table, opts) {
88
+ var url = '/api/shared/data/' + encodeURIComponent(table);
89
+ if (opts && typeof opts.limit === 'number') {
90
+ url += '?limit=' + opts.limit;
91
+ if (typeof opts.offset === 'number') {
92
+ url += '&offset=' + opts.offset;
93
+ }
94
+ }
95
+ return _json('GET', url) || [];
96
+ },
97
+ get: function(table, id) {
98
+ return _json('GET', '/api/shared/data/' + encodeURIComponent(table) + '/' + encodeURIComponent(id)) || null;
99
+ },
100
+ save: function(table, row) {
101
+ return _json('POST', '/api/shared/data/' + encodeURIComponent(table), row);
102
+ },
103
+ remove: function(table, id) {
104
+ return _json('DELETE', '/api/shared/data/' + encodeURIComponent(table) + '/' + encodeURIComponent(id));
105
+ }
106
+ },
107
+ files: {
108
+ list: function() {
109
+ return _json('GET', '/api/shared/files');
110
+ },
111
+ upload: function(filename, blob) {
112
+ return fetch('/api/shared/files', {
113
+ method: 'POST',
114
+ headers: { 'x-filename': filename },
115
+ body: blob
116
+ }).then(function(res) {
117
+ if (!res.ok) {
118
+ return res.json().then(function(data) {
119
+ var err = new Error(data && data.error ? data.error : 'Upload failed');
120
+ err.status = res.status;
121
+ throw err;
122
+ });
123
+ }
124
+ return res.json();
125
+ });
126
+ },
127
+ url: function(filename) {
128
+ return '/api/shared/files/' + encodeURIComponent(filename);
129
+ },
130
+ remove: function(filename) {
131
+ return _json('DELETE', '/api/shared/files/' + encodeURIComponent(filename));
132
+ }
133
+ }
134
+ },
135
+
136
+ generate: {
137
+ image: function(opts) {
138
+ return _json('POST', '/api/generate/image', opts);
139
+ },
140
+ completion: function(opts) {
141
+ return _json('POST', '/api/generate/completion', opts);
142
+ }
143
+ },
144
+
145
+ scripts: {
146
+ run: function(id, variables) {
147
+ return _json('POST', '/api/scripts/' + encodeURIComponent(id), variables || {});
148
+ }
149
+ },
150
+
151
+ pages: {
152
+ list: function() {
153
+ return _json('GET', '/api/pages');
154
+ },
155
+ get: function(name) {
156
+ return _json('GET', '/api/pages/' + encodeURIComponent(name));
157
+ },
158
+ update: function(name, metadata) {
159
+ return _json('POST', '/api/pages/' + encodeURIComponent(name), metadata);
160
+ },
161
+ remove: function(name) {
162
+ return _json('DELETE', '/api/pages/' + encodeURIComponent(name));
163
+ },
164
+ ask: function(name, question) {
165
+ return _json('POST', '/api/pages/' + encodeURIComponent(name) + '/ask', { question: question });
166
+ }
167
+ },
168
+
169
+ search: {
170
+ web: function(query, opts) {
171
+ var body = { query: query };
172
+ if (opts) {
173
+ if (opts.count) body.count = opts.count;
174
+ if (opts.country) body.country = opts.country;
175
+ if (opts.freshness) body.freshness = opts.freshness;
176
+ }
177
+ return _json('POST', '/api/search/web', body);
178
+ }
179
+ },
180
+
181
+ connectors: {
182
+ call: function(connector, method, path, opts) {
183
+ var body = { connector: connector, method: method, path: path };
184
+ if (opts) {
185
+ if (opts.headers) body.headers = opts.headers;
186
+ if (opts.body) body.body = opts.body;
187
+ if (opts.query) body.query = opts.query;
188
+ }
189
+ return _json('POST', '/api/connectors', body);
190
+ },
191
+ list: function(opts) {
192
+ var url = '/api/connectors';
193
+ var params = [];
194
+ if (opts) {
195
+ if (opts.category) params.push('category=' + encodeURIComponent(opts.category));
196
+ if (opts.id) params.push('id=' + encodeURIComponent(opts.id));
197
+ }
198
+ if (params.length) url += '?' + params.join('&');
199
+ return _json('GET', url);
200
+ }
201
+ },
202
+
203
+ agents: {
204
+ list: function(opts) {
205
+ var url = '/api/agents';
206
+ var params = [];
207
+ if (opts) {
208
+ if (typeof opts.enabled === 'boolean') params.push('enabled=' + opts.enabled);
209
+ if (opts.provider) params.push('provider=' + encodeURIComponent(opts.provider));
210
+ }
211
+ if (params.length) url += '?' + params.join('&');
212
+ return _json('GET', url);
213
+ },
214
+ send: function(agentId, message, attachments) {
215
+ var body = { message: message };
216
+ if (attachments) body.attachments = attachments;
217
+ return _json('POST', '/api/agents/' + encodeURIComponent(agentId) + '/send', body);
218
+ },
219
+ sendStream: function(agentId, message, onEventOrOpts, attachments) {
220
+ // Supports two calling conventions:
221
+ // sendStream(id, msg, onEvent) — positional callback
222
+ // sendStream(id, msg, onEvent, attachments) — positional callback + attachments
223
+ // sendStream(id, msg, { onEvent, attachments }) — options object
224
+ var onEvent, atts;
225
+ if (typeof onEventOrOpts === 'function') {
226
+ onEvent = onEventOrOpts;
227
+ atts = attachments;
228
+ } else if (onEventOrOpts && typeof onEventOrOpts === 'object') {
229
+ onEvent = onEventOrOpts.onEvent;
230
+ atts = onEventOrOpts.attachments;
231
+ }
232
+ var body = { message: message };
233
+ if (atts) body.attachments = atts;
234
+ // Uses fetch + streaming reader for SSE-style streaming
235
+ var aborted = false;
236
+ var controller = new AbortController();
237
+ fetch('/api/agents/' + encodeURIComponent(agentId) + '/stream', {
238
+ method: 'POST',
239
+ headers: { 'Content-Type': 'application/json' },
240
+ body: JSON.stringify(body),
241
+ signal: controller.signal
242
+ }).then(function(res) {
243
+ var reader = res.body.getReader();
244
+ var decoder = new TextDecoder();
245
+ var buffer = '';
246
+ function pump() {
247
+ return reader.read().then(function(result) {
248
+ if (result.done || aborted) return;
249
+ buffer += decoder.decode(result.value, { stream: true });
250
+ var lines = buffer.split('\n');
251
+ buffer = lines.pop() || '';
252
+ for (var i = 0; i < lines.length; i++) {
253
+ var line = lines[i];
254
+ if (line.indexOf('data: ') === 0) {
255
+ var data = line.substring(6);
256
+ if (data === '[DONE]') return;
257
+ try {
258
+ var event = JSON.parse(data);
259
+ if (onEvent) onEvent(event);
260
+ } catch(e) { /* skip malformed lines */ }
261
+ }
262
+ }
263
+ return pump();
264
+ });
265
+ }
266
+ return pump();
267
+ }).catch(function(err) {
268
+ if (!aborted && onEvent) onEvent({ kind: 'error', data: err.message });
269
+ });
270
+ return { close: function() { aborted = true; controller.abort(); } };
271
+ },
272
+ chat: {
273
+ send: function(agentId, message, attachments) {
274
+ return window.synthos.agents.send(agentId, message, attachments);
275
+ },
276
+ sendStream: function(agentId, message, onEventOrOpts, attachments) {
277
+ return window.synthos.agents.sendStream(agentId, message, onEventOrOpts, attachments);
278
+ },
279
+ history: function(agentId) {
280
+ return _json('POST', '/api/agents/' + encodeURIComponent(agentId) + '/chat/history', {}).then(function(res) {
281
+ return res.messages || [];
282
+ });
283
+ },
284
+ abort: function(agentId) {
285
+ return _json('POST', '/api/agents/' + encodeURIComponent(agentId) + '/chat/abort', {});
286
+ },
287
+ clear: function(agentId) {
288
+ return _json('POST', '/api/agents/' + encodeURIComponent(agentId) + '/chat/clear', {});
289
+ }
290
+ },
291
+ isEnabled: function(agentId) {
292
+ return _json('GET', '/api/agents?enabled=true').then(function(agents) {
293
+ return agents.some(function(a) { return a.id === agentId; });
294
+ });
295
+ },
296
+ getCapabilities: function(agentId) {
297
+ return _json('GET', '/api/agents').then(function(agents) {
298
+ var agent = agents.find(function(a) { return a.id === agentId; });
299
+ return agent ? (agent.capabilities || {}) : null;
300
+ });
301
+ }
302
+ }
303
+ };
304
+ })();