synthos 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/bin/synthos.js +3 -0
  4. package/default-pages/[application].html +87 -0
  5. package/default-pages/[markdown].html +261 -0
  6. package/default-pages/[sidebar].html +89 -0
  7. package/default-pages/[split-application].html +133 -0
  8. package/default-pages/json_tools.html +176 -0
  9. package/default-scripts/android.terminal.json +7 -0
  10. package/default-scripts/linux-terminal.json +7 -0
  11. package/default-scripts/mac-terminal.json +7 -0
  12. package/default-scripts/windows-terminal.json +7 -0
  13. package/dist/files.d.ts +9 -0
  14. package/dist/files.d.ts.map +1 -0
  15. package/dist/files.js +79 -0
  16. package/dist/files.js.map +1 -0
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +23 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/init.d.ts +9 -0
  22. package/dist/init.d.ts.map +1 -0
  23. package/dist/init.js +59 -0
  24. package/dist/init.js.map +1 -0
  25. package/dist/pages.d.ts +6 -0
  26. package/dist/pages.d.ts.map +1 -0
  27. package/dist/pages.js +55 -0
  28. package/dist/pages.js.map +1 -0
  29. package/dist/scripts.d.ts +14 -0
  30. package/dist/scripts.d.ts.map +1 -0
  31. package/dist/scripts.js +103 -0
  32. package/dist/scripts.js.map +1 -0
  33. package/dist/service/createCompletePrompt.d.ts +4 -0
  34. package/dist/service/createCompletePrompt.d.ts.map +1 -0
  35. package/dist/service/createCompletePrompt.js +42 -0
  36. package/dist/service/createCompletePrompt.js.map +1 -0
  37. package/dist/service/generateImage.d.ts +32 -0
  38. package/dist/service/generateImage.d.ts.map +1 -0
  39. package/dist/service/generateImage.js +71 -0
  40. package/dist/service/generateImage.js.map +1 -0
  41. package/dist/service/index.d.ts +8 -0
  42. package/dist/service/index.d.ts.map +1 -0
  43. package/dist/service/index.js +24 -0
  44. package/dist/service/index.js.map +1 -0
  45. package/dist/service/requiresSettings.d.ts +3 -0
  46. package/dist/service/requiresSettings.d.ts.map +1 -0
  47. package/dist/service/requiresSettings.js +24 -0
  48. package/dist/service/requiresSettings.js.map +1 -0
  49. package/dist/service/server.d.ts +4 -0
  50. package/dist/service/server.d.ts.map +1 -0
  51. package/dist/service/server.js +26 -0
  52. package/dist/service/server.js.map +1 -0
  53. package/dist/service/transformPage.d.ts +11 -0
  54. package/dist/service/transformPage.d.ts.map +1 -0
  55. package/dist/service/transformPage.js +119 -0
  56. package/dist/service/transformPage.js.map +1 -0
  57. package/dist/service/useApiRoutes.d.ts +4 -0
  58. package/dist/service/useApiRoutes.d.ts.map +1 -0
  59. package/dist/service/useApiRoutes.js +95 -0
  60. package/dist/service/useApiRoutes.js.map +1 -0
  61. package/dist/service/useDataRoutes.d.ts +4 -0
  62. package/dist/service/useDataRoutes.d.ts.map +1 -0
  63. package/dist/service/useDataRoutes.js +98 -0
  64. package/dist/service/useDataRoutes.js.map +1 -0
  65. package/dist/service/usePageRoutes.d.ts +5 -0
  66. package/dist/service/usePageRoutes.d.ts.map +1 -0
  67. package/dist/service/usePageRoutes.js +132 -0
  68. package/dist/service/usePageRoutes.js.map +1 -0
  69. package/dist/settings.d.ts +13 -0
  70. package/dist/settings.d.ts.map +1 -0
  71. package/dist/settings.js +55 -0
  72. package/dist/settings.js.map +1 -0
  73. package/dist/synthos-cli.d.ts +2 -0
  74. package/dist/synthos-cli.d.ts.map +1 -0
  75. package/dist/synthos-cli.js +43 -0
  76. package/dist/synthos-cli.js.map +1 -0
  77. package/images/home.png +0 -0
  78. package/images/page-management.png +0 -0
  79. package/images/settings.png +0 -0
  80. package/images/synthos-square.png +0 -0
  81. package/package.json +58 -0
  82. package/required-pages/apis.html +347 -0
  83. package/required-pages/home.html +83 -0
  84. package/required-pages/pages.html +135 -0
  85. package/required-pages/scripts.html +335 -0
  86. package/required-pages/settings.html +158 -0
  87. package/src/files.ts +49 -0
  88. package/src/index.ts +6 -0
  89. package/src/init.ts +66 -0
  90. package/src/pages.ts +55 -0
  91. package/src/scripts.ts +130 -0
  92. package/src/service/createCompletePrompt.ts +40 -0
  93. package/src/service/generateImage.ts +101 -0
  94. package/src/service/index.ts +7 -0
  95. package/src/service/requiresSettings.ts +22 -0
  96. package/src/service/server.ts +26 -0
  97. package/src/service/transformPage.ts +135 -0
  98. package/src/service/useApiRoutes.ts +95 -0
  99. package/src/service/useDataRoutes.ts +97 -0
  100. package/src/service/usePageRoutes.ts +147 -0
  101. package/src/settings.ts +60 -0
  102. package/src/synthos-cli.ts +38 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useApiRoutes = void 0;
4
+ const pages_1 = require("../pages");
5
+ const settings_1 = require("../settings");
6
+ const createCompletePrompt_1 = require("./createCompletePrompt");
7
+ const generateImage_1 = require("./generateImage");
8
+ const agentm_core_1 = require("agentm-core");
9
+ const requiresSettings_1 = require("./requiresSettings");
10
+ const scripts_1 = require("../scripts");
11
+ function useApiRoutes(config, app) {
12
+ // List pages
13
+ app.get('/api/pages', async (req, res) => {
14
+ const pages = await (0, pages_1.listPages)(config.pagesFolder, config.requiredPagesFolder);
15
+ res.json(pages);
16
+ });
17
+ // Define a route to return settings
18
+ app.get('/api/settings', async (req, res) => {
19
+ const settings = await (0, settings_1.loadSettings)(config.pagesFolder);
20
+ res.json({ ...settings, availableModels: createCompletePrompt_1.availableModels });
21
+ });
22
+ // Define a route to save settings
23
+ app.post('/api/settings', async (req, res) => {
24
+ try {
25
+ // Covert non-string values
26
+ const settings = req.body;
27
+ if (typeof settings.maxTokens === 'string') {
28
+ settings.maxTokens = parseInt(settings.maxTokens);
29
+ }
30
+ if (typeof settings.logCompletions === 'string') {
31
+ settings.logCompletions = settings.logCompletions === 'true';
32
+ }
33
+ // Save settings
34
+ await (0, settings_1.saveSettings)(config.pagesFolder, settings);
35
+ res.redirect('/home');
36
+ }
37
+ catch (err) {
38
+ console.error(err);
39
+ res.status(500).send(err.message);
40
+ }
41
+ });
42
+ // Define a route to generate an image
43
+ app.post('/api/generate/image', async (req, res) => {
44
+ await (0, requiresSettings_1.requiresSettings)(res, config.pagesFolder, async (settings) => {
45
+ const { prompt, shape, style } = req.body;
46
+ const { serviceApiKey, imageQuality, model } = settings;
47
+ const response = model.startsWith('gpt-') ?
48
+ await (0, generateImage_1.generateImage)({ apiKey: serviceApiKey, prompt, shape, quality: imageQuality, style }) :
49
+ await (0, generateImage_1.generateDefaultImage)();
50
+ if (response.completed) {
51
+ res.json(response.value);
52
+ }
53
+ else {
54
+ res.status(500).send(response.error?.message);
55
+ }
56
+ });
57
+ });
58
+ // Define a route to generate a completion using chain-of-thought
59
+ app.post('/api/generate/completion', async (req, res) => {
60
+ await (0, requiresSettings_1.requiresSettings)(res, config.pagesFolder, async (settings) => {
61
+ const { prompt, temperature } = req.body;
62
+ const { maxTokens } = settings;
63
+ const completePrompt = await (0, createCompletePrompt_1.createCompletePrompt)(config.pagesFolder, req.body.model);
64
+ const response = await (0, agentm_core_1.chainOfThought)({ question: prompt, temperature, maxTokens, completePrompt });
65
+ if (response.completed) {
66
+ res.json(response.value ?? {});
67
+ }
68
+ else {
69
+ console.error(response.error);
70
+ res.status(500).send(response.error?.message);
71
+ }
72
+ });
73
+ });
74
+ // Define a route for running configured scripts
75
+ app.post('/api/scripts/:id', async (req, res) => {
76
+ await (0, requiresSettings_1.requiresSettings)(res, config.pagesFolder, async (settings) => {
77
+ const { id } = req.params;
78
+ const pagesFolder = config.pagesFolder;
79
+ const scriptId = id;
80
+ const response = await (0, scripts_1.executeScript)({ pagesFolder, scriptId, variables: req.body });
81
+ if (response.completed) {
82
+ // Return the response as text
83
+ const value = (response.value?.output ?? (response.value?.errors ?? []).join('\n')).trim();
84
+ res.set('Content-Type', 'text/plain');
85
+ res.send(value);
86
+ }
87
+ else {
88
+ console.error(response.error);
89
+ res.status(500).send(response.error);
90
+ }
91
+ });
92
+ });
93
+ }
94
+ exports.useApiRoutes = useApiRoutes;
95
+ //# sourceMappingURL=useApiRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiRoutes.js","sourceRoot":"","sources":["../../src/service/useApiRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Application } from 'express';
2
+ import { SynthOSConfig } from "../init";
3
+ export declare function useDataRoutes(config: SynthOSConfig, app: Application): void;
4
+ //# sourceMappingURL=useDataRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataRoutes.d.ts","sourceRoot":"","sources":["../../src/service/useDataRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAMxC,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA+E3E"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useDataRoutes = void 0;
7
+ const files_1 = require("../files");
8
+ const path_1 = __importDefault(require("path"));
9
+ const uuid_1 = require("uuid");
10
+ const scripts_1 = require("../scripts");
11
+ function useDataRoutes(config, app) {
12
+ // Retrieve all rows from a table
13
+ app.get('/api/data/:table', async (req, res) => {
14
+ // Get list of row ids
15
+ const { table } = req.params;
16
+ const folder = await tableFolder(config, table);
17
+ const ids = (await (0, files_1.listFiles)(folder)).filter(f => f.endsWith('.json')).map(f => f.replace('.json', ''));
18
+ // Enumerate all rows
19
+ const rows = [];
20
+ for (const id of ids) {
21
+ const file = recordFile(folder, id);
22
+ try {
23
+ const row = JSON.parse(await (0, files_1.loadFile)(file));
24
+ row.id = id;
25
+ rows.push(row);
26
+ }
27
+ catch (err) {
28
+ console.error(err);
29
+ }
30
+ }
31
+ // Return rows
32
+ res.json(rows);
33
+ });
34
+ // Retrieve a single row from a table
35
+ app.get('/api/data/:table/:id', async (req, res) => {
36
+ const { table, id } = req.params;
37
+ const folder = await tableFolder(config, table);
38
+ const file = recordFile(folder, id);
39
+ try {
40
+ const row = JSON.parse(await (0, files_1.loadFile)(file));
41
+ row.id = id;
42
+ res.json(row);
43
+ }
44
+ catch (err) {
45
+ res.json({});
46
+ }
47
+ });
48
+ // Upsert a single row into a table
49
+ app.post('/api/data/:table', async (req, res) => {
50
+ const { table } = req.params;
51
+ const id = req.body.id ?? (0, uuid_1.v4)();
52
+ const folder = await tableFolder(config, table);
53
+ const file = recordFile(folder, id);
54
+ try {
55
+ const row = { ...req.body, id };
56
+ await (0, files_1.ensureFolderExists)(folder);
57
+ await (0, files_1.saveFile)(file, JSON.stringify(row, null, 4));
58
+ if (table === 'scripts') {
59
+ (0, scripts_1.clearCachedScripts)();
60
+ }
61
+ res.json(row);
62
+ }
63
+ catch (err) {
64
+ console.error(err);
65
+ res.status(500).send(err.message);
66
+ }
67
+ });
68
+ // Delete a single row from a table
69
+ app.delete('/api/data/:table/:id', async (req, res) => {
70
+ const { table, id } = req.params;
71
+ const folder = await tableFolder(config, table);
72
+ const file = recordFile(folder, id);
73
+ try {
74
+ if (await (0, files_1.checkIfExists)(file)) {
75
+ await (0, files_1.deleteFile)(file);
76
+ // Clear cached scripts
77
+ if (table === 'scripts') {
78
+ (0, scripts_1.clearCachedScripts)();
79
+ }
80
+ }
81
+ res.json({ success: true });
82
+ }
83
+ catch (err) {
84
+ console.error(err);
85
+ res.status(500).send(err.message);
86
+ }
87
+ });
88
+ }
89
+ exports.useDataRoutes = useDataRoutes;
90
+ async function tableFolder(config, table) {
91
+ const folder = path_1.default.join(config.pagesFolder, table);
92
+ await (0, files_1.ensureFolderExists)(folder);
93
+ return folder;
94
+ }
95
+ function recordFile(folder, id) {
96
+ return path_1.default.join(folder, `${id}.json`);
97
+ }
98
+ //# sourceMappingURL=useDataRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataRoutes.js","sourceRoot":"","sources":["../../src/service/useDataRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Application } from 'express';
2
+ import { SynthOSConfig } from "../init";
3
+ export declare function usePageRoutes(config: SynthOSConfig, app: Application): void;
4
+ export declare function loadPageWithFallback(page: string, config: SynthOSConfig, reset: boolean): Promise<string | undefined>;
5
+ //# sourceMappingURL=usePageRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageRoutes.d.ts","sourceRoot":"","sources":["../../src/service/usePageRoutes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOxC,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA4H3E;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CASzH"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadPageWithFallback = exports.usePageRoutes = void 0;
4
+ const pages_1 = require("../pages");
5
+ const settings_1 = require("../settings");
6
+ const transformPage_1 = require("./transformPage");
7
+ const createCompletePrompt_1 = require("./createCompletePrompt");
8
+ const HOME_PAGE_ROUTE = '/home';
9
+ const PAGE_NOT_FOUND = 'Page not found';
10
+ function usePageRoutes(config, app) {
11
+ // Redirect / to /home page
12
+ app.get('/', (req, res) => res.redirect(HOME_PAGE_ROUTE));
13
+ // Page retrieval
14
+ app.get('/:page', async (req, res) => {
15
+ // Redirect if settings not configured
16
+ const { page } = req.params;
17
+ const isConfigured = await (0, settings_1.hasConfiguredSettings)(config.pagesFolder);
18
+ if (!isConfigured && page !== 'settings') {
19
+ res.redirect('/settings');
20
+ return;
21
+ }
22
+ // Ensure page exists
23
+ const pageState = await loadPageWithFallback(page, config, false);
24
+ if (!pageState) {
25
+ res.status(404).send(PAGE_NOT_FOUND);
26
+ return;
27
+ }
28
+ res.send(pageState);
29
+ });
30
+ // Page reset
31
+ app.get('/:page/reset', async (req, res) => {
32
+ // Redirect if settings not configured
33
+ const { page } = req.params;
34
+ const isConfigured = await (0, settings_1.hasConfiguredSettings)(config.pagesFolder);
35
+ if (!isConfigured) {
36
+ res.redirect('/settings');
37
+ return;
38
+ }
39
+ // Ensure page exists
40
+ const pageState = await loadPageWithFallback(page, config, true);
41
+ if (!pageState) {
42
+ res.status(404).send(PAGE_NOT_FOUND);
43
+ return;
44
+ }
45
+ res.redirect(`/${page}`);
46
+ });
47
+ // Page save
48
+ app.get('/:page/save', async (req, res) => {
49
+ // Redirect if settings not configured
50
+ const { page } = req.params;
51
+ const isConfigured = await (0, settings_1.hasConfiguredSettings)(config.pagesFolder);
52
+ if (!isConfigured) {
53
+ res.redirect('/settings');
54
+ return;
55
+ }
56
+ // Normalize and validate save-as parameter
57
+ const saveAs = (0, pages_1.normalizePageName)(req.query['name']);
58
+ if (!saveAs) {
59
+ res.status(400).send('Invalid or missing name parameter');
60
+ return;
61
+ }
62
+ // Load page state
63
+ const pageState = await loadPageWithFallback(page, config, false);
64
+ if (!pageState) {
65
+ res.status(404).send(PAGE_NOT_FOUND);
66
+ return;
67
+ }
68
+ // Save as new page and redirect to saved page
69
+ await (0, pages_1.savePageState)(config.pagesFolder, saveAs, pageState);
70
+ res.redirect(`/${saveAs}`);
71
+ });
72
+ // Page transformation
73
+ app.post('/:page', async (req, res) => {
74
+ try {
75
+ // Ensure settings configured
76
+ const { page } = req.params;
77
+ const isConfigured = await (0, settings_1.hasConfiguredSettings)(config.pagesFolder);
78
+ if (!isConfigured) {
79
+ res.status(400).send('Settings not configured');
80
+ return;
81
+ }
82
+ // Ensure page exists
83
+ const pageState = await loadPageWithFallback(page, config, false);
84
+ if (!pageState) {
85
+ res.status(404).send(PAGE_NOT_FOUND);
86
+ return;
87
+ }
88
+ // Get required and optional parameters
89
+ const { message } = req.body; // Extract the message from the request body
90
+ if (typeof message !== 'string') {
91
+ res.status(400).send('Invalid or missing message parameter');
92
+ return;
93
+ }
94
+ // Create model instance
95
+ const innerCompletePrompt = await (0, createCompletePrompt_1.createCompletePrompt)(config.pagesFolder, req.body.model);
96
+ const completePrompt = (args) => {
97
+ // console.log(`SYSTEM:\n${args.system!.content}`);
98
+ // console.log(`PROMPT:\n${args.prompt!.content}`);
99
+ return innerCompletePrompt(args);
100
+ };
101
+ // Transform and cache updated page
102
+ const pagesFolder = config.pagesFolder;
103
+ const { maxTokens, instructions, model } = await (0, settings_1.loadSettings)(config.pagesFolder);
104
+ const result = model.startsWith('gpt-') ?
105
+ await (0, transformPage_1.transformPageAsObject)({ pagesFolder, pageState, message, maxTokens, instructions, completePrompt }) :
106
+ await (0, transformPage_1.transformPage)({ pagesFolder, pageState, message, maxTokens, instructions, completePrompt });
107
+ if (result.completed) {
108
+ (0, pages_1.updatePageState)(page, result.value);
109
+ res.send(result.value);
110
+ }
111
+ else {
112
+ throw result.error;
113
+ }
114
+ }
115
+ catch (err) {
116
+ console.error(err);
117
+ res.status(500).send(err.message);
118
+ }
119
+ });
120
+ }
121
+ exports.usePageRoutes = usePageRoutes;
122
+ async function loadPageWithFallback(page, config, reset) {
123
+ // Try primary pages folder first
124
+ const pageState = await (0, pages_1.loadPageState)(config.pagesFolder, page, reset);
125
+ if (pageState) {
126
+ return pageState;
127
+ }
128
+ // Try fallback pages folder second
129
+ return (0, pages_1.loadPageState)(config.requiredPagesFolder, page, reset);
130
+ }
131
+ exports.loadPageWithFallback = loadPageWithFallback;
132
+ //# sourceMappingURL=usePageRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageRoutes.js","sourceRoot":"","sources":["../../src/service/usePageRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface Settings {
2
+ serviceApiKey: string;
3
+ model: string;
4
+ maxTokens: number;
5
+ imageQuality: 'standard' | 'hd';
6
+ instructions?: string;
7
+ logCompletions?: boolean;
8
+ }
9
+ export declare const DefaultSettings: Settings;
10
+ export declare function hasConfiguredSettings(folder: string): Promise<boolean>;
11
+ export declare function loadSettings(folder: string): Promise<Settings>;
12
+ export declare function saveSettings(folder: string, settings: Partial<Settings>): Promise<void>;
13
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,QAO7B,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa5E;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgBpE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7F"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.saveSettings = exports.loadSettings = exports.hasConfiguredSettings = exports.DefaultSettings = void 0;
7
+ const files_1 = require("./files");
8
+ const path_1 = __importDefault(require("path"));
9
+ let _settings;
10
+ exports.DefaultSettings = {
11
+ serviceApiKey: '',
12
+ model: '',
13
+ maxTokens: 8000,
14
+ imageQuality: 'standard',
15
+ instructions: '',
16
+ logCompletions: false
17
+ };
18
+ async function hasConfiguredSettings(folder) {
19
+ const settings = await loadSettings(folder);
20
+ if (typeof settings.serviceApiKey !== 'string' || settings.serviceApiKey.length == 0) {
21
+ return false;
22
+ }
23
+ if (typeof settings.model !== 'string' || settings.model.length == 0) {
24
+ return false;
25
+ }
26
+ if (typeof settings.maxTokens !== 'number' || settings.maxTokens <= 0) {
27
+ return false;
28
+ }
29
+ return true;
30
+ }
31
+ exports.hasConfiguredSettings = hasConfiguredSettings;
32
+ async function loadSettings(folder) {
33
+ if (_settings == undefined) {
34
+ // Check for file to exist
35
+ const filename = path_1.default.join(folder, 'settings.json');
36
+ if (await (0, files_1.checkIfExists)(filename)) {
37
+ try {
38
+ // Load and parse file
39
+ _settings = JSON.parse(await (0, files_1.loadFile)(filename));
40
+ }
41
+ catch {
42
+ // Invalid JSON
43
+ }
44
+ }
45
+ }
46
+ // Return settings from file
47
+ return { ...exports.DefaultSettings, ..._settings };
48
+ }
49
+ exports.loadSettings = loadSettings;
50
+ async function saveSettings(folder, settings) {
51
+ _settings = { ..._settings, ...settings };
52
+ await (0, files_1.saveFile)(path_1.default.join(folder, 'settings.json'), JSON.stringify(_settings, null, 4));
53
+ }
54
+ exports.saveSettings = saveSettings;
55
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA0D;AAC1D,gDAAwB;AAExB,IAAI,SAAsC,CAAC;AAW9B,QAAA,eAAe,GAAa;IACrC,aAAa,EAAE,EAAE;IACjB,KAAK,EAAE,EAAE;IACT,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,UAAU;IACxB,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,KAAK;CACxB,CAAC;AAEK,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACtD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;QAClF,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QAClE,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,EAAE;QACnE,OAAO,KAAK,CAAC;KAChB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAbD,sDAaC;AAEM,KAAK,UAAU,YAAY,CAAC,MAAc;IAC7C,IAAI,SAAS,IAAI,SAAS,EAAE;QACxB,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACpD,IAAI,MAAM,IAAA,qBAAa,EAAC,QAAQ,CAAC,EAAE;YAC/B,IAAI;gBACA,sBAAsB;gBACtB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAC;aACpD;YAAC,MAAM;gBACJ,eAAe;aAClB;SACJ;KACJ;IAED,4BAA4B;IAC5B,OAAO,EAAC,GAAG,uBAAe,EAAE,GAAG,SAAS,EAAC,CAAC;AAC9C,CAAC;AAhBD,oCAgBC;AAEM,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,QAA2B;IAC1E,SAAS,GAAG,EAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,EAAC,CAAC;IACxC,MAAM,IAAA,gBAAQ,EAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAHD,oCAGC"}
@@ -0,0 +1,2 @@
1
+ export declare function run(): Promise<void>;
2
+ //# sourceMappingURL=synthos-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthos-cli.d.ts","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":"AAOA,wBAAsB,GAAG,kBA8BxB"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.run = void 0;
7
+ const yargs_1 = __importDefault(require("yargs"));
8
+ const helpers_1 = require("yargs/helpers");
9
+ const service_1 = require("./service");
10
+ const init_1 = require("./init");
11
+ const dynamicImport = new Function('specifier', `return import(specifier)`);
12
+ async function run() {
13
+ await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
14
+ .scriptName('synthos')
15
+ .command('start', `Starts the SynthOS server.`, (yargs) => {
16
+ return yargs
17
+ .option('port', {
18
+ describe: `The port number to use.`,
19
+ type: 'number',
20
+ default: 4242
21
+ })
22
+ .option('pages', {
23
+ describe: `Include default pages when initializing a new .synthos folder.`,
24
+ type: 'boolean',
25
+ default: true
26
+ })
27
+ .demandOption([]);
28
+ }, async (args) => {
29
+ const config = (0, init_1.createConfig)();
30
+ await (0, init_1.init)(config, args.pages);
31
+ await (0, service_1.server)(config).listen(args.port, async () => {
32
+ console.log(`SynthOS server is running on http://localhost:${args.port}`);
33
+ // Open using default browser
34
+ const open = await dynamicImport('open');
35
+ open.default(`http://localhost:${args.port}`);
36
+ });
37
+ })
38
+ .help()
39
+ .demandCommand()
40
+ .parseAsync();
41
+ }
42
+ exports.run = run;
43
+ //# sourceMappingURL=synthos-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthos-cli.js","sourceRoot":"","sources":["../src/synthos-cli.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,2CAAwC;AACxC,uCAAmC;AACnC,iCAA4C;AAE5C,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,gEAAgE;YAC1E,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SAChB,CAAC;aACD,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,IAAA,mBAAY,GAAE,CAAC;QAC9B,MAAM,IAAA,WAAI,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC9C,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;AA9BD,kBA8BC"}
Binary file
Binary file
Binary file
Binary file
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "synthos",
3
+ "author": "Steven Ickman",
4
+ "description": "An AI powered shell experience.",
5
+ "version": "0.1.0",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "synthos",
9
+ "ai"
10
+ ],
11
+ "bugs": {
12
+ "url": "https://github.com/Stevenic/synthos/issues"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/Stevenic/synthos.git"
17
+ },
18
+ "main": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "bin": "./bin/synthos.js",
21
+ "dependencies": {
22
+ "agentm-core": "0.7.2",
23
+ "express": "^4.19.2",
24
+ "open": "^10.1.0",
25
+ "openai": "^4.57.0",
26
+ "uuid": "^10.0.0",
27
+ "yargs": "^17.7.2"
28
+ },
29
+ "devDependencies": {
30
+ "@types/assert": "^1.5.3",
31
+ "@types/express": "^4.17.21",
32
+ "@types/mocha": "^8.2.0",
33
+ "@types/node": "^14.14.31",
34
+ "@types/uuid": "10.0.0",
35
+ "@types/yargs": "17.0.24",
36
+ "mocha": "10.2.0",
37
+ "nyc": "^15.1.0",
38
+ "rimraf": "^5.0.1",
39
+ "ts-mocha": "10.0.0",
40
+ "typescript": "^4.2.3"
41
+ },
42
+ "scripts": {
43
+ "build": "tsc -b",
44
+ "clean": "rimraf dist tsconfig.tsbuildinfo node_modules",
45
+ "start": "node ./bin/synthos.js",
46
+ "test": "npm-run-all build test:mocha",
47
+ "test:mocha": "nyc mocha tests"
48
+ },
49
+ "files": [
50
+ "dist",
51
+ "bin",
52
+ "src",
53
+ "default-pages",
54
+ "default-scripts",
55
+ "required-pages",
56
+ "images"
57
+ ]
58
+ }