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
@@ -1,5 +1,6 @@
1
1
  import { ModelEntry } from './models';
2
2
  import { AgentConfig } from './agents';
3
+ import { SynthOSConfig } from './init';
3
4
  export interface ServiceConfig {
4
5
  apiKey: string;
5
6
  enabled: boolean;
@@ -38,7 +39,7 @@ export declare const DefaultSettings: SettingsV2;
38
39
  * Find a model entry by its `use` field. Falls back to default if not found.
39
40
  */
40
41
  export declare function getModelEntry(settings: SettingsV2, use: 'builder' | 'chat'): ModelEntry;
41
- export declare function hasConfiguredSettings(folder: string): Promise<boolean>;
42
- export declare function loadSettings(folder: string): Promise<SettingsV2>;
43
- export declare function saveSettings(folder: string, settings: Partial<SettingsV2>): Promise<void>;
42
+ export declare function hasConfiguredSettings(config: SynthOSConfig): Promise<boolean>;
43
+ export declare function loadSettings(config: SynthOSConfig): Promise<SettingsV2>;
44
+ export declare function saveSettings(config: SynthOSConfig, settings: Partial<SettingsV2>): Promise<void>;
44
45
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAgC,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAGpE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,eAAe,EAAE,UA0B7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAIvF;AAiDD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5E;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BtE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/F"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAgC,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAIvC,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAGpE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,eAAe,EAAE,UA0B7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAIvF;AAiDD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAUnF;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAgC7E;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtG"}
package/dist/settings.js CHANGED
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.saveSettings = exports.loadSettings = exports.hasConfiguredSettings = exports.getModelEntry = exports.DefaultSettings = void 0;
7
- const files_1 = require("./files");
8
7
  const path_1 = __importDefault(require("path"));
9
8
  const models_1 = require("./models");
10
9
  let _settings;
@@ -89,8 +88,8 @@ function migrateV1toV2(raw) {
89
88
  services: v1.services,
90
89
  };
91
90
  }
92
- async function hasConfiguredSettings(folder) {
93
- const settings = await loadSettings(folder);
91
+ async function hasConfiguredSettings(config) {
92
+ const settings = await loadSettings(config);
94
93
  const builder = getModelEntry(settings, 'builder');
95
94
  if (typeof builder.configuration.apiKey !== 'string' || builder.configuration.apiKey.length == 0) {
96
95
  return false;
@@ -101,18 +100,19 @@ async function hasConfiguredSettings(folder) {
101
100
  return true;
102
101
  }
103
102
  exports.hasConfiguredSettings = hasConfiguredSettings;
104
- async function loadSettings(folder) {
103
+ async function loadSettings(config) {
104
+ const sp = config.storageProvider;
105
105
  if (_settings == undefined) {
106
- const filename = path_1.default.join(folder, 'settings.json');
107
- if (await (0, files_1.checkIfExists)(filename)) {
106
+ const filename = path_1.default.join(config.pagesFolder, 'settings.json');
107
+ if (await sp.checkIfExists(filename)) {
108
108
  try {
109
- const raw = JSON.parse(await (0, files_1.loadFile)(filename));
109
+ const raw = JSON.parse(await sp.loadFile(filename));
110
110
  if (!raw.version) {
111
111
  // V1 file — migrate
112
112
  console.log('Migrating settings.json from v1 to v2...');
113
113
  const migrated = migrateV1toV2(raw);
114
114
  _settings = migrated;
115
- await (0, files_1.saveFile)(filename, JSON.stringify(migrated, null, 4));
115
+ await sp.saveFile(filename, JSON.stringify(migrated, null, 4));
116
116
  }
117
117
  else {
118
118
  _settings = raw;
@@ -133,13 +133,14 @@ async function loadSettings(folder) {
133
133
  return merged;
134
134
  }
135
135
  exports.loadSettings = loadSettings;
136
- async function saveSettings(folder, settings) {
136
+ async function saveSettings(config, settings) {
137
+ const sp = config.storageProvider;
137
138
  _settings = { ..._settings, ...settings };
138
139
  if (settings.models) {
139
140
  _settings.models = settings.models;
140
141
  }
141
142
  _settings.version = 2;
142
- await (0, files_1.saveFile)(path_1.default.join(folder, 'settings.json'), JSON.stringify(_settings, null, 4));
143
+ await sp.saveFile(path_1.default.join(config.pagesFolder, 'settings.json'), JSON.stringify(_settings, null, 4));
143
144
  }
144
145
  exports.saveSettings = saveSettings;
145
146
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /// <reference types="node" />
2
+ import { StorageProvider } from './StorageProvider';
3
+ /**
4
+ * Default StorageProvider backed by the local filesystem via `fs/promises`.
5
+ * Mirrors the existing logic in `files.ts`.
6
+ */
7
+ export declare class FsStorageProvider implements StorageProvider {
8
+ checkIfExists(filePath: string): Promise<boolean>;
9
+ loadFile(filePath: string): Promise<string>;
10
+ saveFile(filePath: string, content: string): Promise<void>;
11
+ deleteFile(filePath: string): Promise<void>;
12
+ saveBuffer(filePath: string, data: Buffer): Promise<void>;
13
+ loadBuffer(filePath: string): Promise<Buffer>;
14
+ stat(filePath: string): Promise<{
15
+ size: number;
16
+ isFile: boolean;
17
+ }>;
18
+ createReadStream(filePath: string): NodeJS.ReadableStream;
19
+ listFiles(dirPath: string): Promise<string[]>;
20
+ listFolders(dirPath: string): Promise<string[]>;
21
+ ensureFolderExists(dirPath: string): Promise<void>;
22
+ deleteFolder(dirPath: string): Promise<void>;
23
+ copyFolderRecursive(srcPath: string, destPath: string): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=FsStorageProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsStorageProvider.d.ts","sourceRoot":"","sources":["../../src/storage/FsStorageProvider.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAG/C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAKxE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc;IAMnD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO/C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAa9E"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.FsStorageProvider = void 0;
30
+ const fs = __importStar(require("fs/promises"));
31
+ const fs_1 = require("fs");
32
+ const path_1 = __importDefault(require("path"));
33
+ /**
34
+ * Default StorageProvider backed by the local filesystem via `fs/promises`.
35
+ * Mirrors the existing logic in `files.ts`.
36
+ */
37
+ class FsStorageProvider {
38
+ // --- Text file operations ---
39
+ async checkIfExists(filePath) {
40
+ try {
41
+ await fs.access(filePath);
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ async loadFile(filePath) {
49
+ return await fs.readFile(filePath, 'utf8');
50
+ }
51
+ async saveFile(filePath, content) {
52
+ await fs.writeFile(filePath, content, 'utf8');
53
+ }
54
+ async deleteFile(filePath) {
55
+ await fs.unlink(filePath);
56
+ }
57
+ // --- Binary file operations ---
58
+ async saveBuffer(filePath, data) {
59
+ await fs.writeFile(filePath, data);
60
+ }
61
+ async loadBuffer(filePath) {
62
+ return await fs.readFile(filePath);
63
+ }
64
+ async stat(filePath) {
65
+ const s = await fs.stat(filePath);
66
+ return { size: s.size, isFile: s.isFile() };
67
+ }
68
+ createReadStream(filePath) {
69
+ return (0, fs_1.createReadStream)(filePath);
70
+ }
71
+ // --- Directory operations ---
72
+ async listFiles(dirPath) {
73
+ return (await fs.readdir(dirPath)).filter(file => !file.startsWith('.') && file.includes('.'));
74
+ }
75
+ async listFolders(dirPath) {
76
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
77
+ return entries
78
+ .filter(entry => entry.isDirectory() && !entry.name.startsWith('.'))
79
+ .map(entry => entry.name);
80
+ }
81
+ async ensureFolderExists(dirPath) {
82
+ await fs.mkdir(dirPath, { recursive: true });
83
+ }
84
+ async deleteFolder(dirPath) {
85
+ await fs.rm(dirPath, { recursive: true });
86
+ }
87
+ async copyFolderRecursive(srcPath, destPath) {
88
+ await this.ensureFolderExists(destPath);
89
+ const entries = await fs.readdir(srcPath, { withFileTypes: true });
90
+ for (const entry of entries) {
91
+ const src = path_1.default.join(srcPath, entry.name);
92
+ const dest = path_1.default.join(destPath, entry.name);
93
+ if (entry.isDirectory()) {
94
+ await this.copyFolderRecursive(src, dest);
95
+ }
96
+ else {
97
+ await fs.copyFile(src, dest);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ exports.FsStorageProvider = FsStorageProvider;
103
+ //# sourceMappingURL=FsStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FsStorageProvider.js","sourceRoot":"","sources":["../../src/storage/FsStorageProvider.ts"],"names":[],"mappings":"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"}
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=StorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/storage/StorageProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { StorageProvider } from './StorageProvider';
2
+ export { FsStorageProvider } from './FsStorageProvider';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export declare function run(): Promise<void>;
2
+ //# sourceMappingURL=synthos-cli.d.ts.map
@@ -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;AAqBD,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,CAevG;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgBhG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBzE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkChF"}
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
@@ -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 findThemeCssFile(folder, name) {
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);
@@ -45,11 +64,11 @@ async function findThemeCssFile(folder, name) {
45
64
  return best;
46
65
  }
47
66
  async function loadThemeVersion(name, config) {
48
- const local = await findThemeCssFile(userThemesFolder(config), name);
67
+ const local = await findUserThemeCssFile(config, userThemesFolder(config), name);
49
68
  if (local)
50
69
  return local.version;
51
70
  for (const folder of config.defaultThemesFolders) {
52
- const def = await findThemeCssFile(folder, name);
71
+ const def = await findDefaultThemeCssFile(folder, name);
53
72
  if (def)
54
73
  return def.version;
55
74
  }
@@ -57,12 +76,14 @@ async function loadThemeVersion(name, config) {
57
76
  }
58
77
  exports.loadThemeVersion = loadThemeVersion;
59
78
  async function loadThemeInfo(name, config) {
60
- // Check user's local themes first, then fall back to package defaults
79
+ const sp = config.storageProvider;
80
+ // Check user's local themes first (user storage)
61
81
  const localPath = path_1.default.join(userThemesFolder(config), `${name}.json`);
62
- if (await (0, files_1.checkIfExists)(localPath)) {
63
- const raw = await (0, files_1.loadFile)(localPath);
82
+ if (await sp.checkIfExists(localPath)) {
83
+ const raw = await sp.loadFile(localPath);
64
84
  return raw ? JSON.parse(raw) : undefined;
65
85
  }
86
+ // Fall back to package defaults (local fs)
66
87
  const defaultPath = await (0, files_1.findFileInFolders)(config.defaultThemesFolders, `${name}.json`);
67
88
  if (defaultPath) {
68
89
  const raw = await (0, files_1.loadFile)(defaultPath);
@@ -72,14 +93,15 @@ async function loadThemeInfo(name, config) {
72
93
  }
73
94
  exports.loadThemeInfo = loadThemeInfo;
74
95
  async function loadTheme(name, config) {
75
- // Check user's local themes first, then fall back to package defaults
76
- const local = await findThemeCssFile(userThemesFolder(config), name);
96
+ const sp = config.storageProvider;
97
+ // Check user's local themes first (user storage)
98
+ const local = await findUserThemeCssFile(config, userThemesFolder(config), name);
77
99
  if (local) {
78
- return await (0, files_1.loadFile)(local.path);
100
+ return await sp.loadFile(local.path);
79
101
  }
80
- // Search all default theme folders
102
+ // Search all default theme folders (local fs)
81
103
  for (const folder of config.defaultThemesFolders) {
82
- const def = await findThemeCssFile(folder, name);
104
+ const def = await findDefaultThemeCssFile(folder, name);
83
105
  if (def) {
84
106
  return await (0, files_1.loadFile)(def.path);
85
107
  }
@@ -88,18 +110,19 @@ async function loadTheme(name, config) {
88
110
  }
89
111
  exports.loadTheme = loadTheme;
90
112
  async function listThemes(config) {
113
+ const sp = config.storageProvider;
91
114
  const names = new Set();
92
- // Collect from user's local themes folder
115
+ // Collect from user's local themes folder (user storage)
93
116
  const localFolder = userThemesFolder(config);
94
- if (await (0, files_1.checkIfExists)(localFolder)) {
95
- const files = await (0, files_1.listFiles)(localFolder);
117
+ if (await sp.checkIfExists(localFolder)) {
118
+ const files = await sp.listFiles(localFolder);
96
119
  for (const f of files) {
97
120
  const parsed = parseThemeFilename(f);
98
121
  if (parsed)
99
122
  names.add(parsed.name);
100
123
  }
101
124
  }
102
- // Collect from all default theme folders
125
+ // Collect from all default theme folders (local fs)
103
126
  const defaultFiles = await (0, files_1.listFilesFromFolders)(config.defaultThemesFolders);
104
127
  for (const f of defaultFiles) {
105
128
  const parsed = parseThemeFilename(f);
@@ -113,11 +136,12 @@ exports.listThemes = listThemes;
113
136
  * Compare local theme versions against defaults and return themes that need upgrading.
114
137
  */
115
138
  async function getOutdatedThemes(config) {
139
+ const sp = config.storageProvider;
116
140
  const localFolder = userThemesFolder(config);
117
- if (!await (0, files_1.checkIfExists)(localFolder))
141
+ if (!await sp.checkIfExists(localFolder))
118
142
  return [];
119
143
  const defaultFiles = await (0, files_1.listFilesFromFolders)(config.defaultThemesFolders);
120
- const localFiles = await (0, files_1.listFiles)(localFolder);
144
+ const localFiles = await sp.listFiles(localFolder);
121
145
  // Build maps: theme name → highest version
122
146
  const defaultVersions = new Map();
123
147
  for (const f of defaultFiles) {
@@ -1 +1 @@
1
- {"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../src/themes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "synthos",
3
3
  "author": "Steven Ickman",
4
4
  "description": "The Hyper-Personalized App Builder That Turns Everyone into a Programmer.",
5
- "version": "0.9.0",
5
+ "version": "0.10.1",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "synthos",
@@ -54,7 +54,7 @@ export async function classifyRequest(
54
54
  userMessage: string
55
55
  ): Promise<ClassifyResult> {
56
56
  try {
57
- const sonnet = createAnthropicModel({ apiKey, model: 'claude-sonnet-4-5' });
57
+ const sonnet = createAnthropicModel({ apiKey, model: 'claude-sonnet-4-6' });
58
58
  const result = await sonnet({
59
59
  system: { role: 'system', content: CLASSIFIER_SYSTEM_PROMPT },
60
60
  prompt: { role: 'user', content: `<PAGE_HTML>\n${pageHtml}\n\n<USER_MESSAGE>\n${userMessage}` },
@@ -147,14 +147,14 @@ export function createAnthropicBuilder(
147
147
 
148
148
  // Easy changes use Sonnet with default schema (ranged allowed)
149
149
  if (classifyResult.classification === 'easy-change') {
150
- let sonnet: completePrompt = createAnthropicModel({ apiKey: options.apiKey, model: 'claude-sonnet-4-5' });
150
+ let sonnet: completePrompt = createAnthropicModel({ apiKey: options.apiKey, model: 'claude-sonnet-4-6' });
151
151
  if (options.wrapModel) sonnet = options.wrapModel(sonnet);
152
152
  return buildWithModel(sonnet, currentPage, additionalSections, userMessage, userInstructions, name, attachments);
153
153
  }
154
154
 
155
155
  // Medium changes use Sonnet with no ranged writes
156
156
  if (classifyResult.classification === 'medium-change') {
157
- let sonnet: completePrompt = createAnthropicModel({ apiKey: options.apiKey, model: 'claude-sonnet-4-5' });
157
+ let sonnet: completePrompt = createAnthropicModel({ apiKey: options.apiKey, model: 'claude-sonnet-4-6' });
158
158
  if (options.wrapModel) sonnet = options.wrapModel(sonnet);
159
159
  return buildWithModel(sonnet, currentPage, additionalSections, userMessage, userInstructions, name, attachments, noRanged);
160
160
  }
@@ -243,8 +243,8 @@ export async function buildWithModel(
243
243
 
244
244
  function routeLabel(classification: Classification, configuredModel: string): string {
245
245
  if (classification === 'question') return 'classifier (answered inline)';
246
- if (classification === 'easy-change') return 'claude-sonnet-4-5';
247
- if (classification === 'medium-change') return 'claude-sonnet-4-5 (no ranged)';
246
+ if (classification === 'easy-change') return 'claude-sonnet-4-6';
247
+ if (classification === 'medium-change') return 'claude-sonnet-4-6 (no ranged)';
248
248
  if (classification === 're-write') return configuredModel + ' (re-write)';
249
249
  return configuredModel + ' (no ranged)';
250
250
  }
@@ -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, FsStorageProvider } from '../storage';
4
5
 
5
6
  export type RouteInstaller = (config: SynthOSConfig, app: Application) => void;
6
7
 
@@ -17,6 +18,17 @@ export class Customizer {
17
18
  /** Custom context sections appended to the builder's additional sections. */
18
19
  protected customContextSections: ContextSection[] = [];
19
20
 
21
+ private _storageProvider?: StorageProvider;
22
+
23
+ /** Storage provider for user-mutable data (pages, settings, themes, uploads).
24
+ * Override in a derived class to swap the storage backend (e.g. Azure Blob). */
25
+ get storageProvider(): StorageProvider {
26
+ if (!this._storageProvider) {
27
+ this._storageProvider = new FsStorageProvider();
28
+ }
29
+ return this._storageProvider;
30
+ }
31
+
20
32
  // --- Local data folder ---
21
33
  // Override in a derived class to change the local project folder name.
22
34
 
package/src/index.ts CHANGED
@@ -4,4 +4,5 @@ export * from './init';
4
4
  export * from './pages';
5
5
  export * from './scripts';
6
6
  export * from './settings';
7
- export * from './customizer';
7
+ export * from './customizer';
8
+ export * from './storage';