Files
memind/scripts/run-cursor-help-real-test.mjs
T
john a15c4177de
Memind CI / Test, build, and release guards (push) Successful in 10m3s
test(cursor): add executor routing and help remediation scenarios
Add dry-run, e2e, and poem-page remediation scripts for cursor executor
and help escalation verification.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 09:33:51 +08:00

89 lines
2.9 KiB
JavaScript

#!/usr/bin/env node
/**
* Enqueue one help ticket and process it with real Cursor agent CLI (--once).
* Usage: node scripts/run-cursor-help-real-test.mjs
*/
import crypto from 'node:crypto';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { setTimeout as sleep } from 'node:timers/promises';
import { createDbPool, migrateSchema } from '../db.mjs';
import {
HELP_ESCALATION_STATUS,
createHelpEscalationService,
} from '../help-escalation.mjs';
import { processOneHelpEscalation } from '../cursor-help-worker.mjs';
import { createScheduleService } from '../schedule-service.mjs';
import { loadH5Environment } from './load-env.mjs';
loadH5Environment(path.dirname(fileURLToPath(import.meta.url)));
const TEST_MARKER = '[CURSOR-REAL-TEST]';
const USER_ID = process.env.MEMIND_HELP_TEST_USER_ID ?? '1c99b83b-0454-474f-a5d2-129d34506a32';
const PAGE = process.env.MEMIND_HELP_TEST_PAGE ?? 'public/tang-dynasty.html';
const pool = createDbPool();
await migrateSchema(pool);
const helpEscalationService = createHelpEscalationService({ pool });
if (!helpEscalationService.enabled) {
console.error('MEMIND_CURSOR_HELP_ENABLED is off');
process.exit(1);
}
const helpText = [
`help ${TEST_MARKER} 我刚做了诗歌/主题 HTML 页面,但聊天里没有收到可打开的链接。`,
`页面文件: ${PAGE}`,
'请检查 delivery contract、修复交付,并给用户可打开的 Portal 链接(8081,不要用 5173)。',
'完成后在 JSON userMessage 里给出链接。',
].join('\n');
const escalation = await helpEscalationService.enqueue({
userId: USER_ID,
channel: 'h5',
userText: helpText,
context: {
origin: 'cursor-real-test',
testMarker: TEST_MARKER,
relativePath: PAGE,
requestId: `cursor-real-${Date.now()}`,
},
});
console.log('enqueued:', { id: escalation.id, status: escalation.status });
console.log('spawning Cursor agent via processOneHelpEscalation...');
console.log('agent bin:', process.env.MEMIND_CURSOR_HELP_AGENT_BIN ?? '~/.local/bin/agent');
const scheduleService = createScheduleService(pool, {
defaultTimezone: process.env.MEMIND_DEFAULT_TIMEZONE ?? 'Asia/Shanghai',
});
const started = Date.now();
const result = await processOneHelpEscalation({
helpEscalationService,
scheduleService,
workerId: 'cursor-real-test-script',
logger: console,
});
const elapsedSec = Math.round((Date.now() - started) / 1000);
const finalRow = await helpEscalationService.getById(escalation.id);
console.log('\n=== Cursor Real Test Result ===');
console.log(JSON.stringify({
elapsedSec,
id: finalRow?.id,
status: finalRow?.status,
wasClaimed: finalRow?.startedAt != null,
resultPreview: String(finalRow?.resultText ?? '').slice(0, 200),
agentOutputPreview: String(finalRow?.agentOutput ?? '').slice(0, 300),
errorMessage: finalRow?.errorMessage ?? null,
}, null, 2));
await pool.end();
if (finalRow?.status !== HELP_ESCALATION_STATUS.SUCCEEDED || finalRow?.startedAt == null) {
process.exit(1);
}