feat: chat uploads, vision turn isolation, and MindSpace agent improvements
Add chat file/image upload UX, attachment proxying, vision thumbnails, and per-turn image scoping so agents only use the current upload. Extend MindSpace asset context, billing token state, OA/scenario verify scripts, and related runtime config. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+15
-2
@@ -28,6 +28,7 @@ import {
|
||||
buildPagePublishFailureText,
|
||||
} from './wechat/prompts/page-generate.mjs';
|
||||
import { selectSendableHtmlArtifacts } from './wechat/verify/page-artifact.mjs';
|
||||
import { resolveBillingTokenState } from './billing-token-state.mjs';
|
||||
|
||||
export { buildWechatAgentPrompt };
|
||||
|
||||
@@ -1336,6 +1337,16 @@ export function createWechatMpService({
|
||||
const fetchForSession = (sessionId, pathname, init) =>
|
||||
sessionApiFetch ? sessionApiFetch(sessionId, pathname, init) : apiFetch(pathname, init);
|
||||
|
||||
const resolveWechatBillingTokenState = (sessionId, tokenState) =>
|
||||
resolveBillingTokenState(tokenState, {
|
||||
sessionId,
|
||||
fetchSession: async (sid) => {
|
||||
const response = await fetchForSession(sid, `/sessions/${encodeURIComponent(sid)}`);
|
||||
if (!response?.ok) return null;
|
||||
return readJsonResponse(response);
|
||||
},
|
||||
});
|
||||
|
||||
const buildBindUrl = () => {
|
||||
if (/^https?:\/\//i.test(config.bindPath)) return config.bindPath;
|
||||
const path = config.bindPath.startsWith('/') ? config.bindPath : `/${config.bindPath}`;
|
||||
@@ -1916,7 +1927,8 @@ export function createWechatMpService({
|
||||
throw new Error('stale_session_poisoned_completion');
|
||||
}
|
||||
if (reply.tokenState) {
|
||||
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, requestId);
|
||||
const tokenState = await resolveWechatBillingTokenState(sessionId, reply.tokenState);
|
||||
await userAuth.billSessionUsage(user.userId, sessionId, tokenState, requestId);
|
||||
}
|
||||
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
||||
workingDir,
|
||||
@@ -2028,7 +2040,8 @@ export function createWechatMpService({
|
||||
throw new Error(buildHtmlPublishFailureText());
|
||||
}
|
||||
if (reply.tokenState) {
|
||||
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, retryId);
|
||||
const tokenState = await resolveWechatBillingTokenState(sessionId, reply.tokenState);
|
||||
await userAuth.billSessionUsage(user.userId, sessionId, tokenState, retryId);
|
||||
}
|
||||
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
||||
workingDir,
|
||||
|
||||
Reference in New Issue
Block a user