Add Experience reflect background worker with env-gated scheduling.

Start a periodic reflect loop from portal and MindSpace service bootstraps when EXPERIENCE_REFLECT_ENABLED=1, aggregating repeated task outcomes on a configurable interval.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-09-02 14:31:50 +08:00
parent 2ec6fdbe11
commit 49758568bb
4 changed files with 249 additions and 0 deletions
@@ -1,4 +1,5 @@
import { createAssetGatewayConfigService } from '../asset-gateway.mjs';
import { startExperienceReflectWorker } from '../experience-reflect-worker.mjs';
import { createExperienceService } from '../experience-service.mjs';
import { createImageMakeAdminConfigService } from '../image-make-admin-config.mjs';
import { createImageMakeClientFromEnv } from '../image-make-client.mjs';
@@ -53,6 +54,8 @@ export async function bootstrapPortalAgentServices({
createMindSpaceImageGenerationServiceFn =
createMindSpaceImageGenerationService,
createWordFilterServiceFn = createWordFilterService,
startExperienceReflectWorkerFn = startExperienceReflectWorker,
setIntervalFn = setInterval,
relayBootstrap = RELAY_BOOTSTRAP,
} = {}) {
if (
@@ -99,6 +102,15 @@ export async function bootstrapPortalAgentServices({
}
}
const experienceReflectWorker = experienceService
? startExperienceReflectWorkerFn({
experienceService,
env,
logger,
setIntervalFn,
})
: { stop() {}, policy: { enabled: false } };
const mindSpaceAgentRunner =
createMindSpaceAgentRunnerFn({
apiTarget,
@@ -226,6 +238,7 @@ export async function bootstrapPortalAgentServices({
return {
mindSpaceAgentJobs,
experienceService,
experienceReflectWorker,
mindSpaceAgentRunner,
mindSpaceAudit,
userDataSpaceBackfill,