synthos 0.9.0 → 0.10.1

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 (118) hide show
  1. package/default-pages/neon_asteroids/page.html +2 -21
  2. package/default-pages/oregon_trail/page.html +3 -19
  3. package/default-pages/solar_explorer/page.html +1 -1
  4. package/default-pages/western_cities_1850/page.html +2 -2
  5. package/dist/agents/a2a/a2aProvider.d.ts +3 -0
  6. package/dist/agents/discovery.d.ts +30 -0
  7. package/dist/agents/openclaw/openclawProvider.d.ts +3 -0
  8. package/dist/agents/types.d.ts +64 -0
  9. package/dist/connectors/index.d.ts +3 -0
  10. package/dist/connectors/types.d.ts +84 -0
  11. package/dist/customizer/Customizer.d.ts +5 -0
  12. package/dist/customizer/Customizer.d.ts.map +1 -1
  13. package/dist/customizer/Customizer.js +10 -0
  14. package/dist/customizer/Customizer.js.map +1 -1
  15. package/dist/customizer/index.d.ts +4 -0
  16. package/dist/index.d.ts +9 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/init.d.ts +2 -0
  21. package/dist/init.d.ts.map +1 -1
  22. package/dist/init.js +71 -37
  23. package/dist/init.js.map +1 -1
  24. package/dist/migrations.d.ts +12 -0
  25. package/dist/models/chainOfThought.d.ts +12 -0
  26. package/dist/models/fireworksai.d.ts +30 -0
  27. package/dist/models/logCompletePrompt.d.ts +3 -0
  28. package/dist/models/providers.d.ts +8 -0
  29. package/dist/models/utils.d.ts +6 -0
  30. package/dist/pages.d.ts +12 -11
  31. package/dist/pages.d.ts.map +1 -1
  32. package/dist/pages.js +94 -66
  33. package/dist/pages.js.map +1 -1
  34. package/dist/scripts.d.ts +15 -0
  35. package/dist/service/createCompletePrompt.d.ts +6 -0
  36. package/dist/service/createCompletePrompt.d.ts.map +1 -1
  37. package/dist/service/createCompletePrompt.js +2 -2
  38. package/dist/service/createCompletePrompt.js.map +1 -1
  39. package/dist/service/debugLog.d.ts +11 -0
  40. package/dist/service/generateImage.d.ts +32 -0
  41. package/dist/service/index.d.ts +8 -0
  42. package/dist/service/modelInstructions.d.ts +7 -0
  43. package/dist/service/requiresSettings.d.ts +4 -0
  44. package/dist/service/requiresSettings.d.ts.map +1 -1
  45. package/dist/service/requiresSettings.js +3 -3
  46. package/dist/service/requiresSettings.js.map +1 -1
  47. package/dist/service/server.d.ts +5 -0
  48. package/dist/service/useAgentRoutes.js +12 -12
  49. package/dist/service/useAgentRoutes.js.map +1 -1
  50. package/dist/service/useApiRoutes.d.ts +5 -0
  51. package/dist/service/useApiRoutes.d.ts.map +1 -1
  52. package/dist/service/useApiRoutes.js +74 -60
  53. package/dist/service/useApiRoutes.js.map +1 -1
  54. package/dist/service/useConnectorRoutes.d.ts +4 -0
  55. package/dist/service/useConnectorRoutes.js +11 -11
  56. package/dist/service/useConnectorRoutes.js.map +1 -1
  57. package/dist/service/useDataRoutes.d.ts +4 -0
  58. package/dist/service/useDataRoutes.d.ts.map +1 -1
  59. package/dist/service/useDataRoutes.js +13 -10
  60. package/dist/service/useDataRoutes.js.map +1 -1
  61. package/dist/service/useFileRoutes.d.ts.map +1 -1
  62. package/dist/service/useFileRoutes.js +13 -13
  63. package/dist/service/useFileRoutes.js.map +1 -1
  64. package/dist/service/usePageRoutes.d.ts +6 -0
  65. package/dist/service/usePageRoutes.d.ts.map +1 -1
  66. package/dist/service/usePageRoutes.js +54 -38
  67. package/dist/service/usePageRoutes.js.map +1 -1
  68. package/dist/service/useSharedDataRoutes.d.ts.map +1 -1
  69. package/dist/service/useSharedDataRoutes.js +13 -10
  70. package/dist/service/useSharedDataRoutes.js.map +1 -1
  71. package/dist/service/useSharedFileRoutes.d.ts.map +1 -1
  72. package/dist/service/useSharedFileRoutes.js +13 -13
  73. package/dist/service/useSharedFileRoutes.js.map +1 -1
  74. package/dist/settings.d.ts +4 -3
  75. package/dist/settings.d.ts.map +1 -1
  76. package/dist/settings.js +11 -10
  77. package/dist/settings.js.map +1 -1
  78. package/dist/storage/FsStorageProvider.d.ts +25 -0
  79. package/dist/storage/FsStorageProvider.d.ts.map +1 -0
  80. package/dist/storage/FsStorageProvider.js +103 -0
  81. package/dist/storage/FsStorageProvider.js.map +1 -0
  82. package/dist/storage/StorageProvider.d.ts +31 -0
  83. package/dist/storage/StorageProvider.d.ts.map +1 -0
  84. package/dist/storage/StorageProvider.js +3 -0
  85. package/dist/storage/StorageProvider.js.map +1 -0
  86. package/dist/storage/index.d.ts +3 -0
  87. package/dist/storage/index.d.ts.map +1 -0
  88. package/dist/storage/index.js +6 -0
  89. package/dist/storage/index.js.map +1 -0
  90. package/dist/synthos-cli.d.ts +2 -0
  91. package/dist/themes.d.ts.map +1 -1
  92. package/dist/themes.js +42 -18
  93. package/dist/themes.js.map +1 -1
  94. package/package.json +1 -1
  95. package/src/builders/anthropic.ts +5 -5
  96. package/src/customizer/Customizer.ts +12 -0
  97. package/src/index.ts +2 -1
  98. package/src/init.ts +78 -42
  99. package/src/models/providers.ts +2 -2
  100. package/src/pages.ts +98 -67
  101. package/src/service/createCompletePrompt.ts +3 -2
  102. package/src/service/requiresSettings.ts +4 -3
  103. package/src/service/useAgentRoutes.ts +12 -12
  104. package/src/service/useApiRoutes.ts +76 -61
  105. package/src/service/useConnectorRoutes.ts +11 -11
  106. package/src/service/useDataRoutes.ts +13 -10
  107. package/src/service/useFileRoutes.ts +14 -13
  108. package/src/service/usePageRoutes.ts +42 -40
  109. package/src/service/useSharedDataRoutes.ts +13 -10
  110. package/src/service/useSharedFileRoutes.ts +14 -13
  111. package/src/settings.ts +12 -10
  112. package/src/storage/FsStorageProvider.ts +87 -0
  113. package/src/storage/StorageProvider.ts +34 -0
  114. package/src/storage/index.ts +2 -0
  115. package/src/themes.ts +44 -18
  116. package/tests/builders.spec.ts +2 -2
  117. package/tests/pages.spec.ts +54 -84
  118. package/tests/providers.spec.ts +1 -1
@@ -136,16 +136,7 @@
136
136
  <p><strong>SynthOS:</strong> <b>NEON ASTEROIDS</b> &mdash; Destroy asteroids, dodge saucers, collect power-ups. Controls: <b>WASD/Arrows</b> to move, <b>Space</b> to fire, <b>H</b> for hyperspace, <b>P</b> to pause. Gamepad supported. Up to 4 players in Pass &amp; Play mode.</p>
137
137
  <p>Want to build your own retro game? Start from the <a href="/retro_game_starter">Retro Game Starter</a> — it gives you a ready-made canvas, game loop, and input handling so you can jump straight into designing your game.</p>
138
138
  </div>
139
- <div class="chat-message"><p><strong>User:</strong> Integrate sound effects from the uploaded effects.json manifest into the game — laser fire, explosions, thrust, hyperspace, power-ups, saucer alerts, menu navigation, and ambient space sounds.</p></div><div class="chat-message"><p><strong>SynthOS:</strong> Sound effects integrated! Here's what I added:
140
- <br>• <b>Laser Fire</b> — plays each time you shoot
141
- <br>• <b>Asteroid Explosion</b> — plays when asteroids are destroyed
142
- <br>• <b>Ship Thrust</b> — loops while you're thrusting, stops when you release
143
- <br>• <b>Hyperspace Jump</b> — plays on teleport
144
- <br>• <b>Power-Up Collect</b> — plays when you pick up any power-up
145
- <br>• <b>Saucer Alert</b> — plays when an enemy saucer spawns
146
- <br>• <b>Menu Navigate</b> — plays when moving through menu options
147
- <br>• <b>Ambient Space</b> — three ambient tracks randomly cycle as background atmosphere during gameplay
148
- <br><br>All sounds load asynchronously on page load. The ambient soundscape starts when gameplay begins and stops on game over or return to menu. Close the chat panel and start a mission to hear them!</p></div><div class="chat-message"><p><strong>User:</strong> the sound effects aren't playing</p></div><div class="chat-message"><p><strong>SynthOS:</strong> Let me check the sound system. I've added error handling to diagnose the issue. Open your browser's console (F12) and look for messages about sound loading.<br><br>Common issues:<br>• <b>Missing manifest</b> — The effects.json file needs to be uploaded to this page's file storage<br>• <b>Missing audio files</b> — Each sound referenced in effects.json must also be uploaded<br>• <b>Browser autoplay policy</b> — Some browsers block audio until user interaction<br><br>To fix:<br>1. Make sure effects.json is uploaded via the Files API<br>2. Upload all referenced .mp3/.ogg files<br>3. Check the console for specific error messages<br><br>The sound system will now log detailed loading info to help debug!</p></div><div class="chat-message"><p><strong>User:</strong> Fix the JavaScript errors — SyntaxError: Unexpected end of input and TypeError: Cannot read properties of null.</p></div><div class="chat-message"><p><strong>SynthOS:</strong> Found and fixed the bug! The <code>stopAmbient()</code> function was missing its closing brace <code>}</code>, which caused a SyntaxError that prevented the entire game script from parsing. This cascaded into the null reference error in <code>gameLoop()</code>. The game should now load and run correctly.</p></div><div class="chat-message"><p><strong>User:</strong> Fix the JavaScript error: SyntaxError: Identifier 'sfx' has already been declared</p></div><div class="chat-message"><p><strong>SynthOS:</strong> Fixed! The issue was that the inline game script used <code>const</code> and <code>let</code> for top-level variable declarations. Since <code>retro-game.js</code> (the library) likely declares some of the same identifiers, using <code>const</code>/<code>let</code> causes a "already been declared" error because they don't allow redeclaration in the same scope. I've changed all top-level <code>const</code> and <code>let</code> declarations to <code>var</code>, which allows redeclaration without errors. The game should now load and run correctly.</p></div><div class="save-line" data-locked="true"><span class="save-line-label">Saved</span></div></div>
139
+ </div>
149
140
 
150
141
  <form action="/" method="POST" id="chatForm" data-locked="true">
151
142
  <textarea class="chat-input" id="chatInput" name="message" rows="2" placeholder="Type a message..." data-locked="true"></textarea>
@@ -246,17 +237,7 @@
246
237
  </div>
247
238
  </div>
248
239
  <div id="instructions" style="display: none;" data-locked="true"></div>
249
- <div id="thoughts" style="display: none;" data-locked="true">User reports a SyntaxError: "Identifier 'sfx' has already been declared". This means there are two script blocks both declaring `const sfx = ...`. Looking at the page, I see:
250
- 1. The retro-game.js library is loaded via `<script src="/static/retro-game.js">` (node 211)
251
- 2. The inline script (node 212) declares `const sfx = RetroGame.createSoundEffects();`
252
-
253
- The retro-game.js library likely also declares or exports an `sfx` variable, OR there's a duplicate declaration somewhere. Since the error is at position 1:27863 which is a very high column number, it's likely in the inline script block.
254
-
255
- Actually, looking more carefully - the issue is that `retro-game.js` (the library) probably injects or declares `sfx` as well. Or perhaps the page was saved with duplicate script blocks.
256
-
257
- The fix: Change `const sfx` to `var sfx` so it can be redeclared, or wrap the sound effects code to avoid the conflict. Actually, the better approach is to check if there's a duplicate. Since I can only see one inline script block (node 212), the conflict must be with something in retro-game.js.
258
-
259
- Let me change `const sfx` to use a different variable name or use `var` instead, and also change all other `const` declarations at the top level to `var` to avoid similar issues if the script somehow gets evaluated twice. Actually, the simplest fix is to just use `var` for the sfx declaration since `var` allows redeclaration in the same scope.</script></div>
240
+ <div id="thoughts" style="display: none;" data-locked="true"></div>
260
241
  <script src="/static/retro-game.js"></script>
261
242
  <script id="asteroids-game">
262
243
  RetroGame.injectCSS();
@@ -22,31 +22,15 @@
22
22
  <div class="chat-panel" data-locked="true">
23
23
  <div class="chat-header" data-locked="true"><span>Page Builder</span><button class="chat-header-close" id="builderClose" aria-label="Close builder" data-locked="true">&times;</button></div>
24
24
  <div class="chat-messages" id="chatMessages" data-locked="true">
25
- <div class="chat-message" id="defaultGreeting"><p><strong>SynthOS:</strong> What can I create for you? Ask "what can you do?" or "how does this work?" to learn more. Remember to save often!</p></div>
26
- <div class="chat-message"><p><strong>User:</strong> create a map of the united states</p></div><div class="chat-message"><p><strong>SynthOS:</strong> Here's an interactive map of the United States! Hover over any state to see its name. The map is built with D3.js and uses an Albers USA projection that includes Alaska and Hawaii.</p></div><div class="chat-message"><p><strong>User:</strong> now in a second layer can you overlay that with a map of the usa circa 1850s</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've overlaid the modern map with an 1850s historical layer! The overlay shows the political divisions of the United States around 1850 (after the Compromise of 1850):</p><ul><li><strong style="color:#2e7d32;">Green</strong> — States admitted to the Union by 1850</li><li><strong style="color:#e65100;">Orange</strong> — Organized territories</li><li><strong style="color:#8d6e63;">Brown</strong> — Unorganized territory</li></ul><p>You can toggle the historical overlay on and off with the button in the top-right corner. The modern state boundaries show through underneath for reference.</p></div><div class="chat-message"><p><strong>User:</strong> remove the current state boundaries and draw new boundaries for how the territories were organized</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've replaced the modern state boundaries with historically-grouped 1850s territorial boundaries. The map now shows the approximate political divisions of the United States circa 1850, with internal state lines dissolved within each territory:</p><ul><li><strong style="color:#2e7d32;">Green</strong> — Individual states (31 states admitted by 1850)</li><li><strong style="color:#e65100;">Orange</strong> — Oregon Territory, Minnesota Territory, Utah Territory, New Mexico Territory</li><li><strong style="color:#8d6e63;">Brown</strong> — Unorganized Territory &amp; Indian Territory</li></ul><p>Note: Since this uses modern state shapes as approximations, the boundaries aren't perfectly historically accurate (e.g., territories that split modern states), but it gives a good sense of how the country was organized. Hover over any region to see its 1850s designation.</p></div><div class="chat-message"><p><strong>User:</strong> now overlay that with the oregon trail</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've overlaid the Oregon Trail on the 1850s map! The trail is shown as a <strong style="color:#d32f2f;">red dashed line</strong> running from <strong>Independence, Missouri</strong> to <strong>Oregon City, Oregon</strong> — roughly 2,000 miles.</p><p>Key stops along the trail are marked with dots and labels:</p><ul><li><strong>Independence, MO</strong> — the main jumping-off point</li><li><strong>Fort Kearny</strong> — first major military outpost</li><li><strong>Chimney Rock</strong> — famous landmark</li><li><strong>Fort Laramie</strong> — key resupply point</li><li><strong>Independence Rock</strong> — "Register of the Desert"</li><li><strong>South Pass</strong> — crossing the Continental Divide</li><li><strong>Fort Bridger</strong> — trading post</li><li><strong>Fort Hall</strong> — Hudson's Bay Company post</li><li><strong>Fort Boise</strong> — another HBC post</li><li><strong>The Dalles</strong> — end of the overland route</li><li><strong>Oregon City</strong> — final destination</li></ul><p>Hover over any stop for its name. The trail follows the approximate historical route through the Platte River valley, over the Rockies at South Pass, and along the Snake River into Oregon.</p></div><div class="chat-message"><p><strong>User:</strong> create a detail card that tells me facts about key stops along the way</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've added an interactive detail card! Click on any trail stop marker on the map to see historical facts about that location, including when it was established, its elevation, who used it, and why it mattered to Oregon Trail emigrants. Click the × button or click elsewhere to dismiss the card.</p></div><div class="chat-message"><p><strong>User:</strong> can you add an AI powered chat interface to that card that lets me ask questions relative to that location and the journey as a whole. the target audience should be 8-12 year olds. track the last 10 turns for follow up questions. reorganize the card if you need to</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've added an AI-powered chat to the detail card! Here's what's new:</p><ul><li><strong>Two tabs</strong> — "📋 Facts" shows the historical info, and "💬 Ask Me!" opens the chat</li><li><strong>Meet Dusty 🤠</strong> — your friendly trail guide who answers questions in fun, kid-friendly language (perfect for ages 8–12)</li><li><strong>Suggested questions</strong> — each stop has starter questions to tap, or kids can type their own</li><li><strong>Conversation memory</strong> — Dusty remembers the last 10 exchanges so kids can ask follow-up questions</li><li><strong>Per-stop context</strong> — switching to a new stop resets the chat with fresh context about that location</li></ul><p>Click any trail stop, then hit the "Ask Me!" tab to start chatting with Dusty!</p></div></div>
25
+ <div class="chat-message" id="defaultGreeting"><p><strong>SynthOS:</strong> Welcome to the <strong>Oregon Trail</strong> an interactive 1850s map with the Oregon Trail overlaid. Click any trail stop to see historical facts and chat with Dusty, your AI trail guide!</p></div>
26
+ </div>
27
27
  <form action="/" method="POST" id="chatForm" data-locked="true">
28
28
  <textarea class="chat-input" id="chatInput" name="message" rows="2" placeholder="Type a message..." data-locked="true"></textarea>
29
29
  </form>
30
30
  </div>
31
31
  <div class="viewer-panel" id="viewerPanel"><div id="us-map-container"><div id="us-map-header">United States — Circa 1850 — with Oregon Trail</div><div id="us-map-svg-wrap"><div id="hist-legend"><div style="font-weight:600;margin-bottom:6px;">Circa 1850</div><div class="legend-item"><div class="legend-swatch" style="background:rgba(46,125,50,0.6);border:1px solid #1b5e20;"></div><span>States (31)</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(230,81,0,0.55);border:1px solid #bf360c;"></div><span>Oregon Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(255,152,0,0.55);border:1px solid #e65100;"></div><span>Minnesota Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(255,111,0,0.5);border:1px solid #bf360c;"></div><span>Utah Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(239,108,0,0.55);border:1px solid #bf360c;"></div><span>New Mexico Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(141,110,99,0.5);border:1px solid #4e342e;"></div><span>Unorganized Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(121,85,72,0.55);border:1px solid #3e2723;"></div><span>Indian Territory</span></div><div style="border-top:1px solid var(--border-color);margin-top:6px;padding-top:6px;"></div><div class="legend-item"><div class="legend-swatch" style="background:#d32f2f;border:1px solid #b71c1c;border-radius:50%;"></div><span style="font-weight:600;">Oregon Trail</span></div></div><div id="trail-detail-card"><div class="card-header"><div><h3 id="card-title"></h3><div class="card-subtitle" id="card-subtitle"></div></div><button class="card-close" id="card-close-btn" aria-label="Close">×</button></div><div class="card-tabs"><button class="card-tab active" data-tab="facts"><span class="card-tab-icon">📋</span>Facts</button><button class="card-tab" data-tab="chat"><span class="card-tab-icon">💬</span>Ask Me!</button></div><div class="tab-content"><div class="tab-pane facts-pane active" id="facts-pane"><div id="card-body"></div></div><div class="tab-pane chat-pane" id="chat-pane"><div class="chat-messages-area" id="trail-chat-messages"><div class="chat-welcome"><span class="welcome-emoji">🤠</span>Howdy, explorer! <strong>Click a trail stop</strong> and ask me anything about life on the Oregon Trail!</div></div><div class="suggested-questions" id="trail-suggested-q"></div><div class="chat-input-area"><input type="text" class="chat-input-field" id="trail-chat-input" placeholder="Ask me anything..." autocomplete="off"><button class="chat-send-btn" id="trail-chat-send" aria-label="Send">➤</button></div></div></div></div></div><div id="map-tooltip"></div></div><div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div></div>
32
32
  <div id="instructions" style="display: none;" data-locked="true"></div>
33
- <div id="thoughts" style="display: none;" data-locked="true">User wants an AI-powered chat interface inside the trail detail card so kids (8-12) can ask questions about each stop and the Oregon Trail journey. I need to:
34
-
35
- 1. Reorganize the detail card to have tabs or sections - facts + chat
36
- 2. Add a chat input and message area inside the card
37
- 3. Use synthos.generate.completion() to power the AI responses
38
- 4. Track last 10 conversation turns for context
39
- 5. Style it kid-friendly
40
- 6. The card needs to be taller/scrollable to accommodate both facts and chat
41
-
42
- Plan:
43
- - Restructure the card to have two tabs: "Facts" and "Ask Me!"
44
- - The chat tab has a scrollable message area and input
45
- - Store conversation history per stop (or globally with stop context)
46
- - Use completion API with a kid-friendly system prompt
47
- - Track last 10 turns in a JS array
48
-
49
- I'll update the CSS, the card HTML structure, and the JS to handle all of this.</div>
33
+ <div id="thoughts" style="display: none;" data-locked="true"></div>
50
34
  <script id="idle-animation">function hideIdleAnimation(){const idleContainer=document.getElementById("idleAnimation");idleContainer&&(idleContainer.classList.add("hidden"),setTimeout(()=>{idleContainer.style.display="none"},1e3))}function showIdleAnimation(){const idleContainer=document.getElementById("idleAnimation");idleContainer&&(idleContainer.style.display="block",setTimeout(()=>{idleContainer.classList.remove("hidden")},10))}</script>
51
35
  <button class="chat-toggle" aria-label="Toggle chat panel">
52
36
  <span class="chat-toggle-dots">
@@ -589,7 +589,7 @@
589
589
  </div>
590
590
  </div></div>
591
591
  <div id="instructions" style="display: none;" data-locked="true"></div>
592
- <div id="thoughts" style="display: none;" data-locked="true">U</div>
592
+ <div id="thoughts" style="display: none;" data-locked="true"></div>
593
593
  <script id="solar-sim">
594
594
  const container = document.getElementById("solarSystem");
595
595
  const canvas = document.createElement("canvas");
@@ -31,13 +31,13 @@
31
31
  <li><strong>Resource &amp; agriculture map</strong> — Show where key crops, minerals, and natural resources were concentrated</li>
32
32
  </ul>
33
33
  Just tell me what you'd like to explore!</p></div>
34
- <div class="chat-message"><p><strong>User:</strong> Add all of the major towns or cities out west in 1850 with a styled detail card that shows facts about each.</p></div><div class="chat-message"><p><strong>SynthOS:</strong> I've added <strong>18 major western cities and towns</strong> from the 1850s era to the map! Each one appears as a glowing marker dot with a label. Click any marker to open a detailed card with:</p><ul style="margin-top:8px;padding-left:20px;"><li><strong>📋 Facts tab</strong> — Population, founding date, economy, historical role, and more</li><li><strong>💬 Ask Me tab</strong> — Chat with an AI historian about that specific location</li><li><strong>Suggested questions</strong> — Quick-start prompts tailored to each city</li></ul><p style="margin-top:8px;">Cities include: <em>San Francisco, Sacramento, Salt Lake City, Santa Fe, Portland, Oregon City, Los Angeles, San Diego, Independence, Council Bluffs, St. Joseph, Monterey, Tucson, Olympia, Stockton, El Paso, Astoria,</em> and <em>San Jose</em>. Try zooming in to explore the western regions!</p></div></div> <form action="/" method="POST" id="chatForm" data-locked="true">
34
+ </div> <form action="/" method="POST" id="chatForm" data-locked="true">
35
35
  <textarea class="chat-input" id="chatInput" name="message" rows="2" placeholder="Type a message..." data-locked="true"></textarea>
36
36
  </form>
37
37
  </div>
38
38
  <div class="viewer-panel full-viewer" id="viewerPanel"><div id="us-map-container"><div id="us-map-header">United States — Circa 1850</div><div id="us-map-svg-wrap"><div id="hist-legend"><div style="font-weight:600;margin-bottom:6px;">Circa 1850</div><div class="legend-item"><div class="legend-swatch" style="background:rgba(46,125,50,0.6);border:1px solid #1b5e20;"></div><span>States (31)</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(230,81,0,0.55);border:1px solid #bf360c;"></div><span>Oregon Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(255,152,0,0.55);border:1px solid #e65100;"></div><span>Minnesota Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(255,111,0,0.5);border:1px solid #bf360c;"></div><span>Utah Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(239,108,0,0.55);border:1px solid #bf360c;"></div><span>New Mexico Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(141,110,99,0.5);border:1px solid #4e342e;"></div><span>Unorganized Territory</span></div><div class="legend-item"><div class="legend-swatch" style="background:rgba(121,85,72,0.55);border:1px solid #3e2723;"></div><span>Indian Territory</span></div></div><div id="zoom-controls"><button id="zoom-in-btn" title="Zoom in">+</button><button id="zoom-out-btn" title="Zoom out">−</button><button id="zoom-reset-btn" title="Reset view" style="font-size:0.75rem;">⟲</button></div></div><div id="map-tooltip"></div><div id="detail-card"><div class="card-header"><div><h3 id="card-title"></h3><div class="card-subtitle" id="card-subtitle"></div></div><button class="card-close" id="card-close-btn" aria-label="Close">×</button></div><div class="card-tabs"><button class="card-tab active" data-tab="facts"><span class="card-tab-icon">📋</span>Facts</button><button class="card-tab" data-tab="chat"><span class="card-tab-icon">💬</span>Ask Me</button></div><div class="tab-content"><div class="tab-pane facts-pane active" id="facts-pane"><div id="card-body"></div></div><div class="tab-pane chat-pane" id="chat-pane"><div class="chat-messages-area" id="detail-chat-messages"></div><div class="suggested-questions" id="detail-suggested-q"></div><div class="chat-input-area"><input type="text" class="chat-input-field" id="detail-chat-input" placeholder="Ask me anything..." autocomplete="off"><button class="chat-send-btn" id="detail-chat-send" aria-label="Send">➤</button></div></div></div></div><div id="card-backdrop"></div></div><div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div></div>
39
39
  <div id="instructions" style="display: none;" data-locked="true"></div>
40
- <div id="thoughts" style="display: none;" data-locked="true">User wants major western towns/cities circa 1850 plotted on the map with styled detail cards showing facts. I need to populate the MARKER_DATA array in the detail-card-script with historically accurate western cities from the 1850s era. Key western cities/towns: San Francisco, Sacramento, Salt Lake City, Portland, Oregon City, Santa Fe, Astoria, Los Angeles, San Diego, Monterey, Tucson, El Paso, Independence (MO - gateway), Council Bluffs, Fort Laramie, Sutter's Fort/Sacramento, Yerba Buena/San Francisco, Olympia, etc. I'll focus on the most significant ones. I also need to make sure the detail card positioning works well with the zoom controls. The detail card already has full styling and functionality from the existing CSS and script - I just need to populate MARKER_DATA. Let me also add some cities that were important jumping-off points. I'll update the detail-card-script to include rich MARKER_DATA.</div>
40
+ <div id="thoughts" style="display: none;" data-locked="true"></div>
41
41
  <script id="idle-animation">function hideIdleAnimation(){const idleContainer=document.getElementById("idleAnimation");idleContainer&&(idleContainer.classList.add("hidden"),setTimeout(()=>{idleContainer.style.display="none"},1e3))}function showIdleAnimation(){const idleContainer=document.getElementById("idleAnimation");idleContainer&&(idleContainer.style.display="block",setTimeout(()=>{idleContainer.classList.remove("hidden")},10))}</script>
42
42
  <button class="chat-toggle" aria-label="Toggle chat panel">
43
43
  <span class="chat-toggle-dots">
@@ -0,0 +1,3 @@
1
+ import { AgentProvider } from '../types';
2
+ export declare const a2aProvider: AgentProvider;
3
+ //# sourceMappingURL=a2aProvider.d.ts.map
@@ -0,0 +1,30 @@
1
+ export interface A2ADiscoveryResult {
2
+ name: string;
3
+ description: string;
4
+ url: string;
5
+ iconUrl?: string;
6
+ capabilities?: {
7
+ streaming?: boolean;
8
+ pushNotifications?: boolean;
9
+ };
10
+ skills?: {
11
+ id: string;
12
+ name: string;
13
+ description: string;
14
+ tags: string[];
15
+ }[];
16
+ }
17
+ /**
18
+ * Discover an A2A agent by fetching its agent card from /.well-known/agent-card.json.
19
+ */
20
+ export declare function discoverA2AAgent(url: string): Promise<A2ADiscoveryResult>;
21
+ export interface OpenClawDiscoveryResult {
22
+ name: string;
23
+ verified: boolean;
24
+ }
25
+ /**
26
+ * Verify an OpenClaw gateway is reachable and authenticated by probing
27
+ * the HTTP API (GET /v1/models with Bearer token).
28
+ */
29
+ export declare function discoverOpenClawAgent(url: string, token: string): Promise<OpenClawDiscoveryResult>;
30
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1,3 @@
1
+ import { AgentProvider } from '../types';
2
+ export declare const openclawProvider: AgentProvider;
3
+ //# sourceMappingURL=openclawProvider.d.ts.map
@@ -0,0 +1,64 @@
1
+ export interface AgentConfig {
2
+ id: string;
3
+ url: string;
4
+ name: string;
5
+ description: string;
6
+ iconUrl?: string;
7
+ enabled: boolean;
8
+ provider: 'a2a' | 'openclaw';
9
+ /** Auth token (openclaw only) */
10
+ token?: string;
11
+ /** Default session key for chat (openclaw only, e.g. "agent:main:main") */
12
+ sessionKey?: string;
13
+ capabilities?: {
14
+ streaming?: boolean;
15
+ pushNotifications?: boolean;
16
+ };
17
+ skills?: {
18
+ id: string;
19
+ name: string;
20
+ description: string;
21
+ tags: string[];
22
+ }[];
23
+ /** SSH tunnel config (openclaw only) — spawns an SSH tunnel before WebSocket connection */
24
+ sshTunnel?: {
25
+ enabled: boolean;
26
+ /** Full SSH command, e.g. "ssh -p 22 -N -L 18789:127.0.0.1:43901 root@1.2.3.4" */
27
+ command: string;
28
+ /** Password to pipe when prompted */
29
+ password: string;
30
+ };
31
+ }
32
+ export interface Attachment {
33
+ fileName: string;
34
+ mimeType: string;
35
+ /** base64 for binary, plain string for text */
36
+ content: string;
37
+ }
38
+ export interface ChatMessage {
39
+ role: 'user' | 'assistant';
40
+ content: string;
41
+ timestamp?: number;
42
+ /** Raw provider-specific payload for debugging */
43
+ raw?: unknown;
44
+ }
45
+ export interface AgentResponse {
46
+ kind: 'message' | 'task';
47
+ text?: string;
48
+ raw: unknown;
49
+ taskId?: string;
50
+ status?: string;
51
+ }
52
+ export interface AgentEvent {
53
+ kind: 'text' | 'status' | 'artifact' | 'done' | 'error';
54
+ data: unknown;
55
+ }
56
+ export interface AgentProvider {
57
+ send(agent: AgentConfig, message: string, attachments?: Attachment[]): Promise<AgentResponse>;
58
+ sendStream(agent: AgentConfig, message: string, attachments?: Attachment[]): AsyncIterable<AgentEvent>;
59
+ supportsStreaming(agent: AgentConfig): boolean;
60
+ getHistory?(agent: AgentConfig): Promise<ChatMessage[]>;
61
+ abortChat?(agent: AgentConfig): Promise<void>;
62
+ clearSession?(agent: AgentConfig): Promise<void>;
63
+ }
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { loadConnectorRegistry, getConnectorRegistry } from './registry';
2
+ export type { AuthStrategy, ConnectorField, ConnectorOnboarding, ConnectorJson, ConnectorDefinition, ConnectorConfig, ConnectorOAuthConfig, ConnectorsConfig, ConnectorSummary, ConnectorDetail, ConnectorCallRequest } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,84 @@
1
+ export type AuthStrategy = 'header' | 'bearer' | 'query' | 'oauth2';
2
+ export interface ConnectorField {
3
+ name: string;
4
+ label: string;
5
+ type: 'password' | 'text';
6
+ }
7
+ export interface ConnectorOnboarding {
8
+ url: string;
9
+ steps: string[];
10
+ }
11
+ export interface ConnectorDefinition {
12
+ id: string;
13
+ name: string;
14
+ category: string;
15
+ description: string;
16
+ baseUrl: string;
17
+ authStrategy: AuthStrategy;
18
+ authKey: string;
19
+ fields: ConnectorField[];
20
+ /** Usage hints shown to the LLM — recommended endpoints, default settings, gotchas. */
21
+ hints?: string;
22
+ /** Onboarding instructions — signup URL and steps to get an API key. */
23
+ onboarding?: ConnectorOnboarding;
24
+ /** OAuth2: Authorization endpoint URL. */
25
+ authorizationUrl?: string;
26
+ /** OAuth2: Token exchange endpoint URL. */
27
+ tokenUrl?: string;
28
+ /** OAuth2: Requested scopes. */
29
+ scopes?: string[];
30
+ }
31
+ export interface ConnectorJson {
32
+ id: string;
33
+ name: string;
34
+ category: string;
35
+ description: string;
36
+ baseUrl: string;
37
+ authStrategy: AuthStrategy;
38
+ authKey: string;
39
+ fields: ConnectorField[];
40
+ hints?: string[];
41
+ onboarding?: ConnectorOnboarding;
42
+ authorizationUrl?: string;
43
+ tokenUrl?: string;
44
+ scopes?: string[];
45
+ }
46
+ export interface ConnectorConfig {
47
+ apiKey: string;
48
+ enabled: boolean;
49
+ }
50
+ export interface ConnectorOAuthConfig extends ConnectorConfig {
51
+ accessToken?: string;
52
+ refreshToken?: string;
53
+ expiresAt?: number;
54
+ userId?: string;
55
+ accountName?: string;
56
+ clientId?: string;
57
+ clientSecret?: string;
58
+ }
59
+ export type ConnectorsConfig = Record<string, ConnectorConfig | ConnectorOAuthConfig>;
60
+ export interface ConnectorSummary {
61
+ id: string;
62
+ name: string;
63
+ category: string;
64
+ description: string;
65
+ configured: boolean;
66
+ enabled: boolean;
67
+ }
68
+ export interface ConnectorDetail extends ConnectorDefinition {
69
+ configured: boolean;
70
+ enabled: boolean;
71
+ hasKey: boolean;
72
+ connected?: boolean;
73
+ accountName?: string;
74
+ userId?: string;
75
+ }
76
+ export interface ConnectorCallRequest {
77
+ connector: string;
78
+ method: string;
79
+ path: string;
80
+ headers?: Record<string, string>;
81
+ body?: unknown;
82
+ query?: Record<string, string>;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -1,6 +1,7 @@
1
1
  import { Application } from 'express';
2
2
  import { SynthOSConfig } from '../init';
3
3
  import { ContextSection } from '../builders/types';
4
+ import { StorageProvider } from '../storage';
4
5
  export type RouteInstaller = (config: SynthOSConfig, app: Application) => void;
5
6
  export declare class Customizer {
6
7
  protected disabled: Set<string>;
@@ -13,6 +14,10 @@ export declare class Customizer {
13
14
  protected customTransformInstructions: string[];
14
15
  /** Custom context sections appended to the builder's additional sections. */
15
16
  protected customContextSections: ContextSection[];
17
+ private _storageProvider?;
18
+ /** Storage provider for user-mutable data (pages, settings, themes, uploads).
19
+ * Override in a derived class to swap the storage backend (e.g. Azure Blob). */
20
+ get storageProvider(): StorageProvider;
16
21
  /** Name of the local data folder created in the user's project directory. */
17
22
  get localFolder(): string;
18
23
  /** Folders containing built-in system pages (builder, settings, etc.) */
@@ -1 +1 @@
1
- {"version":3,"file":"Customizer.d.ts","sourceRoot":"","sources":["../../src/customizer/Customizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;AAE/E,qBAAa,UAAU;IACnB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC5C,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,CAAM;IAE7C,6EAA6E;IAC7E,SAAS,CAAC,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IAErD,yEAAyE;IACzE,SAAS,CAAC,2BAA2B,EAAE,MAAM,EAAE,CAAM;IAErD,6EAA6E;IAC7E,SAAS,CAAC,qBAAqB,EAAE,cAAc,EAAE,CAAM;IAKvD,6EAA6E;IAC7E,IAAI,WAAW,IAAI,MAAM,CAExB;IASD,yEAAyE;IACzE,IAAI,oBAAoB,IAAI,MAAM,EAAE,CAEnC;IAED,+DAA+D;IAC/D,IAAI,mBAAmB,IAAI,MAAM,EAAE,CAElC;IAED,8CAA8C;IAC9C,IAAI,oBAAoB,IAAI,MAAM,EAAE,CAEnC;IAED,kFAAkF;IAClF,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAEjC;IAED,oDAAoD;IACpD,IAAI,wBAAwB,IAAI,MAAM,EAAE,CAEvC;IAED,wDAAwD;IACxD,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAEpC;IAED;wFACoF;IACpF,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;0DACsD;IACtD,IAAI,WAAW,IAAI,MAAM,CAExB;IAMD,OAAO,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKjC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMjC,SAAS,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG;QAAE,SAAS,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,IAAI;IAYjG,cAAc,IAAI,cAAc,EAAE;IAMlC,sEAAsE;IACtE,aAAa,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,kCAAkC;IAClC,aAAa,IAAI,MAAM,EAAE;IAMzB,gEAAgE;IAChE,wBAAwB,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAKzD,yCAAyC;IACzC,wBAAwB,IAAI,MAAM,EAAE;IAMpC,mDAAmD;IACnD,kBAAkB,CAAC,GAAG,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAKvD,mCAAmC;IACnC,kBAAkB,IAAI,cAAc,EAAE;CAGzC"}
1
+ {"version":3,"file":"Customizer.d.ts","sourceRoot":"","sources":["../../src/customizer/Customizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;AAE/E,qBAAa,UAAU;IACnB,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC5C,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,CAAM;IAE7C,6EAA6E;IAC7E,SAAS,CAAC,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IAErD,yEAAyE;IACzE,SAAS,CAAC,2BAA2B,EAAE,MAAM,EAAE,CAAM;IAErD,6EAA6E;IAC7E,SAAS,CAAC,qBAAqB,EAAE,cAAc,EAAE,CAAM;IAEvD,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAE3C;qFACiF;IACjF,IAAI,eAAe,IAAI,eAAe,CAKrC;IAKD,6EAA6E;IAC7E,IAAI,WAAW,IAAI,MAAM,CAExB;IASD,yEAAyE;IACzE,IAAI,oBAAoB,IAAI,MAAM,EAAE,CAEnC;IAED,+DAA+D;IAC/D,IAAI,mBAAmB,IAAI,MAAM,EAAE,CAElC;IAED,8CAA8C;IAC9C,IAAI,oBAAoB,IAAI,MAAM,EAAE,CAEnC;IAED,kFAAkF;IAClF,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAEjC;IAED,oDAAoD;IACpD,IAAI,wBAAwB,IAAI,MAAM,EAAE,CAEvC;IAED,wDAAwD;IACxD,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAEpC;IAED;wFACoF;IACpF,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;0DACsD;IACtD,IAAI,WAAW,IAAI,MAAM,CAExB;IAMD,OAAO,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKjC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMjC,SAAS,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG;QAAE,SAAS,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAAG,IAAI;IAYjG,cAAc,IAAI,cAAc,EAAE;IAMlC,sEAAsE;IACtE,aAAa,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,kCAAkC;IAClC,aAAa,IAAI,MAAM,EAAE;IAMzB,gEAAgE;IAChE,wBAAwB,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAKzD,yCAAyC;IACzC,wBAAwB,IAAI,MAAM,EAAE;IAMpC,mDAAmD;IACnD,kBAAkB,CAAC,GAAG,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI;IAKvD,mCAAmC;IACnC,kBAAkB,IAAI,cAAc,EAAE;CAGzC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Customizer = void 0;
4
+ const storage_1 = require("../storage");
4
5
  class Customizer {
5
6
  disabled = new Set();
6
7
  extraRoutes = [];
@@ -10,6 +11,15 @@ class Customizer {
10
11
  customTransformInstructions = [];
11
12
  /** Custom context sections appended to the builder's additional sections. */
12
13
  customContextSections = [];
14
+ _storageProvider;
15
+ /** Storage provider for user-mutable data (pages, settings, themes, uploads).
16
+ * Override in a derived class to swap the storage backend (e.g. Azure Blob). */
17
+ get storageProvider() {
18
+ if (!this._storageProvider) {
19
+ this._storageProvider = new storage_1.FsStorageProvider();
20
+ }
21
+ return this._storageProvider;
22
+ }
13
23
  // --- Local data folder ---
14
24
  // Override in a derived class to change the local project folder name.
15
25
  /** Name of the local data folder created in the user's project directory. */
@@ -1 +1 @@
1
- {"version":3,"file":"Customizer.js","sourceRoot":"","sources":["../../src/customizer/Customizer.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACT,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IAClC,WAAW,GAAqB,EAAE,CAAC;IAE7C,6EAA6E;IACnE,gBAAgB,GAAwB,EAAE,CAAC;IAErD,yEAAyE;IAC/D,2BAA2B,GAAa,EAAE,CAAC;IAErD,6EAA6E;IACnE,qBAAqB,GAAqB,EAAE,CAAC;IAEvD,4BAA4B;IAC5B,uEAAuE;IAEvE,6EAA6E;IAC7E,IAAI,WAAW;QACX,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,qEAAqE;IACrE,oEAAoE;IACpE,uEAAuE;IACvE,sEAAsE;IACtE,uCAAuC;IAEvC,yEAAyE;IACzE,IAAI,oBAAoB;QACpB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,+DAA+D;IAC/D,IAAI,mBAAmB;QACnB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,8CAA8C;IAC9C,IAAI,oBAAoB;QACpB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,kFAAkF;IAClF,IAAI,kBAAkB;QAClB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,oDAAoD;IACpD,IAAI,wBAAwB;QACxB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,wDAAwD;IACxD,IAAI,qBAAqB;QACrB,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED;wFACoF;IACpF,IAAI,aAAa;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;0DACsD;IACtD,IAAI,WAAW;QACX,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,gCAAgC;IAChC,2DAA2D;IAC3D,8CAA8C;IAE9C,OAAO,CAAC,GAAG,MAAgB;QACvB,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,GAAG,MAAgB;QACtB,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,KAAa;QACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,wBAAwB;IAExB,SAAS,CAAC,GAAG,UAA6E;QACtF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;YAC5B,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM;gBACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;aACtD;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,sBAAsB;IAEtB,sEAAsE;IACtE,aAAa,CAAC,GAAG,KAAe;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kCAAkC;IAClC,aAAa;QACT,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,wCAAwC;IAExC,gEAAgE;IAChE,wBAAwB,CAAC,GAAG,YAAsB;QAC9C,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,yCAAyC;IACzC,wBAAwB;QACpB,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC5C,CAAC;IAED,kCAAkC;IAElC,mDAAmD;IACnD,kBAAkB,CAAC,GAAG,QAA0B;QAC5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mCAAmC;IACnC,kBAAkB;QACd,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;CACJ;AAhJD,gCAgJC"}
1
+ {"version":3,"file":"Customizer.js","sourceRoot":"","sources":["../../src/customizer/Customizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { Customizer, RouteInstaller } from './Customizer';
2
+ import { Customizer } from './Customizer';
3
+ export declare const customizer: Customizer;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,9 @@
1
+ export * from './service';
2
+ export * from './files';
3
+ export * from './init';
4
+ export * from './pages';
5
+ export * from './scripts';
6
+ export * from './settings';
7
+ export * from './customizer';
8
+ export * from './storage';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -21,4 +21,5 @@ __exportStar(require("./pages"), exports);
21
21
  __exportStar(require("./scripts"), exports);
22
22
  __exportStar(require("./settings"), exports);
23
23
  __exportStar(require("./customizer"), exports);
24
+ __exportStar(require("./storage"), exports);
24
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,4CAA0B;AAC1B,6CAA2B;AAC3B,+CAA6B;AAC7B,4CAA0B"}
package/dist/init.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Customizer } from './customizer';
2
+ import { StorageProvider } from './storage';
2
3
  export interface SynthOSConfig {
3
4
  localFolder: string;
4
5
  pagesFolder: string;
@@ -9,6 +10,7 @@ export interface SynthOSConfig {
9
10
  staticFilesFolders: string[];
10
11
  serviceConnectorsFolders: string[];
11
12
  requiredPages: string[];
13
+ storageProvider: StorageProvider;
12
14
  debug: boolean;
13
15
  debugPageUpdates: boolean;
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAUD,wBAAsB,YAAY,CAC9B,WAAW,SAAa,EACxB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EACzD,UAAU,CAAC,EAAE,UAAU,GACxB,OAAO,CAAC,aAAa,CAAC,CAkCxB;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CvG"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAqB,MAAM,WAAW,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAUD,wBAAsB,YAAY,CAC9B,WAAW,SAAa,EACxB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EACzD,UAAU,CAAC,EAAE,UAAU,GACxB,OAAO,CAAC,aAAa,CAAC,CAmCxB;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,mBAAmB,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDvG"}