oh-my-codex 0.18.16 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/crates/omx-sparkshell/tests/execution.rs +8 -1
  4. package/dist/agents/__tests__/definitions.test.js +5 -5
  5. package/dist/agents/__tests__/definitions.test.js.map +1 -1
  6. package/dist/agents/__tests__/native-config.test.js +18 -14
  7. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  8. package/dist/agents/definitions.d.ts +2 -2
  9. package/dist/agents/definitions.d.ts.map +1 -1
  10. package/dist/agents/definitions.js +4 -4
  11. package/dist/agents/definitions.js.map +1 -1
  12. package/dist/agents/native-config.d.ts +1 -0
  13. package/dist/agents/native-config.d.ts.map +1 -1
  14. package/dist/agents/native-config.js +18 -16
  15. package/dist/agents/native-config.js.map +1 -1
  16. package/dist/auth/hotswap.d.ts.map +1 -1
  17. package/dist/auth/hotswap.js +17 -4
  18. package/dist/auth/hotswap.js.map +1 -1
  19. package/dist/autopilot/__tests__/planner-routing.test.js +2 -2
  20. package/dist/autopilot/__tests__/planner-routing.test.js.map +1 -1
  21. package/dist/autopilot/fsm.d.ts +1 -1
  22. package/dist/autopilot/fsm.d.ts.map +1 -1
  23. package/dist/autopilot/fsm.js +1 -1
  24. package/dist/autopilot/fsm.js.map +1 -1
  25. package/dist/cli/__tests__/auth.test.js +78 -3
  26. package/dist/cli/__tests__/auth.test.js.map +1 -1
  27. package/dist/cli/__tests__/codex-plugin-layout.test.js +30 -5
  28. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
  29. package/dist/cli/__tests__/doctor-warning-copy.test.js +2 -0
  30. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  31. package/dist/cli/__tests__/index.test.js +96 -8
  32. package/dist/cli/__tests__/index.test.js.map +1 -1
  33. package/dist/cli/__tests__/launch-fallback.test.js +135 -1
  34. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  35. package/dist/cli/__tests__/mcp-parity.test.js +2 -4
  36. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  37. package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js +14 -0
  38. package/dist/cli/__tests__/plugin-marketplace-idempotent.test.js.map +1 -1
  39. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +8 -0
  40. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  41. package/dist/cli/__tests__/resume.test.js +229 -1
  42. package/dist/cli/__tests__/resume.test.js.map +1 -1
  43. package/dist/cli/__tests__/session-scoped-runtime.test.js +46 -0
  44. package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
  45. package/dist/cli/__tests__/setup-install-mode.test.js +37 -0
  46. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  47. package/dist/cli/__tests__/ultragoal.test.js +21 -0
  48. package/dist/cli/__tests__/ultragoal.test.js.map +1 -1
  49. package/dist/cli/__tests__/version.test.js +13 -1
  50. package/dist/cli/__tests__/version.test.js.map +1 -1
  51. package/dist/cli/auth.d.ts +1 -1
  52. package/dist/cli/auth.d.ts.map +1 -1
  53. package/dist/cli/auth.js +49 -9
  54. package/dist/cli/auth.js.map +1 -1
  55. package/dist/cli/index.d.ts +25 -2
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +233 -32
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  60. package/dist/cli/plugin-marketplace.js +22 -1
  61. package/dist/cli/plugin-marketplace.js.map +1 -1
  62. package/dist/cli/ralph.d.ts.map +1 -1
  63. package/dist/cli/ralph.js +4 -0
  64. package/dist/cli/ralph.js.map +1 -1
  65. package/dist/cli/setup.d.ts.map +1 -1
  66. package/dist/cli/setup.js +3 -1
  67. package/dist/cli/setup.js.map +1 -1
  68. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +7 -0
  69. package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
  70. package/dist/goal-workflows/codex-goal-snapshot.js +1 -1
  71. package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
  72. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +12 -0
  73. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  74. package/dist/hooks/__tests__/keyword-detector.test.js +267 -7
  75. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  76. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  77. package/dist/hooks/keyword-detector.js +143 -30
  78. package/dist/hooks/keyword-detector.js.map +1 -1
  79. package/dist/hud/__tests__/reconcile.test.js +121 -0
  80. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  81. package/dist/hud/__tests__/state.test.js +110 -0
  82. package/dist/hud/__tests__/state.test.js.map +1 -1
  83. package/dist/hud/__tests__/tmux.test.js +1 -1
  84. package/dist/hud/__tests__/tmux.test.js.map +1 -1
  85. package/dist/hud/reconcile.d.ts +3 -1
  86. package/dist/hud/reconcile.d.ts.map +1 -1
  87. package/dist/hud/reconcile.js +281 -151
  88. package/dist/hud/reconcile.js.map +1 -1
  89. package/dist/hud/render.d.ts.map +1 -1
  90. package/dist/hud/render.js +4 -2
  91. package/dist/hud/render.js.map +1 -1
  92. package/dist/hud/state.d.ts.map +1 -1
  93. package/dist/hud/state.js +44 -12
  94. package/dist/hud/state.js.map +1 -1
  95. package/dist/hud/tmux.d.ts.map +1 -1
  96. package/dist/hud/tmux.js +1 -4
  97. package/dist/hud/tmux.js.map +1 -1
  98. package/dist/hud/types.d.ts +5 -0
  99. package/dist/hud/types.d.ts.map +1 -1
  100. package/dist/hud/types.js.map +1 -1
  101. package/dist/leader/__tests__/contract.test.d.ts +2 -0
  102. package/dist/leader/__tests__/contract.test.d.ts.map +1 -0
  103. package/dist/leader/__tests__/contract.test.js +75 -0
  104. package/dist/leader/__tests__/contract.test.js.map +1 -0
  105. package/dist/leader/contract.d.ts +26 -0
  106. package/dist/leader/contract.d.ts.map +1 -0
  107. package/dist/leader/contract.js +97 -0
  108. package/dist/leader/contract.js.map +1 -0
  109. package/dist/modes/base.d.ts.map +1 -1
  110. package/dist/modes/base.js +22 -7
  111. package/dist/modes/base.js.map +1 -1
  112. package/dist/notifications/__tests__/dispatcher.test.js +16 -0
  113. package/dist/notifications/__tests__/dispatcher.test.js.map +1 -1
  114. package/dist/notifications/__tests__/profiles.test.js +87 -0
  115. package/dist/notifications/__tests__/profiles.test.js.map +1 -1
  116. package/dist/notifications/config.d.ts +1 -0
  117. package/dist/notifications/config.d.ts.map +1 -1
  118. package/dist/notifications/config.js +60 -22
  119. package/dist/notifications/config.js.map +1 -1
  120. package/dist/notifications/dispatcher.d.ts.map +1 -1
  121. package/dist/notifications/dispatcher.js +6 -16
  122. package/dist/notifications/dispatcher.js.map +1 -1
  123. package/dist/pipeline/__tests__/stages.test.js +2 -0
  124. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  125. package/dist/pipeline/stages/ultragoal.d.ts.map +1 -1
  126. package/dist/pipeline/stages/ultragoal.js +6 -1
  127. package/dist/pipeline/stages/ultragoal.js.map +1 -1
  128. package/dist/question/__tests__/renderer.test.js +58 -4
  129. package/dist/question/__tests__/renderer.test.js.map +1 -1
  130. package/dist/question/renderer.d.ts +1 -1
  131. package/dist/question/renderer.d.ts.map +1 -1
  132. package/dist/question/renderer.js +73 -5
  133. package/dist/question/renderer.js.map +1 -1
  134. package/dist/ralplan/__tests__/runtime.test.js +202 -0
  135. package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
  136. package/dist/ralplan/runtime.d.ts +7 -0
  137. package/dist/ralplan/runtime.d.ts.map +1 -1
  138. package/dist/ralplan/runtime.js +63 -4
  139. package/dist/ralplan/runtime.js.map +1 -1
  140. package/dist/scripts/__tests__/codex-native-hook.test.js +8484 -4560
  141. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  142. package/dist/scripts/codex-native-hook.d.ts +1 -0
  143. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  144. package/dist/scripts/codex-native-hook.js +4387 -190
  145. package/dist/scripts/codex-native-hook.js.map +1 -1
  146. package/dist/state/__tests__/operations.test.js +1137 -0
  147. package/dist/state/__tests__/operations.test.js.map +1 -1
  148. package/dist/state/__tests__/planning-gate.test.js +410 -0
  149. package/dist/state/__tests__/planning-gate.test.js.map +1 -1
  150. package/dist/state/operations.d.ts +10 -0
  151. package/dist/state/operations.d.ts.map +1 -1
  152. package/dist/state/operations.js +242 -8
  153. package/dist/state/operations.js.map +1 -1
  154. package/dist/state/skill-active.d.ts +4 -1
  155. package/dist/state/skill-active.d.ts.map +1 -1
  156. package/dist/state/skill-active.js +5 -3
  157. package/dist/state/skill-active.js.map +1 -1
  158. package/dist/state/workflow-transition.d.ts.map +1 -1
  159. package/dist/state/workflow-transition.js +642 -1
  160. package/dist/state/workflow-transition.js.map +1 -1
  161. package/dist/subagents/__tests__/tracker.test.js +248 -1
  162. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  163. package/dist/subagents/tracker.d.ts +60 -0
  164. package/dist/subagents/tracker.d.ts.map +1 -1
  165. package/dist/subagents/tracker.js +225 -1
  166. package/dist/subagents/tracker.js.map +1 -1
  167. package/dist/team/__tests__/model-contract.test.js +72 -4
  168. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  169. package/dist/team/__tests__/runtime.test.js +44 -2
  170. package/dist/team/__tests__/runtime.test.js.map +1 -1
  171. package/dist/team/__tests__/tmux-session.test.js +127 -8
  172. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  173. package/dist/team/__tests__/worker-runtime-identity.test.js +89 -0
  174. package/dist/team/__tests__/worker-runtime-identity.test.js.map +1 -1
  175. package/dist/team/model-contract.d.ts +3 -0
  176. package/dist/team/model-contract.d.ts.map +1 -1
  177. package/dist/team/model-contract.js +42 -5
  178. package/dist/team/model-contract.js.map +1 -1
  179. package/dist/team/runtime.d.ts +2 -1
  180. package/dist/team/runtime.d.ts.map +1 -1
  181. package/dist/team/runtime.js +21 -11
  182. package/dist/team/runtime.js.map +1 -1
  183. package/dist/team/scaling.d.ts.map +1 -1
  184. package/dist/team/scaling.js +13 -11
  185. package/dist/team/scaling.js.map +1 -1
  186. package/dist/team/tmux-session.d.ts +1 -0
  187. package/dist/team/tmux-session.d.ts.map +1 -1
  188. package/dist/team/tmux-session.js +63 -13
  189. package/dist/team/tmux-session.js.map +1 -1
  190. package/dist/ultragoal/__tests__/artifacts.test.js +7 -0
  191. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  192. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  193. package/dist/ultragoal/artifacts.js +5 -0
  194. package/dist/ultragoal/artifacts.js.map +1 -1
  195. package/dist/utils/__tests__/agents-model-table.test.js +2 -2
  196. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
  197. package/package.json +1 -1
  198. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  199. package/plugins/oh-my-codex/hooks/codex-native-hook.mjs +19 -7
  200. package/plugins/oh-my-codex/skills/code-review/SKILL.md +16 -0
  201. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +23 -0
  202. package/plugins/oh-my-codex/skills/ultrawork/references/agent-tiers.md +3 -2
  203. package/skills/code-review/SKILL.md +16 -0
  204. package/skills/ecomode/references/agent-tiers.md +1 -1
  205. package/skills/ultragoal/SKILL.md +23 -0
  206. package/skills/ultrawork/references/agent-tiers.md +3 -2
  207. package/src/scripts/__tests__/codex-native-hook.test.ts +14014 -9097
  208. package/src/scripts/codex-native-hook.ts +4459 -199
@@ -1,3 +1,6 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
1
4
  import { readAllState, readHudConfig } from './state.js';
2
5
  import { getHudRenderMaxLines } from './render.js';
3
6
  import { HUD_TMUX_HEIGHT_LINES, isTmuxWindowTooCrampedForHudSplit } from './constants.js';
@@ -131,6 +134,114 @@ function planOwnedHudPaneDedupe(panes, currentPaneId, owner, preferredPaneId) {
131
134
  duplicatePaneIds: ownedPaneIds.filter((paneId) => paneId !== keeperPaneId),
132
135
  };
133
136
  }
137
+ const HUD_RECONCILE_LOCK_STALE_MS = 10_000;
138
+ function parseIsoMs(value) {
139
+ if (typeof value !== 'string' || !value.trim())
140
+ return null;
141
+ const parsed = Date.parse(value);
142
+ return Number.isFinite(parsed) ? parsed : null;
143
+ }
144
+ function defaultIsProcessLive(pid) {
145
+ try {
146
+ process.kill(pid, 0);
147
+ return true;
148
+ }
149
+ catch (error) {
150
+ const code = error?.code;
151
+ if (code === 'ESRCH')
152
+ return false;
153
+ if (code === 'EPERM')
154
+ return true;
155
+ return null;
156
+ }
157
+ }
158
+ async function readHudReconcileLockOwner(lockPath) {
159
+ return readFile(join(lockPath, 'owner.json'), 'utf-8')
160
+ .then((content) => JSON.parse(content))
161
+ .catch(() => null);
162
+ }
163
+ async function tryCreateHudReconcileLock(lockPath, nowMs) {
164
+ const token = randomUUID();
165
+ let createdDir = false;
166
+ try {
167
+ await mkdir(lockPath, { recursive: false });
168
+ createdDir = true;
169
+ await writeFile(join(lockPath, 'owner.json'), JSON.stringify({
170
+ token,
171
+ pid: process.pid,
172
+ acquired_at: new Date(nowMs).toISOString(),
173
+ }, null, 2));
174
+ return { path: lockPath, token };
175
+ }
176
+ catch {
177
+ if (createdDir)
178
+ await rm(lockPath, { recursive: true, force: true }).catch(() => { });
179
+ return null;
180
+ }
181
+ }
182
+ async function restoreMovedLock(fromPath, toPath) {
183
+ const restored = await rename(fromPath, toPath).then(() => true).catch(() => false);
184
+ if (!restored)
185
+ await rm(fromPath, { recursive: true, force: true }).catch(() => { });
186
+ }
187
+ async function acquireHudReconcileLock(lockPath, nowMs, staleMs, isProcessLive) {
188
+ const created = await tryCreateHudReconcileLock(lockPath, nowMs);
189
+ if (created)
190
+ return created;
191
+ const observedOwner = await readHudReconcileLockOwner(lockPath);
192
+ const lockStat = await stat(lockPath).catch(() => null);
193
+ if (!lockStat)
194
+ return null;
195
+ const ownerPid = typeof observedOwner?.pid === 'number' && Number.isInteger(observedOwner.pid) && observedOwner.pid > 0
196
+ ? observedOwner.pid
197
+ : null;
198
+ const ownerAcquiredMs = parseIsoMs(observedOwner?.acquired_at);
199
+ const lockAgeMs = ownerAcquiredMs === null ? nowMs - lockStat.mtimeMs : nowMs - ownerAcquiredMs;
200
+ if (lockAgeMs <= staleMs)
201
+ return null;
202
+ if (ownerPid !== null) {
203
+ const liveness = isProcessLive(ownerPid);
204
+ if (liveness !== false)
205
+ return null;
206
+ }
207
+ const reapPath = `${lockPath}.stale.${process.pid}.${nowMs}.${randomUUID()}`;
208
+ try {
209
+ await rename(lockPath, reapPath);
210
+ }
211
+ catch {
212
+ return null;
213
+ }
214
+ const reapedOwner = await readHudReconcileLockOwner(reapPath);
215
+ const reapedStat = await stat(reapPath).catch(() => null);
216
+ const reapedOwnerAcquiredMs = parseIsoMs(reapedOwner?.acquired_at);
217
+ const reapedAgeMs = reapedOwnerAcquiredMs === null && reapedStat
218
+ ? nowMs - reapedStat.mtimeMs
219
+ : reapedOwnerAcquiredMs === null ? 0 : nowMs - reapedOwnerAcquiredMs;
220
+ const reapedObservedLock = observedOwner?.token === reapedOwner?.token
221
+ && reapedStat?.mtimeMs === lockStat.mtimeMs
222
+ && reapedAgeMs > staleMs;
223
+ if (!reapedObservedLock) {
224
+ await restoreMovedLock(reapPath, lockPath);
225
+ return null;
226
+ }
227
+ await rm(reapPath, { recursive: true, force: true }).catch(() => { });
228
+ return tryCreateHudReconcileLock(lockPath, nowMs);
229
+ }
230
+ async function releaseHudReconcileLock(lock) {
231
+ const releasePath = `${lock.path}.release.${process.pid}.${Date.now()}.${lock.token}`;
232
+ try {
233
+ await rename(lock.path, releasePath);
234
+ }
235
+ catch {
236
+ return;
237
+ }
238
+ const releaseOwner = await readHudReconcileLockOwner(releasePath);
239
+ if (releaseOwner?.token === lock.token) {
240
+ await rm(releasePath, { recursive: true, force: true }).catch(() => { });
241
+ return;
242
+ }
243
+ await restoreMovedLock(releasePath, lock.path);
244
+ }
134
245
  export async function reconcileHudForPromptSubmit(cwd, deps = {}) {
135
246
  const env = deps.env ?? process.env;
136
247
  if (!env.TMUX) {
@@ -163,178 +274,197 @@ export async function reconcileHudForPromptSubmit(cwd, deps = {}) {
163
274
  const createPane = deps.createHudWatchPane ?? ((hudCwd, hudCmd, options) => createHudWatchPane(hudCwd, hudCmd, options));
164
275
  const killPane = deps.killTmuxPane ?? ((paneId) => killTmuxPane(paneId));
165
276
  const resizePane = deps.resizeTmuxPane ?? ((paneId, lines) => resizeTmuxPane(paneId, lines));
166
- const currentPaneId = env.TMUX_PANE?.trim();
167
- const resolvedSessionId = deps.sessionId?.trim() || env.OMX_SESSION_ID?.trim() || undefined;
168
- const equivalentSessionIds = [
169
- resolvedSessionId,
170
- env.OMX_SESSION_ID?.trim(),
171
- ...(deps.sessionIds ?? []),
172
- ]
173
- .map((sessionId) => sessionId?.trim() ?? '')
174
- .filter((sessionId, index, sessionIds) => sessionId !== '' && sessionIds.indexOf(sessionId) === index);
175
- let panes = listPanes(currentPaneId);
176
- // Reclaim orphaned HUD panes left behind by a destroyed leader before deciding
177
- // whether a HUD already exists; otherwise dead-leader HUDs accumulate one per
178
- // prompt submit and the window fills with stacked HUD strips.
179
- const reapedOrphanPaneIds = reapOrphanedSessionHudPanes(panes, {
180
- sessionId: resolvedSessionId,
181
- sessionIds: equivalentSessionIds,
182
- currentPaneId,
183
- killPane,
184
- });
185
- if (reapedOrphanPaneIds.length > 0) {
186
- const reapedPaneIdSet = new Set(reapedOrphanPaneIds);
187
- panes = panes.filter((pane) => !reapedPaneIdSet.has(pane.paneId));
188
- }
189
- // A Codex self-update can restart/resume the leader in the same tmux pane with
190
- // a new OMX session id while the old HUD watcher stays alive. That stale HUD
191
- // still names the current leader pane, but with the previous session id, so it
192
- // does not match same-owner dedupe and the next launch would create a second HUD
193
- // beside it. Reap only HUDs tied to this exact leader pane; neighboring panes'
194
- // HUDs remain isolated by leaderPaneId.
195
- const reapedStaleLeaderPaneIds = reapStaleCurrentLeaderHudPanes(panes, {
196
- sessionIds: equivalentSessionIds,
197
- currentPaneId,
198
- killPane,
199
- });
200
- if (reapedStaleLeaderPaneIds.length > 0) {
201
- const reapedPaneIdSet = new Set(reapedStaleLeaderPaneIds);
202
- panes = panes.filter((pane) => !reapedPaneIdSet.has(pane.paneId));
203
- }
204
- const owner = {
205
- sessionId: resolvedSessionId,
206
- sessionIds: equivalentSessionIds,
207
- leaderPaneId: currentPaneId,
208
- };
209
- const hudPaneIds = [
210
- ...findHudWatchPaneIds(panes, currentPaneId, owner),
211
- ...findLegacyFocusedHudWatchPaneIds(panes, currentPaneId),
212
- ].filter((paneId, index, paneIds) => paneIds.indexOf(paneId) === index);
213
- const duplicateCount = Math.max(0, hudPaneIds.length - 1);
214
- const readHudConfigFn = deps.readHudConfig ?? readHudConfig;
215
- const hudConfig = await readHudConfigFn(cwd).catch(() => null);
216
- const readAllStateFn = deps.readAllState ?? readAllState;
217
- const hudState = hudConfig ? await readAllStateFn(cwd, hudConfig).catch(() => null) : null;
218
- const desiredHeight = hudState ? getHudRenderMaxLines(hudState) : HUD_TMUX_HEIGHT_LINES;
219
- const preset = hudConfig?.preset;
220
- const hudCmd = buildHudWatchCommand(omxBin, preset, resolvedSessionId, env.OMX_ROOT, currentPaneId, {
221
- omxStateRoot: env.OMX_STATE_ROOT,
222
- omxTeamStateRoot: env.OMX_TEAM_STATE_ROOT,
223
- rootSource: env.OMX_TEAM_STATE_ROOT ? 'team-env' : env.OMX_ROOT ? 'omx-root-env' : env.OMX_STATE_ROOT ? 'omx-state-root-env' : 'cwd-default',
224
- });
225
- const leaderPane = currentPaneId
226
- ? panes.find((pane) => pane.paneId === currentPaneId && !isHudWatchPane(pane))
227
- : undefined;
228
- const singleHudPane = hudPaneIds.length === 1
229
- ? panes.find((pane) => pane.paneId === hudPaneIds[0])
230
- : undefined;
231
- if (singleHudPane && !needsHudTopologyRecreate(singleHudPane, leaderPane)) {
232
- const shouldResize = needsHudHeightResize(singleHudPane, desiredHeight);
233
- const resized = shouldResize ? resizePane(singleHudPane.paneId, desiredHeight) : true;
234
- if (resized)
235
- ensureHudResizeHook(singleHudPane.paneId, currentPaneId, desiredHeight, cwd, deps);
277
+ const lockPath = join(cwd, '.omx', 'state', 'hud-reconcile.lock');
278
+ const lockDirReady = await mkdir(dirname(lockPath), { recursive: true }).then(() => true).catch(() => false);
279
+ const lock = lockDirReady
280
+ ? await acquireHudReconcileLock(lockPath, deps.nowMs?.() ?? Date.now(), HUD_RECONCILE_LOCK_STALE_MS, deps.isProcessLive ?? defaultIsProcessLive)
281
+ : null;
282
+ if (lockDirReady && !lock) {
236
283
  return {
237
- status: resized ? (shouldResize ? 'resized' : 'unchanged') : 'failed',
238
- paneId: singleHudPane.paneId,
239
- desiredHeight,
240
- duplicateCount,
284
+ status: 'skipped_concurrent',
285
+ paneId: null,
286
+ desiredHeight: null,
287
+ duplicateCount: 0,
241
288
  };
242
289
  }
243
- if (hudPaneIds.length > 1) {
244
- const hudPanes = hudPaneIds
245
- .map((paneId) => panes.find((pane) => pane.paneId === paneId))
246
- .filter((pane) => Boolean(pane));
247
- const keeperPane = hudPanes.find((pane) => !needsHudTopologyRecreate(pane, leaderPane));
248
- if (keeperPane) {
249
- for (const paneId of hudPaneIds.filter((paneId) => paneId !== keeperPane.paneId)) {
250
- killPane(paneId);
251
- }
252
- const resized = resizePane(keeperPane.paneId, desiredHeight);
290
+ try {
291
+ const currentPaneId = env.TMUX_PANE?.trim();
292
+ const resolvedSessionId = deps.sessionId?.trim() || env.OMX_SESSION_ID?.trim() || undefined;
293
+ const equivalentSessionIds = [
294
+ resolvedSessionId,
295
+ env.OMX_SESSION_ID?.trim(),
296
+ ...(deps.sessionIds ?? []),
297
+ ]
298
+ .map((sessionId) => sessionId?.trim() ?? '')
299
+ .filter((sessionId, index, sessionIds) => sessionId !== '' && sessionIds.indexOf(sessionId) === index);
300
+ let panes = listPanes(currentPaneId);
301
+ // Reclaim orphaned HUD panes left behind by a destroyed leader before deciding
302
+ // whether a HUD already exists; otherwise dead-leader HUDs accumulate one per
303
+ // prompt submit and the window fills with stacked HUD strips.
304
+ const reapedOrphanPaneIds = reapOrphanedSessionHudPanes(panes, {
305
+ sessionId: resolvedSessionId,
306
+ sessionIds: equivalentSessionIds,
307
+ currentPaneId,
308
+ killPane,
309
+ });
310
+ if (reapedOrphanPaneIds.length > 0) {
311
+ const reapedPaneIdSet = new Set(reapedOrphanPaneIds);
312
+ panes = panes.filter((pane) => !reapedPaneIdSet.has(pane.paneId));
313
+ }
314
+ // A Codex self-update can restart/resume the leader in the same tmux pane with
315
+ // a new OMX session id while the old HUD watcher stays alive. That stale HUD
316
+ // still names the current leader pane, but with the previous session id, so it
317
+ // does not match same-owner dedupe and the next launch would create a second HUD
318
+ // beside it. Reap only HUDs tied to this exact leader pane; neighboring panes'
319
+ // HUDs remain isolated by leaderPaneId.
320
+ const reapedStaleLeaderPaneIds = reapStaleCurrentLeaderHudPanes(panes, {
321
+ sessionIds: equivalentSessionIds,
322
+ currentPaneId,
323
+ killPane,
324
+ });
325
+ if (reapedStaleLeaderPaneIds.length > 0) {
326
+ const reapedPaneIdSet = new Set(reapedStaleLeaderPaneIds);
327
+ panes = panes.filter((pane) => !reapedPaneIdSet.has(pane.paneId));
328
+ }
329
+ const owner = {
330
+ sessionId: resolvedSessionId,
331
+ sessionIds: equivalentSessionIds,
332
+ leaderPaneId: currentPaneId,
333
+ };
334
+ const hudPaneIds = [
335
+ ...findHudWatchPaneIds(panes, currentPaneId, owner),
336
+ ...findLegacyFocusedHudWatchPaneIds(panes, currentPaneId),
337
+ ].filter((paneId, index, paneIds) => paneIds.indexOf(paneId) === index);
338
+ const duplicateCount = Math.max(0, hudPaneIds.length - 1);
339
+ const readHudConfigFn = deps.readHudConfig ?? readHudConfig;
340
+ const hudConfig = await readHudConfigFn(cwd).catch(() => null);
341
+ const readAllStateFn = deps.readAllState ?? readAllState;
342
+ const hudState = hudConfig ? await readAllStateFn(cwd, hudConfig).catch(() => null) : null;
343
+ const desiredHeight = hudState ? getHudRenderMaxLines(hudState) : HUD_TMUX_HEIGHT_LINES;
344
+ const preset = hudConfig?.preset;
345
+ const hudCmd = buildHudWatchCommand(omxBin, preset, resolvedSessionId, env.OMX_ROOT, currentPaneId, {
346
+ omxStateRoot: env.OMX_STATE_ROOT,
347
+ omxTeamStateRoot: env.OMX_TEAM_STATE_ROOT,
348
+ rootSource: env.OMX_TEAM_STATE_ROOT ? 'team-env' : env.OMX_ROOT ? 'omx-root-env' : env.OMX_STATE_ROOT ? 'omx-state-root-env' : 'cwd-default',
349
+ });
350
+ const leaderPane = currentPaneId
351
+ ? panes.find((pane) => pane.paneId === currentPaneId && !isHudWatchPane(pane))
352
+ : undefined;
353
+ const singleHudPane = hudPaneIds.length === 1
354
+ ? panes.find((pane) => pane.paneId === hudPaneIds[0])
355
+ : undefined;
356
+ if (singleHudPane && !needsHudTopologyRecreate(singleHudPane, leaderPane)) {
357
+ const shouldResize = needsHudHeightResize(singleHudPane, desiredHeight);
358
+ const resized = shouldResize ? resizePane(singleHudPane.paneId, desiredHeight) : true;
253
359
  if (resized)
254
- ensureHudResizeHook(keeperPane.paneId, currentPaneId, desiredHeight, cwd, deps);
360
+ ensureHudResizeHook(singleHudPane.paneId, currentPaneId, desiredHeight, cwd, deps);
255
361
  return {
256
- status: resized ? 'replaced_duplicates' : 'failed',
257
- paneId: keeperPane.paneId,
362
+ status: resized ? (shouldResize ? 'resized' : 'unchanged') : 'failed',
363
+ paneId: singleHudPane.paneId,
258
364
  desiredHeight,
259
365
  duplicateCount,
260
366
  };
261
367
  }
262
- }
263
- const createFullWidth = hudPaneIds
264
- .map((paneId) => panes.find((pane) => pane.paneId === paneId))
265
- .some((pane) => Boolean(pane && needsHudTopologyRecreate(pane, leaderPane)))
266
- && (!leaderPane || shouldCreateFullWidthHud(leaderPane));
267
- if (!resolvedSessionId) {
268
- return {
269
- status: 'skipped_no_session_id',
270
- paneId: null,
271
- desiredHeight,
272
- duplicateCount,
273
- };
274
- }
275
- // When there is no existing HUD pane to keep/recreate, this reconcile would
276
- // create a fresh HUD split. Mirror the launch-time guard: if the current tmux
277
- // window is too short, skip the split so the first prompt submit cannot
278
- // recreate the cramped, unreadable 2-line HUD the launch path already
279
- // declined to add. Default behavior is preserved for normal/unknown heights.
280
- // (closes #2754)
281
- if (hudPaneIds.length === 0 && (deps.readCurrentWindowSize || !deps.listCurrentWindowPanes)) {
282
- const readWindowSize = deps.readCurrentWindowSize ?? ((paneId) => readCurrentWindowSize(undefined, paneId));
283
- const windowHeight = readWindowSize(currentPaneId).height;
284
- if (isTmuxWindowTooCrampedForHudSplit(windowHeight)) {
368
+ if (hudPaneIds.length > 1) {
369
+ const hudPanes = hudPaneIds
370
+ .map((paneId) => panes.find((pane) => pane.paneId === paneId))
371
+ .filter((pane) => Boolean(pane));
372
+ const keeperPane = hudPanes.find((pane) => !needsHudTopologyRecreate(pane, leaderPane));
373
+ if (keeperPane) {
374
+ for (const paneId of hudPaneIds.filter((paneId) => paneId !== keeperPane.paneId)) {
375
+ killPane(paneId);
376
+ }
377
+ const resized = resizePane(keeperPane.paneId, desiredHeight);
378
+ if (resized)
379
+ ensureHudResizeHook(keeperPane.paneId, currentPaneId, desiredHeight, cwd, deps);
380
+ return {
381
+ status: resized ? 'replaced_duplicates' : 'failed',
382
+ paneId: keeperPane.paneId,
383
+ desiredHeight,
384
+ duplicateCount,
385
+ };
386
+ }
387
+ }
388
+ const createFullWidth = hudPaneIds
389
+ .map((paneId) => panes.find((pane) => pane.paneId === paneId))
390
+ .some((pane) => Boolean(pane && needsHudTopologyRecreate(pane, leaderPane)))
391
+ && (!leaderPane || shouldCreateFullWidthHud(leaderPane));
392
+ if (!resolvedSessionId) {
285
393
  return {
286
- status: 'skipped_window_too_cramped',
394
+ status: 'skipped_no_session_id',
287
395
  paneId: null,
288
396
  desiredHeight,
289
397
  duplicateCount,
290
398
  };
291
399
  }
292
- }
293
- const unregisterHook = deps.unregisterHudResizeHook ?? unregisterHudResizeHook;
294
- unregisterHook(currentPaneId);
295
- const removedHudPaneIds = new Set();
296
- for (const paneId of hudPaneIds) {
297
- if (killPane(paneId))
298
- removedHudPaneIds.add(paneId);
299
- }
300
- const createOptions = {
301
- heightLines: desiredHeight,
302
- targetPaneId: currentPaneId,
303
- };
304
- if (createFullWidth)
305
- createOptions.fullWidth = true;
306
- const paneId = createPane(cwd, hudCmd, createOptions);
307
- if (!paneId) {
308
- return {
309
- status: 'failed',
310
- paneId: null,
311
- desiredHeight,
312
- duplicateCount,
400
+ // When there is no existing HUD pane to keep/recreate, this reconcile would
401
+ // create a fresh HUD split. Mirror the launch-time guard: if the current tmux
402
+ // window is too short, skip the split so the first prompt submit cannot
403
+ // recreate the cramped, unreadable 2-line HUD the launch path already
404
+ // declined to add. Default behavior is preserved for normal/unknown heights.
405
+ // (closes #2754)
406
+ if (hudPaneIds.length === 0 && (deps.readCurrentWindowSize || !deps.listCurrentWindowPanes)) {
407
+ const readWindowSize = deps.readCurrentWindowSize ?? ((paneId) => readCurrentWindowSize(undefined, paneId));
408
+ const windowHeight = readWindowSize(currentPaneId).height;
409
+ if (isTmuxWindowTooCrampedForHudSplit(windowHeight)) {
410
+ return {
411
+ status: 'skipped_window_too_cramped',
412
+ paneId: null,
413
+ desiredHeight,
414
+ duplicateCount,
415
+ };
416
+ }
417
+ }
418
+ const unregisterHook = deps.unregisterHudResizeHook ?? unregisterHudResizeHook;
419
+ unregisterHook(currentPaneId);
420
+ const removedHudPaneIds = new Set();
421
+ for (const paneId of hudPaneIds) {
422
+ if (killPane(paneId))
423
+ removedHudPaneIds.add(paneId);
424
+ }
425
+ const createOptions = {
426
+ heightLines: desiredHeight,
427
+ targetPaneId: currentPaneId,
313
428
  };
314
- }
315
- // A launch-path restore and prompt-submit reconciliation can both observe
316
- // "no HUD" before either split-window has materialized. Re-scan after create
317
- // and collapse same-owner panes so the second creator cleans up the race
318
- // instead of leaving a duplicate HUD in the user window.
319
- const postCreate = planOwnedHudPaneDedupe(listPanes(currentPaneId).filter((pane) => !removedHudPaneIds.has(pane.paneId)), currentPaneId, owner, paneId);
320
- for (const duplicatePaneId of postCreate.duplicatePaneIds) {
321
- killPane(duplicatePaneId);
322
- }
323
- const resized = resizePane(postCreate.paneId, desiredHeight);
324
- if (!resized) {
429
+ if (createFullWidth)
430
+ createOptions.fullWidth = true;
431
+ const paneId = createPane(cwd, hudCmd, createOptions);
432
+ if (!paneId) {
433
+ return {
434
+ status: 'failed',
435
+ paneId: null,
436
+ desiredHeight,
437
+ duplicateCount,
438
+ };
439
+ }
440
+ // A launch-path restore and prompt-submit reconciliation can both observe
441
+ // "no HUD" before either split-window has materialized. Re-scan after create
442
+ // and collapse same-owner panes so the second creator cleans up the race
443
+ // instead of leaving a duplicate HUD in the user window.
444
+ const postCreate = planOwnedHudPaneDedupe(listPanes(currentPaneId).filter((pane) => !removedHudPaneIds.has(pane.paneId)), currentPaneId, owner, paneId);
445
+ for (const duplicatePaneId of postCreate.duplicatePaneIds) {
446
+ killPane(duplicatePaneId);
447
+ }
448
+ const resized = resizePane(postCreate.paneId, desiredHeight);
449
+ if (!resized) {
450
+ return {
451
+ status: 'failed',
452
+ paneId: postCreate.paneId,
453
+ desiredHeight,
454
+ duplicateCount: postCreate.duplicatePaneIds.length,
455
+ };
456
+ }
457
+ ensureHudResizeHook(postCreate.paneId, currentPaneId, desiredHeight, cwd, deps);
325
458
  return {
326
- status: 'failed',
459
+ status: postCreate.duplicatePaneIds.length > 0 || hudPaneIds.length > 1 ? 'replaced_duplicates' : 'recreated',
327
460
  paneId: postCreate.paneId,
328
461
  desiredHeight,
329
462
  duplicateCount: postCreate.duplicatePaneIds.length,
330
463
  };
331
464
  }
332
- ensureHudResizeHook(postCreate.paneId, currentPaneId, desiredHeight, cwd, deps);
333
- return {
334
- status: postCreate.duplicatePaneIds.length > 0 || hudPaneIds.length > 1 ? 'replaced_duplicates' : 'recreated',
335
- paneId: postCreate.paneId,
336
- desiredHeight,
337
- duplicateCount: postCreate.duplicatePaneIds.length,
338
- };
465
+ finally {
466
+ if (lock)
467
+ await releaseHudReconcileLock(lock);
468
+ }
339
469
  }
340
470
  //# sourceMappingURL=reconcile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/hud/reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/hud/reconcile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,MAAM,CAErF;AA+RD,wDAAwD;AACxD,wBAAgB,SAAS,CACvB,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAkBR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/hud/render.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG,MAAM,CAErF;AAkSD,wDAAwD;AACxD,wBAAgB,SAAS,CACvB,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAkBR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D"}
@@ -185,8 +185,10 @@ function renderUltragoal(ctx) {
185
185
  return null;
186
186
  const total = ctx.ultragoal.progressTotal;
187
187
  const complete = ctx.ultragoal.complete;
188
- if (!Number.isFinite(total) || total <= 0 || !Number.isFinite(complete))
189
- return null;
188
+ if (!Number.isFinite(total) || total <= 0 || !Number.isFinite(complete)) {
189
+ const phase = sanitizeDynamicText(ctx.ultragoal.current_phase || ctx.ultragoal.status || 'active') || 'active';
190
+ return cyan(`ultragoal:${phase}`);
191
+ }
190
192
  const teamSummary = formatTeamSummary(ctx);
191
193
  const progress = cyan(`ultragoal ${complete}/${total}${teamSummary ? ` + ${teamSummary}` : ''}`);
192
194
  const activeGoal = ctx.ultragoal.activeGoal ?? ctx.ultragoal.ongoingGoals?.[0];