synthos 0.8.0 → 0.10.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.
- package/README.md +1 -1
- package/default-pages/application/page.html +42 -0
- package/default-pages/application/page.json +10 -0
- package/default-pages/elevenlabs_effects_studio/page.html +1363 -0
- package/default-pages/elevenlabs_effects_studio/page.json +11 -0
- package/default-pages/elevenlabs_voice_studio/page.html +801 -0
- package/default-pages/elevenlabs_voice_studio/page.json +11 -0
- package/default-pages/{json_tools.html → json_tools/page.html} +13 -11
- package/default-pages/json_tools/page.json +10 -0
- package/default-pages/my_notes/notes/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json +5 -0
- package/default-pages/my_notes/page.html +132 -0
- package/default-pages/{my_notes.json → my_notes/page.json} +2 -2
- package/default-pages/neon_asteroids/files/Ambient_Space.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ambient_Space2.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ambient_Space3.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Asteroid_Explosion.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Hyperspace_Jump.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Laser_Fire.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Menu_Navigate.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Power_Up_Collect.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Saucer_Alert.mp3 +0 -0
- package/default-pages/neon_asteroids/files/Ship_Thrust.mp3 +0 -0
- package/default-pages/neon_asteroids/files/effects.json +74 -0
- package/default-pages/neon_asteroids/page.html +1803 -0
- package/default-pages/{neon_asteroids.json → neon_asteroids/page.json} +3 -3
- package/default-pages/{oregon_trail.html → oregon_trail/page.html} +16 -30
- package/default-pages/{oregon_trail.json → oregon_trail/page.json} +2 -2
- package/default-pages/retro_game_starter/page.html +1308 -0
- package/default-pages/retro_game_starter/page.json +12 -0
- package/default-pages/{sidebar_page.html → sidebar_page/page.html} +12 -10
- package/default-pages/sidebar_page/page.json +10 -0
- package/default-pages/{solar_explorer.html → solar_explorer/page.html} +15 -12
- package/default-pages/{solar_explorer.json → solar_explorer/page.json} +2 -2
- package/default-pages/{solar_tutorial.html → solar_tutorial/page.html} +12 -10
- package/default-pages/solar_tutorial/page.json +10 -0
- package/default-pages/{two-panel_page.html → two-panel_page/page.html} +13 -11
- package/default-pages/two-panel_page/page.json +10 -0
- package/default-pages/{us_map.html → us_map/page.html} +193 -192
- package/default-pages/{us_map.json → us_map/page.json} +12 -12
- package/default-pages/{us_map_1850.html → us_map_1850/page.html} +326 -325
- package/default-pages/{us_map_1850.json → us_map_1850/page.json} +12 -12
- package/default-pages/{western_cities_1850.html → western_cities_1850/page.html} +527 -526
- package/default-pages/{western_cities_1850.json → western_cities_1850/page.json} +12 -12
- package/default-themes/aurora-dawn.json +19 -0
- package/default-themes/aurora-dawn.v3.css +198 -0
- package/default-themes/aurora-dusk.json +19 -0
- package/default-themes/aurora-dusk.v3.css +200 -0
- package/default-themes/cosmos-dawn.json +19 -0
- package/default-themes/cosmos-dawn.v3.css +198 -0
- package/default-themes/cosmos-dusk.json +19 -0
- package/default-themes/cosmos-dusk.v3.css +200 -0
- package/default-themes/high-contrast-dark.json +19 -0
- package/default-themes/high-contrast-dark.v3.css +200 -0
- package/default-themes/high-contrast-light.json +19 -0
- package/default-themes/high-contrast-light.v3.css +198 -0
- package/default-themes/nebula-dawn.v2.css +110 -0
- package/default-themes/nebula-dawn.v3.css +199 -0
- package/default-themes/nebula-dusk.v2.css +104 -0
- package/default-themes/nebula-dusk.v3.css +201 -0
- package/default-themes/solar-flare-dawn.json +19 -0
- package/default-themes/solar-flare-dawn.v3.css +198 -0
- package/default-themes/solar-flare-dusk.json +19 -0
- package/default-themes/solar-flare-dusk.v3.css +200 -0
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/openclaw/gatewayManager.d.ts +4 -0
- package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -1
- package/dist/agents/openclaw/gatewayManager.js +27 -11
- package/dist/agents/openclaw/gatewayManager.js.map +1 -1
- package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -1
- package/dist/agents/openclaw/openclawProvider.js +2 -4
- package/dist/agents/openclaw/openclawProvider.js.map +1 -1
- package/dist/agents/openclaw/sshTunnelManager.d.ts +2 -0
- package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -1
- package/dist/agents/openclaw/sshTunnelManager.js +31 -12
- package/dist/agents/openclaw/sshTunnelManager.js.map +1 -1
- package/dist/builders/anthropic.d.ts +31 -0
- package/dist/builders/anthropic.d.ts.map +1 -0
- package/dist/builders/anthropic.js +227 -0
- package/dist/builders/anthropic.js.map +1 -0
- package/dist/builders/fireworksai.d.ts +9 -0
- package/dist/builders/fireworksai.d.ts.map +1 -0
- package/dist/builders/fireworksai.js +57 -0
- package/dist/builders/fireworksai.js.map +1 -0
- package/dist/builders/index.d.ts +13 -0
- package/dist/builders/index.d.ts.map +1 -0
- package/dist/builders/index.js +31 -0
- package/dist/builders/index.js.map +1 -0
- package/dist/builders/openai.d.ts +8 -0
- package/dist/builders/openai.d.ts.map +1 -0
- package/dist/builders/openai.js +87 -0
- package/dist/builders/openai.js.map +1 -0
- package/dist/builders/types.d.ts +54 -0
- package/dist/builders/types.d.ts.map +1 -0
- package/dist/builders/types.js +211 -0
- package/dist/builders/types.js.map +1 -0
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +3 -2
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/registry.d.ts +2 -1
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +31 -8
- package/dist/connectors/registry.js.map +1 -1
- package/dist/customizer/Customizer.d.ts +62 -0
- package/dist/customizer/Customizer.d.ts.map +1 -0
- package/dist/customizer/Customizer.js +134 -0
- package/dist/customizer/Customizer.js.map +1 -0
- package/dist/customizer/index.d.ts +4 -0
- package/dist/customizer/index.d.ts.map +1 -0
- package/dist/customizer/index.js +9 -0
- package/dist/customizer/index.js.map +1 -0
- package/dist/files.d.ts +16 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +60 -1
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +12 -6
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +150 -133
- package/dist/init.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +23 -10
- package/dist/migrations.js.map +1 -1
- package/dist/models/anthropic.d.ts +4 -2
- package/dist/models/anthropic.d.ts.map +1 -1
- package/dist/models/anthropic.js +33 -6
- package/dist/models/anthropic.js.map +1 -1
- package/dist/models/fireworksai.d.ts.map +1 -1
- package/dist/models/fireworksai.js +9 -1
- package/dist/models/fireworksai.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/openai.d.ts +1 -1
- package/dist/models/openai.d.ts.map +1 -1
- package/dist/models/openai.js +24 -3
- package/dist/models/openai.js.map +1 -1
- package/dist/models/types.d.ts +20 -1
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +6 -1
- package/dist/models/types.js.map +1 -1
- package/dist/pages.d.ts +34 -10
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +229 -79
- package/dist/pages.js.map +1 -1
- package/dist/service/createCompletePrompt.d.ts +2 -1
- package/dist/service/createCompletePrompt.d.ts.map +1 -1
- package/dist/service/createCompletePrompt.js +2 -2
- package/dist/service/createCompletePrompt.js.map +1 -1
- package/dist/service/requiresSettings.d.ts +2 -1
- package/dist/service/requiresSettings.d.ts.map +1 -1
- package/dist/service/requiresSettings.js +3 -3
- package/dist/service/requiresSettings.js.map +1 -1
- package/dist/service/server.d.ts +2 -1
- package/dist/service/server.d.ts.map +1 -1
- package/dist/service/server.js +37 -8
- package/dist/service/server.js.map +1 -1
- package/dist/service/transformPage.d.ts +47 -20
- package/dist/service/transformPage.d.ts.map +1 -1
- package/dist/service/transformPage.js +514 -293
- package/dist/service/transformPage.js.map +1 -1
- package/dist/service/useAgentRoutes.d.ts +2 -1
- package/dist/service/useAgentRoutes.d.ts.map +1 -1
- package/dist/service/useAgentRoutes.js +17 -14
- package/dist/service/useAgentRoutes.js.map +1 -1
- package/dist/service/useApiRoutes.d.ts +2 -1
- package/dist/service/useApiRoutes.d.ts.map +1 -1
- package/dist/service/useApiRoutes.js +287 -172
- package/dist/service/useApiRoutes.js.map +1 -1
- package/dist/service/useConnectorRoutes.js +17 -17
- package/dist/service/useConnectorRoutes.js.map +1 -1
- package/dist/service/useDataRoutes.d.ts.map +1 -1
- package/dist/service/useDataRoutes.js +13 -10
- package/dist/service/useDataRoutes.js.map +1 -1
- package/dist/service/useFileRoutes.d.ts +4 -0
- package/dist/service/useFileRoutes.d.ts.map +1 -0
- package/dist/service/useFileRoutes.js +122 -0
- package/dist/service/useFileRoutes.js.map +1 -0
- package/dist/service/usePageRoutes.d.ts +2 -1
- package/dist/service/usePageRoutes.d.ts.map +1 -1
- package/dist/service/usePageRoutes.js +671 -74
- package/dist/service/usePageRoutes.js.map +1 -1
- package/dist/service/useSharedDataRoutes.d.ts +4 -0
- package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
- package/dist/service/useSharedDataRoutes.js +107 -0
- package/dist/service/useSharedDataRoutes.js.map +1 -0
- package/dist/service/useSharedFileRoutes.d.ts +4 -0
- package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
- package/dist/service/useSharedFileRoutes.js +121 -0
- package/dist/service/useSharedFileRoutes.js.map +1 -0
- package/dist/settings.d.ts +5 -3
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +12 -10
- package/dist/settings.js.map +1 -1
- package/dist/storage/FsStorageProvider.d.ts +25 -0
- package/dist/storage/FsStorageProvider.d.ts.map +1 -0
- package/dist/storage/FsStorageProvider.js +103 -0
- package/dist/storage/FsStorageProvider.js.map +1 -0
- package/dist/storage/StorageProvider.d.ts +31 -0
- package/dist/storage/StorageProvider.d.ts.map +1 -0
- package/dist/storage/StorageProvider.js +3 -0
- package/dist/storage/StorageProvider.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/synthos-cli.d.ts.map +1 -1
- package/dist/synthos-cli.js +4 -3
- package/dist/synthos-cli.js.map +1 -1
- package/dist/themes.d.ts +1 -0
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +65 -28
- package/dist/themes.js.map +1 -1
- package/migration-rules/v1-to-v2.md +193 -0
- package/migration-rules/v2-to-v3.md +481 -0
- package/package.json +11 -10
- package/required-pages/builder/page.html +43 -0
- package/required-pages/builder/page.json +10 -0
- package/required-pages/{pages.html → pages/page.html} +238 -233
- package/required-pages/pages/page.json +10 -0
- package/required-pages/{settings.html → settings/page.html} +389 -275
- package/required-pages/settings/page.json +10 -0
- package/required-pages/synthos_apis/page.html +846 -0
- package/required-pages/synthos_apis/page.json +10 -0
- package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
- package/required-pages/synthos_scripts/page.json +10 -0
- package/src/agents/index.ts +1 -1
- package/src/agents/openclaw/gatewayManager.ts +22 -11
- package/src/agents/openclaw/openclawProvider.ts +2 -4
- package/src/agents/openclaw/sshTunnelManager.ts +19 -11
- package/src/builders/anthropic.ts +283 -0
- package/src/builders/fireworksai.ts +59 -0
- package/src/builders/index.ts +33 -0
- package/src/builders/openai.ts +89 -0
- package/src/builders/types.ts +261 -0
- package/src/connectors/index.ts +1 -1
- package/src/connectors/registry.ts +28 -8
- package/src/customizer/Customizer.ts +163 -0
- package/src/customizer/index.ts +5 -0
- package/src/files.ts +57 -0
- package/src/index.ts +3 -1
- package/src/init.ts +195 -145
- package/src/migrations.ts +30 -10
- package/src/models/anthropic.ts +40 -10
- package/src/models/fireworksai.ts +9 -2
- package/src/models/index.ts +1 -1
- package/src/models/openai.ts +26 -6
- package/src/models/types.ts +31 -1
- package/src/pages.ts +230 -77
- package/src/service/createCompletePrompt.ts +3 -2
- package/src/service/requiresSettings.ts +4 -3
- package/src/service/server.ts +36 -9
- package/src/service/transformPage.ts +557 -326
- package/src/service/useAgentRoutes.ts +19 -14
- package/src/service/useApiRoutes.ts +208 -84
- package/src/service/useConnectorRoutes.ts +18 -18
- package/src/service/useDataRoutes.ts +13 -10
- package/src/service/useFileRoutes.ts +128 -0
- package/src/service/usePageRoutes.ts +730 -81
- package/src/service/useSharedDataRoutes.ts +109 -0
- package/src/service/useSharedFileRoutes.ts +127 -0
- package/src/settings.ts +14 -10
- package/src/storage/FsStorageProvider.ts +87 -0
- package/src/storage/StorageProvider.ts +34 -0
- package/src/storage/index.ts +2 -0
- package/src/synthos-cli.ts +4 -3
- package/src/themes.ts +64 -27
- package/static-files/favicon.svg +12 -0
- package/static-files/fluentlm-instructions.llmd +868 -0
- package/static-files/fluentlm-instructions.md +1595 -0
- package/static-files/fluentlm.css +4844 -0
- package/static-files/fluentlm.js +3602 -0
- package/static-files/fluentlm.min.css +1 -0
- package/static-files/fluentlm.min.js +1 -0
- package/{page-scripts/helpers-v2.js → static-files/helpers.v3.js} +82 -0
- package/static-files/page.v3.js +1290 -0
- package/static-files/recommended-frameworks.llmd +81 -0
- package/static-files/recommended-frameworks.md +137 -0
- package/static-files/retro-game.js +877 -0
- package/static-files/shell.css +797 -0
- package/static-files/theme-dark.css +169 -0
- package/static-files/theme-light.css +169 -0
- package/tests/builders.spec.ts +139 -0
- package/tests/pages.spec.ts +54 -84
- package/tests/transformPage.spec.ts +299 -360
- package/default-pages/application.html +0 -40
- package/default-pages/application.json +0 -1
- package/default-pages/json_tools.json +0 -1
- package/default-pages/my_notes.html +0 -33
- package/default-pages/neon_asteroids.html +0 -77
- package/default-pages/sidebar_page.json +0 -1
- package/default-pages/solar_tutorial.json +0 -1
- package/default-pages/two-panel_page.json +0 -1
- package/dist/service/useGatewayRoutes.d.ts +0 -4
- package/dist/service/useGatewayRoutes.d.ts.map +0 -1
- package/dist/service/useGatewayRoutes.js +0 -168
- package/dist/service/useGatewayRoutes.js.map +0 -1
- package/page-scripts/page-v2.js +0 -656
- package/required-pages/builder.html +0 -48
- package/required-pages/builder.json +0 -1
- package/required-pages/pages.json +0 -1
- package/required-pages/settings.json +0 -1
- package/required-pages/synthos_apis.html +0 -327
- package/required-pages/synthos_apis.json +0 -1
- package/required-pages/synthos_scripts.json +0 -1
- package/src/connectors/airtable/connector.json +0 -27
- package/src/connectors/alpha-vantage/connector.json +0 -26
- package/src/connectors/brave-search/connector.json +0 -26
- package/src/connectors/cloudinary/connector.json +0 -27
- package/src/connectors/deepl/connector.json +0 -28
- package/src/connectors/elevenlabs/connector.json +0 -30
- package/src/connectors/giphy/connector.json +0 -27
- package/src/connectors/github/connector.json +0 -29
- package/src/connectors/huggingface/connector.json +0 -27
- package/src/connectors/imgur/connector.json +0 -29
- package/src/connectors/instagram/connector.json +0 -43
- package/src/connectors/jira/connector.json +0 -28
- package/src/connectors/mapbox/connector.json +0 -26
- package/src/connectors/nasa/connector.json +0 -27
- package/src/connectors/newsapi/connector.json +0 -27
- package/src/connectors/notion/connector.json +0 -28
- package/src/connectors/open-exchange-rates/connector.json +0 -27
- package/src/connectors/openweathermap/connector.json +0 -26
- package/src/connectors/pexels/connector.json +0 -27
- package/src/connectors/resend/connector.json +0 -29
- package/src/connectors/rss2json/connector.json +0 -27
- package/src/connectors/sendgrid/connector.json +0 -27
- package/src/connectors/spoonacular/connector.json +0 -28
- package/src/connectors/stability-ai/connector.json +0 -27
- package/src/connectors/twilio/connector.json +0 -28
- package/src/connectors/unsplash/connector.json +0 -27
- package/src/connectors/wolfram-alpha/connector.json +0 -26
- package/src/connectors/youtube-data/connector.json +0 -30
- /package/{dist/connectors → service-connectors}/airtable/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/alpha-vantage/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/brave-search/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/cloudinary/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/deepl/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/elevenlabs/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/giphy/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/github/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/huggingface/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/imgur/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/instagram/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/jira/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/mapbox/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/nasa/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/newsapi/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/notion/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/open-exchange-rates/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/openweathermap/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/pexels/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/resend/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/rss2json/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/sendgrid/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/spoonacular/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/stability-ai/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/twilio/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/unsplash/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/wolfram-alpha/connector.json +0 -0
- /package/{dist/connectors → service-connectors}/youtube-data/connector.json +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* Abstraction over user-mutable storage (pages, settings, themes, data, uploads).
|
|
4
|
+
*
|
|
5
|
+
* All paths are absolute. Callers build paths with `path.join(config.pagesFolder, ...)`
|
|
6
|
+
* exactly as they do today — the provider simply executes the I/O against
|
|
7
|
+
* whatever backend it wraps (local filesystem, blob storage, etc.).
|
|
8
|
+
*
|
|
9
|
+
* Package/read-only content (required-pages, default-themes, static-files,
|
|
10
|
+
* service-connectors) stays on local filesystem and is NOT routed through
|
|
11
|
+
* this interface.
|
|
12
|
+
*/
|
|
13
|
+
export interface StorageProvider {
|
|
14
|
+
checkIfExists(filePath: string): Promise<boolean>;
|
|
15
|
+
loadFile(filePath: string): Promise<string>;
|
|
16
|
+
saveFile(filePath: string, content: string): Promise<void>;
|
|
17
|
+
deleteFile(filePath: string): Promise<void>;
|
|
18
|
+
saveBuffer(filePath: string, data: Buffer): Promise<void>;
|
|
19
|
+
loadBuffer(filePath: string): Promise<Buffer>;
|
|
20
|
+
stat(filePath: string): Promise<{
|
|
21
|
+
size: number;
|
|
22
|
+
isFile: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
createReadStream(filePath: string): NodeJS.ReadableStream;
|
|
25
|
+
listFiles(dirPath: string): Promise<string[]>;
|
|
26
|
+
listFolders(dirPath: string): Promise<string[]>;
|
|
27
|
+
ensureFolderExists(dirPath: string): Promise<void>;
|
|
28
|
+
deleteFolder(dirPath: string): Promise<void>;
|
|
29
|
+
copyFolderRecursive(srcPath: string, destPath: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=StorageProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageProvider.d.ts","sourceRoot":"","sources":["../../src/storage/StorageProvider.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAG5B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI5C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAI1D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/storage/StorageProvider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FsStorageProvider = void 0;
|
|
4
|
+
var FsStorageProvider_1 = require("./FsStorageProvider");
|
|
5
|
+
Object.defineProperty(exports, "FsStorageProvider", { enumerable: true, get: function () { return FsStorageProvider_1.FsStorageProvider; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":";;;AACA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthos-cli.d.ts","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"synthos-cli.d.ts","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":"AAQA,wBAAsB,GAAG,kBAwCxB"}
|
package/dist/synthos-cli.js
CHANGED
|
@@ -8,6 +8,7 @@ const yargs_1 = __importDefault(require("yargs"));
|
|
|
8
8
|
const helpers_1 = require("yargs/helpers");
|
|
9
9
|
const service_1 = require("./service");
|
|
10
10
|
const init_1 = require("./init");
|
|
11
|
+
const customizer_1 = require("./customizer");
|
|
11
12
|
const dynamicImport = new Function('specifier', `return import(specifier)`);
|
|
12
13
|
async function run() {
|
|
13
14
|
await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
@@ -20,7 +21,7 @@ async function run() {
|
|
|
20
21
|
default: 4242
|
|
21
22
|
})
|
|
22
23
|
.option('pages', {
|
|
23
|
-
describe: `Include default pages when initializing a new
|
|
24
|
+
describe: `Include default pages when initializing a new local folder.`,
|
|
24
25
|
type: 'boolean',
|
|
25
26
|
default: true
|
|
26
27
|
})
|
|
@@ -36,9 +37,9 @@ async function run() {
|
|
|
36
37
|
})
|
|
37
38
|
.demandOption([]);
|
|
38
39
|
}, async (args) => {
|
|
39
|
-
const config = (0, init_1.createConfig)(
|
|
40
|
+
const config = await (0, init_1.createConfig)(customizer_1.customizer.localFolder, { debug: args.debug, debugPageUpdates: args.debugPageUpdates }, customizer_1.customizer);
|
|
40
41
|
await (0, init_1.init)(config, args.pages);
|
|
41
|
-
await (0, service_1.server)(config).listen(args.port, async () => {
|
|
42
|
+
await (0, service_1.server)(config, customizer_1.customizer).listen(args.port, async () => {
|
|
42
43
|
console.log(`SynthOS server is running on http://localhost:${args.port}`);
|
|
43
44
|
// Open using default browser
|
|
44
45
|
const open = await dynamicImport('open');
|
package/dist/synthos-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthos-cli.js","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAAwC;AACxC,uCAAmC;AACnC,iCAA4C;
|
|
1
|
+
{"version":3,"file":"synthos-cli.js","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAAwC;AACxC,uCAAmC;AACnC,iCAA4C;AAC5C,6CAA0C;AAE1C,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAErE,KAAK,UAAU,GAAG;IACrB,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7B,UAAU,CAAC,SAAS,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,4BAA4B,EAAE,CAAC,KAAK,EAAE,EAAE;QACtD,OAAO,KAAK;aACP,MAAM,CAAC,MAAM,EAAE;YACZ,QAAQ,EAAE,yBAAyB;YACnC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;SAChB,CAAC;aACD,MAAM,CAAC,OAAO,EAAE;YACb,QAAQ,EAAE,6DAA6D;YACvE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SAChB,CAAC;aACD,MAAM,CAAC,OAAO,EAAE;YACb,QAAQ,EAAE,gEAAgE;YAC1E,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACjB,CAAC;aACD,MAAM,CAAC,oBAAoB,EAAE;YAC1B,QAAQ,EAAE,iEAAiE;YAC3E,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACjB,CAAC;aACD,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,EAAC,uBAAU,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,uBAAU,CAAC,CAAC;QACtI,MAAM,IAAA,WAAI,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAA,gBAAM,EAAC,MAAM,EAAE,uBAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC1D,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAE1E,6BAA6B;YAC7B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;SACD,IAAI,EAAE;SACN,aAAa,EAAE;SACf,UAAU,EAAE,CAAC;AACtB,CAAC;AAxCD,kBAwCC"}
|
package/dist/themes.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare function parseThemeFilename(filename: string): {
|
|
|
13
13
|
name: string;
|
|
14
14
|
version: number;
|
|
15
15
|
} | undefined;
|
|
16
|
+
export declare function loadThemeVersion(name: string, config: SynthOSConfig): Promise<number>;
|
|
16
17
|
export declare function loadThemeInfo(name: string, config: SynthOSConfig): Promise<ThemeInfo | undefined>;
|
|
17
18
|
export declare function loadTheme(name: string, config: SynthOSConfig): Promise<string | undefined>;
|
|
18
19
|
export declare function listThemes(config: SynthOSConfig): Promise<string[]>;
|
package/dist/themes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOlG;
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAOlG;AAwCD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3F;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAkBvG;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAkBhG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBzE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmChF"}
|
package/dist/themes.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getOutdatedThemes = exports.listThemes = exports.loadTheme = exports.loadThemeInfo = exports.parseThemeFilename = exports.THEME_VERSION = void 0;
|
|
6
|
+
exports.getOutdatedThemes = exports.listThemes = exports.loadTheme = exports.loadThemeInfo = exports.loadThemeVersion = exports.parseThemeFilename = exports.THEME_VERSION = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const files_1 = require("./files");
|
|
9
9
|
exports.THEME_VERSION = 2;
|
|
@@ -26,10 +26,29 @@ function parseThemeFilename(filename) {
|
|
|
26
26
|
}
|
|
27
27
|
exports.parseThemeFilename = parseThemeFilename;
|
|
28
28
|
/**
|
|
29
|
-
* Find the CSS file for a theme by name in a folder.
|
|
29
|
+
* Find the CSS file for a theme by name in a user folder (via storageProvider).
|
|
30
30
|
* Prefers the highest-versioned file (e.g. name.v2.css over name.css).
|
|
31
31
|
*/
|
|
32
|
-
async function
|
|
32
|
+
async function findUserThemeCssFile(config, folder, name) {
|
|
33
|
+
const sp = config.storageProvider;
|
|
34
|
+
if (!await sp.checkIfExists(folder))
|
|
35
|
+
return undefined;
|
|
36
|
+
const files = await sp.listFiles(folder);
|
|
37
|
+
let best;
|
|
38
|
+
for (const f of files) {
|
|
39
|
+
const parsed = parseThemeFilename(f);
|
|
40
|
+
if (parsed && parsed.name === name) {
|
|
41
|
+
if (!best || parsed.version > best.version) {
|
|
42
|
+
best = { path: path_1.default.join(folder, f), version: parsed.version };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return best;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Find the CSS file for a theme by name in a local-fs folder (package defaults).
|
|
50
|
+
*/
|
|
51
|
+
async function findDefaultThemeCssFile(folder, name) {
|
|
33
52
|
if (!await (0, files_1.checkIfExists)(folder))
|
|
34
53
|
return undefined;
|
|
35
54
|
const files = await (0, files_1.listFiles)(folder);
|
|
@@ -44,15 +63,29 @@ async function findThemeCssFile(folder, name) {
|
|
|
44
63
|
}
|
|
45
64
|
return best;
|
|
46
65
|
}
|
|
66
|
+
async function loadThemeVersion(name, config) {
|
|
67
|
+
const local = await findUserThemeCssFile(config, userThemesFolder(config), name);
|
|
68
|
+
if (local)
|
|
69
|
+
return local.version;
|
|
70
|
+
for (const folder of config.defaultThemesFolders) {
|
|
71
|
+
const def = await findDefaultThemeCssFile(folder, name);
|
|
72
|
+
if (def)
|
|
73
|
+
return def.version;
|
|
74
|
+
}
|
|
75
|
+
return 1;
|
|
76
|
+
}
|
|
77
|
+
exports.loadThemeVersion = loadThemeVersion;
|
|
47
78
|
async function loadThemeInfo(name, config) {
|
|
48
|
-
|
|
79
|
+
const sp = config.storageProvider;
|
|
80
|
+
// Check user's local themes first (user storage)
|
|
49
81
|
const localPath = path_1.default.join(userThemesFolder(config), `${name}.json`);
|
|
50
|
-
if (await
|
|
51
|
-
const raw = await
|
|
82
|
+
if (await sp.checkIfExists(localPath)) {
|
|
83
|
+
const raw = await sp.loadFile(localPath);
|
|
52
84
|
return raw ? JSON.parse(raw) : undefined;
|
|
53
85
|
}
|
|
54
|
-
|
|
55
|
-
|
|
86
|
+
// Fall back to package defaults (local fs)
|
|
87
|
+
const defaultPath = await (0, files_1.findFileInFolders)(config.defaultThemesFolders, `${name}.json`);
|
|
88
|
+
if (defaultPath) {
|
|
56
89
|
const raw = await (0, files_1.loadFile)(defaultPath);
|
|
57
90
|
return raw ? JSON.parse(raw) : undefined;
|
|
58
91
|
}
|
|
@@ -60,38 +93,41 @@ async function loadThemeInfo(name, config) {
|
|
|
60
93
|
}
|
|
61
94
|
exports.loadThemeInfo = loadThemeInfo;
|
|
62
95
|
async function loadTheme(name, config) {
|
|
63
|
-
|
|
64
|
-
|
|
96
|
+
const sp = config.storageProvider;
|
|
97
|
+
// Check user's local themes first (user storage)
|
|
98
|
+
const local = await findUserThemeCssFile(config, userThemesFolder(config), name);
|
|
65
99
|
if (local) {
|
|
66
|
-
return await
|
|
100
|
+
return await sp.loadFile(local.path);
|
|
67
101
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
102
|
+
// Search all default theme folders (local fs)
|
|
103
|
+
for (const folder of config.defaultThemesFolders) {
|
|
104
|
+
const def = await findDefaultThemeCssFile(folder, name);
|
|
105
|
+
if (def) {
|
|
106
|
+
return await (0, files_1.loadFile)(def.path);
|
|
107
|
+
}
|
|
71
108
|
}
|
|
72
109
|
return undefined;
|
|
73
110
|
}
|
|
74
111
|
exports.loadTheme = loadTheme;
|
|
75
112
|
async function listThemes(config) {
|
|
113
|
+
const sp = config.storageProvider;
|
|
76
114
|
const names = new Set();
|
|
77
|
-
// Collect from user's local themes folder
|
|
115
|
+
// Collect from user's local themes folder (user storage)
|
|
78
116
|
const localFolder = userThemesFolder(config);
|
|
79
|
-
if (await
|
|
80
|
-
const files = await
|
|
117
|
+
if (await sp.checkIfExists(localFolder)) {
|
|
118
|
+
const files = await sp.listFiles(localFolder);
|
|
81
119
|
for (const f of files) {
|
|
82
120
|
const parsed = parseThemeFilename(f);
|
|
83
121
|
if (parsed)
|
|
84
122
|
names.add(parsed.name);
|
|
85
123
|
}
|
|
86
124
|
}
|
|
87
|
-
// Collect from
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
names.add(parsed.name);
|
|
94
|
-
}
|
|
125
|
+
// Collect from all default theme folders (local fs)
|
|
126
|
+
const defaultFiles = await (0, files_1.listFilesFromFolders)(config.defaultThemesFolders);
|
|
127
|
+
for (const f of defaultFiles) {
|
|
128
|
+
const parsed = parseThemeFilename(f);
|
|
129
|
+
if (parsed)
|
|
130
|
+
names.add(parsed.name);
|
|
95
131
|
}
|
|
96
132
|
return Array.from(names).sort();
|
|
97
133
|
}
|
|
@@ -100,11 +136,12 @@ exports.listThemes = listThemes;
|
|
|
100
136
|
* Compare local theme versions against defaults and return themes that need upgrading.
|
|
101
137
|
*/
|
|
102
138
|
async function getOutdatedThemes(config) {
|
|
139
|
+
const sp = config.storageProvider;
|
|
103
140
|
const localFolder = userThemesFolder(config);
|
|
104
|
-
if (!await
|
|
141
|
+
if (!await sp.checkIfExists(localFolder))
|
|
105
142
|
return [];
|
|
106
|
-
const defaultFiles = await (0, files_1.
|
|
107
|
-
const localFiles = await
|
|
143
|
+
const defaultFiles = await (0, files_1.listFilesFromFolders)(config.defaultThemesFolders);
|
|
144
|
+
const localFiles = await sp.listFiles(localFolder);
|
|
108
145
|
// Build maps: theme name → highest version
|
|
109
146
|
const defaultVersions = new Map();
|
|
110
147
|
for (const f of defaultFiles) {
|
package/dist/themes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
You are a code migration tool. You convert SynthOS v1 pages to v2 format.
|
|
2
|
+
|
|
3
|
+
## CRITICAL — Structural Elements You MUST Preserve
|
|
4
|
+
|
|
5
|
+
These elements are required by the SynthOS runtime (`page-script.js`). Removing them breaks the page.
|
|
6
|
+
|
|
7
|
+
1. **Chat panel** — The entire `.chat-panel` div including:
|
|
8
|
+
- `.chat-header`
|
|
9
|
+
- `.chat-messages` with all message history
|
|
10
|
+
- `.link-group` with Save/Pages/Reset links
|
|
11
|
+
- `<form id="chatForm">` with `.chat-input` and `.chat-submit`
|
|
12
|
+
If the chat form is missing, POST requests fail with "Cannot POST /".
|
|
13
|
+
|
|
14
|
+
2. **Thoughts div** — `<div id="thoughts" style="display: none;">...</div>` must stay in the page.
|
|
15
|
+
|
|
16
|
+
3. **Loading overlay** — `<div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div>` must be **inside** `.viewer-panel` (not outside it, not removed).
|
|
17
|
+
|
|
18
|
+
4. **Two-panel layout** — The `chat-panel` + `viewer-panel` structure must remain intact.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Rules — What to REMOVE
|
|
23
|
+
|
|
24
|
+
### 1. Shared CSS rules
|
|
25
|
+
|
|
26
|
+
Remove CSS rules matching these selectors (they are now in theme.css):
|
|
27
|
+
|
|
28
|
+
**Base:** `:root`, `*`, `body`, `html`
|
|
29
|
+
|
|
30
|
+
**Chat panel:** `.chat-panel`, `.chat-header`, `.chat-messages`, `.chat-message`, `.chat-message p`, `.chat-message p strong`, `.chat-message p code`, `.chat-message strong`, `.chat-message pre`, `.chat-message code`, `.chat-message a`, `.link-group`, `.link-group a`, `.link-group a:hover`, `form`, `.chat-input`, `.chat-input:focus`, `.chat-input::placeholder`, `.chat-input:disabled`, `.chat-submit`, `.chat-submit:hover`, `.chat-submit:active`, `.chat-submit:disabled`, `.chat-input-wrapper`, `.chat-input-wrapper .chat-input`
|
|
31
|
+
|
|
32
|
+
**Viewer panel:** `.viewer-panel`, `.viewer-panel::before`, `.viewer-panel.full-viewer`
|
|
33
|
+
|
|
34
|
+
**Loading:** `.loading-overlay`, `.spinner`, `#loadingOverlay`
|
|
35
|
+
|
|
36
|
+
**Chat toggle:** `.chat-toggle`, `.chat-toggle:hover`, `.chat-toggle-dots`, `.chat-toggle-dot`, `.chat-toggle:hover .chat-toggle-dot`, `body.chat-collapsed .chat-panel`, `body.chat-collapsed .chat-toggle`
|
|
37
|
+
|
|
38
|
+
**Modals:** `.modal-overlay`, `.modal-overlay.show`, `.modal-content`, `.modal-header`, `.modal-body`, `.modal-footer`, `.modal-footer-right`, `.modal-btn`, `.modal-btn-primary`, `.modal-btn-primary:hover`, `.modal-btn-secondary`, `.modal-btn-secondary:hover`, `.modal-btn-danger`, `.modal-btn-danger:hover`
|
|
39
|
+
|
|
40
|
+
**Form elements:** `.form-group`, `.form-group:last-child`, `.form-label`, `.form-input`, `.form-input:focus`, `.form-input:read-only`, `.form-input::placeholder`, `.checkbox-label`, `.checkbox-label input[type="checkbox"]`, `.checkbox-label span`
|
|
41
|
+
|
|
42
|
+
**Brainstorm:** All `.brainstorm-*` selectors
|
|
43
|
+
|
|
44
|
+
**Animations:** `@keyframes spin`, `@keyframes nebula-pulse`
|
|
45
|
+
|
|
46
|
+
**Scrollbars:** All `::-webkit-scrollbar*` rules, `scrollbar-width` and `scrollbar-color` on `*`
|
|
47
|
+
|
|
48
|
+
### 2. Shared inline JS
|
|
49
|
+
|
|
50
|
+
Remove these specific code blocks from `<script>` tags (page-script.js handles them now):
|
|
51
|
+
|
|
52
|
+
- `document.getElementById('chatInput').focus()` line
|
|
53
|
+
- `chatForm` submit event listener (the one with setTimeout and loading overlay)
|
|
54
|
+
- `saveLink` click handler
|
|
55
|
+
- `resetLink` click handler
|
|
56
|
+
- `window.onload` that ONLY scrolls chatMessages — **keep other onload logic!**
|
|
57
|
+
- Chat panel toggle IIFE (references `synthos-chat-collapsed`)
|
|
58
|
+
- Focus management IIFE (references `stopImmediatePropagation`)
|
|
59
|
+
- `// Basic chat functionality` comment
|
|
60
|
+
|
|
61
|
+
### 3. Empty tags
|
|
62
|
+
|
|
63
|
+
If a `<script>` or `<style>` block becomes empty after stripping, remove it entirely.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Rules — What to ADD
|
|
68
|
+
|
|
69
|
+
In `<head>`, add these two lines right after the `<title>` tag (if not already present):
|
|
70
|
+
```html
|
|
71
|
+
<script src="/api/theme-info.js"></script>
|
|
72
|
+
<link rel="stylesheet" href="/api/theme.css">
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Do NOT add `page-info.js`, `page-helpers.js`, or `page-script.js` — the server auto-injects those.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Rules — What to TRANSFORM
|
|
80
|
+
|
|
81
|
+
### Data/Table API migration
|
|
82
|
+
|
|
83
|
+
The data API changed from global tables to **page-scoped** tables. Prefer converting raw fetch calls to `synthos.data.*` helpers (they auto-scope via `window.pageInfo.name`):
|
|
84
|
+
|
|
85
|
+
| v1 pattern | v2 replacement |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `fetch('/api/data/TABLE')` | `synthos.data.list('TABLE')` |
|
|
88
|
+
| `fetch('/api/data/TABLE/ID')` | `synthos.data.get('TABLE', 'ID')` |
|
|
89
|
+
| `fetch('/api/data/TABLE', {method:'POST', body:...})` | `synthos.data.save('TABLE', row)` |
|
|
90
|
+
| `fetch('/api/data/TABLE/ID', {method:'DELETE'})` | `synthos.data.remove('TABLE', 'ID')` |
|
|
91
|
+
|
|
92
|
+
**Important:** `synthos.data.get()` returns the object directly (or `null`), NOT a Response — no `.json()` needed.
|
|
93
|
+
|
|
94
|
+
If raw fetch must be kept: `fetch('/api/data/notes')` → `fetch('/api/data/' + pageName + '/notes')`
|
|
95
|
+
|
|
96
|
+
### Color variables
|
|
97
|
+
|
|
98
|
+
Replace hardcoded Nebula Dusk colors with CSS variables in **page-specific CSS only**:
|
|
99
|
+
|
|
100
|
+
| Hardcoded | CSS Variable |
|
|
101
|
+
|-----------|-------------|
|
|
102
|
+
| `#667eea` | `var(--accent-primary)` |
|
|
103
|
+
| `#764ba2` | `var(--accent-secondary)` |
|
|
104
|
+
| `#f093fb` | `var(--accent-tertiary)` |
|
|
105
|
+
| `#b794f6` | `var(--text-secondary)` |
|
|
106
|
+
| `#e0e0e0` | `var(--text-primary)` |
|
|
107
|
+
| `rgba(138, 43, 226, 0.3)` | `var(--border-color)` or `var(--accent-glow)` |
|
|
108
|
+
| `#1a1a2e` | `var(--bg-primary)` |
|
|
109
|
+
| `#16213e` | `var(--bg-secondary)` |
|
|
110
|
+
| `#0f0f23` | `var(--bg-tertiary)` |
|
|
111
|
+
|
|
112
|
+
For gradients: `linear-gradient(135deg, #667eea, #764ba2)` → `linear-gradient(135deg, var(--accent-primary), var(--accent-secondary))`
|
|
113
|
+
|
|
114
|
+
**Exceptions — do NOT replace colors in:**
|
|
115
|
+
- Canvas 2D API calls (`ctx.fillStyle`, `ctx.strokeStyle`, etc.) — CSS variables don't work in Canvas JS
|
|
116
|
+
- Print-specific styles (`@media print`) — these target white backgrounds and need hardcoded dark-on-light colors
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Rules — What to PRESERVE (do NOT modify)
|
|
121
|
+
|
|
122
|
+
- ALL viewer-panel HTML content (games, presentations, tools, dashboards, etc.)
|
|
123
|
+
- ALL page-specific JavaScript (game logic, presentation logic, keyboard handlers, etc.)
|
|
124
|
+
- ALL page-specific CSS (styles for custom classes not in the shared list above)
|
|
125
|
+
- Chat message history in `.chat-messages`
|
|
126
|
+
- `<div id="thoughts">` content
|
|
127
|
+
- External CDN script tags (`<script src="...">`)
|
|
128
|
+
- The `loadingOverlay` element (just ensure it's inside `.viewer-panel`)
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Viewer Panel Overrides
|
|
133
|
+
|
|
134
|
+
The theme sets `.viewer-panel` to `justify-content: center; align-items: center; overflow: hidden`. Pages with **scrollable or top-aligned content** (dashboards, lists, tabs, tables) need these overrides in their page-specific `<style>`:
|
|
135
|
+
|
|
136
|
+
```css
|
|
137
|
+
.viewer-panel {
|
|
138
|
+
justify-content: flex-start;
|
|
139
|
+
align-items: stretch;
|
|
140
|
+
overflow-y: auto;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Add this override when the viewer-panel contains content that should scroll or align to the top.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## V2 Page Structure Reference
|
|
149
|
+
|
|
150
|
+
```html
|
|
151
|
+
<!DOCTYPE html>
|
|
152
|
+
<html lang="en">
|
|
153
|
+
<head>
|
|
154
|
+
<meta charset="UTF-8">
|
|
155
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
156
|
+
<title>SynthOS - Page Title</title>
|
|
157
|
+
<script src="/api/theme-info.js"></script>
|
|
158
|
+
<link rel="stylesheet" href="/api/theme.css">
|
|
159
|
+
<style>
|
|
160
|
+
/* Only page-specific styles here */
|
|
161
|
+
</style>
|
|
162
|
+
</head>
|
|
163
|
+
<body>
|
|
164
|
+
<div class="chat-panel">
|
|
165
|
+
<div class="chat-header">SynthOS</div>
|
|
166
|
+
<div class="chat-messages" id="chatMessages">
|
|
167
|
+
<!-- chat messages preserved -->
|
|
168
|
+
</div>
|
|
169
|
+
<div class="link-group">
|
|
170
|
+
<a href="#" id="saveLink">Save</a>
|
|
171
|
+
<a href="/pages" id="pagesLink">Pages</a>
|
|
172
|
+
<a href="#" id="resetLink">Reset</a>
|
|
173
|
+
</div>
|
|
174
|
+
<form action="/" method="POST" id="chatForm">
|
|
175
|
+
<input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message...">
|
|
176
|
+
<button type="submit" class="chat-submit">Send</button>
|
|
177
|
+
</form>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="viewer-panel" id="viewerPanel">
|
|
180
|
+
<!-- page content preserved -->
|
|
181
|
+
<div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div>
|
|
182
|
+
</div>
|
|
183
|
+
<div id="thoughts" style="display: none;">...</div>
|
|
184
|
+
<script>
|
|
185
|
+
/* Only page-specific JS here */
|
|
186
|
+
</script>
|
|
187
|
+
</body>
|
|
188
|
+
</html>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Output format
|
|
192
|
+
|
|
193
|
+
Return ONLY the complete migrated HTML. No markdown fences, no explanation, no commentary. Just the raw HTML starting with `<!DOCTYPE html>`.
|