synthos 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/synthos.js +2 -2
- package/default-pages/[application].html +94 -86
- package/default-pages/[markdown].html +270 -260
- package/default-pages/[sidebar].html +67 -42
- package/default-pages/[split-application].html +55 -70
- package/default-pages/json_tools.html +113 -130
- package/default-pages/solar_system.html +432 -0
- package/default-pages/space_invaders.html +617 -0
- package/default-scripts/windows-terminal.json +6 -6
- package/dist/service/createCompletePrompt.d.ts.map +1 -1
- package/dist/service/createCompletePrompt.js +6 -5
- package/dist/service/createCompletePrompt.js.map +1 -1
- package/package.json +1 -1
- package/required-pages/apis.html +361 -346
- package/required-pages/home.html +69 -26
- package/required-pages/pages.html +152 -134
- package/required-pages/scripts.html +349 -334
- package/required-pages/settings.html +184 -157
- package/src/service/createCompletePrompt.ts +6 -5
- package/src/settings.ts +1 -1
|
@@ -1,158 +1,185 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>SynthOS - Settings</title>
|
|
7
|
-
<style>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.chat-
|
|
14
|
-
.chat-
|
|
15
|
-
.chat-
|
|
16
|
-
.chat-message
|
|
17
|
-
.
|
|
18
|
-
.
|
|
19
|
-
.
|
|
20
|
-
|
|
21
|
-
.
|
|
22
|
-
.
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>SynthOS - Settings</title>
|
|
7
|
+
<style>
|
|
8
|
+
/* Nebula Dusk Theme */
|
|
9
|
+
:root { --bg-primary:#1a1a2e; --bg-secondary:#16213e; --bg-tertiary:#0f0f23; --accent-primary:#667eea; --accent-secondary:#764ba2; --accent-tertiary:#f093fb; --accent-glow:rgba(138,43,226,0.3); --text-primary:#e0e0e0; --text-secondary:#b794f6; --border-color:rgba(138,43,226,0.3); }
|
|
10
|
+
* { margin:0; padding:0; box-sizing:border-box; }
|
|
11
|
+
body { font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif; background:linear-gradient(135deg,var(--bg-primary) 0%,var(--bg-secondary) 50%,var(--bg-tertiary) 100%); color:var(--text-primary); height:100vh; display:flex; }
|
|
12
|
+
|
|
13
|
+
.chat-panel { width:30%; background:linear-gradient(180deg,rgba(26,26,46,0.95) 0%,rgba(22,33,62,0.95) 100%); box-shadow:0 0 30px var(--accent-glow),inset 0 0 60px rgba(75,0,130,0.1); padding:20px; display:flex; flex-direction:column; border-right:1px solid var(--border-color); }
|
|
14
|
+
.chat-header { font-size:24px; padding:15px; background:linear-gradient(135deg,var(--accent-primary) 0%,var(--accent-secondary) 50%,var(--accent-tertiary) 100%); color:white; text-align:center; border-radius:15px; box-shadow:0 4px 20px rgba(102,126,234,0.4); text-shadow:0 2px 10px rgba(0,0,0,0.3); letter-spacing:2px; }
|
|
15
|
+
.chat-messages { flex-grow:1; overflow-y:auto; padding:15px; margin-top:15px; background:rgba(15,15,35,0.6); border-radius:15px; border:1px solid var(--border-color); box-shadow:inset 0 0 30px rgba(75,0,130,0.2); }
|
|
16
|
+
.chat-message { margin-bottom:15px; padding:12px 15px; background:linear-gradient(135deg,rgba(102,126,234,0.15) 0%,rgba(118,75,162,0.15) 100%); border-radius:15px; box-shadow:0 2px 10px var(--accent-glow); border:1px solid rgba(138,43,226,0.1); backdrop-filter:blur(5px); }
|
|
17
|
+
.chat-message p { margin-bottom:5px; line-height:1.5; }
|
|
18
|
+
.chat-message p strong { font-weight:600; background:linear-gradient(90deg,var(--accent-primary),var(--accent-tertiary)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; }
|
|
19
|
+
.chat-message p code { background:rgba(138,43,226,0.3); padding:2px 6px; border-radius:5px; font-family:'Courier New',Courier,monospace; color:var(--accent-tertiary); border:1px solid rgba(240,147,251,0.3); }
|
|
20
|
+
|
|
21
|
+
.link-group { display:flex; justify-content:space-between; margin:15px 0; padding:10px; background:rgba(15,15,35,0.4); border-radius:10px; border:1px solid var(--border-color); }
|
|
22
|
+
.link-group a { font-size:14px; color:var(--text-secondary); text-decoration:none; padding:8px 15px; border-radius:8px; transition:all 0.3s ease; border:1px solid transparent; }
|
|
23
|
+
.link-group a:hover { background:linear-gradient(135deg,rgba(102,126,234,0.3) 0%,rgba(118,75,162,0.3) 100%); border-color:rgba(183,148,246,0.5); box-shadow:0 0 15px var(--accent-glow); color:var(--accent-tertiary); }
|
|
24
|
+
|
|
25
|
+
.chat-panel > form { display:flex; flex-direction:row; width:100%; gap:10px; align-items:center; }
|
|
26
|
+
.chat-input { padding:14px 18px; border:1px solid var(--border-color); border-radius:25px; flex-grow:1; font-size:14px; background:rgba(15,15,35,0.8); color:var(--text-primary); box-shadow:inset 0 2px 10px rgba(0,0,0,0.3),0 0 20px rgba(138,43,226,0.1); transition:all 0.3s ease; }
|
|
27
|
+
.chat-input:focus { outline:none; border-color:rgba(183,148,246,0.6); box-shadow:inset 0 2px 10px rgba(0,0,0,0.3),0 0 25px var(--accent-glow); }
|
|
28
|
+
.chat-input::placeholder { color:rgba(183,148,246,0.5); }
|
|
29
|
+
|
|
30
|
+
.chat-submit { padding:14px 20px; border:none; border-radius:25px; font-size:14px; background:linear-gradient(135deg,var(--accent-primary) 0%,var(--accent-secondary) 50%,var(--accent-tertiary) 100%); color:white; cursor:pointer; transition:all 0.3s ease; font-weight:600; letter-spacing:1px; box-shadow:0 4px 20px rgba(102,126,234,0.4); white-space:nowrap; }
|
|
31
|
+
.chat-submit:hover { transform:translateY(-2px); box-shadow:0 6px 25px rgba(102,126,234,0.6); }
|
|
32
|
+
.chat-submit:active { transform:translateY(0); }
|
|
33
|
+
|
|
34
|
+
.viewer-panel { width:70%; padding:25px; background:linear-gradient(135deg,rgba(22,33,62,0.9) 0%,rgba(15,15,35,0.95) 100%); display:flex; flex-direction:column; justify-content:flex-start; align-items:center; box-shadow:inset 0 0 60px rgba(75,0,130,0.15); position:relative; overflow:hidden; }
|
|
35
|
+
.viewer-panel::before { content:''; position:absolute; top:-50%; left:-50%; width:200%; height:200%; background:radial-gradient(ellipse at center,rgba(138,43,226,0.05) 0%,transparent 70%); animation:nebula-pulse 8s ease-in-out infinite; pointer-events:none; }
|
|
36
|
+
@keyframes nebula-pulse { 0%,100%{opacity:0.5;transform:scale(1);} 50%{opacity:1;transform:scale(1.1);} }
|
|
37
|
+
|
|
38
|
+
.loading-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(15,15,35,0.9); justify-content:center; align-items:center; z-index:1000; }
|
|
39
|
+
.spinner { width:50px; height:50px; border:4px solid var(--border-color); border-top-color:var(--accent-tertiary); border-radius:50%; animation:spin 1s linear infinite; }
|
|
40
|
+
@keyframes spin { to{transform:rotate(360deg);} }
|
|
41
|
+
|
|
42
|
+
/* Scrollbar Styles */
|
|
43
|
+
::-webkit-scrollbar { width:10px; height:10px; }
|
|
44
|
+
::-webkit-scrollbar-track { background:rgba(15,15,35,0.6); border-radius:10px; border:1px solid var(--border-color); }
|
|
45
|
+
::-webkit-scrollbar-thumb { background:linear-gradient(180deg,var(--accent-primary) 0%,var(--accent-secondary) 50%,var(--accent-tertiary) 100%); border-radius:10px; border:2px solid rgba(15,15,35,0.6); box-shadow:0 0 10px var(--accent-glow); }
|
|
46
|
+
::-webkit-scrollbar-thumb:hover { background:linear-gradient(180deg,var(--accent-tertiary) 0%,var(--accent-secondary) 50%,var(--accent-primary) 100%); box-shadow:0 0 15px rgba(240,147,251,0.5); }
|
|
47
|
+
::-webkit-scrollbar-corner { background:rgba(15,15,35,0.6); }
|
|
48
|
+
* { scrollbar-width:thin; scrollbar-color:var(--accent-secondary) rgba(15,15,35,0.6); }
|
|
49
|
+
|
|
50
|
+
/* Settings Form Styles - Nebula Theme */
|
|
51
|
+
.settings-form { background:linear-gradient(135deg,rgba(26,26,46,0.95) 0%,rgba(22,33,62,0.95) 100%); border-radius:15px; padding:0; box-shadow:0 6px 30px var(--accent-glow),inset 0 0 40px rgba(75,0,130,0.1); border:1px solid var(--border-color); width:100%; max-width:500px; position:relative; z-index:1; overflow:hidden; }
|
|
52
|
+
.dialog-title { font-size:22px; font-weight:700; padding:18px 30px; background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary)); color:white; text-align:center; box-shadow:0 4px 20px rgba(102,126,234,0.4); text-shadow:0 2px 10px rgba(0,0,0,0.3); letter-spacing:2px; }
|
|
53
|
+
.dialog-content { padding:25px; background:rgba(15,15,35,0.5); }
|
|
54
|
+
#settingsForm { display:flex; flex-direction:column; gap:15px; }
|
|
55
|
+
.form-group { display:flex; flex-direction:column; width:100%; }
|
|
56
|
+
.form-group label { display:block; margin-bottom:8px; color:var(--text-secondary); font-weight:600; font-size:14px; }
|
|
57
|
+
.form-group input,.form-group select,.form-group textarea { width:100%; padding:14px 18px; border-radius:12px; border:1px solid var(--border-color); background:rgba(15,15,35,0.8); color:var(--text-primary); font-size:14px; transition:all 0.3s ease; box-shadow:inset 0 2px 10px rgba(0,0,0,0.3); }
|
|
58
|
+
.form-group input:focus,.form-group select:focus,.form-group textarea:focus { outline:none; border-color:rgba(183,148,246,0.6); box-shadow:inset 0 2px 10px rgba(0,0,0,0.3),0 0 20px var(--accent-glow); }
|
|
59
|
+
.form-group input::placeholder,.form-group textarea::placeholder { color:rgba(183,148,246,0.5); }
|
|
60
|
+
.form-group textarea { resize:vertical; min-height:100px; }
|
|
61
|
+
.form-group select { cursor:pointer; appearance:none; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23b794f6' d='M6 8L1 3h10z'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 15px center; }
|
|
62
|
+
.form-group select option { background:var(--bg-tertiary); color:var(--text-primary); padding:10px; }
|
|
63
|
+
|
|
64
|
+
.settings-form .update-btn { width:100%; padding:16px 20px; border:none; border-radius:12px; font-size:15px; background:linear-gradient(135deg,var(--accent-primary) 0%,var(--accent-secondary) 50%,var(--accent-tertiary) 100%); color:white; cursor:pointer; transition:all 0.3s ease; font-weight:600; letter-spacing:1px; box-shadow:0 4px 20px rgba(102,126,234,0.4); margin-top:5px; }
|
|
65
|
+
.settings-form .update-btn:hover { transform:translateY(-2px); box-shadow:0 6px 25px rgba(102,126,234,0.6); }
|
|
66
|
+
.settings-form .update-btn:active { transform:translateY(0); }
|
|
67
|
+
|
|
68
|
+
.disabled { background:rgba(102,126,234,0.2)!important; cursor:not-allowed!important; opacity:0.6; }
|
|
69
|
+
.info-text { color:rgba(183,148,246,0.7); margin-top:20px; font-size:13px; line-height:1.6; text-align:center; padding:15px; background:rgba(15,15,35,0.4); border-radius:10px; border:1px solid var(--border-color); }
|
|
70
|
+
.info-text a { color:var(--accent-tertiary); text-decoration:none; transition:all 0.3s; font-weight:500; }
|
|
71
|
+
.info-text a:hover { color:var(--text-secondary); text-shadow:0 0 10px var(--accent-glow); }
|
|
72
|
+
</style>
|
|
73
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.min.js"></script>
|
|
74
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/14.1.1/marked.min.js"></script>
|
|
75
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/11.1.0/mermaid.min.js"></script>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<div class="chat-panel">
|
|
79
|
+
<div class="chat-header">SynthOS</div>
|
|
80
|
+
<div class="chat-messages" id="chatMessages">
|
|
81
|
+
<div class="chat-message">
|
|
82
|
+
<p><strong>SynthOS:</strong> Please fill in all required fields in the settings form and click 'Update'. Ensure your OpenAI or Anthropic API Key is valid and select the model you wish to use.</p>
|
|
83
|
+
<p><code>Max Output Tokens</code> controls how large of a page that can be rendered and <code>Additional Instructions</code> can be used to provide further prompt instructions for how pages should be updated.</p>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="link-group">
|
|
87
|
+
<a href="#" id="saveLink">Save</a>
|
|
88
|
+
<a href="/pages" id="pagesLink">Pages</a>
|
|
89
|
+
<a href="#" id="resetLink">Reset</a>
|
|
90
|
+
</div>
|
|
91
|
+
<form action="/" method="POST" id="chatForm">
|
|
92
|
+
<input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message...">
|
|
93
|
+
<button type="submit" class="chat-submit">Send</button>
|
|
94
|
+
</form>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="viewer-panel" id="viewerPanel">
|
|
97
|
+
<div class="settings-form">
|
|
98
|
+
<div class="dialog-title">Settings</div>
|
|
99
|
+
<div class="dialog-content">
|
|
100
|
+
<form action="/api/settings" method="POST" id="settingsForm">
|
|
101
|
+
<div class="form-group">
|
|
102
|
+
<label for="serviceApiKey">Service API Key</label>
|
|
103
|
+
<input type="password" id="serviceApiKey" name="serviceApiKey" placeholder="Enter your API Key" required>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="form-group">
|
|
106
|
+
<label for="model">Model</label>
|
|
107
|
+
<select id="model" name="model" required>
|
|
108
|
+
<option value="">Select a model</option>
|
|
109
|
+
</select>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="form-group">
|
|
112
|
+
<label for="maxTokens">Max Output Tokens</label>
|
|
113
|
+
<input type="number" id="maxTokens" name="maxTokens" placeholder="Enter max token count" required>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="form-group">
|
|
116
|
+
<label for="instructions">Additional Instructions</label>
|
|
117
|
+
<textarea id="instructions" name="instructions" placeholder="Enter any additional instructions"></textarea>
|
|
118
|
+
</div>
|
|
119
|
+
<button type="submit" class="chat-submit" action="/api/submit">Update</button>
|
|
120
|
+
</form>
|
|
121
|
+
<p class="info-text">An API Key is required which can be generated from either <a href="https://platform.openai.com/api-keys" target="_blank">OpenAI API Keys</a> or <a href="https://console.anthropic.com/settings/keys" target="_blank">Anthropic API Keys</a>.</p>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div id="thoughts" style="display: none;">Ask the user to update their settings.</div>
|
|
126
|
+
<div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div>
|
|
127
|
+
<script>
|
|
128
|
+
// Basic chat functionality
|
|
129
|
+
document.getElementById("chatInput").focus();
|
|
130
|
+
document.getElementById("chatForm").addEventListener('submit', (event) => {
|
|
131
|
+
document.getElementById("loadingOverlay").style.display = 'flex';
|
|
132
|
+
document.getElementById("chatForm").action = window.location.pathname;
|
|
133
|
+
});
|
|
134
|
+
document.getElementById("saveLink").addEventListener("click", function() {
|
|
135
|
+
const pageName = prompt("Enter the name of the page to save as:");
|
|
136
|
+
if (pageName) {
|
|
137
|
+
window.location.href = `${window.location.pathname}/save?name=${encodeURIComponent(pageName)}`;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
document.getElementById("resetLink").addEventListener("click", function() {
|
|
141
|
+
window.location.href = `${window.location.pathname}/reset`;
|
|
142
|
+
});
|
|
143
|
+
window.onload = function() {
|
|
144
|
+
const chatMessages = document.getElementById('chatMessages');
|
|
145
|
+
chatMessages.scrollTop = chatMessages.scrollHeight;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// Form validation
|
|
149
|
+
document.getElementById('settingsForm').addEventListener('submit', function(event) {
|
|
150
|
+
const serviceApiKey = document.getElementById('serviceApiKey').value;
|
|
151
|
+
const model = document.getElementById('model').value;
|
|
152
|
+
const maxTokens = document.getElementById('maxTokens').value;
|
|
153
|
+
|
|
154
|
+
if (!serviceApiKey || !model || !maxTokens) {
|
|
155
|
+
alert('Please fill in all required fields before submitting.');
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// Fetch settings and populate form
|
|
161
|
+
let isConfigured = false;
|
|
162
|
+
fetch('/api/settings')
|
|
163
|
+
.then(response => response.json())
|
|
164
|
+
.then(data => {
|
|
165
|
+
console.log('Settings:', data);
|
|
166
|
+
const serviceApiKey = data.serviceApiKey || '';
|
|
167
|
+
const model = data.model || '';
|
|
168
|
+
const maxTokens = data.maxTokens || '';
|
|
169
|
+
isConfigured = serviceApiKey && model && maxTokens;
|
|
170
|
+
document.getElementById('serviceApiKey').value = serviceApiKey;
|
|
171
|
+
document.getElementById('model').innerHTML = data.availableModels.map(model => `<option value="${model}">${model}</option>`).join('');
|
|
172
|
+
document.getElementById('model').value = model;
|
|
173
|
+
document.getElementById('maxTokens').value = maxTokens;
|
|
174
|
+
document.getElementById('instructions').value = data.instructions || '';
|
|
175
|
+
|
|
176
|
+
// Disable chat input if not configured
|
|
177
|
+
if (!isConfigured) {
|
|
178
|
+
document.getElementById('chatInput').disabled = true;
|
|
179
|
+
document.getElementById('chatInput').classList.add('disabled');
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
.catch(error => console.error('Error fetching settings:', error));
|
|
183
|
+
</script>
|
|
184
|
+
</body>
|
|
158
185
|
</html>
|
|
@@ -2,11 +2,12 @@ import {anthropic, completePrompt, logCompletePrompt, openai} from 'agentm-core'
|
|
|
2
2
|
import { loadSettings } from '../settings';
|
|
3
3
|
|
|
4
4
|
export const availableModels = [
|
|
5
|
-
'claude-
|
|
6
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
9
|
-
'
|
|
5
|
+
'claude-opus-4-5',
|
|
6
|
+
'Claude Sonnet 4.5',
|
|
7
|
+
'Claude Haiku 4.5',
|
|
8
|
+
'GPT-5.2',
|
|
9
|
+
'GPT-5 mini',
|
|
10
|
+
'GPT-5 nano'
|
|
10
11
|
];
|
|
11
12
|
|
|
12
13
|
export async function createCompletePrompt(pagesFolder: string, model?: string): Promise<completePrompt> {
|