harnery 0.19.0 → 0.20.0

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 (33) hide show
  1. package/dist/commands/supervisor.d.ts.map +1 -1
  2. package/dist/commands/supervisor.js +21 -1
  3. package/dist/core/supervisor/index.d.ts +1 -1
  4. package/dist/core/supervisor/index.d.ts.map +1 -1
  5. package/dist/core/supervisor/index.js +1 -1
  6. package/dist/core/supervisor/plan-api.d.ts +7 -0
  7. package/dist/core/supervisor/plan-api.d.ts.map +1 -1
  8. package/dist/core/supervisor/plan-api.js +17 -1
  9. package/dist/core/supervisor/plan-read.d.ts.map +1 -1
  10. package/dist/core/supervisor/plan-read.js +4 -0
  11. package/dist/core/supervisor/plan-types.d.ts +2 -2
  12. package/dist/core/supervisor/plan-types.d.ts.map +1 -1
  13. package/dist/core/supervisor/planning.d.ts +7 -0
  14. package/dist/core/supervisor/planning.d.ts.map +1 -1
  15. package/dist/core/supervisor/planning.js +136 -51
  16. package/dist/core/supervisor/state.d.ts +2 -1
  17. package/dist/core/supervisor/state.d.ts.map +1 -1
  18. package/dist/core/supervisor/state.js +4 -1
  19. package/dist/core/workflow/types.d.ts +3 -0
  20. package/dist/core/workflow/types.d.ts.map +1 -1
  21. package/dist/core/workflow/validate.d.ts +3 -2
  22. package/dist/core/workflow/validate.d.ts.map +1 -1
  23. package/dist/core/workflow/validate.js +23 -2
  24. package/package.json +1 -1
  25. package/src/commands/supervisor.ts +32 -0
  26. package/src/core/supervisor/index.ts +5 -1
  27. package/src/core/supervisor/plan-api.ts +27 -1
  28. package/src/core/supervisor/plan-read.ts +4 -0
  29. package/src/core/supervisor/plan-types.ts +2 -0
  30. package/src/core/supervisor/planning.ts +154 -52
  31. package/src/core/supervisor/state.ts +7 -1
  32. package/src/core/workflow/types.ts +3 -0
  33. package/src/core/workflow/validate.ts +26 -2
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/commands/supervisor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAqEnD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAgGnF"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/commands/supervisor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsEnD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAgGnF"}
@@ -4,7 +4,7 @@ import { workflowSubscriptionOnly } from "../core/config.js";
4
4
  import { createBuiltinHarnessRegistry } from "../core/harnesses/index.js";
5
5
  import { findCoordRoot } from "../core/hooks/resolve/coord-root.js";
6
6
  import { loadPolicyFile } from "../core/policy/index.js";
7
- import { approveSupervisorPlan, configureSupervisorService, createSupervisor, listSupervisors, readSupervisor, readSupervisorPlan, readSupervisorServiceConfig, readSupervisorServiceStatus, rejectSupervisorPlan, requestSupervisorServiceStop, runSupervisor, runSupervisorServiceDaemon, spawnSupervisorService, supervisorServiceLogPath, } from "../core/supervisor/index.js";
7
+ import { approveSupervisorPlan, configureSupervisorService, createSupervisor, listSupervisors, readSupervisor, readSupervisorPlan, readSupervisorServiceConfig, readSupervisorServiceStatus, rejectSupervisorPlan, requestSupervisorServiceStop, retrySupervisorPlan, runSupervisor, runSupervisorServiceDaemon, spawnSupervisorService, supervisorServiceLogPath, } from "../core/supervisor/index.js";
8
8
  export function registerSupervisorCommand(program, emit) {
9
9
  const registry = createBuiltinHarnessRegistry();
10
10
  const supervisor = program
@@ -159,6 +159,23 @@ function registerPlanCommand(supervisor, emit) {
159
159
  }), opts.json, emit);
160
160
  });
161
161
  });
162
+ plan
163
+ .command("retry <goal-id> <plan-id>")
164
+ .description("Attach bounded guidance and authorize a new attempt after plan attention.")
165
+ .requiredOption("--reason <text>", "Guidance for the next planner attempt")
166
+ .option("--actor <name>", "Actor recorded on the retry request")
167
+ .option("--json", "Emit the plan outcome as JSON")
168
+ .action((goalId, planId, opts) => {
169
+ withSupervisorRoot(emit, (coordRoot) => {
170
+ emitPlanOutcome(retrySupervisorPlan({
171
+ coordRoot,
172
+ goalId,
173
+ planId,
174
+ actor: opts.actor,
175
+ reason: opts.reason,
176
+ }), opts.json, emit);
177
+ });
178
+ });
162
179
  }
163
180
  function registerServiceCommand(supervisor, registry, emit) {
164
181
  const service = supervisor
@@ -555,6 +572,9 @@ function emitSupervisor(record, json, emit, detail = false) {
555
572
  }
556
573
  if (projection.pending_plan_id)
557
574
  lines.push(`pending plan: ${projection.pending_plan_id}`);
575
+ if (projection.attention_plan_id) {
576
+ lines.push(`attention plan: ${projection.attention_plan_id}`);
577
+ }
558
578
  }
559
579
  if (record.intent.mission) {
560
580
  lines.push(`mission: ${record.intent.mission.objective}`);
@@ -1,4 +1,4 @@
1
- export { approveSupervisorPlan, rejectSupervisorPlan } from "./plan-api.js";
1
+ export { approveSupervisorPlan, rejectSupervisorPlan, retrySupervisorPlan, } from "./plan-api.js";
2
2
  export { readSupervisorPlan, readSupervisorPlanReviewReceipt, readSupervisorPlans, } from "./plan-read.js";
3
3
  export { type CreateSupervisorPlanTemplateInput, type CreateSupervisorReplanningInput, MAX_SUPERVISOR_PLAN_REVIEWERS, MAX_SUPERVISOR_PLAN_REVISION_ROUNDS, SUPERVISOR_PLAN_SCHEMA_VERSION, type SupervisorPlanEvent, type SupervisorPlanEventType, type SupervisorPlanHistory, type SupervisorPlanMilestone, type SupervisorPlanOutcome, type SupervisorPlanProposal, type SupervisorPlanRecord, type SupervisorPlanRequest, type SupervisorPlanReviewFinding, type SupervisorPlanReviewReceipt, type SupervisorPlanReviewReviewer, type SupervisorPlanReviewRound, type SupervisorPlanReviewStatus, type SupervisorPlanReviewSummary, type SupervisorPlanReviewVerdict, type SupervisorPlanStatus, type SupervisorPlanTemplate, type SupervisorPlanWorkSpec, type SupervisorReplanningPolicy, } from "./plan-types.js";
4
4
  export { type RunSupervisorInput, runSupervisor, type SupervisorDispatchOutcome, type SupervisorRunReport, type SupervisorStopReason, } from "./runner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,+BAA+B,EACpC,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,EACzB,wCAAwC,EACxC,yCAAyC,EACzC,wCAAwC,EACxC,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gCAAgC,EAChC,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,+BAA+B,EACpC,0BAA0B,EAC1B,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,EACzB,wCAAwC,EACxC,yCAAyC,EACzC,wCAAwC,EACxC,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACd,gCAAgC,EAChC,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- export { approveSupervisorPlan, rejectSupervisorPlan } from "./plan-api.js";
1
+ export { approveSupervisorPlan, rejectSupervisorPlan, retrySupervisorPlan, } from "./plan-api.js";
2
2
  export { readSupervisorPlan, readSupervisorPlanReviewReceipt, readSupervisorPlans, } from "./plan-read.js";
3
3
  export { MAX_SUPERVISOR_PLAN_REVIEWERS, MAX_SUPERVISOR_PLAN_REVISION_ROUNDS, SUPERVISOR_PLAN_SCHEMA_VERSION, } from "./plan-types.js";
4
4
  export { runSupervisor, } from "./runner.js";
@@ -13,4 +13,11 @@ export declare function rejectSupervisorPlan(input: {
13
13
  actor?: string;
14
14
  reason: string;
15
15
  }): SupervisorPlanOutcome;
16
+ export declare function retrySupervisorPlan(input: {
17
+ coordRoot: string;
18
+ goalId: string;
19
+ planId: string;
20
+ actor?: string;
21
+ reason: string;
22
+ }): SupervisorPlanOutcome;
16
23
  //# sourceMappingURL=plan-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-api.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAI7D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,qBAAqB,CAcxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAcxB"}
1
+ {"version":3,"file":"plan-api.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQ7D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,qBAAqB,CAcxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAcxB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAcxB"}
@@ -1,4 +1,4 @@
1
- import { applySupervisorPlanProposal, rejectSupervisorPlanProposal } from "./planning.js";
1
+ import { applySupervisorPlanProposal, rejectSupervisorPlanProposal, retrySupervisorPlanProposal, } from "./planning.js";
2
2
  import { acquireSupervisorLease, readSupervisorIgnoringLease } from "./state.js";
3
3
  export function approveSupervisorPlan(input) {
4
4
  const actor = input.actor?.trim() || `supervisor:${input.goalId}`;
@@ -32,3 +32,19 @@ export function rejectSupervisorPlan(input) {
32
32
  release();
33
33
  }
34
34
  }
35
+ export function retrySupervisorPlan(input) {
36
+ const actor = input.actor?.trim() || `supervisor:${input.goalId}`;
37
+ const release = acquireSupervisorLease(input.coordRoot, input.goalId);
38
+ try {
39
+ return retrySupervisorPlanProposal({
40
+ coordRoot: input.coordRoot,
41
+ record: readSupervisorIgnoringLease(input.coordRoot, input.goalId),
42
+ planId: input.planId,
43
+ actor,
44
+ reason: input.reason,
45
+ });
46
+ }
47
+ finally {
48
+ release();
49
+ }
50
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-read.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,qBAAqB,EAE1B,KAAK,oBAAoB,EAGzB,KAAK,2BAA2B,EAMjC,MAAM,iBAAiB,CAAC;AAwBzB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,qBAAqB,CAwEvB;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,oBAAoB,CAsBtB;AAED,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,2BAA2B,GAAG,SAAS,CAWzC"}
1
+ {"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-read.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,qBAAqB,EAE1B,KAAK,oBAAoB,EAGzB,KAAK,2BAA2B,EAMjC,MAAM,iBAAiB,CAAC;AAyBzB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,qBAAqB,CAwEvB;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,oBAAoB,CAsBtB;AAED,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,2BAA2B,GAAG,SAAS,CAWzC"}
@@ -21,6 +21,7 @@ const EVENT_TYPES = new Set([
21
21
  "plan.applied",
22
22
  "plan.completed",
23
23
  "plan.rejected",
24
+ "plan.retry_requested",
24
25
  "plan.attention",
25
26
  "plan.failed",
26
27
  ]);
@@ -152,6 +153,9 @@ function deriveStatus(coordRoot, events, proposal) {
152
153
  if (latest?.event === "plan.rejected") {
153
154
  return { status: "rejected", work_ids: [], reason: latest.reason };
154
155
  }
156
+ if (latest?.event === "plan.retry_requested") {
157
+ return { status: "retry_requested", work_ids: [], reason: latest.reason };
158
+ }
155
159
  if (latest?.event === "plan.attention") {
156
160
  return { status: "attention", work_ids: [], reason: latest.reason };
157
161
  }
@@ -73,7 +73,7 @@ export interface SupervisorPlanProposal {
73
73
  milestone?: SupervisorPlanMilestone;
74
74
  proposed_at: string;
75
75
  }
76
- export type SupervisorPlanEventType = "plan.awaiting_approval" | "plan.resumed" | "plan.reviewed" | "plan.proposed" | "plan.applied" | "plan.completed" | "plan.rejected" | "plan.attention" | "plan.failed";
76
+ export type SupervisorPlanEventType = "plan.awaiting_approval" | "plan.resumed" | "plan.reviewed" | "plan.proposed" | "plan.applied" | "plan.completed" | "plan.rejected" | "plan.retry_requested" | "plan.attention" | "plan.failed";
77
77
  export type SupervisorPlanReviewStatus = "passed" | "revision_exhausted" | "attention" | "failed";
78
78
  export type SupervisorPlanReviewVerdict = "approve" | "revise" | "attention";
79
79
  export interface SupervisorPlanReviewFinding {
@@ -122,7 +122,7 @@ export interface SupervisorPlanEvent {
122
122
  root_work_id?: string;
123
123
  work_ids?: string[];
124
124
  }
125
- export type SupervisorPlanStatus = "interrupted" | "awaiting_approval" | "resumable" | "proposed" | "applied" | "completed" | "rejected" | "attention" | "failed";
125
+ export type SupervisorPlanStatus = "interrupted" | "awaiting_approval" | "resumable" | "proposed" | "applied" | "completed" | "rejected" | "retry_requested" | "attention" | "failed";
126
126
  export interface SupervisorPlanRecord {
127
127
  request: SupervisorPlanRequest;
128
128
  proposal?: SupervisorPlanProposal;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-types.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-types.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/plan-types.ts"],"names":[],"mappings":"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"}
@@ -23,4 +23,11 @@ export declare function rejectSupervisorPlanProposal(input: {
23
23
  actor: string;
24
24
  reason: string;
25
25
  }): SupervisorPlanOutcome;
26
+ export declare function retrySupervisorPlanProposal(input: {
27
+ coordRoot: string;
28
+ record: SupervisorRecord;
29
+ planId: string;
30
+ actor: string;
31
+ reason: string;
32
+ }): SupervisorPlanOutcome;
26
33
  //# sourceMappingURL=planning.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/planning.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,UAAU,EAOhB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAIL,KAAK,qBAAqB,EAU3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQnD,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CA+LhC;AAuLD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,qBAAqB,CAsHxB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAYxB"}
1
+ {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/planning.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,UAAU,EAQhB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAIL,KAAK,qBAAqB,EAU3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CA+LhC;AAuLD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,qBAAqB,CAsHxB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAYxB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CA4CxB"}
@@ -10,6 +10,7 @@ const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
10
10
  const MAX_RECORD_BYTES = 256 * 1024;
11
11
  const MAX_EVENTS_BYTES = 512 * 1024;
12
12
  const MAX_REASON = 2_000;
13
+ const PROPOSAL_ROOT_RULE = "proposal.root names one newly proposed work key using a root-capable template; it does not preserve or repeat active_root, which is context only";
13
14
  export async function runSupervisorPlanner(input) {
14
15
  const coordRoot = resolve(input.coordRoot);
15
16
  const policy = input.record.intent.replanning;
@@ -401,6 +402,44 @@ export function rejectSupervisorPlanProposal(input) {
401
402
  });
402
403
  return outcome(readSupervisorPlan(input.coordRoot, input.goalId, input.planId));
403
404
  }
405
+ export function retrySupervisorPlanProposal(input) {
406
+ const policy = input.record.intent.replanning;
407
+ if (!policy) {
408
+ throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
409
+ }
410
+ const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
411
+ const history = readSupervisorPlans(input.coordRoot, input.record.intent.id, input.record.intent.root_work_id);
412
+ const latest = history.latest;
413
+ if (!latest || latest.request.id !== input.planId) {
414
+ throw new Error(`supervisor plan ${input.planId} is not the latest plan`);
415
+ }
416
+ const triggerFingerprint = supervisorGraphFingerprint({
417
+ rootWorkId: history.active_root_work_id,
418
+ generation: history.generation,
419
+ work: input.record.work,
420
+ });
421
+ if (latest.request.trigger_fingerprint !== triggerFingerprint ||
422
+ latest.request.prior_root_work_id !== history.active_root_work_id) {
423
+ throw new Error(`supervisor plan ${input.planId} no longer matches the active graph`);
424
+ }
425
+ if (history.completed) {
426
+ throw new Error(`supervisor ${input.record.intent.id} mission is already complete`);
427
+ }
428
+ if (latest.status === "retry_requested")
429
+ return outcome(latest);
430
+ if (latest.status !== "attention") {
431
+ throw new Error(`supervisor plan ${input.planId} cannot be retried from ${latest.status}`);
432
+ }
433
+ if (history.plans.length >= policy.max_replans) {
434
+ throw new Error(`supervisor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`);
435
+ }
436
+ appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
437
+ event: "plan.retry_requested",
438
+ actor: input.actor,
439
+ reason,
440
+ });
441
+ return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.planId));
442
+ }
404
443
  function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trigger) {
405
444
  const policy = record.intent.replanning;
406
445
  if (!policy)
@@ -439,7 +478,7 @@ function plannerScript(coordRoot, record, planId, trigger) {
439
478
  : "Return decision=apply with a replacement immutable root graph, or decision=attention when human judgment is required.",
440
479
  "Never claim mission completion unless the frozen mission acceptance is met. Never request a workflow outside the frozen template catalog.",
441
480
  "Dependencies may name an active work ID or an earlier key in your proposed work array.",
442
- "Every proposed item must be reachable from root. The root must be a proposed key using a root-capable template.",
481
+ `Every proposed item must be reachable from root. ${PROPOSAL_ROOT_RULE}.`,
443
482
  "Work keys are lowercase identifiers no longer than 32 characters. Keep titles within 200 characters, objectives within 4000 characters, and each acceptance criterion within 500 characters.",
444
483
  `Plan id: ${planId}`,
445
484
  `Planning trigger: ${trigger}`,
@@ -484,7 +523,7 @@ function plannerScript(coordRoot, record, planId, trigger) {
484
523
  : null,
485
524
  })))}`,
486
525
  ].join("\n\n");
487
- const schema = planProposalSchema(record);
526
+ const schema = planProposalSchema(record, trigger);
488
527
  return [
489
528
  `export const meta = ${JSON.stringify({ name: `replan-${planId}` })};`,
490
529
  "export default async ({ agent, stage }) => {",
@@ -507,27 +546,35 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
507
546
  const review = policy?.review;
508
547
  if (!policy || !review)
509
548
  throw new Error(`supervisor ${record.intent.id} does not review plans`);
510
- const proposalSchema = planProposalSchema(record);
549
+ const proposalSchema = planProposalSchema(record, trigger);
511
550
  const reviewerSchema = {
512
551
  type: "object",
513
552
  properties: {
514
553
  verdict: { type: "string", enum: ["approve", "revise", "attention"] },
515
- rationale: { type: "string" },
554
+ rationale: { type: "string", minLength: 1, maxLength: MAX_REASON },
516
555
  findings: {
517
556
  type: "array",
557
+ maxItems: 50,
518
558
  items: {
519
559
  type: "object",
520
560
  properties: {
521
- code: { type: "string" },
561
+ code: {
562
+ type: "string",
563
+ minLength: 1,
564
+ maxLength: 100,
565
+ pattern: "^[a-z][a-z0-9._-]*$",
566
+ },
522
567
  severity: { type: "string", enum: ["blocking", "advisory"] },
523
- summary: { type: "string" },
524
- recommendation: { type: "string" },
568
+ summary: { type: "string", minLength: 1, maxLength: 1_000 },
569
+ recommendation: { type: "string", minLength: 1, maxLength: 1_000 },
525
570
  },
526
571
  required: ["code", "severity", "summary", "recommendation"],
572
+ additionalProperties: false,
527
573
  },
528
574
  },
529
575
  },
530
576
  required: ["verdict", "rationale", "findings"],
577
+ additionalProperties: false,
531
578
  };
532
579
  return [
533
580
  `export const meta = ${JSON.stringify({ name: `review-${planId}` })};`,
@@ -544,6 +591,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
544
591
  mission: record.intent.mission ?? null,
545
592
  original_root: record.intent.root_work_id,
546
593
  active_root: record.projection.root_work_id,
594
+ proposal_root_rule: PROPOSAL_ROOT_RULE,
547
595
  templates: policy.templates,
548
596
  })};`,
549
597
  ` let candidate = ${JSON.stringify(initialCandidate)};`,
@@ -561,6 +609,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
561
609
  " 'Review this bounded supervisor plan candidate independently.',",
562
610
  " 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
563
611
  " 'Return revise for blocking defects. Return attention when human judgment is required.',",
612
+ " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
564
613
  " 'Goal context: ' + JSON.stringify(goalContext),",
565
614
  " 'Candidate: ' + JSON.stringify(candidate)",
566
615
  " ].join('\\n\\n');",
@@ -579,6 +628,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
579
628
  " const revisionPrompt = [",
580
629
  " 'Revise this supervisor plan candidate. Return a complete replacement candidate, not a patch.',",
581
630
  " 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
631
+ " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
582
632
  " 'Goal context: ' + JSON.stringify(goalContext),",
583
633
  " 'Current candidate: ' + JSON.stringify(candidate),",
584
634
  " 'Reviewer findings: ' + JSON.stringify(reviewersOut)",
@@ -893,61 +943,96 @@ function hasReviewRecoveryEvidence(coordRoot, goalId, planId) {
893
943
  return (existsSync(reviewReceiptPath(coordRoot, goalId, planId)) ||
894
944
  existsSync(join(coordRoot, ".harnery", "workflows", reviewWorkflowRunId(planId), "proof.json")));
895
945
  }
896
- function planProposalSchema(record) {
946
+ function planProposalSchema(record, trigger) {
897
947
  const policy = record.intent.replanning;
898
948
  if (!policy)
899
949
  throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
900
- return {
950
+ const rationale = { type: "string", minLength: 1, maxLength: MAX_REASON };
951
+ const workItem = {
901
952
  type: "object",
902
953
  properties: {
903
- decision: {
904
- type: "string",
905
- enum: record.intent.mission ? ["apply", "complete", "attention"] : ["apply", "attention"],
954
+ key: { type: "string", pattern: "^[a-z][a-z0-9-]{0,31}$", maxLength: 32 },
955
+ title: { type: "string", minLength: 1, maxLength: 200 },
956
+ objective: { type: "string", minLength: 1, maxLength: 4_000 },
957
+ acceptance: {
958
+ type: "array",
959
+ maxItems: 50,
960
+ items: { type: "string", minLength: 1, maxLength: 500 },
906
961
  },
907
- rationale: { type: "string", minLength: 1, maxLength: MAX_REASON },
908
- root: { type: "string", maxLength: 32 },
909
- work: {
962
+ dependencies: {
910
963
  type: "array",
911
- maxItems: policy.max_work_items_per_plan,
912
- items: {
913
- type: "object",
914
- properties: {
915
- key: { type: "string", pattern: "^[a-z][a-z0-9-]{0,31}$", maxLength: 32 },
916
- title: { type: "string", minLength: 1, maxLength: 200 },
917
- objective: { type: "string", minLength: 1, maxLength: 4_000 },
918
- acceptance: {
919
- type: "array",
920
- maxItems: 50,
921
- items: { type: "string", minLength: 1, maxLength: 500 },
922
- },
923
- dependencies: {
924
- type: "array",
925
- maxItems: 50,
926
- items: { type: "string", minLength: 1, maxLength: 100 },
927
- },
928
- template: { type: "string", enum: Object.keys(policy.templates), maxLength: 64 },
929
- },
930
- required: ["key", "title", "objective", "acceptance", "dependencies", "template"],
931
- },
964
+ maxItems: 50,
965
+ items: { type: "string", minLength: 1, maxLength: 100 },
932
966
  },
933
- milestone: {
934
- type: "object",
935
- properties: {
936
- sequence: { type: "number" },
937
- title: { type: "string", minLength: 1, maxLength: 200 },
938
- objective: { type: "string", minLength: 1, maxLength: 4_000 },
939
- acceptance: {
940
- type: "array",
941
- minItems: 1,
942
- maxItems: 50,
943
- items: { type: "string", minLength: 1, maxLength: 500 },
944
- },
945
- },
946
- required: ["sequence", "title", "objective", "acceptance"],
967
+ template: { type: "string", enum: Object.keys(policy.templates), maxLength: 64 },
968
+ },
969
+ required: ["key", "title", "objective", "acceptance", "dependencies", "template"],
970
+ additionalProperties: false,
971
+ };
972
+ const milestone = {
973
+ type: "object",
974
+ properties: {
975
+ sequence: {
976
+ type: "number",
977
+ enum: [record.projection.milestones_completed + 1],
978
+ },
979
+ title: { type: "string", minLength: 1, maxLength: 200 },
980
+ objective: { type: "string", minLength: 1, maxLength: 4_000 },
981
+ acceptance: {
982
+ type: "array",
983
+ minItems: 1,
984
+ maxItems: 50,
985
+ items: { type: "string", minLength: 1, maxLength: 500 },
947
986
  },
948
987
  },
949
- required: ["decision", "rationale", "root", "work"],
988
+ required: ["sequence", "title", "objective", "acceptance"],
989
+ additionalProperties: false,
990
+ };
991
+ const applyProperties = {
992
+ decision: { type: "string", enum: ["apply"] },
993
+ rationale,
994
+ root: {
995
+ type: "string",
996
+ minLength: 1,
997
+ maxLength: 32,
998
+ pattern: "^[a-z][a-z0-9-]{0,31}$",
999
+ },
1000
+ work: {
1001
+ type: "array",
1002
+ minItems: 1,
1003
+ maxItems: policy.max_work_items_per_plan,
1004
+ items: workItem,
1005
+ },
1006
+ };
1007
+ const applyRequired = ["decision", "rationale", "root", "work"];
1008
+ if (record.intent.mission) {
1009
+ applyProperties.milestone = milestone;
1010
+ applyRequired.push("milestone");
1011
+ }
1012
+ const apply = {
1013
+ type: "object",
1014
+ properties: applyProperties,
1015
+ required: applyRequired,
1016
+ additionalProperties: false,
950
1017
  };
1018
+ const terminal = (decision) => ({
1019
+ type: "object",
1020
+ properties: {
1021
+ decision: { type: "string", enum: [decision] },
1022
+ rationale,
1023
+ root: { type: "string", enum: [""] },
1024
+ work: { type: "array", maxItems: 0 },
1025
+ },
1026
+ required: ["decision", "rationale", "root", "work"],
1027
+ additionalProperties: false,
1028
+ });
1029
+ const branches = [];
1030
+ if (!record.intent.mission || record.projection.milestones_remaining > 0)
1031
+ branches.push(apply);
1032
+ if (record.intent.mission && trigger === "milestone")
1033
+ branches.push(terminal("complete"));
1034
+ branches.push(terminal("attention"));
1035
+ return { type: "object", oneOf: branches };
951
1036
  }
952
1037
  function normalizeProposal(planId, raw, record, previouslyApplied, trigger, preservedProposedAt) {
953
1038
  const policy = record.intent.replanning;
@@ -38,7 +38,7 @@ export interface SupervisorIntent {
38
38
  created_at: string;
39
39
  }
40
40
  export type SupervisorState = "ready" | "running" | "awaiting_attention" | "blocked" | "budget_exhausted" | "succeeded";
41
- export type SupervisorNextAction = "run" | "wait_for_run" | "resolve_approval" | "review" | "retry" | "replan" | "plan_initial" | "plan_milestone" | "review_plan" | "none";
41
+ export type SupervisorNextAction = "run" | "wait_for_run" | "resolve_approval" | "review" | "retry" | "replan" | "plan_initial" | "plan_milestone" | "review_plan" | "retry_plan" | "none";
42
42
  export interface SupervisorProjection {
43
43
  id: string;
44
44
  title: string;
@@ -61,6 +61,7 @@ export interface SupervisorProjection {
61
61
  milestones_completed: number;
62
62
  milestones_remaining: number;
63
63
  pending_plan_id?: string;
64
+ attention_plan_id?: string;
64
65
  latest_plan_status?: SupervisorPlanRecord["status"];
65
66
  governed_work_ids: string[];
66
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/state.ts"],"names":[],"mappings":"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"}
@@ -279,7 +279,10 @@ function deriveProjection(coordRoot, intent, work, governed, plans, ignoreLease)
279
279
  ...base,
280
280
  state: "awaiting_attention",
281
281
  reason: plans.latest.reason ?? `plan ${plans.latest.request.id} requires attention`,
282
- next_action: "none",
282
+ attention_plan_id: plans.latest.request.id,
283
+ next_action: intent.replanning && plans.plans.length < intent.replanning.max_replans
284
+ ? "retry_plan"
285
+ : "none",
283
286
  };
284
287
  }
285
288
  if (!root && intent.mission) {
@@ -169,9 +169,12 @@ export interface HarnessEvidenceCapability {
169
169
  /** JSON-schema *subset* accepted by stage gates (see validate.ts). */
170
170
  export interface StageSchema {
171
171
  type: "object" | "array" | "string" | "number" | "boolean";
172
+ /** Exact-one branch selection, evaluated before the base schema. */
173
+ oneOf?: StageSchema[];
172
174
  /** type=object */
173
175
  properties?: Record<string, StageSchema>;
174
176
  required?: string[];
177
+ additionalProperties?: boolean;
175
178
  /** type=array */
176
179
  items?: StageSchema;
177
180
  minItems?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Minimal validator for the StageSchema JSON-schema subset. Deliberately tiny:
3
3
  * a full JSON Schema implementation would pull a dependency (ajv) for
4
- * validation depth workflow gates don't need. Supported: type, properties,
5
- * required, items, minItems/maxItems, minLength/maxLength, pattern, and enum.
4
+ * validation depth workflow gates don't need. Supported: type, oneOf,
5
+ * properties, required, additionalProperties, items, minItems/maxItems,
6
+ * minLength/maxLength, pattern, and enum.
6
7
  * Returns a list of human-readable problems (empty = valid) so the engine can
7
8
  * feed failures back into the retry prompt verbatim.
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CA4E/F;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUlF"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAmG/F;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUlF"}
@@ -1,13 +1,27 @@
1
1
  /**
2
2
  * Minimal validator for the StageSchema JSON-schema subset. Deliberately tiny:
3
3
  * a full JSON Schema implementation would pull a dependency (ajv) for
4
- * validation depth workflow gates don't need. Supported: type, properties,
5
- * required, items, minItems/maxItems, minLength/maxLength, pattern, and enum.
4
+ * validation depth workflow gates don't need. Supported: type, oneOf,
5
+ * properties, required, additionalProperties, items, minItems/maxItems,
6
+ * minLength/maxLength, pattern, and enum.
6
7
  * Returns a list of human-readable problems (empty = valid) so the engine can
7
8
  * feed failures back into the retry prompt verbatim.
8
9
  */
9
10
  export function validateAgainstSchema(value, schema, path = "$") {
10
11
  const problems = [];
12
+ if (schema.oneOf) {
13
+ const branches = schema.oneOf.map((branch) => validateAgainstSchema(value, branch, path));
14
+ const matches = branches.filter((branch) => branch.length === 0).length;
15
+ if (matches !== 1) {
16
+ if (matches > 1) {
17
+ return [`${path}: expected exactly one schema option to match, got ${matches}`];
18
+ }
19
+ return [
20
+ `${path}: expected exactly one schema option to match`,
21
+ ...branches.map((branch, index) => `${path}: option ${index + 1}: ${branch.slice(0, 4).join("; ") || "did not match"}`),
22
+ ];
23
+ }
24
+ }
11
25
  if (schema.enum) {
12
26
  if (!schema.enum.some((v) => v === value)) {
13
27
  problems.push(`${path}: expected one of ${JSON.stringify(schema.enum)}, got ${short(value)}`);
@@ -28,6 +42,13 @@ export function validateAgainstSchema(value, schema, path = "$") {
28
42
  if (key in obj)
29
43
  problems.push(...validateAgainstSchema(obj[key], sub, `${path}.${key}`));
30
44
  }
45
+ if (schema.additionalProperties === false) {
46
+ const allowed = new Set(Object.keys(schema.properties ?? {}));
47
+ for (const key of Object.keys(obj)) {
48
+ if (!allowed.has(key))
49
+ problems.push(`${path}.${key}: unexpected property`);
50
+ }
51
+ }
31
52
  return problems;
32
53
  }
33
54
  case "array": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harnery",
3
- "version": "0.19.0",
3
+ "version": "0.20.0",
4
4
  "description": "Multi-agent coordination for AI coding agents - Claude Code, Cursor, and Codex.",
5
5
  "license": "MIT",
6
6
  "author": "Ryan Kelly",
@@ -20,6 +20,7 @@ import {
20
20
  readSupervisorServiceStatus,
21
21
  rejectSupervisorPlan,
22
22
  requestSupervisorServiceStop,
23
+ retrySupervisorPlan,
23
24
  runSupervisor,
24
25
  runSupervisorServiceDaemon,
25
26
  type SupervisorPlanOutcome,
@@ -256,6 +257,34 @@ function registerPlanCommand(supervisor: Command, emit: EmitContext): void {
256
257
  });
257
258
  },
258
259
  );
260
+
261
+ plan
262
+ .command("retry <goal-id> <plan-id>")
263
+ .description("Attach bounded guidance and authorize a new attempt after plan attention.")
264
+ .requiredOption("--reason <text>", "Guidance for the next planner attempt")
265
+ .option("--actor <name>", "Actor recorded on the retry request")
266
+ .option("--json", "Emit the plan outcome as JSON")
267
+ .action(
268
+ (
269
+ goalId: string,
270
+ planId: string,
271
+ opts: { actor?: string; reason: string; json?: boolean },
272
+ ) => {
273
+ withSupervisorRoot(emit, (coordRoot) => {
274
+ emitPlanOutcome(
275
+ retrySupervisorPlan({
276
+ coordRoot,
277
+ goalId,
278
+ planId,
279
+ actor: opts.actor,
280
+ reason: opts.reason,
281
+ }),
282
+ opts.json,
283
+ emit,
284
+ );
285
+ });
286
+ },
287
+ );
259
288
  }
260
289
 
261
290
  function registerServiceCommand(
@@ -723,6 +752,9 @@ function emitSupervisor(
723
752
  lines.push(`original root: ${record.intent.root_work_id}`);
724
753
  }
725
754
  if (projection.pending_plan_id) lines.push(`pending plan: ${projection.pending_plan_id}`);
755
+ if (projection.attention_plan_id) {
756
+ lines.push(`attention plan: ${projection.attention_plan_id}`);
757
+ }
726
758
  }
727
759
  if (record.intent.mission) {
728
760
  lines.push(`mission: ${record.intent.mission.objective}`);
@@ -1,4 +1,8 @@
1
- export { approveSupervisorPlan, rejectSupervisorPlan } from "./plan-api.ts";
1
+ export {
2
+ approveSupervisorPlan,
3
+ rejectSupervisorPlan,
4
+ retrySupervisorPlan,
5
+ } from "./plan-api.ts";
2
6
  export {
3
7
  readSupervisorPlan,
4
8
  readSupervisorPlanReviewReceipt,
@@ -1,5 +1,9 @@
1
1
  import type { SupervisorPlanOutcome } from "./plan-types.ts";
2
- import { applySupervisorPlanProposal, rejectSupervisorPlanProposal } from "./planning.ts";
2
+ import {
3
+ applySupervisorPlanProposal,
4
+ rejectSupervisorPlanProposal,
5
+ retrySupervisorPlanProposal,
6
+ } from "./planning.ts";
3
7
  import { acquireSupervisorLease, readSupervisorIgnoringLease } from "./state.ts";
4
8
 
5
9
  export function approveSupervisorPlan(input: {
@@ -45,3 +49,25 @@ export function rejectSupervisorPlan(input: {
45
49
  release();
46
50
  }
47
51
  }
52
+
53
+ export function retrySupervisorPlan(input: {
54
+ coordRoot: string;
55
+ goalId: string;
56
+ planId: string;
57
+ actor?: string;
58
+ reason: string;
59
+ }): SupervisorPlanOutcome {
60
+ const actor = input.actor?.trim() || `supervisor:${input.goalId}`;
61
+ const release = acquireSupervisorLease(input.coordRoot, input.goalId);
62
+ try {
63
+ return retrySupervisorPlanProposal({
64
+ coordRoot: input.coordRoot,
65
+ record: readSupervisorIgnoringLease(input.coordRoot, input.goalId),
66
+ planId: input.planId,
67
+ actor,
68
+ reason: input.reason,
69
+ });
70
+ } finally {
71
+ release();
72
+ }
73
+ }
@@ -39,6 +39,7 @@ const EVENT_TYPES = new Set<SupervisorPlanEventType>([
39
39
  "plan.applied",
40
40
  "plan.completed",
41
41
  "plan.rejected",
42
+ "plan.retry_requested",
42
43
  "plan.attention",
43
44
  "plan.failed",
44
45
  ]);
@@ -188,6 +189,9 @@ function deriveStatus(
188
189
  if (latest?.event === "plan.rejected") {
189
190
  return { status: "rejected", work_ids: [], reason: latest.reason };
190
191
  }
192
+ if (latest?.event === "plan.retry_requested") {
193
+ return { status: "retry_requested", work_ids: [], reason: latest.reason };
194
+ }
191
195
  if (latest?.event === "plan.attention") {
192
196
  return { status: "attention", work_ids: [], reason: latest.reason };
193
197
  }
@@ -87,6 +87,7 @@ export type SupervisorPlanEventType =
87
87
  | "plan.applied"
88
88
  | "plan.completed"
89
89
  | "plan.rejected"
90
+ | "plan.retry_requested"
90
91
  | "plan.attention"
91
92
  | "plan.failed";
92
93
 
@@ -154,6 +155,7 @@ export type SupervisorPlanStatus =
154
155
  | "applied"
155
156
  | "completed"
156
157
  | "rejected"
158
+ | "retry_requested"
157
159
  | "attention"
158
160
  | "failed";
159
161
 
@@ -18,6 +18,7 @@ import {
18
18
  type ResultDigest,
19
19
  readWorkflowProof,
20
20
  runWorkflow,
21
+ type StageSchema,
21
22
  WorkflowParkedError,
22
23
  type WorkflowProof,
23
24
  workflowScriptDigest,
@@ -49,6 +50,8 @@ const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
49
50
  const MAX_RECORD_BYTES = 256 * 1024;
50
51
  const MAX_EVENTS_BYTES = 512 * 1024;
51
52
  const MAX_REASON = 2_000;
53
+ const PROPOSAL_ROOT_RULE =
54
+ "proposal.root names one newly proposed work key using a root-capable template; it does not preserve or repeat active_root, which is context only";
52
55
 
53
56
  export interface RunSupervisorPlannerInput {
54
57
  coordRoot: string;
@@ -580,6 +583,58 @@ export function rejectSupervisorPlanProposal(input: {
580
583
  return outcome(readSupervisorPlan(input.coordRoot, input.goalId, input.planId));
581
584
  }
582
585
 
586
+ export function retrySupervisorPlanProposal(input: {
587
+ coordRoot: string;
588
+ record: SupervisorRecord;
589
+ planId: string;
590
+ actor: string;
591
+ reason: string;
592
+ }): SupervisorPlanOutcome {
593
+ const policy = input.record.intent.replanning;
594
+ if (!policy) {
595
+ throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
596
+ }
597
+ const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
598
+ const history = readSupervisorPlans(
599
+ input.coordRoot,
600
+ input.record.intent.id,
601
+ input.record.intent.root_work_id,
602
+ );
603
+ const latest = history.latest;
604
+ if (!latest || latest.request.id !== input.planId) {
605
+ throw new Error(`supervisor plan ${input.planId} is not the latest plan`);
606
+ }
607
+ const triggerFingerprint = supervisorGraphFingerprint({
608
+ rootWorkId: history.active_root_work_id,
609
+ generation: history.generation,
610
+ work: input.record.work,
611
+ });
612
+ if (
613
+ latest.request.trigger_fingerprint !== triggerFingerprint ||
614
+ latest.request.prior_root_work_id !== history.active_root_work_id
615
+ ) {
616
+ throw new Error(`supervisor plan ${input.planId} no longer matches the active graph`);
617
+ }
618
+ if (history.completed) {
619
+ throw new Error(`supervisor ${input.record.intent.id} mission is already complete`);
620
+ }
621
+ if (latest.status === "retry_requested") return outcome(latest);
622
+ if (latest.status !== "attention") {
623
+ throw new Error(`supervisor plan ${input.planId} cannot be retried from ${latest.status}`);
624
+ }
625
+ if (history.plans.length >= policy.max_replans) {
626
+ throw new Error(
627
+ `supervisor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`,
628
+ );
629
+ }
630
+ appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
631
+ event: "plan.retry_requested",
632
+ actor: input.actor,
633
+ reason,
634
+ });
635
+ return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.planId));
636
+ }
637
+
583
638
  function createPlanRequest(
584
639
  coordRoot: string,
585
640
  record: SupervisorRecord,
@@ -628,7 +683,7 @@ function plannerScript(
628
683
  : "Return decision=apply with a replacement immutable root graph, or decision=attention when human judgment is required.",
629
684
  "Never claim mission completion unless the frozen mission acceptance is met. Never request a workflow outside the frozen template catalog.",
630
685
  "Dependencies may name an active work ID or an earlier key in your proposed work array.",
631
- "Every proposed item must be reachable from root. The root must be a proposed key using a root-capable template.",
686
+ `Every proposed item must be reachable from root. ${PROPOSAL_ROOT_RULE}.`,
632
687
  "Work keys are lowercase identifiers no longer than 32 characters. Keep titles within 200 characters, objectives within 4000 characters, and each acceptance criterion within 500 characters.",
633
688
  `Plan id: ${planId}`,
634
689
  `Planning trigger: ${trigger}`,
@@ -677,7 +732,7 @@ function plannerScript(
677
732
  })),
678
733
  )}`,
679
734
  ].join("\n\n");
680
- const schema = planProposalSchema(record);
735
+ const schema = planProposalSchema(record, trigger);
681
736
  return [
682
737
  `export const meta = ${JSON.stringify({ name: `replan-${planId}` })};`,
683
738
  "export default async ({ agent, stage }) => {",
@@ -707,27 +762,35 @@ function plannerReviewScript(
707
762
  const policy = record.intent.replanning;
708
763
  const review = policy?.review;
709
764
  if (!policy || !review) throw new Error(`supervisor ${record.intent.id} does not review plans`);
710
- const proposalSchema = planProposalSchema(record);
711
- const reviewerSchema = {
765
+ const proposalSchema = planProposalSchema(record, trigger);
766
+ const reviewerSchema: StageSchema = {
712
767
  type: "object",
713
768
  properties: {
714
769
  verdict: { type: "string", enum: ["approve", "revise", "attention"] },
715
- rationale: { type: "string" },
770
+ rationale: { type: "string", minLength: 1, maxLength: MAX_REASON },
716
771
  findings: {
717
772
  type: "array",
773
+ maxItems: 50,
718
774
  items: {
719
775
  type: "object",
720
776
  properties: {
721
- code: { type: "string" },
777
+ code: {
778
+ type: "string",
779
+ minLength: 1,
780
+ maxLength: 100,
781
+ pattern: "^[a-z][a-z0-9._-]*$",
782
+ },
722
783
  severity: { type: "string", enum: ["blocking", "advisory"] },
723
- summary: { type: "string" },
724
- recommendation: { type: "string" },
784
+ summary: { type: "string", minLength: 1, maxLength: 1_000 },
785
+ recommendation: { type: "string", minLength: 1, maxLength: 1_000 },
725
786
  },
726
787
  required: ["code", "severity", "summary", "recommendation"],
788
+ additionalProperties: false,
727
789
  },
728
790
  },
729
791
  },
730
792
  required: ["verdict", "rationale", "findings"],
793
+ additionalProperties: false,
731
794
  };
732
795
  return [
733
796
  `export const meta = ${JSON.stringify({ name: `review-${planId}` })};`,
@@ -744,6 +807,7 @@ function plannerReviewScript(
744
807
  mission: record.intent.mission ?? null,
745
808
  original_root: record.intent.root_work_id,
746
809
  active_root: record.projection.root_work_id,
810
+ proposal_root_rule: PROPOSAL_ROOT_RULE,
747
811
  templates: policy.templates,
748
812
  })};`,
749
813
  ` let candidate = ${JSON.stringify(initialCandidate)};`,
@@ -761,6 +825,7 @@ function plannerReviewScript(
761
825
  " 'Review this bounded supervisor plan candidate independently.',",
762
826
  " 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
763
827
  " 'Return revise for blocking defects. Return attention when human judgment is required.',",
828
+ " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
764
829
  " 'Goal context: ' + JSON.stringify(goalContext),",
765
830
  " 'Candidate: ' + JSON.stringify(candidate)",
766
831
  " ].join('\\n\\n');",
@@ -779,6 +844,7 @@ function plannerReviewScript(
779
844
  " const revisionPrompt = [",
780
845
  " 'Revise this supervisor plan candidate. Return a complete replacement candidate, not a patch.',",
781
846
  " 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
847
+ " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
782
848
  " 'Goal context: ' + JSON.stringify(goalContext),",
783
849
  " 'Current candidate: ' + JSON.stringify(candidate),",
784
850
  " 'Reviewer findings: ' + JSON.stringify(reviewersOut)",
@@ -1163,60 +1229,96 @@ function hasReviewRecoveryEvidence(coordRoot: string, goalId: string, planId: st
1163
1229
  );
1164
1230
  }
1165
1231
 
1166
- function planProposalSchema(record: SupervisorRecord): Record<string, unknown> {
1232
+ function planProposalSchema(
1233
+ record: SupervisorRecord,
1234
+ trigger: NonNullable<SupervisorPlanRequest["trigger"]>,
1235
+ ): StageSchema {
1167
1236
  const policy = record.intent.replanning;
1168
1237
  if (!policy) throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
1169
- return {
1238
+ const rationale: StageSchema = { type: "string", minLength: 1, maxLength: MAX_REASON };
1239
+ const workItem: StageSchema = {
1170
1240
  type: "object",
1171
1241
  properties: {
1172
- decision: {
1173
- type: "string",
1174
- enum: record.intent.mission ? ["apply", "complete", "attention"] : ["apply", "attention"],
1242
+ key: { type: "string", pattern: "^[a-z][a-z0-9-]{0,31}$", maxLength: 32 },
1243
+ title: { type: "string", minLength: 1, maxLength: 200 },
1244
+ objective: { type: "string", minLength: 1, maxLength: 4_000 },
1245
+ acceptance: {
1246
+ type: "array",
1247
+ maxItems: 50,
1248
+ items: { type: "string", minLength: 1, maxLength: 500 },
1175
1249
  },
1176
- rationale: { type: "string", minLength: 1, maxLength: MAX_REASON },
1177
- root: { type: "string", maxLength: 32 },
1178
- work: {
1250
+ dependencies: {
1179
1251
  type: "array",
1180
- maxItems: policy.max_work_items_per_plan,
1181
- items: {
1182
- type: "object",
1183
- properties: {
1184
- key: { type: "string", pattern: "^[a-z][a-z0-9-]{0,31}$", maxLength: 32 },
1185
- title: { type: "string", minLength: 1, maxLength: 200 },
1186
- objective: { type: "string", minLength: 1, maxLength: 4_000 },
1187
- acceptance: {
1188
- type: "array",
1189
- maxItems: 50,
1190
- items: { type: "string", minLength: 1, maxLength: 500 },
1191
- },
1192
- dependencies: {
1193
- type: "array",
1194
- maxItems: 50,
1195
- items: { type: "string", minLength: 1, maxLength: 100 },
1196
- },
1197
- template: { type: "string", enum: Object.keys(policy.templates), maxLength: 64 },
1198
- },
1199
- required: ["key", "title", "objective", "acceptance", "dependencies", "template"],
1200
- },
1252
+ maxItems: 50,
1253
+ items: { type: "string", minLength: 1, maxLength: 100 },
1201
1254
  },
1202
- milestone: {
1203
- type: "object",
1204
- properties: {
1205
- sequence: { type: "number" },
1206
- title: { type: "string", minLength: 1, maxLength: 200 },
1207
- objective: { type: "string", minLength: 1, maxLength: 4_000 },
1208
- acceptance: {
1209
- type: "array",
1210
- minItems: 1,
1211
- maxItems: 50,
1212
- items: { type: "string", minLength: 1, maxLength: 500 },
1213
- },
1214
- },
1215
- required: ["sequence", "title", "objective", "acceptance"],
1255
+ template: { type: "string", enum: Object.keys(policy.templates), maxLength: 64 },
1256
+ },
1257
+ required: ["key", "title", "objective", "acceptance", "dependencies", "template"],
1258
+ additionalProperties: false,
1259
+ };
1260
+ const milestone: StageSchema = {
1261
+ type: "object",
1262
+ properties: {
1263
+ sequence: {
1264
+ type: "number",
1265
+ enum: [record.projection.milestones_completed + 1],
1266
+ },
1267
+ title: { type: "string", minLength: 1, maxLength: 200 },
1268
+ objective: { type: "string", minLength: 1, maxLength: 4_000 },
1269
+ acceptance: {
1270
+ type: "array",
1271
+ minItems: 1,
1272
+ maxItems: 50,
1273
+ items: { type: "string", minLength: 1, maxLength: 500 },
1216
1274
  },
1217
1275
  },
1218
- required: ["decision", "rationale", "root", "work"],
1276
+ required: ["sequence", "title", "objective", "acceptance"],
1277
+ additionalProperties: false,
1278
+ };
1279
+ const applyProperties: Record<string, StageSchema> = {
1280
+ decision: { type: "string", enum: ["apply"] },
1281
+ rationale,
1282
+ root: {
1283
+ type: "string",
1284
+ minLength: 1,
1285
+ maxLength: 32,
1286
+ pattern: "^[a-z][a-z0-9-]{0,31}$",
1287
+ },
1288
+ work: {
1289
+ type: "array",
1290
+ minItems: 1,
1291
+ maxItems: policy.max_work_items_per_plan,
1292
+ items: workItem,
1293
+ },
1294
+ };
1295
+ const applyRequired = ["decision", "rationale", "root", "work"];
1296
+ if (record.intent.mission) {
1297
+ applyProperties.milestone = milestone;
1298
+ applyRequired.push("milestone");
1299
+ }
1300
+ const apply: StageSchema = {
1301
+ type: "object",
1302
+ properties: applyProperties,
1303
+ required: applyRequired,
1304
+ additionalProperties: false,
1219
1305
  };
1306
+ const terminal = (decision: "complete" | "attention"): StageSchema => ({
1307
+ type: "object",
1308
+ properties: {
1309
+ decision: { type: "string", enum: [decision] },
1310
+ rationale,
1311
+ root: { type: "string", enum: [""] },
1312
+ work: { type: "array", maxItems: 0 },
1313
+ },
1314
+ required: ["decision", "rationale", "root", "work"],
1315
+ additionalProperties: false,
1316
+ });
1317
+ const branches: StageSchema[] = [];
1318
+ if (!record.intent.mission || record.projection.milestones_remaining > 0) branches.push(apply);
1319
+ if (record.intent.mission && trigger === "milestone") branches.push(terminal("complete"));
1320
+ branches.push(terminal("attention"));
1321
+ return { type: "object", oneOf: branches };
1220
1322
  }
1221
1323
 
1222
1324
  function normalizeProposal(
@@ -97,6 +97,7 @@ export type SupervisorNextAction =
97
97
  | "plan_initial"
98
98
  | "plan_milestone"
99
99
  | "review_plan"
100
+ | "retry_plan"
100
101
  | "none";
101
102
 
102
103
  export interface SupervisorProjection {
@@ -121,6 +122,7 @@ export interface SupervisorProjection {
121
122
  milestones_completed: number;
122
123
  milestones_remaining: number;
123
124
  pending_plan_id?: string;
125
+ attention_plan_id?: string;
124
126
  latest_plan_status?: SupervisorPlanRecord["status"];
125
127
  governed_work_ids: string[];
126
128
  }
@@ -445,7 +447,11 @@ function deriveProjection(
445
447
  ...base,
446
448
  state: "awaiting_attention",
447
449
  reason: plans.latest.reason ?? `plan ${plans.latest.request.id} requires attention`,
448
- next_action: "none",
450
+ attention_plan_id: plans.latest.request.id,
451
+ next_action:
452
+ intent.replanning && plans.plans.length < intent.replanning.max_replans
453
+ ? "retry_plan"
454
+ : "none",
449
455
  };
450
456
  }
451
457
  if (!root && intent.mission) {
@@ -201,9 +201,12 @@ export interface HarnessEvidenceCapability {
201
201
  /** JSON-schema *subset* accepted by stage gates (see validate.ts). */
202
202
  export interface StageSchema {
203
203
  type: "object" | "array" | "string" | "number" | "boolean";
204
+ /** Exact-one branch selection, evaluated before the base schema. */
205
+ oneOf?: StageSchema[];
204
206
  /** type=object */
205
207
  properties?: Record<string, StageSchema>;
206
208
  required?: string[];
209
+ additionalProperties?: boolean;
207
210
  /** type=array */
208
211
  items?: StageSchema;
209
212
  minItems?: number;
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Minimal validator for the StageSchema JSON-schema subset. Deliberately tiny:
3
3
  * a full JSON Schema implementation would pull a dependency (ajv) for
4
- * validation depth workflow gates don't need. Supported: type, properties,
5
- * required, items, minItems/maxItems, minLength/maxLength, pattern, and enum.
4
+ * validation depth workflow gates don't need. Supported: type, oneOf,
5
+ * properties, required, additionalProperties, items, minItems/maxItems,
6
+ * minLength/maxLength, pattern, and enum.
6
7
  * Returns a list of human-readable problems (empty = valid) so the engine can
7
8
  * feed failures back into the retry prompt verbatim.
8
9
  */
@@ -12,6 +13,23 @@ import type { StageSchema } from "./types.ts";
12
13
  export function validateAgainstSchema(value: unknown, schema: StageSchema, path = "$"): string[] {
13
14
  const problems: string[] = [];
14
15
 
16
+ if (schema.oneOf) {
17
+ const branches = schema.oneOf.map((branch) => validateAgainstSchema(value, branch, path));
18
+ const matches = branches.filter((branch) => branch.length === 0).length;
19
+ if (matches !== 1) {
20
+ if (matches > 1) {
21
+ return [`${path}: expected exactly one schema option to match, got ${matches}`];
22
+ }
23
+ return [
24
+ `${path}: expected exactly one schema option to match`,
25
+ ...branches.map(
26
+ (branch, index) =>
27
+ `${path}: option ${index + 1}: ${branch.slice(0, 4).join("; ") || "did not match"}`,
28
+ ),
29
+ ];
30
+ }
31
+ }
32
+
15
33
  if (schema.enum) {
16
34
  if (!schema.enum.some((v) => v === value)) {
17
35
  problems.push(`${path}: expected one of ${JSON.stringify(schema.enum)}, got ${short(value)}`);
@@ -31,6 +49,12 @@ export function validateAgainstSchema(value: unknown, schema: StageSchema, path
31
49
  for (const [key, sub] of Object.entries(schema.properties ?? {})) {
32
50
  if (key in obj) problems.push(...validateAgainstSchema(obj[key], sub, `${path}.${key}`));
33
51
  }
52
+ if (schema.additionalProperties === false) {
53
+ const allowed = new Set(Object.keys(schema.properties ?? {}));
54
+ for (const key of Object.keys(obj)) {
55
+ if (!allowed.has(key)) problems.push(`${path}.${key}: unexpected property`);
56
+ }
57
+ }
34
58
  return problems;
35
59
  }
36
60
  case "array": {