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
@@ -1 +0,0 @@
1
- { "title": "Settings", "categories": ["System"], "pinned": true, "showInAll": true, "pageVersion": 2, "mode": "locked" }
@@ -1,272 +0,0 @@
1
- <!DOCTYPE html><html lang="en"><head>
2
- <meta charset="UTF-8">
3
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
4
- <title>SynthOS - APIs</title>
5
- <script id="theme-info" src="/api/theme-info.js" data-locked="true"></script>
6
- <link id="theme-css" rel="stylesheet" href="/api/theme.css" data-locked="true">
7
- <style>.dialog-title{font-size:22px;font-weight:700;min-height:var(--header-min-height);padding:var(--header-padding-vertical) var(--header-padding-horizontal);line-height:var(--header-line-height);display:flex;align-items:center;justify-content:center;box-sizing:border-box;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff;border-radius:12px;width:100%;max-width:800px;box-shadow:0 6px 25px var(--accent-glow);position:relative;z-index:1}.dialog-content{font-size:14px;color:rgba(224,224,224,.8);padding:15px 0;flex-grow:1;width:100%;max-width:800px;position:relative;z-index:1;overflow-y:auto}.api-section{margin:8px 0;border-radius:10px;width:100%;background:linear-gradient(135deg,rgba(102,126,234,.1) 0,rgba(118,75,162,.1) 100%);border:1px solid var(--border-color);overflow:hidden}.api-header{font-size:14px;cursor:pointer;background:linear-gradient(135deg,rgba(102,126,234,.2) 0,rgba(118,75,162,.2) 100%);padding:12px 15px;text-align:left;transition:.3s;color:var(--text-secondary);font-weight:500}.api-header:hover{background:linear-gradient(135deg,rgba(102,126,234,.3) 0,rgba(118,75,162,.3) 100%);color:var(--accent-tertiary)}.api-content{display:none;padding:12px 15px;background:rgba(15,15,35,.5);border-top:1px solid var(--border-color);font-size:13px;line-height:1.5}.api-input{margin-top:10px}.api-input input,.api-input select,.api-input textarea{width:100%;padding:10px 12px;margin-bottom:8px;border-radius:8px;border:1px solid var(--border-color);background:rgba(15,15,35,.8);color:var(--text-primary);font-size:13px;transition:.3s}.api-input input:focus,.api-input select:focus,.api-input textarea:focus{outline:0;border-color:var(--text-secondary);box-shadow:0 0 15px var(--accent-glow)}.api-input textarea{min-height:80px;resize:vertical}.api-input select{cursor:pointer}.api-input select option{background:var(--bg-tertiary);color:var(--text-primary)}.api-input button{padding:10px 18px;border:none;border-radius:20px;background:linear-gradient(135deg,var(--accent-primary) 0,var(--accent-secondary) 100%);color:#fff;cursor:pointer;transition:.3s;font-weight:500;font-size:13px;box-shadow:0 3px 15px var(--accent-glow)}.api-input button:hover{transform:translateY(-2px);box-shadow:0 5px 20px rgba(102,126,234,.5)}.api-input button:disabled{background:rgba(102,126,234,.3);cursor:not-allowed;transform:none;box-shadow:none}.api-output{margin-top:10px;min-height:100px;max-height:200px;background:rgba(15,15,35,.8);color:var(--accent-tertiary);padding:12px;border-radius:8px;overflow-y:auto;white-space:pre-wrap;font-family:'Courier New',Courier,monospace;font-size:12px;border:1px solid var(--border-color)}.generated-image{max-width:100%;height:auto;margin-top:10px;border-radius:8px;border:1px solid var(--border-color);box-shadow:0 4px 20px var(--accent-glow)}.light-mode .dialog-content{color:rgba(45,38,64,.8)}.light-mode .api-content{background:rgba(255,255,255,.5)}.light-mode .api-input input,.light-mode .api-input select,.light-mode .api-input textarea,.light-mode .api-output{background:rgba(255,255,255,.8)}</style>
8
- <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.min.js"></script>
9
- <script src="https://cdnjs.cloudflare.com/ajax/libs/marked/14.1.1/marked.min.js"></script>
10
- <script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/11.1.0/mermaid.min.js"></script>
11
- <script id="page-info" src="/api/page-info.js?page=apis"></script>
12
- </head>
13
- <body>
14
- <div class="chat-panel" data-locked="true">
15
- <div class="chat-header" data-locked="true">SynthOS</div>
16
- <div class="chat-messages" id="chatMessages" data-locked="true">
17
- <div class="chat-message"><p><strong>SynthOS:</strong> Expand the individual API operations to test calls.</p></div>
18
- </div>
19
- <div class="link-group" data-locked="true">
20
- <a href="#" id="saveLink" data-locked="true">Save</a>
21
- <a href="/pages" id="pagesLink" data-locked="true">Pages</a>
22
- <a href="#" id="resetLink" data-locked="true">Reset</a>
23
- </div>
24
- <form action="/" method="POST" id="chatForm" data-locked="true">
25
- <input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message..." data-locked="true">
26
- <button type="submit" class="chat-submit" data-locked="true">Send</button>
27
- </form>
28
- </div>
29
- <div class="viewer-panel" id="viewerPanel">
30
- <div class="dialog-title">API Explorer</div>
31
- <div class="dialog-content">
32
- <div class="api-section">
33
- <div class="api-header" onclick="toggleSection(this)">GET /api/data/:page/:table</div>
34
- <div class="api-content">
35
- This operation retrieves all rows from the specified page-scoped table. The response is an array of JSON objects, each representing a row in the table.
36
- <div class="api-input">
37
- <input type="text" placeholder="Page Name">
38
- <input type="text" placeholder="Table Name">
39
- <button onclick="callApi(event, 'GET', '/api/data/')">Submit</button>
40
- </div>
41
- <div class="api-output"></div>
42
- </div>
43
- </div>
44
- <div class="api-section">
45
- <div class="api-header" onclick="toggleSection(this)">GET /api/data/:page/:table?limit=N&amp;offset=N</div>
46
- <div class="api-content">
47
- Paginated variant. Returns a page of rows from the table. The response includes the items, total count, and whether more rows are available.
48
- Response: { items: [...], total: number, offset: number, limit: number, hasMore: boolean }
49
- <div class="api-input">
50
- <input type="text" placeholder="Page Name">
51
- <input type="text" placeholder="Table Name">
52
- <input type="text" placeholder="Limit">
53
- <input type="text" placeholder="Offset (optional)">
54
- <button onclick="callPaginatedApi(event)">Submit</button>
55
- </div>
56
- <div class="api-output"></div>
57
- </div>
58
- </div>
59
- <div class="api-section">
60
- <div class="api-header" onclick="toggleSection(this)">GET /api/data/:page/:table/:id</div>
61
- <div class="api-content">
62
- This operation retrieves a single row from the specified page-scoped table using the provided ID. The response is a JSON object representing the row.
63
- <div class="api-input">
64
- <input type="text" placeholder="Page Name">
65
- <input type="text" placeholder="Table Name">
66
- <input type="text" placeholder="ID">
67
- <button onclick="callApi(event, 'GET', '/api/data/')">Submit</button>
68
- </div>
69
- <div class="api-output"></div>
70
- </div>
71
- </div>
72
- <div class="api-section">
73
- <div class="api-header" onclick="toggleSection(this)">POST /api/data/:page/:table</div>
74
- <div class="api-content">
75
- This operation saves a single row to the specified page-scoped table. The request should include a JSON object representing the row. The response indicates success.
76
- <div class="api-input">
77
- <input type="text" placeholder="Page Name">
78
- <input type="text" placeholder="Table Name">
79
- <textarea placeholder="JSON Data"></textarea>
80
- <button onclick="callApi(event, 'POST', '/api/data/')">Submit</button>
81
- </div>
82
- <div class="api-output"></div>
83
- </div>
84
- </div>
85
- <div class="api-section">
86
- <div class="api-header" onclick="toggleSection(this)">DELETE /api/data/:page/:table/:id</div>
87
- <div class="api-content">
88
- This operation deletes a single row from the specified page-scoped table using the provided ID. The response indicates success.
89
- <div class="api-input">
90
- <input type="text" placeholder="Page Name">
91
- <input type="text" placeholder="Table Name">
92
- <input type="text" placeholder="ID">
93
- <button onclick="callApi(event, 'DELETE', '/api/data/')">Submit</button>
94
- </div>
95
- <div class="api-output"></div>
96
- </div>
97
- </div>
98
- <div class="api-section">
99
- <div class="api-header" onclick="toggleSection(this)">GET /api/pages</div>
100
- <div class="api-content">
101
- This operation retrieves a list of all available pages. The response is an array of page objects with name, title, categories, pinned, createdDate, lastModified, pageVersion, and mode.
102
- <div class="api-input">
103
- <button onclick="callApi(event, 'GET', '/api/pages')">Submit</button>
104
- </div>
105
- <div class="api-output"></div>
106
- </div>
107
- </div>
108
- <div class="api-section">
109
- <div class="api-header" onclick="toggleSection(this)">GET /api/pages/:name</div>
110
- <div class="api-content">
111
- This operation retrieves the metadata for a single page, including title, categories, pinned, createdDate, lastModified, pageVersion, and mode.
112
- <div class="api-input">
113
- <input type="text" placeholder="Page Name">
114
- <button onclick="callPageApi(event, 'GET')">Submit</button>
115
- </div>
116
- <div class="api-output"></div>
117
- </div>
118
- </div>
119
- <div class="api-section">
120
- <div class="api-header" onclick="toggleSection(this)">POST /api/pages/:name</div>
121
- <div class="api-content">
122
- This operation merges metadata for a page. Send only the fields you want to update. Supported fields: title (string), categories (array of strings), pinned (boolean), mode ("unlocked" | "locked"). The lastModified timestamp is auto-set on each update. The createdDate and pageVersion fields are preserved and cannot be overridden.
123
- <div class="api-input">
124
- <input type="text" placeholder="Page Name">
125
- <textarea placeholder="{ &quot;title&quot;: &quot;My Page&quot;, &quot;categories&quot;: [&quot;System&quot;], &quot;pinned&quot;: true, &quot;mode&quot;: &quot;unlocked&quot; }"></textarea>
126
- <button onclick="callPageApi(event, 'POST')">Submit</button>
127
- </div>
128
- <div class="api-output"></div>
129
- </div>
130
- </div>
131
- <div class="api-section">
132
- <div class="api-header" onclick="toggleSection(this)">POST /api/pages/:name/pin</div>
133
- <div class="api-content">
134
- This operation toggles the pinned status for a page. The request body should include pinned (boolean).
135
- <div class="api-input">
136
- <input type="text" placeholder="Page Name">
137
- <textarea placeholder="{ &quot;pinned&quot;: true }"></textarea>
138
- <button onclick="callPageApi(event, 'POST', '/pin')">Submit</button>
139
- </div>
140
- <div class="api-output"></div>
141
- </div>
142
- </div>
143
- <div class="api-section">
144
- <div class="api-header" onclick="toggleSection(this)">DELETE /api/pages/:name</div>
145
- <div class="api-content">
146
- This operation deletes a user page. Required (system) pages cannot be deleted. Returns 400 if the page is a required page, or 404 if not found.
147
- <div class="api-input">
148
- <input type="text" placeholder="Page Name">
149
- <button onclick="callPageApi(event, 'DELETE')">Submit</button>
150
- </div>
151
- <div class="api-output"></div>
152
- </div>
153
- </div>
154
- <div class="api-section">
155
- <div class="api-header" onclick="toggleSection(this)">POST /api/pages/:name/copy</div>
156
- <div class="api-content">
157
- This operation copies a page to a new name. The source page can be a user page or a required (system) page. The request body should include name (string, required), title (string, optional), and categories (array of strings, optional). Returns 409 if the target page already exists.
158
- <div class="api-input">
159
- <input type="text" placeholder="Page Name">
160
- <textarea placeholder="{ &quot;name&quot;: &quot;new-page-name&quot;, &quot;title&quot;: &quot;My Copy&quot;, &quot;categories&quot;: [&quot;Tools&quot;] }"></textarea>
161
- <button onclick="callPageApi(event, 'POST', '/copy')">Submit</button>
162
- </div>
163
- <div class="api-output"></div>
164
- </div>
165
- </div>
166
- <div class="api-section">
167
- <div class="api-header" onclick="toggleSection(this)">POST /api/search/web</div>
168
- <div class="api-content">
169
- This operation searches the web using Brave Search and returns a list of results. Requires Brave Search to be enabled in Settings &gt; Connectors.
170
- <div class="api-input">
171
- <input type="text" placeholder="Search query" id="webSearchQuery">
172
- <input type="number" placeholder="Count (optional, 1-20)" id="webSearchCount" min="1" max="20">
173
- <button onclick="webSearch(event)">Search</button>
174
- </div>
175
- <div class="api-output"></div>
176
- </div>
177
- </div>
178
- <div class="api-section">
179
- <div class="api-header" onclick="toggleSection(this)">POST /api/generate/image</div>
180
- <div class="api-content">
181
- This operation generates an image based on a prompt. You can specify the shape and style of the image.
182
- <div class="api-input">
183
- <input type="text" placeholder="Prompt" id="imagePrompt">
184
- <select id="imageShape">
185
- <option value="square">Square</option>
186
- <option value="portrait">Portrait</option>
187
- <option value="landscape">Landscape</option>
188
- </select>
189
- <select id="imageStyle">
190
- <option value="vivid">Vivid</option>
191
- <option value="natural">Natural</option>
192
- </select>
193
- <button onclick="generateImage(event)">Generate Image</button>
194
- </div>
195
- <div class="api-output"></div>
196
- </div>
197
- </div>
198
- <div class="api-section">
199
- <div class="api-header" onclick="toggleSection(this)">POST /api/generate/completion</div>
200
- <div class="api-content">
201
- This operation generates a text completion based on a prompt. You can optionally specify the temperature for controlling randomness.
202
- <div class="api-input">
203
- <textarea placeholder="Prompt" id="completionPrompt"></textarea>
204
- <input type="number" placeholder="Temperature (optional)" id="completionTemperature" step="0.1" min="0" max="1">
205
- <button onclick="generateCompletion(event)">Generate Completion</button>
206
- </div>
207
- <div class="api-output"></div>
208
- </div>
209
- </div>
210
- <div class="api-section">
211
- <div class="api-header" onclick="toggleSection(this)">POST /api/scripts/:id</div>
212
- <div class="api-content">
213
- This operation executes a script with the specified ID and passes in the provided variables. The response contains the output of the script execution.
214
- <div class="api-input">
215
- <input type="text" placeholder="Script ID" id="scriptId">
216
- <textarea placeholder="Variables (JSON format)" id="scriptVariables"></textarea>
217
- <button onclick="executeScript(event)">Execute Script</button>
218
- </div>
219
- <div class="api-output"></div>
220
- </div>
221
- </div>
222
- <div class="api-section">
223
- <div class="api-header" onclick="toggleSection(this)">GET /api/connectors</div>
224
- <div class="api-content">
225
- Lists all available connectors with their configuration status. Supports optional category and id query filters.
226
- <div class="api-input">
227
- <input type="text" placeholder="Category (optional)" id="connectorListCategory">
228
- <button onclick="listConnectors(event)">Submit</button>
229
- </div>
230
- <div class="api-output"></div>
231
- </div>
232
- </div>
233
- <div class="api-section">
234
- <div class="api-header" onclick="toggleSection(this)">GET /api/connectors/:id</div>
235
- <div class="api-content">
236
- Retrieves full detail for a single connector, including its definition and whether it is configured and enabled.
237
- <div class="api-input">
238
- <input type="text" placeholder="Connector ID" id="connectorDetailId">
239
- <button onclick="getConnectorDetail(event)">Submit</button>
240
- </div>
241
- <div class="api-output"></div>
242
- </div>
243
- </div>
244
- <div class="api-section">
245
- <div class="api-header" onclick="toggleSection(this)">POST /api/connectors (proxy call)</div>
246
- <div class="api-content">
247
- Proxies a request through a configured connector. The connector attaches authentication automatically based on its auth strategy.
248
- <div class="api-input">
249
- <input type="text" placeholder="Connector ID" id="connectorCallId">
250
- <select id="connectorCallMethod">
251
- <option value="GET">GET</option>
252
- <option value="POST">POST</option>
253
- <option value="PUT">PUT</option>
254
- <option value="DELETE">DELETE</option>
255
- </select>
256
- <input type="text" placeholder="Path (e.g. /res/v1/web/search)" id="connectorCallPath">
257
- <textarea placeholder="Query params JSON (optional, e.g. { &quot;q&quot;: &quot;test&quot; })" id="connectorCallQuery"></textarea>
258
- <textarea placeholder="Body JSON (optional)" id="connectorCallBody"></textarea>
259
- <button onclick="callConnector(event)">Submit</button>
260
- </div>
261
- <div class="api-output"></div>
262
- </div>
263
- </div>
264
- </div>
265
- <div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div>
266
- </div>
267
- <div id="instructions" style="display: none;" data-locked="true"></div>
268
- <div id="thoughts" style="display: none;" data-locked="true"></div>
269
- <script id="api-explorer">function toggleSection(header){const content=header.nextElementSibling;content.style.display="block"===content.style.display?"none":"block"}function callApi(event,method,endpoint){event.preventDefault();const button=event.target;button.disabled=!0;const inputs=event.target.parentElement.querySelectorAll("input, textarea");let url=endpoint,data={};inputs.forEach(input=>{"Page Name"===input.placeholder?url+=input.value:"Table Name"===input.placeholder||"ID"===input.placeholder?url+="/"+input.value:"JSON Data"===input.placeholder&&(data=JSON.parse(input.value))}),fetch(url,{method:method,headers:{"Content-Type":"application/json"},body:"POST"===method?JSON.stringify(data):null}).then(response=>response.json()).then(data=>{console.log("Success:",data),event.target.parentElement.nextElementSibling.textContent=JSON.stringify(data,null,2)}).catch(error=>{console.error("Error:",error),alert("API call failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function callPaginatedApi(event){event.preventDefault();const button=event.target;button.disabled=!0;const inputs=event.target.parentElement.querySelectorAll("input");let page="",table="",limit="",offset="";inputs.forEach(input=>{"Page Name"===input.placeholder?page=input.value:"Table Name"===input.placeholder?table=input.value:"Limit"===input.placeholder?limit=input.value:"Offset (optional)"===input.placeholder&&(offset=input.value)});let url="/api/data/"+encodeURIComponent(page)+"/"+encodeURIComponent(table)+"?limit="+encodeURIComponent(limit);offset&&(url+="&offset="+encodeURIComponent(offset)),fetch(url).then(response=>response.json()).then(data=>{event.target.parentElement.nextElementSibling.textContent=JSON.stringify(data,null,2)}).catch(error=>{console.error("Error:",error),alert("API call failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function callPageApi(event,method,suffix){event.preventDefault();const button=event.target;button.disabled=!0;const inputs=event.target.parentElement.querySelectorAll("input, textarea");let pageName="",data=null;inputs.forEach(input=>{"Page Name"===input.placeholder?pageName=input.value:"TEXTAREA"===input.tagName&&(data=JSON.parse(input.value))});const url="/api/pages/"+encodeURIComponent(pageName)+(suffix||"");fetch(url,{method:method,headers:{"Content-Type":"application/json"},body:"POST"===method?JSON.stringify(data):null}).then(response=>response.json()).then(data=>{event.target.parentElement.nextElementSibling.textContent=JSON.stringify(data,null,2)}).catch(error=>{console.error("Error:",error),alert("API call failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function generateImage(event){event.preventDefault();const button=event.target;button.disabled=!0;const prompt=document.getElementById("imagePrompt").value,shape=document.getElementById("imageShape").value,style=document.getElementById("imageStyle").value,outputBox=event.target.parentElement.nextElementSibling;fetch("/api/generate/image",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:prompt,shape:shape,style:style})}).then(response=>response.json()).then(data=>{if(console.log("Success:",data),outputBox.textContent=JSON.stringify(data,null,2),data.url){const img=document.createElement("img");img.src=data.url,img.alt="Generated Image",img.className="generated-image",outputBox.appendChild(img)}}).catch(error=>{console.error("Error:",error),alert("Image generation failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function generateCompletion(event){event.preventDefault();const button=event.target;button.disabled=!0;const prompt=document.getElementById("completionPrompt").value,temperature=document.getElementById("completionTemperature").value,outputBox=event.target.parentElement.nextElementSibling;fetch("/api/generate/completion",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:prompt,temperature:parseFloat(temperature)||void 0})}).then(response=>response.json()).then(data=>{console.log("Success:",data),outputBox.textContent=JSON.stringify(data,null,2)}).catch(error=>{console.error("Error:",error),alert("Completion generation failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function webSearch(event){event.preventDefault();var button=event.target;button.disabled=!0;var query=document.getElementById("webSearchQuery").value,count=document.getElementById("webSearchCount").value,outputBox=event.target.parentElement.nextElementSibling,body={query:query};count&&(body.count=parseInt(count,10)),fetch("/api/search/web",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)}).then(function(response){return response.json()}).then(function(data){outputBox.textContent=JSON.stringify(data,null,2)}).catch(function(error){console.error("Error:",error),alert("Web search failed! Check console for details.")}).finally(function(){button.disabled=!1})}function executeScript(event){event.preventDefault();const button=event.target;button.disabled=!0;const scriptId=document.getElementById("scriptId").value,variables=JSON.parse(document.getElementById("scriptVariables").value),outputBox=event.target.parentElement.nextElementSibling;fetch(`/api/scripts/${scriptId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(variables)}).then(response=>response.json()).then(data=>{console.log("Success:",data),outputBox.textContent=JSON.stringify(data,null,2)}).catch(error=>{console.error("Error:",error),alert("Script execution failed! Check console for details.")}).finally(()=>{button.disabled=!1})}function listConnectors(event){event.preventDefault();var button=event.target;button.disabled=!0;var category=document.getElementById("connectorListCategory").value;var url="/api/connectors";if(category)url+="?category="+encodeURIComponent(category);var outputBox=event.target.parentElement.nextElementSibling;fetch(url).then(function(r){return r.json()}).then(function(data){outputBox.textContent=JSON.stringify(data,null,2)}).catch(function(err){console.error("Error:",err);alert("Failed! Check console.")}).finally(function(){button.disabled=!1})}function getConnectorDetail(event){event.preventDefault();var button=event.target;button.disabled=!0;var id=document.getElementById("connectorDetailId").value;var outputBox=event.target.parentElement.nextElementSibling;fetch("/api/connectors/"+encodeURIComponent(id)).then(function(r){return r.json()}).then(function(data){outputBox.textContent=JSON.stringify(data,null,2)}).catch(function(err){console.error("Error:",err);alert("Failed! Check console.")}).finally(function(){button.disabled=!1})}function callConnector(event){event.preventDefault();var button=event.target;button.disabled=!0;var body={connector:document.getElementById("connectorCallId").value,method:document.getElementById("connectorCallMethod").value,path:document.getElementById("connectorCallPath").value};var queryVal=document.getElementById("connectorCallQuery").value;if(queryVal)try{body.query=JSON.parse(queryVal)}catch(e){}var bodyVal=document.getElementById("connectorCallBody").value;if(bodyVal)try{body.body=JSON.parse(bodyVal)}catch(e){}var outputBox=event.target.parentElement.nextElementSibling;fetch("/api/connectors",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)}).then(function(r){return r.json()}).then(function(data){outputBox.textContent=JSON.stringify(data,null,2)}).catch(function(err){console.error("Error:",err);alert("Failed! Check console.")}).finally(function(){button.disabled=!1})}</script>
270
- <script id="page-helpers" src="/api/page-helpers.js?v=2" data-locked="true"></script>
271
- <script id="page-script" src="/api/page-script.js?v=2" data-locked="true"></script>
272
- </body></html>
@@ -1 +0,0 @@
1
- { "title": "SynthOS APIs", "categories": ["System"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "locked" }
@@ -1 +0,0 @@
1
- { "title": "SynthOS Scripts", "categories": ["System"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "locked" }