import assert from 'node:assert/strict' import type { ChatMessage } from '../src/shared/types' import { deriveProjectTaskStatus, matchesProjectTaskFilter, projectTaskStatusClass, runningSessionIds, } from '../src/renderer/src/projects/project-task-model' import { projectCapabilityRefKey, uniqueProjectCapabilityRefs, } from '../src/renderer/src/projects/project-capability-model' function assistant(overrides: Partial): ChatMessage { return { id: `assistant-${Math.random()}`, role: 'assistant', content: '', createdAt: 1, ...overrides, } } assert.deepEqual( [...runningSessionIds({ byRunId: { sessionId: 'session-a' }, orphan: {}, duplicate: { sessionId: 'session-a' }, })], ['session-a'], ) assert.equal(deriveProjectTaskStatus([], false), 'idle') assert.equal(deriveProjectTaskStatus([], true), 'running') assert.equal(deriveProjectTaskStatus([assistant({ status: 'done' })], true), 'running') assert.equal(deriveProjectTaskStatus([assistant({ status: 'done' })], false), 'completed') assert.equal(deriveProjectTaskStatus([assistant({ status: 'streaming' })], true), 'running') assert.equal(deriveProjectTaskStatus([assistant({ status: 'done', interrupted: true })], false), 'cancelled') assert.equal(deriveProjectTaskStatus([assistant({ status: 'error' })], false), 'error') assert.equal(deriveProjectTaskStatus([assistant({ status: 'cancelled' })], false), 'cancelled') assert.equal(deriveProjectTaskStatus([assistant({})], false), 'unknown') assert.equal(deriveProjectTaskStatus([ assistant({ status: 'error' }), assistant({ status: 'done' }), { id: 'user-latest', role: 'user', content: 'next', createdAt: 2 }, ], false), 'completed') assert.equal(matchesProjectTaskFilter('running', 'active'), true) assert.equal(matchesProjectTaskFilter('completed', 'active'), false) assert.equal(matchesProjectTaskFilter('completed', 'completed'), true) assert.equal(matchesProjectTaskFilter('idle', 'completed'), false) assert.equal(matchesProjectTaskFilter('error', 'active'), false) assert.equal(matchesProjectTaskFilter('cancelled', 'completed'), false) assert.equal(matchesProjectTaskFilter('unknown', 'all'), true) assert.equal(projectTaskStatusClass('running'), '') assert.equal(projectTaskStatusClass('completed'), ' wb-status-dot--success') assert.equal(projectTaskStatusClass('error'), ' wb-status-dot--error') assert.equal(projectTaskStatusClass('cancelled'), ' wb-status-dot--error') assert.equal(projectTaskStatusClass('idle'), ' wb-status-dot--muted') assert.equal(projectTaskStatusClass('unknown'), ' wb-status-dot--muted') const sameIdRefs = [ { id: 'shared-expert', source: 'market' as const, provider: 'provider-a' }, { id: 'shared-expert', source: 'market' as const, provider: 'provider-b' }, { id: 'shared-expert', source: 'market' as const, provider: 'provider-a' }, ] assert.notEqual(projectCapabilityRefKey(sameIdRefs[0]!), projectCapabilityRefKey(sameIdRefs[1]!)) assert.deepEqual(uniqueProjectCapabilityRefs(sameIdRefs), sameIdRefs.slice(0, 2)) console.log('PROJECT_TASK_MODEL_PASS')