feat: 优化任务状态与图片 MCP 提示

This commit is contained in:
shiyue
2026-08-13 00:34:37 +08:00
parent 86231f0d97
commit 214ff4ec88
13 changed files with 1353 additions and 49 deletions

View File

@@ -39,6 +39,7 @@ function createHarness() {
['priority-c', sessionFixture('priority-c')],
['lifecycle-d', sessionFixture('lifecycle-d')],
['mcp-e', sessionFixture('mcp-e')],
['classifier-h', sessionFixture('classifier-h')],
]);
let statusConfig = null;
let clockTick = 0;
@@ -243,6 +244,27 @@ async function main() {
assert.deepStrictEqual(queriedCustomTasks.map((task) => task.sessionId), ['ordinary-a']);
assert.strictEqual('progress' in queriedCustomTasks[0].taskTracking, false);
// 自动分类器是独立审计来源,仍由 expectedVersion 负责并发门禁。
const classifierEnabled = service.setTracking('classifier-h', true, {
source: 'user', expectedVersion: 0,
});
const classifierUserMove = service.updateStatus('classifier-h', {
statusId: 'waiting_user', expectedVersion: classifierEnabled.taskTracking.version,
}, { source: 'user', id: 'user-h' });
const classifierMove = service.updateStatus('classifier-h', {
statusId: 'waiting-release',
reason: '用户已确认继续推进',
summary: '等待发布前的最终处理',
expectedVersion: classifierUserMove.taskTracking.version,
}, { source: 'classifier', id: 'task-status-classifier' });
assert.strictEqual(classifierMove.changed, true);
assert.strictEqual(classifierMove.taskTracking.statusId, 'waiting-release');
assert.strictEqual(classifierMove.taskTracking.source, 'classifier');
assert.strictEqual(classifierMove.taskTracking.version, classifierUserMove.taskTracking.version + 1);
expectTaskError(() => service.updateStatus('classifier-h', {
statusId: 'completed', expectedVersion: classifierUserMove.taskTracking.version,
}, { source: 'classifier' }), 'task_version_conflict');
// 停用跟踪仍保留状态;迁移会覆盖启用和停用会话中的引用。
const enabledB = service.setTracking('migration-b', true, { source: 'user', expectedVersion: 0 });
const customTaskB = service.updateStatus('migration-b', {
@@ -267,7 +289,8 @@ async function main() {
'waiting-release', 'waiting_user', { source: 'user', expectedVersion: 3 },
);
assert.strictEqual(migration.version, 4);
assert.deepStrictEqual(migration.migratedSessionIds.sort(), ['migration-b', 'ordinary-a']);
assert.deepStrictEqual(migration.migratedSessionIds.sort(), ['classifier-h', 'migration-b', 'ordinary-a']);
assert.strictEqual(service.getTask('classifier-h').taskTracking.statusId, 'waiting_user');
assert.strictEqual(service.getTask('ordinary-a').taskTracking.statusId, 'waiting_user');
assert.strictEqual(service.getTask('migration-b').taskTracking.statusId, 'waiting_user');
assert.strictEqual(service.getTask('migration-b').taskTracking.enabled, false);