oh-my-codex 0.18.5 → 0.18.7

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 (297) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +56 -7
  4. package/dist/agents/__tests__/definitions.test.js +11 -0
  5. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  6. package/dist/agents/__tests__/native-config.test.js +14 -5
  7. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  8. package/dist/agents/definitions.d.ts +2 -0
  9. package/dist/agents/definitions.d.ts.map +1 -1
  10. package/dist/agents/definitions.js +4 -1
  11. package/dist/agents/definitions.js.map +1 -1
  12. package/dist/agents/native-config.js +2 -2
  13. package/dist/agents/native-config.js.map +1 -1
  14. package/dist/autopilot/__tests__/fsm.test.d.ts +2 -0
  15. package/dist/autopilot/__tests__/fsm.test.d.ts.map +1 -0
  16. package/dist/autopilot/__tests__/fsm.test.js +75 -0
  17. package/dist/autopilot/__tests__/fsm.test.js.map +1 -0
  18. package/dist/autopilot/__tests__/ralplan-gate.test.d.ts +2 -0
  19. package/dist/autopilot/__tests__/ralplan-gate.test.d.ts.map +1 -0
  20. package/dist/autopilot/__tests__/ralplan-gate.test.js +79 -0
  21. package/dist/autopilot/__tests__/ralplan-gate.test.js.map +1 -0
  22. package/dist/autopilot/deep-interview-gate.d.ts +18 -0
  23. package/dist/autopilot/deep-interview-gate.d.ts.map +1 -0
  24. package/dist/autopilot/deep-interview-gate.js +256 -0
  25. package/dist/autopilot/deep-interview-gate.js.map +1 -0
  26. package/dist/autopilot/fsm.d.ts +13 -0
  27. package/dist/autopilot/fsm.d.ts.map +1 -0
  28. package/dist/autopilot/fsm.js +70 -0
  29. package/dist/autopilot/fsm.js.map +1 -0
  30. package/dist/autopilot/ralplan-gate.d.ts +17 -0
  31. package/dist/autopilot/ralplan-gate.d.ts.map +1 -0
  32. package/dist/autopilot/ralplan-gate.js +61 -0
  33. package/dist/autopilot/ralplan-gate.js.map +1 -0
  34. package/dist/cli/__tests__/index.test.js +24 -4
  35. package/dist/cli/__tests__/index.test.js.map +1 -1
  36. package/dist/cli/__tests__/launch-fallback.test.js +175 -6
  37. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  38. package/dist/cli/__tests__/question.test.js +100 -0
  39. package/dist/cli/__tests__/question.test.js.map +1 -1
  40. package/dist/cli/__tests__/setup-refresh.test.js +18 -0
  41. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  42. package/dist/cli/__tests__/team.test.js +2 -2
  43. package/dist/cli/__tests__/team.test.js.map +1 -1
  44. package/dist/cli/index.d.ts +3 -1
  45. package/dist/cli/index.d.ts.map +1 -1
  46. package/dist/cli/index.js +191 -36
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/question.d.ts.map +1 -1
  49. package/dist/cli/question.js +36 -5
  50. package/dist/cli/question.js.map +1 -1
  51. package/dist/config/__tests__/deep-interview.test.js +7 -6
  52. package/dist/config/__tests__/deep-interview.test.js.map +1 -1
  53. package/dist/config/deep-interview.d.ts.map +1 -1
  54. package/dist/config/deep-interview.js +14 -4
  55. package/dist/config/deep-interview.js.map +1 -1
  56. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +8 -0
  57. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  58. package/dist/hooks/__tests__/deep-interview-contract.test.js +10 -0
  59. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  60. package/dist/hooks/__tests__/keyword-detector.test.js +649 -11
  61. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  62. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +63 -0
  63. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  64. package/dist/hooks/__tests__/session.test.js +25 -0
  65. package/dist/hooks/__tests__/session.test.js.map +1 -1
  66. package/dist/hooks/deep-interview-config-instruction.js +1 -1
  67. package/dist/hooks/deep-interview-config-instruction.js.map +1 -1
  68. package/dist/hooks/keyword-detector.d.ts +1 -0
  69. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  70. package/dist/hooks/keyword-detector.js +171 -21
  71. package/dist/hooks/keyword-detector.js.map +1 -1
  72. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  73. package/dist/hooks/keyword-registry.js +1 -0
  74. package/dist/hooks/keyword-registry.js.map +1 -1
  75. package/dist/hooks/session.d.ts +2 -0
  76. package/dist/hooks/session.d.ts.map +1 -1
  77. package/dist/hooks/session.js +13 -5
  78. package/dist/hooks/session.js.map +1 -1
  79. package/dist/hud/__tests__/authority.test.js +35 -0
  80. package/dist/hud/__tests__/authority.test.js.map +1 -1
  81. package/dist/hud/__tests__/index.test.js +320 -3
  82. package/dist/hud/__tests__/index.test.js.map +1 -1
  83. package/dist/hud/__tests__/reconcile.test.js +117 -14
  84. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  85. package/dist/hud/__tests__/render.test.js +117 -8
  86. package/dist/hud/__tests__/render.test.js.map +1 -1
  87. package/dist/hud/__tests__/state.test.js +80 -0
  88. package/dist/hud/__tests__/state.test.js.map +1 -1
  89. package/dist/hud/__tests__/tmux.test.js +134 -1
  90. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  91. package/dist/hud/authority.d.ts.map +1 -1
  92. package/dist/hud/authority.js +13 -2
  93. package/dist/hud/authority.js.map +1 -1
  94. package/dist/hud/colors.d.ts +1 -0
  95. package/dist/hud/colors.d.ts.map +1 -1
  96. package/dist/hud/colors.js +4 -0
  97. package/dist/hud/colors.js.map +1 -1
  98. package/dist/hud/constants.d.ts +3 -2
  99. package/dist/hud/constants.d.ts.map +1 -1
  100. package/dist/hud/constants.js +3 -2
  101. package/dist/hud/constants.js.map +1 -1
  102. package/dist/hud/index.d.ts +20 -1
  103. package/dist/hud/index.d.ts.map +1 -1
  104. package/dist/hud/index.js +99 -18
  105. package/dist/hud/index.js.map +1 -1
  106. package/dist/hud/reconcile.d.ts +2 -1
  107. package/dist/hud/reconcile.d.ts.map +1 -1
  108. package/dist/hud/reconcile.js +6 -3
  109. package/dist/hud/reconcile.js.map +1 -1
  110. package/dist/hud/render.d.ts +1 -0
  111. package/dist/hud/render.d.ts.map +1 -1
  112. package/dist/hud/render.js +69 -17
  113. package/dist/hud/render.js.map +1 -1
  114. package/dist/hud/state.d.ts.map +1 -1
  115. package/dist/hud/state.js +16 -1
  116. package/dist/hud/state.js.map +1 -1
  117. package/dist/hud/tmux.d.ts +2 -0
  118. package/dist/hud/tmux.d.ts.map +1 -1
  119. package/dist/hud/tmux.js +39 -2
  120. package/dist/hud/tmux.js.map +1 -1
  121. package/dist/mcp/__tests__/hermes-bridge.test.js +203 -7
  122. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
  123. package/dist/mcp/__tests__/state-server.test.js +13 -1
  124. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  125. package/dist/mcp/hermes-bridge.d.ts +12 -2
  126. package/dist/mcp/hermes-bridge.d.ts.map +1 -1
  127. package/dist/mcp/hermes-bridge.js +83 -9
  128. package/dist/mcp/hermes-bridge.js.map +1 -1
  129. package/dist/modes/__tests__/base-autoresearch-contract.test.js +7 -1
  130. package/dist/modes/__tests__/base-autoresearch-contract.test.js.map +1 -1
  131. package/dist/pipeline/__tests__/stages.test.js +130 -0
  132. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  133. package/dist/pipeline/orchestrator.js +1 -1
  134. package/dist/pipeline/orchestrator.js.map +1 -1
  135. package/dist/pipeline/stages/ralplan.d.ts +1 -0
  136. package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
  137. package/dist/pipeline/stages/ralplan.js +14 -5
  138. package/dist/pipeline/stages/ralplan.js.map +1 -1
  139. package/dist/question/__tests__/deep-interview.test.js +160 -2
  140. package/dist/question/__tests__/deep-interview.test.js.map +1 -1
  141. package/dist/question/__tests__/policy.test.js +63 -3
  142. package/dist/question/__tests__/policy.test.js.map +1 -1
  143. package/dist/question/__tests__/renderer.test.js +191 -2
  144. package/dist/question/__tests__/renderer.test.js.map +1 -1
  145. package/dist/question/__tests__/state.test.js +94 -3
  146. package/dist/question/__tests__/state.test.js.map +1 -1
  147. package/dist/question/__tests__/ui.test.js +4 -0
  148. package/dist/question/__tests__/ui.test.js.map +1 -1
  149. package/dist/question/autopilot-wait.d.ts +12 -2
  150. package/dist/question/autopilot-wait.d.ts.map +1 -1
  151. package/dist/question/autopilot-wait.js +158 -47
  152. package/dist/question/autopilot-wait.js.map +1 -1
  153. package/dist/question/deep-interview.d.ts.map +1 -1
  154. package/dist/question/deep-interview.js +22 -6
  155. package/dist/question/deep-interview.js.map +1 -1
  156. package/dist/question/policy.d.ts.map +1 -1
  157. package/dist/question/policy.js +2 -5
  158. package/dist/question/policy.js.map +1 -1
  159. package/dist/question/renderer.d.ts +12 -0
  160. package/dist/question/renderer.d.ts.map +1 -1
  161. package/dist/question/renderer.js +87 -3
  162. package/dist/question/renderer.js.map +1 -1
  163. package/dist/question/state.d.ts +8 -1
  164. package/dist/question/state.d.ts.map +1 -1
  165. package/dist/question/state.js +54 -14
  166. package/dist/question/state.js.map +1 -1
  167. package/dist/question/types.d.ts +1 -1
  168. package/dist/question/types.d.ts.map +1 -1
  169. package/dist/question/ui.d.ts +1 -0
  170. package/dist/question/ui.d.ts.map +1 -1
  171. package/dist/question/ui.js +1 -0
  172. package/dist/question/ui.js.map +1 -1
  173. package/dist/ralplan/__tests__/runtime.test.js +191 -0
  174. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  175. package/dist/ralplan/consensus-gate.d.ts +9 -1
  176. package/dist/ralplan/consensus-gate.d.ts.map +1 -1
  177. package/dist/ralplan/consensus-gate.js +84 -2
  178. package/dist/ralplan/consensus-gate.js.map +1 -1
  179. package/dist/ralplan/runtime.d.ts +9 -0
  180. package/dist/ralplan/runtime.d.ts.map +1 -1
  181. package/dist/ralplan/runtime.js +32 -11
  182. package/dist/ralplan/runtime.js.map +1 -1
  183. package/dist/scripts/__tests__/codex-native-hook.test.js +1487 -34
  184. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  185. package/dist/scripts/check-version-sync.js +8 -4
  186. package/dist/scripts/check-version-sync.js.map +1 -1
  187. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  188. package/dist/scripts/codex-native-hook.js +356 -38
  189. package/dist/scripts/codex-native-hook.js.map +1 -1
  190. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  191. package/dist/scripts/codex-native-pre-post.js +79 -1
  192. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  193. package/dist/scripts/hook-payload-guard.d.ts +9 -0
  194. package/dist/scripts/hook-payload-guard.d.ts.map +1 -0
  195. package/dist/scripts/hook-payload-guard.js +111 -0
  196. package/dist/scripts/hook-payload-guard.js.map +1 -0
  197. package/dist/scripts/notify-fallback-watcher.js +8 -1
  198. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  199. package/dist/scripts/notify-hook/__tests__/payload-guard.test.d.ts +2 -0
  200. package/dist/scripts/notify-hook/__tests__/payload-guard.test.d.ts.map +1 -0
  201. package/dist/scripts/notify-hook/__tests__/payload-guard.test.js +39 -0
  202. package/dist/scripts/notify-hook/__tests__/payload-guard.test.js.map +1 -0
  203. package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -1
  204. package/dist/scripts/notify-hook/team-worker-stop.js +234 -86
  205. package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -1
  206. package/dist/scripts/notify-hook.js +11 -2
  207. package/dist/scripts/notify-hook.js.map +1 -1
  208. package/dist/state/__tests__/operations.test.js +1012 -1
  209. package/dist/state/__tests__/operations.test.js.map +1 -1
  210. package/dist/state/__tests__/skill-active.test.js +59 -1
  211. package/dist/state/__tests__/skill-active.test.js.map +1 -1
  212. package/dist/state/__tests__/workflow-transition.test.js +73 -7
  213. package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
  214. package/dist/state/operations.d.ts.map +1 -1
  215. package/dist/state/operations.js +102 -0
  216. package/dist/state/operations.js.map +1 -1
  217. package/dist/state/skill-active.d.ts.map +1 -1
  218. package/dist/state/skill-active.js +33 -3
  219. package/dist/state/skill-active.js.map +1 -1
  220. package/dist/state/workflow-transition-reconcile.d.ts +6 -0
  221. package/dist/state/workflow-transition-reconcile.d.ts.map +1 -1
  222. package/dist/state/workflow-transition-reconcile.js +28 -1
  223. package/dist/state/workflow-transition-reconcile.js.map +1 -1
  224. package/dist/state/workflow-transition.d.ts.map +1 -1
  225. package/dist/state/workflow-transition.js +10 -3
  226. package/dist/state/workflow-transition.js.map +1 -1
  227. package/dist/subagents/__tests__/tracker.test.js +139 -0
  228. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  229. package/dist/subagents/tracker.d.ts +3 -0
  230. package/dist/subagents/tracker.d.ts.map +1 -1
  231. package/dist/subagents/tracker.js +41 -4
  232. package/dist/subagents/tracker.js.map +1 -1
  233. package/dist/team/__tests__/coordination-protocol.test.d.ts +2 -0
  234. package/dist/team/__tests__/coordination-protocol.test.d.ts.map +1 -0
  235. package/dist/team/__tests__/coordination-protocol.test.js +173 -0
  236. package/dist/team/__tests__/coordination-protocol.test.js.map +1 -0
  237. package/dist/team/__tests__/runtime.test.js +51 -2
  238. package/dist/team/__tests__/runtime.test.js.map +1 -1
  239. package/dist/team/__tests__/state.test.js +83 -0
  240. package/dist/team/__tests__/state.test.js.map +1 -1
  241. package/dist/team/__tests__/tmux-session.test.js +45 -0
  242. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  243. package/dist/team/__tests__/worker-bootstrap.test.js +84 -0
  244. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  245. package/dist/team/coordination-protocol.d.ts +14 -0
  246. package/dist/team/coordination-protocol.d.ts.map +1 -0
  247. package/dist/team/coordination-protocol.js +244 -0
  248. package/dist/team/coordination-protocol.js.map +1 -0
  249. package/dist/team/runtime.d.ts +1 -0
  250. package/dist/team/runtime.d.ts.map +1 -1
  251. package/dist/team/runtime.js +19 -3
  252. package/dist/team/runtime.js.map +1 -1
  253. package/dist/team/state/tasks.d.ts.map +1 -1
  254. package/dist/team/state/tasks.js +24 -0
  255. package/dist/team/state/tasks.js.map +1 -1
  256. package/dist/team/state/types.d.ts +21 -1
  257. package/dist/team/state/types.d.ts.map +1 -1
  258. package/dist/team/state/types.js.map +1 -1
  259. package/dist/team/state.d.ts +17 -1
  260. package/dist/team/state.d.ts.map +1 -1
  261. package/dist/team/state.js +12 -5
  262. package/dist/team/state.js.map +1 -1
  263. package/dist/team/team-ops.d.ts +1 -1
  264. package/dist/team/team-ops.d.ts.map +1 -1
  265. package/dist/team/team-ops.js.map +1 -1
  266. package/dist/team/tmux-session.d.ts.map +1 -1
  267. package/dist/team/tmux-session.js +19 -1
  268. package/dist/team/tmux-session.js.map +1 -1
  269. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  270. package/dist/team/worker-bootstrap.js +63 -0
  271. package/dist/team/worker-bootstrap.js.map +1 -1
  272. package/dist/utils/__tests__/agents-model-table.test.js +4 -2
  273. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
  274. package/dist/utils/agents-model-table.d.ts.map +1 -1
  275. package/dist/utils/agents-model-table.js +3 -0
  276. package/dist/utils/agents-model-table.js.map +1 -1
  277. package/package.json +1 -1
  278. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  279. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +10 -5
  280. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +9 -4
  281. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +12 -0
  282. package/plugins/oh-my-codex/skills/team/SKILL.md +16 -0
  283. package/plugins/oh-my-codex/skills/worker/SKILL.md +14 -0
  284. package/skills/autopilot/SKILL.md +10 -5
  285. package/skills/deep-interview/SKILL.md +9 -4
  286. package/skills/ralplan/SKILL.md +12 -0
  287. package/skills/team/SKILL.md +16 -0
  288. package/skills/worker/SKILL.md +14 -0
  289. package/src/scripts/__tests__/codex-native-hook.test.ts +2202 -523
  290. package/src/scripts/check-version-sync.ts +8 -4
  291. package/src/scripts/codex-native-hook.ts +444 -36
  292. package/src/scripts/codex-native-pre-post.ts +80 -0
  293. package/src/scripts/hook-payload-guard.ts +113 -0
  294. package/src/scripts/notify-fallback-watcher.ts +8 -1
  295. package/src/scripts/notify-hook/__tests__/payload-guard.test.ts +41 -0
  296. package/src/scripts/notify-hook/team-worker-stop.ts +193 -52
  297. package/src/scripts/notify-hook.ts +14 -2
@@ -11,6 +11,7 @@ import { remapRepoAwareDecompositionMetadataToCreatedTasks, } from './repo-aware
11
11
  import { generateWorkerOverlay, writeTeamWorkerInstructionsFile, removeTeamWorkerInstructionsFile, writeWorkerWorktreeRootAgentsFile, removeWorkerWorktreeRootAgentsFile, generateInitialInbox, generateTaskAssignmentInbox, generateShutdownInbox, buildTriggerDirective, buildMailboxTriggerDirective, buildLeaderMailboxTriggerDirective, writeWorkerRoleInstructionsFile, } from './worker-bootstrap.js';
12
12
  import { buildTeamWorkerGoalInstruction } from './goal-workflow.js';
13
13
  import { synthesizeDelegationPlan } from './delegation-policy.js';
14
+ import { coordinationPlansEqual, synthesizeCoordinationPlan, synthesizeCoordinationPlans } from './coordination-protocol.js';
14
15
  import { loadRolePrompt } from './role-router.js';
15
16
  import { composeRoleInstructionsForRole } from '../agents/native-config.js';
16
17
  import { codexPromptsDir } from '../utils/paths.js';
@@ -1794,8 +1795,12 @@ export async function startTeam(teamName, task, agentType, workerCount, tasks, c
1794
1795
  // 4. Create tasks. Repo-aware DAG dependencies are symbolic until the
1795
1796
  // state layer returns concrete task IDs, so create those tasks dependency
1796
1797
  // free and patch runtime dependency fields after ID assignment.
1798
+ const coordinationPlans = synthesizeCoordinationPlans(tasks.map((task) => ({
1799
+ ...task,
1800
+ depends_on: task.depends_on ?? task.blocked_by ?? task.symbolic_depends_on,
1801
+ })));
1797
1802
  const createdTasks = [];
1798
- for (const t of tasks) {
1803
+ for (const [taskIndex, t] of tasks.entries()) {
1799
1804
  const hasSymbolicDagIdentity = Boolean(t.symbolic_id);
1800
1805
  const created = await createStateTask(sanitized, {
1801
1806
  subject: t.subject,
@@ -1806,6 +1811,9 @@ export async function startTeam(teamName, task, agentType, workerCount, tasks, c
1806
1811
  depends_on: hasSymbolicDagIdentity ? undefined : t.depends_on ?? t.blocked_by,
1807
1812
  role: t.role,
1808
1813
  delegation: t.delegation ?? synthesizeDelegationPlan(t),
1814
+ coordination: t.coordination
1815
+ ? { ...t.coordination, source: 'explicit' }
1816
+ : coordinationPlans[taskIndex] ?? synthesizeCoordinationPlan(t),
1809
1817
  requires_code_change: t.requires_code_change,
1810
1818
  filePaths: t.filePaths,
1811
1819
  domains: t.domains,
@@ -2576,9 +2584,17 @@ export async function assignTask(teamName, workerName, taskId, cwd) {
2576
2584
  const approvedContextSection = joinContextSections(approvedExecutionState.status === 'valid'
2577
2585
  ? buildApprovedTeamHandoffSection(approvedExecutionState.approvedHint)
2578
2586
  : undefined, renderLeaderOwnedUltragoalContextSection(persistedUltragoalContext));
2579
- const taskForInbox = task.delegation
2587
+ const currentTasks = await listTasks(sanitized, cwd);
2588
+ const currentCoordinationPlan = currentTasks.length > 0
2589
+ ? synthesizeCoordinationPlans(currentTasks).find((_, index) => currentTasks[index]?.id === task.id) ?? synthesizeCoordinationPlan(task)
2590
+ : synthesizeCoordinationPlan(task);
2591
+ const hasCurrentCoordination = task.coordination?.source === 'explicit' || coordinationPlansEqual(task.coordination, currentCoordinationPlan);
2592
+ const taskForInbox = task.delegation && hasCurrentCoordination
2580
2593
  ? task
2581
- : (await updateTask(sanitized, taskId, { delegation: synthesizeDelegationPlan(task) }, cwd)) ?? task;
2594
+ : (await updateTask(sanitized, taskId, {
2595
+ delegation: task.delegation ?? synthesizeDelegationPlan(task),
2596
+ coordination: task.coordination?.source === 'explicit' ? task.coordination : currentCoordinationPlan,
2597
+ }, cwd)) ?? task;
2582
2598
  const inbox = generateTaskAssignmentInbox(workerName, sanitized, taskForInbox, { approvedContextSection });
2583
2599
  const maxAssignRetries = 2;
2584
2600
  const assignRetryDelayS = 2;