feat: add note mode and workflow config
This commit is contained in:
27
server.js
27
server.js
@@ -881,6 +881,16 @@ function safeFilename(name) {
|
||||
.slice(0, 120) || 'image';
|
||||
}
|
||||
|
||||
function contentDispositionInline(filename) {
|
||||
const raw = safeFilename(filename || 'image');
|
||||
const fallback = raw
|
||||
.replace(/[^\x20-\x7E]/g, '_')
|
||||
.replace(/["\\;]/g, '_')
|
||||
.trim()
|
||||
.slice(0, 120) || 'image';
|
||||
return `inline; filename="${fallback}"; filename*=UTF-8''${encodeURIComponent(raw)}`;
|
||||
}
|
||||
|
||||
function extFromMime(mime) {
|
||||
switch (mime) {
|
||||
case 'image/png': return '.png';
|
||||
@@ -1839,26 +1849,26 @@ function handleProcessComplete(sessionId, exitCode, signal) {
|
||||
if (autoRetryRequested) {
|
||||
if (contextLimitExceeded) {
|
||||
pendingCompactRetries.delete(sessionId);
|
||||
wsSend(entry.ws, { type: 'system_message', message: '已尝试执行 /compact,但仍未成功解除上下文超限。请手动缩小输入范围后重试。' });
|
||||
wsSend(entry.ws, { type: 'system_message', sessionId, message: '已尝试执行 /compact,但仍未成功解除上下文超限。请手动缩小输入范围后重试。' });
|
||||
} else {
|
||||
wsSend(entry.ws, { type: 'system_message', message: compactDoneMessage(entry.agent || 'claude') });
|
||||
wsSend(entry.ws, { type: 'system_message', message: compactAutoResumeMessage(entry.agent || 'claude') });
|
||||
wsSend(entry.ws, { type: 'system_message', sessionId, message: compactDoneMessage(entry.agent || 'claude') });
|
||||
wsSend(entry.ws, { type: 'system_message', sessionId, message: compactAutoResumeMessage(entry.agent || 'claude') });
|
||||
shouldReturnForFollowup = true;
|
||||
}
|
||||
} else {
|
||||
wsSend(entry.ws, { type: 'system_message', message: compactDoneMessage(entry.agent || 'claude') });
|
||||
wsSend(entry.ws, { type: 'system_message', sessionId, message: compactDoneMessage(entry.agent || 'claude') });
|
||||
}
|
||||
}
|
||||
|
||||
if (contextLimitExceeded && !pendingSlash && session && getRuntimeSessionId(session)) {
|
||||
pendingCompactRetries.set(sessionId, { text: pendingRetry?.text || '', mode: pendingRetry?.mode || session.permissionMode || 'yolo', reason: 'auto' });
|
||||
wsSend(entry.ws, { type: 'system_message', message: compactAutoStartMessage(entry.agent || 'claude') });
|
||||
wsSend(entry.ws, { type: 'system_message', sessionId, message: compactAutoStartMessage(entry.agent || 'claude') });
|
||||
shouldAutoCompact = true;
|
||||
}
|
||||
|
||||
if (completionError && !entry.errorSent && !shouldAutoCompact) {
|
||||
entry.errorSent = true;
|
||||
wsSend(entry.ws, { type: 'error', message: completionError });
|
||||
wsSend(entry.ws, { type: 'error', sessionId, message: completionError });
|
||||
}
|
||||
|
||||
wsSend(entry.ws, { type: 'done', sessionId, costUsd: entry.lastCost || null });
|
||||
@@ -2100,7 +2110,7 @@ const server = http.createServer((req, res) => {
|
||||
res.writeHead(200, {
|
||||
'Content-Type': meta.mime || 'application/octet-stream',
|
||||
'Content-Length': stat.size,
|
||||
'Content-Disposition': `inline; filename="${(meta.filename || 'image').replace(/"/g, '\\"')}"`,
|
||||
'Content-Disposition': contentDispositionInline(meta.filename || 'image'),
|
||||
'Cache-Control': 'private, no-store, max-age=0',
|
||||
});
|
||||
fs.createReadStream(meta.path).pipe(res);
|
||||
@@ -2765,6 +2775,9 @@ function handleNewSession(ws, msg) {
|
||||
cwd: resolvedCwd,
|
||||
};
|
||||
saveSession(session);
|
||||
for (const [, entry] of activeProcesses) {
|
||||
if (entry.ws === ws) entry.ws = null;
|
||||
}
|
||||
wsSessionMap.set(ws, id);
|
||||
wsSend(ws, {
|
||||
type: 'session_info',
|
||||
|
||||
Reference in New Issue
Block a user