Add MindSpace page live edit, chat skills, and H5 deploy tooling.
Introduce page edit sessions with draft preview and patch API, chat skill picker, user memory profile, h5ApiBase resolution, voice WAV transport, and scripts for 105/g2 deployment and Plaza local dev. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+49
-22
@@ -160,6 +160,14 @@ export function createTkmindProxy({ apiTarget, apiSecret, userAuth, llmProviderS
|
||||
workingDir,
|
||||
sessionPolicy,
|
||||
sandboxConstraints: publishLayout?.constraints ?? null,
|
||||
userContext: publishLayout
|
||||
? {
|
||||
userId: req.currentUser.id,
|
||||
displayName: publishLayout.displayName,
|
||||
username: publishLayout.username,
|
||||
slug: publishLayout.slug,
|
||||
}
|
||||
: null,
|
||||
});
|
||||
} catch (reconcileErr) {
|
||||
res.status(500).json({
|
||||
@@ -206,27 +214,38 @@ export function createTkmindProxy({ apiTarget, apiSecret, userAuth, llmProviderS
|
||||
}
|
||||
|
||||
const payload = JSON.parse(text);
|
||||
const workingDir = await userAuth.resolveWorkingDir(req.currentUser.id);
|
||||
const sessionPolicy = await userAuth.getAgentSessionPolicy(req.currentUser.id);
|
||||
const publishLayout = await userAuth.getUserPublishLayout(req.currentUser.id);
|
||||
try {
|
||||
await reconcileAgentSession(
|
||||
(pathname, init) => apiFetch(apiTarget, apiSecret, pathname, init),
|
||||
sessionId,
|
||||
{
|
||||
workingDir,
|
||||
sessionPolicy,
|
||||
sandboxConstraints: publishLayout?.constraints ?? null,
|
||||
},
|
||||
);
|
||||
} catch (reconcileErr) {
|
||||
res.status(500).json({
|
||||
message:
|
||||
reconcileErr instanceof Error
|
||||
? `会话恢复后策略同步失败:${reconcileErr.message}`
|
||||
: '会话恢复后策略同步失败',
|
||||
});
|
||||
return;
|
||||
const skipReconcile = req.body?.skip_reconcile === true;
|
||||
if (!skipReconcile) {
|
||||
const workingDir = await userAuth.resolveWorkingDir(req.currentUser.id);
|
||||
const sessionPolicy = await userAuth.getAgentSessionPolicy(req.currentUser.id);
|
||||
const publishLayout = await userAuth.getUserPublishLayout(req.currentUser.id);
|
||||
try {
|
||||
await reconcileAgentSession(
|
||||
(pathname, init) => apiFetch(apiTarget, apiSecret, pathname, init),
|
||||
sessionId,
|
||||
{
|
||||
workingDir,
|
||||
sessionPolicy,
|
||||
sandboxConstraints: publishLayout?.constraints ?? null,
|
||||
userContext: publishLayout
|
||||
? {
|
||||
userId: req.currentUser.id,
|
||||
displayName: publishLayout.displayName,
|
||||
username: publishLayout.username,
|
||||
slug: publishLayout.slug,
|
||||
}
|
||||
: null,
|
||||
},
|
||||
);
|
||||
} catch (reconcileErr) {
|
||||
res.status(500).json({
|
||||
message:
|
||||
reconcileErr instanceof Error
|
||||
? `会话恢复后策略同步失败:${reconcileErr.message}`
|
||||
: '会话恢复后策略同步失败',
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await applySessionLlmProvider(sessionId);
|
||||
@@ -317,7 +336,15 @@ export function createTkmindProxy({ apiTarget, apiSecret, userAuth, llmProviderS
|
||||
null,
|
||||
);
|
||||
if (result.ok && result.costCents > 0 && result.balanceCents != null) {
|
||||
pendingBalance = result.balanceCents;
|
||||
pendingBalance = {
|
||||
balanceCents: result.balanceCents,
|
||||
tokensUsed: result.tokensUsed ?? undefined,
|
||||
lastUsage: {
|
||||
inputTokens: result.deltaInputTokens ?? 0,
|
||||
outputTokens: result.deltaOutputTokens ?? 0,
|
||||
costCents: result.costCents,
|
||||
},
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user