@lemoncat7/dsh-partner 1.10.6 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/docs/architecture.md +14 -0
- package/lib/api/features/workspace-api.js +2 -2
- package/lib/api/features/workspace-api.js.map +1 -1
- package/lib/client-api.d.ts +8 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.js +1103 -917
- package/lib/client.js.map +4 -4
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +5 -3
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/collaboration/domain.d.ts +2 -0
- package/lib/collaboration/domain.d.ts.map +1 -1
- package/lib/collaboration/domain.js.map +1 -1
- package/lib/collaboration/service.d.ts +1 -0
- package/lib/collaboration/service.d.ts.map +1 -1
- package/lib/collaboration/service.js +15 -4
- package/lib/collaboration/service.js.map +1 -1
- package/lib/domain.d.ts +1 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/pendant/card-image.d.ts +1 -1
- package/lib/pendant/card-image.d.ts.map +1 -1
- package/lib/pendant/card-image.js +16 -6
- package/lib/pendant/card-image.js.map +1 -1
- package/lib/pendant/physics.d.ts +1 -0
- package/lib/pendant/physics.d.ts.map +1 -1
- package/lib/pendant/physics.js +24 -2
- package/lib/pendant/physics.js.map +1 -1
- package/lib/pendant/renderer.d.ts.map +1 -1
- package/lib/pendant/renderer.js +21 -4
- package/lib/pendant/renderer.js.map +1 -1
- package/lib/pendant/settings-panel.d.ts.map +1 -1
- package/lib/pendant/settings-panel.js +5 -4
- package/lib/pendant/settings-panel.js.map +1 -1
- package/lib/pendant/settings.d.ts +5 -0
- package/lib/pendant/settings.d.ts.map +1 -1
- package/lib/pendant/settings.js +9 -3
- package/lib/pendant/settings.js.map +1 -1
- package/lib/pendant/strap-preview.d.ts +3 -1
- package/lib/pendant/strap-preview.d.ts.map +1 -1
- package/lib/pendant/strap-preview.js +6 -3
- package/lib/pendant/strap-preview.js.map +1 -1
- package/lib/pendant/strap-texture.d.ts +5 -0
- package/lib/pendant/strap-texture.d.ts.map +1 -0
- package/lib/pendant/strap-texture.js +9 -0
- package/lib/pendant/strap-texture.js.map +1 -0
- package/lib/pendant/strap.d.ts.map +1 -1
- package/lib/pendant/strap.js +39 -2
- package/lib/pendant/strap.js.map +1 -1
- package/lib/pendant-renderer.js +174 -174
- package/lib/requirements/draft.d.ts +3 -0
- package/lib/requirements/draft.d.ts.map +1 -0
- package/lib/requirements/draft.js +7 -0
- package/lib/requirements/draft.js.map +1 -0
- package/lib/requirements/plan-schema.d.ts +93 -0
- package/lib/requirements/plan-schema.d.ts.map +1 -0
- package/lib/requirements/plan-schema.js +16 -0
- package/lib/requirements/plan-schema.js.map +1 -0
- package/lib/requirements/plan.d.ts +30 -0
- package/lib/requirements/plan.d.ts.map +1 -0
- package/lib/requirements/plan.js +134 -0
- package/lib/requirements/plan.js.map +1 -0
- package/lib/requirements/service.d.ts +2 -1
- package/lib/requirements/service.d.ts.map +1 -1
- package/lib/requirements/service.js +4 -6
- package/lib/requirements/service.js.map +1 -1
- package/lib/requirements/tool.d.ts +1 -1
- package/lib/requirements/tool.d.ts.map +1 -1
- package/lib/requirements/tool.js +24 -3
- package/lib/requirements/tool.js.map +1 -1
- package/lib/skills/task-planning.d.ts +2 -2
- package/lib/skills/task-planning.d.ts.map +1 -1
- package/lib/skills/task-planning.js +10 -1
- package/lib/skills/task-planning.js.map +1 -1
- package/lib/store.js +2 -0
- package/lib/store.js.map +1 -1
- package/lib/tasks/context.d.ts.map +1 -1
- package/lib/tasks/context.js +9 -1
- package/lib/tasks/context.js.map +1 -1
- package/lib/tasks/contract.d.ts +63 -0
- package/lib/tasks/contract.d.ts.map +1 -0
- package/lib/tasks/contract.js +55 -0
- package/lib/tasks/contract.js.map +1 -0
- package/lib/tasks/domain.d.ts +6 -0
- package/lib/tasks/domain.d.ts.map +1 -1
- package/lib/tasks/draft.d.ts +7 -0
- package/lib/tasks/draft.d.ts.map +1 -0
- package/lib/tasks/draft.js +54 -0
- package/lib/tasks/draft.js.map +1 -0
- package/lib/tasks/result.d.ts +2 -0
- package/lib/tasks/result.d.ts.map +1 -1
- package/lib/tasks/result.js +17 -3
- package/lib/tasks/result.js.map +1 -1
- package/lib/tasks/scheduling.d.ts +15 -0
- package/lib/tasks/scheduling.d.ts.map +1 -0
- package/lib/tasks/scheduling.js +46 -0
- package/lib/tasks/scheduling.js.map +1 -0
- package/lib/tasks/service.d.ts +46 -3
- package/lib/tasks/service.d.ts.map +1 -1
- package/lib/tasks/service.js +55 -58
- package/lib/tasks/service.js.map +1 -1
- package/lib/ui/requirement-tasks-panel.d.ts.map +1 -1
- package/lib/ui/requirement-tasks-panel.js +18 -9
- package/lib/ui/requirement-tasks-panel.js.map +1 -1
- package/lib/ui/task-contract-panel.d.ts +10 -0
- package/lib/ui/task-contract-panel.d.ts.map +1 -0
- package/lib/ui/task-contract-panel.js +16 -0
- package/lib/ui/task-contract-panel.js.map +1 -0
- package/package.json +1 -1
package/lib/tasks/service.d.ts
CHANGED
|
@@ -5,11 +5,54 @@ export declare class TaskBoardService {
|
|
|
5
5
|
private readonly store;
|
|
6
6
|
private notifier?;
|
|
7
7
|
private removalNotifier?;
|
|
8
|
+
private liveClaims;
|
|
9
|
+
setLiveClaims(provider: typeof this.liveClaims): void;
|
|
8
10
|
constructor(store: PartnerStore);
|
|
9
11
|
setRemovalNotifier(notifier: (ids: string[]) => void): void;
|
|
10
12
|
setProgressNotifier(notifier: (task: BoardTask, previousStatus: BoardTask['status']) => Promise<void>): void;
|
|
11
13
|
snapshot(): {
|
|
12
|
-
tasks:
|
|
14
|
+
tasks: {
|
|
15
|
+
scheduling: import("./scheduling.js").TaskScheduling;
|
|
16
|
+
id: string;
|
|
17
|
+
requirementId?: string;
|
|
18
|
+
title: string;
|
|
19
|
+
description: string;
|
|
20
|
+
status: import("./domain.js").TaskStatus;
|
|
21
|
+
priority: import("./domain.js").TaskPriority;
|
|
22
|
+
assigneeCompanionId?: string;
|
|
23
|
+
autoRun?: boolean;
|
|
24
|
+
reviewerCompanionId?: string;
|
|
25
|
+
createdBy: "user" | "companion" | "schedule";
|
|
26
|
+
creatorCompanionId?: string;
|
|
27
|
+
creatorSessionId?: string;
|
|
28
|
+
skillIds: string[];
|
|
29
|
+
dependencyTaskIds: string[];
|
|
30
|
+
acceptanceCriteria?: string[];
|
|
31
|
+
resourceKeys?: string[];
|
|
32
|
+
evidence?: import("./contract.js").TaskEvidence[];
|
|
33
|
+
reviewChecks?: import("./contract.js").TaskReviewCheck[];
|
|
34
|
+
resultAbstract?: string;
|
|
35
|
+
resultSummary?: string;
|
|
36
|
+
reviewHandoff?: string;
|
|
37
|
+
reviewSummary?: string;
|
|
38
|
+
workRevision?: number;
|
|
39
|
+
rejectionReason?: string;
|
|
40
|
+
rejectedAt?: number;
|
|
41
|
+
reworkCount?: number;
|
|
42
|
+
replanRequested?: boolean;
|
|
43
|
+
previousAttempt?: {
|
|
44
|
+
resultSummary?: string;
|
|
45
|
+
reviewSummary?: string;
|
|
46
|
+
reviewHandoff?: string;
|
|
47
|
+
evidence?: import("./contract.js").TaskEvidence[];
|
|
48
|
+
reviewChecks?: import("./contract.js").TaskReviewCheck[];
|
|
49
|
+
};
|
|
50
|
+
dueAt?: number;
|
|
51
|
+
revision: number;
|
|
52
|
+
createdAt: number;
|
|
53
|
+
updatedAt: number;
|
|
54
|
+
completedAt?: number;
|
|
55
|
+
}[];
|
|
13
56
|
activities: TaskActivity[];
|
|
14
57
|
requirements: import("../client-api.js").RequirementView[];
|
|
15
58
|
};
|
|
@@ -21,8 +64,8 @@ export declare class TaskBoardService {
|
|
|
21
64
|
completeExecution(taskId: string, result: string | TaskExecutionOutput, actor: TaskActor, workRevision?: number): Promise<BoardTask>;
|
|
22
65
|
recordReview(taskId: string, result: string, actor: TaskActor, expectedRevision?: number): Promise<BoardTask>;
|
|
23
66
|
failExecution(taskId: string, error: string, actor: TaskActor): Promise<BoardTask>;
|
|
24
|
-
accept(taskId: string, actor: TaskActor, expectedRevision?: number): Promise<BoardTask>;
|
|
25
|
-
reject(taskId: string, reason: string, actor: TaskActor, expectedRevision?: number, mode?: 'rework' | 'replan'): Promise<BoardTask>;
|
|
67
|
+
accept(taskId: string, actor: TaskActor, expectedRevision?: number, checks?: unknown): Promise<BoardTask>;
|
|
68
|
+
reject(taskId: string, reason: string, actor: TaskActor, expectedRevision?: number, mode?: 'rework' | 'replan', checks?: unknown): Promise<BoardTask>;
|
|
26
69
|
/** Atomically relinquish a task before asking its owner to split or reassign it. */
|
|
27
70
|
requestReplan(taskId: string, reason: string, actor: TaskActor, revision: number): Promise<BoardTask>;
|
|
28
71
|
remove(taskId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tasks/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAkC,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tasks/service.ts"],"names":[],"mappings":"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"}
|
package/lib/tasks/service.js
CHANGED
|
@@ -2,17 +2,22 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { appendBounded } from '../core/collections.js';
|
|
3
3
|
import { oneOf, optionalBoolean, optionalText, record, requiredText, stringList } from '../core/validation.js';
|
|
4
4
|
import { TASK_PRIORITIES, TASK_STATUSES } from './domain.js';
|
|
5
|
-
import { requirementDraft } from '../requirements/
|
|
5
|
+
import { requirementDraft } from '../requirements/draft.js';
|
|
6
6
|
import { removeTaskRecords, touchTaskRequirement } from './removal.js';
|
|
7
7
|
import { invalidateTaskWork, preserveTaskAttempt } from './context.js';
|
|
8
8
|
import { requireTaskRequirement } from './requirement-link.js';
|
|
9
9
|
import { TaskWorkflowError } from './workflow-error.js';
|
|
10
|
+
import { taskDraft, assertTaskDependencies } from './draft.js';
|
|
11
|
+
import { acceptanceCriteria, resourceKeys, taskEvidence, reviewChecks } from './contract.js';
|
|
12
|
+
import { taskScheduling, executionWait } from './scheduling.js';
|
|
10
13
|
const MAX_TASKS = 500;
|
|
11
14
|
const MAX_ACTIVITIES = 2000;
|
|
12
15
|
export class TaskBoardService {
|
|
13
16
|
store;
|
|
14
17
|
notifier;
|
|
15
18
|
removalNotifier;
|
|
19
|
+
liveClaims = () => [];
|
|
20
|
+
setLiveClaims(provider) { this.liveClaims = provider; }
|
|
16
21
|
constructor(store) {
|
|
17
22
|
this.store = store;
|
|
18
23
|
}
|
|
@@ -22,40 +27,23 @@ export class TaskBoardService {
|
|
|
22
27
|
}
|
|
23
28
|
snapshot() {
|
|
24
29
|
const state = this.store.snapshot();
|
|
25
|
-
|
|
30
|
+
const active = this.liveClaims();
|
|
31
|
+
return { tasks: state.tasks.map(task => ({ ...task, scheduling: taskScheduling(state, task, active) })), activities: state.taskActivities, requirements: state.requirements ?? [] };
|
|
26
32
|
}
|
|
27
33
|
async create(value, actor, requireOwnership = false) {
|
|
28
34
|
const input = record(value, 'task');
|
|
29
|
-
|
|
30
|
-
const assigneeCompanionId = optionalText(input.assigneeCompanionId, 'assigneeCompanionId', 120);
|
|
31
|
-
const autoRun = optionalBoolean(input.autoRun, false);
|
|
32
|
-
if (autoRun && !assigneeCompanionId)
|
|
33
|
-
throw new Error('提交执行需要指定负责人');
|
|
34
|
-
const requestedReviewerCompanionId = optionalText(input.reviewerCompanionId, 'reviewerCompanionId', 120);
|
|
35
|
-
const reviewerCompanionId = requestedReviewerCompanionId ?? actor.companionId;
|
|
36
|
-
this.assertCompanion(assigneeCompanionId);
|
|
37
|
-
this.assertCompanion(reviewerCompanionId);
|
|
38
|
-
const dependencyTaskIds = stringList(input.dependencyTaskIds, 'dependencyTaskIds', 20, 120);
|
|
39
|
-
if (requireOwnership)
|
|
40
|
-
requireTaskRequirement(input.requirementId, dependencyTaskIds, this.store.snapshot().tasks);
|
|
41
|
-
this.assertDependencies(undefined, dependencyTaskIds);
|
|
42
|
-
const task = {
|
|
43
|
-
id: `task-${randomUUID()}`, title: requiredText(input.title, 'title', 200), description: typeof input.description === 'string' ? input.description.trim().slice(0, 8000) : '',
|
|
44
|
-
status: input.status === undefined ? autoRun ? 'ready' : 'backlog' : oneOf(input.status, TASK_STATUSES, 'status'),
|
|
45
|
-
...(autoRun ? { autoRun: true } : {}),
|
|
46
|
-
priority: input.priority === undefined ? 'normal' : oneOf(input.priority, TASK_PRIORITIES, 'priority'),
|
|
47
|
-
...(assigneeCompanionId ? { assigneeCompanionId } : {}), createdBy: actor.kind,
|
|
48
|
-
...(reviewerCompanionId ? { reviewerCompanionId } : {}),
|
|
49
|
-
...(actor.companionId ? { creatorCompanionId: actor.companionId } : {}),
|
|
50
|
-
...(typeof input.creatorSessionId === 'string' && input.creatorSessionId.trim() ? { creatorSessionId: input.creatorSessionId.trim().slice(0, 180) } : {}),
|
|
51
|
-
skillIds: stringList(input.skillIds, 'skillIds', 20, 120), dependencyTaskIds,
|
|
52
|
-
...(validTimestamp(input.dueAt) ? { dueAt: input.dueAt } : {}), revision: 1, createdAt: now, updatedAt: now,
|
|
53
|
-
};
|
|
54
|
-
if (autoRun && task.status !== 'ready')
|
|
55
|
-
throw new Error('新提交的任务必须从待开始创建;收集箱请使用 autoRun=false,不能跳过执行和验收');
|
|
56
|
-
if (started(task.status))
|
|
57
|
-
this.assertDependenciesComplete(task, this.store.snapshot().tasks);
|
|
35
|
+
let task;
|
|
58
36
|
await this.store.update(state => {
|
|
37
|
+
task = taskDraft(input, actor, state);
|
|
38
|
+
const dependencyTaskIds = task.dependencyTaskIds;
|
|
39
|
+
if (requireOwnership)
|
|
40
|
+
requireTaskRequirement(input.requirementId, dependencyTaskIds, state.tasks);
|
|
41
|
+
if (started(task.status))
|
|
42
|
+
this.assertDependenciesComplete(task, state.tasks);
|
|
43
|
+
if (task.status === 'done' && task.acceptanceCriteria?.length)
|
|
44
|
+
throw new Error('有验收清单的任务必须先执行并逐项验收,不能直接创建为已完成');
|
|
45
|
+
if (task.status === 'doing' && executionWait(state, task, this.liveClaims())?.code === 'resource_busy')
|
|
46
|
+
throw new Error('共享资源正被其他任务使用,请等待释放后启动');
|
|
59
47
|
if (state.tasks.length >= MAX_TASKS)
|
|
60
48
|
throw new Error(`Task board reached its ${MAX_TASKS} task limit; archive or delete completed tasks first`);
|
|
61
49
|
this.assertDependencies(undefined, dependencyTaskIds, state.tasks);
|
|
@@ -79,7 +67,7 @@ export class TaskBoardService {
|
|
|
79
67
|
}
|
|
80
68
|
touchTaskRequirement(state, task.requirementId);
|
|
81
69
|
state.tasks.push(task);
|
|
82
|
-
appendActivity(state.taskActivities, task.id, actor, 'created', `创建任务:${task.title}`,
|
|
70
|
+
appendActivity(state.taskActivities, task.id, actor, 'created', `创建任务:${task.title}`, task.createdAt);
|
|
83
71
|
});
|
|
84
72
|
return task;
|
|
85
73
|
}
|
|
@@ -97,12 +85,13 @@ export class TaskBoardService {
|
|
|
97
85
|
if (!Number.isInteger(expected) || expected !== task.revision)
|
|
98
86
|
throw new TaskConflictError(task);
|
|
99
87
|
previousStatus = task.status;
|
|
88
|
+
const originalReviewer = task.reviewerCompanionId ?? task.creatorCompanionId;
|
|
100
89
|
if (task.replanRequested) {
|
|
101
90
|
const owner = state.requirements?.find(r => r.id === task.requirementId)?.ownerCompanionId ?? task.creatorCompanionId;
|
|
102
91
|
if (actor.kind !== 'user' && actor.companionId !== owner)
|
|
103
92
|
throw new Error('任务已暂停等待重规划,仅需求负责人或用户可以调整和恢复;不要重复执行');
|
|
104
93
|
}
|
|
105
|
-
const previousSpec = JSON.stringify([task.title, task.description, task.assigneeCompanionId, task.skillIds, task.dependencyTaskIds]);
|
|
94
|
+
const previousSpec = JSON.stringify([task.title, task.description, task.assigneeCompanionId, task.skillIds, task.dependencyTaskIds, task.acceptanceCriteria, task.resourceKeys]);
|
|
106
95
|
if (input.title !== undefined)
|
|
107
96
|
task.title = requiredText(input.title, 'title', 200);
|
|
108
97
|
if (input.description !== undefined)
|
|
@@ -144,6 +133,10 @@ export class TaskBoardService {
|
|
|
144
133
|
}
|
|
145
134
|
if (input.skillIds !== undefined)
|
|
146
135
|
task.skillIds = stringList(input.skillIds, 'skillIds', 20, 120);
|
|
136
|
+
if (input.acceptanceCriteria !== undefined)
|
|
137
|
+
task.acceptanceCriteria = acceptanceCriteria(input.acceptanceCriteria);
|
|
138
|
+
if (input.resourceKeys !== undefined)
|
|
139
|
+
task.resourceKeys = resourceKeys(input.resourceKeys);
|
|
147
140
|
if (input.dependencyTaskIds !== undefined) {
|
|
148
141
|
const dependencies = stringList(input.dependencyTaskIds, 'dependencyTaskIds', 20, 120);
|
|
149
142
|
this.assertDependencies(task.id, dependencies, state.tasks);
|
|
@@ -155,7 +148,7 @@ export class TaskBoardService {
|
|
|
155
148
|
else
|
|
156
149
|
delete task.dueAt;
|
|
157
150
|
}
|
|
158
|
-
const specChanged = previousSpec !== JSON.stringify([task.title, task.description, task.assigneeCompanionId, task.skillIds, task.dependencyTaskIds]);
|
|
151
|
+
const specChanged = previousSpec !== JSON.stringify([task.title, task.description, task.assigneeCompanionId, task.skillIds, task.dependencyTaskIds, task.acceptanceCriteria, task.resourceKeys]);
|
|
159
152
|
if (specChanged) {
|
|
160
153
|
invalidateTaskWork(state, task, '任务要求或分配已更新,旧执行/验收失效');
|
|
161
154
|
task.reworkCount = 0;
|
|
@@ -170,8 +163,15 @@ export class TaskBoardService {
|
|
|
170
163
|
throw new Error('提交执行需要指定负责人');
|
|
171
164
|
if (task.status === 'done' && previousStatus !== 'done' && previousStatus !== 'review')
|
|
172
165
|
throw new Error('任务必须先进入待验收,才能标记为已完成');
|
|
166
|
+
if (task.status === 'done' && previousStatus !== 'done') {
|
|
167
|
+
if (actor.kind !== 'user' && originalReviewer && originalReviewer !== actor.companionId)
|
|
168
|
+
throw new Error('当前伙伴不是这个任务的验收者');
|
|
169
|
+
task.reviewChecks = reviewChecks(input.checks, task.acceptanceCriteria ?? [], true);
|
|
170
|
+
}
|
|
173
171
|
if (started(task.status))
|
|
174
172
|
this.assertDependenciesComplete(task, state.tasks);
|
|
173
|
+
if (task.status === 'doing' && previousStatus !== 'doing' && executionWait(state, task, this.liveClaims())?.code === 'resource_busy')
|
|
174
|
+
throw new Error('共享资源正被其他任务使用,请等待释放后启动');
|
|
175
175
|
task.revision += 1;
|
|
176
176
|
task.updatedAt = Date.now();
|
|
177
177
|
touchTaskRequirement(state, task.requirementId, specChanged);
|
|
@@ -185,6 +185,8 @@ export class TaskBoardService {
|
|
|
185
185
|
delete task.resultSummary;
|
|
186
186
|
delete task.reviewHandoff;
|
|
187
187
|
delete task.reviewSummary;
|
|
188
|
+
delete task.evidence;
|
|
189
|
+
delete task.reviewChecks;
|
|
188
190
|
}
|
|
189
191
|
const kind = task.status !== previousStatus ? (task.status === 'done' ? 'completed' : previousStatus === 'done' ? 'reopened' : 'moved') : 'updated';
|
|
190
192
|
appendActivity(state.taskActivities, task.id, actor, kind, task.status !== previousStatus ? `${previousStatus} → ${task.status}` : '更新任务', task.updatedAt);
|
|
@@ -244,13 +246,23 @@ export class TaskBoardService {
|
|
|
244
246
|
if (!task.reviewerCompanionId && task.creatorCompanionId)
|
|
245
247
|
task.reviewerCompanionId = task.creatorCompanionId;
|
|
246
248
|
const execution = typeof result === 'string' ? { deliverable: result } : result;
|
|
249
|
+
let evidenceWarning = execution.evidenceWarning;
|
|
250
|
+
try {
|
|
251
|
+
task.evidence = taskEvidence(execution.evidence, task.acceptanceCriteria ?? []);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
task.evidence = [];
|
|
255
|
+
evidenceWarning = '证据结构或编号无效:交付已保留,验收者需实际核验或打回补证,不要重跑已完成的外部操作。';
|
|
256
|
+
}
|
|
257
|
+
delete task.reviewChecks;
|
|
247
258
|
task.resultSummary = boundedText(execution.deliverable, 'result', 12_000);
|
|
248
259
|
if (execution.summary?.trim())
|
|
249
260
|
task.resultAbstract = execution.summary.trim().slice(0, 600);
|
|
250
261
|
else
|
|
251
262
|
delete task.resultAbstract;
|
|
252
|
-
|
|
253
|
-
|
|
263
|
+
const handoff = [evidenceWarning, execution.reviewHandoff?.trim()].filter(Boolean).join('\n\n');
|
|
264
|
+
if (handoff)
|
|
265
|
+
task.reviewHandoff = handoff.slice(0, 4_000);
|
|
254
266
|
else
|
|
255
267
|
delete task.reviewHandoff;
|
|
256
268
|
delete task.reviewSummary;
|
|
@@ -310,13 +322,13 @@ export class TaskBoardService {
|
|
|
310
322
|
await this.notifyProgress(output, previousStatus);
|
|
311
323
|
return output;
|
|
312
324
|
}
|
|
313
|
-
async accept(taskId, actor, expectedRevision) {
|
|
325
|
+
async accept(taskId, actor, expectedRevision, checks) {
|
|
314
326
|
const current = this.require(taskId);
|
|
315
327
|
if (current.status !== 'review')
|
|
316
328
|
throw new Error('只有待验收任务可以通过验收');
|
|
317
|
-
return this.update(taskId, { expectedRevision: expectedRevision ?? current.revision, status: 'done' }, actor);
|
|
329
|
+
return this.update(taskId, { expectedRevision: expectedRevision ?? current.revision, status: 'done', checks }, actor);
|
|
318
330
|
}
|
|
319
|
-
async reject(taskId, reason, actor, expectedRevision, mode = 'rework') {
|
|
331
|
+
async reject(taskId, reason, actor, expectedRevision, mode = 'rework', checks) {
|
|
320
332
|
let output;
|
|
321
333
|
await this.store.update(state => {
|
|
322
334
|
const task = state.tasks.find(item => item.id === taskId);
|
|
@@ -327,6 +339,9 @@ export class TaskBoardService {
|
|
|
327
339
|
if (expectedRevision !== undefined && expectedRevision !== task.revision)
|
|
328
340
|
throw new TaskConflictError(task);
|
|
329
341
|
const message = boundedText(reason, 'reason', 1200);
|
|
342
|
+
if (actor.kind !== 'user' && task.reviewerCompanionId && task.reviewerCompanionId !== actor.companionId)
|
|
343
|
+
throw new Error('当前伙伴不是这个任务的验收者');
|
|
344
|
+
task.reviewChecks = reviewChecks(checks, task.acceptanceCriteria ?? [], false);
|
|
330
345
|
task.rejectionReason = message;
|
|
331
346
|
task.rejectedAt = Date.now();
|
|
332
347
|
task.reworkCount = (task.reworkCount ?? 0) + 1;
|
|
@@ -412,25 +427,7 @@ export class TaskBoardService {
|
|
|
412
427
|
throw new Error('Assigned companion does not exist');
|
|
413
428
|
}
|
|
414
429
|
assertDependencies(taskId, ids, tasks = this.store.snapshot().tasks) {
|
|
415
|
-
|
|
416
|
-
for (const id of ids) {
|
|
417
|
-
if (id === taskId)
|
|
418
|
-
throw new Error('任务不能依赖自己');
|
|
419
|
-
if (!byId.has(id))
|
|
420
|
-
throw new Error(`前置任务不存在:${id}`);
|
|
421
|
-
}
|
|
422
|
-
if (!taskId)
|
|
423
|
-
return;
|
|
424
|
-
const reaches = (currentId, visited) => {
|
|
425
|
-
if (currentId === taskId)
|
|
426
|
-
return true;
|
|
427
|
-
if (visited.has(currentId))
|
|
428
|
-
return false;
|
|
429
|
-
visited.add(currentId);
|
|
430
|
-
return (byId.get(currentId)?.dependencyTaskIds ?? []).some(id => reaches(id, visited));
|
|
431
|
-
};
|
|
432
|
-
if (ids.some(id => reaches(id, new Set())))
|
|
433
|
-
throw new Error('任务依赖不能形成循环');
|
|
430
|
+
assertTaskDependencies(taskId, ids, tasks);
|
|
434
431
|
}
|
|
435
432
|
assertDependenciesComplete(task, tasks) {
|
|
436
433
|
const byId = new Map(tasks.map(item => [item.id, item]));
|
package/lib/tasks/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/tasks/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/tasks/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-tasks-panel.d.ts","sourceRoot":"","sources":["../../src/ui/requirement-tasks-panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requirement-tasks-panel.d.ts","sourceRoot":"","sources":["../../src/ui/requirement-tasks-panel.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,qBAAqB,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,UAAkB,EAAE,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,GAAG,CAAC,OAAO,CA4HtQ"}
|
|
@@ -6,6 +6,7 @@ import { CollectionSkeleton, WorkspaceDialog, WorkspaceHero, WorkspaceNotice, er
|
|
|
6
6
|
import { TaskBoardStage } from './task-board-stage.js';
|
|
7
7
|
import { useBoardRefresh } from './board-refresh.js';
|
|
8
8
|
import { RequirementDetail, requirementStatus } from './requirement-dialog.js';
|
|
9
|
+
import { TaskContractPanel } from './task-contract-panel.js';
|
|
9
10
|
const COLUMNS = [
|
|
10
11
|
{ id: 'backlog', label: '收集箱' }, { id: 'ready', label: '待开始' }, { id: 'doing', label: '进行中' },
|
|
11
12
|
{ id: 'review', label: '待验收' }, { id: 'blocked', label: '受阻' }, { id: 'done', label: '已完成' },
|
|
@@ -127,11 +128,11 @@ export function RequirementTasksPanel({ initialTaskId, openRequest, requirementI
|
|
|
127
128
|
setBusy(undefined);
|
|
128
129
|
}
|
|
129
130
|
};
|
|
130
|
-
const accept = async (task) => {
|
|
131
|
+
const accept = async (task, checks) => {
|
|
131
132
|
setBusy(task.id);
|
|
132
133
|
setError(undefined);
|
|
133
134
|
try {
|
|
134
|
-
await api(`/tasks/${task.id}/accept`, { method: 'POST', body: JSON.stringify({ expectedRevision: task.revision }) });
|
|
135
|
+
await api(`/tasks/${task.id}/accept`, { method: 'POST', body: JSON.stringify({ expectedRevision: task.revision, checks }) });
|
|
135
136
|
await load();
|
|
136
137
|
}
|
|
137
138
|
catch (reason) {
|
|
@@ -141,13 +142,13 @@ export function RequirementTasksPanel({ initialTaskId, openRequest, requirementI
|
|
|
141
142
|
setBusy(undefined);
|
|
142
143
|
}
|
|
143
144
|
};
|
|
144
|
-
const reject = async (task, reason) => {
|
|
145
|
+
const reject = async (task, reason, checks) => {
|
|
145
146
|
if (!reason)
|
|
146
147
|
return;
|
|
147
148
|
setBusy(task.id);
|
|
148
149
|
setError(undefined);
|
|
149
150
|
try {
|
|
150
|
-
await api(`/tasks/${task.id}/reject`, { method: 'POST', body: JSON.stringify({ reason, expectedRevision: task.revision }) });
|
|
151
|
+
await api(`/tasks/${task.id}/reject`, { method: 'POST', body: JSON.stringify({ reason, expectedRevision: task.revision, checks }) });
|
|
151
152
|
await load();
|
|
152
153
|
}
|
|
153
154
|
catch (cause) {
|
|
@@ -173,7 +174,7 @@ export function RequirementTasksPanel({ initialTaskId, openRequest, requirementI
|
|
|
173
174
|
setBusy(undefined);
|
|
174
175
|
}
|
|
175
176
|
};
|
|
176
|
-
return _jsxs("div", { className: "dsh-partner-feature-page is-board", children: [!detailOnly && _jsxs(_Fragment, { children: [back && _jsxs("nav", { className: "dsh-partner-requirement-breadcrumb", children: [_jsx("button", { type: "button", onClick: back, children: "\u9700\u6C42\u770B\u677F" }), _jsx(IconChevronRightOutline14, { size: 14 }), _jsx("span", { children: requirement?.title ?? '未归类旧任务' })] }), _jsx(WorkspaceHero, { eyebrow: requirement ? requirementStatus(requirement) : '旧任务', title: requirement?.title ?? '未归类旧任务', detail: requirement?.description || '任务按阶段展示,点击查看交付、依赖和执行状态。', actions: _jsxs(_Fragment, { children: [_jsxs("span", { className: "dsh-partner-board-live", title: syncedAt ? `最近同步 ${new Date(syncedAt).toLocaleTimeString()}` : '正在连接', children: [_jsx("i", {}), "\u5B9E\u65F6\u540C\u6B65"] }), requirement && _jsx("button", { type: "button", onClick: () => setRequirementDetail(true), children: "\u9700\u6C42\u8BE6\u60C5" }), requirement?.status === 'planning' && _jsxs("button", { type: "button", onClick: () => setCreating(true), children: [_jsx(IconPlusOutline16, { size: 15 }), "\u65B0\u4EFB\u52A1"] })] }) })] }), error && _jsx(WorkspaceNotice, { children: error }), requirementDetail && requirement && _jsx(WorkspaceDialog, { eyebrow: "\u9700\u6C42\u8BE6\u60C5", title: requirement.title, detail: requirementStatus(requirement), close: () => setRequirementDetail(false), width: "wide", children: _jsx(RequirementDetail, { item: requirement, tasks: requirementTasks, directory: directory, changed: load, close: () => setRequirementDetail(false) }, requirement.id) }), creating && requirement && _jsx(WorkspaceDialog, { title: "\u65B0\u5EFA\u5B50\u4EFB\u52A1", detail: `所属需求:${requirement.title}`, close: () => setCreating(false), width: "wide", children: _jsx(TaskForm, { requirementId: requirement.id, companions: directory, tasks: requirementTasks, close: () => setCreating(false), changed: load }) }), selectedTask && _jsxs(WorkspaceDialog, { eyebrow: "TASK DETAIL", title: selectedTask.title, detail: taskDialogSummary(selectedTask, directory), close: () => setSelectedTaskId(undefined), width: "wide", children: [_jsx(TaskDetail, { task: selectedTask, tasks: board.tasks, activities: board.activities.filter(item => item.taskId === selectedTask.id), directory: directory, execution: activeDelegationByTaskId.get(selectedTask.id), busy: busy === selectedTask.id, update: change => { void update(selectedTask, change); }, delegate: () => { void delegate(selectedTask); }, review: () => { void review(selectedTask); }, accept:
|
|
177
|
+
return _jsxs("div", { className: "dsh-partner-feature-page is-board", children: [!detailOnly && _jsxs(_Fragment, { children: [back && _jsxs("nav", { className: "dsh-partner-requirement-breadcrumb", children: [_jsx("button", { type: "button", onClick: back, children: "\u9700\u6C42\u770B\u677F" }), _jsx(IconChevronRightOutline14, { size: 14 }), _jsx("span", { children: requirement?.title ?? '未归类旧任务' })] }), _jsx(WorkspaceHero, { eyebrow: requirement ? requirementStatus(requirement) : '旧任务', title: requirement?.title ?? '未归类旧任务', detail: requirement?.description || '任务按阶段展示,点击查看交付、依赖和执行状态。', actions: _jsxs(_Fragment, { children: [_jsxs("span", { className: "dsh-partner-board-live", title: syncedAt ? `最近同步 ${new Date(syncedAt).toLocaleTimeString()}` : '正在连接', children: [_jsx("i", {}), "\u5B9E\u65F6\u540C\u6B65"] }), requirement && _jsx("button", { type: "button", onClick: () => setRequirementDetail(true), children: "\u9700\u6C42\u8BE6\u60C5" }), requirement?.status === 'planning' && _jsxs("button", { type: "button", onClick: () => setCreating(true), children: [_jsx(IconPlusOutline16, { size: 15 }), "\u65B0\u4EFB\u52A1"] })] }) })] }), error && _jsx(WorkspaceNotice, { children: error }), requirementDetail && requirement && _jsx(WorkspaceDialog, { eyebrow: "\u9700\u6C42\u8BE6\u60C5", title: requirement.title, detail: requirementStatus(requirement), close: () => setRequirementDetail(false), width: "wide", children: _jsx(RequirementDetail, { item: requirement, tasks: requirementTasks, directory: directory, changed: load, close: () => setRequirementDetail(false) }, requirement.id) }), creating && requirement && _jsx(WorkspaceDialog, { title: "\u65B0\u5EFA\u5B50\u4EFB\u52A1", detail: `所属需求:${requirement.title}`, close: () => setCreating(false), width: "wide", children: _jsx(TaskForm, { requirementId: requirement.id, companions: directory, tasks: requirementTasks, close: () => setCreating(false), changed: load }) }), selectedTask && _jsxs(WorkspaceDialog, { eyebrow: "TASK DETAIL", title: selectedTask.title, detail: taskDialogSummary(selectedTask, directory), close: () => setSelectedTaskId(undefined), width: "wide", children: [_jsx(TaskDetail, { task: selectedTask, tasks: board.tasks, activities: board.activities.filter(item => item.taskId === selectedTask.id), directory: directory, execution: activeDelegationByTaskId.get(selectedTask.id), busy: busy === selectedTask.id, update: change => { void update(selectedTask, change); }, delegate: () => { void delegate(selectedTask); }, review: () => { void review(selectedTask); }, accept: checks => { void accept(selectedTask, checks); }, reject: (reason, checks) => { void reject(selectedTask, reason, checks); }, remove: () => { void remove(selectedTask); } }, selectedTask.id), error && _jsx(WorkspaceNotice, { children: error })] }), !detailOnly && (loading ? _jsx(CollectionSkeleton, { rows: 6 }) : _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-partner-board-tools", children: [_jsxs("label", { className: "dsh-partner-board-search", children: [_jsx("span", { className: "sr-only", children: "\u641C\u7D22\u4EFB\u52A1" }), _jsx("span", { "aria-hidden": "true", children: _jsx(IconSearchOutline16, { size: 16 }) }), _jsx("input", { value: query, onChange: event => setQuery(event.target.value), placeholder: "\u641C\u7D22\u4EFB\u52A1\u3001\u8D1F\u8D23\u4EBA\u6216\u524D\u7F6E\u4EFB\u52A1" }), query && _jsx("button", { type: "button", onClick: () => setQuery(''), "aria-label": "\u6E05\u9664\u4EFB\u52A1\u641C\u7D22", children: _jsx(IconCloseOutline16, { size: 14 }) })] }), _jsxs("label", { className: "dsh-partner-board-assignee", children: [_jsx("span", { className: "sr-only", children: "\u6309\u8D1F\u8D23\u4EBA\u7B5B\u9009" }), _jsxs("select", { value: assigneeFilter, onChange: event => setAssigneeFilter(event.target.value), children: [_jsx("option", { value: "all", children: "\u5168\u90E8\u4F19\u4F34" }), _jsx("option", { value: "unassigned", children: "\u672A\u6307\u6D3E" }), directory.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] }), _jsxs("label", { className: "dsh-partner-board-assignee is-mobile-stage", children: [_jsx("span", { className: "sr-only", children: "\u6309\u4EFB\u52A1\u9636\u6BB5\u7B5B\u9009" }), _jsxs("select", { value: statusFilter, onChange: event => setStatusFilter(event.target.value), children: [_jsxs("option", { value: "all", children: ["\u5168\u90E8\u9636\u6BB5 \u00B7 ", scopedTasks.length] }), COLUMNS.map(column => _jsxs("option", { value: column.id, children: [column.label, " \u00B7 ", statusCounts.get(column.id) ?? 0] }, column.id))] })] }), _jsxs("small", { "aria-live": "polite", children: ["\u663E\u793A ", visibleTaskCount, " / ", board.tasks.length] })] }), _jsxs("nav", { className: "dsh-partner-board-statuses", "aria-label": "\u6309\u4EFB\u52A1\u72B6\u6001\u7B5B\u9009", children: [_jsxs("button", { type: "button", className: statusFilter === 'all' ? 'is-active' : '', "aria-pressed": statusFilter === 'all', onClick: () => setStatusFilter('all'), children: [_jsx("span", { children: "\u5168\u90E8" }), _jsx("b", { children: scopedTasks.length })] }), COLUMNS.map(column => _jsxs("button", { type: "button", className: statusFilter === column.id ? 'is-active' : '', "aria-pressed": statusFilter === column.id, onClick: () => setStatusFilter(column.id), children: [_jsx("span", { children: column.label }), _jsx("b", { children: statusCounts.get(column.id) ?? 0 })] }, column.id))] }), _jsx("div", { className: "dsh-partner-board", "data-focused": statusFilter !== 'all', "aria-label": "\u4EFB\u52A1\u770B\u677F", children: visibleColumns.map(column => {
|
|
177
178
|
const tasks = tasksByStatus.get(column.id) ?? [];
|
|
178
179
|
return _jsx(TaskBoardStage, { id: column.id, label: column.label, tasks: tasks, focused: statusFilter !== 'all', filtered: Boolean(query || assigneeFilter !== 'all'), renderTask: task => _jsx(TaskCard, { task: task, tasksById: tasksById, directoryById: directoryById, dependentCount: dependentsById.get(task.id) ?? 0, execution: activeDelegationByTaskId.get(task.id), open: () => setSelectedTaskId(task.id) }, task.id) }, column.id);
|
|
179
180
|
}) }), !scopedTasks.length && _jsxs("div", { className: "dsh-partner-collection-empty", children: [_jsx("strong", { children: query || assigneeFilter !== 'all' ? '没有匹配的任务' : '还没有子任务' }), _jsx("p", { children: requirement?.status === 'planning' ? '添加子任务并安排负责人,完成分工后在需求详情中提交规划。' : '可返回需求看板查看其他需求。' })] })] }))] });
|
|
@@ -183,12 +184,18 @@ function TaskCard({ task, tasksById, directoryById, dependentCount, execution, o
|
|
|
183
184
|
const blockers = dependencies.filter(item => item.status !== 'done');
|
|
184
185
|
const completedDependencies = dependencies.length - blockers.length;
|
|
185
186
|
const assignee = directoryById.get(task.assigneeCompanionId ?? '');
|
|
186
|
-
const executionState = execution ? delegationState(execution, blockers.length) : task.autoRun && task.status === 'ready' ? { label: blockers.length ? '等待前置完成' : '等待调度' } : undefined;
|
|
187
|
+
const executionState = task.scheduling ? { label: task.scheduling.message } : execution ? delegationState(execution, blockers.length) : task.autoRun && task.status === 'ready' ? { label: blockers.length ? '等待前置完成' : '等待调度' } : undefined;
|
|
187
188
|
return _jsx("article", { className: "dsh-partner-task-card", "data-blocked": blockers.length > 0, "data-priority": task.priority, children: _jsxs("button", { type: "button", className: "dsh-partner-task-summary", "aria-haspopup": "dialog", onClick: open, children: [_jsxs("span", { children: [_jsxs("span", { className: "dsh-partner-task-card-title", children: [_jsx("strong", { title: task.title, children: task.title }), _jsx("em", { children: priorityLabel(task.priority) })] }), _jsxs("small", { className: "dsh-partner-task-card-owner", children: [assignee ? `@${assignee.name}` : '未指派', task.resultSummary ? ' · 已有结果' : '', executionState ? ` · ${executionState.label}` : ''] }), (dependencies.length > 0 || dependentCount > 0) && _jsxs("span", { className: "dsh-partner-task-relations", children: [dependencies.length > 0 && _jsxs("small", { "data-blocked": blockers.length > 0, children: ["\u524D\u7F6E ", completedDependencies, "/", dependencies.length] }), dependentCount > 0 && _jsxs("small", { children: ["\u5B8C\u6210\u540E\u89E3\u9501 ", dependentCount] })] })] }), _jsx(IconChevronRightOutline14, { size: 14 })] }) });
|
|
188
189
|
}
|
|
189
190
|
function TaskDetail({ task, tasks, activities, directory, execution, busy, update, delegate, review, accept, reject, remove }) {
|
|
190
191
|
const [rejecting, setRejecting] = useState(false);
|
|
192
|
+
const [checks, setChecks] = useState([]);
|
|
193
|
+
useEffect(() => { setChecks([]); }, [task.id, task.revision]);
|
|
191
194
|
const [rejectReason, setRejectReason] = useState('');
|
|
195
|
+
useEffect(() => { if (task.status !== 'review') {
|
|
196
|
+
setRejecting(false);
|
|
197
|
+
setRejectReason('');
|
|
198
|
+
} }, [task.status]);
|
|
192
199
|
const [confirmingDelete, setConfirmingDelete] = useState(false);
|
|
193
200
|
const byId = useMemo(() => new Map(tasks.map(item => [item.id, item])), [tasks]);
|
|
194
201
|
const dependencies = task.dependencyTaskIds.map(id => byId.get(id)).filter((item) => item !== undefined);
|
|
@@ -199,9 +206,9 @@ function TaskDetail({ task, tasks, activities, directory, execution, busy, updat
|
|
|
199
206
|
const canExecute = Boolean(task.assigneeCompanionId) && !execution && !['doing', 'review', 'done'].includes(task.status);
|
|
200
207
|
const recentActivities = [...activities].sort((left, right) => right.at - left.at).slice(0, 6);
|
|
201
208
|
const executionState = execution ? delegationState(execution, blockers.length) : undefined;
|
|
202
|
-
return _jsxs("div", { className: "dsh-partner-task-detail", children: [_jsxs("section", { className: "dsh-partner-task-description", children: [_jsx("strong", { children: "\u4EFB\u52A1\u8BF4\u660E" }), _jsx("p", { children: task.description || '没有补充说明' })] }), _jsxs("div", { className: "dsh-partner-task-fields", children: [_jsxs("label", { children: [_jsx("span", { children: "\u72B6\u6001" }), _jsx("select", { value: task.status, disabled: busy, onChange: event => update({ status: event.target.value }), children: COLUMNS.map(item => _jsx("option", { value: item.id, disabled: (item.id === 'doing' || item.id === 'review' || item.id === 'done') && blockers.length > 0 || item.id === 'done' && task.status !== 'review' && task.status !== 'done', children: item.label }, item.id)) })] }), _jsxs("label", { children: [_jsx("span", { children: "\u8D1F\u8D23\u4EBA" }), _jsxs("select", { value: task.assigneeCompanionId ?? '', disabled: busy || task.status === 'doing', onChange: event => update({ assigneeCompanionId: event.target.value }), children: [_jsx("option", { value: "", children: "\u672A\u6307\u6D3E" }), directory.map(item => _jsxs("option", { value: item.id, children: ["@", item.name, " \u00B7 ", item.availability === 'busy' ? '忙碌' : '可用'] }, item.id))] })] }), _jsxs("label", { children: [_jsx("span", { children: "\u9A8C\u6536\u4F19\u4F34" }), _jsxs("select", { value: task.reviewerCompanionId ?? '', disabled: busy, onChange: event => update({ reviewerCompanionId: event.target.value }), children: [_jsx("option", { value: "", children: "\u7559\u7A7A \u00B7 \u4EBA\u5DE5\u9A8C\u6536" }), directory.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] })] }), executionState && _jsxs("section", { className: "dsh-partner-task-execution", "data-state": execution?.status, children: [_jsx("i", {}), _jsxs("span", { children: [_jsx("strong", { children: executionState.title }), _jsx("small", { children: executionState.detail })] })] }), _jsxs("section", { className: "dsh-partner-task-dependency", children: [_jsxs("header", { children: [_jsx("strong", { children: "\u524D\u7F6E\u4EFB\u52A1" }), _jsx("small", { children: blockers.length ? `${blockers.length} 项未完成,当前任务不能启动` : dependencies.length ? '已全部完成,可以启动' : '没有前置依赖' })] }), dependencies.length > 0 && _jsx("div", { children: dependencies.map(item => _jsxs("span", { "data-done": item.status === 'done', children: [_jsx("i", { children: item.status === 'done' ? _jsx(IconCheckOutline16, { size: 12 }) : '' }), _jsx("b", { children: item.title }), _jsx("button", { type: "button", disabled: busy || ['doing', 'review', 'done'].includes(task.status), "aria-label": `移除前置任务 ${item.title}`, onClick: () => update({ dependencyTaskIds: task.dependencyTaskIds.filter(id => id !== item.id) }), children: "\u79FB\u9664" })] }, item.id)) }), dependencyCandidates.length > 0 && _jsxs("label", { children: [_jsx("span", { className: "sr-only", children: "\u589E\u52A0\u524D\u7F6E\u4EFB\u52A1" }), _jsxs("select", { defaultValue: "", disabled: busy || ['doing', 'review', 'done'].includes(task.status), onChange: event => { const id = event.currentTarget.value; if (id)
|
|
209
|
+
return _jsxs("div", { className: "dsh-partner-task-detail", children: [_jsxs("section", { className: "dsh-partner-task-description", children: [_jsx("strong", { children: "\u4EFB\u52A1\u8BF4\u660E" }), _jsx("p", { children: task.description || '没有补充说明' })] }), task.scheduling && task.status !== 'done' && _jsxs("section", { className: "dsh-partner-task-description", children: [_jsx("strong", { children: task.scheduling.message }), task.scheduling.taskIds?.length ? _jsx("p", { children: task.scheduling.taskIds.map(id => byId.get(id)?.title ?? '已删除任务').join('、') }) : null, task.scheduling.retryAt ? _jsxs("small", { children: ["\u4E0B\u6B21\u91CD\u8BD5\uFF1A", new Date(task.scheduling.retryAt).toLocaleString()] }) : null] }), _jsx(TaskContractPanel, { task: task, checks: checks, setChecks: setChecks, busy: busy }), _jsxs("div", { className: "dsh-partner-task-fields", children: [_jsxs("label", { children: [_jsx("span", { children: "\u72B6\u6001" }), _jsx("select", { value: task.status, disabled: busy, onChange: event => update({ status: event.target.value, ...(event.target.value === 'done' ? { checks } : {}) }), children: COLUMNS.map(item => _jsx("option", { value: item.id, disabled: (item.id === 'doing' || item.id === 'review' || item.id === 'done') && blockers.length > 0 || item.id === 'done' && task.status !== 'review' && task.status !== 'done', children: item.label }, item.id)) })] }), _jsxs("label", { children: [_jsx("span", { children: "\u8D1F\u8D23\u4EBA" }), _jsxs("select", { value: task.assigneeCompanionId ?? '', disabled: busy || task.status === 'doing', onChange: event => update({ assigneeCompanionId: event.target.value }), children: [_jsx("option", { value: "", children: "\u672A\u6307\u6D3E" }), directory.map(item => _jsxs("option", { value: item.id, children: ["@", item.name, " \u00B7 ", item.availability === 'busy' ? '忙碌' : '可用'] }, item.id))] })] }), _jsxs("label", { children: [_jsx("span", { children: "\u9A8C\u6536\u4F19\u4F34" }), _jsxs("select", { value: task.reviewerCompanionId ?? '', disabled: busy, onChange: event => update({ reviewerCompanionId: event.target.value }), children: [_jsx("option", { value: "", children: "\u7559\u7A7A \u00B7 \u4EBA\u5DE5\u9A8C\u6536" }), directory.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] })] }), executionState && _jsxs("section", { className: "dsh-partner-task-execution", "data-state": execution?.status, children: [_jsx("i", {}), _jsxs("span", { children: [_jsx("strong", { children: executionState.title }), _jsx("small", { children: executionState.detail })] })] }), _jsxs("section", { className: "dsh-partner-task-dependency", children: [_jsxs("header", { children: [_jsx("strong", { children: "\u524D\u7F6E\u4EFB\u52A1" }), _jsx("small", { children: blockers.length ? `${blockers.length} 项未完成,当前任务不能启动` : dependencies.length ? '已全部完成,可以启动' : '没有前置依赖' })] }), dependencies.length > 0 && _jsx("div", { children: dependencies.map(item => _jsxs("span", { "data-done": item.status === 'done', children: [_jsx("i", { children: item.status === 'done' ? _jsx(IconCheckOutline16, { size: 12 }) : '' }), _jsx("b", { children: item.title }), _jsx("button", { type: "button", disabled: busy || ['doing', 'review', 'done'].includes(task.status), "aria-label": `移除前置任务 ${item.title}`, onClick: () => update({ dependencyTaskIds: task.dependencyTaskIds.filter(id => id !== item.id) }), children: "\u79FB\u9664" })] }, item.id)) }), dependencyCandidates.length > 0 && _jsxs("label", { children: [_jsx("span", { className: "sr-only", children: "\u589E\u52A0\u524D\u7F6E\u4EFB\u52A1" }), _jsxs("select", { defaultValue: "", disabled: busy || ['doing', 'review', 'done'].includes(task.status), onChange: event => { const id = event.currentTarget.value; if (id)
|
|
203
210
|
update({ dependencyTaskIds: [...task.dependencyTaskIds, id] }); event.currentTarget.value = ''; }, children: [_jsx("option", { value: "", children: "\u589E\u52A0\u524D\u7F6E\u4EFB\u52A1\u2026" }), dependencyCandidates.map(item => _jsxs("option", { value: item.id, children: [item.title, " \u00B7 ", statusLabel(item.status)] }, item.id))] })] })] }), task.resultSummary && _jsx(ResultBlock, { label: "\u6267\u884C\u7ED3\u679C", value: task.resultSummary }), task.reviewSummary && _jsx(ResultBlock, { label: `核验意见${reviewer ? ` · @${reviewer.name}` : ''}`, value: task.reviewSummary }), recentActivities.length > 0 && _jsxs("details", { className: "dsh-partner-task-activity dsh-partner-requirement-disclosure", children: [_jsxs("summary", { children: ["\u6700\u8FD1\u6D3B\u52A8 \u00B7 ", recentActivities.length] }), _jsx("ol", { children: recentActivities.map(item => _jsxs("li", { children: [_jsx("span", { children: item.message }), _jsx("time", { children: new Date(item.at).toLocaleString() })] }, item.id)) })] }), rejecting && _jsxs("form", { className: "dsh-partner-task-reject", onSubmit: event => { event.preventDefault(); const reason = rejectReason.trim(); if (!reason)
|
|
204
|
-
return; reject(reason
|
|
211
|
+
return; reject(reason, checks); }, children: [_jsxs("label", { children: [_jsx("span", { children: "\u6253\u56DE\u539F\u56E0" }), _jsx("textarea", { autoFocus: true, value: rejectReason, onChange: event => setRejectReason(event.target.value), rows: 3, maxLength: 1200, placeholder: "\u8BF4\u660E\u9700\u8981\u91CD\u505A\u6216\u8865\u5145\u7684\u5185\u5BB9" })] }), _jsxs("div", { children: [_jsx("button", { type: "button", onClick: () => { setRejecting(false); setRejectReason(''); }, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: "is-primary", disabled: busy || !rejectReason.trim(), children: "\u786E\u8BA4\u6253\u56DE" })] })] }), confirmingDelete && _jsxs("div", { className: "dsh-partner-task-delete-confirm", role: "alert", children: [_jsx("span", { children: "\u5220\u9664\u4F1A\u53D6\u6D88\u5173\u8054\u6267\u884C\uFF0C\u4F9D\u8D56\u5B83\u7684\u672A\u5B8C\u6210\u4EFB\u52A1\u5C06\u6682\u505C\u3002\u9700\u6C42\u9700\u91CD\u65B0\u786E\u8BA4\u8303\u56F4\uFF1B\u4E0D\u80FD\u64A4\u9500\u3002" }), _jsxs("div", { children: [_jsx("button", { type: "button", onClick: () => setConfirmingDelete(false), children: "\u4FDD\u7559\u4EFB\u52A1" }), _jsx("button", { type: "button", className: "is-danger", disabled: busy, onClick: remove, children: "\u786E\u8BA4\u5220\u9664" })] })] }), _jsxs("footer", { className: "dsh-partner-task-actions", children: [_jsxs("small", { children: ["r", task.revision, " \u00B7 ", new Date(task.updatedAt).toLocaleString()] }), _jsxs("span", { children: [task.status === 'review' ? _jsxs(_Fragment, { children: [task.reviewerCompanionId && _jsx("button", { type: "button", disabled: busy, onClick: review, children: busy ? '核验中…' : `交给 @${reviewer?.name ?? '伙伴'} 核验` }), _jsx("button", { type: "button", disabled: busy, onClick: () => setRejecting(true), children: "\u6253\u56DE\u91CD\u505A" }), _jsx("button", { type: "button", className: "is-primary", disabled: busy || Boolean(task.acceptanceCriteria?.length && (checks.length !== task.acceptanceCriteria.length || checks.some(c => c.verdict !== 'passed' || !c.evidence?.trim()))), onClick: () => accept(checks), children: "\u9A8C\u6536\u901A\u8FC7" })] }) : _jsx("button", { type: "button", disabled: busy || !canExecute, title: blockers.length ? '可提前排队,依赖通过验收后自动执行' : !task.assigneeCompanionId ? '请先选择负责人' : undefined, onClick: delegate, children: busy ? '执行中…' : execution?.status === 'queued' ? '已提交,等待执行' : task.status === 'doing' ? '正在执行' : task.status === 'done' ? '已经完成' : `交给 @${assignee?.name ?? '伙伴'}` }), _jsx("button", { type: "button", className: "is-icon", "aria-label": `删除 ${task.title}`, "aria-expanded": confirmingDelete, disabled: busy, onClick: () => setConfirmingDelete(true), children: _jsx(IconTrashOutline16, { size: 14 }) })] })] })] });
|
|
205
212
|
}
|
|
206
213
|
function ResultBlock({ label, value }) {
|
|
207
214
|
return _jsxs("section", { className: "dsh-partner-task-result", children: [_jsx("strong", { children: label }), _jsx("p", { children: value })] });
|
|
@@ -222,6 +229,8 @@ function TaskForm({ requirementId, companions, tasks, close, changed }) {
|
|
|
222
229
|
autoRun: data.get('submission') === 'run' && Boolean(data.get('assignee')),
|
|
223
230
|
assigneeCompanionId: data.get('assignee') || undefined, reviewerCompanionId: data.get('reviewer') || undefined,
|
|
224
231
|
dependencyTaskIds: data.getAll('dependencyTaskId'),
|
|
232
|
+
acceptanceCriteria: String(data.get('acceptanceCriteria') ?? '').split('\n').map(s => s.trim()).filter(Boolean),
|
|
233
|
+
resourceKeys: String(data.get('resourceKeys') ?? '').split('\n').map(s => s.trim()).filter(Boolean),
|
|
225
234
|
}) });
|
|
226
235
|
await changed();
|
|
227
236
|
close();
|
|
@@ -233,7 +242,7 @@ function TaskForm({ requirementId, companions, tasks, close, changed }) {
|
|
|
233
242
|
setBusy(false);
|
|
234
243
|
}
|
|
235
244
|
};
|
|
236
|
-
return _jsxs("form", { className: "dsh-partner-task-form", "aria-busy": busy, onSubmit: event => { void submit(event); }, children: [_jsxs("label", { children: [_jsx("span", { children: "\u4EFB\u52A1\u540D\u79F0" }), _jsx("input", { name: "title", maxLength: 200, required: true, autoFocus: true, placeholder: "\u4E00\u53E5\u8BDD\u8BF4\u660E\u4EA4\u4ED8\u76EE\u6807" })] }), _jsxs("label", { children: [_jsx("span", { children: "\u8D1F\u8D23\u4EBA" }), _jsxs("select", { name: "assignee", defaultValue: "", children: [_jsx("option", { value: "", children: "\u672A\u6307\u6D3E" }), companions.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u4EFB\u52A1\u8BF4\u660E" }), _jsx("textarea", { name: "description", maxLength: 8000, rows: 5, placeholder: "\u8865\u5145\u80CC\u666F\u3001\u4EA4\u4ED8\u7269\u548C\u5B8C\u6210\u6761\u4EF6" })] }), _jsxs("label", { children: [_jsx("span", { children: "\u4F18\u5148\u7EA7" }), _jsxs("select", { name: "priority", defaultValue: "normal", children: [_jsx("option", { value: "low", children: "\u4F4E" }), _jsx("option", { value: "normal", children: "\u666E\u901A" }), _jsx("option", { value: "high", children: "\u9AD8" }), _jsx("option", { value: "urgent", children: "\u7D27\u6025" })] })] }), _jsxs("label", { children: [_jsx("span", { children: "\u9A8C\u6536\u4F19\u4F34" }), _jsxs("select", { name: "reviewer", defaultValue: "", children: [_jsx("option", { value: "", children: "\u7559\u7A7A \u00B7 \u4EBA\u5DE5\u9A8C\u6536" }), companions.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] }), _jsxs("div", { className: "dsh-partner-task-form-dependencies is-wide", children: [_jsxs("span", { children: ["\u4F9D\u8D56\u4EFB\u52A1 ", _jsx("small", { children: "\u53EF\u9009" })] }), dependencyOptions.length > 0 ? _jsx("div", { children: dependencyOptions.map(item => _jsxs("label", { children: [_jsx("input", { type: "checkbox", name: "dependencyTaskId", value: item.id }), _jsx("i", {}), _jsx("span", { children: item.title }), _jsx("small", { children: statusLabel(item.status) })] }, item.id)) }) : _jsx("p", { children: "\u5F53\u524D\u6CA1\u6709\u53EF\u9009\u7684\u672A\u5B8C\u6210\u4EFB\u52A1" }), _jsx("small", { children: "\u53EF\u4EE5\u9009\u62E9\u591A\u4E2A\uFF1B\u7559\u7A7A\u8868\u793A\u8BE5\u4EFB\u52A1\u4E0D\u4F9D\u8D56\u5176\u4ED6\u4EFB\u52A1\u3002" })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u521B\u5EFA\u540E\u6267\u884C" }), _jsxs("select", { name: "submission", defaultValue: "run", children: [_jsx("option", { value: "run", children: "\u5DF2\u6307\u5B9A\u8D1F\u8D23\u4EBA\u5219\u81EA\u52A8\u6392\u961F\uFF0C\u7B49\u5F85\u4F9D\u8D56\u5B8C\u6210\u540E\u6267\u884C" }), _jsx("option", { value: "plan", children: "\u4EC5\u89C4\u5212\uFF0C\u7A0D\u540E\u624B\u52A8\u63D0\u4EA4" })] })] }), error && _jsx(WorkspaceNotice, { children: error }), _jsxs("footer", { children: [_jsx("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }), _jsxs("button", { type: "submit", className: "is-primary", disabled: busy, children: [_jsx(IconPlusOutline16, { size: 14 }), busy ? '创建中…' : '创建任务'] })] })] });
|
|
245
|
+
return _jsxs("form", { className: "dsh-partner-task-form", "aria-busy": busy, onSubmit: event => { void submit(event); }, children: [_jsxs("label", { children: [_jsx("span", { children: "\u4EFB\u52A1\u540D\u79F0" }), _jsx("input", { name: "title", maxLength: 200, required: true, autoFocus: true, placeholder: "\u4E00\u53E5\u8BDD\u8BF4\u660E\u4EA4\u4ED8\u76EE\u6807" })] }), _jsxs("label", { children: [_jsx("span", { children: "\u8D1F\u8D23\u4EBA" }), _jsxs("select", { name: "assignee", defaultValue: "", children: [_jsx("option", { value: "", children: "\u672A\u6307\u6D3E" }), companions.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u4EFB\u52A1\u8BF4\u660E" }), _jsx("textarea", { name: "description", maxLength: 8000, rows: 5, placeholder: "\u8865\u5145\u80CC\u666F\u3001\u4EA4\u4ED8\u7269\u548C\u5B8C\u6210\u6761\u4EF6" })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u9A8C\u6536\u6E05\u5355 \u00B7 \u53EF\u9009" }), _jsx("textarea", { name: "acceptanceCriteria", rows: 3, maxLength: 10000, placeholder: "\u6BCF\u884C\u4E00\u9879\u53EF\u6838\u9A8C\u4EA4\u4ED8\uFF0C\u6700\u591A 20 \u9879" })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u72EC\u5360\u8D44\u6E90 \u00B7 \u53EF\u9009" }), _jsx("textarea", { name: "resourceKeys", rows: 2, maxLength: 2400, placeholder: "\u6BCF\u884C\u4E00\u4E2A\u4E00\u81F4\u7684\u8D44\u6E90\u6807\u8BC6\uFF0C\u4F8B\u5982 repo:team/api\uFF1B\u76F8\u540C\u8D44\u6E90\u4E0D\u4F1A\u540C\u65F6\u6267\u884C" })] }), _jsxs("label", { children: [_jsx("span", { children: "\u4F18\u5148\u7EA7" }), _jsxs("select", { name: "priority", defaultValue: "normal", children: [_jsx("option", { value: "low", children: "\u4F4E" }), _jsx("option", { value: "normal", children: "\u666E\u901A" }), _jsx("option", { value: "high", children: "\u9AD8" }), _jsx("option", { value: "urgent", children: "\u7D27\u6025" })] })] }), _jsxs("label", { children: [_jsx("span", { children: "\u9A8C\u6536\u4F19\u4F34" }), _jsxs("select", { name: "reviewer", defaultValue: "", children: [_jsx("option", { value: "", children: "\u7559\u7A7A \u00B7 \u4EBA\u5DE5\u9A8C\u6536" }), companions.map(item => _jsxs("option", { value: item.id, children: ["@", item.name] }, item.id))] })] }), _jsxs("div", { className: "dsh-partner-task-form-dependencies is-wide", children: [_jsxs("span", { children: ["\u4F9D\u8D56\u4EFB\u52A1 ", _jsx("small", { children: "\u53EF\u9009" })] }), dependencyOptions.length > 0 ? _jsx("div", { children: dependencyOptions.map(item => _jsxs("label", { children: [_jsx("input", { type: "checkbox", name: "dependencyTaskId", value: item.id }), _jsx("i", {}), _jsx("span", { children: item.title }), _jsx("small", { children: statusLabel(item.status) })] }, item.id)) }) : _jsx("p", { children: "\u5F53\u524D\u6CA1\u6709\u53EF\u9009\u7684\u672A\u5B8C\u6210\u4EFB\u52A1" }), _jsx("small", { children: "\u53EF\u4EE5\u9009\u62E9\u591A\u4E2A\uFF1B\u7559\u7A7A\u8868\u793A\u8BE5\u4EFB\u52A1\u4E0D\u4F9D\u8D56\u5176\u4ED6\u4EFB\u52A1\u3002" })] }), _jsxs("label", { className: "is-wide", children: [_jsx("span", { children: "\u521B\u5EFA\u540E\u6267\u884C" }), _jsxs("select", { name: "submission", defaultValue: "run", children: [_jsx("option", { value: "run", children: "\u5DF2\u6307\u5B9A\u8D1F\u8D23\u4EBA\u5219\u81EA\u52A8\u6392\u961F\uFF0C\u7B49\u5F85\u4F9D\u8D56\u5B8C\u6210\u540E\u6267\u884C" }), _jsx("option", { value: "plan", children: "\u4EC5\u89C4\u5212\uFF0C\u7A0D\u540E\u624B\u52A8\u63D0\u4EA4" })] })] }), error && _jsx(WorkspaceNotice, { children: error }), _jsxs("footer", { children: [_jsx("button", { type: "button", disabled: busy, onClick: close, children: "\u53D6\u6D88" }), _jsxs("button", { type: "submit", className: "is-primary", disabled: busy, children: [_jsx(IconPlusOutline16, { size: 14 }), busy ? '创建中…' : '创建任务'] })] })] });
|
|
237
246
|
}
|
|
238
247
|
function dependsOn(candidateId, targetId, tasks, visited = new Set()) {
|
|
239
248
|
if (candidateId === targetId)
|