@pellux/goodvibes-sdk 0.33.20 → 0.33.22

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.
Files changed (65) hide show
  1. package/dist/browser-knowledge.d.ts +49 -0
  2. package/dist/browser-knowledge.d.ts.map +1 -1
  3. package/dist/browser-knowledge.js +22 -0
  4. package/dist/contracts/artifacts/operator-contract.json +4615 -4
  5. package/dist/events/agents.d.ts +11 -0
  6. package/dist/events/agents.d.ts.map +1 -1
  7. package/dist/events/index.d.ts +1 -1
  8. package/dist/events/index.d.ts.map +1 -1
  9. package/dist/events/planner.d.ts +69 -1
  10. package/dist/events/planner.d.ts.map +1 -1
  11. package/dist/platform/agents/wrfc-controller.d.ts +19 -0
  12. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  13. package/dist/platform/agents/wrfc-controller.js +286 -22
  14. package/dist/platform/agents/wrfc-reporting.d.ts.map +1 -1
  15. package/dist/platform/agents/wrfc-reporting.js +5 -1
  16. package/dist/platform/agents/wrfc-types.d.ts +1 -1
  17. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  18. package/dist/platform/control-plane/method-catalog-knowledge.d.ts.map +1 -1
  19. package/dist/platform/control-plane/method-catalog-knowledge.js +154 -1
  20. package/dist/platform/control-plane/operator-contract-schemas-project-planning.d.ts +4 -0
  21. package/dist/platform/control-plane/operator-contract-schemas-project-planning.d.ts.map +1 -1
  22. package/dist/platform/control-plane/operator-contract-schemas-project-planning.js +78 -0
  23. package/dist/platform/core/orchestrator-turn-helpers.d.ts.map +1 -1
  24. package/dist/platform/core/orchestrator-turn-helpers.js +27 -11
  25. package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
  26. package/dist/platform/core/orchestrator-turn-loop.js +4 -1
  27. package/dist/platform/core/wrfc-routing.d.ts +5 -0
  28. package/dist/platform/core/wrfc-routing.d.ts.map +1 -0
  29. package/dist/platform/core/wrfc-routing.js +51 -0
  30. package/dist/platform/daemon/http/project-planning-routes.d.ts.map +1 -1
  31. package/dist/platform/daemon/http/project-planning-routes.js +67 -0
  32. package/dist/platform/knowledge/index.d.ts +1 -1
  33. package/dist/platform/knowledge/index.d.ts.map +1 -1
  34. package/dist/platform/knowledge/project-planning/helpers.d.ts +1 -1
  35. package/dist/platform/knowledge/project-planning/helpers.d.ts.map +1 -1
  36. package/dist/platform/knowledge/project-planning/helpers.js +4 -0
  37. package/dist/platform/knowledge/project-planning/index.d.ts +1 -1
  38. package/dist/platform/knowledge/project-planning/index.d.ts.map +1 -1
  39. package/dist/platform/knowledge/project-planning/service.d.ts +21 -1
  40. package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
  41. package/dist/platform/knowledge/project-planning/service.js +502 -1
  42. package/dist/platform/knowledge/project-planning/types.d.ts +140 -0
  43. package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
  44. package/dist/platform/runtime/emitters/agents.d.ts +11 -0
  45. package/dist/platform/runtime/emitters/agents.d.ts.map +1 -1
  46. package/dist/platform/runtime/emitters/planner.d.ts +22 -0
  47. package/dist/platform/runtime/emitters/planner.d.ts.map +1 -1
  48. package/dist/platform/runtime/emitters/planner.js +15 -0
  49. package/dist/platform/runtime/events/index.d.ts +1 -1
  50. package/dist/platform/runtime/events/index.d.ts.map +1 -1
  51. package/dist/platform/runtime/services.d.ts.map +1 -1
  52. package/dist/platform/runtime/services.js +2 -0
  53. package/dist/platform/runtime/store/domains/agents.d.ts +3 -1
  54. package/dist/platform/runtime/store/domains/agents.d.ts.map +1 -1
  55. package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
  56. package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +25 -6
  57. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  58. package/dist/platform/tools/agent/index.js +131 -64
  59. package/dist/platform/tools/agent/manager.d.ts +1 -0
  60. package/dist/platform/tools/agent/manager.d.ts.map +1 -1
  61. package/dist/platform/tools/agent/manager.js +36 -7
  62. package/dist/platform/tools/agent/schema.d.ts.map +1 -1
  63. package/dist/platform/tools/agent/schema.js +7 -6
  64. package/dist/platform/version.js +1 -1
  65. package/package.json +9 -9
@@ -8,7 +8,7 @@ import { AgentWorktree } from './worktree.js';
8
8
  import { completePlanItemsForAgent } from './wrfc-plan-sync.js';
9
9
  import { logger } from '../utils/logger.js';
10
10
  import { summarizeError } from '../utils/error-display.js';
11
- import { emitAgentCompleted, emitAgentFailed, emitWorkflowChainFailed, emitWorkflowFixAttempted, emitWorkflowReviewCompleted, } from '../runtime/emitters/index.js';
11
+ import { emitAgentCompleted, emitAgentFailed, emitAgentProgress, emitAgentRunning, emitWorkflowChainFailed, emitWorkflowFixAttempted, emitWorkflowReviewCompleted, } from '../runtime/emitters/index.js';
12
12
  import { getWrfcAutoCommit, getWrfcMaxFixAttempts, getWrfcScoreThreshold, } from './wrfc-config.js';
13
13
  import { buildEngineerConstraintAddendum, } from './wrfc-prompt-addenda.js';
14
14
  import { completeWrfcOrchestrationNode, createWrfcWorkflowContext, emitWrfcAutoCommitted, emitWrfcCascadeAbort, emitWrfcChainCreated, emitWrfcChainPassed, emitWrfcConstraintsEnumerated, emitWrfcGraphCreated, emitWrfcStateChanged, failWrfcOrchestrationNode, startWrfcOrchestrationNode, } from './wrfc-runtime-events.js';
@@ -40,6 +40,8 @@ export class WrfcController {
40
40
  configManager;
41
41
  createWorktree;
42
42
  selectChildRoute;
43
+ workPlanService = null;
44
+ workPlanTaskQueues = new Map();
43
45
  constructor(runtimeBus, messageBus, deps) {
44
46
  this.runtimeBus = runtimeBus;
45
47
  this.messageBus = messageBus;
@@ -86,6 +88,9 @@ export class WrfcController {
86
88
  this.runtimeBus = runtimeBus;
87
89
  this.setupListeners();
88
90
  }
91
+ setWorkPlanService(service) {
92
+ this.workPlanService = service ?? null;
93
+ }
89
94
  getChain(chainId) { return this.chains.get(chainId) ?? null; }
90
95
  listChains() { return Array.from(this.chains.values()); }
91
96
  resumeChain(chainId) {
@@ -138,9 +143,86 @@ export class WrfcController {
138
143
  }
139
144
  const from = chain.state;
140
145
  chain.state = to;
146
+ if (to !== 'passed' && to !== 'failed') {
147
+ this.keepOwnerAgentActive(chain);
148
+ }
141
149
  emitWrfcStateChanged(this.runtimeBus, this.sessionId, chain.id, from, to);
142
150
  logger.debug('WrfcController.transition', { chainId: chain.id, from, to });
143
151
  }
152
+ applyWrfcAgentMetadata(chain, record, role) {
153
+ record.wrfcId = chain.id;
154
+ record.wrfcRole = role;
155
+ record.wrfcPhaseOrder = this.wrfcPhaseOrder(role);
156
+ if (role === 'owner') {
157
+ record.progress = this.ownerProgress(chain);
158
+ }
159
+ if (record.status === 'pending' || record.status === 'running') {
160
+ emitAgentProgress(this.runtimeBus, {
161
+ sessionId: this.sessionId,
162
+ traceId: `${this.sessionId}:wrfc-agent-metadata:${record.id}`,
163
+ source: 'wrfc-controller',
164
+ agentId: record.id,
165
+ }, {
166
+ agentId: record.id,
167
+ progress: record.progress ?? `WRFC ${role} phase`,
168
+ ...(record.parentAgentId ? { parentAgentId: record.parentAgentId } : {}),
169
+ wrfcId: chain.id,
170
+ wrfcRole: role,
171
+ wrfcPhaseOrder: record.wrfcPhaseOrder,
172
+ });
173
+ }
174
+ }
175
+ keepOwnerAgentActive(chain, reason) {
176
+ if (chain.ownerTerminalEmitted || chain.state === 'passed' || chain.state === 'failed')
177
+ return;
178
+ const owner = this.agentManager.getStatus(chain.ownerAgentId);
179
+ if (!owner)
180
+ return;
181
+ this.applyWrfcAgentMetadata(chain, owner, 'owner');
182
+ owner.status = 'running';
183
+ delete owner.completedAt;
184
+ owner.progress = reason ? `${this.ownerProgress(chain)} - ${reason}` : this.ownerProgress(chain);
185
+ emitAgentRunning(this.runtimeBus, {
186
+ sessionId: this.sessionId,
187
+ traceId: `${this.sessionId}:wrfc-owner-active:${chain.id}`,
188
+ source: 'wrfc-controller',
189
+ agentId: owner.id,
190
+ }, {
191
+ agentId: owner.id,
192
+ wrfcId: chain.id,
193
+ wrfcRole: 'owner',
194
+ wrfcPhaseOrder: owner.wrfcPhaseOrder,
195
+ });
196
+ emitAgentProgress(this.runtimeBus, {
197
+ sessionId: this.sessionId,
198
+ traceId: `${this.sessionId}:wrfc-owner-progress:${chain.id}`,
199
+ source: 'wrfc-controller',
200
+ agentId: owner.id,
201
+ }, {
202
+ agentId: owner.id,
203
+ progress: owner.progress,
204
+ wrfcId: chain.id,
205
+ wrfcRole: 'owner',
206
+ wrfcPhaseOrder: owner.wrfcPhaseOrder,
207
+ });
208
+ }
209
+ ownerProgress(chain) {
210
+ return `WRFC owner supervising child agents (${chain.state})`;
211
+ }
212
+ wrfcPhaseOrder(role) {
213
+ switch (role) {
214
+ case 'owner':
215
+ return 0;
216
+ case 'engineer':
217
+ return 1;
218
+ case 'reviewer':
219
+ return 2;
220
+ case 'fixer':
221
+ return 3;
222
+ case 'verifier':
223
+ return 4;
224
+ }
225
+ }
144
226
  setupListeners() {
145
227
  const unsubComplete = this.runtimeBus.on('AGENT_COMPLETED', ({ payload }) => {
146
228
  this.onAgentComplete(payload.agentId).catch((error) => {
@@ -165,7 +247,13 @@ export class WrfcController {
165
247
  if (agentId === chain.ownerAgentId) {
166
248
  if (chain.ownerTerminalEmitted)
167
249
  return;
168
- this.failChain(chain, 'WRFC owner agent completed before the chain reached a terminal state');
250
+ this.keepOwnerAgentActive(chain, 'Ignored premature owner completion event; WRFC lifecycle is still active');
251
+ this.appendOwnerDecision(chain, 'owner_completion_ignored', 'Ignored premature owner completion because WRFC owner remains active until the full chain is terminal', { agentId });
252
+ logger.warn('WrfcController: ignored premature owner completion before terminal chain state', {
253
+ chainId: chain.id,
254
+ agentId,
255
+ state: chain.state,
256
+ });
169
257
  return;
170
258
  }
171
259
  const record = this.agentManager.getStatus(agentId);
@@ -186,12 +274,14 @@ export class WrfcController {
186
274
  }
187
275
  if (chain.state === 'engineering' || chain.state === 'fixing') {
188
276
  const report = parseEngineerCompletionReport(rawOutput, record?.template);
277
+ this.setWrfcWorkPlanTaskStatus(chain, agentId, 'done');
189
278
  this.handleEngineerCompletion(chain, agentId, report);
190
279
  }
191
280
  else if (chain.state === 'reviewing') {
192
281
  const review = parseReviewerCompletionReport(chain.id, rawOutput, getWrfcScoreThreshold(this.configManager));
193
282
  chain.reviewerReport = review;
194
283
  chain.reviewCycles += 1;
284
+ this.setWrfcWorkPlanTaskStatus(chain, agentId, 'done');
195
285
  await this.processReview(chain, review);
196
286
  }
197
287
  if (this.planManager) {
@@ -208,6 +298,20 @@ export class WrfcController {
208
298
  return;
209
299
  if (agentId === chain.ownerAgentId && (chain.state === 'passed' || chain.state === 'failed'))
210
300
  return;
301
+ if (agentId === chain.ownerAgentId) {
302
+ this.keepOwnerAgentActive(chain, 'Ignored premature owner failure event; WRFC lifecycle is still active');
303
+ this.appendOwnerDecision(chain, 'owner_failure_ignored', errorMessage
304
+ ? `Ignored premature owner failure before terminal chain state: ${errorMessage}`
305
+ : 'Ignored premature owner failure before terminal chain state', { agentId });
306
+ logger.warn('WrfcController: ignored premature owner failure before terminal chain state', {
307
+ chainId: chain.id,
308
+ agentId,
309
+ state: chain.state,
310
+ error: errorMessage,
311
+ });
312
+ return;
313
+ }
314
+ this.setWrfcWorkPlanTaskStatus(chain, agentId, 'failed', errorMessage ?? `Agent ${agentId} failed`);
211
315
  this.failChain(chain, errorMessage ?? `Agent ${agentId} failed`);
212
316
  }
213
317
  onAgentCancelled(agentId, reason) {
@@ -215,9 +319,11 @@ export class WrfcController {
215
319
  if (!chain || chain.state === 'passed' || chain.state === 'failed')
216
320
  return;
217
321
  if (agentId === chain.ownerAgentId) {
322
+ this.setWrfcWorkPlanTaskStatus(chain, agentId, 'cancelled', reason ?? 'WRFC owner agent cancelled');
218
323
  this.cancelChain(chain, reason ?? 'WRFC owner agent cancelled');
219
324
  return;
220
325
  }
326
+ this.setWrfcWorkPlanTaskStatus(chain, agentId, 'cancelled', reason ?? `Agent ${agentId} cancelled`);
221
327
  this.failChain(chain, reason ?? `Agent ${agentId} cancelled`);
222
328
  }
223
329
  startReview(chain, report) {
@@ -236,9 +342,8 @@ export class WrfcController {
236
342
  }
237
343
  const reviewerRecord = this.spawnWrfcAgent(chain, 'reviewer', 'reviewer', reviewTask, true);
238
344
  chain.reviewerAgentId = reviewerRecord.id;
239
- reviewerRecord.wrfcRole = 'reviewer';
345
+ this.applyWrfcAgentMetadata(chain, reviewerRecord, 'reviewer');
240
346
  chain.allAgentIds.push(reviewerRecord.id);
241
- reviewerRecord.wrfcId = chain.id;
242
347
  this.messageBus.registerAgent({
243
348
  agentId: reviewerRecord.id,
244
349
  role: 'reviewer',
@@ -254,6 +359,7 @@ export class WrfcController {
254
359
  role: 'reviewer',
255
360
  record: reviewerRecord,
256
361
  });
362
+ this.upsertWrfcWorkPlanTask(chain, 'reviewer', reviewerRecord, 'in_progress');
257
363
  }
258
364
  async processReview(chain, review) {
259
365
  const threshold = getWrfcScoreThreshold(this.configManager);
@@ -353,9 +459,8 @@ export class WrfcController {
353
459
  });
354
460
  const fixerRecord = this.spawnWrfcAgent(chain, 'fixer', 'engineer', buildFixTask(chain.id, chain.task, review, getWrfcScoreThreshold(this.configManager), chain.fixAttempts, chain.constraints, review.constraintFindings ?? []), true);
355
461
  chain.fixerAgentId = fixerRecord.id;
356
- fixerRecord.wrfcRole = 'fixer';
462
+ this.applyWrfcAgentMetadata(chain, fixerRecord, 'fixer');
357
463
  chain.allAgentIds.push(fixerRecord.id);
358
- fixerRecord.wrfcId = chain.id;
359
464
  this.messageBus.registerAgent({
360
465
  agentId: fixerRecord.id,
361
466
  role: 'fixer',
@@ -379,6 +484,7 @@ export class WrfcController {
379
484
  role: 'fixer',
380
485
  record: fixerRecord,
381
486
  });
487
+ this.upsertWrfcWorkPlanTask(chain, 'fixer', fixerRecord, 'in_progress');
382
488
  }
383
489
  async runGates(chain) {
384
490
  this.transition(chain, 'gating');
@@ -489,10 +595,9 @@ export class WrfcController {
489
595
  });
490
596
  const gateFixTask = buildGateFailureTask(chain.id, chain.task, failedGates, chain.constraints);
491
597
  const fixerRecord = this.spawnWrfcAgent(chain, 'fixer', 'engineer', gateFixTask, true);
492
- fixerRecord.wrfcRole = 'fixer';
598
+ this.applyWrfcAgentMetadata(chain, fixerRecord, 'fixer');
493
599
  chain.fixerAgentId = fixerRecord.id;
494
600
  chain.allAgentIds.push(fixerRecord.id);
495
- fixerRecord.wrfcId = chain.id;
496
601
  this.messageBus.registerAgent({
497
602
  agentId: fixerRecord.id,
498
603
  role: 'fixer',
@@ -516,6 +621,7 @@ export class WrfcController {
516
621
  role: 'fixer',
517
622
  record: fixerRecord,
518
623
  });
624
+ this.upsertWrfcWorkPlanTask(chain, 'fixer', fixerRecord, 'in_progress');
519
625
  }
520
626
  scheduleChainCleanup(chain) {
521
627
  const timer = setTimeout(() => {
@@ -608,6 +714,7 @@ export class WrfcController {
608
714
  }
609
715
  chain.error = reason;
610
716
  chain.completedAt = Date.now();
717
+ this.setWrfcWorkPlanTaskStatus(chain, chain.ownerAgentId, 'failed', reason);
611
718
  this.cancelRunningChildren(chain);
612
719
  this.appendOwnerDecision(chain, 'chain_failed', reason, {
613
720
  agentId: chain.ownerAgentId,
@@ -655,6 +762,7 @@ export class WrfcController {
655
762
  chain.error = reason;
656
763
  chain.completedAt = Date.now();
657
764
  chain.ownerTerminalEmitted = true;
765
+ this.setWrfcWorkPlanTaskStatus(chain, chain.ownerAgentId, 'cancelled', reason);
658
766
  this.appendOwnerDecision(chain, 'chain_cancelled', reason, {
659
767
  agentId: chain.ownerAgentId,
660
768
  });
@@ -764,9 +872,8 @@ export class WrfcController {
764
872
  };
765
873
  this.chains.set(chain.id, chain);
766
874
  emitWrfcGraphCreated(this.runtimeBus, this.sessionId, chain.id, `WRFC: ${ownerRecord.task}`);
767
- ownerRecord.wrfcId = chain.id;
768
- ownerRecord.wrfcRole = 'owner';
769
- ownerRecord.progress = 'WRFC owner supervising child agents';
875
+ this.applyWrfcAgentMetadata(chain, ownerRecord, 'owner');
876
+ this.keepOwnerAgentActive(chain);
770
877
  this.messageBus.registerAgent({
771
878
  agentId: ownerRecord.id,
772
879
  template: ownerRecord.template,
@@ -775,16 +882,17 @@ export class WrfcController {
775
882
  this.appendOwnerDecision(chain, 'chain_created', 'WRFC owner created for original ask', {
776
883
  agentId: ownerRecord.id,
777
884
  });
885
+ this.upsertWrfcWorkPlanTask(chain, 'owner', ownerRecord, 'pending');
778
886
  return chain;
779
887
  }
780
888
  startEngineeringChain(chain, emitCreated) {
781
889
  this.activeChainCount += 1;
782
890
  this.transition(chain, 'engineering');
891
+ this.setWrfcWorkPlanTaskStatus(chain, chain.ownerAgentId, 'in_progress');
783
892
  const engineerRecord = this.spawnWrfcAgent(chain, 'engineer', 'engineer', chain.task, true);
784
- engineerRecord.wrfcRole = 'engineer';
893
+ this.applyWrfcAgentMetadata(chain, engineerRecord, 'engineer');
785
894
  chain.engineerAgentId = engineerRecord.id;
786
895
  chain.allAgentIds.push(engineerRecord.id);
787
- engineerRecord.wrfcId = chain.id;
788
896
  this.messageBus.registerAgent({
789
897
  agentId: engineerRecord.id,
790
898
  role: 'engineer',
@@ -799,8 +907,10 @@ export class WrfcController {
799
907
  role: 'engineer',
800
908
  record: engineerRecord,
801
909
  });
910
+ this.upsertWrfcWorkPlanTask(chain, 'engineer', engineerRecord, 'in_progress');
802
911
  }
803
912
  handleEngineerCompletion(chain, agentId, report) {
913
+ let reportForReview = report;
804
914
  this.completeCurrentNode(chain, report.summary);
805
915
  if (chain.state === 'engineering') {
806
916
  chain.engineerReport = report;
@@ -829,16 +939,39 @@ export class WrfcController {
829
939
  // Fixer continuity validation: verify the fixer returned the same constraint id-set.
830
940
  // If it diverged, inject a synthetic critical issue for the next review pass.
831
941
  const fixerConstraints = isEngineerReportShape(report) ? (report.constraints ?? []) : [];
832
- const expectedIds = new Set(chain.constraints.map((c) => c.id));
833
- const actualIds = new Set(fixerConstraints.map((c) => c.id));
834
- const missing = [...expectedIds].filter((id) => !actualIds.has(id));
835
- const extra = [...actualIds].filter((id) => !expectedIds.has(id));
836
- if (missing.length > 0 || extra.length > 0) {
837
- const description = `Fixer regressed constraint continuity: missing=[${missing.join(',')}] extra=[${extra.join(',')}]`;
942
+ if (isEngineerReportShape(report)) {
943
+ reportForReview = this.canonicalizeFixerReportConstraints(report, chain.constraints);
944
+ }
945
+ if (chain.constraints.length === 0) {
946
+ if (fixerConstraints.length > 0) {
947
+ logger.warn('WrfcController: ignored fixer-invented constraints for unconstrained chain', {
948
+ chainId: chain.id,
949
+ extra: fixerConstraints.map((constraint) => constraint.id),
950
+ });
951
+ }
952
+ }
953
+ else if (isEngineerReportShape(report)) {
954
+ const expectedIds = new Set(chain.constraints.map((c) => c.id));
955
+ const actualIds = new Set(fixerConstraints.map((c) => c.id));
956
+ const missing = [...expectedIds].filter((id) => !actualIds.has(id));
957
+ const extra = [...actualIds].filter((id) => !expectedIds.has(id));
958
+ if (missing.length > 0 || extra.length > 0) {
959
+ const description = `Fixer regressed constraint continuity: missing=[${missing.join(',')}] extra=[${extra.join(',')}]`;
960
+ logger.warn('WrfcController: fixer constraint-continuity violation', {
961
+ chainId: chain.id,
962
+ missing,
963
+ extra,
964
+ });
965
+ chain.syntheticIssues ??= [];
966
+ chain.syntheticIssues.push({ severity: 'critical', description });
967
+ }
968
+ }
969
+ else {
970
+ const description = `Fixer regressed constraint continuity: missing=[${chain.constraints.map((c) => c.id).join(',')}] extra=[]`;
838
971
  logger.warn('WrfcController: fixer constraint-continuity violation', {
839
972
  chainId: chain.id,
840
- missing,
841
- extra,
973
+ missing: chain.constraints.map((constraint) => constraint.id),
974
+ extra: [],
842
975
  });
843
976
  chain.syntheticIssues ??= [];
844
977
  chain.syntheticIssues.push({ severity: 'critical', description });
@@ -846,7 +979,23 @@ export class WrfcController {
846
979
  // The authoritative constraint list is NOT overwritten — chain.constraints remains the
847
980
  // original enumeration from the initial engineer turn.
848
981
  }
849
- this.startReview(chain, report);
982
+ this.startReview(chain, reportForReview);
983
+ }
984
+ canonicalizeFixerReportConstraints(report, constraints) {
985
+ const canonical = {
986
+ ...report,
987
+ constraints: constraints.map((constraint) => ({ ...constraint })),
988
+ };
989
+ const { reviewableOutput: _ignored, ...jsonReport } = canonical;
990
+ canonical.reviewableOutput = [
991
+ 'Controller-canonicalized EngineerReport for WRFC review.',
992
+ 'The constraint list below is the authoritative chain constraint list; fixer-invented or renamed constraints were not forwarded to the reviewer.',
993
+ '',
994
+ '```json',
995
+ JSON.stringify(jsonReport, null, 2),
996
+ '```',
997
+ ].join('\n');
998
+ return canonical;
850
999
  }
851
1000
  spawnWrfcAgent(chain, role, template, task, dangerouslyDisableWrfc) {
852
1001
  const owner = this.agentManager.getStatus(chain.ownerAgentId);
@@ -885,6 +1034,7 @@ export class WrfcController {
885
1034
  this.appendOwnerDecision(chain, 'chain_passed', 'WRFC full-scope review and quality gates passed', {
886
1035
  agentId: chain.ownerAgentId,
887
1036
  });
1037
+ this.setWrfcWorkPlanTaskStatus(chain, chain.ownerAgentId, 'done', 'WRFC full-scope review and quality gates passed');
888
1038
  this.completeOwnerAgent(chain, 'completed', `WRFC chain ${chain.id} passed`);
889
1039
  emitWrfcChainPassed(this.runtimeBus, this.sessionId, chain.id);
890
1040
  this.scheduleChainCleanup(chain);
@@ -896,6 +1046,7 @@ export class WrfcController {
896
1046
  const owner = this.agentManager.getStatus(chain.ownerAgentId);
897
1047
  if (!owner)
898
1048
  return;
1049
+ this.applyWrfcAgentMetadata(chain, owner, 'owner');
899
1050
  owner.status = status;
900
1051
  owner.completedAt = Date.now();
901
1052
  owner.progress = message;
@@ -924,6 +1075,119 @@ export class WrfcController {
924
1075
  });
925
1076
  }
926
1077
  }
1078
+ upsertWrfcWorkPlanTask(chain, role, record, status) {
1079
+ if (!this.workPlanService)
1080
+ return;
1081
+ const taskId = this.workPlanTaskIdForAgent(chain, record.id, role);
1082
+ const task = {
1083
+ taskId,
1084
+ title: this.workPlanTaskTitle(role, chain.task),
1085
+ notes: role === 'owner'
1086
+ ? 'WRFC owner chain supervising lifecycle child agents.'
1087
+ : `WRFC ${role} phase for the owner chain.`,
1088
+ owner: role,
1089
+ status,
1090
+ source: 'wrfc',
1091
+ chainId: chain.id,
1092
+ phaseId: role,
1093
+ agentId: record.id,
1094
+ originSurface: 'daemon',
1095
+ tags: ['wrfc', role],
1096
+ parentTaskId: role === 'owner' ? undefined : this.workPlanTaskIdForAgent(chain, chain.ownerAgentId, 'owner'),
1097
+ metadata: {
1098
+ wrfcState: chain.state,
1099
+ agentTemplate: record.template,
1100
+ },
1101
+ };
1102
+ this.enqueueWrfcWorkPlanTaskOperation(taskId, async () => {
1103
+ try {
1104
+ await this.workPlanService?.createWorkPlanTask({ task });
1105
+ }
1106
+ catch (error) {
1107
+ if (!(error instanceof Error) || !error.message.includes('already exists'))
1108
+ throw error;
1109
+ await this.workPlanService?.updateWorkPlanTask({
1110
+ taskId,
1111
+ patch: {
1112
+ ...task,
1113
+ taskId: undefined,
1114
+ },
1115
+ });
1116
+ }
1117
+ }, {
1118
+ chainId: chain.id,
1119
+ agentId: record.id,
1120
+ role,
1121
+ action: 'upsert',
1122
+ });
1123
+ }
1124
+ setWrfcWorkPlanTaskStatus(chain, agentId, status, reason) {
1125
+ if (!this.workPlanService)
1126
+ return;
1127
+ const role = this.workPlanRoleForAgent(chain, agentId);
1128
+ if (!role)
1129
+ return;
1130
+ const taskId = this.workPlanTaskIdForAgent(chain, agentId, role);
1131
+ this.enqueueWrfcWorkPlanTaskOperation(taskId, async () => {
1132
+ await this.workPlanService?.updateWorkPlanTask({
1133
+ taskId,
1134
+ patch: {
1135
+ status,
1136
+ metadata: {
1137
+ wrfcState: chain.state,
1138
+ ...(reason ? { statusReason: reason } : {}),
1139
+ },
1140
+ },
1141
+ });
1142
+ }, {
1143
+ chainId: chain.id,
1144
+ agentId,
1145
+ role,
1146
+ action: 'status',
1147
+ });
1148
+ }
1149
+ enqueueWrfcWorkPlanTaskOperation(taskId, operation, context) {
1150
+ const previous = this.workPlanTaskQueues.get(taskId) ?? Promise.resolve();
1151
+ let next;
1152
+ next = previous
1153
+ .catch(() => undefined)
1154
+ .then(operation)
1155
+ .catch((error) => {
1156
+ logger.warn('WrfcController: failed to sync work-plan task', {
1157
+ chainId: context.chainId,
1158
+ agentId: context.agentId,
1159
+ role: context.role,
1160
+ action: context.action,
1161
+ error: summarizeError(error),
1162
+ });
1163
+ })
1164
+ .finally(() => {
1165
+ if (this.workPlanTaskQueues.get(taskId) === next) {
1166
+ this.workPlanTaskQueues.delete(taskId);
1167
+ }
1168
+ });
1169
+ this.workPlanTaskQueues.set(taskId, next);
1170
+ }
1171
+ workPlanRoleForAgent(chain, agentId) {
1172
+ if (agentId === chain.ownerAgentId)
1173
+ return 'owner';
1174
+ if (agentId === chain.engineerAgentId)
1175
+ return 'engineer';
1176
+ if (agentId === chain.reviewerAgentId)
1177
+ return 'reviewer';
1178
+ if (agentId === chain.fixerAgentId)
1179
+ return 'fixer';
1180
+ return null;
1181
+ }
1182
+ workPlanTaskIdForAgent(chain, agentId, role) {
1183
+ return `wrfc-${chain.id}-${role}-${agentId}`;
1184
+ }
1185
+ workPlanTaskTitle(role, task) {
1186
+ const label = role === 'owner'
1187
+ ? 'WRFC owner'
1188
+ : role.charAt(0).toUpperCase() + role.slice(1);
1189
+ return `${label}: ${task.slice(0, 120)}`;
1190
+ }
927
1191
  safeDequeueNext() {
928
1192
  this.dequeueNext().catch((error) => {
929
1193
  logger.error('WrfcController.dequeueNext unhandled error', { error: summarizeError(error) });
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-reporting.d.ts","sourceRoot":"","sources":["../../../src/platform/agents/wrfc-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAQzD,KAAK,0BAA0B,GAAG,gBAAgB,GAAG;IACnD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK7F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAa5E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,0BAA0B,CAkB/G;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,cAAc,CA6BhB;AAID,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,UAAU,EAAO,GAC7B,MAAM,CAuDR;AAiGD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,UAAU,EAAO,EAC9B,kBAAkB,GAAE,iBAAiB,EAAO,GAC3C,MAAM,CA6DR;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,WAAW,GAAE,SAAS,UAAU,EAAO,GACtC,MAAM,CAuCR"}
1
+ {"version":3,"file":"wrfc-reporting.d.ts","sourceRoot":"","sources":["../../../src/platform/agents/wrfc-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,iBAAiB,EAAkB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG9H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAQzD,KAAK,0BAA0B,GAAG,gBAAgB,GAAG;IACnD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAK7F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAa5E;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,0BAA0B,CAkB/G;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,cAAc,CA6BhB;AAID,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,UAAU,EAAO,GAC7B,MAAM,CAuDR;AAiGD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,UAAU,EAAO,EAC9B,kBAAkB,GAAE,iBAAiB,EAAO,GAC3C,MAAM,CAiER;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,iBAAiB,EAAE,EACzC,WAAW,GAAE,SAAS,UAAU,EAAO,GACtC,MAAM,CAuCR"}
@@ -266,7 +266,11 @@ export function buildFixTask(chainId, originalTask, review, threshold, fixAttemp
266
266
  `6. Return a structured EngineerReport JSON block including gatheredContext, plannedActions, and appliedChanges in your final response.`,
267
267
  ].join('\n');
268
268
  if (constraints.length === 0) {
269
- return base;
269
+ return [
270
+ base,
271
+ ``,
272
+ `Constraint continuity: the initial engineer declared no user-declared constraints for this chain. Return "constraints": [] in your EngineerReport. Do not invent constraint ids from the review findings, implementation details, or quality rubric.`,
273
+ ].join('\n');
270
274
  }
271
275
  // Build a finding-lookup map: constraintId -> ConstraintFinding
272
276
  const findingMap = new Map();
@@ -9,7 +9,7 @@ export interface QueuedChain {
9
9
  export type WrfcState = 'pending' | 'engineering' | 'reviewing' | 'fixing' | 'awaiting_gates' | 'gating' | 'passed' | 'failed' | 'committing';
10
10
  /** Agent role within a WRFC chain. The owner is the durable chain orchestrator. */
11
11
  export type WrfcAgentRole = 'owner' | 'engineer' | 'reviewer' | 'fixer' | 'verifier';
12
- export type WrfcOwnerDecisionAction = 'chain_created' | 'spawn_engineer' | 'spawn_reviewer' | 'spawn_fixer' | 'spawn_gate_fixer' | 'review_passed' | 'review_failed' | 'gate_passed' | 'gate_failed' | 'chain_passed' | 'chain_failed' | 'chain_cancelled' | 'resume_skipped' | 'resume_started';
12
+ export type WrfcOwnerDecisionAction = 'chain_created' | 'spawn_engineer' | 'spawn_reviewer' | 'spawn_fixer' | 'spawn_gate_fixer' | 'review_passed' | 'review_failed' | 'gate_passed' | 'gate_failed' | 'chain_passed' | 'chain_failed' | 'chain_cancelled' | 'owner_completion_ignored' | 'owner_failure_ignored' | 'resume_skipped' | 'resume_started';
13
13
  export interface WrfcOwnerDecision {
14
14
  id: string;
15
15
  ts: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc-types.d.ts","sourceRoot":"","sources":["../../../src/platform/agents/wrfc-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrfc-types.d.ts","sourceRoot":"","sources":["../../../src/platform/agents/wrfc-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"method-catalog-knowledge.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAkE1E,eAAO,MAAM,wCAAwC,EAAE,SAAS,uBAAuB,EAmuBtF,CAAC"}
1
+ {"version":3,"file":"method-catalog-knowledge.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/method-catalog-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAqE1E,eAAO,MAAM,wCAAwC,EAAE,SAAS,uBAAuB,EA43BtF,CAAC"}