Improve WeChat MP replies and ship MindSpace/H5 production updates.
Add WeChat service account routing with sync acks, connectivity tests, and context isolation; document deploy runbooks; and bundle related MindSpace, voice, Plaza, and server gateway changes for production rollout. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+16
-12
@@ -595,13 +595,13 @@ export function createLlmProviderService(
|
||||
]);
|
||||
}
|
||||
|
||||
async function syncRow(row) {
|
||||
async function syncRow(row, fetchImpl = apiFetchImpl) {
|
||||
const profile = profileFromRow(row, decryptRow);
|
||||
const goosedProviderId = await syncProfileToGoosed(
|
||||
apiTarget,
|
||||
apiSecret,
|
||||
profile,
|
||||
apiFetchImpl,
|
||||
fetchImpl,
|
||||
);
|
||||
if (profile.providerKind === 'custom' && goosedProviderId !== row.goosed_provider_id) {
|
||||
await pool.query(
|
||||
@@ -635,7 +635,7 @@ export function createLlmProviderService(
|
||||
return { ok: true, model: profile.defaultModel };
|
||||
}
|
||||
|
||||
async function resolveSelectedProvider() {
|
||||
async function resolveSelectedProvider(fetchImpl = apiFetchImpl) {
|
||||
const row = await getSelectedRow();
|
||||
if (!row) {
|
||||
return { ok: false, message: '请先启用 LLM 配置' };
|
||||
@@ -649,7 +649,7 @@ export function createLlmProviderService(
|
||||
};
|
||||
}
|
||||
try {
|
||||
const goosedProviderId = await syncRow(row);
|
||||
const goosedProviderId = await syncRow(row, fetchImpl);
|
||||
const providerId =
|
||||
profile.providerKind === 'custom'
|
||||
? (goosedProviderId ?? profile.goosedProviderId ?? profile.providerId)
|
||||
@@ -669,7 +669,7 @@ export function createLlmProviderService(
|
||||
}
|
||||
|
||||
/** Local fallback is only for DeepSeek creditsExhausted — never auto-selected at boot/session start. */
|
||||
async function resolveLocalFallbackProvider() {
|
||||
async function resolveLocalFallbackProvider(fetchImpl = apiFetchImpl) {
|
||||
let localTest;
|
||||
try {
|
||||
localTest = await testLocalLlmConnection(apiFetchImpl);
|
||||
@@ -688,7 +688,7 @@ export function createLlmProviderService(
|
||||
const providerId = await ensureLocalFallbackProviderOnGoosed(
|
||||
apiTarget,
|
||||
apiSecret,
|
||||
apiFetchImpl,
|
||||
fetchImpl,
|
||||
);
|
||||
return {
|
||||
ok: true,
|
||||
@@ -967,22 +967,26 @@ export function createLlmProviderService(
|
||||
};
|
||||
},
|
||||
|
||||
async applyBestProviderForSession(sessionId) {
|
||||
const resolved = await resolveSelectedProvider();
|
||||
async applyBestProviderForSession(sessionId, fetchImpl = apiFetchImpl) {
|
||||
const resolved = await resolveSelectedProvider(fetchImpl);
|
||||
if (!resolved.ok) {
|
||||
return resolved;
|
||||
}
|
||||
await updateSessionProvider(goosedApi, sessionId, resolved.providerId, resolved.model);
|
||||
const sessionGoosedApi = (pathname, init) =>
|
||||
goosedApiFetch(apiTarget, apiSecret, pathname, init, fetchImpl);
|
||||
await updateSessionProvider(sessionGoosedApi, sessionId, resolved.providerId, resolved.model);
|
||||
return resolved;
|
||||
},
|
||||
|
||||
/** Switch session to local Ollama (credits exhausted or relay 500 payload limit). */
|
||||
async applyLocalFallbackForSession(sessionId) {
|
||||
const resolved = await resolveLocalFallbackProvider();
|
||||
async applyLocalFallbackForSession(sessionId, fetchImpl = apiFetchImpl) {
|
||||
const resolved = await resolveLocalFallbackProvider(fetchImpl);
|
||||
if (!resolved.ok) {
|
||||
return resolved;
|
||||
}
|
||||
await updateSessionProvider(goosedApi, sessionId, resolved.providerId, resolved.model);
|
||||
const sessionGoosedApi = (pathname, init) =>
|
||||
goosedApiFetch(apiTarget, apiSecret, pathname, init, fetchImpl);
|
||||
await updateSessionProvider(sessionGoosedApi, sessionId, resolved.providerId, resolved.model);
|
||||
return resolved;
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user