feat: complete WorkBuddy parity and Windows release workflow

This commit is contained in:
xiaohan.yuan committed 2026-10-18 12:45:21 +08:00
1 parent 143516b3a8
commit d5512df549
434 files changed
+54977 -1854

No files matched your search

+69
View File
@@ -0,0 +1,69 @@
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>): 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')