merge: feature/page-data-dev-aider into main

Bring in Page Data Aider dev loop, adm code-run policy UI, and customer order demo.
Keep system disclosure policy and agent code-run admin wiring side by side.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-07-24 14:42:25 +08:00
39 changed files with 3295 additions and 47 deletions
+38 -8
View File
@@ -216,6 +216,7 @@ import { createMemoryV2AdminConfigService } from './memory-v2-admin-config.mjs';
import { createEpisodicMemoryService } from './episodic-memory.mjs';
import { createSkillRuntimeAdminConfigService } from './skill-runtime-admin-config.mjs';
import { createSystemDisclosurePolicyService } from './system-disclosure-policy.mjs';
import { createAgentCodeRunAdminConfigService } from './agent-code-run-admin-config.mjs';
import { createWechatScheduleLlmConfigService } from './wechat-schedule-llm-config.mjs';
import { createExperienceService } from './experience-service.mjs';
import { attachAsrRoutes } from './asr-proxy.mjs';
@@ -388,6 +389,7 @@ let episodicMemoryService = null;
let memoryV2ConfigService = null;
let skillRuntimeConfigService = null;
let systemDisclosurePolicyService = null;
let agentCodeRunPolicyService = null;
let wechatScheduleLlmConfigService = null;
let mindSpace = null;
let mindSpaceAssets = null;
@@ -725,6 +727,7 @@ async function bootstrapUserAuth() {
skillRuntimeConfigService = createSkillRuntimeAdminConfigService(pool, { h5Root: __dirname });
systemDisclosurePolicyService = createSystemDisclosurePolicyService(pool);
await systemDisclosurePolicyService.initialize();
agentCodeRunPolicyService = createAgentCodeRunAdminConfigService(pool, { env: process.env });
wechatScheduleLlmConfigService = createWechatScheduleLlmConfigService(pool);
conversationMemoryService = createConversationMemoryService(pool, {
llmProviderService,
@@ -1033,6 +1036,16 @@ async function resolveSkillRuntimeForClient() {
}
}
async function resolveAgentCodeRunForClient(userId) {
if (!agentCodeRunPolicyService?.getPublicClientPolicy) return null;
try {
return await agentCodeRunPolicyService.getPublicClientPolicy(userId);
} catch (err) {
console.warn('[AgentCodeRun] public policy unavailable:', err instanceof Error ? err.message : err);
return null;
}
}
app.get('/auth/status', async (req, res) => {
await userAuthReady;
if (userAuth) {
@@ -1042,6 +1055,7 @@ app.get('/auth/status', async (req, res) => {
const row = await userAuth.getUserById(me.id);
const capabilityState = await userAuth.resolveUserCapabilities(row);
const skillRuntime = await resolveSkillRuntimeForClient();
const agentCodeRun = await resolveAgentCodeRunForClient(me.id);
return res.json({
authenticated: true,
user: me,
@@ -1050,6 +1064,7 @@ app.get('/auth/status', async (req, res) => {
grantedSkills: capabilityState.grantedSkills ?? [],
unrestricted: capabilityState.unrestricted,
skillRuntime,
agentCodeRun,
});
} catch (err) {
console.error('[Auth] status failed:', err instanceof Error ? err.message : err);
@@ -2238,12 +2253,21 @@ function runtimeCsvList(value) {
}
function runtimeCodeRunPolicyStatus() {
return {
enabled: runtimeEnvFlag(process.env.MEMIND_AGENT_CODE_RUNS_ENABLED),
userAllowlist: runtimeCsvList(process.env.MEMIND_AGENT_CODE_RUNS_USER_IDS),
taskTypeAllowlist: runtimeCsvList(process.env.MEMIND_AGENT_CODE_RUN_TASK_TYPES),
requireValidation: runtimeEnvFlag(process.env.MEMIND_AGENT_CODE_RUNS_REQUIRE_VALIDATION),
};
return agentCodeRunPolicyService?.getRuntimeStatusSummary
? agentCodeRunPolicyService.getRuntimeStatusSummary()
: Promise.resolve({
source: 'env',
enabled: runtimeEnvFlag(process.env.MEMIND_AGENT_CODE_RUNS_ENABLED),
clientEnabled: runtimeEnvFlag(process.env.VITE_AGENT_CODE_RUNS_ENABLED),
userAllowlist: runtimeCsvList(process.env.MEMIND_AGENT_CODE_RUNS_USER_IDS),
taskTypeAllowlist: runtimeCsvList(process.env.MEMIND_AGENT_CODE_RUN_TASK_TYPES),
requireValidation: runtimeEnvFlag(process.env.MEMIND_AGENT_CODE_RUNS_REQUIRE_VALIDATION),
pageDataDevAutodetect: runtimeEnvFlag(process.env.VITE_AGENT_PAGE_DATA_DEV_AUTODETECT),
generalAutodetect: runtimeEnvFlag(process.env.VITE_AGENT_CODE_RUNS_AUTODETECT),
envOverrideActive: String(process.env.MEMIND_CODE_RUN_POLICY_SOURCE ?? '').trim().toLowerCase() === 'env',
updatedAt: null,
updatedBy: null,
});
}
api.get('/runtime/status', async (_req, res) => {
@@ -2271,7 +2295,7 @@ api.get('/runtime/status', async (_req, res) => {
if (toolQueue) {
status.toolRuntime = {
...(status.toolRuntime ?? {}),
codeRunPolicy: runtimeCodeRunPolicyStatus(),
codeRunPolicy: await runtimeCodeRunPolicyStatus(),
queue: toolQueue,
};
}
@@ -5109,7 +5133,13 @@ api.post('/agent/runs', async (req, res, next) => {
[
tkmindProxy.requireUser,
tkmindProxy.ensureChatAllowed,
createPostAgentRunsHandler({ userAuth, sessionAccess, agentRunGateway, mindSpaceAssetAgent }),
createPostAgentRunsHandler({
userAuth,
sessionAccess,
agentRunGateway,
mindSpaceAssetAgent,
codeRunPolicyService: agentCodeRunPolicyService,
}),
],
req,
res,