@agent-relay/factory 0.1.60 → 0.1.63

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 (162) hide show
  1. package/README.md +140 -16
  2. package/dist/cli/exit-codes.d.ts +81 -0
  3. package/dist/cli/exit-codes.d.ts.map +1 -0
  4. package/dist/cli/exit-codes.js +122 -0
  5. package/dist/cli/exit-codes.js.map +1 -0
  6. package/dist/cli/fleet.d.ts +23 -2
  7. package/dist/cli/fleet.d.ts.map +1 -1
  8. package/dist/cli/fleet.js +201 -42
  9. package/dist/cli/fleet.js.map +1 -1
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +2 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/config/schema.d.ts +175 -52
  15. package/dist/config/schema.d.ts.map +1 -1
  16. package/dist/config/schema.js +24 -5
  17. package/dist/config/schema.js.map +1 -1
  18. package/dist/dispatch/templates.d.ts +7 -0
  19. package/dist/dispatch/templates.d.ts.map +1 -1
  20. package/dist/dispatch/templates.js +64 -12
  21. package/dist/dispatch/templates.js.map +1 -1
  22. package/dist/dispatch/work-unit-identity.d.ts +19 -0
  23. package/dist/dispatch/work-unit-identity.d.ts.map +1 -0
  24. package/dist/dispatch/work-unit-identity.js +40 -0
  25. package/dist/dispatch/work-unit-identity.js.map +1 -0
  26. package/dist/environments/stack-descriptor.d.ts +3 -3
  27. package/dist/fleet/control-plane-circuit.d.ts +57 -0
  28. package/dist/fleet/control-plane-circuit.d.ts.map +1 -0
  29. package/dist/fleet/control-plane-circuit.js +219 -0
  30. package/dist/fleet/control-plane-circuit.js.map +1 -0
  31. package/dist/fleet/internal-fleet-client.d.ts +2 -1
  32. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  33. package/dist/fleet/internal-fleet-client.js +11 -7
  34. package/dist/fleet/internal-fleet-client.js.map +1 -1
  35. package/dist/fleet/relay-fleet-client.d.ts +3 -0
  36. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  37. package/dist/fleet/relay-fleet-client.js +97 -18
  38. package/dist/fleet/relay-fleet-client.js.map +1 -1
  39. package/dist/github/writeback-paths.d.ts +7 -0
  40. package/dist/github/writeback-paths.d.ts.map +1 -0
  41. package/dist/github/writeback-paths.js +28 -0
  42. package/dist/github/writeback-paths.js.map +1 -0
  43. package/dist/hosted/orchestrator.d.ts.map +1 -1
  44. package/dist/hosted/orchestrator.js +2 -0
  45. package/dist/hosted/orchestrator.js.map +1 -1
  46. package/dist/index.d.ts +10 -6
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +6 -4
  49. package/dist/index.js.map +1 -1
  50. package/dist/intake/index.d.ts +2 -1
  51. package/dist/intake/index.d.ts.map +1 -1
  52. package/dist/intake/index.js +2 -1
  53. package/dist/intake/index.js.map +1 -1
  54. package/dist/intake/notion-manifest.d.ts +48 -0
  55. package/dist/intake/notion-manifest.d.ts.map +1 -0
  56. package/dist/intake/notion-manifest.js +258 -0
  57. package/dist/intake/notion-manifest.js.map +1 -0
  58. package/dist/intake/notion-relay-claim.d.ts +5 -4
  59. package/dist/intake/notion-relay-claim.d.ts.map +1 -1
  60. package/dist/intake/notion-relay-claim.js +48 -7
  61. package/dist/intake/notion-relay-claim.js.map +1 -1
  62. package/dist/intake/notion.d.ts +6 -3
  63. package/dist/intake/notion.d.ts.map +1 -1
  64. package/dist/intake/notion.js +63 -13
  65. package/dist/intake/notion.js.map +1 -1
  66. package/dist/issue-key-match.d.ts +6 -0
  67. package/dist/issue-key-match.d.ts.map +1 -1
  68. package/dist/issue-key-match.js +6 -1
  69. package/dist/issue-key-match.js.map +1 -1
  70. package/dist/mount/local-mount-preflight.d.ts.map +1 -1
  71. package/dist/mount/local-mount-preflight.js +6 -2
  72. package/dist/mount/local-mount-preflight.js.map +1 -1
  73. package/dist/mount/mount-auth-error.d.ts +16 -3
  74. package/dist/mount/mount-auth-error.d.ts.map +1 -1
  75. package/dist/mount/mount-auth-error.js +34 -7
  76. package/dist/mount/mount-auth-error.js.map +1 -1
  77. package/dist/mount/relayfile-cloud-mount-client.d.ts +14 -1
  78. package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -1
  79. package/dist/mount/relayfile-cloud-mount-client.js +107 -6
  80. package/dist/mount/relayfile-cloud-mount-client.js.map +1 -1
  81. package/dist/mount/relayfile-github-connection-write.d.ts +24 -2
  82. package/dist/mount/relayfile-github-connection-write.d.ts.map +1 -1
  83. package/dist/mount/relayfile-github-connection-write.js +90 -1
  84. package/dist/mount/relayfile-github-connection-write.js.map +1 -1
  85. package/dist/node/factory-node.d.ts.map +1 -1
  86. package/dist/node/factory-node.js +18 -4
  87. package/dist/node/factory-node.js.map +1 -1
  88. package/dist/observability/events.d.ts +52 -52
  89. package/dist/orchestrator/batch-tracker.d.ts +30 -0
  90. package/dist/orchestrator/batch-tracker.d.ts.map +1 -1
  91. package/dist/orchestrator/batch-tracker.js +50 -2
  92. package/dist/orchestrator/batch-tracker.js.map +1 -1
  93. package/dist/orchestrator/factory.d.ts +36 -2
  94. package/dist/orchestrator/factory.d.ts.map +1 -1
  95. package/dist/orchestrator/factory.js +863 -98
  96. package/dist/orchestrator/factory.js.map +1 -1
  97. package/dist/orchestrator/index.d.ts +2 -2
  98. package/dist/orchestrator/index.d.ts.map +1 -1
  99. package/dist/orchestrator/index.js +2 -2
  100. package/dist/orchestrator/index.js.map +1 -1
  101. package/dist/orchestrator/reaper.d.ts +16 -2
  102. package/dist/orchestrator/reaper.d.ts.map +1 -1
  103. package/dist/orchestrator/reaper.js +79 -5
  104. package/dist/orchestrator/reaper.js.map +1 -1
  105. package/dist/ports/fleet.d.ts +6 -0
  106. package/dist/ports/fleet.d.ts.map +1 -1
  107. package/dist/ports/index.d.ts +1 -1
  108. package/dist/ports/index.d.ts.map +1 -1
  109. package/dist/ports/mount.d.ts +39 -0
  110. package/dist/ports/mount.d.ts.map +1 -1
  111. package/dist/ports/state.d.ts +35 -6
  112. package/dist/ports/state.d.ts.map +1 -1
  113. package/dist/state/document-store.d.ts +32 -0
  114. package/dist/state/document-store.d.ts.map +1 -0
  115. package/dist/state/document-store.js +7 -0
  116. package/dist/state/document-store.js.map +1 -0
  117. package/dist/state/file-state-store.d.ts +20 -3
  118. package/dist/state/file-state-store.d.ts.map +1 -1
  119. package/dist/state/file-state-store.js +89 -245
  120. package/dist/state/file-state-store.js.map +1 -1
  121. package/dist/state/in-memory-state-store.d.ts +2 -1
  122. package/dist/state/in-memory-state-store.d.ts.map +1 -1
  123. package/dist/state/in-memory-state-store.js +12 -3
  124. package/dist/state/in-memory-state-store.js.map +1 -1
  125. package/dist/state/watch-state-document.d.ts +5 -0
  126. package/dist/state/watch-state-document.d.ts.map +1 -0
  127. package/dist/state/watch-state-document.js +444 -0
  128. package/dist/state/watch-state-document.js.map +1 -0
  129. package/dist/testing/deadline.d.ts +11 -0
  130. package/dist/testing/deadline.d.ts.map +1 -0
  131. package/dist/testing/deadline.js +23 -0
  132. package/dist/testing/deadline.js.map +1 -0
  133. package/dist/testing/fakes.d.ts +2 -0
  134. package/dist/testing/fakes.d.ts.map +1 -1
  135. package/dist/testing/fakes.js.map +1 -1
  136. package/dist/testing/index.d.ts +1 -0
  137. package/dist/testing/index.d.ts.map +1 -1
  138. package/dist/testing/index.js +1 -0
  139. package/dist/testing/index.js.map +1 -1
  140. package/dist/triage/heuristic.d.ts +5 -0
  141. package/dist/triage/heuristic.d.ts.map +1 -1
  142. package/dist/triage/heuristic.js +42 -3
  143. package/dist/triage/heuristic.js.map +1 -1
  144. package/dist/triage/index.d.ts +1 -1
  145. package/dist/triage/index.d.ts.map +1 -1
  146. package/dist/triage/index.js +1 -1
  147. package/dist/triage/index.js.map +1 -1
  148. package/dist/triage/schema.d.ts +73 -55
  149. package/dist/triage/schema.d.ts.map +1 -1
  150. package/dist/triage/schema.js +2 -1
  151. package/dist/triage/schema.js.map +1 -1
  152. package/dist/types.d.ts +51 -3
  153. package/dist/types.d.ts.map +1 -1
  154. package/dist/writeback/github.d.ts +22 -7
  155. package/dist/writeback/github.d.ts.map +1 -1
  156. package/dist/writeback/github.js +86 -16
  157. package/dist/writeback/github.js.map +1 -1
  158. package/dist/writeback/index.d.ts +1 -1
  159. package/dist/writeback/index.d.ts.map +1 -1
  160. package/dist/writeback/index.js +1 -1
  161. package/dist/writeback/index.js.map +1 -1
  162. package/package.json +13 -8
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  export declare const FACTORY_STATE_ROLES: readonly ["readyForAgent", "agentImplementing", "inPlanning", "done", "humanReview"];
3
3
  export type FactoryStateRole = (typeof FACTORY_STATE_ROLES)[number];
4
+ export declare const DEFAULT_AGENT_HOLD_TIMEOUT_MS: number;
4
5
  export declare const resolveRoutedRepo: (configured: string, org: string | undefined) => string | undefined;
5
6
  export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
6
7
  workspaceId: z.ZodOptional<z.ZodString>;
@@ -44,12 +45,31 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
44
45
  dispatch: z.ZodDefault<z.ZodObject<{
45
46
  errorCooldownMs: z.ZodDefault<z.ZodNumber>;
46
47
  maxAttempts: z.ZodDefault<z.ZodNumber>;
48
+ agentHoldTimeoutMs: z.ZodDefault<z.ZodNumber>;
47
49
  }, "strip", z.ZodTypeAny, {
48
50
  errorCooldownMs: number;
49
51
  maxAttempts: number;
52
+ agentHoldTimeoutMs: number;
50
53
  }, {
51
54
  errorCooldownMs?: number | undefined;
52
55
  maxAttempts?: number | undefined;
56
+ agentHoldTimeoutMs?: number | undefined;
57
+ }>>;
58
+ fleetHealth: z.ZodDefault<z.ZodObject<{
59
+ rosterTimeoutMs: z.ZodDefault<z.ZodNumber>;
60
+ failureThreshold: z.ZodDefault<z.ZodNumber>;
61
+ resetTimeoutMs: z.ZodDefault<z.ZodNumber>;
62
+ requireDedicatedBroker: z.ZodDefault<z.ZodBoolean>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ rosterTimeoutMs: number;
65
+ failureThreshold: number;
66
+ resetTimeoutMs: number;
67
+ requireDedicatedBroker: boolean;
68
+ }, {
69
+ rosterTimeoutMs?: number | undefined;
70
+ failureThreshold?: number | undefined;
71
+ resetTimeoutMs?: number | undefined;
72
+ requireDedicatedBroker?: boolean | undefined;
53
73
  }>>;
54
74
  loop: z.ZodDefault<z.ZodObject<{
55
75
  maxIterations: z.ZodDefault<z.ZodNumber>;
@@ -137,8 +157,8 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
137
157
  }, {
138
158
  implementer?: string | undefined;
139
159
  reviewer?: string | undefined;
140
- triage?: string | undefined;
141
160
  babysitter?: string | undefined;
161
+ triage?: string | undefined;
142
162
  }>>;
143
163
  agentCapabilities: z.ZodDefault<z.ZodObject<{
144
164
  implementer: z.ZodDefault<z.ZodEnum<["spawn:codex", "spawn:claude"]>>;
@@ -992,9 +1012,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
992
1012
  } | undefined;
993
1013
  }>>;
994
1014
  }, "strip", z.ZodTypeAny, {
995
- triage: {
996
- maxImplementers: number;
997
- };
998
1015
  babysitter: {
999
1016
  enabled: boolean;
1000
1017
  mode: "factory-created" | "routed-open-prs";
@@ -1002,6 +1019,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1002
1019
  excludePullRequests: string[];
1003
1020
  notifyHumans: boolean;
1004
1021
  };
1022
+ triage: {
1023
+ maxImplementers: number;
1024
+ };
1005
1025
  batchSize: number;
1006
1026
  linear: {
1007
1027
  states: {
@@ -1036,6 +1056,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1036
1056
  dispatch: {
1037
1057
  errorCooldownMs: number;
1038
1058
  maxAttempts: number;
1059
+ agentHoldTimeoutMs: number;
1060
+ };
1061
+ fleetHealth: {
1062
+ rosterTimeoutMs: number;
1063
+ failureThreshold: number;
1064
+ resetTimeoutMs: number;
1065
+ requireDedicatedBroker: boolean;
1039
1066
  };
1040
1067
  loop: {
1041
1068
  maxIterations: number;
@@ -1195,9 +1222,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1195
1222
  cloneRoot?: string | undefined;
1196
1223
  clonePaths?: Record<string, string> | undefined;
1197
1224
  };
1198
- triage?: {
1199
- maxImplementers?: number | undefined;
1200
- } | undefined;
1201
1225
  babysitter?: {
1202
1226
  enabled?: boolean | undefined;
1203
1227
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -1205,6 +1229,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1205
1229
  excludePullRequests?: string[] | undefined;
1206
1230
  notifyHumans?: boolean | undefined;
1207
1231
  } | undefined;
1232
+ triage?: {
1233
+ maxImplementers?: number | undefined;
1234
+ } | undefined;
1208
1235
  batchSize?: number | undefined;
1209
1236
  slack?: {
1210
1237
  channel: string;
@@ -1249,6 +1276,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1249
1276
  dispatch?: {
1250
1277
  errorCooldownMs?: number | undefined;
1251
1278
  maxAttempts?: number | undefined;
1279
+ agentHoldTimeoutMs?: number | undefined;
1280
+ } | undefined;
1281
+ fleetHealth?: {
1282
+ rosterTimeoutMs?: number | undefined;
1283
+ failureThreshold?: number | undefined;
1284
+ resetTimeoutMs?: number | undefined;
1285
+ requireDedicatedBroker?: boolean | undefined;
1252
1286
  } | undefined;
1253
1287
  loop?: {
1254
1288
  maxIterations?: number | undefined;
@@ -1260,8 +1294,8 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1260
1294
  models?: {
1261
1295
  implementer?: string | undefined;
1262
1296
  reviewer?: string | undefined;
1263
- triage?: string | undefined;
1264
1297
  babysitter?: string | undefined;
1298
+ triage?: string | undefined;
1265
1299
  } | undefined;
1266
1300
  agentCapabilities?: {
1267
1301
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -1370,9 +1404,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1370
1404
  } | undefined;
1371
1405
  } | undefined;
1372
1406
  }>, {
1373
- triage: {
1374
- maxImplementers: number;
1375
- };
1376
1407
  babysitter: {
1377
1408
  enabled: boolean;
1378
1409
  mode: "factory-created" | "routed-open-prs";
@@ -1380,6 +1411,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1380
1411
  excludePullRequests: string[];
1381
1412
  notifyHumans: boolean;
1382
1413
  };
1414
+ triage: {
1415
+ maxImplementers: number;
1416
+ };
1383
1417
  batchSize: number;
1384
1418
  linear: {
1385
1419
  states: {
@@ -1414,6 +1448,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1414
1448
  dispatch: {
1415
1449
  errorCooldownMs: number;
1416
1450
  maxAttempts: number;
1451
+ agentHoldTimeoutMs: number;
1452
+ };
1453
+ fleetHealth: {
1454
+ rosterTimeoutMs: number;
1455
+ failureThreshold: number;
1456
+ resetTimeoutMs: number;
1457
+ requireDedicatedBroker: boolean;
1417
1458
  };
1418
1459
  loop: {
1419
1460
  maxIterations: number;
@@ -1573,9 +1614,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1573
1614
  cloneRoot?: string | undefined;
1574
1615
  clonePaths?: Record<string, string> | undefined;
1575
1616
  };
1576
- triage?: {
1577
- maxImplementers?: number | undefined;
1578
- } | undefined;
1579
1617
  babysitter?: {
1580
1618
  enabled?: boolean | undefined;
1581
1619
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -1583,6 +1621,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1583
1621
  excludePullRequests?: string[] | undefined;
1584
1622
  notifyHumans?: boolean | undefined;
1585
1623
  } | undefined;
1624
+ triage?: {
1625
+ maxImplementers?: number | undefined;
1626
+ } | undefined;
1586
1627
  batchSize?: number | undefined;
1587
1628
  slack?: {
1588
1629
  channel: string;
@@ -1627,6 +1668,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1627
1668
  dispatch?: {
1628
1669
  errorCooldownMs?: number | undefined;
1629
1670
  maxAttempts?: number | undefined;
1671
+ agentHoldTimeoutMs?: number | undefined;
1672
+ } | undefined;
1673
+ fleetHealth?: {
1674
+ rosterTimeoutMs?: number | undefined;
1675
+ failureThreshold?: number | undefined;
1676
+ resetTimeoutMs?: number | undefined;
1677
+ requireDedicatedBroker?: boolean | undefined;
1630
1678
  } | undefined;
1631
1679
  loop?: {
1632
1680
  maxIterations?: number | undefined;
@@ -1638,8 +1686,8 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1638
1686
  models?: {
1639
1687
  implementer?: string | undefined;
1640
1688
  reviewer?: string | undefined;
1641
- triage?: string | undefined;
1642
1689
  babysitter?: string | undefined;
1690
+ triage?: string | undefined;
1643
1691
  } | undefined;
1644
1692
  agentCapabilities?: {
1645
1693
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -1781,9 +1829,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1781
1829
  org?: string | undefined;
1782
1830
  names?: string[] | undefined;
1783
1831
  };
1784
- triage: {
1785
- maxImplementers: number;
1786
- };
1787
1832
  babysitter: {
1788
1833
  enabled: boolean;
1789
1834
  mode: "factory-created" | "routed-open-prs";
@@ -1791,6 +1836,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1791
1836
  excludePullRequests: string[];
1792
1837
  notifyHumans: boolean;
1793
1838
  };
1839
+ triage: {
1840
+ maxImplementers: number;
1841
+ };
1794
1842
  batchSize: number;
1795
1843
  linear: {
1796
1844
  states: {
@@ -1819,6 +1867,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1819
1867
  dispatch: {
1820
1868
  errorCooldownMs: number;
1821
1869
  maxAttempts: number;
1870
+ agentHoldTimeoutMs: number;
1871
+ };
1872
+ fleetHealth: {
1873
+ rosterTimeoutMs: number;
1874
+ failureThreshold: number;
1875
+ resetTimeoutMs: number;
1876
+ requireDedicatedBroker: boolean;
1822
1877
  };
1823
1878
  loop: {
1824
1879
  maxIterations: number;
@@ -1951,9 +2006,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1951
2006
  cloneRoot?: string | undefined;
1952
2007
  clonePaths?: Record<string, string> | undefined;
1953
2008
  };
1954
- triage?: {
1955
- maxImplementers?: number | undefined;
1956
- } | undefined;
1957
2009
  babysitter?: {
1958
2010
  enabled?: boolean | undefined;
1959
2011
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -1961,6 +2013,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
1961
2013
  excludePullRequests?: string[] | undefined;
1962
2014
  notifyHumans?: boolean | undefined;
1963
2015
  } | undefined;
2016
+ triage?: {
2017
+ maxImplementers?: number | undefined;
2018
+ } | undefined;
1964
2019
  batchSize?: number | undefined;
1965
2020
  slack?: {
1966
2021
  channel: string;
@@ -2005,6 +2060,13 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
2005
2060
  dispatch?: {
2006
2061
  errorCooldownMs?: number | undefined;
2007
2062
  maxAttempts?: number | undefined;
2063
+ agentHoldTimeoutMs?: number | undefined;
2064
+ } | undefined;
2065
+ fleetHealth?: {
2066
+ rosterTimeoutMs?: number | undefined;
2067
+ failureThreshold?: number | undefined;
2068
+ resetTimeoutMs?: number | undefined;
2069
+ requireDedicatedBroker?: boolean | undefined;
2008
2070
  } | undefined;
2009
2071
  loop?: {
2010
2072
  maxIterations?: number | undefined;
@@ -2016,8 +2078,8 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObjec
2016
2078
  models?: {
2017
2079
  implementer?: string | undefined;
2018
2080
  reviewer?: string | undefined;
2019
- triage?: string | undefined;
2020
2081
  babysitter?: string | undefined;
2082
+ triage?: string | undefined;
2021
2083
  } | undefined;
2022
2084
  agentCapabilities?: {
2023
2085
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -2345,12 +2407,31 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
2345
2407
  dispatch: z.ZodDefault<z.ZodObject<{
2346
2408
  errorCooldownMs: z.ZodDefault<z.ZodNumber>;
2347
2409
  maxAttempts: z.ZodDefault<z.ZodNumber>;
2410
+ agentHoldTimeoutMs: z.ZodDefault<z.ZodNumber>;
2348
2411
  }, "strip", z.ZodTypeAny, {
2349
2412
  errorCooldownMs: number;
2350
2413
  maxAttempts: number;
2414
+ agentHoldTimeoutMs: number;
2351
2415
  }, {
2352
2416
  errorCooldownMs?: number | undefined;
2353
2417
  maxAttempts?: number | undefined;
2418
+ agentHoldTimeoutMs?: number | undefined;
2419
+ }>>;
2420
+ fleetHealth: z.ZodDefault<z.ZodObject<{
2421
+ rosterTimeoutMs: z.ZodDefault<z.ZodNumber>;
2422
+ failureThreshold: z.ZodDefault<z.ZodNumber>;
2423
+ resetTimeoutMs: z.ZodDefault<z.ZodNumber>;
2424
+ requireDedicatedBroker: z.ZodDefault<z.ZodBoolean>;
2425
+ }, "strip", z.ZodTypeAny, {
2426
+ rosterTimeoutMs: number;
2427
+ failureThreshold: number;
2428
+ resetTimeoutMs: number;
2429
+ requireDedicatedBroker: boolean;
2430
+ }, {
2431
+ rosterTimeoutMs?: number | undefined;
2432
+ failureThreshold?: number | undefined;
2433
+ resetTimeoutMs?: number | undefined;
2434
+ requireDedicatedBroker?: boolean | undefined;
2354
2435
  }>>;
2355
2436
  loop: z.ZodDefault<z.ZodObject<{
2356
2437
  maxIterations: z.ZodDefault<z.ZodNumber>;
@@ -2438,8 +2519,8 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
2438
2519
  }, {
2439
2520
  implementer?: string | undefined;
2440
2521
  reviewer?: string | undefined;
2441
- triage?: string | undefined;
2442
2522
  babysitter?: string | undefined;
2523
+ triage?: string | undefined;
2443
2524
  }>>;
2444
2525
  agentCapabilities: z.ZodDefault<z.ZodObject<{
2445
2526
  implementer: z.ZodDefault<z.ZodEnum<["spawn:codex", "spawn:claude"]>>;
@@ -3301,10 +3382,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3301
3382
  httpsPortRange?: [number, number] | undefined;
3302
3383
  }>>;
3303
3384
  }, "strip", z.ZodTypeAny, {
3304
- clonePaths: Record<string, string>;
3305
- triage: {
3306
- maxImplementers: number;
3307
- };
3308
3385
  babysitter: {
3309
3386
  enabled: boolean;
3310
3387
  mode: "factory-created" | "routed-open-prs";
@@ -3312,6 +3389,10 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3312
3389
  excludePullRequests: string[];
3313
3390
  notifyHumans: boolean;
3314
3391
  };
3392
+ clonePaths: Record<string, string>;
3393
+ triage: {
3394
+ maxImplementers: number;
3395
+ };
3315
3396
  batchSize: number;
3316
3397
  linear: {
3317
3398
  states: {
@@ -3346,6 +3427,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3346
3427
  dispatch: {
3347
3428
  errorCooldownMs: number;
3348
3429
  maxAttempts: number;
3430
+ agentHoldTimeoutMs: number;
3431
+ };
3432
+ fleetHealth: {
3433
+ rosterTimeoutMs: number;
3434
+ failureThreshold: number;
3435
+ resetTimeoutMs: number;
3436
+ requireDedicatedBroker: boolean;
3349
3437
  };
3350
3438
  loop: {
3351
3439
  maxIterations: number;
@@ -3510,11 +3598,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3510
3598
  cloneRoot?: string | undefined;
3511
3599
  clonePaths?: Record<string, string> | undefined;
3512
3600
  };
3513
- cloneRoot?: string | undefined;
3514
- clonePaths?: Record<string, string> | undefined;
3515
- triage?: {
3516
- maxImplementers?: number | undefined;
3517
- } | undefined;
3518
3601
  babysitter?: {
3519
3602
  enabled?: boolean | undefined;
3520
3603
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -3522,6 +3605,11 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3522
3605
  excludePullRequests?: string[] | undefined;
3523
3606
  notifyHumans?: boolean | undefined;
3524
3607
  } | undefined;
3608
+ cloneRoot?: string | undefined;
3609
+ clonePaths?: Record<string, string> | undefined;
3610
+ triage?: {
3611
+ maxImplementers?: number | undefined;
3612
+ } | undefined;
3525
3613
  batchSize?: number | undefined;
3526
3614
  slack?: {
3527
3615
  channel: string;
@@ -3566,6 +3654,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3566
3654
  dispatch?: {
3567
3655
  errorCooldownMs?: number | undefined;
3568
3656
  maxAttempts?: number | undefined;
3657
+ agentHoldTimeoutMs?: number | undefined;
3658
+ } | undefined;
3659
+ fleetHealth?: {
3660
+ rosterTimeoutMs?: number | undefined;
3661
+ failureThreshold?: number | undefined;
3662
+ resetTimeoutMs?: number | undefined;
3663
+ requireDedicatedBroker?: boolean | undefined;
3569
3664
  } | undefined;
3570
3665
  loop?: {
3571
3666
  maxIterations?: number | undefined;
@@ -3577,8 +3672,8 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3577
3672
  models?: {
3578
3673
  implementer?: string | undefined;
3579
3674
  reviewer?: string | undefined;
3580
- triage?: string | undefined;
3581
3675
  babysitter?: string | undefined;
3676
+ triage?: string | undefined;
3582
3677
  } | undefined;
3583
3678
  agentCapabilities?: {
3584
3679
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -3691,10 +3786,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3691
3786
  factoryLoopHeartbeatPath?: string | undefined;
3692
3787
  factoryLoopRegistryPath?: string | undefined;
3693
3788
  }>, {
3694
- clonePaths: Record<string, string>;
3695
- triage: {
3696
- maxImplementers: number;
3697
- };
3698
3789
  babysitter: {
3699
3790
  enabled: boolean;
3700
3791
  mode: "factory-created" | "routed-open-prs";
@@ -3702,6 +3793,10 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3702
3793
  excludePullRequests: string[];
3703
3794
  notifyHumans: boolean;
3704
3795
  };
3796
+ clonePaths: Record<string, string>;
3797
+ triage: {
3798
+ maxImplementers: number;
3799
+ };
3705
3800
  batchSize: number;
3706
3801
  linear: {
3707
3802
  states: {
@@ -3736,6 +3831,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3736
3831
  dispatch: {
3737
3832
  errorCooldownMs: number;
3738
3833
  maxAttempts: number;
3834
+ agentHoldTimeoutMs: number;
3835
+ };
3836
+ fleetHealth: {
3837
+ rosterTimeoutMs: number;
3838
+ failureThreshold: number;
3839
+ resetTimeoutMs: number;
3840
+ requireDedicatedBroker: boolean;
3739
3841
  };
3740
3842
  loop: {
3741
3843
  maxIterations: number;
@@ -3900,11 +4002,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3900
4002
  cloneRoot?: string | undefined;
3901
4003
  clonePaths?: Record<string, string> | undefined;
3902
4004
  };
3903
- cloneRoot?: string | undefined;
3904
- clonePaths?: Record<string, string> | undefined;
3905
- triage?: {
3906
- maxImplementers?: number | undefined;
3907
- } | undefined;
3908
4005
  babysitter?: {
3909
4006
  enabled?: boolean | undefined;
3910
4007
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -3912,6 +4009,11 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3912
4009
  excludePullRequests?: string[] | undefined;
3913
4010
  notifyHumans?: boolean | undefined;
3914
4011
  } | undefined;
4012
+ cloneRoot?: string | undefined;
4013
+ clonePaths?: Record<string, string> | undefined;
4014
+ triage?: {
4015
+ maxImplementers?: number | undefined;
4016
+ } | undefined;
3915
4017
  batchSize?: number | undefined;
3916
4018
  slack?: {
3917
4019
  channel: string;
@@ -3956,6 +4058,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3956
4058
  dispatch?: {
3957
4059
  errorCooldownMs?: number | undefined;
3958
4060
  maxAttempts?: number | undefined;
4061
+ agentHoldTimeoutMs?: number | undefined;
4062
+ } | undefined;
4063
+ fleetHealth?: {
4064
+ rosterTimeoutMs?: number | undefined;
4065
+ failureThreshold?: number | undefined;
4066
+ resetTimeoutMs?: number | undefined;
4067
+ requireDedicatedBroker?: boolean | undefined;
3959
4068
  } | undefined;
3960
4069
  loop?: {
3961
4070
  maxIterations?: number | undefined;
@@ -3967,8 +4076,8 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
3967
4076
  models?: {
3968
4077
  implementer?: string | undefined;
3969
4078
  reviewer?: string | undefined;
3970
- triage?: string | undefined;
3971
4079
  babysitter?: string | undefined;
4080
+ triage?: string | undefined;
3972
4081
  } | undefined;
3973
4082
  agentCapabilities?: {
3974
4083
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -4129,9 +4238,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4129
4238
  names?: string[] | undefined;
4130
4239
  org?: string | undefined;
4131
4240
  };
4132
- triage: {
4133
- maxImplementers: number;
4134
- };
4135
4241
  babysitter: {
4136
4242
  enabled: boolean;
4137
4243
  mode: "factory-created" | "routed-open-prs";
@@ -4139,6 +4245,9 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4139
4245
  excludePullRequests: string[];
4140
4246
  notifyHumans: boolean;
4141
4247
  };
4248
+ triage: {
4249
+ maxImplementers: number;
4250
+ };
4142
4251
  batchSize: number;
4143
4252
  linear: {
4144
4253
  states: {
@@ -4167,6 +4276,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4167
4276
  dispatch: {
4168
4277
  errorCooldownMs: number;
4169
4278
  maxAttempts: number;
4279
+ agentHoldTimeoutMs: number;
4280
+ };
4281
+ fleetHealth: {
4282
+ rosterTimeoutMs: number;
4283
+ failureThreshold: number;
4284
+ resetTimeoutMs: number;
4285
+ requireDedicatedBroker: boolean;
4170
4286
  };
4171
4287
  models: {
4172
4288
  babysitter: string;
@@ -4294,11 +4410,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4294
4410
  cloneRoot?: string | undefined;
4295
4411
  clonePaths?: Record<string, string> | undefined;
4296
4412
  };
4297
- cloneRoot?: string | undefined;
4298
- clonePaths?: Record<string, string> | undefined;
4299
- triage?: {
4300
- maxImplementers?: number | undefined;
4301
- } | undefined;
4302
4413
  babysitter?: {
4303
4414
  enabled?: boolean | undefined;
4304
4415
  mode?: "factory-created" | "routed-open-prs" | undefined;
@@ -4306,6 +4417,11 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4306
4417
  excludePullRequests?: string[] | undefined;
4307
4418
  notifyHumans?: boolean | undefined;
4308
4419
  } | undefined;
4420
+ cloneRoot?: string | undefined;
4421
+ clonePaths?: Record<string, string> | undefined;
4422
+ triage?: {
4423
+ maxImplementers?: number | undefined;
4424
+ } | undefined;
4309
4425
  batchSize?: number | undefined;
4310
4426
  slack?: {
4311
4427
  channel: string;
@@ -4350,6 +4466,13 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4350
4466
  dispatch?: {
4351
4467
  errorCooldownMs?: number | undefined;
4352
4468
  maxAttempts?: number | undefined;
4469
+ agentHoldTimeoutMs?: number | undefined;
4470
+ } | undefined;
4471
+ fleetHealth?: {
4472
+ rosterTimeoutMs?: number | undefined;
4473
+ failureThreshold?: number | undefined;
4474
+ resetTimeoutMs?: number | undefined;
4475
+ requireDedicatedBroker?: boolean | undefined;
4353
4476
  } | undefined;
4354
4477
  loop?: {
4355
4478
  maxIterations?: number | undefined;
@@ -4361,8 +4484,8 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<
4361
4484
  models?: {
4362
4485
  implementer?: string | undefined;
4363
4486
  reviewer?: string | undefined;
4364
- triage?: string | undefined;
4365
4487
  babysitter?: string | undefined;
4488
+ triage?: string | undefined;
4366
4489
  } | undefined;
4367
4490
  agentCapabilities?: {
4368
4491
  implementer?: "spawn:codex" | "spawn:claude" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,eAAO,MAAM,mBAAmB,sFAMtB,CAAA;AACV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAkWnE,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAGxF,CAAA;AA+BD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;QA3WhC,8FAA8F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4I9F,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6C5E,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8KjC,CAAA;AACpD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;YAlO3B,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4NqB,CAAA;AACnG,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;QA/W9B,8FAA8F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+L9F,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAnDnF,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+N5B,CAAA;AAsIlD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,MAAM,CAOxE;AAMD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,eAAe,CAAA;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAgBrE;AA6FD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;AACjE,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,mBAAmB,sFAMtB,CAAA;AACV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AA6BnE,eAAO,MAAM,6BAA6B,QAAkB,CAAA;AAyV5D,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAGxF,CAAA;AA+BD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;QA/XhC,8FAA8F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA+J9F,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6C5E,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+KjC,CAAA;AACpD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;YAnO3B,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6NqB,CAAA;AACnG,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;QAnY9B,8FAA8F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkN9F,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAnDnF,sEAAsE;;YAEtE,+EAA+E;;YAE/E,2EAA2E;;YAE3E,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgO5B,CAAA;AAsIlD,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,MAAM,CAOxE;AAMD,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,eAAe,CAAA;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAgBrE;AA6FD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;AACjE,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { isAbsolute, join } from 'node:path';
3
3
  import { z } from 'zod';
4
+ import { DEFAULT_FLEET_CONTROL_FAILURE_THRESHOLD, DEFAULT_FLEET_CONTROL_RESET_TIMEOUT_MS, DEFAULT_FLEET_ROSTER_TIMEOUT_MS, } from '../fleet/control-plane-circuit.js';
4
5
  import { KubernetesEnvironmentConfigSchema } from '../environments/connection-registry.js';
5
6
  // The five workflow-state roles the factory drives an issue through. Each is
6
7
  // configured either by name (config.linear.states.<role>, resolved to a
@@ -36,9 +37,26 @@ const liveSubscriptionSchema = z.object({
36
37
  /** Independent source-of-truth sweep; live event watermarks remain a latency optimization. */
37
38
  reconcileIntervalMs: z.number().int().min(50).default(60_000),
38
39
  }).default({});
40
+ export const DEFAULT_AGENT_HOLD_TIMEOUT_MS = 4 * 60 * 60_000;
39
41
  const dispatchSchema = z.object({
40
42
  errorCooldownMs: z.number().int().min(0).default(60_000),
41
43
  maxAttempts: z.number().int().min(1).max(5).default(2),
44
+ // Terminal delivery is not guaranteed: a daemon crash, stalled reviewer, or
45
+ // dropped writeback can otherwise leave an already-idle team allocated
46
+ // forever. This bounds the wall-clock interval from the first successful
47
+ // agent placement until terminal cleanup.
48
+ agentHoldTimeoutMs: z.number().int().min(1).max(7 * 24 * 60 * 60_000)
49
+ .default(DEFAULT_AGENT_HOLD_TIMEOUT_MS),
50
+ }).default({});
51
+ const fleetHealthSchema = z.object({
52
+ // Roster is read-only, so Factory can safely bound it locally. Mutating
53
+ // spawn/resume calls are never abandoned behind a local timeout.
54
+ rosterTimeoutMs: z.number().int().min(100).max(60_000).default(DEFAULT_FLEET_ROSTER_TIMEOUT_MS),
55
+ failureThreshold: z.number().int().min(1).max(10).default(DEFAULT_FLEET_CONTROL_FAILURE_THRESHOLD),
56
+ resetTimeoutMs: z.number().int().min(1_000).max(15 * 60_000).default(DEFAULT_FLEET_CONTROL_RESET_TIMEOUT_MS),
57
+ // Production launchers can require an explicit, non-project broker state
58
+ // directory so Factory never silently shares an interactive broker.
59
+ requireDedicatedBroker: z.boolean().default(false),
42
60
  }).default({});
43
61
  const loopSchema = z.object({
44
62
  maxIterations: z.number().int().min(1).max(5).default(3),
@@ -199,10 +217,10 @@ const previewSchema = z.object({
199
217
  }
200
218
  }).optional();
201
219
  const githubSchema = z.object({
202
- // Controls the credential identity used when Factory creates pull requests.
203
- // `auto` preserves the compatibility behavior: prefer the connected
204
- // workspace GitHub App, then use the operator's local `gh` authentication
205
- // when the app write path is unavailable.
220
+ // Controls the credential identity used for GitHub writes. Exact `app`
221
+ // selects the connected App for both PR publication and issue lifecycle
222
+ // writes. `auto` preserves compatibility: PRs prefer the App, while issue
223
+ // lifecycle writes retain the operator's local `gh` authentication.
206
224
  identity: z.enum(['app', 'user', 'auto']).default('auto'),
207
225
  }).default({});
208
226
  const verificationSchema = z.object({
@@ -262,10 +280,11 @@ const WorkspaceConfigObjectSchema = z.object({
262
280
  subscription: subscriptionSchema,
263
281
  liveSubscription: liveSubscriptionSchema,
264
282
  dispatch: dispatchSchema,
283
+ fleetHealth: fleetHealthSchema,
265
284
  loop: loopSchema,
266
285
  triage: triageSchema,
267
286
  repos: workspaceReposSchema,
268
- batchSize: z.number().int().min(1).max(5).default(5),
287
+ batchSize: z.number().int().min(1).max(5).default(1),
269
288
  models: modelsSchema,
270
289
  agentCapabilities: agentCapabilitiesSchema,
271
290
  slack: slackSchema,