synthos 0.8.0 → 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 (359) hide show
  1. package/README.md +1 -1
  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.html → oregon_trail/page.html} +14 -12
  27. package/default-pages/{oregon_trail.json → oregon_trail/page.json} +2 -2
  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_page.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} +14 -11
  33. package/default-pages/{solar_explorer.json → solar_explorer/page.json} +2 -2
  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_page.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.html → us_map/page.html} +193 -192
  39. package/default-pages/{us_map.json → us_map/page.json} +12 -12
  40. package/default-pages/{us_map_1850.html → us_map_1850/page.html} +326 -325
  41. package/default-pages/{us_map_1850.json → us_map_1850/page.json} +12 -12
  42. package/default-pages/{western_cities_1850.html → western_cities_1850/page.html} +527 -526
  43. package/default-pages/{western_cities_1850.json → western_cities_1850/page.json} +12 -12
  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.v2.css +110 -0
  57. package/default-themes/nebula-dawn.v3.css +199 -0
  58. package/default-themes/nebula-dusk.v2.css +104 -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/index.d.ts +1 -1
  65. package/dist/agents/index.d.ts.map +1 -1
  66. package/dist/agents/index.js +2 -1
  67. package/dist/agents/index.js.map +1 -1
  68. package/dist/agents/openclaw/gatewayManager.d.ts +4 -0
  69. package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -1
  70. package/dist/agents/openclaw/gatewayManager.js +27 -11
  71. package/dist/agents/openclaw/gatewayManager.js.map +1 -1
  72. package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -1
  73. package/dist/agents/openclaw/openclawProvider.js +2 -4
  74. package/dist/agents/openclaw/openclawProvider.js.map +1 -1
  75. package/dist/agents/openclaw/sshTunnelManager.d.ts +2 -0
  76. package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -1
  77. package/dist/agents/openclaw/sshTunnelManager.js +31 -12
  78. package/dist/agents/openclaw/sshTunnelManager.js.map +1 -1
  79. package/dist/builders/anthropic.d.ts +31 -0
  80. package/dist/builders/anthropic.d.ts.map +1 -0
  81. package/dist/builders/anthropic.js +227 -0
  82. package/dist/builders/anthropic.js.map +1 -0
  83. package/dist/builders/fireworksai.d.ts +9 -0
  84. package/dist/builders/fireworksai.d.ts.map +1 -0
  85. package/dist/builders/fireworksai.js +57 -0
  86. package/dist/builders/fireworksai.js.map +1 -0
  87. package/dist/builders/index.d.ts +13 -0
  88. package/dist/builders/index.d.ts.map +1 -0
  89. package/dist/builders/index.js +31 -0
  90. package/dist/builders/index.js.map +1 -0
  91. package/dist/builders/openai.d.ts +8 -0
  92. package/dist/builders/openai.d.ts.map +1 -0
  93. package/dist/builders/openai.js +87 -0
  94. package/dist/builders/openai.js.map +1 -0
  95. package/dist/builders/types.d.ts +54 -0
  96. package/dist/builders/types.d.ts.map +1 -0
  97. package/dist/builders/types.js +211 -0
  98. package/dist/builders/types.js.map +1 -0
  99. package/dist/connectors/index.d.ts.map +1 -1
  100. package/dist/connectors/index.js +3 -2
  101. package/dist/connectors/index.js.map +1 -1
  102. package/dist/connectors/registry.d.ts +2 -1
  103. package/dist/connectors/registry.d.ts.map +1 -1
  104. package/dist/connectors/registry.js +31 -8
  105. package/dist/connectors/registry.js.map +1 -1
  106. package/dist/customizer/Customizer.d.ts +57 -0
  107. package/dist/customizer/Customizer.d.ts.map +1 -0
  108. package/dist/customizer/Customizer.js +124 -0
  109. package/dist/customizer/Customizer.js.map +1 -0
  110. package/dist/customizer/index.d.ts.map +1 -0
  111. package/dist/customizer/index.js +9 -0
  112. package/dist/customizer/index.js.map +1 -0
  113. package/dist/files.d.ts +16 -0
  114. package/dist/files.d.ts.map +1 -1
  115. package/dist/files.js +60 -1
  116. package/dist/files.js.map +1 -1
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +1 -0
  119. package/dist/index.js.map +1 -1
  120. package/dist/init.d.ts +10 -6
  121. package/dist/init.d.ts.map +1 -1
  122. package/dist/init.js +96 -113
  123. package/dist/init.js.map +1 -1
  124. package/dist/migrations.d.ts.map +1 -1
  125. package/dist/migrations.js +23 -10
  126. package/dist/migrations.js.map +1 -1
  127. package/dist/models/anthropic.d.ts +4 -2
  128. package/dist/models/anthropic.d.ts.map +1 -1
  129. package/dist/models/anthropic.js +33 -6
  130. package/dist/models/anthropic.js.map +1 -1
  131. package/dist/models/fireworksai.d.ts.map +1 -1
  132. package/dist/models/fireworksai.js +9 -1
  133. package/dist/models/fireworksai.js.map +1 -1
  134. package/dist/models/index.d.ts +1 -1
  135. package/dist/models/index.d.ts.map +1 -1
  136. package/dist/models/index.js +2 -1
  137. package/dist/models/index.js.map +1 -1
  138. package/dist/models/openai.d.ts +1 -1
  139. package/dist/models/openai.d.ts.map +1 -1
  140. package/dist/models/openai.js +24 -3
  141. package/dist/models/openai.js.map +1 -1
  142. package/dist/models/types.d.ts +20 -1
  143. package/dist/models/types.d.ts.map +1 -1
  144. package/dist/models/types.js +6 -1
  145. package/dist/models/types.js.map +1 -1
  146. package/dist/pages.d.ts +30 -7
  147. package/dist/pages.d.ts.map +1 -1
  148. package/dist/pages.js +177 -55
  149. package/dist/pages.js.map +1 -1
  150. package/dist/service/server.d.ts.map +1 -1
  151. package/dist/service/server.js +37 -8
  152. package/dist/service/server.js.map +1 -1
  153. package/dist/service/transformPage.d.ts +47 -20
  154. package/dist/service/transformPage.d.ts.map +1 -1
  155. package/dist/service/transformPage.js +514 -293
  156. package/dist/service/transformPage.js.map +1 -1
  157. package/dist/service/useAgentRoutes.d.ts +2 -1
  158. package/dist/service/useAgentRoutes.d.ts.map +1 -1
  159. package/dist/service/useAgentRoutes.js +5 -2
  160. package/dist/service/useAgentRoutes.js.map +1 -1
  161. package/dist/service/useApiRoutes.d.ts.map +1 -1
  162. package/dist/service/useApiRoutes.js +237 -136
  163. package/dist/service/useApiRoutes.js.map +1 -1
  164. package/dist/service/useConnectorRoutes.js +6 -6
  165. package/dist/service/useConnectorRoutes.js.map +1 -1
  166. package/dist/service/useFileRoutes.d.ts +4 -0
  167. package/dist/service/useFileRoutes.d.ts.map +1 -0
  168. package/dist/service/useFileRoutes.js +122 -0
  169. package/dist/service/useFileRoutes.js.map +1 -0
  170. package/dist/service/usePageRoutes.d.ts.map +1 -1
  171. package/dist/service/usePageRoutes.js +648 -67
  172. package/dist/service/usePageRoutes.js.map +1 -1
  173. package/dist/service/useSharedDataRoutes.d.ts +4 -0
  174. package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
  175. package/dist/service/useSharedDataRoutes.js +104 -0
  176. package/dist/service/useSharedDataRoutes.js.map +1 -0
  177. package/dist/service/useSharedFileRoutes.d.ts +4 -0
  178. package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
  179. package/dist/service/useSharedFileRoutes.js +121 -0
  180. package/dist/service/useSharedFileRoutes.js.map +1 -0
  181. package/dist/settings.d.ts +1 -0
  182. package/dist/settings.d.ts.map +1 -1
  183. package/dist/settings.js +1 -0
  184. package/dist/settings.js.map +1 -1
  185. package/dist/synthos-cli.d.ts.map +1 -1
  186. package/dist/synthos-cli.js +4 -3
  187. package/dist/synthos-cli.js.map +1 -1
  188. package/dist/themes.d.ts +1 -0
  189. package/dist/themes.d.ts.map +1 -1
  190. package/dist/themes.js +28 -15
  191. package/dist/themes.js.map +1 -1
  192. package/migration-rules/v1-to-v2.md +193 -0
  193. package/migration-rules/v2-to-v3.md +481 -0
  194. package/package.json +11 -10
  195. package/required-pages/builder/page.html +43 -0
  196. package/required-pages/builder/page.json +10 -0
  197. package/required-pages/{pages.html → pages/page.html} +238 -233
  198. package/required-pages/pages/page.json +10 -0
  199. package/required-pages/{settings.html → settings/page.html} +389 -275
  200. package/required-pages/settings/page.json +10 -0
  201. package/required-pages/synthos_apis/page.html +846 -0
  202. package/required-pages/synthos_apis/page.json +10 -0
  203. package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
  204. package/required-pages/synthos_scripts/page.json +10 -0
  205. package/src/agents/index.ts +1 -1
  206. package/src/agents/openclaw/gatewayManager.ts +22 -11
  207. package/src/agents/openclaw/openclawProvider.ts +2 -4
  208. package/src/agents/openclaw/sshTunnelManager.ts +19 -11
  209. package/src/builders/anthropic.ts +283 -0
  210. package/src/builders/fireworksai.ts +59 -0
  211. package/src/builders/index.ts +33 -0
  212. package/src/builders/openai.ts +89 -0
  213. package/src/builders/types.ts +261 -0
  214. package/src/connectors/index.ts +1 -1
  215. package/src/connectors/registry.ts +28 -8
  216. package/src/customizer/Customizer.ts +151 -0
  217. package/src/customizer/index.ts +5 -0
  218. package/src/files.ts +57 -0
  219. package/src/index.ts +2 -1
  220. package/src/init.ts +137 -123
  221. package/src/migrations.ts +30 -10
  222. package/src/models/anthropic.ts +40 -10
  223. package/src/models/fireworksai.ts +9 -2
  224. package/src/models/index.ts +1 -1
  225. package/src/models/openai.ts +26 -6
  226. package/src/models/types.ts +31 -1
  227. package/src/pages.ts +176 -54
  228. package/src/service/server.ts +36 -9
  229. package/src/service/transformPage.ts +557 -326
  230. package/src/service/useAgentRoutes.ts +7 -2
  231. package/src/service/useApiRoutes.ts +150 -41
  232. package/src/service/useConnectorRoutes.ts +7 -7
  233. package/src/service/useFileRoutes.ts +127 -0
  234. package/src/service/usePageRoutes.ts +720 -73
  235. package/src/service/useSharedDataRoutes.ts +106 -0
  236. package/src/service/useSharedFileRoutes.ts +126 -0
  237. package/src/settings.ts +2 -0
  238. package/src/synthos-cli.ts +4 -3
  239. package/src/themes.ts +25 -14
  240. package/static-files/favicon.svg +12 -0
  241. package/static-files/fluentlm-instructions.llmd +868 -0
  242. package/static-files/fluentlm-instructions.md +1595 -0
  243. package/static-files/fluentlm.css +4844 -0
  244. package/static-files/fluentlm.js +3602 -0
  245. package/static-files/fluentlm.min.css +1 -0
  246. package/static-files/fluentlm.min.js +1 -0
  247. package/{page-scripts/helpers-v2.js → static-files/helpers.v3.js} +82 -0
  248. package/static-files/page.v3.js +1290 -0
  249. package/static-files/recommended-frameworks.llmd +81 -0
  250. package/static-files/recommended-frameworks.md +137 -0
  251. package/static-files/retro-game.js +877 -0
  252. package/static-files/shell.css +797 -0
  253. package/static-files/theme-dark.css +169 -0
  254. package/static-files/theme-light.css +169 -0
  255. package/tests/builders.spec.ts +139 -0
  256. package/tests/pages.spec.ts +8 -8
  257. package/tests/transformPage.spec.ts +299 -360
  258. package/default-pages/application.html +0 -40
  259. package/default-pages/application.json +0 -1
  260. package/default-pages/json_tools.json +0 -1
  261. package/default-pages/my_notes.html +0 -33
  262. package/default-pages/neon_asteroids.html +0 -77
  263. package/default-pages/sidebar_page.json +0 -1
  264. package/default-pages/solar_tutorial.json +0 -1
  265. package/default-pages/two-panel_page.json +0 -1
  266. package/dist/agents/a2a/a2aProvider.d.ts +0 -3
  267. package/dist/agents/discovery.d.ts +0 -30
  268. package/dist/agents/openclaw/openclawProvider.d.ts +0 -3
  269. package/dist/agents/types.d.ts +0 -64
  270. package/dist/connectors/index.d.ts +0 -3
  271. package/dist/connectors/types.d.ts +0 -84
  272. package/dist/index.d.ts +0 -7
  273. package/dist/migrations.d.ts +0 -12
  274. package/dist/models/chainOfThought.d.ts +0 -12
  275. package/dist/models/fireworksai.d.ts +0 -30
  276. package/dist/models/logCompletePrompt.d.ts +0 -3
  277. package/dist/models/providers.d.ts +0 -8
  278. package/dist/models/utils.d.ts +0 -6
  279. package/dist/scripts.d.ts +0 -15
  280. package/dist/service/createCompletePrompt.d.ts +0 -5
  281. package/dist/service/debugLog.d.ts +0 -11
  282. package/dist/service/generateImage.d.ts +0 -32
  283. package/dist/service/index.d.ts +0 -8
  284. package/dist/service/modelInstructions.d.ts +0 -7
  285. package/dist/service/requiresSettings.d.ts +0 -3
  286. package/dist/service/server.d.ts +0 -4
  287. package/dist/service/useApiRoutes.d.ts +0 -4
  288. package/dist/service/useConnectorRoutes.d.ts +0 -4
  289. package/dist/service/useDataRoutes.d.ts +0 -4
  290. package/dist/service/useGatewayRoutes.d.ts +0 -4
  291. package/dist/service/useGatewayRoutes.d.ts.map +0 -1
  292. package/dist/service/useGatewayRoutes.js +0 -168
  293. package/dist/service/useGatewayRoutes.js.map +0 -1
  294. package/dist/service/usePageRoutes.d.ts +0 -5
  295. package/dist/synthos-cli.d.ts +0 -2
  296. package/page-scripts/page-v2.js +0 -656
  297. package/required-pages/builder.html +0 -48
  298. package/required-pages/builder.json +0 -1
  299. package/required-pages/pages.json +0 -1
  300. package/required-pages/settings.json +0 -1
  301. package/required-pages/synthos_apis.html +0 -327
  302. package/required-pages/synthos_apis.json +0 -1
  303. package/required-pages/synthos_scripts.json +0 -1
  304. package/src/connectors/airtable/connector.json +0 -27
  305. package/src/connectors/alpha-vantage/connector.json +0 -26
  306. package/src/connectors/brave-search/connector.json +0 -26
  307. package/src/connectors/cloudinary/connector.json +0 -27
  308. package/src/connectors/deepl/connector.json +0 -28
  309. package/src/connectors/elevenlabs/connector.json +0 -30
  310. package/src/connectors/giphy/connector.json +0 -27
  311. package/src/connectors/github/connector.json +0 -29
  312. package/src/connectors/huggingface/connector.json +0 -27
  313. package/src/connectors/imgur/connector.json +0 -29
  314. package/src/connectors/instagram/connector.json +0 -43
  315. package/src/connectors/jira/connector.json +0 -28
  316. package/src/connectors/mapbox/connector.json +0 -26
  317. package/src/connectors/nasa/connector.json +0 -27
  318. package/src/connectors/newsapi/connector.json +0 -27
  319. package/src/connectors/notion/connector.json +0 -28
  320. package/src/connectors/open-exchange-rates/connector.json +0 -27
  321. package/src/connectors/openweathermap/connector.json +0 -26
  322. package/src/connectors/pexels/connector.json +0 -27
  323. package/src/connectors/resend/connector.json +0 -29
  324. package/src/connectors/rss2json/connector.json +0 -27
  325. package/src/connectors/sendgrid/connector.json +0 -27
  326. package/src/connectors/spoonacular/connector.json +0 -28
  327. package/src/connectors/stability-ai/connector.json +0 -27
  328. package/src/connectors/twilio/connector.json +0 -28
  329. package/src/connectors/unsplash/connector.json +0 -27
  330. package/src/connectors/wolfram-alpha/connector.json +0 -26
  331. package/src/connectors/youtube-data/connector.json +0 -30
  332. /package/{dist/connectors → service-connectors}/airtable/connector.json +0 -0
  333. /package/{dist/connectors → service-connectors}/alpha-vantage/connector.json +0 -0
  334. /package/{dist/connectors → service-connectors}/brave-search/connector.json +0 -0
  335. /package/{dist/connectors → service-connectors}/cloudinary/connector.json +0 -0
  336. /package/{dist/connectors → service-connectors}/deepl/connector.json +0 -0
  337. /package/{dist/connectors → service-connectors}/elevenlabs/connector.json +0 -0
  338. /package/{dist/connectors → service-connectors}/giphy/connector.json +0 -0
  339. /package/{dist/connectors → service-connectors}/github/connector.json +0 -0
  340. /package/{dist/connectors → service-connectors}/huggingface/connector.json +0 -0
  341. /package/{dist/connectors → service-connectors}/imgur/connector.json +0 -0
  342. /package/{dist/connectors → service-connectors}/instagram/connector.json +0 -0
  343. /package/{dist/connectors → service-connectors}/jira/connector.json +0 -0
  344. /package/{dist/connectors → service-connectors}/mapbox/connector.json +0 -0
  345. /package/{dist/connectors → service-connectors}/nasa/connector.json +0 -0
  346. /package/{dist/connectors → service-connectors}/newsapi/connector.json +0 -0
  347. /package/{dist/connectors → service-connectors}/notion/connector.json +0 -0
  348. /package/{dist/connectors → service-connectors}/open-exchange-rates/connector.json +0 -0
  349. /package/{dist/connectors → service-connectors}/openweathermap/connector.json +0 -0
  350. /package/{dist/connectors → service-connectors}/pexels/connector.json +0 -0
  351. /package/{dist/connectors → service-connectors}/resend/connector.json +0 -0
  352. /package/{dist/connectors → service-connectors}/rss2json/connector.json +0 -0
  353. /package/{dist/connectors → service-connectors}/sendgrid/connector.json +0 -0
  354. /package/{dist/connectors → service-connectors}/spoonacular/connector.json +0 -0
  355. /package/{dist/connectors → service-connectors}/stability-ai/connector.json +0 -0
  356. /package/{dist/connectors → service-connectors}/twilio/connector.json +0 -0
  357. /package/{dist/connectors → service-connectors}/unsplash/connector.json +0 -0
  358. /package/{dist/connectors → service-connectors}/wolfram-alpha/connector.json +0 -0
  359. /package/{dist/connectors → service-connectors}/youtube-data/connector.json +0 -0
@@ -1,40 +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 - {Application Title}</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>.application-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 12px 0 0;width:100%;max-width:800px;box-shadow:0 6px 25px var(--accent-glow)}.application-content{font-size:14px;color:rgba(224,224,224,.8);padding:20px;flex-grow:1;width:100%;max-width:800px;background:rgba(15,15,35,.8);border-radius:0 0 12px 12px;border:1px solid rgba(138,43,226,.2);border-top:none}.light-mode .application-content{color:rgba(45,38,64,.8);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
- </head>
12
-
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">
18
- <p><strong>SynthOS:</strong> what kind of application would you like?</p>
19
- </div>
20
- </div>
21
- <div class="link-group" data-locked="true">
22
- <a href="#" id="saveLink" data-locked="true">Save</a>
23
- <a href="/pages" id="pagesLink" data-locked="true">Pages</a>
24
- <a href="#" id="resetLink" data-locked="true">Reset</a>
25
- </div>
26
- <form action="/" method="POST" id="chatForm" data-locked="true">
27
- <input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message..." data-locked="true">
28
- <button type="submit" class="chat-submit" data-locked="true">Send</button>
29
- </form>
30
- </div>
31
- <div class="viewer-panel" id="viewerPanel">
32
- <div class="application-title" style="max-width: none;">{Application Title}</div>
33
- <div class="application-content" style="max-width: none;">{Application Content}</div>
34
- <div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div>
35
- </div>
36
- <div id="instructions" style="display: none;" data-locked="true"></div>
37
- <div id="thoughts" style="display: none;" data-locked="true"></div>
38
- <script id="page-helpers" src="/api/page-helpers.js?v=2" data-locked="true"></script>
39
- <script id="page-script" src="/api/page-script.js?v=2" data-locked="true"></script>
40
- </body></html>
@@ -1 +0,0 @@
1
- { "title": "Application", "categories": ["Starters"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "unlocked" }
@@ -1 +0,0 @@
1
- { "title": "JSON Tools", "categories": ["Tools"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "unlocked" }
@@ -1,33 +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 - Notes</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>.application-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 12px 0 0;width:100%;max-width:800px;box-shadow:0 6px 25px var(--accent-glow)}.application-content{font-size:14px;color:rgba(224,224,224,.8);padding:20px;flex-grow:1;width:100%;max-width:800px;background:rgba(15,15,35,.8);border-radius:0 0 12px 12px;border:1px solid rgba(138,43,226,.2);border-top:none}.light-mode .application-content{color:rgba(45,38,64,.8);background:rgba(255,255,255,.8)}</style>
8
- <link rel="stylesheet" href="https://uicdn.toast.com/editor/latest/toastui-editor.min.css">
9
- <link rel="stylesheet" href="https://uicdn.toast.com/editor/latest/theme/toastui-editor-dark.min.css">
10
- <script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>
11
- <style>.notes-app{display:flex;height:100%;width:100%;background:var(--bg-tertiary);border-radius:12px;overflow:hidden;border:1px solid var(--border-color)}.notes-sidebar{width:280px;min-width:280px;background:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column}.notes-sidebar-header{padding:16px;border-bottom:1px solid var(--border-color);display:flex;justify-content:space-between;align-items:center}.notes-sidebar-header h3{margin:0;font-size:18px;font-weight:600;color:var(--text-primary)}.add-note-btn{background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff;border:none;padding:8px 14px;border-radius:8px;cursor:pointer;font-size:13px;font-weight:500;transition:transform .2s,box-shadow .2s}.add-note-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px var(--accent-glow)}.notes-list{flex:1;overflow-y:auto;padding:8px}.note-item{padding:12px 14px;margin-bottom:6px;background:var(--bg-tertiary);border-radius:8px;cursor:pointer;transition:.2s;border:2px solid transparent}.note-item:hover{background:var(--bg-primary)}.note-item.active{border-color:var(--accent-primary);background:var(--bg-primary)}.note-item-title{font-weight:600;color:var(--text-primary);font-size:14px;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.note-item-preview{font-size:12px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.notes-main{flex:1;display:flex;flex-direction:column;background:var(--bg-tertiary)}.notes-instructions{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-secondary);text-align:center;padding:40px}.instructions-icon{font-size:64px;margin-bottom:20px;opacity:.6}.notes-instructions h2{margin:0 0 12px;color:var(--text-primary);font-size:24px}.notes-instructions p{margin:0;font-size:15px;max-width:300px;line-height:1.5}.notes-editor{flex:1;display:flex;flex-direction:column;padding:20px}.note-title-input{font-size:24px;font-weight:600;border:none;background:0 0;color:var(--text-primary);padding:12px 0;margin-bottom:12px;border-bottom:2px solid var(--border-color);outline:0}.note-title-input:focus{border-bottom-color:var(--accent-primary)}.note-title-input::placeholder{color:var(--text-secondary);opacity:.6}.note-content-input{flex:1;font-size:15px;line-height:1.6;border:none;background:var(--bg-secondary);color:var(--text-primary);padding:16px;border-radius:10px;resize:none;outline:0;font-family:inherit}.note-content-input:focus{box-shadow:0 0 0 2px var(--accent-primary)}.note-content-input::placeholder{color:var(--text-secondary);opacity:.6}.note-actions{display:flex;gap:12px;margin-top:16px;justify-content:flex-end}.note-delete-btn,.note-save-btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:.2s;border:none}.note-save-btn{background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff}.note-save-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px var(--accent-glow)}.note-delete-btn{background:var(--bg-secondary);color:#e74c3c;border:1px solid #e74c3c}.note-delete-btn:hover{background:#e74c3c;color:#fff}.light-mode .note-content-input{background:rgba(255,255,255,.7)}</style><style id="notes-styles">.notes-app{display:flex;height:100%;width:100%;background:var(--bg-tertiary);border-radius:12px;overflow:hidden;border:1px solid var(--border-color)}.notes-sidebar{width:280px;min-width:280px;background:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column}.notes-sidebar-header{padding:16px;border-bottom:1px solid var(--border-color);display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px}.notes-sidebar-header h3{margin:0;font-size:18px;font-weight:600;color:var(--text-primary)}.add-note-btn{background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff;border:none;padding:8px 14px;border-radius:8px;cursor:pointer;font-size:13px;font-weight:500;transition:transform .2s,box-shadow .2s}.add-note-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px var(--accent-glow)}.notes-filter-input{width:100%;padding:8px 12px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-tertiary);color:var(--text-primary);font-size:13px;outline:0;margin-top:8px;box-sizing:border-box}.notes-filter-input:focus{border-color:var(--accent-primary);box-shadow:0 0 0 2px var(--accent-glow)}.notes-filter-input::placeholder{color:var(--text-secondary);opacity:.6}.notes-list{flex:1;overflow-y:auto;padding:8px}.note-item{padding:12px 14px;margin-bottom:6px;background:var(--bg-tertiary);border-radius:8px;cursor:pointer;transition:.2s;border:2px solid transparent}.note-item:hover{background:var(--bg-primary)}.note-item.active{border-color:var(--accent-primary);background:var(--bg-primary)}.note-item-title{font-weight:600;color:var(--text-primary);font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.notes-main{flex:1;display:flex;flex-direction:column;background:var(--bg-tertiary);min-width:0;overflow:hidden}.notes-instructions{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-secondary);text-align:center;padding:40px}.instructions-icon{font-size:64px;margin-bottom:20px;opacity:.6}.notes-instructions h2{margin:0 0 12px;color:var(--text-primary);font-size:24px}.notes-instructions p{margin:0;font-size:15px;max-width:300px;line-height:1.5}.notes-editor{flex:1;display:flex;flex-direction:column;padding:20px;min-width:0;overflow:hidden}.note-title-input{font-size:24px;font-weight:600;border:none;background:0 0;color:var(--text-primary);padding:12px 0;margin-bottom:12px;border-bottom:2px solid var(--border-color);outline:0}.note-title-input:focus{border-bottom-color:var(--accent-primary)}.note-title-input::placeholder{color:var(--text-secondary);opacity:.6}.note-content-input{flex:1;font-size:15px;line-height:1.6;border:none;background:var(--bg-secondary);color:var(--text-primary);padding:16px;border-radius:10px;resize:none;outline:0;font-family:inherit}.note-content-input:focus{box-shadow:0 0 0 2px var(--accent-primary)}.note-content-input::placeholder{color:var(--text-secondary);opacity:.6}.note-actions{display:flex;gap:12px;margin-top:16px;justify-content:flex-end}.note-delete-btn,.note-save-btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:.2s;border:none}.note-save-btn{background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff}.note-save-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px var(--accent-glow)}.note-delete-btn{background:var(--bg-secondary);color:#e74c3c;border:1px solid #e74c3c}.note-delete-btn:hover{background:#e74c3c;color:#fff}.light-mode .note-content-input,.light-mode .notes-filter-input{background:rgba(255,255,255,.7)}</style><style id="toastui-theme-overrides">.toastui-editor-defaultUI{border:none!important;border-radius:10px!important;overflow:hidden}.toastui-editor-mode-switch{display:none!important}#editor-container{flex:1;display:flex;flex-direction:column;min-height:0}#editor-container .toastui-editor-defaultUI{flex:1;display:flex;flex-direction:column}#editor-container .toastui-editor-main{flex:1}</style></head>
12
-
13
-
14
- <body><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"><div class="chat-message"><p><strong>SynthOS:</strong> Welcome to <strong>My Notes</strong> — a simple note-taking app! Your notes are listed in the sidebar on the left. Click any note to view or edit it, or tap "+ New Note" to create a fresh one. Each note has a rich text editor with formatting tools, and you can save or delete notes using the buttons below the editor. Use the search box to filter notes by title or content. What would you like to do?</p></div></div>
17
- <div class="link-group" data-locked="true">
18
- <a href="#" id="saveLink" data-locked="true">Save</a>
19
- <a href="/pages" id="pagesLink" data-locked="true">Pages</a>
20
- <a href="#" id="resetLink" data-locked="true">Reset</a>
21
- </div>
22
- <form action="/" method="POST" id="chatForm" data-locked="true">
23
- <input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message..." data-locked="true">
24
- <button type="submit" class="chat-submit" data-locked="true">Send</button>
25
- </form>
26
- </div>
27
- <div class="viewer-panel" id="viewerPanel"><div class="notes-app"><div class="notes-sidebar"><div class="notes-sidebar-header"><h3>My Notes</h3><button class="add-note-btn" id="addNoteBtn">+ New Note</button><input type="text" class="notes-filter-input" id="notesFilterInput" placeholder="Search notes..."></div><div class="notes-list" id="notesList"></div></div><div class="notes-main"><div class="notes-instructions" id="notesInstructions"><div class="instructions-icon">📝</div><h2>Welcome to Notes</h2><p>Select a note from the sidebar to view or edit it, or click "+ New Note" to create a new one.</p></div><div class="notes-editor" id="notesEditor" style="display: none;"><input type="text" class="note-title-input" id="noteTitleInput" placeholder="Note title..."><div id="editor-container"></div><div class="note-actions"><button class="note-save-btn" id="noteSaveBtn">💾 Save</button><button class="note-delete-btn" id="noteDeleteBtn">🗑️ Delete</button></div></div></div></div><div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div></div>
28
- <div id="instructions" style="display: none;" data-locked="true"></div>
29
- <div id="thoughts" style="display: none;" data-locked="true"></div>
30
- <script id="notes-app-logic">let currentNoteId=null,notes=[],editor=null;function initEditor(){editor=new toastui.Editor({el:document.querySelector("#editor-container"),height:"100%",initialEditType:"wysiwyg",previewStyle:"vertical",theme:"light"===window.themeInfo.mode?"light":"dark",placeholder:"Start writing your note...",toolbarItems:[["heading","bold","italic","strike"],["hr","quote"],["ul","ol","task","indent","outdent"],["table","link","image"],["code","codeblock"]]})}async function loadNotes(){try{notes=await synthos.data.list("notes"),renderNotesList()}catch(e){console.error("Failed to load notes:",e),notes=[],renderNotesList()}}function renderNotesList(){const list=document.getElementById("notesList"),filter=(document.getElementById("notesFilterInput").value||"").toLowerCase();list.innerHTML="";const filtered=filter?notes.filter(n=>(n.title||"").toLowerCase().includes(filter)):notes;0!==filtered.length?filtered.forEach(note=>{const item=document.createElement("div");item.className="note-item"+(currentNoteId===note.id?" active":""),item.innerHTML=`<div class="note-item-title">${escapeHtml(note.title||"Untitled")}</div>`,item.onclick=()=>selectNote(note.id),list.appendChild(item)}):list.innerHTML='<div style="padding:20px;text-align:center;color:var(--text-secondary);font-size:13px;">'+(filter?"No matching notes.":'No notes yet.<br>Click "+ New Note" to create one.')+"</div>"}function escapeHtml(text){const div=document.createElement("div");return div.textContent=text,div.innerHTML}function selectNote(id){currentNoteId=id;const note=notes.find(n=>n.id===id);note&&(document.getElementById("notesInstructions").style.display="none",document.getElementById("notesEditor").style.display="flex",document.getElementById("noteTitleInput").value=note.title||"",editor&&editor.setMarkdown(note.content||""),renderNotesList())}function showInstructions(){currentNoteId=null,document.getElementById("notesInstructions").style.display="flex",document.getElementById("notesEditor").style.display="none",renderNotesList()}document.getElementById("addNoteBtn").onclick=async function(){const newNote={id:crypto.randomUUID(),title:"",content:""};try{const saved=await synthos.data.save("notes",newNote);notes.unshift(saved),selectNote(saved.id)}catch(e){console.error("Failed to create note:",e)}},document.getElementById("noteSaveBtn").onclick=async function(){if(!currentNoteId)return;const title=document.getElementById("noteTitleInput").value,content=editor?editor.getMarkdown():"";try{const updated=await synthos.data.save("notes",{id:currentNoteId,title:title,content:content}),idx=notes.findIndex(n=>n.id===currentNoteId);idx>=0&&(notes[idx]=updated),renderNotesList()}catch(e){console.error("Failed to save note:",e)}},document.getElementById("noteDeleteBtn").onclick=async function(){if(currentNoteId&&confirm("Are you sure you want to delete this note?"))try{await synthos.data.remove("notes",currentNoteId),notes=notes.filter(n=>n.id!==currentNoteId),showInstructions()}catch(e){console.error("Failed to delete note:",e)}},document.getElementById("notesFilterInput").addEventListener("input",renderNotesList),initEditor(),loadNotes();</script>
31
- <script id="page-helpers" src="/api/page-helpers.js?v=2" data-locked="true"></script>
32
- <script id="page-script" src="/api/page-script.js?v=2" data-locked="true"></script>
33
- </body></html>
@@ -1,77 +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</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>#gameCanvas{display:block}.game-ui{position:absolute;top:20px;left:20px;right:20px;display:flex;justify-content:space-between;pointer-events:none;z-index:10}.level-display,.lives-display,.score-display{font-family:Orbitron,'Segoe UI',sans-serif;font-size:18px;color:#0ff;text-shadow:0 0 10px #0ff,0 0 20px #0ff;letter-spacing:2px}.game-over-screen,.start-screen{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;z-index:20}.game-over-screen h1,.start-screen h1{font-family:Orbitron,'Segoe UI',sans-serif;font-size:48px;color:#f0f;text-shadow:0 0 20px #f0f,0 0 40px #f0f,0 0 60px #f0f;margin-bottom:20px;letter-spacing:5px}.game-over-screen p,.start-screen p{font-size:18px;color:#0ff;text-shadow:0 0 10px #0ff;margin-bottom:30px}.restart-btn,.start-btn{padding:15px 40px;font-size:18px;font-family:Orbitron,'Segoe UI',sans-serif;background:0 0;border:2px solid #0ff;color:#0ff;cursor:pointer;text-transform:uppercase;letter-spacing:3px;transition:.3s;box-shadow:0 0 20px rgba(0,255,255,.3),inset 0 0 20px rgba(0,255,255,.1)}.restart-btn:hover,.start-btn:hover{background:rgba(0,255,255,.2);box-shadow:0 0 30px rgba(0,255,255,.5),inset 0 0 30px rgba(0,255,255,.2);transform:scale(1.05)}.controls-info{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);font-size:14px;color:rgba(0,255,255,.6);text-align:center;letter-spacing:1px}</style>
8
- <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&amp;display=swap" rel="stylesheet">
9
- </head>
10
-
11
- <body>
12
- <div class="chat-panel" data-locked="true">
13
- <div class="chat-header" data-locked="true">SynthOS</div>
14
- <div class="chat-messages" id="chatMessages" data-locked="true">
15
- <div class="chat-message">
16
- <p><strong>SynthOS:</strong> What can I create for you?</p>
17
- </div>
18
- <div class="chat-message">
19
- <p><strong>You:</strong> create super cool version of astroids...</p>
20
- </div>
21
- <div class="chat-message">
22
- <p><strong>SynthOS:</strong> 🚀 Launching NEON ASTEROIDS! A synthwave-styled space shooter with glowing
23
- neon graphics, particle explosions, screen shake effects, and progressive difficulty. Use WASD or
24
- Arrow keys to move, SPACE to shoot. Destroy asteroids, survive, and chase that high score!</p>
25
- </div>
26
- <div class="chat-message">
27
- <p><strong>You:</strong> great game but a couple of things missing... the rocks should progressively
28
- speed up as the level increases. dropping power ups that are extra lives should be rare. it's also
29
- missing the saucers that fly across the screen and shoot at you starting on level 2</p>
30
- </div>
31
- <div class="chat-message">
32
- <p><strong>SynthOS:</strong> 🛸 Updated! Added: 1) Asteroids now speed up with each level (+15% per
33
- level), 2) Extra life power-ups are now rare (5% chance vs 15% for others), 3) Enemy UFO saucers
34
- appear starting Level 2 - they fly across the screen, track you, and shoot back! Small saucers are
35
- faster and more accurate. Watch out for those glowing red menaces! 👾</p>
36
- </div>
37
- </div>
38
- <div class="link-group" data-locked="true">
39
- <a href="#" id="saveLink" data-locked="true">Save</a>
40
- <a href="/pages" id="pagesLink" data-locked="true">Pages</a>
41
- <a href="#" id="resetLink" data-locked="true">Reset</a>
42
- </div>
43
- <form action="/" method="POST" id="chatForm" data-locked="true">
44
- <input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message..." data-locked="true">
45
- <button type="submit" class="chat-submit" data-locked="true">Send</button>
46
- </form>
47
- </div>
48
- <div class="viewer-panel" id="viewerPanel">
49
- <canvas id="gameCanvas"></canvas>
50
- <div class="game-ui">
51
- <div class="score-display">SCORE: <span id="score">0</span></div>
52
- <div class="level-display">LEVEL: <span id="level">1</span></div>
53
- <div class="lives-display">LIVES: <span id="lives">3</span></div>
54
- </div>
55
- <div class="start-screen" id="startScreen">
56
- <h1>NEON ASTEROIDS</h1>
57
- <p>Navigate the cosmic void. Destroy all asteroids. Beware the saucers!</p>
58
- <button class="start-btn" id="startBtn">START MISSION</button>
59
- </div>
60
- <div class="game-over-screen" id="gameOverScreen" style="display: none;">
61
- <h1>GAME OVER</h1>
62
- <p>Final Score: <span id="finalScore">0</span></p>
63
- <button class="restart-btn" id="restartBtn">TRY AGAIN</button>
64
- </div>
65
- <div class="controls-info">WASD / ARROWS to move • SPACE to fire • P to pause</div>
66
- <div id="loadingOverlay" class="loading-overlay">
67
- <div class="spinner"></div>
68
- </div>
69
- </div>
70
- <div id="instructions" style="display: none;" data-locked="true"></div>
71
- <div id="thoughts" style="display: none;" data-locked="true"></div>
72
- <script id="asteroids-game">const canvas=document.getElementById("gameCanvas"),ctx=canvas.getContext("2d"),viewerPanel=document.getElementById("viewerPanel");function resizeCanvas(){canvas.width=viewerPanel.clientWidth,canvas.height=viewerPanel.clientHeight}resizeCanvas(),window.addEventListener("resize",resizeCanvas);let gameRunning=!1,gamePaused=!1,score=0,lives=3,level=1,screenShake=0;const ship={x:0,y:0,vx:0,vy:0,angle:-Math.PI/2,radius:15,thrust:0,rotationSpeed:0,invincible:0,shield:0,rapidFire:0,multiShot:0};let bullets=[],asteroids=[],particles=[],powerUps=[],stars=[],saucers=[],saucerBullets=[],saucerSpawnTimer=0;const keys={};function initStars(){stars=[];for(let i=0;i<150;i++)stars.push({x:Math.random()*canvas.width,y:Math.random()*canvas.height,size:2*Math.random()+.5,speed:.5*Math.random()+.1,brightness:Math.random()})}function initGame(){ship.x=canvas.width/2,ship.y=canvas.height/2,ship.vx=0,ship.vy=0,ship.angle=-Math.PI/2,ship.invincible=180,ship.shield=0,ship.rapidFire=0,ship.multiShot=0,bullets=[],asteroids=[],particles=[],powerUps=[],saucers=[],saucerBullets=[],saucerSpawnTimer=0,score=0,lives=3,level=1,initStars(),spawnAsteroids(4),updateUI()}function getLevelSpeedMultiplier(){return 1+.15*(level-1)}function spawnAsteroids(count){for(let i=0;i<count;i++){let x,y;do{x=Math.random()*canvas.width,y=Math.random()*canvas.height}while(distance(x,y,ship.x,ship.y)<150);asteroids.push(createAsteroid(x,y,3))}}function createAsteroid(x,y,size){const speed=(.5*(4-size)+1.5*Math.random())*getLevelSpeedMultiplier(),angle=Math.random()*Math.PI*2,radii=[],points=8+Math.floor(5*Math.random()),baseRadius=15*size+10;for(let i=0;i<points;i++)radii.push(baseRadius*(.7+.6*Math.random()));return{x:x,y:y,vx:Math.cos(angle)*speed,vy:Math.sin(angle)*speed,size:size,radii:radii,points:points,rotation:0,rotationSpeed:.03*(Math.random()-.5),color:3===size?"#ff00ff":2===size?"#ffff00":"#00ffff"}}function createSaucer(){const isSmall=Math.random()>.5,fromLeft=Math.random()>.5,y=Math.random()*(canvas.height-100)+50;return{x:fromLeft?-30:canvas.width+30,y:y,vx:(fromLeft?1:-1)*(isSmall?3:2)*getLevelSpeedMultiplier(),vy:0,isSmall:isSmall,radius:isSmall?15:25,shootTimer:60+60*Math.random(),directionChangeTimer:60+120*Math.random(),points:isSmall?1e3:500}}function distance(x1,y1,x2,y2){return Math.sqrt((x2-x1)**2+(y2-y1)**2)}function wrap(obj){obj.x<-50&&(obj.x=canvas.width+50),obj.x>canvas.width+50&&(obj.x=-50),obj.y<-50&&(obj.y=canvas.height+50),obj.y>canvas.height+50&&(obj.y=-50)}function createExplosion(x,y,color,count=20){for(let i=0;i<count;i++){const angle=Math.random()*Math.PI*2,speed=5*Math.random()+2;particles.push({x:x,y:y,vx:Math.cos(angle)*speed,vy:Math.sin(angle)*speed,life:60+30*Math.random(),maxLife:90,color:color,size:3*Math.random()+1})}screenShake=10}let shootCooldown=0;function shoot(){if(shootCooldown>0)return;const cooldown=ship.rapidFire>0?5:15;shootCooldown=cooldown,(ship.multiShot>0?[-.2,0,.2]:[0]).forEach(offset=>{const angle=ship.angle+offset;bullets.push({x:ship.x+20*Math.cos(angle),y:ship.y+20*Math.sin(angle),vx:10*Math.cos(angle)+.5*ship.vx,vy:10*Math.sin(angle)+.5*ship.vy,life:60})})}function saucerShoot(saucer){let angle=Math.atan2(ship.y-saucer.y,ship.x-saucer.x);saucer.isSmall?angle+=.2*(Math.random()-.5):angle+=.5*(Math.random()-.5),saucerBullets.push({x:saucer.x,y:saucer.y,vx:6*Math.cos(angle),vy:6*Math.sin(angle),life:90})}function spawnPowerUp(x,y){if(Math.random()>.15)return;let type;const rand=Math.random();type=rand<.05?"life":rand<.38?"shield":rand<.71?"rapid":"multi",powerUps.push({x:x,y:y,type:type,life:600,pulse:0})}function updateUI(){document.getElementById("score").textContent=score,document.getElementById("level").textContent=level,document.getElementById("lives").textContent=lives}function update(){if(!gameRunning||gamePaused)return;(keys.ArrowLeft||keys.KeyA)&&(ship.angle-=.08),(keys.ArrowRight||keys.KeyD)&&(ship.angle+=.08),keys.ArrowUp||keys.KeyW?(ship.vx+=.15*Math.cos(ship.angle),ship.vy+=.15*Math.sin(ship.angle),ship.thrust=1):ship.thrust*=.95,keys.Space&&shoot(),ship.vx*=.99,ship.vy*=.99;const speed=Math.sqrt(ship.vx**2+ship.vy**2);if(speed>8&&(ship.vx=ship.vx/speed*8,ship.vy=ship.vy/speed*8),ship.x+=ship.vx,ship.y+=ship.vy,wrap(ship),ship.invincible>0&&ship.invincible--,ship.shield>0&&ship.shield--,ship.rapidFire>0&&ship.rapidFire--,ship.multiShot>0&&ship.multiShot--,shootCooldown>0&&shootCooldown--,level>=2){saucerSpawnTimer++;const spawnInterval=Math.max(300,600-30*level);saucerSpawnTimer>=spawnInterval&&saucers.length<2&&(saucers.push(createSaucer()),saucerSpawnTimer=0)}saucers=saucers.filter(s=>(s.x+=s.vx,s.y+=s.vy,s.directionChangeTimer--,s.directionChangeTimer<=0&&(s.vy=2*(Math.random()-.5),s.directionChangeTimer=60+120*Math.random()),s.y<50&&(s.vy=Math.abs(s.vy)),s.y>canvas.height-50&&(s.vy=-Math.abs(s.vy)),s.shootTimer--,s.shootTimer<=0&&(saucerShoot(s),s.shootTimer=s.isSmall?40+40*Math.random():60+60*Math.random()),s.x>-50&&s.x<canvas.width+50)),saucerBullets=saucerBullets.filter(b=>(b.x+=b.vx,b.y+=b.vy,b.life--,b.life>0&&b.x>-10&&b.x<canvas.width+10&&b.y>-10&&b.y<canvas.height+10)),bullets=bullets.filter(b=>(b.x+=b.vx,b.y+=b.vy,b.life--,wrap(b),b.life>0)),asteroids.forEach(a=>{a.x+=a.vx,a.y+=a.vy,a.rotation+=a.rotationSpeed,wrap(a)}),particles=particles.filter(p=>(p.x+=p.vx,p.y+=p.vy,p.vx*=.98,p.vy*=.98,p.life--,p.life>0)),powerUps=powerUps.filter(p=>(p.life--,p.pulse+=.1,p.life>0)),stars.forEach(s=>{s.y+=s.speed,s.y>canvas.height&&(s.y=0,s.x=Math.random()*canvas.width),s.brightness=.3+.3*Math.sin(.003*Date.now()+s.x)}),bullets.forEach((b,bi)=>{asteroids.forEach((a,ai)=>{const avgRadius=a.radii.reduce((sum,r)=>sum+r,0)/a.radii.length;if(distance(b.x,b.y,a.x,a.y)<avgRadius){if(bullets.splice(bi,1),createExplosion(a.x,a.y,a.color,15),a.size>1)for(let i=0;i<2;i++)asteroids.push(createAsteroid(a.x,a.y,a.size-1));spawnPowerUp(a.x,a.y),asteroids.splice(ai,1),score+=100*(4-a.size),updateUI()}})}),bullets.forEach((b,bi)=>{saucers.forEach((s,si)=>{distance(b.x,b.y,s.x,s.y)<s.radius&&(bullets.splice(bi,1),createExplosion(s.x,s.y,"#ff6600",25),score+=s.points,saucers.splice(si,1),updateUI())})}),ship.invincible<=0&&ship.shield<=0&&asteroids.forEach((a,ai)=>{const avgRadius=a.radii.reduce((sum,r)=>sum+r,0)/a.radii.length;distance(ship.x,ship.y,a.x,a.y)<avgRadius+ship.radius&&(createExplosion(ship.x,ship.y,"#00ffff",30),lives--,updateUI(),lives<=0?gameOver():(ship.x=canvas.width/2,ship.y=canvas.height/2,ship.vx=0,ship.vy=0,ship.invincible=180))}),ship.invincible<=0&&ship.shield<=0&&saucers.forEach((s,si)=>{distance(ship.x,ship.y,s.x,s.y)<s.radius+ship.radius&&(createExplosion(ship.x,ship.y,"#00ffff",30),createExplosion(s.x,s.y,"#ff6600",25),saucers.splice(si,1),lives--,updateUI(),lives<=0?gameOver():(ship.x=canvas.width/2,ship.y=canvas.height/2,ship.vx=0,ship.vy=0,ship.invincible=180))}),ship.invincible<=0&&ship.shield<=0&&saucerBullets.forEach((b,bi)=>{distance(ship.x,ship.y,b.x,b.y)<ship.radius+5&&(createExplosion(ship.x,ship.y,"#00ffff",30),saucerBullets.splice(bi,1),lives--,updateUI(),lives<=0?gameOver():(ship.x=canvas.width/2,ship.y=canvas.height/2,ship.vx=0,ship.vy=0,ship.invincible=180))}),powerUps.forEach((p,pi)=>{if(distance(ship.x,ship.y,p.x,p.y)<30)switch(powerUps.splice(pi,1),createExplosion(p.x,p.y,"#00ff00",10),p.type){case"shield":ship.shield=600;break;case"rapid":ship.rapidFire=600;break;case"multi":ship.multiShot=600;break;case"life":lives=Math.min(lives+1,5),updateUI()}}),0===asteroids.length&&(level++,updateUI(),spawnAsteroids(3+level),saucerSpawnTimer=0),screenShake>0&&(screenShake*=.9)}function draw(){ctx.save(),screenShake>.5&&ctx.translate((Math.random()-.5)*screenShake,(Math.random()-.5)*screenShake),ctx.fillStyle="#000",ctx.fillRect(0,0,canvas.width,canvas.height),stars.forEach(s=>{ctx.fillStyle=`rgba(255, 255, 255, ${s.brightness})`,ctx.beginPath(),ctx.arc(s.x,s.y,s.size,0,2*Math.PI),ctx.fill()}),particles.forEach(p=>{const alpha=p.life/p.maxLife;ctx.fillStyle=p.color,ctx.globalAlpha=alpha,ctx.beginPath(),ctx.arc(p.x,p.y,p.size,0,2*Math.PI),ctx.fill(),ctx.globalAlpha=1}),powerUps.forEach(p=>{const pulse=5*Math.sin(p.pulse);ctx.strokeStyle="shield"===p.type?"#00ffff":"rapid"===p.type?"#ff0000":"multi"===p.type?"#ffff00":"#00ff00",ctx.lineWidth=2,ctx.shadowColor=ctx.strokeStyle,ctx.shadowBlur=15,ctx.beginPath(),ctx.arc(p.x,p.y,15+pulse,0,2*Math.PI),ctx.stroke(),ctx.fillStyle=ctx.strokeStyle,ctx.font="12px Arial",ctx.textAlign="center",ctx.textBaseline="middle";const icon="shield"===p.type?"S":"rapid"===p.type?"R":"multi"===p.type?"M":"+";ctx.fillText(icon,p.x,p.y),ctx.shadowBlur=0}),asteroids.forEach(a=>{ctx.save(),ctx.translate(a.x,a.y),ctx.rotate(a.rotation),ctx.strokeStyle=a.color,ctx.lineWidth=2,ctx.shadowColor=a.color,ctx.shadowBlur=20,ctx.beginPath();for(let i=0;i<a.points;i++){const angle=i/a.points*Math.PI*2,r=a.radii[i],x=Math.cos(angle)*r,y=Math.sin(angle)*r;0===i?ctx.moveTo(x,y):ctx.lineTo(x,y)}ctx.closePath(),ctx.stroke(),ctx.restore()}),saucers.forEach(s=>{ctx.save(),ctx.translate(s.x,s.y),ctx.strokeStyle="#ff6600",ctx.lineWidth=2,ctx.shadowColor="#ff6600",ctx.shadowBlur=20;const r=s.radius;ctx.beginPath(),ctx.ellipse(0,.2*-r,.4*r,.3*r,0,Math.PI,0),ctx.stroke(),ctx.beginPath(),ctx.ellipse(0,0,r,.35*r,0,0,2*Math.PI),ctx.stroke(),ctx.beginPath(),ctx.ellipse(0,.15*r,.5*r,.2*r,0,0,Math.PI),ctx.stroke(),ctx.fillStyle="#ff6600";for(let i=0;i<3;i++){const lx=(i-1)*r*.5;ctx.beginPath(),ctx.arc(lx,0,3,0,2*Math.PI),ctx.fill()}ctx.restore()}),saucerBullets.forEach(b=>{ctx.fillStyle="#ff6600",ctx.shadowColor="#ff6600",ctx.shadowBlur=15,ctx.beginPath(),ctx.arc(b.x,b.y,4,0,2*Math.PI),ctx.fill()}),bullets.forEach(b=>{ctx.fillStyle="#00ffff",ctx.shadowColor="#00ffff",ctx.shadowBlur=15,ctx.beginPath(),ctx.arc(b.x,b.y,3,0,2*Math.PI),ctx.fill(),ctx.strokeStyle="rgba(0, 255, 255, 0.5)",ctx.lineWidth=2,ctx.beginPath(),ctx.moveTo(b.x,b.y),ctx.lineTo(b.x-2*b.vx,b.y-2*b.vy),ctx.stroke()}),gameRunning&&(ship.invincible<=0||Math.floor(ship.invincible/5)%2==0)&&(ctx.save(),ctx.translate(ship.x,ship.y),ctx.rotate(ship.angle),ship.shield>0&&(ctx.strokeStyle="rgba(0, 255, 255, 0.5)",ctx.lineWidth=2,ctx.shadowColor="#00ffff",ctx.shadowBlur=20,ctx.beginPath(),ctx.arc(0,0,25,0,2*Math.PI),ctx.stroke()),ctx.strokeStyle="#00ffff",ctx.lineWidth=2,ctx.shadowColor="#00ffff",ctx.shadowBlur=15,ctx.beginPath(),ctx.moveTo(20,0),ctx.lineTo(-15,-12),ctx.lineTo(-8,0),ctx.lineTo(-15,12),ctx.closePath(),ctx.stroke(),ship.thrust>.1&&(ctx.strokeStyle="#ff6600",ctx.shadowColor="#ff6600",ctx.beginPath(),ctx.moveTo(-8,-5),ctx.lineTo(-20-10*Math.random()*ship.thrust,0),ctx.lineTo(-8,5),ctx.stroke()),ctx.restore()),ctx.shadowBlur=0,ctx.restore()}function gameOver(){gameRunning=!1,document.getElementById("finalScore").textContent=score,document.getElementById("gameOverScreen").style.display="block"}function gameLoop(){update(),draw(),requestAnimationFrame(gameLoop)}document.addEventListener("keydown",e=>{keys[e.code]=!0,"KeyP"===e.code&&gameRunning&&(gamePaused=!gamePaused),["Space","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.code)&&e.preventDefault()}),document.addEventListener("keyup",e=>{keys[e.code]=!1}),document.getElementById("startBtn").addEventListener("click",()=>{document.getElementById("startScreen").style.display="none",initGame(),gameRunning=!0}),document.getElementById("restartBtn").addEventListener("click",()=>{document.getElementById("gameOverScreen").style.display="none",initGame(),gameRunning=!0}),initStars(),gameLoop();</script>
73
-
74
-
75
- <script id="page-helpers" src="/api/page-helpers.js?v=2" data-locked="true"></script>
76
- <script id="page-script" src="/api/page-script.js?v=2" data-locked="true"></script>
77
- </body></html>
@@ -1 +0,0 @@
1
- { "title": "Sidebar Page", "categories": ["Starters"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "unlocked" }
@@ -1 +0,0 @@
1
- { "title": "Solar Tutorial", "categories": ["Tutorials"], "pinned": false, "showInAll": true, "pageVersion": 2, "mode": "unlocked" }
@@ -1 +0,0 @@
1
- { "title": "Two-Panel Page", "categories": ["Starters"], "pinned": false, "showInAll": false, "pageVersion": 2, "mode": "unlocked" }
@@ -1,3 +0,0 @@
1
- import { AgentProvider } from '../types';
2
- export declare const a2aProvider: AgentProvider;
3
- //# sourceMappingURL=a2aProvider.d.ts.map
@@ -1,30 +0,0 @@
1
- export interface A2ADiscoveryResult {
2
- name: string;
3
- description: string;
4
- url: string;
5
- iconUrl?: string;
6
- capabilities?: {
7
- streaming?: boolean;
8
- pushNotifications?: boolean;
9
- };
10
- skills?: {
11
- id: string;
12
- name: string;
13
- description: string;
14
- tags: string[];
15
- }[];
16
- }
17
- /**
18
- * Discover an A2A agent by fetching its agent card from /.well-known/agent-card.json.
19
- */
20
- export declare function discoverA2AAgent(url: string): Promise<A2ADiscoveryResult>;
21
- export interface OpenClawDiscoveryResult {
22
- name: string;
23
- verified: boolean;
24
- }
25
- /**
26
- * Verify an OpenClaw gateway is reachable and authenticated by probing
27
- * the HTTP API (GET /v1/models with Bearer token).
28
- */
29
- export declare function discoverOpenClawAgent(url: string, token: string): Promise<OpenClawDiscoveryResult>;
30
- //# sourceMappingURL=discovery.d.ts.map
@@ -1,3 +0,0 @@
1
- import { AgentProvider } from '../types';
2
- export declare const openclawProvider: AgentProvider;
3
- //# sourceMappingURL=openclawProvider.d.ts.map
@@ -1,64 +0,0 @@
1
- export interface AgentConfig {
2
- id: string;
3
- url: string;
4
- name: string;
5
- description: string;
6
- iconUrl?: string;
7
- enabled: boolean;
8
- provider: 'a2a' | 'openclaw';
9
- /** Auth token (openclaw only) */
10
- token?: string;
11
- /** Default session key for chat (openclaw only, e.g. "agent:main:main") */
12
- sessionKey?: string;
13
- capabilities?: {
14
- streaming?: boolean;
15
- pushNotifications?: boolean;
16
- };
17
- skills?: {
18
- id: string;
19
- name: string;
20
- description: string;
21
- tags: string[];
22
- }[];
23
- /** SSH tunnel config (openclaw only) — spawns an SSH tunnel before WebSocket connection */
24
- sshTunnel?: {
25
- enabled: boolean;
26
- /** Full SSH command, e.g. "ssh -p 22 -N -L 18789:127.0.0.1:43901 root@1.2.3.4" */
27
- command: string;
28
- /** Password to pipe when prompted */
29
- password: string;
30
- };
31
- }
32
- export interface Attachment {
33
- fileName: string;
34
- mimeType: string;
35
- /** base64 for binary, plain string for text */
36
- content: string;
37
- }
38
- export interface ChatMessage {
39
- role: 'user' | 'assistant';
40
- content: string;
41
- timestamp?: number;
42
- /** Raw provider-specific payload for debugging */
43
- raw?: unknown;
44
- }
45
- export interface AgentResponse {
46
- kind: 'message' | 'task';
47
- text?: string;
48
- raw: unknown;
49
- taskId?: string;
50
- status?: string;
51
- }
52
- export interface AgentEvent {
53
- kind: 'text' | 'status' | 'artifact' | 'done' | 'error';
54
- data: unknown;
55
- }
56
- export interface AgentProvider {
57
- send(agent: AgentConfig, message: string, attachments?: Attachment[]): Promise<AgentResponse>;
58
- sendStream(agent: AgentConfig, message: string, attachments?: Attachment[]): AsyncIterable<AgentEvent>;
59
- supportsStreaming(agent: AgentConfig): boolean;
60
- getHistory?(agent: AgentConfig): Promise<ChatMessage[]>;
61
- abortChat?(agent: AgentConfig): Promise<void>;
62
- clearSession?(agent: AgentConfig): Promise<void>;
63
- }
64
- //# sourceMappingURL=types.d.ts.map
@@ -1,3 +0,0 @@
1
- export { CONNECTOR_REGISTRY } from './registry';
2
- export type { AuthStrategy, ConnectorField, ConnectorOnboarding, ConnectorJson, ConnectorDefinition, ConnectorConfig, ConnectorOAuthConfig, ConnectorsConfig, ConnectorSummary, ConnectorDetail, ConnectorCallRequest } from './types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,84 +0,0 @@
1
- export type AuthStrategy = 'header' | 'bearer' | 'query' | 'oauth2';
2
- export interface ConnectorField {
3
- name: string;
4
- label: string;
5
- type: 'password' | 'text';
6
- }
7
- export interface ConnectorOnboarding {
8
- url: string;
9
- steps: string[];
10
- }
11
- export interface ConnectorDefinition {
12
- id: string;
13
- name: string;
14
- category: string;
15
- description: string;
16
- baseUrl: string;
17
- authStrategy: AuthStrategy;
18
- authKey: string;
19
- fields: ConnectorField[];
20
- /** Usage hints shown to the LLM — recommended endpoints, default settings, gotchas. */
21
- hints?: string;
22
- /** Onboarding instructions — signup URL and steps to get an API key. */
23
- onboarding?: ConnectorOnboarding;
24
- /** OAuth2: Authorization endpoint URL. */
25
- authorizationUrl?: string;
26
- /** OAuth2: Token exchange endpoint URL. */
27
- tokenUrl?: string;
28
- /** OAuth2: Requested scopes. */
29
- scopes?: string[];
30
- }
31
- export interface ConnectorJson {
32
- id: string;
33
- name: string;
34
- category: string;
35
- description: string;
36
- baseUrl: string;
37
- authStrategy: AuthStrategy;
38
- authKey: string;
39
- fields: ConnectorField[];
40
- hints?: string[];
41
- onboarding?: ConnectorOnboarding;
42
- authorizationUrl?: string;
43
- tokenUrl?: string;
44
- scopes?: string[];
45
- }
46
- export interface ConnectorConfig {
47
- apiKey: string;
48
- enabled: boolean;
49
- }
50
- export interface ConnectorOAuthConfig extends ConnectorConfig {
51
- accessToken?: string;
52
- refreshToken?: string;
53
- expiresAt?: number;
54
- userId?: string;
55
- accountName?: string;
56
- clientId?: string;
57
- clientSecret?: string;
58
- }
59
- export type ConnectorsConfig = Record<string, ConnectorConfig | ConnectorOAuthConfig>;
60
- export interface ConnectorSummary {
61
- id: string;
62
- name: string;
63
- category: string;
64
- description: string;
65
- configured: boolean;
66
- enabled: boolean;
67
- }
68
- export interface ConnectorDetail extends ConnectorDefinition {
69
- configured: boolean;
70
- enabled: boolean;
71
- hasKey: boolean;
72
- connected?: boolean;
73
- accountName?: string;
74
- userId?: string;
75
- }
76
- export interface ConnectorCallRequest {
77
- connector: string;
78
- method: string;
79
- path: string;
80
- headers?: Record<string, string>;
81
- body?: unknown;
82
- query?: Record<string, string>;
83
- }
84
- //# sourceMappingURL=types.d.ts.map
package/dist/index.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export * from './service';
2
- export * from './files';
3
- export * from './init';
4
- export * from './pages';
5
- export * from './scripts';
6
- export * from './settings';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1,12 +0,0 @@
1
- import { completePrompt } from './models';
2
- /**
3
- * Migrate a page's HTML from one version to another by applying
4
- * sequential migration steps.
5
- */
6
- export declare function migratePage(html: string, fromVersion: number, toVersion: number, completePrompt: completePrompt): Promise<string>;
7
- /**
8
- * Cheerio-based post-processing to verify the LLM output meets v2 requirements.
9
- * Uses the original HTML as a fallback source for critical elements.
10
- */
11
- export declare function postProcessV2(html: string, originalHtml?: string): string;
12
- //# sourceMappingURL=migrations.d.ts.map
@@ -1,12 +0,0 @@
1
- import { AgentCompletion, AgentArgs } from './types';
2
- export interface ExplainedAnswer {
3
- explanation: string;
4
- answer: string;
5
- }
6
- export interface ChainOfThoughtArgs extends AgentArgs {
7
- question: string;
8
- temperature?: number;
9
- instructions?: string;
10
- }
11
- export declare function chainOfThought(args: ChainOfThoughtArgs): Promise<AgentCompletion<ExplainedAnswer>>;
12
- //# sourceMappingURL=chainOfThought.d.ts.map
@@ -1,30 +0,0 @@
1
- import { completePrompt, PromptCompletionArgs } from './types';
2
- export interface FireworksAIArgs {
3
- apiKey: string;
4
- model: string;
5
- temperature?: number;
6
- }
7
- /**
8
- * Extract JSON from a string that may be wrapped in markdown fences or prose.
9
- * Returns the original string if no JSON object/array is found.
10
- */
11
- export declare function extractJSON(text: string): string;
12
- /**
13
- * Resolve a short Fireworks model name to the full API path.
14
- * Returns the input unchanged if not a known short name.
15
- */
16
- export declare function resolveFireworksModel(model: string): string;
17
- /**
18
- * Build the messages array, temperature, and JSON flag for a FireworksAI request.
19
- * Pure function — no SDK dependency.
20
- */
21
- export declare function buildFireworksRequest(args: PromptCompletionArgs, defaultTemp: number): {
22
- messages: {
23
- role: string;
24
- content: string;
25
- }[];
26
- temperature: number;
27
- useJson: boolean;
28
- };
29
- export declare function fireworksai(args: FireworksAIArgs): completePrompt;
30
- //# sourceMappingURL=fireworksai.d.ts.map
@@ -1,3 +0,0 @@
1
- import { completePrompt } from './types';
2
- export declare function logCompletePrompt<TValue = string>(inner: completePrompt<TValue>, logDetails?: boolean): completePrompt<TValue>;
3
- //# sourceMappingURL=logCompletePrompt.d.ts.map
@@ -1,8 +0,0 @@
1
- import { Provider, ProviderName } from './types';
2
- export declare const AnthropicProvider: Provider;
3
- export declare const OpenAIProvider: Provider;
4
- export declare const FireworksAIProvider: Provider;
5
- export declare const PROVIDERS: Provider[];
6
- export declare function getProvider(name: ProviderName): Provider;
7
- export declare function detectProvider(model: string): Provider | undefined;
8
- //# sourceMappingURL=providers.d.ts.map
@@ -1,6 +0,0 @@
1
- /**
2
- * Convert any value to a string suitable for template substitution.
3
- * Replaces double quotes and line feeds with spaces.
4
- */
5
- export declare function variableToString(variable: any): string;
6
- //# sourceMappingURL=utils.d.ts.map
package/dist/scripts.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import { AgentCompletion } from './models';
2
- export interface ExecuteScriptArgs {
3
- pagesFolder: string;
4
- scriptId: string;
5
- variables: Record<string, string>;
6
- }
7
- export interface ExecuteScriptResponse {
8
- output: string;
9
- errors: string[];
10
- }
11
- export declare function listScripts(pagesFolder: string): Promise<string>;
12
- export declare function clearCachedScripts(): void;
13
- export declare function executeScript(args: ExecuteScriptArgs): Promise<AgentCompletion<ExecuteScriptResponse>>;
14
- export declare function composeArguments(template: string, variables: Record<string, any>): string;
15
- //# sourceMappingURL=scripts.d.ts.map
@@ -1,5 +0,0 @@
1
- import { completePrompt } from '../models';
2
- import { PROVIDERS } from '../models';
3
- export declare function createCompletePrompt(pagesFolder: string, use: 'builder' | 'chat', modelOverride?: string): Promise<completePrompt>;
4
- export { PROVIDERS };
5
- //# sourceMappingURL=createCompletePrompt.d.ts.map
@@ -1,11 +0,0 @@
1
- export declare const reset = "\u001B[0m";
2
- export declare const cyan: (s: string) => string;
3
- export declare const yellow: (s: string) => string;
4
- export declare const green: (s: string) => string;
5
- export declare const red: (s: string) => string;
6
- export declare const dim: (s: string) => string;
7
- /** Format milliseconds as `X.XXXs` */
8
- export declare function formatTime(ms: number): string;
9
- /** Rough token estimate based on chars / 4 heuristic */
10
- export declare function estimateTokens(chars: number): number;
11
- //# sourceMappingURL=debugLog.d.ts.map
@@ -1,32 +0,0 @@
1
- import { AgentCompletion } from "../models";
2
- /**
3
- * Arguments to configure an OpenAI chat model.
4
- */
5
- export interface OpenaiGenerateImageArgs {
6
- /**
7
- * OpenAI API key to use for completions.
8
- */
9
- apiKey: string;
10
- /**
11
- * Prompt to use for generating image.
12
- */
13
- prompt: string;
14
- /**
15
- * Requested size of the generated image.
16
- */
17
- shape: 'square' | 'landscape' | 'portrait';
18
- /**
19
- * Requested quality of the generated image.
20
- */
21
- quality: 'standard' | 'hd';
22
- /**
23
- * Style of the generated image.
24
- */
25
- style: 'vivid' | 'natural';
26
- }
27
- export interface GeneratedImage {
28
- url: string;
29
- }
30
- export declare function generateDefaultImage(): Promise<AgentCompletion<GeneratedImage>>;
31
- export declare function generateImage(args: OpenaiGenerateImageArgs): Promise<AgentCompletion<GeneratedImage>>;
32
- //# sourceMappingURL=generateImage.d.ts.map
@@ -1,8 +0,0 @@
1
- export * from './createCompletePrompt';
2
- export * from './requiresSettings';
3
- export * from './generateImage';
4
- export * from './server';
5
- export * from './transformPage';
6
- export * from './useApiRoutes';
7
- export * from './usePageRoutes';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1,7 +0,0 @@
1
- import { ProviderName } from '../models';
2
- /**
3
- * Returns provider-specific prompt instructions for how the model should
4
- * format its change-list response.
5
- */
6
- export declare function getModelInstructions(provider: ProviderName): string;
7
- //# sourceMappingURL=modelInstructions.d.ts.map
@@ -1,3 +0,0 @@
1
- import { SettingsV2 } from "../settings";
2
- export declare function requiresSettings(res: any, folder: string, cb: (settings: SettingsV2) => Promise<void>): Promise<void>;
3
- //# sourceMappingURL=requiresSettings.d.ts.map
@@ -1,4 +0,0 @@
1
- import { Application } from 'express';
2
- import { SynthOSConfig } from '../init';
3
- export declare function server(config: SynthOSConfig): Application;
4
- //# sourceMappingURL=server.d.ts.map
@@ -1,4 +0,0 @@
1
- import { Application } from 'express';
2
- import { SynthOSConfig } from "../init";
3
- export declare function useApiRoutes(config: SynthOSConfig, app: Application): void;
4
- //# sourceMappingURL=useApiRoutes.d.ts.map
@@ -1,4 +0,0 @@
1
- import { Application } from 'express';
2
- import { SynthOSConfig } from '../init';
3
- export declare function useConnectorRoutes(config: SynthOSConfig, app: Application): void;
4
- //# sourceMappingURL=useConnectorRoutes.d.ts.map