fix(team): restore task automation ci
This commit is contained in:
parent
38b3a1e789
commit
cbf2d364be
5 changed files with 28 additions and 20 deletions
|
|
@ -596,6 +596,17 @@ export class TeamDataService {
|
|||
kanbanTaskState?: KanbanState['tasks'][string]
|
||||
): 'none' | 'review' | 'needsFix' | 'approved' {
|
||||
const kanbanColumn = kanbanTaskState?.column;
|
||||
const kanbanWorkflowColumn = kanbanColumn
|
||||
? getTeamTaskWorkflowColumn({
|
||||
status: task.status,
|
||||
reviewState: 'none',
|
||||
kanbanColumn,
|
||||
})
|
||||
: undefined;
|
||||
if (kanbanWorkflowColumn) {
|
||||
return kanbanWorkflowColumn;
|
||||
}
|
||||
|
||||
const reviewState = getReviewStateFromTask({
|
||||
historyEvents: task.historyEvents,
|
||||
reviewState: task.reviewState,
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ export interface OpenCodeSendMessageCommandBody {
|
|||
| 'slash_command'
|
||||
| 'slash_command_result'
|
||||
| 'task_comment_notification'
|
||||
| 'task_stall_remediation'
|
||||
| 'member_work_sync_nudge'
|
||||
| 'agent_error';
|
||||
taskRefs?: { taskId: string; displayId: string; teamName: string }[];
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
import type { OpenCodePromptDeliveryLedgerRecord } from './OpenCodePromptDeliveryLedger';
|
||||
|
||||
const SECRET_VALUE_PATTERN =
|
||||
/\b(?:sk-[A-Za-z0-9_-]{12,}|[A-Za-z0-9_-]*api[_-]?key[A-Za-z0-9_-]*[=:]\s*['"]?[^'"\s]+|authorization:\s*bearer\s+[^'"\s]+)\b/gi;
|
||||
const SECRET_VALUE_PATTERNS = [
|
||||
/\bsk-[A-Z0-9_-]{12,}\b/gi,
|
||||
/\b[A-Z0-9_-]*api[_-]?key[A-Z0-9_-]*[=:]\s*['"]?[^'"\s]+/gi,
|
||||
/\bauthorization:\s*bearer\s+[^'"\s]+/gi,
|
||||
] as const;
|
||||
|
||||
const GENERIC_DELIVERY_DIAGNOSTIC_TOKENS = [
|
||||
'opencode app mcp was reattached before message delivery',
|
||||
|
|
@ -43,12 +46,15 @@ const ACTION_REQUIRED_DELIVERY_ERROR_TOKENS = [
|
|||
export function normalizeOpenCodeRuntimeDeliveryDiagnostic(
|
||||
message: string | null | undefined
|
||||
): string | null {
|
||||
const normalized = message
|
||||
const scrubbed = SECRET_VALUE_PATTERNS.reduce(
|
||||
(current, pattern) => current.replace(pattern, '[redacted]'),
|
||||
message ?? ''
|
||||
);
|
||||
const normalized = scrubbed
|
||||
?.replace(/\s+/g, ' ')
|
||||
.trim()
|
||||
.replace(/^Latest assistant message\s+\S+\s+failed with APIError\s*[-:]\s*/i, '')
|
||||
.replace(/^APIError\s*[-:]\s*/i, '')
|
||||
.replace(SECRET_VALUE_PATTERN, '[redacted]');
|
||||
.replace(/^APIError\s*[-:]\s*/i, '');
|
||||
return normalized && normalized.length > 0 ? normalized : null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,20 +72,7 @@ export function isTeamTaskTerminalForActionableWork(task: TeamTaskStateLike): bo
|
|||
}
|
||||
|
||||
export function isTeamTaskFinalForCompletionNotification(task: TeamTaskStateLike): boolean {
|
||||
if (isTeamTaskDeleted(task)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const workflowColumn = getTeamTaskWorkflowColumn(task);
|
||||
if (workflowColumn === 'approved') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (workflowColumn === 'review' || isTeamTaskNeedsFixActionable(task)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return task.status === 'completed';
|
||||
return isTeamTaskTerminalForActionableWork(task);
|
||||
}
|
||||
|
||||
export function getTeamTaskWorkflowColumn(
|
||||
|
|
|
|||
|
|
@ -1914,7 +1914,7 @@ describe('TeamDataService', () => {
|
|||
name: 'My team',
|
||||
members: [{ name: 'jack', role: 'developer' }],
|
||||
},
|
||||
getTasks: async () => [
|
||||
getTasks: async (): Promise<TeamTask[]> => [
|
||||
{
|
||||
id: 'task-approved',
|
||||
subject: 'Approved but stale status',
|
||||
|
|
@ -1975,6 +1975,7 @@ describe('TeamDataService', () => {
|
|||
id: 'review-started',
|
||||
type: 'review_started',
|
||||
timestamp: '2026-05-06T19:00:00.000Z',
|
||||
from: 'none',
|
||||
to: 'review',
|
||||
},
|
||||
],
|
||||
|
|
@ -2172,6 +2173,7 @@ describe('TeamDataService', () => {
|
|||
{
|
||||
id: 'evt-review',
|
||||
type: 'review_started',
|
||||
from: 'none',
|
||||
to: 'review',
|
||||
timestamp: '2026-03-01T09:00:00.000Z',
|
||||
},
|
||||
|
|
@ -2182,6 +2184,7 @@ describe('TeamDataService', () => {
|
|||
{} as never,
|
||||
{} as never,
|
||||
{} as never,
|
||||
{} as never,
|
||||
{
|
||||
getState: vi.fn(async () => ({
|
||||
teamName: 'my-team',
|
||||
|
|
|
|||
Loading…
Reference in a new issue