mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-24 09:41:17 +00:00
Merge pull request #916 from enzyme2013/fix/allow-new-session-after-clear [skip ci]
fix: allow new session binding after /clear command
This commit is contained in:
@@ -377,19 +377,13 @@ async function handleMessagesRequest(req, res) {
|
|||||||
accountId &&
|
accountId &&
|
||||||
accountType === 'claude-official'
|
accountType === 'claude-official'
|
||||||
) {
|
) {
|
||||||
// 🚫 检测旧会话(污染的会话)
|
// 🆕 允许新 session ID 创建绑定(支持 Claude Code /clear 等场景)
|
||||||
if (isOldSession(req.body)) {
|
// 信任客户端的 session ID 作为新会话的标识,不再检查请求内容
|
||||||
const cfg = await claudeRelayConfigService.getConfig()
|
logger.info(
|
||||||
logger.warn(
|
`🔗 Creating new session binding: sessionId=${originalSessionIdForBinding}, ` +
|
||||||
`🚫 Old session rejected: sessionId=${originalSessionIdForBinding}, messages.length=${req.body?.messages?.length}, tools.length=${req.body?.tools?.length || 0}, isOldSession=true`
|
`messages.length=${req.body?.messages?.length}, tools.length=${req.body?.tools?.length || 0}, ` +
|
||||||
|
`accountId=${accountId}, accountType=${accountType}`
|
||||||
)
|
)
|
||||||
return res.status(400).json({
|
|
||||||
error: {
|
|
||||||
type: 'session_binding_error',
|
|
||||||
message: cfg.sessionBindingErrorMessage || '你的本地session已污染,请清理后使用。'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建绑定
|
// 创建绑定
|
||||||
try {
|
try {
|
||||||
@@ -944,19 +938,13 @@ async function handleMessagesRequest(req, res) {
|
|||||||
accountId &&
|
accountId &&
|
||||||
accountType === 'claude-official'
|
accountType === 'claude-official'
|
||||||
) {
|
) {
|
||||||
// 🚫 检测旧会话(污染的会话)
|
// 🆕 允许新 session ID 创建绑定(支持 Claude Code /clear 等场景)
|
||||||
if (isOldSession(req.body)) {
|
// 信任客户端的 session ID 作为新会话的标识,不再检查请求内容
|
||||||
const cfg = await claudeRelayConfigService.getConfig()
|
logger.info(
|
||||||
logger.warn(
|
`🔗 Creating new session binding (non-stream): sessionId=${originalSessionIdForBindingNonStream}, ` +
|
||||||
`🚫 Old session rejected (non-stream): sessionId=${originalSessionIdForBindingNonStream}, messages.length=${req.body?.messages?.length}, tools.length=${req.body?.tools?.length || 0}, isOldSession=true`
|
`messages.length=${req.body?.messages?.length}, tools.length=${req.body?.tools?.length || 0}, ` +
|
||||||
|
`accountId=${accountId}, accountType=${accountType}`
|
||||||
)
|
)
|
||||||
return res.status(400).json({
|
|
||||||
error: {
|
|
||||||
type: 'session_binding_error',
|
|
||||||
message: cfg.sessionBindingErrorMessage || '你的本地session已污染,请清理后使用。'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建绑定
|
// 创建绑定
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const DEFAULT_CONFIG = {
|
|||||||
claudeCodeOnlyEnabled: false,
|
claudeCodeOnlyEnabled: false,
|
||||||
globalSessionBindingEnabled: false,
|
globalSessionBindingEnabled: false,
|
||||||
sessionBindingErrorMessage: '你的本地session已污染,请清理后使用。',
|
sessionBindingErrorMessage: '你的本地session已污染,请清理后使用。',
|
||||||
sessionBindingTtlDays: 30, // 会话绑定 TTL(天),默认30天
|
sessionBindingTtlDays: 1, // 会话绑定 TTL(天),默认1天(支持 /clear 场景,避免 Redis 累积)
|
||||||
// 用户消息队列配置
|
// 用户消息队列配置
|
||||||
userMessageQueueEnabled: false, // 是否启用用户消息队列(默认关闭)
|
userMessageQueueEnabled: false, // 是否启用用户消息队列(默认关闭)
|
||||||
userMessageQueueDelayMs: 200, // 请求间隔(毫秒)
|
userMessageQueueDelayMs: 200, // 请求间隔(毫秒)
|
||||||
|
|||||||
@@ -1904,7 +1904,7 @@ const claudeConfig = ref({
|
|||||||
claudeCodeOnlyEnabled: false,
|
claudeCodeOnlyEnabled: false,
|
||||||
globalSessionBindingEnabled: false,
|
globalSessionBindingEnabled: false,
|
||||||
sessionBindingErrorMessage: '你的本地session已污染,请清理后使用。',
|
sessionBindingErrorMessage: '你的本地session已污染,请清理后使用。',
|
||||||
sessionBindingTtlDays: 30,
|
sessionBindingTtlDays: 1,
|
||||||
userMessageQueueEnabled: false, // 与后端默认值保持一致
|
userMessageQueueEnabled: false, // 与后端默认值保持一致
|
||||||
userMessageQueueDelayMs: 200,
|
userMessageQueueDelayMs: 200,
|
||||||
userMessageQueueTimeoutMs: 5000, // 与后端默认值保持一致(优化后锁持有时间短无需长等待)
|
userMessageQueueTimeoutMs: 5000, // 与后端默认值保持一致(优化后锁持有时间短无需长等待)
|
||||||
@@ -2203,7 +2203,7 @@ const loadClaudeConfig = async () => {
|
|||||||
globalSessionBindingEnabled: response.config?.globalSessionBindingEnabled ?? false,
|
globalSessionBindingEnabled: response.config?.globalSessionBindingEnabled ?? false,
|
||||||
sessionBindingErrorMessage:
|
sessionBindingErrorMessage:
|
||||||
response.config?.sessionBindingErrorMessage || '你的本地session已污染,请清理后使用。',
|
response.config?.sessionBindingErrorMessage || '你的本地session已污染,请清理后使用。',
|
||||||
sessionBindingTtlDays: response.config?.sessionBindingTtlDays ?? 30,
|
sessionBindingTtlDays: response.config?.sessionBindingTtlDays ?? 1,
|
||||||
userMessageQueueEnabled: response.config?.userMessageQueueEnabled ?? false, // 与后端默认值保持一致
|
userMessageQueueEnabled: response.config?.userMessageQueueEnabled ?? false, // 与后端默认值保持一致
|
||||||
userMessageQueueDelayMs: response.config?.userMessageQueueDelayMs ?? 200,
|
userMessageQueueDelayMs: response.config?.userMessageQueueDelayMs ?? 200,
|
||||||
userMessageQueueTimeoutMs: response.config?.userMessageQueueTimeoutMs ?? 5000, // 与后端默认值保持一致
|
userMessageQueueTimeoutMs: response.config?.userMessageQueueTimeoutMs ?? 5000, // 与后端默认值保持一致
|
||||||
|
|||||||
Reference in New Issue
Block a user