goto-assistant 0.9.1 → 0.9.3
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/dist/agents/openai.js +47 -24
- package/dist/agents/openai.js.map +1 -1
- package/package.json +1 -1
- package/public/setup-chat.js +38 -30
- package/public/setup.html +6 -2
- package/public/setup.js +16 -2
package/dist/agents/openai.js
CHANGED
|
@@ -7,6 +7,15 @@ import { parseMessageContent } from "../sessions.js";
|
|
|
7
7
|
import { getUpload, ALLOWED_IMAGE_TYPES, extractFileId, formatUploadRef } from "../uploads.js";
|
|
8
8
|
const debug = createDebug("goto-assistant:openai");
|
|
9
9
|
const execAsync = promisify(exec);
|
|
10
|
+
/**
|
|
11
|
+
* Returns true if the error indicates a tool type is not supported by the model.
|
|
12
|
+
* Example: "Tool 'shell' is not supported with gpt-5-nano"
|
|
13
|
+
* The error is a 400 from the API that fires before streaming, so retry is safe.
|
|
14
|
+
*/
|
|
15
|
+
function isUnsupportedToolError(error) {
|
|
16
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
17
|
+
return message.includes("is not supported with");
|
|
18
|
+
}
|
|
10
19
|
class LocalShell {
|
|
11
20
|
async run(action) {
|
|
12
21
|
const output = [];
|
|
@@ -121,16 +130,12 @@ export async function runOpenAI(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
121
130
|
for (const server of mcpServers) {
|
|
122
131
|
await server.connect();
|
|
123
132
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
tools: useChatCompletions ? [] : [
|
|
131
|
-
shellTool({ shell: new LocalShell() }),
|
|
132
|
-
],
|
|
133
|
-
});
|
|
133
|
+
// shellTool is only available with the Responses API; not all Responses API
|
|
134
|
+
// models support it (e.g. gpt-5-nano rejects it with a 400). If the model
|
|
135
|
+
// rejects it, the retry loop below will re-create the agent without tools.
|
|
136
|
+
let tools = useChatCompletions ? [] : [
|
|
137
|
+
shellTool({ shell: new LocalShell() }),
|
|
138
|
+
];
|
|
134
139
|
// Build conversation input with history
|
|
135
140
|
const inputMessages = [];
|
|
136
141
|
// Add previous messages (re-include images from uploads)
|
|
@@ -201,24 +206,42 @@ export async function runOpenAI(prompt, config, mcpServersConfig, onChunk, optio
|
|
|
201
206
|
}
|
|
202
207
|
const trimmedMessages = trimHistory(inputMessages);
|
|
203
208
|
const input = trimmedMessages.length === 1 && !history?.length && !attachments?.length ? prompt : trimmedMessages;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
209
|
+
// Retry loop: if the model rejects a tool type (400 "is not supported
|
|
210
|
+
// with"), retry once without tools. The error fires before any streaming
|
|
211
|
+
// output, so retry is safe and invisible to the user.
|
|
212
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
213
|
+
const agent = new Agent({
|
|
214
|
+
name: "goto-assistant",
|
|
215
|
+
instructions: systemPromptOverride || "You are a helpful personal AI assistant. You have access to MCP tools for memory, scheduled tasks, and more. You also have a shell tool to execute commands on the host machine. You can also send messages to the user via connected messaging channels (e.g. WhatsApp) using the messaging tools — send to self or to any phone number. Use them when appropriate. IMPORTANT: At the start of each conversation, you MUST call the memory read_graph tool to retrieve all known context about the user before responding to their first message.",
|
|
216
|
+
model: config.openai.model,
|
|
217
|
+
mcpServers,
|
|
218
|
+
tools,
|
|
219
|
+
});
|
|
220
|
+
try {
|
|
221
|
+
const result = await runner.run(agent, input, { stream: true, maxTurns: MAX_AGENT_TURNS });
|
|
222
|
+
for await (const event of result) {
|
|
223
|
+
if (event.type === "raw_model_stream_event" &&
|
|
224
|
+
event.data?.type === "output_text_delta") {
|
|
225
|
+
const delta = event.data.delta;
|
|
226
|
+
if (delta) {
|
|
227
|
+
onChunk(delta);
|
|
228
|
+
}
|
|
212
229
|
}
|
|
213
230
|
}
|
|
231
|
+
break;
|
|
214
232
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (error instanceof MaxTurnsExceededError) {
|
|
235
|
+
onChunk(`\n\n[Stopped: reached the maximum number of tool-use turns (${MAX_AGENT_TURNS}). You can continue the conversation to pick up where I left off.]`);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (attempt === 0 && tools.length > 0 && isUnsupportedToolError(error)) {
|
|
239
|
+
debug("model %s does not support tool type, retrying without tools: %s", config.openai.model, error.message);
|
|
240
|
+
tools = [];
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
throw error;
|
|
220
244
|
}
|
|
221
|
-
throw error;
|
|
222
245
|
}
|
|
223
246
|
}
|
|
224
247
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/agents/openai.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/agents/openai.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/public/setup-chat.js
CHANGED
|
@@ -78,6 +78,33 @@ function buildDefaultMcpServers(provider, apiKey, model, baseUrl) {
|
|
|
78
78
|
return servers;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
// Shared model-loading step: sets state, fetches models, shows choices or error.
|
|
82
|
+
function doLoadModels() {
|
|
83
|
+
setupChatState.current = 'loading_models';
|
|
84
|
+
addMessage('assistant', 'Loading available models...');
|
|
85
|
+
setInputMode('disabled');
|
|
86
|
+
loadModelsForChat(setupChatState.provider, setupChatState.apiKey, setupChatState.baseUrl)
|
|
87
|
+
.then(function (models) {
|
|
88
|
+
var select = document.getElementById('model');
|
|
89
|
+
select.innerHTML = models.map(function (m) {
|
|
90
|
+
return '<option value="' + escapeHtml(m.id) + '">' + escapeHtml(m.name) + '</option>';
|
|
91
|
+
}).join('');
|
|
92
|
+
setupChatState.current = 'model';
|
|
93
|
+
addMessage('assistant', 'Select a model:');
|
|
94
|
+
showChoices(models.map(function (m) {
|
|
95
|
+
return { label: m.name, value: m.id };
|
|
96
|
+
}), function (modelId) {
|
|
97
|
+
handleModelSelect(modelId);
|
|
98
|
+
});
|
|
99
|
+
})
|
|
100
|
+
.catch(function (err) {
|
|
101
|
+
addMessage('assistant', 'Failed to load models: ' + err.message + '\n\nPlease check your API key and try again.');
|
|
102
|
+
setupChatState.current = 'api_key';
|
|
103
|
+
addMessage('assistant', 'Please enter your API key:');
|
|
104
|
+
setInputMode('password');
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
81
108
|
async function loadModelsForChat(provider, apiKey, baseUrl) {
|
|
82
109
|
var res = await fetch('/api/models', {
|
|
83
110
|
method: 'POST',
|
|
@@ -204,10 +231,16 @@ function handleInput(text) {
|
|
|
204
231
|
// Update form and sync cron config
|
|
205
232
|
document.getElementById('apiKey').value = text;
|
|
206
233
|
syncCronFromChat();
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
234
|
+
if (setupChatState.provider === 'claude') {
|
|
235
|
+
// Claude Agent SDK doesn't support proxies — skip base URL
|
|
236
|
+
setupChatState.baseUrl = '';
|
|
237
|
+
doLoadModels();
|
|
238
|
+
} else {
|
|
239
|
+
// Advance to base URL for OpenAI
|
|
240
|
+
setupChatState.current = 'base_url';
|
|
241
|
+
addMessage('assistant', 'Do you need a custom base URL? (For LiteLLM proxy)\n\nPress Enter to skip for direct API access.');
|
|
242
|
+
setInputMode('optional');
|
|
243
|
+
}
|
|
211
244
|
return;
|
|
212
245
|
}
|
|
213
246
|
|
|
@@ -221,32 +254,7 @@ function handleInput(text) {
|
|
|
221
254
|
// Update form and sync cron config
|
|
222
255
|
document.getElementById('baseUrl').value = text || '';
|
|
223
256
|
syncCronFromChat();
|
|
224
|
-
|
|
225
|
-
setupChatState.current = 'loading_models';
|
|
226
|
-
addMessage('assistant', 'Loading available models...');
|
|
227
|
-
setInputMode('disabled');
|
|
228
|
-
loadModelsForChat(setupChatState.provider, setupChatState.apiKey, setupChatState.baseUrl)
|
|
229
|
-
.then(function (models) {
|
|
230
|
-
// Update the form model dropdown
|
|
231
|
-
var select = document.getElementById('model');
|
|
232
|
-
select.innerHTML = models.map(function (m) {
|
|
233
|
-
return '<option value="' + escapeHtml(m.id) + '">' + escapeHtml(m.name) + '</option>';
|
|
234
|
-
}).join('');
|
|
235
|
-
// Show model choices in chat
|
|
236
|
-
setupChatState.current = 'model';
|
|
237
|
-
addMessage('assistant', 'Select a model:');
|
|
238
|
-
showChoices(models.map(function (m) {
|
|
239
|
-
return { label: m.name, value: m.id };
|
|
240
|
-
}), function (modelId) {
|
|
241
|
-
handleModelSelect(modelId);
|
|
242
|
-
});
|
|
243
|
-
})
|
|
244
|
-
.catch(function (err) {
|
|
245
|
-
addMessage('assistant', 'Failed to load models: ' + err.message + '\n\nPlease check your API key and try again.');
|
|
246
|
-
setupChatState.current = 'api_key';
|
|
247
|
-
addMessage('assistant', 'Please enter your API key:');
|
|
248
|
-
setInputMode('password');
|
|
249
|
-
});
|
|
257
|
+
doLoadModels();
|
|
250
258
|
return;
|
|
251
259
|
}
|
|
252
260
|
}
|
package/public/setup.html
CHANGED
|
@@ -36,8 +36,10 @@
|
|
|
36
36
|
<label for="apiKey">API Key</label>
|
|
37
37
|
<input type="password" id="apiKey" placeholder="sk-ant-... or sk-...">
|
|
38
38
|
|
|
39
|
-
<
|
|
40
|
-
|
|
39
|
+
<div id="baseUrlRow">
|
|
40
|
+
<label for="baseUrl">Base URL <small>(optional — for LiteLLM proxy)</small></label>
|
|
41
|
+
<input type="text" id="baseUrl" placeholder="Leave empty for direct API">
|
|
42
|
+
</div>
|
|
41
43
|
|
|
42
44
|
<label for="model">Model</label>
|
|
43
45
|
<div role="group">
|
|
@@ -128,6 +130,7 @@
|
|
|
128
130
|
// Sync cron when provider, API key, base URL, or model changes
|
|
129
131
|
document.querySelectorAll('input[name="provider"]').forEach(radio => {
|
|
130
132
|
radio.addEventListener('change', () => {
|
|
133
|
+
toggleBaseUrl(getProvider());
|
|
131
134
|
handleProviderSwitch(isEditing, window._savedConfig);
|
|
132
135
|
doSyncCronConfig();
|
|
133
136
|
});
|
|
@@ -348,6 +351,7 @@
|
|
|
348
351
|
// Pre-fill form from existing config, then initialize chat panel
|
|
349
352
|
(async () => {
|
|
350
353
|
await window.refreshForm();
|
|
354
|
+
toggleBaseUrl(getProvider());
|
|
351
355
|
initSetupChat({ isEditing, config: window._savedConfig || null });
|
|
352
356
|
})();
|
|
353
357
|
|
package/public/setup.js
CHANGED
|
@@ -100,13 +100,27 @@ function syncCronConfig(servers, isEditing, buildCronConfigFn, savedConfig) {
|
|
|
100
100
|
return servers;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
// Toggle base URL field visibility. Claude Agent SDK doesn't work with proxies.
|
|
104
|
+
function toggleBaseUrl(provider) {
|
|
105
|
+
var row = document.getElementById('baseUrlRow');
|
|
106
|
+
if (!row) return;
|
|
107
|
+
if (provider === 'claude') {
|
|
108
|
+
row.style.display = 'none';
|
|
109
|
+
document.getElementById('baseUrl').value = '';
|
|
110
|
+
} else {
|
|
111
|
+
row.style.display = '';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
103
115
|
// Handle provider switch: pre-fill baseUrl and model from saved config.
|
|
104
116
|
function handleProviderSwitch(isEditing, savedConfig) {
|
|
105
117
|
if (!isEditing || !savedConfig) return;
|
|
106
118
|
|
|
107
119
|
var p = getProvider();
|
|
108
120
|
var pc = savedConfig[p] || {};
|
|
109
|
-
|
|
121
|
+
if (p !== 'claude') {
|
|
122
|
+
document.getElementById('baseUrl').value = pc.baseUrl || '';
|
|
123
|
+
}
|
|
110
124
|
var select = document.getElementById('model');
|
|
111
125
|
if (pc.model) {
|
|
112
126
|
select.innerHTML = '<option value="' + escapeHtml(pc.model) + '">' + escapeHtml(pc.model) + '</option>';
|
|
@@ -116,5 +130,5 @@ function handleProviderSwitch(isEditing, savedConfig) {
|
|
|
116
130
|
}
|
|
117
131
|
|
|
118
132
|
if (typeof module !== 'undefined' && module.exports) {
|
|
119
|
-
module.exports = { defaultServers: defaultServers, getProvider: getProvider, renderServers: renderServers, readServers: readServers, syncCronConfig: syncCronConfig, handleProviderSwitch: handleProviderSwitch };
|
|
133
|
+
module.exports = { defaultServers: defaultServers, getProvider: getProvider, renderServers: renderServers, readServers: readServers, syncCronConfig: syncCronConfig, handleProviderSwitch: handleProviderSwitch, toggleBaseUrl: toggleBaseUrl };
|
|
120
134
|
}
|