@mcoda/core 0.1.27 → 0.1.28

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.
@@ -198,6 +198,90 @@ const deriveParentDirs = (paths) => {
198
198
  }
199
199
  return Array.from(dirs);
200
200
  };
201
+ const isRecord = (value) => Boolean(value && typeof value === "object" && !Array.isArray(value));
202
+ const normalizeFailoverEvents = (value) => {
203
+ if (!Array.isArray(value))
204
+ return [];
205
+ const events = [];
206
+ for (const entry of value) {
207
+ if (!isRecord(entry))
208
+ continue;
209
+ if (typeof entry.type !== "string" || entry.type.trim().length === 0)
210
+ continue;
211
+ events.push({ ...entry });
212
+ }
213
+ return events;
214
+ };
215
+ const mergeFailoverEvents = (left, right) => {
216
+ if (!left.length)
217
+ return right;
218
+ if (!right.length)
219
+ return left;
220
+ const seen = new Set();
221
+ const merged = [];
222
+ const signature = (event) => [
223
+ event.type ?? "",
224
+ event.fromAgentId ?? "",
225
+ event.toAgentId ?? "",
226
+ event.at ?? "",
227
+ event.until ?? "",
228
+ event.durationMs ?? "",
229
+ ].join("|");
230
+ for (const event of [...left, ...right]) {
231
+ const key = signature(event);
232
+ if (seen.has(key))
233
+ continue;
234
+ seen.add(key);
235
+ merged.push(event);
236
+ }
237
+ return merged;
238
+ };
239
+ const mergeInvocationMetadata = (current, incoming) => {
240
+ if (!current && !incoming)
241
+ return undefined;
242
+ if (!incoming)
243
+ return current;
244
+ if (!current)
245
+ return { ...incoming };
246
+ const merged = { ...current, ...incoming };
247
+ const currentEvents = normalizeFailoverEvents(current.failoverEvents);
248
+ const incomingEvents = normalizeFailoverEvents(incoming.failoverEvents);
249
+ if (currentEvents.length > 0 || incomingEvents.length > 0) {
250
+ merged.failoverEvents = mergeFailoverEvents(currentEvents, incomingEvents);
251
+ }
252
+ return merged;
253
+ };
254
+ const describeFailoverEvent = (event) => {
255
+ const type = String(event.type ?? "unknown");
256
+ if (type === "switch_agent") {
257
+ const from = typeof event.fromAgentId === "string" ? event.fromAgentId : "unknown";
258
+ const to = typeof event.toAgentId === "string" ? event.toAgentId : "unknown";
259
+ return `switch_agent ${from} -> ${to}`;
260
+ }
261
+ if (type === "sleep_until_reset") {
262
+ const duration = typeof event.durationMs === "number" && Number.isFinite(event.durationMs)
263
+ ? `${Math.round(event.durationMs / 1000)}s`
264
+ : "unknown duration";
265
+ const until = typeof event.until === "string" ? event.until : "unknown";
266
+ return `sleep_until_reset ${duration} (until ${until})`;
267
+ }
268
+ if (type === "stream_restart_after_limit") {
269
+ const from = typeof event.fromAgentId === "string" ? event.fromAgentId : "unknown";
270
+ return `stream_restart_after_limit from ${from}`;
271
+ }
272
+ return type;
273
+ };
274
+ const resolveFailoverAgentId = (events, fallbackAgentId) => {
275
+ for (let index = events.length - 1; index >= 0; index -= 1) {
276
+ const event = events[index];
277
+ if (event?.type !== "switch_agent")
278
+ continue;
279
+ if (typeof event.toAgentId === "string" && event.toAgentId.trim().length > 0) {
280
+ return event.toAgentId;
281
+ }
282
+ }
283
+ return fallbackAgentId;
284
+ };
201
285
  const normalizeGatewayItem = (value) => {
202
286
  const trimmed = value.trim();
203
287
  if (!trimmed || trimmed === "(none)")
@@ -3639,6 +3723,16 @@ export class WorkOnTasksService {
3639
3723
  };
3640
3724
  try {
3641
3725
  const warnings = [...baseBranchWarnings, ...statusWarnings, ...runnerWarnings];
3726
+ const selectionWarningSet = new Set();
3727
+ const pushSelectionWarnings = (entries) => {
3728
+ for (const warning of entries) {
3729
+ const normalized = warning.trim();
3730
+ if (!normalized || selectionWarningSet.has(normalized))
3731
+ continue;
3732
+ selectionWarningSet.add(normalized);
3733
+ warnings.push(warning);
3734
+ }
3735
+ };
3642
3736
  try {
3643
3737
  const guidance = await ensureProjectGuidance(this.workspace.workspaceRoot, {
3644
3738
  mcodaDir: this.workspace.mcodaDir,
@@ -3687,7 +3781,7 @@ export class WorkOnTasksService {
3687
3781
  totalItems: selection.ordered.length,
3688
3782
  processedItems: 0,
3689
3783
  });
3690
- warnings.push(...selection.warnings);
3784
+ pushSelectionWarnings(selection.warnings);
3691
3785
  const results = [];
3692
3786
  const taskSummaries = new Map();
3693
3787
  let preflightMissingHarnessTasks = await this.findMissingTestHarnessTasks(selection.ordered);
@@ -3917,8 +4011,67 @@ export class WorkOnTasksService {
3917
4011
  emitLine(" ░░░░░ END OF WORK TASK ░░░░░");
3918
4012
  emitBlank();
3919
4013
  };
4014
+ const maxSelectedTasks = typeof request.limit === "number" && request.limit > 0 ? request.limit : undefined;
4015
+ const selectedTaskIds = new Set(selection.ordered.map((entry) => entry.task.id));
4016
+ const refreshSelectionQueue = async (processedCount) => {
4017
+ if (maxSelectedTasks !== undefined && selectedTaskIds.size >= maxSelectedTasks)
4018
+ return;
4019
+ const remainingBudget = maxSelectedTasks === undefined ? undefined : Math.max(0, maxSelectedTasks - selectedTaskIds.size);
4020
+ if (remainingBudget === 0)
4021
+ return;
4022
+ const refreshedSelection = await this.selectionService.selectTasks({
4023
+ projectKey: request.projectKey,
4024
+ epicKey: request.epicKey,
4025
+ storyKey: request.storyKey,
4026
+ taskKeys: request.taskKeys,
4027
+ statusFilter,
4028
+ ignoreStatusFilter,
4029
+ includeTypes,
4030
+ excludeTypes,
4031
+ ignoreDependencies,
4032
+ missingContextPolicy: request.missingContextPolicy ?? "block",
4033
+ limit: remainingBudget,
4034
+ parallel: request.parallel,
4035
+ });
4036
+ pushSelectionWarnings(refreshedSelection.warnings);
4037
+ if (refreshedSelection.project && !selection.project) {
4038
+ selection = { ...selection, project: refreshedSelection.project };
4039
+ }
4040
+ const newlyEligible = [];
4041
+ for (const entry of refreshedSelection.ordered) {
4042
+ if (selectedTaskIds.has(entry.task.id))
4043
+ continue;
4044
+ if (maxSelectedTasks !== undefined && selectedTaskIds.size + newlyEligible.length >= maxSelectedTasks)
4045
+ break;
4046
+ newlyEligible.push(entry);
4047
+ }
4048
+ if (newlyEligible.length === 0)
4049
+ return;
4050
+ selection = {
4051
+ ...selection,
4052
+ ordered: [...selection.ordered, ...newlyEligible],
4053
+ };
4054
+ for (const entry of newlyEligible) {
4055
+ selectedTaskIds.add(entry.task.id);
4056
+ }
4057
+ await this.checkpoint(job.id, "selection_refresh", {
4058
+ appended: newlyEligible.map((entry) => entry.task.key),
4059
+ totalSelected: selection.ordered.length,
4060
+ processedItems: processedCount,
4061
+ });
4062
+ await this.deps.jobService.updateJobStatus(job.id, "running", {
4063
+ payload: {
4064
+ selection: selection.ordered.map((entry) => entry.task.key),
4065
+ },
4066
+ totalItems: selection.ordered.length,
4067
+ processedItems: processedCount,
4068
+ });
4069
+ };
3920
4070
  let abortRemainingReason = null;
3921
- taskLoop: for (const [index, task] of selection.ordered.entries()) {
4071
+ taskLoop: for (let index = 0; index < selection.ordered.length; index += 1) {
4072
+ const task = selection.ordered[index];
4073
+ if (!task)
4074
+ continue;
3922
4075
  if (abortRemainingReason)
3923
4076
  break taskLoop;
3924
4077
  abortIfSignaled();
@@ -4864,9 +5017,7 @@ export class WorkOnTasksService {
4864
5017
  if (aborted) {
4865
5018
  throw new Error(resolveAbortReason());
4866
5019
  }
4867
- if (!invocationMetadata && chunk.metadata) {
4868
- invocationMetadata = chunk.metadata;
4869
- }
5020
+ invocationMetadata = mergeInvocationMetadata(invocationMetadata, chunk.metadata);
4870
5021
  if (!invocationAdapter && typeof chunk.adapter === "string") {
4871
5022
  invocationAdapter = chunk.adapter;
4872
5023
  }
@@ -4922,7 +5073,7 @@ export class WorkOnTasksService {
4922
5073
  const result = await Promise.race([invokePromise, lockLostPromise]);
4923
5074
  if (result) {
4924
5075
  output = result.output ?? "";
4925
- invocationMetadata = result.metadata ?? invocationMetadata;
5076
+ invocationMetadata = mergeInvocationMetadata(invocationMetadata, result.metadata);
4926
5077
  invocationAdapter = result.adapter ?? invocationAdapter;
4927
5078
  invocationModel = result.model ?? invocationModel;
4928
5079
  }
@@ -5050,8 +5201,25 @@ export class WorkOnTasksService {
5050
5201
  if (!agentInvocation) {
5051
5202
  throw new Error("Agent invocation did not return a response.");
5052
5203
  }
5053
- await recordUsage("agent", agentInvocation.output ?? "", agentDuration, agentInput, agentInvocation.agentUsed, attempt);
5054
5204
  const invocationMeta = (agentInvocation.metadata ?? {});
5205
+ const failoverEvents = normalizeFailoverEvents(invocationMeta.failoverEvents);
5206
+ if (failoverEvents.length > 0) {
5207
+ for (const event of failoverEvents) {
5208
+ await this.logTask(taskRun.id, `Agent failover: ${describeFailoverEvent(event)}`, "agent_failover", event);
5209
+ }
5210
+ }
5211
+ const usageAgentId = resolveFailoverAgentId(failoverEvents, agentInvocation.agentUsed.id);
5212
+ let usageAgent = agentInvocation.agentUsed;
5213
+ if (usageAgentId !== agentInvocation.agentUsed.id) {
5214
+ try {
5215
+ const resolvedUsageAgent = await this.deps.agentService.resolveAgent(usageAgentId);
5216
+ usageAgent = { id: resolvedUsageAgent.id, defaultModel: resolvedUsageAgent.defaultModel };
5217
+ }
5218
+ catch (error) {
5219
+ await this.logTask(taskRun.id, `Unable to resolve failover agent (${usageAgentId}) for usage accounting: ${error instanceof Error ? error.message : String(error)}`, "agent_failover");
5220
+ }
5221
+ }
5222
+ await recordUsage("agent", agentInvocation.output ?? "", agentDuration, agentInput, usageAgent, attempt);
5055
5223
  const rawTouched = Array.isArray(invocationMeta.touchedFiles) ? invocationMeta.touchedFiles : [];
5056
5224
  const touchedFiles = rawTouched.filter((entry) => typeof entry === "string" && entry.trim().length > 0);
5057
5225
  const logPath = typeof invocationMeta.logPath === "string" ? invocationMeta.logPath : undefined;
@@ -6193,6 +6361,14 @@ export class WorkOnTasksService {
6193
6361
  }
6194
6362
  finally {
6195
6363
  await emitTaskEndOnce();
6364
+ if (!abortRemainingReason) {
6365
+ try {
6366
+ await refreshSelectionQueue(index + 1);
6367
+ }
6368
+ catch (error) {
6369
+ warnings.push(`selection_refresh_failed: ${error instanceof Error ? error.message : String(error)}`);
6370
+ }
6371
+ }
6196
6372
  }
6197
6373
  }
6198
6374
  if (abortRemainingReason) {
@@ -7,6 +7,7 @@ import { RoutingService } from "../agents/RoutingService.js";
7
7
  import { AgentRatingService } from "../agents/AgentRatingService.js";
8
8
  import { TaskOrderingService } from "../backlog/TaskOrderingService.js";
9
9
  import { TaskSufficiencyService } from "./TaskSufficiencyService.js";
10
+ import { SdsPreflightService } from "./SdsPreflightService.js";
10
11
  export interface CreateTasksOptions {
11
12
  workspace: WorkspaceResolution;
12
13
  projectKey: string;
@@ -22,6 +23,8 @@ export interface CreateTasksOptions {
22
23
  qaEntryUrl?: string;
23
24
  qaStartCommand?: string;
24
25
  qaRequires?: string[];
26
+ sdsPreflightCommit?: boolean;
27
+ sdsPreflightCommitMessage?: string;
25
28
  }
26
29
  export interface CreateTasksResult {
27
30
  jobId: string;
@@ -37,6 +40,8 @@ type TaskOrderingFactory = (workspace: WorkspaceResolution, options?: {
37
40
  }) => Promise<TaskOrderingClient>;
38
41
  type TaskSufficiencyClient = Pick<TaskSufficiencyService, "runAudit" | "close">;
39
42
  type TaskSufficiencyFactory = (workspace: WorkspaceResolution) => Promise<TaskSufficiencyClient>;
43
+ type SdsPreflightClient = Pick<SdsPreflightService, "runPreflight" | "close">;
44
+ type SdsPreflightFactory = (workspace: WorkspaceResolution) => Promise<SdsPreflightClient>;
40
45
  export declare class CreateTasksService {
41
46
  private static readonly MAX_BUSY_RETRIES;
42
47
  private static readonly BUSY_BACKOFF_MS;
@@ -50,6 +55,7 @@ export declare class CreateTasksService {
50
55
  private ratingService?;
51
56
  private taskOrderingFactory;
52
57
  private taskSufficiencyFactory;
58
+ private sdsPreflightFactory;
53
59
  constructor(workspace: WorkspaceResolution, deps: {
54
60
  docdex: DocdexClient;
55
61
  jobService: JobService;
@@ -60,6 +66,7 @@ export declare class CreateTasksService {
60
66
  ratingService?: AgentRatingService;
61
67
  taskOrderingFactory?: TaskOrderingFactory;
62
68
  taskSufficiencyFactory?: TaskSufficiencyFactory;
69
+ sdsPreflightFactory?: SdsPreflightFactory;
63
70
  });
64
71
  static create(workspace: WorkspaceResolution): Promise<CreateTasksService>;
65
72
  close(): Promise<void>;
@@ -72,6 +79,7 @@ export declare class CreateTasksService {
72
79
  private ensureRatingService;
73
80
  private prepareDocs;
74
81
  private normalizeDocInputForSet;
82
+ private mergeDocInputs;
75
83
  private docIdentity;
76
84
  private mergeDocs;
77
85
  private sortDocsForPlanning;
@@ -1 +1 @@
1
- {"version":3,"file":"CreateTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/planning/CreateTasksService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreateTasksService.d.ts","sourceRoot":"","sources":["../../../src/services/planning/CreateTasksService.ts"],"names":[],"mappings":"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"}