@shapeshift-labs/frontier-swarm 0.1.0 → 0.3.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.
package/dist/index.d.ts CHANGED
@@ -9,8 +9,28 @@ export declare const FRONTIER_SWARM_RUN_KIND = "frontier.swarm.run";
9
9
  export declare const FRONTIER_SWARM_RUN_VERSION = 1;
10
10
  export declare const FRONTIER_SWARM_EVENT_KIND = "frontier.swarm.event";
11
11
  export declare const FRONTIER_SWARM_EVENT_VERSION = 1;
12
+ export declare const FRONTIER_SWARM_EVENT_STREAM_KIND = "frontier.swarm.event-stream";
13
+ export declare const FRONTIER_SWARM_EVENT_STREAM_VERSION = 1;
14
+ export declare const FRONTIER_SWARM_MAILBOX_KIND = "frontier.swarm.mailbox";
15
+ export declare const FRONTIER_SWARM_MAILBOX_VERSION = 1;
12
16
  export declare const FRONTIER_SWARM_PROOF_KIND = "frontier.swarm.proof";
13
17
  export declare const FRONTIER_SWARM_PROOF_VERSION = 1;
18
+ export declare const FRONTIER_SWARM_SCHEDULE_KIND = "frontier.swarm.schedule";
19
+ export declare const FRONTIER_SWARM_SCHEDULE_VERSION = 1;
20
+ export declare const FRONTIER_SWARM_LEASE_KIND = "frontier.swarm.lease";
21
+ export declare const FRONTIER_SWARM_LEASE_VERSION = 1;
22
+ export declare const FRONTIER_SWARM_QUEUE_SNAPSHOT_KIND = "frontier.swarm.queue-snapshot";
23
+ export declare const FRONTIER_SWARM_QUEUE_SNAPSHOT_VERSION = 1;
24
+ export declare const FRONTIER_SWARM_RUN_CHECKPOINT_KIND = "frontier.swarm.run-checkpoint";
25
+ export declare const FRONTIER_SWARM_RUN_CHECKPOINT_VERSION = 1;
26
+ export declare const FRONTIER_SWARM_ARTIFACT_INDEX_KIND = "frontier.swarm.artifact-index";
27
+ export declare const FRONTIER_SWARM_ARTIFACT_INDEX_VERSION = 1;
28
+ export declare const FRONTIER_SWARM_REVIEW_PLAN_KIND = "frontier.swarm.review-plan";
29
+ export declare const FRONTIER_SWARM_REVIEW_PLAN_VERSION = 1;
30
+ export declare const FRONTIER_SWARM_MERGE_PLAN_KIND = "frontier.swarm.merge-plan";
31
+ export declare const FRONTIER_SWARM_MERGE_PLAN_VERSION = 1;
32
+ export declare const FRONTIER_SWARM_MERGE_BUNDLE_KIND = "frontier.swarm.merge-bundle";
33
+ export declare const FRONTIER_SWARM_MERGE_BUNDLE_VERSION = 1;
14
34
  export declare const FRONTIER_SWARM_DEFAULT_CODEX_COMPUTE_ID = "codex.gpt-5.5.xhigh";
15
35
  export declare const FRONTIER_SWARM_DEFAULT_MODEL = "gpt-5.5";
16
36
  export declare const FRONTIER_SWARM_DEFAULT_REASONING_EFFORT = "xhigh";
@@ -19,6 +39,9 @@ export type FrontierSwarmReasoningEffort = 'minimal' | 'low' | 'medium' | 'high'
19
39
  export type FrontierSwarmPolicyMode = 'advisory' | 'hard-file-ownership' | string;
20
40
  export type FrontierSwarmTaskStatus = 'open' | 'planned' | 'running' | 'blocked' | 'failed' | 'completed' | 'verified' | string;
21
41
  export type FrontierSwarmJobStatus = 'planned' | 'scheduled' | 'running' | 'blocked' | 'failed' | 'completed' | 'verified' | string;
42
+ export type FrontierSwarmMergeReadiness = 'discovery-only' | 'patch-candidate' | 'verified-patch' | 'rejected' | 'blocked' | string;
43
+ export type FrontierSwarmMergeDisposition = 'auto-mergeable' | 'needs-port' | 'discovery-only' | 'rejected' | 'blocked' | 'stale-against-head' | string;
44
+ export type FrontierSwarmRiskLevel = 'low' | 'medium' | 'high' | 'unknown' | string;
22
45
  export interface FrontierSwarmComputeInput {
23
46
  id: string;
24
47
  kind?: FrontierSwarmComputeKind;
@@ -69,6 +92,25 @@ export interface FrontierSwarmLayer {
69
92
  tags: string[];
70
93
  metadata?: JsonObject;
71
94
  }
95
+ export interface FrontierSwarmOwnershipRegionInput {
96
+ id: string;
97
+ title?: string;
98
+ description?: string;
99
+ globs?: readonly string[];
100
+ paths?: readonly string[];
101
+ selectors?: readonly string[];
102
+ owner?: string;
103
+ metadata?: unknown;
104
+ }
105
+ export interface FrontierSwarmOwnershipRegion {
106
+ id: string;
107
+ title: string;
108
+ description?: string;
109
+ globs: string[];
110
+ selectors: string[];
111
+ owner?: string;
112
+ metadata?: JsonObject;
113
+ }
72
114
  export interface FrontierSwarmLaneInput {
73
115
  id: string;
74
116
  title?: string;
@@ -79,6 +121,9 @@ export interface FrontierSwarmLaneInput {
79
121
  allowedGlobs?: readonly string[];
80
122
  sharedReadOnly?: readonly string[];
81
123
  neverEdit?: readonly string[];
124
+ ownershipRegions?: readonly FrontierSwarmOwnershipRegionInput[];
125
+ capabilities?: readonly string[];
126
+ resourceRequirements?: FrontierSwarmResourceRequirementsInput;
82
127
  worktreePath?: string;
83
128
  evidencePrefix?: string;
84
129
  evidenceOutDirPrefix?: string;
@@ -97,6 +142,9 @@ export interface FrontierSwarmLane {
97
142
  allowedWrites: string[];
98
143
  sharedReadOnly: string[];
99
144
  neverEdit: string[];
145
+ ownershipRegions: FrontierSwarmOwnershipRegion[];
146
+ capabilities: string[];
147
+ resourceRequirements?: FrontierSwarmResourceRequirements;
100
148
  worktreePath?: string;
101
149
  evidencePrefix?: string;
102
150
  concurrencyKey: string;
@@ -121,6 +169,36 @@ export interface FrontierSwarmCommand {
121
169
  cwd?: string;
122
170
  metadata?: JsonObject;
123
171
  }
172
+ export interface FrontierSwarmBrowserResourceInput {
173
+ required?: boolean;
174
+ portPool?: readonly (string | number)[];
175
+ profileDir?: string;
176
+ profileDirPrefix?: string;
177
+ maxConcurrency?: number;
178
+ headless?: boolean;
179
+ metadata?: unknown;
180
+ }
181
+ export interface FrontierSwarmBrowserResource {
182
+ required: boolean;
183
+ portPool: string[];
184
+ profileDir?: string;
185
+ profileDirPrefix?: string;
186
+ maxConcurrency?: number;
187
+ headless?: boolean;
188
+ metadata?: JsonObject;
189
+ }
190
+ export interface FrontierSwarmResourceRequirementsInput {
191
+ capabilities?: readonly string[];
192
+ resources?: Record<string, number>;
193
+ browser?: FrontierSwarmBrowserResourceInput;
194
+ metadata?: unknown;
195
+ }
196
+ export interface FrontierSwarmResourceRequirements {
197
+ capabilities: string[];
198
+ resources: Record<string, number>;
199
+ browser?: FrontierSwarmBrowserResource;
200
+ metadata?: JsonObject;
201
+ }
124
202
  export interface FrontierSwarmPolicyInput {
125
203
  mode?: FrontierSwarmPolicyMode;
126
204
  defaultConcurrency?: number;
@@ -198,11 +276,20 @@ export interface FrontierSwarmTaskInput {
198
276
  layer?: string;
199
277
  compute?: string;
200
278
  parentTaskId?: string;
279
+ dependsOn?: readonly string[];
280
+ concurrencyKey?: string;
281
+ budget?: FrontierSwarmBudgetInput;
282
+ review?: FrontierSwarmReviewPolicyInput;
201
283
  priority?: number;
202
284
  sourceRefs?: readonly string[];
203
285
  targetRefs?: readonly string[];
204
286
  ownedFiles?: readonly string[];
205
287
  allowedWrites?: readonly string[];
288
+ ownershipRegions?: readonly FrontierSwarmOwnershipRegionInput[];
289
+ ownedRegions?: readonly string[];
290
+ changedRegions?: readonly string[];
291
+ capabilities?: readonly string[];
292
+ resourceRequirements?: FrontierSwarmResourceRequirementsInput;
206
293
  acceptance?: readonly string[];
207
294
  acceptanceChecks?: readonly ({
208
295
  id?: string;
@@ -227,10 +314,19 @@ export interface FrontierSwarmTask {
227
314
  layer?: string;
228
315
  compute?: string;
229
316
  parentTaskId?: string;
317
+ dependsOn: string[];
318
+ concurrencyKey?: string;
319
+ budget?: FrontierSwarmBudget;
320
+ review?: FrontierSwarmReviewPolicy;
230
321
  priority: number;
231
322
  sourceRefs: string[];
232
323
  targetRefs: string[];
233
324
  allowedWrites: string[];
325
+ ownershipRegions: FrontierSwarmOwnershipRegion[];
326
+ ownedRegions: string[];
327
+ changedRegions: string[];
328
+ capabilities: string[];
329
+ resourceRequirements?: FrontierSwarmResourceRequirements;
234
330
  acceptance: string[];
235
331
  verification: FrontierSwarmCommand[];
236
332
  evidenceCommand?: string;
@@ -268,10 +364,46 @@ export interface FrontierSwarmPlanFilter {
268
364
  limit?: number;
269
365
  compute?: string;
270
366
  }
367
+ export interface FrontierSwarmSelectionPriorityInput {
368
+ statuses?: Record<string, number>;
369
+ workKinds?: Record<string, number>;
370
+ defaultStatusRank?: number;
371
+ defaultWorkKindRank?: number;
372
+ statusWeight?: number;
373
+ workKindWeight?: number;
374
+ }
375
+ export interface FrontierSwarmTaskSelectionInput extends FrontierSwarmPlanFilter {
376
+ workKinds?: readonly string[];
377
+ spreadLanes?: boolean;
378
+ includeOwnershipWarnings?: boolean;
379
+ assignSelectionPriority?: boolean;
380
+ priority?: FrontierSwarmSelectionPriorityInput;
381
+ }
382
+ export interface FrontierSwarmTaskSelectionEntry {
383
+ task: FrontierSwarmTask;
384
+ lane?: FrontierSwarmLane;
385
+ ownershipWarnings: string[];
386
+ selectionPriority: number;
387
+ }
388
+ export interface FrontierSwarmTaskSelectionSummary {
389
+ total: number;
390
+ byLane: Record<string, number>;
391
+ byWorkKind: Record<string, number>;
392
+ ownershipWarningCount: number;
393
+ }
394
+ export interface FrontierSwarmTaskSelection {
395
+ tasks: FrontierSwarmTask[];
396
+ entries: FrontierSwarmTaskSelectionEntry[];
397
+ summary: FrontierSwarmTaskSelectionSummary;
398
+ }
271
399
  export interface FrontierSwarmPlanInput extends FrontierSwarmPlanFilter {
272
400
  id?: string;
273
401
  runId?: string;
274
402
  now?: number;
403
+ maxReadyJobs?: number;
404
+ maxLaneConcurrency?: Record<string, number>;
405
+ maxConcurrencyKeyConcurrency?: Record<string, number>;
406
+ maxComputeConcurrency?: Record<string, number>;
275
407
  metadata?: unknown;
276
408
  }
277
409
  export interface FrontierSwarmPlan {
@@ -282,11 +414,19 @@ export interface FrontierSwarmPlan {
282
414
  manifestId: string;
283
415
  createdAt: number;
284
416
  filters: FrontierSwarmPlanFilter;
417
+ limits: FrontierSwarmScheduleLimits;
285
418
  validation: FrontierSwarmValidation;
286
419
  jobs: FrontierSwarmJob[];
420
+ graph: FrontierSwarmJobGraph;
287
421
  summary: FrontierSwarmSummary;
288
422
  metadata?: JsonObject;
289
423
  }
424
+ export interface FrontierSwarmScheduleLimits {
425
+ maxReadyJobs?: number;
426
+ maxLaneConcurrency: Record<string, number>;
427
+ maxConcurrencyKeyConcurrency: Record<string, number>;
428
+ maxComputeConcurrency: Record<string, number>;
429
+ }
290
430
  export interface FrontierSwarmJob {
291
431
  id: string;
292
432
  taskId: string;
@@ -300,15 +440,369 @@ export interface FrontierSwarmJob {
300
440
  allowedWrites: string[];
301
441
  sharedReadOnly: string[];
302
442
  neverEdit: string[];
443
+ ownershipRegions: FrontierSwarmOwnershipRegion[];
444
+ ownedRegions: string[];
445
+ changedRegions: string[];
446
+ capabilities: string[];
447
+ resourceRequirements?: FrontierSwarmResourceRequirements;
303
448
  worktreePath?: string;
304
449
  evidencePrefix?: string;
305
450
  concurrencyKey: string;
306
451
  ownershipWarnings: string[];
307
452
  verification: FrontierSwarmCommand[];
308
453
  acceptance: string[];
454
+ dependsOn: string[];
455
+ budget?: FrontierSwarmBudget;
456
+ review: FrontierSwarmReviewPolicy;
309
457
  tags: string[];
310
458
  metadata?: JsonObject;
311
459
  }
460
+ export interface FrontierSwarmBudgetInput {
461
+ maxCostUsd?: number;
462
+ maxInputTokens?: number;
463
+ maxOutputTokens?: number;
464
+ maxDurationMs?: number;
465
+ maxRetries?: number;
466
+ metadata?: unknown;
467
+ }
468
+ export interface FrontierSwarmBudget {
469
+ maxCostUsd?: number;
470
+ maxInputTokens?: number;
471
+ maxOutputTokens?: number;
472
+ maxDurationMs?: number;
473
+ maxRetries: number;
474
+ metadata?: JsonObject;
475
+ }
476
+ export interface FrontierSwarmUsageInput {
477
+ costUsd?: number;
478
+ inputTokens?: number;
479
+ outputTokens?: number;
480
+ durationMs?: number;
481
+ attempts?: number;
482
+ metadata?: unknown;
483
+ }
484
+ export interface FrontierSwarmUsage {
485
+ costUsd: number;
486
+ inputTokens: number;
487
+ outputTokens: number;
488
+ durationMs: number;
489
+ attempts: number;
490
+ metadata?: JsonObject;
491
+ }
492
+ export interface FrontierSwarmBudgetDecision {
493
+ ok: boolean;
494
+ jobId: string;
495
+ usage: FrontierSwarmUsage;
496
+ budget?: FrontierSwarmBudget;
497
+ violations: string[];
498
+ }
499
+ export interface FrontierSwarmReviewPolicyInput {
500
+ requiredReviewers?: number;
501
+ sampleRate?: number;
502
+ alwaysReview?: boolean;
503
+ reviewerPool?: readonly string[];
504
+ metadata?: unknown;
505
+ }
506
+ export interface FrontierSwarmReviewPolicy {
507
+ requiredReviewers: number;
508
+ sampleRate: number;
509
+ alwaysReview: boolean;
510
+ reviewerPool: string[];
511
+ metadata?: JsonObject;
512
+ }
513
+ export interface FrontierSwarmJobGraph {
514
+ nodes: string[];
515
+ edges: FrontierSwarmJobGraphEdge[];
516
+ dependentsByJobId: Record<string, string[]>;
517
+ dependenciesByJobId: Record<string, string[]>;
518
+ roots: string[];
519
+ leaves: string[];
520
+ issues: FrontierSwarmValidationIssue[];
521
+ }
522
+ export interface FrontierSwarmJobGraphEdge {
523
+ from: string;
524
+ to: string;
525
+ type: 'depends-on' | 'parent-task';
526
+ }
527
+ export interface FrontierSwarmScheduleInput {
528
+ plan: FrontierSwarmPlan;
529
+ run?: FrontierSwarmRun;
530
+ now?: number;
531
+ maxReadyJobs?: number;
532
+ maxLaneConcurrency?: Record<string, number>;
533
+ maxConcurrencyKeyConcurrency?: Record<string, number>;
534
+ maxComputeConcurrency?: Record<string, number>;
535
+ }
536
+ export interface FrontierSwarmReviewPlanInput {
537
+ plan: FrontierSwarmPlan;
538
+ run?: FrontierSwarmRun;
539
+ budgetDecisions?: readonly FrontierSwarmBudgetDecision[];
540
+ reviewers?: readonly string[];
541
+ generatedAt?: number;
542
+ sampleSalt?: string;
543
+ }
544
+ export interface FrontierSwarmMergePlanInput {
545
+ plan: FrontierSwarmPlan;
546
+ run: FrontierSwarmRun;
547
+ reviewPlan?: FrontierSwarmReviewPlan;
548
+ generatedAt?: number;
549
+ }
550
+ export interface FrontierSwarmSchedule {
551
+ kind: typeof FRONTIER_SWARM_SCHEDULE_KIND;
552
+ version: typeof FRONTIER_SWARM_SCHEDULE_VERSION;
553
+ id: string;
554
+ planId: string;
555
+ runId?: string;
556
+ createdAt: number;
557
+ ready: FrontierSwarmScheduledJob[];
558
+ blocked: FrontierSwarmBlockedJob[];
559
+ running: FrontierSwarmRunningJob[];
560
+ completed: string[];
561
+ failed: string[];
562
+ summary: FrontierSwarmScheduleSummary;
563
+ }
564
+ export interface FrontierSwarmScheduledJob {
565
+ jobId: string;
566
+ taskId: string;
567
+ lane: string;
568
+ compute: string;
569
+ concurrencyKey: string;
570
+ priority: number;
571
+ dependsOn: string[];
572
+ capabilities: string[];
573
+ resourceRequirements?: FrontierSwarmResourceRequirements;
574
+ }
575
+ export interface FrontierSwarmBlockedJob extends FrontierSwarmScheduledJob {
576
+ reasons: string[];
577
+ waitingFor: string[];
578
+ }
579
+ export interface FrontierSwarmRunningJob {
580
+ jobId: string;
581
+ lane: string;
582
+ compute: string;
583
+ concurrencyKey: string;
584
+ capabilities: string[];
585
+ resourceRequirements?: FrontierSwarmResourceRequirements;
586
+ }
587
+ export interface FrontierSwarmScheduleSummary {
588
+ jobCount: number;
589
+ readyCount: number;
590
+ blockedCount: number;
591
+ runningCount: number;
592
+ completedCount: number;
593
+ failedCount: number;
594
+ }
595
+ export interface FrontierSwarmLeaseInput {
596
+ schedule: FrontierSwarmSchedule;
597
+ workerId: string;
598
+ now?: number;
599
+ leaseMs?: number;
600
+ count?: number;
601
+ existingLeases?: readonly FrontierSwarmLease[];
602
+ }
603
+ export interface FrontierSwarmLease {
604
+ kind: typeof FRONTIER_SWARM_LEASE_KIND;
605
+ version: typeof FRONTIER_SWARM_LEASE_VERSION;
606
+ id: string;
607
+ jobId: string;
608
+ workerId: string;
609
+ token: string;
610
+ leasedAt: number;
611
+ expiresAt: number;
612
+ fencingToken: number;
613
+ status: 'active' | 'expired' | 'released';
614
+ }
615
+ export type FrontierSwarmQueueJobStatus = 'ready' | 'leased' | 'running' | 'completed' | 'failed' | 'blocked' | 'retrying' | 'dead-letter' | string;
616
+ export interface FrontierSwarmQueueJobInput {
617
+ jobId: string;
618
+ taskId?: string;
619
+ runId?: string;
620
+ status?: FrontierSwarmQueueJobStatus;
621
+ lane?: string;
622
+ compute?: string;
623
+ concurrencyKey?: string;
624
+ priority?: number;
625
+ attempts?: number;
626
+ maxAttempts?: number;
627
+ availableAt?: number;
628
+ lease?: FrontierSwarmLease;
629
+ lastError?: string;
630
+ metadata?: unknown;
631
+ }
632
+ export interface FrontierSwarmQueueJob {
633
+ jobId: string;
634
+ taskId?: string;
635
+ runId?: string;
636
+ status: FrontierSwarmQueueJobStatus;
637
+ lane?: string;
638
+ compute?: string;
639
+ concurrencyKey?: string;
640
+ priority: number;
641
+ attempts: number;
642
+ maxAttempts: number;
643
+ availableAt?: number;
644
+ lease?: FrontierSwarmLease;
645
+ lastError?: string;
646
+ metadata?: JsonObject;
647
+ }
648
+ export interface FrontierSwarmQueueSnapshotInput {
649
+ id?: string;
650
+ plan: FrontierSwarmPlan;
651
+ run?: FrontierSwarmRun;
652
+ jobs?: readonly FrontierSwarmQueueJobInput[];
653
+ leases?: readonly FrontierSwarmLease[];
654
+ generatedAt?: number;
655
+ metadata?: unknown;
656
+ }
657
+ export interface FrontierSwarmQueueSnapshot {
658
+ kind: typeof FRONTIER_SWARM_QUEUE_SNAPSHOT_KIND;
659
+ version: typeof FRONTIER_SWARM_QUEUE_SNAPSHOT_VERSION;
660
+ id: string;
661
+ planId: string;
662
+ runId: string;
663
+ generatedAt: number;
664
+ jobs: FrontierSwarmQueueJob[];
665
+ byStatus: Record<string, string[]>;
666
+ byLane: Record<string, string[]>;
667
+ leases: FrontierSwarmLease[];
668
+ metadata?: JsonObject;
669
+ summary: {
670
+ jobCount: number;
671
+ leaseCount: number;
672
+ readyCount: number;
673
+ leasedCount: number;
674
+ completedCount: number;
675
+ failedCount: number;
676
+ deadLetterCount: number;
677
+ };
678
+ }
679
+ export interface FrontierSwarmLeaseRenewalInput {
680
+ lease: FrontierSwarmLease;
681
+ now?: number;
682
+ leaseMs?: number;
683
+ status?: FrontierSwarmLease['status'];
684
+ }
685
+ export interface FrontierSwarmQueueAdapter {
686
+ snapshot(): FrontierSwarmQueueSnapshot | Promise<FrontierSwarmQueueSnapshot>;
687
+ enqueue?(snapshot: FrontierSwarmQueueSnapshot): FrontierSwarmQueueSnapshot | Promise<FrontierSwarmQueueSnapshot>;
688
+ lease?(input: FrontierSwarmLeaseInput): readonly FrontierSwarmLease[] | Promise<readonly FrontierSwarmLease[]>;
689
+ renew?(input: FrontierSwarmLeaseRenewalInput): FrontierSwarmLease | Promise<FrontierSwarmLease>;
690
+ complete?(result: FrontierSwarmJobResultInput): FrontierSwarmQueueSnapshot | Promise<FrontierSwarmQueueSnapshot>;
691
+ }
692
+ export interface FrontierSwarmRunCheckpointInput {
693
+ run: FrontierSwarmRun;
694
+ sequence?: number;
695
+ savedAt?: number;
696
+ metadata?: unknown;
697
+ }
698
+ export interface FrontierSwarmRunCheckpoint {
699
+ kind: typeof FRONTIER_SWARM_RUN_CHECKPOINT_KIND;
700
+ version: typeof FRONTIER_SWARM_RUN_CHECKPOINT_VERSION;
701
+ id: string;
702
+ runId: string;
703
+ planId: string;
704
+ sequence: number;
705
+ savedAt: number;
706
+ status: FrontierSwarmJobStatus;
707
+ eventCount: number;
708
+ resultCount: number;
709
+ hash: string;
710
+ metadata?: JsonObject;
711
+ }
712
+ export interface FrontierSwarmRunStoreAdapter {
713
+ loadRun(runId: string): FrontierSwarmRun | undefined | Promise<FrontierSwarmRun | undefined>;
714
+ saveRun(run: FrontierSwarmRun, checkpoint?: FrontierSwarmRunCheckpoint): void | Promise<void>;
715
+ appendEvents?(runId: string, events: readonly FrontierSwarmEventInput[]): void | Promise<void>;
716
+ appendResults?(runId: string, results: readonly FrontierSwarmJobResultInput[]): void | Promise<void>;
717
+ checkpoint?(run: FrontierSwarmRun): FrontierSwarmRunCheckpoint | Promise<FrontierSwarmRunCheckpoint>;
718
+ }
719
+ export interface FrontierSwarmArtifactInput {
720
+ jobId: string;
721
+ path: string;
722
+ kind?: string;
723
+ bytes?: number;
724
+ hash?: string;
725
+ producedAt?: number;
726
+ metadata?: unknown;
727
+ }
728
+ export interface FrontierSwarmArtifact {
729
+ jobId: string;
730
+ path: string;
731
+ kind: string;
732
+ bytes?: number;
733
+ hash?: string;
734
+ producedAt?: number;
735
+ metadata?: JsonObject;
736
+ }
737
+ export interface FrontierSwarmArtifactIndex {
738
+ kind: typeof FRONTIER_SWARM_ARTIFACT_INDEX_KIND;
739
+ version: typeof FRONTIER_SWARM_ARTIFACT_INDEX_VERSION;
740
+ id: string;
741
+ generatedAt: number;
742
+ artifacts: FrontierSwarmArtifact[];
743
+ byJobId: Record<string, FrontierSwarmArtifact[]>;
744
+ byKind: Record<string, FrontierSwarmArtifact[]>;
745
+ summary: {
746
+ artifactCount: number;
747
+ jobCount: number;
748
+ kindCount: number;
749
+ totalBytes: number;
750
+ };
751
+ }
752
+ export interface FrontierSwarmReviewPlan {
753
+ kind: typeof FRONTIER_SWARM_REVIEW_PLAN_KIND;
754
+ version: typeof FRONTIER_SWARM_REVIEW_PLAN_VERSION;
755
+ id: string;
756
+ planId: string;
757
+ generatedAt: number;
758
+ assignments: FrontierSwarmReviewAssignment[];
759
+ summary: {
760
+ assignmentCount: number;
761
+ requiredCount: number;
762
+ sampledCount: number;
763
+ };
764
+ }
765
+ export interface FrontierSwarmReviewAssignment {
766
+ jobId: string;
767
+ taskId: string;
768
+ reviewers: string[];
769
+ required: boolean;
770
+ reason: 'always-review' | 'sampled' | 'violations' | 'failed' | 'budget';
771
+ }
772
+ export interface FrontierSwarmMergePlan {
773
+ kind: typeof FRONTIER_SWARM_MERGE_PLAN_KIND;
774
+ version: typeof FRONTIER_SWARM_MERGE_PLAN_VERSION;
775
+ id: string;
776
+ planId: string;
777
+ generatedAt: number;
778
+ ready: string[];
779
+ blocked: FrontierSwarmMergeBlocker[];
780
+ groups: FrontierSwarmMergeGroup[];
781
+ summary: {
782
+ readyCount: number;
783
+ blockedCount: number;
784
+ groupCount: number;
785
+ };
786
+ }
787
+ export interface FrontierSwarmMergeBlocker {
788
+ jobId: string;
789
+ reasons: string[];
790
+ conflictingJobIds: string[];
791
+ }
792
+ export interface FrontierSwarmMergeGroup {
793
+ id: string;
794
+ jobIds: string[];
795
+ changedPaths: string[];
796
+ }
797
+ export interface FrontierSwarmDecomposeInput {
798
+ featureId: string;
799
+ objective: string;
800
+ lanes: readonly string[];
801
+ files?: readonly string[];
802
+ checks?: readonly (string | FrontierSwarmCommandInput)[];
803
+ reviewers?: readonly string[];
804
+ metadata?: unknown;
805
+ }
312
806
  export interface FrontierSwarmRunInput {
313
807
  id?: string;
314
808
  plan: FrontierSwarmPlan;
@@ -363,16 +857,73 @@ export interface FrontierSwarmEvent {
363
857
  data?: JsonValue;
364
858
  metadata?: JsonObject;
365
859
  }
860
+ export type FrontierSwarmMailboxScope = 'global' | 'lane' | 'job' | string;
861
+ export interface FrontierSwarmMailboxInput {
862
+ id?: string;
863
+ runId?: string;
864
+ scope?: FrontierSwarmMailboxScope;
865
+ lane?: string;
866
+ jobId?: string;
867
+ path?: string;
868
+ eventTypes?: readonly string[];
869
+ appendOnly?: boolean;
870
+ metadata?: unknown;
871
+ }
872
+ export interface FrontierSwarmMailbox {
873
+ kind: typeof FRONTIER_SWARM_MAILBOX_KIND;
874
+ version: typeof FRONTIER_SWARM_MAILBOX_VERSION;
875
+ id: string;
876
+ runId?: string;
877
+ scope: FrontierSwarmMailboxScope;
878
+ lane?: string;
879
+ jobId?: string;
880
+ path?: string;
881
+ eventTypes: string[];
882
+ appendOnly: boolean;
883
+ metadata?: JsonObject;
884
+ }
885
+ export interface FrontierSwarmEventStreamInput {
886
+ id?: string;
887
+ runId?: string;
888
+ root?: string;
889
+ lanes?: readonly (string | FrontierSwarmLaneInput | FrontierSwarmLane)[];
890
+ eventTypes?: readonly string[];
891
+ appendOnly?: boolean;
892
+ metadata?: unknown;
893
+ }
894
+ export interface FrontierSwarmEventStream {
895
+ kind: typeof FRONTIER_SWARM_EVENT_STREAM_KIND;
896
+ version: typeof FRONTIER_SWARM_EVENT_STREAM_VERSION;
897
+ id: string;
898
+ runId?: string;
899
+ root?: string;
900
+ appendOnly: boolean;
901
+ global: FrontierSwarmMailbox;
902
+ lanes: Record<string, FrontierSwarmMailbox>;
903
+ eventTypes: string[];
904
+ metadata?: JsonObject;
905
+ summary: {
906
+ mailboxCount: number;
907
+ laneCount: number;
908
+ eventTypeCount: number;
909
+ };
910
+ }
366
911
  export interface FrontierSwarmJobResultInput {
367
912
  jobId: string;
368
913
  status?: FrontierSwarmJobStatus;
914
+ mergeReadiness?: FrontierSwarmMergeReadiness;
369
915
  startedAt?: number;
370
916
  finishedAt?: number;
371
917
  exitCode?: number;
372
918
  signal?: string;
373
919
  changedPaths?: readonly string[];
920
+ changedRegions?: readonly string[];
374
921
  ownershipViolations?: readonly string[];
375
922
  evidencePaths?: readonly string[];
923
+ patchPath?: string;
924
+ queueItemIds?: readonly string[];
925
+ riskLevel?: FrontierSwarmRiskLevel;
926
+ mergeDisposition?: FrontierSwarmMergeDisposition;
376
927
  verification?: readonly FrontierSwarmVerificationResultInput[];
377
928
  lastMessage?: string;
378
929
  error?: unknown;
@@ -401,14 +952,20 @@ export interface FrontierSwarmVerificationResult {
401
952
  export interface FrontierSwarmJobResult {
402
953
  jobId: string;
403
954
  status: FrontierSwarmJobStatus;
955
+ mergeReadiness: FrontierSwarmMergeReadiness;
404
956
  startedAt?: number;
405
957
  finishedAt?: number;
406
958
  durationMs?: number;
407
959
  exitCode?: number;
408
960
  signal?: string;
409
961
  changedPaths: string[];
962
+ changedRegions: string[];
410
963
  ownershipViolations: string[];
411
964
  evidencePaths: string[];
965
+ patchPath?: string;
966
+ queueItemIds: string[];
967
+ riskLevel: FrontierSwarmRiskLevel;
968
+ mergeDisposition: FrontierSwarmMergeDisposition;
412
969
  verification: FrontierSwarmVerificationResult[];
413
970
  lastMessage?: string;
414
971
  error?: string;
@@ -420,6 +977,57 @@ export interface FrontierSwarmOwnershipReport {
420
977
  allowedWrites: string[];
421
978
  violations: string[];
422
979
  }
980
+ export interface FrontierSwarmMergeBundleInput {
981
+ id?: string;
982
+ runId?: string;
983
+ planId?: string;
984
+ job?: FrontierSwarmJob;
985
+ result: FrontierSwarmJobResult | FrontierSwarmJobResultInput;
986
+ patchPath?: string;
987
+ patchHash?: string;
988
+ evidencePaths?: readonly string[];
989
+ queueItemIds?: readonly string[];
990
+ riskLevel?: FrontierSwarmRiskLevel;
991
+ disposition?: FrontierSwarmMergeDisposition;
992
+ staleAgainstHead?: boolean;
993
+ branchName?: string;
994
+ commit?: string;
995
+ metadata?: unknown;
996
+ generatedAt?: number;
997
+ }
998
+ export interface FrontierSwarmMergeBundle {
999
+ kind: typeof FRONTIER_SWARM_MERGE_BUNDLE_KIND;
1000
+ version: typeof FRONTIER_SWARM_MERGE_BUNDLE_VERSION;
1001
+ id: string;
1002
+ runId?: string;
1003
+ planId?: string;
1004
+ jobId: string;
1005
+ taskId?: string;
1006
+ lane?: string;
1007
+ title?: string;
1008
+ generatedAt: number;
1009
+ status: FrontierSwarmJobStatus;
1010
+ mergeReadiness: FrontierSwarmMergeReadiness;
1011
+ disposition: FrontierSwarmMergeDisposition;
1012
+ riskLevel: FrontierSwarmRiskLevel;
1013
+ autoMergeable: boolean;
1014
+ changedPaths: string[];
1015
+ changedRegions: string[];
1016
+ ownedFilesTouched: string[];
1017
+ allowedWrites: string[];
1018
+ ownershipViolations: string[];
1019
+ patchPath?: string;
1020
+ patchHash?: string;
1021
+ evidencePaths: string[];
1022
+ commandsPassed: FrontierSwarmVerificationResult[];
1023
+ commandsFailed: FrontierSwarmVerificationResult[];
1024
+ queueItemIds: string[];
1025
+ branchName?: string;
1026
+ commit?: string;
1027
+ staleAgainstHead: boolean;
1028
+ reasons: string[];
1029
+ metadata?: JsonObject;
1030
+ }
423
1031
  export interface FrontierSwarmProof {
424
1032
  kind: typeof FRONTIER_SWARM_PROOF_KIND;
425
1033
  version: typeof FRONTIER_SWARM_PROOF_VERSION;
@@ -437,16 +1045,40 @@ export declare function defineSwarmTasks(input?: readonly FrontierSwarmTaskInput
437
1045
  export declare function compileSwarm(input: FrontierSwarmManifest | FrontierSwarmManifestInput): FrontierSwarmCompiled;
438
1046
  export declare function validateSwarmManifest(input: FrontierSwarmManifest | FrontierSwarmManifestInput): FrontierSwarmValidation;
439
1047
  export declare function createSwarmPlan(manifestInput: FrontierSwarmManifest | FrontierSwarmManifestInput, taskInput: readonly FrontierSwarmTaskInput[] | FrontierSwarmTaskSetInput | readonly FrontierSwarmTask[], options?: FrontierSwarmPlanInput): FrontierSwarmPlan;
1048
+ export declare function createSwarmTaskSelection(manifestInput: FrontierSwarmManifest | FrontierSwarmManifestInput, taskInput: readonly FrontierSwarmTaskInput[] | FrontierSwarmTaskSetInput | readonly FrontierSwarmTask[], options?: FrontierSwarmTaskSelectionInput): FrontierSwarmTaskSelection;
440
1049
  export declare function createSwarmRun(input: FrontierSwarmRunInput): FrontierSwarmRun;
441
1050
  export declare function recordSwarmEvent(runInput: FrontierSwarmRun, eventInput: FrontierSwarmEventInput): FrontierSwarmRun;
1051
+ export declare function createSwarmMailbox(input?: FrontierSwarmMailboxInput): FrontierSwarmMailbox;
1052
+ export declare function createSwarmEventStream(input?: FrontierSwarmEventStreamInput): FrontierSwarmEventStream;
1053
+ export declare function routeSwarmEventToMailboxes(stream: FrontierSwarmEventStream, eventInput: FrontierSwarmEvent | FrontierSwarmEventInput): FrontierSwarmMailbox[];
442
1054
  export declare function completeSwarmJob(runInput: FrontierSwarmRun, resultInput: FrontierSwarmJobResultInput): FrontierSwarmRun;
443
1055
  export declare function checkSwarmOwnership(job: FrontierSwarmJob, changedPaths: readonly string[]): FrontierSwarmOwnershipReport;
1056
+ export declare function resolveSwarmChangedRegions(job: FrontierSwarmJob, changedPaths: readonly string[]): string[];
1057
+ export declare function classifySwarmMergeReadiness(result: FrontierSwarmJobResultInput | FrontierSwarmJobResult): FrontierSwarmMergeReadiness;
1058
+ export declare function classifySwarmMergeDisposition(result: FrontierSwarmJobResultInput | FrontierSwarmJobResult, input?: {
1059
+ staleAgainstHead?: boolean;
1060
+ }): FrontierSwarmMergeDisposition;
1061
+ export declare function createSwarmMergeBundle(input: FrontierSwarmMergeBundleInput): FrontierSwarmMergeBundle;
444
1062
  export declare function resolveSwarmCompute(manifestInput: FrontierSwarmManifest | FrontierSwarmManifestInput, taskInput: FrontierSwarmTask | FrontierSwarmTaskInput): FrontierSwarmCompute;
445
1063
  export declare function createSwarmProof(input: FrontierSwarmManifest | FrontierSwarmPlan | FrontierSwarmRun, options?: {
446
1064
  generatedAt?: number;
447
1065
  validation?: FrontierSwarmValidation;
448
1066
  metadata?: unknown;
449
1067
  }): FrontierSwarmProof;
1068
+ export declare function createSwarmSchedule(input: FrontierSwarmPlan | FrontierSwarmScheduleInput): FrontierSwarmSchedule;
1069
+ export declare function createSwarmLeases(input: FrontierSwarmLeaseInput): FrontierSwarmLease[];
1070
+ export declare function renewSwarmLease(input: FrontierSwarmLeaseRenewalInput): FrontierSwarmLease;
1071
+ export declare function createSwarmQueueSnapshot(input: FrontierSwarmQueueSnapshotInput): FrontierSwarmQueueSnapshot;
1072
+ export declare function createSwarmRunCheckpoint(input: FrontierSwarmRun | FrontierSwarmRunCheckpointInput): FrontierSwarmRunCheckpoint;
1073
+ export declare function checkSwarmBudget(job: FrontierSwarmJob, usageInput: FrontierSwarmUsageInput): FrontierSwarmBudgetDecision;
1074
+ export declare function createSwarmArtifactIndex(input: FrontierSwarmRun | {
1075
+ run?: FrontierSwarmRun;
1076
+ artifacts?: readonly FrontierSwarmArtifactInput[];
1077
+ generatedAt?: number;
1078
+ }): FrontierSwarmArtifactIndex;
1079
+ export declare function createSwarmReviewPlan(input: FrontierSwarmReviewPlanInput): FrontierSwarmReviewPlan;
1080
+ export declare function createSwarmMergePlan(input: FrontierSwarmMergePlanInput): FrontierSwarmMergePlan;
1081
+ export declare function decomposeSwarmFeature(input: FrontierSwarmDecomposeInput): FrontierSwarmTaskInput[];
450
1082
  export declare function encodeSwarmJsonl(records: readonly unknown[]): string;
451
1083
  export declare function decodeSwarmJsonl(jsonl: string): JsonValue[];
452
1084
  export declare function matchesGlob(file: string, glob: string): boolean;