f95d766f69
Memind CI / Test, build, and release guards (push) Failing after 14m36s
Parse Cursor CLI usage from stream-json output and charge through billSessionUsage so subscription quota is consumed first and wallet overage applies when needed. Co-authored-by: Cursor <cursoragent@cursor.com>
59 lines
2.2 KiB
JavaScript
59 lines
2.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
buildCursorExecutorLaunchPlan,
|
|
cursorExecutorEnabled,
|
|
resolvePreferredCodeExecutor,
|
|
} from './cursor-agent-launch.mjs';
|
|
|
|
test('cursor executor is disabled unless explicitly enabled', () => {
|
|
assert.equal(cursorExecutorEnabled({}), false);
|
|
assert.equal(cursorExecutorEnabled({ MEMIND_CURSOR_EXECUTOR_ENABLED: '1' }), true);
|
|
});
|
|
|
|
test('resolvePreferredCodeExecutor prefers cursor when enabled', () => {
|
|
assert.equal(resolvePreferredCodeExecutor({}), 'aider');
|
|
assert.equal(
|
|
resolvePreferredCodeExecutor({ MEMIND_CURSOR_EXECUTOR_ENABLED: '1' }),
|
|
'cursor',
|
|
);
|
|
assert.equal(
|
|
resolvePreferredCodeExecutor({
|
|
MEMIND_CURSOR_EXECUTOR_ENABLED: '1',
|
|
MEMIND_AIDER_SKILL_USE_CURSOR: '0',
|
|
}),
|
|
'aider',
|
|
);
|
|
});
|
|
|
|
test('buildCursorExecutorLaunchPlan includes workspace and mindspace hints', async () => {
|
|
const fs = await import('node:fs/promises');
|
|
const os = await import('node:os');
|
|
const path = await import('node:path');
|
|
const agentStub = path.join(await fs.mkdtemp(path.join(os.tmpdir(), 'cursor-agent-')), 'agent');
|
|
await fs.writeFile(agentStub, '#!/bin/sh\nexit 0\n', { mode: 0o755 });
|
|
|
|
const plan = buildCursorExecutorLaunchPlan({
|
|
cwd: '/tmp/mindspace/user-1',
|
|
instruction: '写一首春日诗并生成 public/spring-poem.html',
|
|
env: { MEMIND_CURSOR_EXECUTOR_AGENT_BIN: agentStub },
|
|
});
|
|
assert.equal(plan.ok, true);
|
|
assert.equal(plan.executor, 'cursor');
|
|
assert.equal(plan.cwd, '/tmp/mindspace/user-1');
|
|
assert.equal(plan.command, agentStub);
|
|
assert.ok(plan.args.includes('--output-format'));
|
|
assert.ok(plan.args.includes('stream-json'));
|
|
assert.ok(plan.args.includes('--workspace'));
|
|
assert.ok(plan.args.includes('/tmp/mindspace/user-1'));
|
|
assert.match(plan.args.at(-1) ?? '', /public\/.*\.html/);
|
|
assert.match(plan.args.at(-1) ?? '', /不要执行 git commit/);
|
|
assert.match(plan.args.at(-1) ?? '', /不要修改当前工作区之外的文件/);
|
|
});
|
|
|
|
test('buildCursorExecutorLaunchPlan rejects empty instruction', () => {
|
|
const plan = buildCursorExecutorLaunchPlan({ cwd: '/tmp/work', instruction: ' ' });
|
|
assert.equal(plan.ok, false);
|
|
assert.match(plan.message ?? '', /instruction/i);
|
|
});
|