synthos 0.10.1 → 0.11.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 (311) hide show
  1. package/README.md +5 -5
  2. package/default-pages/elevenlabs_effects_studio/chat-history.json +1 -0
  3. package/default-pages/elevenlabs_effects_studio/page.html +1345 -1363
  4. package/default-pages/elevenlabs_effects_studio/page.json +13 -11
  5. package/default-pages/elevenlabs_voice_studio/chat-history.json +1 -0
  6. package/default-pages/elevenlabs_voice_studio/page.html +782 -801
  7. package/default-pages/elevenlabs_voice_studio/page.json +13 -11
  8. package/default-pages/json_tools/chat-history.json +1 -0
  9. package/default-pages/json_tools/page.html +70 -90
  10. package/default-pages/json_tools/page.json +12 -10
  11. package/default-pages/my_notes/chat-history.json +1 -0
  12. package/default-pages/my_notes/page.html +115 -131
  13. package/default-pages/my_notes/page.json +14 -12
  14. package/default-pages/neon_asteroids/chat-history.json +1 -0
  15. package/default-pages/neon_asteroids/page.html +1777 -1803
  16. package/default-pages/neon_asteroids/page.json +14 -12
  17. package/default-pages/oregon_trail/chat-history.json +1 -0
  18. package/default-pages/oregon_trail/page.html +290 -307
  19. package/default-pages/oregon_trail/page.json +14 -12
  20. package/default-pages/solar_explorer/chat-history.json +1 -0
  21. package/default-pages/solar_explorer/page.html +1929 -1951
  22. package/default-pages/solar_explorer/page.json +14 -12
  23. package/default-pages/solar_tutorial/chat-history.json +1 -0
  24. package/default-pages/solar_tutorial/page.html +464 -478
  25. package/default-pages/solar_tutorial/page.json +12 -10
  26. package/default-pages/us_map/chat-history.json +1 -0
  27. package/default-pages/us_map/page.html +170 -193
  28. package/default-pages/us_map/page.json +14 -12
  29. package/default-pages/us_map/page.light.png +0 -0
  30. package/default-pages/us_map_1850/chat-history.json +1 -0
  31. package/default-pages/us_map_1850/page.html +302 -326
  32. package/default-pages/us_map_1850/page.json +14 -12
  33. package/default-pages/western_cities_1850/chat-history.json +1 -0
  34. package/default-pages/western_cities_1850/page.html +503 -527
  35. package/default-pages/western_cities_1850/page.json +14 -12
  36. package/default-themes/aurora-dawn.v3.css +15 -14
  37. package/default-themes/aurora-dusk.v3.css +26 -26
  38. package/default-themes/cosmos-dawn.v3.css +15 -14
  39. package/default-themes/cosmos-dusk.v3.css +26 -26
  40. package/default-themes/elemental-dawn.v3.css +200 -0
  41. package/default-themes/nebula-dawn.v3.css +15 -14
  42. package/default-themes/nebula-dusk.v3.css +24 -24
  43. package/default-themes/solar-flare-dawn.v3.css +15 -14
  44. package/default-themes/solar-flare-dusk.v3.css +26 -26
  45. package/dist/builders/anthropic.d.ts +26 -2
  46. package/dist/builders/anthropic.d.ts.map +1 -1
  47. package/dist/builders/anthropic.js +132 -31
  48. package/dist/builders/anthropic.js.map +1 -1
  49. package/dist/builders/claudecode.d.ts +13 -0
  50. package/dist/builders/claudecode.d.ts.map +1 -0
  51. package/dist/builders/claudecode.js +253 -0
  52. package/dist/builders/claudecode.js.map +1 -0
  53. package/dist/builders/index.d.ts +2 -1
  54. package/dist/builders/index.d.ts.map +1 -1
  55. package/dist/builders/index.js +8 -1
  56. package/dist/builders/index.js.map +1 -1
  57. package/dist/builders/openai.js +2 -1
  58. package/dist/builders/openai.js.map +1 -1
  59. package/dist/builders/types.d.ts +31 -7
  60. package/dist/builders/types.d.ts.map +1 -1
  61. package/dist/builders/types.js +60 -28
  62. package/dist/builders/types.js.map +1 -1
  63. package/dist/connectors/types.d.ts +8 -0
  64. package/dist/connectors/types.d.ts.map +1 -1
  65. package/dist/init.d.ts.map +1 -1
  66. package/dist/init.js +13 -6
  67. package/dist/init.js.map +1 -1
  68. package/dist/migrations.d.ts.map +1 -1
  69. package/dist/migrations.js +161 -14
  70. package/dist/migrations.js.map +1 -1
  71. package/dist/models/anthropic.d.ts +1 -0
  72. package/dist/models/anthropic.d.ts.map +1 -1
  73. package/dist/models/anthropic.js +129 -29
  74. package/dist/models/anthropic.js.map +1 -1
  75. package/dist/models/chainOfThought.d.ts.map +1 -1
  76. package/dist/models/chainOfThought.js +32 -19
  77. package/dist/models/chainOfThought.js.map +1 -1
  78. package/dist/models/index.d.ts +2 -2
  79. package/dist/models/index.d.ts.map +1 -1
  80. package/dist/models/index.js +2 -1
  81. package/dist/models/index.js.map +1 -1
  82. package/dist/models/providers.d.ts +1 -0
  83. package/dist/models/providers.d.ts.map +1 -1
  84. package/dist/models/providers.js +12 -4
  85. package/dist/models/providers.js.map +1 -1
  86. package/dist/models/types.d.ts +15 -1
  87. package/dist/models/types.d.ts.map +1 -1
  88. package/dist/models/types.js.map +1 -1
  89. package/dist/pages.d.ts +57 -8
  90. package/dist/pages.d.ts.map +1 -1
  91. package/dist/pages.js +258 -45
  92. package/dist/pages.js.map +1 -1
  93. package/dist/service/createCompletePrompt.d.ts.map +1 -1
  94. package/dist/service/createCompletePrompt.js +5 -0
  95. package/dist/service/createCompletePrompt.js.map +1 -1
  96. package/dist/service/mediaCache.d.ts +36 -0
  97. package/dist/service/mediaCache.d.ts.map +1 -0
  98. package/dist/service/mediaCache.js +182 -0
  99. package/dist/service/mediaCache.js.map +1 -0
  100. package/dist/service/pageValidator.d.ts +25 -0
  101. package/dist/service/pageValidator.d.ts.map +1 -0
  102. package/dist/service/pageValidator.js +315 -0
  103. package/dist/service/pageValidator.js.map +1 -0
  104. package/dist/service/server.d.ts.map +1 -1
  105. package/dist/service/server.js +4 -0
  106. package/dist/service/server.js.map +1 -1
  107. package/dist/service/sharedTableSchema.d.ts +73 -0
  108. package/dist/service/sharedTableSchema.d.ts.map +1 -0
  109. package/dist/service/sharedTableSchema.js +206 -0
  110. package/dist/service/sharedTableSchema.js.map +1 -0
  111. package/dist/service/transformPage.d.ts +49 -11
  112. package/dist/service/transformPage.d.ts.map +1 -1
  113. package/dist/service/transformPage.js +354 -241
  114. package/dist/service/transformPage.js.map +1 -1
  115. package/dist/service/useApiRoutes.d.ts.map +1 -1
  116. package/dist/service/useApiRoutes.js +288 -34
  117. package/dist/service/useApiRoutes.js.map +1 -1
  118. package/dist/service/useConnectorRoutes.d.ts.map +1 -1
  119. package/dist/service/useConnectorRoutes.js +170 -32
  120. package/dist/service/useConnectorRoutes.js.map +1 -1
  121. package/dist/service/useDataRoutes.d.ts.map +1 -1
  122. package/dist/service/useDataRoutes.js +59 -2
  123. package/dist/service/useDataRoutes.js.map +1 -1
  124. package/dist/service/useExtractRoutes.d.ts +4 -0
  125. package/dist/service/useExtractRoutes.d.ts.map +1 -0
  126. package/dist/service/useExtractRoutes.js +304 -0
  127. package/dist/service/useExtractRoutes.js.map +1 -0
  128. package/dist/service/usePageRoutes.d.ts +17 -0
  129. package/dist/service/usePageRoutes.d.ts.map +1 -1
  130. package/dist/service/usePageRoutes.js +1385 -483
  131. package/dist/service/usePageRoutes.js.map +1 -1
  132. package/dist/service/useSharedDataRoutes.d.ts.map +1 -1
  133. package/dist/service/useSharedDataRoutes.js +54 -2
  134. package/dist/service/useSharedDataRoutes.js.map +1 -1
  135. package/dist/settings.d.ts +27 -0
  136. package/dist/settings.d.ts.map +1 -1
  137. package/dist/settings.js +40 -1
  138. package/dist/settings.js.map +1 -1
  139. package/dist/themes.d.ts +0 -5
  140. package/dist/themes.d.ts.map +1 -1
  141. package/dist/themes.js +3 -95
  142. package/dist/themes.js.map +1 -1
  143. package/migration-rules/v2-to-v3.md +277 -119
  144. package/package.json +5 -1
  145. package/{default-pages/application → required-pages/_shell}/page.html +56 -42
  146. package/required-pages/_shell/page.json +14 -0
  147. package/required-pages/_starters/page.html +534 -0
  148. package/required-pages/_starters/page.json +12 -0
  149. package/required-pages/builder/page.html +353 -43
  150. package/required-pages/builder/page.json +12 -10
  151. package/required-pages/pages/page.html +697 -924
  152. package/required-pages/pages/page.json +12 -10
  153. package/required-pages/settings/page.html +1879 -1753
  154. package/required-pages/settings/page.json +12 -10
  155. package/required-pages/synthos_apis/page.html +834 -845
  156. package/required-pages/synthos_apis/page.json +12 -10
  157. package/required-pages/synthos_scripts/page.html +74 -88
  158. package/required-pages/synthos_scripts/page.json +12 -10
  159. package/scripts/append-instructions.py +90 -0
  160. package/scripts/audit-instructions.py +76 -0
  161. package/scripts/cleanup-shell-markup.mjs +112 -0
  162. package/service-connectors/buffer/connector.json +46 -0
  163. package/service-connectors/canva/connector.json +67 -0
  164. package/service-connectors/elevenlabs/connector.json +1 -1
  165. package/src/builders/anthropic.ts +150 -25
  166. package/src/builders/claudecode.ts +310 -0
  167. package/src/builders/index.ts +7 -1
  168. package/src/builders/openai.ts +2 -1
  169. package/src/builders/types.ts +93 -32
  170. package/src/connectors/types.ts +8 -0
  171. package/src/init.ts +13 -7
  172. package/src/migrations.ts +187 -16
  173. package/src/models/anthropic.ts +140 -30
  174. package/src/models/chainOfThought.ts +33 -18
  175. package/src/models/index.ts +2 -2
  176. package/src/models/providers.ts +10 -1
  177. package/src/models/types.ts +21 -1
  178. package/src/pages.ts +271 -35
  179. package/src/service/createCompletePrompt.ts +6 -0
  180. package/src/service/mediaCache.ts +206 -0
  181. package/src/service/pageValidator.ts +337 -0
  182. package/src/service/server.ts +4 -0
  183. package/src/service/sharedTableSchema.ts +236 -0
  184. package/src/service/transformPage.ts +370 -260
  185. package/src/service/useApiRoutes.ts +282 -32
  186. package/src/service/useConnectorRoutes.ts +189 -34
  187. package/src/service/useDataRoutes.ts +198 -116
  188. package/src/service/useExtractRoutes.ts +331 -0
  189. package/src/service/usePageRoutes.ts +1411 -394
  190. package/src/service/useSharedDataRoutes.ts +184 -109
  191. package/src/settings.ts +65 -0
  192. package/src/themes.ts +78 -180
  193. package/starters/blank_starter/chat-history.json +1 -0
  194. package/starters/blank_starter/page.dark.png +0 -0
  195. package/starters/blank_starter/page.html +47 -0
  196. package/starters/blank_starter/page.json +13 -0
  197. package/starters/blank_starter/page.light.png +0 -0
  198. package/starters/calculator_starter/chat-history.json +1 -0
  199. package/starters/calculator_starter/page.dark.png +0 -0
  200. package/starters/calculator_starter/page.html +232 -0
  201. package/starters/calculator_starter/page.json +13 -0
  202. package/starters/calculator_starter/page.light.png +0 -0
  203. package/starters/calendar_starter/chat-history.json +1 -0
  204. package/starters/calendar_starter/page.dark.png +0 -0
  205. package/starters/calendar_starter/page.html +495 -0
  206. package/starters/calendar_starter/page.json +13 -0
  207. package/starters/calendar_starter/page.light.png +0 -0
  208. package/starters/chat_starter/chat-history.json +1 -0
  209. package/starters/chat_starter/page.dark.png +0 -0
  210. package/starters/chat_starter/page.html +351 -0
  211. package/starters/chat_starter/page.json +13 -0
  212. package/starters/chat_starter/page.light.png +0 -0
  213. package/starters/checklist_starter/chat-history.json +1 -0
  214. package/starters/checklist_starter/page.dark.png +0 -0
  215. package/starters/checklist_starter/page.html +437 -0
  216. package/starters/checklist_starter/page.json +13 -0
  217. package/starters/checklist_starter/page.light.png +0 -0
  218. package/starters/dashboard_starter/chat-history.json +1 -0
  219. package/starters/dashboard_starter/page.dark.png +0 -0
  220. package/starters/dashboard_starter/page.html +195 -0
  221. package/starters/dashboard_starter/page.json +13 -0
  222. package/starters/dashboard_starter/page.light.png +0 -0
  223. package/starters/form_starter/chat-history.json +1 -0
  224. package/starters/form_starter/page.dark.png +0 -0
  225. package/starters/form_starter/page.html +313 -0
  226. package/starters/form_starter/page.json +13 -0
  227. package/starters/form_starter/page.light.png +0 -0
  228. package/starters/gallery_starter/chat-history.json +1 -0
  229. package/starters/gallery_starter/page.dark.png +0 -0
  230. package/starters/gallery_starter/page.html +418 -0
  231. package/starters/gallery_starter/page.json +13 -0
  232. package/starters/gallery_starter/page.light.png +0 -0
  233. package/starters/generator_starter/chat-history.json +1 -0
  234. package/starters/generator_starter/page.dark.png +0 -0
  235. package/starters/generator_starter/page.html +261 -0
  236. package/starters/generator_starter/page.json +13 -0
  237. package/starters/generator_starter/page.light.png +0 -0
  238. package/starters/index.html +538 -0
  239. package/starters/kanban_starter/chat-history.json +1 -0
  240. package/starters/kanban_starter/page.dark.png +0 -0
  241. package/starters/kanban_starter/page.html +432 -0
  242. package/starters/kanban_starter/page.json +13 -0
  243. package/starters/kanban_starter/page.light.png +0 -0
  244. package/starters/presentation_builder/chat-history.json +1 -0
  245. package/starters/presentation_builder/page.dark.png +0 -0
  246. package/starters/presentation_builder/page.html +970 -0
  247. package/starters/presentation_builder/page.json +15 -0
  248. package/starters/presentation_builder/page.light.png +0 -0
  249. package/starters/presentation_builder/presentation_voice/voice_config.json +9 -0
  250. package/starters/pulse_starter/chat-history.json +1 -0
  251. package/starters/pulse_starter/page.dark.png +0 -0
  252. package/starters/pulse_starter/page.html +698 -0
  253. package/starters/pulse_starter/page.json +13 -0
  254. package/starters/pulse_starter/page.light.png +0 -0
  255. package/starters/quiz_starter/chat-history.json +1 -0
  256. package/starters/quiz_starter/page.dark.png +0 -0
  257. package/starters/quiz_starter/page.html +292 -0
  258. package/starters/quiz_starter/page.json +13 -0
  259. package/starters/quiz_starter/page.light.png +0 -0
  260. package/starters/reference_starter/chat-history.json +1 -0
  261. package/starters/reference_starter/page.dark.png +0 -0
  262. package/starters/reference_starter/page.html +250 -0
  263. package/starters/reference_starter/page.json +13 -0
  264. package/starters/reference_starter/page.light.png +0 -0
  265. package/starters/retro_game_starter/chat-history.json +1 -0
  266. package/starters/retro_game_starter/page.dark.png +0 -0
  267. package/{default-pages → starters}/retro_game_starter/page.html +1281 -1308
  268. package/starters/retro_game_starter/page.json +15 -0
  269. package/starters/retro_game_starter/page.light.png +0 -0
  270. package/starters/roster_starter/chat-history.json +1 -0
  271. package/starters/roster_starter/page.dark.png +0 -0
  272. package/starters/roster_starter/page.html +600 -0
  273. package/starters/roster_starter/page.json +13 -0
  274. package/starters/roster_starter/page.light.png +0 -0
  275. package/starters/server.js +182 -0
  276. package/starters/start.cmd +1 -0
  277. package/starters/timeline_starter/chat-history.json +1 -0
  278. package/starters/timeline_starter/page.dark.png +0 -0
  279. package/starters/timeline_starter/page.html +446 -0
  280. package/starters/timeline_starter/page.json +13 -0
  281. package/starters/timeline_starter/page.light.png +0 -0
  282. package/starters/tutorial_starter/chat-history.json +1 -0
  283. package/starters/tutorial_starter/page.dark.png +0 -0
  284. package/starters/tutorial_starter/page.html +283 -0
  285. package/starters/tutorial_starter/page.json +13 -0
  286. package/starters/tutorial_starter/page.light.png +0 -0
  287. package/static-files/agent.v3.js +122 -0
  288. package/static-files/connector.v3.js +48 -0
  289. package/static-files/extract.v3.js +188 -0
  290. package/static-files/helpers.v3.js +50 -6
  291. package/static-files/page-bridge.js +114 -0
  292. package/static-files/page.v3.js +1292 -1290
  293. package/static-files/script.v3.js +32 -0
  294. package/static-files/server.v3.js +89 -0
  295. package/static-files/shell-bridge.v3.js +174 -0
  296. package/static-files/shell-modals.v3.js +521 -0
  297. package/static-files/{shell.css → shell.v3.css} +271 -22
  298. package/static-files/shell.v3.js +1865 -0
  299. package/static-files/storage.v3.js +176 -0
  300. package/tests/anthropic.spec.ts +42 -7
  301. package/tests/builders.spec.ts +70 -2
  302. package/tests/pageValidator.spec.ts +548 -0
  303. package/tests/profiles.spec.ts +122 -0
  304. package/tests/sharedTableSchema.spec.ts +242 -0
  305. package/tests/transformPage.spec.ts +62 -81
  306. package/default-pages/application/page.json +0 -10
  307. package/default-pages/retro_game_starter/page.json +0 -12
  308. package/default-pages/sidebar_page/page.html +0 -51
  309. package/default-pages/sidebar_page/page.json +0 -10
  310. package/default-pages/two-panel_page/page.html +0 -68
  311. package/default-pages/two-panel_page/page.json +0 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedTableSchema.d.ts","sourceRoot":"","sources":["../../src/service/sharedTableSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAID,yDAAyD;AACzD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,oEAAoE;AACpE,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAazH;AAED,iCAAiC;AACjC,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5H;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtG;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,SAAS,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,aAAa,EAAE,CAAA;CAAE,CAyCjE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7E;AA2BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAShH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACnB,aAAa,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAa,GAC1C,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA8B3E"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.listTables = exports.updateSchemaWrapper = exports.newSchemaWrapper = exports.isValidSchemaPayload = exports.mergeSchema = exports.deleteSchema = exports.saveSchema = exports.loadSchema = exports.schemaFile = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const SCHEMA_VERSION = 1;
9
+ /** Sidecar file path: `<parent>/<table>.schema.json`. */
10
+ function schemaFile(parent, table) {
11
+ return path_1.default.join(parent, `${table}.schema.json`);
12
+ }
13
+ exports.schemaFile = schemaFile;
14
+ /** Load the wrapper. Returns undefined if missing or unparsable. */
15
+ async function loadSchema(config, parent, table) {
16
+ const sp = config.storageProvider;
17
+ const file = schemaFile(parent, table);
18
+ if (!await sp.checkIfExists(file))
19
+ return undefined;
20
+ try {
21
+ const parsed = JSON.parse(await sp.loadFile(file));
22
+ if (parsed && typeof parsed === 'object' && parsed.schema && typeof parsed.schema === 'object') {
23
+ return parsed;
24
+ }
25
+ }
26
+ catch {
27
+ // fall through
28
+ }
29
+ return undefined;
30
+ }
31
+ exports.loadSchema = loadSchema;
32
+ /** Persist a wrapper to disk. */
33
+ async function saveSchema(config, parent, table, wrapper) {
34
+ const sp = config.storageProvider;
35
+ await sp.ensureFolderExists(parent);
36
+ await sp.saveFile(schemaFile(parent, table), JSON.stringify(wrapper, null, 4));
37
+ }
38
+ exports.saveSchema = saveSchema;
39
+ /** Delete the schema sidecar. No-op if it doesn't exist. */
40
+ async function deleteSchema(config, parent, table) {
41
+ const sp = config.storageProvider;
42
+ const file = schemaFile(parent, table);
43
+ if (await sp.checkIfExists(file)) {
44
+ await sp.deleteFile(file);
45
+ }
46
+ }
47
+ exports.deleteSchema = deleteSchema;
48
+ /**
49
+ * Apply `incoming` against `existing` per `mode`:
50
+ * - 'replace' → drop existing entirely; incoming wins.
51
+ * - 'additive' → union of `properties` (existing wins on overlap if types match;
52
+ * conflicting types reported via `conflicts`); union of `required`.
53
+ *
54
+ * Returns the merged schema and any conflicts. On conflict, callers should
55
+ * surface them as a 409 and NOT persist the result.
56
+ */
57
+ function mergeSchema(existing, incoming, mode) {
58
+ if (mode === 'replace' || !existing) {
59
+ return { merged: incoming, conflicts: [] };
60
+ }
61
+ const conflicts = [];
62
+ const existingProps = isPlainObject(existing.properties) ? existing.properties : {};
63
+ const incomingProps = isPlainObject(incoming.properties) ? incoming.properties : {};
64
+ const mergedProps = { ...existingProps };
65
+ for (const [field, def] of Object.entries(incomingProps)) {
66
+ if (!(field in existingProps)) {
67
+ mergedProps[field] = def;
68
+ continue;
69
+ }
70
+ const existingDef = existingProps[field];
71
+ if (typesAreCompatible(existingDef, def)) {
72
+ // Existing wins on overlap (preserves enum/required/format choices).
73
+ continue;
74
+ }
75
+ conflicts.push({ field, existing: existingDef, incoming: def });
76
+ }
77
+ if (conflicts.length > 0) {
78
+ return { merged: existing, conflicts };
79
+ }
80
+ const existingRequired = Array.isArray(existing.required) ? existing.required : [];
81
+ const incomingRequired = Array.isArray(incoming.required) ? incoming.required : [];
82
+ const mergedRequired = Array.from(new Set([...existingRequired, ...incomingRequired]
83
+ .filter(r => typeof r === 'string')));
84
+ const merged = {
85
+ ...existing,
86
+ properties: mergedProps,
87
+ };
88
+ if (mergedRequired.length > 0) {
89
+ merged.required = mergedRequired;
90
+ }
91
+ return { merged, conflicts: [] };
92
+ }
93
+ exports.mergeSchema = mergeSchema;
94
+ /**
95
+ * Validate the structural shape of an incoming JSON Schema. Strict-mode
96
+ * validation against the meta-schema is out of scope; we only check that the
97
+ * payload is a plain object so we don't persist garbage.
98
+ */
99
+ function isValidSchemaPayload(s) {
100
+ return isPlainObject(s);
101
+ }
102
+ exports.isValidSchemaPayload = isValidSchemaPayload;
103
+ function isPlainObject(v) {
104
+ return !!v && typeof v === 'object' && !Array.isArray(v);
105
+ }
106
+ /**
107
+ * Type-compatibility check used by additive merge. Two definitions are
108
+ * compatible when their `type` fields match (or both are absent). We
109
+ * intentionally tolerate other field differences (description, enum widening,
110
+ * format changes) — incoming-vs-existing field-level diffs aren't surfaced
111
+ * as conflicts in v1; only top-level type mismatches block the merge.
112
+ */
113
+ function typesAreCompatible(existing, incoming) {
114
+ if (!isPlainObject(existing) || !isPlainObject(incoming))
115
+ return existing === incoming;
116
+ const et = existing.type;
117
+ const it = incoming.type;
118
+ if (et === undefined && it === undefined)
119
+ return true;
120
+ if (et === undefined || it === undefined)
121
+ return true;
122
+ if (Array.isArray(et) || Array.isArray(it)) {
123
+ const ea = Array.isArray(et) ? et : [et];
124
+ const ia = Array.isArray(it) ? it : [it];
125
+ return ea.some(x => ia.includes(x));
126
+ }
127
+ return et === it;
128
+ }
129
+ /**
130
+ * Build a SchemaWrapper from a plain JSON Schema, using `now` for both
131
+ * timestamps when no existing wrapper is being preserved.
132
+ */
133
+ function newSchemaWrapper(schema, now, definedBy) {
134
+ const wrapper = {
135
+ version: SCHEMA_VERSION,
136
+ schema,
137
+ createdAt: now,
138
+ updatedAt: now,
139
+ };
140
+ if (definedBy)
141
+ wrapper.definedBy = definedBy;
142
+ return wrapper;
143
+ }
144
+ exports.newSchemaWrapper = newSchemaWrapper;
145
+ /**
146
+ * Update an existing wrapper, preserving createdAt and bumping updatedAt.
147
+ */
148
+ function updateSchemaWrapper(existing, schema, now, definedBy) {
149
+ const wrapper = {
150
+ version: existing.version || SCHEMA_VERSION,
151
+ schema,
152
+ createdAt: existing.createdAt,
153
+ updatedAt: now,
154
+ };
155
+ if (definedBy)
156
+ wrapper.definedBy = definedBy;
157
+ else if (existing.definedBy)
158
+ wrapper.definedBy = existing.definedBy;
159
+ return wrapper;
160
+ }
161
+ exports.updateSchemaWrapper = updateSchemaWrapper;
162
+ /**
163
+ * Enumerate tables in a namespace folder. A "table" is either:
164
+ * - a subfolder containing record files, OR
165
+ * - a `<name>.schema.json` sidecar (table may be schemaless until first save).
166
+ *
167
+ * Returns one entry per unique table name, with hasSchema + recordCount.
168
+ *
169
+ * `reserved` filters out names that occupy the namespace for non-table use
170
+ * (e.g. `files`, the per-page uploads folder).
171
+ */
172
+ async function listTables(config, parent, reserved = new Set()) {
173
+ const sp = config.storageProvider;
174
+ if (!await sp.checkIfExists(parent))
175
+ return [];
176
+ const folders = await sp.listFolders(parent);
177
+ const files = await sp.listFiles(parent);
178
+ const known = new Map();
179
+ for (const folder of folders) {
180
+ if (reserved.has(folder))
181
+ continue;
182
+ const recs = (await sp.listFiles(path_1.default.join(parent, folder)))
183
+ .filter(f => f.endsWith('.json')).length;
184
+ known.set(folder, { hasSchema: false, recordCount: recs });
185
+ }
186
+ for (const file of files) {
187
+ const m = file.match(/^(.+)\.schema\.json$/);
188
+ if (!m)
189
+ continue;
190
+ const name = m[1];
191
+ if (reserved.has(name))
192
+ continue;
193
+ const existing = known.get(name);
194
+ if (existing) {
195
+ existing.hasSchema = true;
196
+ }
197
+ else {
198
+ known.set(name, { hasSchema: true, recordCount: 0 });
199
+ }
200
+ }
201
+ return Array.from(known.entries())
202
+ .map(([name, info]) => ({ name, ...info }))
203
+ .sort((a, b) => a.name.localeCompare(b.name));
204
+ }
205
+ exports.listTables = listTables;
206
+ //# sourceMappingURL=sharedTableSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedTableSchema.js","sourceRoot":"","sources":["../../src/service/sharedTableSchema.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { AgentCompletion } from "../models";
2
+ import { ToolDefinition, ToolHandler } from "../models/types";
2
3
  import { Customizer } from "../customizer";
3
4
  import { Attachment, Builder, ContextSection } from "../builders/types";
5
+ import { PageValidationResult } from "./pageValidator";
4
6
  export interface TransformPageArgs {
5
7
  pageState: string;
6
8
  message: string;
@@ -13,6 +15,17 @@ export interface TransformPageArgs {
13
15
  productName?: string;
14
16
  /** Optional image attachments sent alongside the user message. */
15
17
  attachments?: Attachment[];
18
+ /** Chat history from the shell — used for newBuild detection instead of counting DOM elements. */
19
+ history?: {
20
+ role: string;
21
+ content: string;
22
+ }[];
23
+ /** Optional tool definitions exposed to the builder (on-demand context loading). */
24
+ tools?: ToolDefinition[];
25
+ /** Executors keyed by tool name. Required when `tools` is provided. */
26
+ toolHandlers?: Record<string, ToolHandler>;
27
+ /** Fired once per tool-use iteration with the names of tools about to execute. */
28
+ onToolCall?: (names: string[]) => void;
16
29
  }
17
30
  export type ChangeOp = {
18
31
  op: "update";
@@ -49,22 +62,33 @@ export type ChangeList = ChangeOp[];
49
62
  export interface TransformPageResult {
50
63
  html: string;
51
64
  changeCount: number;
65
+ /** For 'reply' results — the assistant's text response (shell displays it). */
66
+ replyText?: string;
67
+ /** For 'error' results — the error message (shell displays it). */
68
+ errorText?: string;
69
+ /** Page validation results (undefined if validation was skipped). */
70
+ validation?: PageValidationResult;
71
+ /** Number of change ops that were silently skipped (missing target, locked, etc.). */
72
+ skippedOps?: number;
73
+ /** Short human-readable reasons for each skipped op, in order. */
74
+ skipReasons?: string[];
75
+ }
76
+ export interface ApplyChangeListReport {
77
+ html: string;
78
+ skippedOps: number;
79
+ skipReasons: string[];
52
80
  }
53
81
  export declare function transformPage(args: TransformPageArgs): Promise<AgentCompletion<TransformPageResult>>;
54
82
  /**
55
- * Lightweight markdown-to-HTML converter for chat reply text.
56
- * Handles: code blocks, inline code, bold, italic, links, unordered/ordered lists, paragraphs.
57
- */
58
- export declare function simpleMarkdown(text: string): string;
59
- /**
60
- * Assign sequential `data-node-id` to every element in the HTML.
83
+ * Assign sequential `data-nid` to every element in the HTML.
84
+ * Skips trivial elements (br, wbr, col, source) that the LLM never targets.
61
85
  */
62
86
  export declare function assignNodeIds(html: string): {
63
87
  html: string;
64
88
  nodeCount: number;
65
89
  };
66
90
  /**
67
- * Remove all `data-node-id` attributes from the HTML.
91
+ * Remove all `data-nid` attributes from the HTML.
68
92
  */
69
93
  export declare function stripNodeIds(html: string): string;
70
94
  /**
@@ -98,22 +122,36 @@ export declare function deduplicateInlineScripts(html: string): string;
98
122
  */
99
123
  export declare function ensureScriptsBeforeBodyClose(html: string): string;
100
124
  /**
101
- * Apply a list of CRUD operations to annotated HTML (elements must have `data-node-id`).
125
+ * Apply a list of CRUD operations to annotated HTML (elements must have `data-nid`).
126
+ * Returns just the resulting HTML string. For diagnostic info about skipped ops,
127
+ * use `applyChangeListWithReport` instead.
102
128
  */
103
129
  export declare function applyChangeList(html: string, changes: ChangeList): string;
130
+ /**
131
+ * Apply a list of CRUD operations and return the resulting HTML plus a report
132
+ * of any ops that were silently skipped (missing target node, locked element,
133
+ * search text not found, etc.). Callers can surface the skip report to the
134
+ * user so that partial/broken builds do not fail silently.
135
+ */
136
+ export declare function applyChangeListWithReport(html: string, changes: ChangeList): ApplyChangeListReport;
137
+ /**
138
+ * Validate and filter a raw parsed array into a well-formed ChangeList.
139
+ * Invalid ops are logged as warnings and dropped rather than crashing.
140
+ */
141
+ export declare function validateChangeOps(raw: unknown[]): ChangeList;
104
142
  /**
105
143
  * Parse a JSON change list from the model's raw response text.
106
144
  * Handles responses that may include markdown fences or extra text around the JSON.
145
+ * Invalid ops are logged as warnings and filtered out.
107
146
  */
108
147
  export declare function parseChangeList(response: string): ChangeList;
109
- export declare function getMessageFormat(productName: string): string;
110
148
  export declare function getTransformInstr(productName: string): string;
111
- export declare const AGENT_API_REFERENCE = "## Agent API\n\nCheck availability first (required):\n const agents = await synthos.agents.list({ enabled: true });\n\nSend a message (returns full response):\n const result = await synthos.agents.send(agentId, message);\n // result: { kind: 'message', text: 'response text', raw: {...} }\n\nSend with file/image attachments:\n const result = await synthos.agents.send(agentId, message, [\n { fileName: 'photo.jpg', mimeType: 'image/jpeg', content: '<base64-string>' }\n ]);\n\nStream a response (token-by-token deltas):\n const handle = synthos.agents.sendStream(agentId, message, function(event) {\n switch (event.kind) {\n case 'text': // event.data = text delta string \u2014 append to output\n case 'status': // event.data = status info object\n case 'done': // stream complete \u2014 stop processing\n case 'error': // event.data = error message string\n }\n });\n handle.close(); // call to abort the stream early\n\nStream with attachments:\n synthos.agents.sendStream(agentId, message, onEvent, [\n { fileName: 'doc.pdf', mimeType: 'application/pdf', content: '<base64>' }\n ]);\n\nIMPORTANT: Always check synthos.agents.list({ enabled: true }) before calling an agent.\nIf no agents are configured, show the user a link to Settings > Agents (/settings?tab=agents).";
149
+ export declare const AGENT_API_REFERENCE = "## Agent API\n\nCheck availability first (required):\n const agents = await synthos.agent.list({ enabled: true });\n\nSend a message (returns full response):\n const result = await synthos.agent.send(agentId, message);\n // result: { kind: 'message', text: 'response text', raw: {...} }\n\nSend with file/image attachments:\n const result = await synthos.agent.send(agentId, message, [\n { fileName: 'photo.jpg', mimeType: 'image/jpeg', content: '<base64-string>' }\n ]);\n\nStream a response (token-by-token deltas):\n const handle = synthos.agent.sendStream(agentId, message, function(event) {\n switch (event.kind) {\n case 'text': // event.data = text delta string \u2014 append to output\n case 'status': // event.data = status info object\n case 'done': // stream complete \u2014 stop processing\n case 'error': // event.data = error message string\n }\n });\n handle.close(); // call to abort the stream early\n\nStream with attachments:\n synthos.agent.sendStream(agentId, message, onEvent, [\n { fileName: 'doc.pdf', mimeType: 'application/pdf', content: '<base64>' }\n ]);\n\nIMPORTANT: Always check synthos.agent.list({ enabled: true }) before calling an agent.\nIf no agents are configured, show the user a link to Settings > Agents (/settings?tab=agents).";
112
150
  export declare const DEFAULT_ROUTE_HINTS: Map<string, string>;
113
151
  /**
114
152
  * Assemble the <SERVER_APIS> prompt block, including only hints for enabled
115
153
  * feature groups and any custom route hints from the Customizer.
116
154
  */
117
155
  export declare function buildRouteHints(customizer: Customizer): string;
118
- export declare const serverAPIs = "<SERVER_APIS>\nGET /api/data/:page/:table\ndescription: Retrieve all rows from a page-scoped table (tables are stored per-page). Supports pagination via query params.\nquery params: limit (number, optional) \u2014 max rows to return; offset (number, optional, default 0) \u2014 rows to skip\nresponse (without limit): Array of JSON rows [{ id: string, ... }]\nresponse (with limit): { items: [{ id: string, ... }], total: number, offset: number, limit: number, hasMore: boolean }\n\nGET /api/data/:page/:table/:id\ndescription: Retrieve a single row from a page-scoped table\nresponse: JSON row { id: string, ... }\n\nPOST /api/data/:page/:table\ndescription: Replaces or adds a single row to a page-scoped table and returns the row\nrequest: JSON row { id?: string, ... }\nresponse: { id: string, ... }\n\nDELETE /api/data/:page/:table/:id\ndescription: Delete a single row from a page-scoped table\nresponse: { success: true }\n\nPOST /api/generate/image\ndescription: Generate an image based on a prompt\nrequest: { prompt: string, shape: 'square' | 'portrait' | 'landscape', style: 'vivid' | 'natural' }\nresponse: { url: string }\n\nPOST /api/generate/completion\ndescription: Generates a text completion based on a prompt\nrequest: { prompt: string, temperature?: number }\nresponse: { answer: string, explanation: string }\n\nGET /api/pages\ndescription: Retrieve a list of all pages with metadata\nresponse: Array of { name: string, title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nGET /api/pages/:name\ndescription: Retrieve metadata for a single page\nresponse: { title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nPOST /api/pages/:name\ndescription: Update page metadata (merge semantics \u2014 send only fields to change; lastModified is auto-set)\nrequest: { title?: string, categories?: string[], pinned?: boolean, mode?: 'unlocked' | 'locked' }\nresponse: Full metadata object\n\nDELETE /api/pages/:name\ndescription: Delete a user page (cannot delete required/system pages)\nresponse: { deleted: true }\n\nPOST /api/pages/:name/ask\ndescription: Ask a question about a page with full HTML context\nrequest: { question: string }\nresponse: { answer: string }\n\nPOST /api/scripts/:id\ndescription: Execute a script with the passed in variables\nrequest: { [key: string]: string }\nresponse: string\n\nPOST /api/search/web\ndescription: Search the web using Brave Search (must be enabled in Settings > Connectors)\nrequest: { query: string, count?: number, country?: string, freshness?: string }\nresponse: { results: [{ title: string, url: string, description: string }] }\n\nGET /api/agents\ndescription: List configured agents (A2A and OpenClaw). Supports ?enabled=true and ?provider=a2a|openclaw filters.\nresponse: [{ id: string, name: string, description: string, url: string, enabled: boolean, provider: 'a2a'|'openclaw', capabilities?: object }]\n\nPOST /api/agents/:id/send\ndescription: Send a text message to an agent (works for both A2A and OpenClaw protocols) and receive a normalized response\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: { kind: 'message'|'task', text?: string, raw: object }\n\nPOST /api/agents/:id/stream\ndescription: Send a message and receive a streaming SSE response (text/event-stream). Each event is JSON: { kind: 'text'|'status'|'artifact'|'done'|'error', data: any }\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: SSE stream\n\nGET /api/connectors\ndescription: List available connectors (REST API proxies). Supports ?category=X and ?id=X filters.\nresponse: [{ id: string, name: string, category: string, configured: boolean }]\n\nGET /api/connectors/:id\ndescription: Get full detail for a connector including its definition and configuration status\nresponse: { id, name, category, description, baseUrl, authStrategy, authKey, fields, configured, enabled, hasKey }\n\nPOST /api/connectors (proxy call)\ndescription: Proxy a request through a configured connector. The connector attaches auth automatically.\nrequest: { connector: string, method: string, path: string, headers?: object, body?: any, query?: object }\nresponse: Upstream API response (JSON or text)\n\nPAGE HELPERS (available globally as window.synthos):\n synthos.data.list(table, opts?) \u2014 GET /api/data/:page/:table (auto-scoped to current page; opts: { limit?, offset? } \u2014 when limit is set, returns { items, total, offset, limit, hasMore })\n synthos.data.get(table, id) \u2014 GET /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.data.save(table, row) \u2014 POST /api/data/:page/:table (auto-scoped to current page)\n synthos.data.remove(table, id) \u2014 DELETE /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.generate.image({ prompt, shape, style }) \u2014 POST /api/generate/image\n synthos.generate.completion({ prompt, temperature? }) \u2014 POST /api/generate/completion\n synthos.scripts.run(id, variables) \u2014 POST /api/scripts/:id\n synthos.pages.list() \u2014 GET /api/pages\n synthos.pages.get(name) \u2014 GET /api/pages/:name\n synthos.pages.update(name, metadata) \u2014 POST /api/pages/:name\n synthos.pages.remove(name) \u2014 DELETE /api/pages/:name\n synthos.pages.ask(name, question) \u2014 POST /api/pages/:name/ask\n synthos.search.web(query, opts?) \u2014 POST /api/search/web (opts: { count?, country?, freshness? })\n synthos.connectors.call(connector, method, path, opts?) \u2014 POST /api/connectors (proxy call; opts: { headers?, body?, query? })\n synthos.connectors.list(opts?) \u2014 GET /api/connectors (opts: { category?, id? })\n synthos.agents.list(opts?) \u2014 GET /api/agents (returns configured agents; opts: { enabled?, provider? }; returns [{ id, name, description, url, enabled, provider, capabilities }])\n synthos.agents.send(agentId, message, attachments?) \u2014 POST /api/agents/:id/send (sends a text message to any agent, returns normalized { kind, text, raw }; attachments: [{ fileName, mimeType, content }])\n synthos.agents.sendStream(agentId, message, onEvent, attachments?) \u2014 POST /api/agents/:id/stream (SSE streaming; onEvent receives { kind, data }; returns { close() } handle; attachments: [{ fileName, mimeType, content }])\n synthos.agents.isEnabled(agentId) \u2014 checks if an agent is enabled (returns Promise<boolean>)\n synthos.agents.getCapabilities(agentId) \u2014 returns agent capabilities object (streaming, skills, etc.)\nAll methods return Promises. Prefer these helpers over raw fetch().";
156
+ export declare const serverAPIs = "<SERVER_APIS>\nGET /api/data/:page/:table\ndescription: Retrieve all rows from a page-scoped table (tables are stored per-page). Supports pagination via query params.\nquery params: limit (number, optional) \u2014 max rows to return; offset (number, optional, default 0) \u2014 rows to skip\nresponse (without limit): Array of JSON rows [{ id: string, ... }]\nresponse (with limit): { items: [{ id: string, ... }], total: number, offset: number, limit: number, hasMore: boolean }\n\nGET /api/data/:page/:table/:id\ndescription: Retrieve a single row from a page-scoped table\nresponse: JSON row { id: string, ... }\n\nPOST /api/data/:page/:table\ndescription: Replaces or adds a single row to a page-scoped table and returns the row\nrequest: JSON row { id?: string, ... }\nresponse: { id: string, ... }\n\nDELETE /api/data/:page/:table/:id\ndescription: Delete a single row from a page-scoped table\nresponse: { success: true }\n\nPOST /api/generate/image\ndescription: Generate an image based on a prompt\nrequest: { prompt: string, shape: 'square' | 'portrait' | 'landscape', style: 'vivid' | 'natural' }\nresponse: { url: string }\n\nPOST /api/generate/completion\ndescription: Generates a completion based on a prompt. When `schema` is provided, the model is constrained to emit JSON conforming to it and the parsed object is returned directly.\nrequest: { prompt: string, temperature?: number, schema?: object (JSON schema) }\nresponse (no schema): { answer: string }\nresponse (with schema): the parsed JSON object matching `schema`. Top-level must be `type: 'object'`; every nested object MUST set `additionalProperties: false`.\n\nGET /api/pages\ndescription: Retrieve a list of all pages with metadata\nresponse: Array of { name: string, title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nGET /api/pages/:name\ndescription: Retrieve metadata for a single page\nresponse: { title: string, categories: string[], pinned: boolean, createdDate: string, lastModified: string, pageVersion: number, mode: 'unlocked' | 'locked' }\n\nPOST /api/pages/:name\ndescription: Update page metadata (merge semantics \u2014 send only fields to change; lastModified is auto-set)\nrequest: { title?: string, categories?: string[], pinned?: boolean, mode?: 'unlocked' | 'locked' }\nresponse: Full metadata object\n\nDELETE /api/pages/:name\ndescription: Delete a user page (cannot delete required/system pages)\nresponse: { deleted: true }\n\nPOST /api/pages/:name/ask\ndescription: Ask a question about a page with full HTML context\nrequest: { question: string }\nresponse: { answer: string }\n\nPOST /api/scripts/:id\ndescription: Execute a script with the passed in variables\nrequest: { [key: string]: string }\nresponse: string\n\nPOST /api/search/web\ndescription: Search the web using Brave Search (must be enabled in Settings > Connectors)\nrequest: { query: string, count?: number, country?: string, freshness?: string }\nresponse: { results: [{ title: string, url: string, description: string }] }\n\nGET /api/agents\ndescription: List configured agents (A2A and OpenClaw). Supports ?enabled=true and ?provider=a2a|openclaw filters.\nresponse: [{ id: string, name: string, description: string, url: string, enabled: boolean, provider: 'a2a'|'openclaw', capabilities?: object }]\n\nPOST /api/agents/:id/send\ndescription: Send a text message to an agent (works for both A2A and OpenClaw protocols) and receive a normalized response\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: { kind: 'message'|'task', text?: string, raw: object }\n\nPOST /api/agents/:id/stream\ndescription: Send a message and receive a streaming SSE response (text/event-stream). Each event is JSON: { kind: 'text'|'status'|'artifact'|'done'|'error', data: any }\nrequest: { message: string, attachments?: [{ fileName: string, mimeType: string, content: string }] }\nresponse: SSE stream\n\nGET /api/connectors\ndescription: List available connectors (REST API proxies). Supports ?category=X and ?id=X filters.\nresponse: [{ id: string, name: string, category: string, configured: boolean }]\n\nGET /api/connectors/:id\ndescription: Get full detail for a connector including its definition and configuration status\nresponse: { id, name, category, description, baseUrl, authStrategy, authKey, fields, configured, enabled, hasKey }\n\nPOST /api/connectors (proxy call)\ndescription: Proxy a request through a configured connector. The connector attaches auth automatically.\nrequest: { connector: string, method: string, path: string, headers?: object, body?: any, query?: object }\nresponse: Upstream API response (JSON or text)\n\nPAGE HELPERS (available globally as window.synthos):\n synthos.data.list(table, opts?) \u2014 GET /api/data/:page/:table (auto-scoped to current page; opts: { limit?, offset? } \u2014 when limit is set, returns { items, total, offset, limit, hasMore })\n synthos.data.get(table, id) \u2014 GET /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.data.save(table, row) \u2014 POST /api/data/:page/:table (auto-scoped to current page)\n synthos.data.remove(table, id) \u2014 DELETE /api/data/:page/:table/:id (auto-scoped to current page)\n synthos.generate.image({ prompt, shape, style }) \u2014 POST /api/generate/image\n synthos.generate.completion({ prompt, temperature?, schema? }) \u2014 POST /api/generate/completion (schema: optional JSON schema for structured output; returns parsed object)\n synthos.script.run(id, variables) \u2014 POST /api/scripts/:id\n synthos.page.list() \u2014 GET /api/pages\n synthos.page.get(name) \u2014 GET /api/pages/:name\n synthos.page.update(name, metadata) \u2014 POST /api/pages/:name\n synthos.page.remove(name) \u2014 DELETE /api/pages/:name\n synthos.page.ask(name, question) \u2014 POST /api/pages/:name/ask\n synthos.search.web(query, opts?) \u2014 POST /api/search/web (opts: { count?, country?, freshness? })\n synthos.connector.call(connector, method, path, opts?) \u2014 POST /api/connectors (proxy call; opts: { headers?, body?, query? })\n synthos.connector.list(opts?) \u2014 GET /api/connectors (opts: { category?, id? })\n synthos.agent.list(opts?) \u2014 GET /api/agents (returns configured agents; opts: { enabled?, provider? }; returns [{ id, name, description, url, enabled, provider, capabilities }])\n synthos.agent.send(agentId, message, attachments?) \u2014 POST /api/agents/:id/send (sends a text message to any agent, returns normalized { kind, text, raw }; attachments: [{ fileName, mimeType, content }])\n synthos.agent.sendStream(agentId, message, onEvent, attachments?) \u2014 POST /api/agents/:id/stream (SSE streaming; onEvent receives { kind, data }; returns { close() } handle; attachments: [{ fileName, mimeType, content }])\n synthos.agent.isEnabled(agentId) \u2014 checks if an agent is enabled (returns Promise<boolean>)\n synthos.agent.getCapabilities(agentId) \u2014 returns agent capabilities object (streaming, skills, etc.)\nAll methods return Promises. Prefer these helpers over raw fetch().";
119
157
  //# sourceMappingURL=transformPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformPage.d.ts","sourceRoot":"","sources":["../../src/service/transformPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformPage.d.ts","sourceRoot":"","sources":["../../src/service/transformPage.ts"],"names":[],"mappings":"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"}