omp-conductor 0.17.0 → 0.18.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 (51) hide show
  1. package/REFERENCE.md +12 -8
  2. package/package.json +1 -1
  3. package/schema/config.schema.json +40 -1
  4. package/src/admission.ts +263 -44
  5. package/src/ask.ts +39 -3
  6. package/src/availability.ts +27 -1
  7. package/src/backups.ts +2 -2
  8. package/src/briefs/orchestrator.md +1 -0
  9. package/src/briefs/worker.md +38 -19
  10. package/src/command-help.ts +8 -1
  11. package/src/command-manifest.ts +5 -2
  12. package/src/commands/arm.ts +6 -3
  13. package/src/commands/message.ts +32 -4
  14. package/src/commands/watch.ts +62 -3
  15. package/src/config-schema.ts +53 -0
  16. package/src/config.ts +97 -1
  17. package/src/daemon.ts +1479 -1483
  18. package/src/decisions.ts +51 -6
  19. package/src/depends-on.ts +261 -1
  20. package/src/diff-flags.ts +350 -0
  21. package/src/digest-schedule.ts +37 -0
  22. package/src/doctor.ts +310 -22
  23. package/src/escalate.ts +560 -57
  24. package/src/failure-class.ts +71 -15
  25. package/src/fleet.ts +189 -34
  26. package/src/gitops.ts +103 -24
  27. package/src/graph-health.ts +20 -7
  28. package/src/graph.ts +313 -68
  29. package/src/lifecycle.ts +43 -7
  30. package/src/omp.ts +42 -0
  31. package/src/orchestrator-tick.ts +430 -162
  32. package/src/release-policy.ts +177 -5
  33. package/src/routing.ts +11 -3
  34. package/src/session-host.ts +16 -0
  35. package/src/settlement.ts +1728 -0
  36. package/src/setup-host.ts +193 -4
  37. package/src/setup-install.ts +91 -30
  38. package/src/setup-wizard.ts +1257 -78
  39. package/src/setup.ts +153 -6
  40. package/src/status-render.ts +36 -4
  41. package/src/store.ts +411 -17
  42. package/src/tracker/github.ts +607 -12
  43. package/src/types.ts +331 -5
  44. package/src/upgrade.ts +50 -19
  45. package/src/verbs/actions.ts +66 -18
  46. package/src/verbs/protocol.ts +45 -0
  47. package/src/verbs/server.ts +270 -13
  48. package/src/worker.ts +239 -6
  49. package/src/worktree.ts +115 -8
  50. package/systemd/omp-conductor-recover.sh +73 -0
  51. package/systemd/recover-unit-test.sh +61 -0
package/src/omp.ts CHANGED
@@ -197,6 +197,24 @@ export async function createLocalSession(opts: {
197
197
  * session has no route to a mutation to scope in the first place.
198
198
  */
199
199
  readOnly?: boolean;
200
+ /**
201
+ * The structured-settlement contract (#540): a JSON Schema the session's
202
+ * `yield` tool validates its `data` payload against. The worker yields its
203
+ * settlement as structured output instead of writing prose for the caller to
204
+ * regex. A subagent-oriented harness option, forwarded as-is.
205
+ */
206
+ outputSchema?: unknown;
207
+ /**
208
+ * Enforcement policy for {@link outputSchema}. The worker contract is
209
+ * `"permissive"`: a schema violation must still settle with whatever the
210
+ * worker produced, never discard the report.
211
+ */
212
+ outputSchemaMode?: "permissive" | "strict";
213
+ /**
214
+ * Force the hidden `yield` tool into this session's toolset (#540). Without
215
+ * it the model has no sanctioned way to submit structured output.
216
+ */
217
+ requireYieldTool?: boolean;
200
218
  }): Promise<AgentSessionLike> {
201
219
  let loaded: unknown;
202
220
  try {
@@ -290,6 +308,13 @@ export async function createLocalSession(opts: {
290
308
  // agentDir (~/.omp/agent/mcp.json) — without this, workers grep-only and
291
309
  // burn the turns cap on discovery (#29).
292
310
  enableMCP: true,
311
+ // The structured-settlement contract (#540): subagent-oriented options
312
+ // threaded to the harness so the worker can yield its report as a schema-
313
+ // validated object instead of prose. Absent for every other session kind —
314
+ // probes and orchestrator sessions never yield.
315
+ ...(opts.outputSchema === undefined ? {} : { outputSchema: opts.outputSchema }),
316
+ ...(opts.outputSchemaMode === undefined ? {} : { outputSchemaMode: opts.outputSchemaMode }),
317
+ ...(opts.requireYieldTool === undefined ? {} : { requireYieldTool: opts.requireYieldTool }),
293
318
  // Mechanical tool gates: confinement prevents structured worktree I/O from
294
319
  // escaping cwd; release policy blocks release/deploy calls when configured.
295
320
  ...(extensions.length === 0 ? {} : { extensions }),
@@ -515,6 +540,20 @@ export interface CreateSessionOptions {
515
540
  * gate — actually lives.
516
541
  */
517
542
  readOnly?: boolean;
543
+ /**
544
+ * The structured-settlement contract (#540): a JSON Schema the session's
545
+ * `yield` tool validates its `data` payload against. Forwarded to the child
546
+ * through the host spec, exactly like {@link ompSettingsFile}.
547
+ */
548
+ outputSchema?: unknown;
549
+ /**
550
+ * Enforcement policy for {@link outputSchema} — the worker contract is
551
+ * `"permissive"`, so a schema violation settles with whatever the worker
552
+ * produced instead of losing the report.
553
+ */
554
+ outputSchemaMode?: "permissive" | "strict";
555
+ /** Force the hidden `yield` tool into this session's toolset (#540). */
556
+ requireYieldTool?: boolean;
518
557
  }
519
558
 
520
559
  /**
@@ -601,6 +640,9 @@ export async function createSession(opts: CreateSessionOptions): Promise<AgentSe
601
640
  ...(opts.verbSocketPath === undefined ? {} : { verbSocketPath: opts.verbSocketPath }),
602
641
  ...(opts.readOnly === undefined ? {} : { readOnly: opts.readOnly }),
603
642
  ...(opts.ompSettingsFile === undefined ? {} : { ompSettingsFile: opts.ompSettingsFile }),
643
+ ...(opts.outputSchema === undefined ? {} : { outputSchema: opts.outputSchema }),
644
+ ...(opts.outputSchemaMode === undefined ? {} : { outputSchemaMode: opts.outputSchemaMode }),
645
+ ...(opts.requireYieldTool === undefined ? {} : { requireYieldTool: opts.requireYieldTool }),
604
646
  };
605
647
 
606
648
  const log = opts.onChildLog ?? ((line: string) => process.stderr.write(`${line}\n`));