oh-my-codex 0.18.3 → 0.18.4

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 (120) hide show
  1. package/Cargo.lock +6 -6
  2. package/Cargo.toml +1 -1
  3. package/README.md +1 -0
  4. package/dist/cli/__tests__/doctor-warning-copy.test.js +37 -3
  5. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  6. package/dist/cli/__tests__/explore.test.js +8 -7
  7. package/dist/cli/__tests__/explore.test.js.map +1 -1
  8. package/dist/cli/__tests__/index.test.js +63 -5
  9. package/dist/cli/__tests__/index.test.js.map +1 -1
  10. package/dist/cli/__tests__/setup-install-mode.test.js +56 -17
  11. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  12. package/dist/cli/__tests__/setup-scope.test.js +1 -1
  13. package/dist/cli/__tests__/sparkshell-cli.test.js +2 -2
  14. package/dist/cli/__tests__/sparkshell-cli.test.js.map +1 -1
  15. package/dist/cli/doctor.d.ts.map +1 -1
  16. package/dist/cli/doctor.js +109 -12
  17. package/dist/cli/doctor.js.map +1 -1
  18. package/dist/cli/explore.d.ts +1 -0
  19. package/dist/cli/explore.d.ts.map +1 -1
  20. package/dist/cli/explore.js +6 -0
  21. package/dist/cli/explore.js.map +1 -1
  22. package/dist/cli/index.d.ts +1 -1
  23. package/dist/cli/index.d.ts.map +1 -1
  24. package/dist/cli/index.js +11 -5
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/question.d.ts.map +1 -1
  27. package/dist/cli/question.js +5 -1
  28. package/dist/cli/question.js.map +1 -1
  29. package/dist/cli/setup.d.ts.map +1 -1
  30. package/dist/cli/setup.js +18 -54
  31. package/dist/cli/setup.js.map +1 -1
  32. package/dist/config/__tests__/generator-idempotent.test.js +5 -5
  33. package/dist/config/generator.d.ts +8 -2
  34. package/dist/config/generator.d.ts.map +1 -1
  35. package/dist/config/generator.js +48 -4
  36. package/dist/config/generator.js.map +1 -1
  37. package/dist/hooks/__tests__/agents-overlay.test.js +9 -9
  38. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  39. package/dist/hooks/__tests__/autopilot-skill-contract.test.js +10 -1
  40. package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
  41. package/dist/hooks/__tests__/consensus-execution-handoff.test.js +13 -0
  42. package/dist/hooks/__tests__/consensus-execution-handoff.test.js.map +1 -1
  43. package/dist/hooks/__tests__/explore-routing.test.js +10 -13
  44. package/dist/hooks/__tests__/explore-routing.test.js.map +1 -1
  45. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js +13 -15
  46. package/dist/hooks/__tests__/explore-sparkshell-guidance-contract.test.js.map +1 -1
  47. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +33 -0
  48. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  49. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +60 -0
  50. package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -1
  51. package/dist/hooks/explore-routing.d.ts.map +1 -1
  52. package/dist/hooks/explore-routing.js +8 -14
  53. package/dist/hooks/explore-routing.js.map +1 -1
  54. package/dist/hud/__tests__/hud-tmux-injection.test.js +15 -10
  55. package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
  56. package/dist/hud/__tests__/reconcile.test.js +23 -0
  57. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  58. package/dist/hud/index.d.ts +1 -1
  59. package/dist/hud/index.d.ts.map +1 -1
  60. package/dist/hud/index.js +24 -2
  61. package/dist/hud/index.js.map +1 -1
  62. package/dist/hud/reconcile.d.ts.map +1 -1
  63. package/dist/hud/reconcile.js +15 -0
  64. package/dist/hud/reconcile.js.map +1 -1
  65. package/dist/question/__tests__/deep-interview.test.js +80 -7
  66. package/dist/question/__tests__/deep-interview.test.js.map +1 -1
  67. package/dist/question/__tests__/policy.test.js +83 -9
  68. package/dist/question/__tests__/policy.test.js.map +1 -1
  69. package/dist/question/autopilot-wait.d.ts +10 -0
  70. package/dist/question/autopilot-wait.d.ts.map +1 -0
  71. package/dist/question/autopilot-wait.js +134 -0
  72. package/dist/question/autopilot-wait.js.map +1 -0
  73. package/dist/question/deep-interview.d.ts.map +1 -1
  74. package/dist/question/deep-interview.js +4 -0
  75. package/dist/question/deep-interview.js.map +1 -1
  76. package/dist/question/policy.d.ts +1 -0
  77. package/dist/question/policy.d.ts.map +1 -1
  78. package/dist/question/policy.js +19 -0
  79. package/dist/question/policy.js.map +1 -1
  80. package/dist/scripts/__tests__/codex-native-hook.test.js +331 -0
  81. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  82. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  83. package/dist/scripts/codex-native-hook.js +45 -3
  84. package/dist/scripts/codex-native-hook.js.map +1 -1
  85. package/dist/scripts/notify-hook.js +13 -0
  86. package/dist/scripts/notify-hook.js.map +1 -1
  87. package/dist/subagents/__tests__/tracker.test.js +69 -0
  88. package/dist/subagents/__tests__/tracker.test.js.map +1 -1
  89. package/dist/subagents/tracker.d.ts +5 -0
  90. package/dist/subagents/tracker.d.ts.map +1 -1
  91. package/dist/subagents/tracker.js +16 -0
  92. package/dist/subagents/tracker.js.map +1 -1
  93. package/dist/ultragoal/__tests__/artifacts.test.js +126 -0
  94. package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
  95. package/dist/ultragoal/artifacts.d.ts.map +1 -1
  96. package/dist/ultragoal/artifacts.js +126 -8
  97. package/dist/ultragoal/artifacts.js.map +1 -1
  98. package/package.json +1 -1
  99. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  100. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +2 -2
  101. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +1 -1
  102. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +4 -4
  103. package/plugins/oh-my-codex/skills/plan/SKILL.md +5 -5
  104. package/plugins/oh-my-codex/skills/ralph/SKILL.md +1 -1
  105. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +5 -5
  106. package/prompts/executor.md +1 -1
  107. package/prompts/explore-harness.md +2 -2
  108. package/prompts/explore.md +1 -1
  109. package/prompts/planner.md +1 -1
  110. package/prompts/sisyphus-lite.md +1 -1
  111. package/skills/autopilot/SKILL.md +2 -2
  112. package/skills/deep-interview/SKILL.md +1 -1
  113. package/skills/omx-setup/SKILL.md +4 -4
  114. package/skills/plan/SKILL.md +5 -5
  115. package/skills/ralph/SKILL.md +1 -1
  116. package/skills/ralplan/SKILL.md +5 -5
  117. package/src/scripts/__tests__/codex-native-hook.test.ts +368 -0
  118. package/src/scripts/codex-native-hook.ts +50 -2
  119. package/src/scripts/notify-hook.ts +15 -0
  120. package/templates/AGENTS.md +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AAwCA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AA8BtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAkClE,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,OAAO,2BAA2B,CAAC;CACpE;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AA4RD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAmBf;AAwoBD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,GACL,MAAM,GAAG,IAAI,CAuBf;AAw6BD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnE;AA6lDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAiRnC;AAOD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAGT;AA2ED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC3D"}
1
+ {"version":3,"file":"codex-native-hook.d.ts","sourceRoot":"","sources":["../../src/scripts/codex-native-hook.ts"],"names":[],"mappings":"AAyCA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AA8BtC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAmClE,KAAK,kBAAkB,GACnB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,MAAM,CAAC;AAEX,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6BAA6B,CAAC,EAAE,OAAO,2BAA2B,CAAC;CACpE;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AA4RD,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,GAAG,IAAI,GACvC,MAAM,GAAG,IAAI,CAmBf;AAwoBD,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC/C,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,GACL,MAAM,GAAG,IAAI,CAuBf;AAg8BD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnE;AA+mDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CAqRnC;AAOD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAGT;AA2ED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC3D"}
@@ -8,7 +8,7 @@ import { SKILL_ACTIVE_STATE_FILE, extractSessionIdFromInitializedStatePath, getS
8
8
  import { readSubagentSessionSummary, readSubagentTrackingState, recordSubagentTurnForSession, } from "../subagents/tracker.js";
9
9
  import { resolveCanonicalTeamStateRoot, resolveWorkerNotifyTeamStateRootPath } from "../team/state-root.js";
10
10
  import { appendToLog, isSessionStateUsable, readSessionState, readUsableSessionState, reconcileNativeSessionStart, } from "../hooks/session.js";
11
- import { appendTeamEvent, readTeamLeaderAttention, readTeamManifestV2, readTeamPhase, writeTeamLeaderAttention, writeTeamPhase, } from "../team/state.js";
11
+ import { appendTeamEvent, readTeamLeaderAttention, readTeamConfig, readTeamManifestV2, readTeamPhase, writeTeamLeaderAttention, writeTeamPhase, } from "../team/state.js";
12
12
  import { omxNotepadPath, resolveProjectMemoryPath } from "../utils/paths.js";
13
13
  import { findGitLayout } from "../utils/git-layout.js";
14
14
  import { getBaseStateDir, getStateFilePath, getStatePath } from "../mcp/state-paths.js";
@@ -33,6 +33,7 @@ import { triagePrompt } from "../hooks/triage-heuristic.js";
33
33
  import { readTriageConfig } from "../hooks/triage-config.js";
34
34
  import { readTriageState, writeTriageState, shouldSuppressFollowup, promptSignature, } from "../hooks/triage-state.js";
35
35
  import { isPendingDeepInterviewQuestionEnforcement, reconcileDeepInterviewQuestionEnforcementFromAnsweredRecords, } from "../question/deep-interview.js";
36
+ import { readAutopilotDeepInterviewQuestionWaitState } from "../question/autopilot-wait.js";
36
37
  import { buildDocumentRefreshAdvisoryOutput, evaluateFinalHandoffDocumentRefresh, isFinalHandoffDocumentRefreshCandidate, } from "../document-refresh/enforcer.js";
37
38
  import { buildExecFollowupStopOutput } from "../exec/followup.js";
38
39
  const TERMINAL_MODE_PHASES = new Set(["complete", "completed", "failed", "cancelled"]);
@@ -1538,6 +1539,23 @@ async function resolveTeamStateDirForWorkerContext(cwd, workerContext) {
1538
1539
  }
1539
1540
  return null;
1540
1541
  }
1542
+ async function isConfirmedTeamWorkerPromptSubmitPane(cwd) {
1543
+ const workerContext = parseTeamWorkerEnv(safeString(process.env.OMX_TEAM_INTERNAL_WORKER))
1544
+ || parseTeamWorkerEnv(safeString(process.env.OMX_TEAM_WORKER));
1545
+ if (!workerContext)
1546
+ return false;
1547
+ const currentPaneId = safeString(process.env.TMUX_PANE).trim();
1548
+ if (!currentPaneId)
1549
+ return false;
1550
+ const config = await readTeamConfig(workerContext.teamName, cwd).catch(() => null);
1551
+ if (!config)
1552
+ return false;
1553
+ const leaderPaneId = safeString(config.leader_pane_id).trim();
1554
+ if (leaderPaneId && leaderPaneId === currentPaneId)
1555
+ return false;
1556
+ const workerPaneId = safeString(config.workers.find((worker) => worker.name === workerContext.workerName)?.pane_id).trim();
1557
+ return workerPaneId !== "" && workerPaneId === currentPaneId;
1558
+ }
1541
1559
  async function resolveTeamWorkerStopDecision(cwd) {
1542
1560
  const workerContext = parseTeamWorkerEnv(safeString(process.env.OMX_TEAM_INTERNAL_WORKER))
1543
1561
  || parseTeamWorkerEnv(safeString(process.env.OMX_TEAM_WORKER));
@@ -1652,6 +1670,9 @@ async function buildModeBasedStopOutput(mode, cwd, sessionId) {
1652
1670
  if (await readCanonicalTerminalRunStateForStop(cwd, sessionId, mode)) {
1653
1671
  return null;
1654
1672
  }
1673
+ if (mode === "autopilot" && await readAutopilotDeepInterviewQuestionWaitState(cwd, sessionId)) {
1674
+ return null;
1675
+ }
1655
1676
  const state = await readModeStateForActiveDecision(mode, sessionId?.trim() || undefined, cwd);
1656
1677
  if (!state || !shouldContinueRun(state))
1657
1678
  return null;
@@ -1695,6 +1716,17 @@ function reportsBlockedPerformanceGoalObjectiveMismatch(state) {
1695
1716
  ].join(" ");
1696
1717
  return /objective mismatch/i.test(evidence);
1697
1718
  }
1719
+ function reportsBlockedUltragoalCompletedAggregateMicrogoalLoop(goal) {
1720
+ const evidence = [
1721
+ safeString(goal.failureReason),
1722
+ safeString(goal.blockedReason),
1723
+ safeString(goal.evidence),
1724
+ ].join(" ");
1725
+ return /aggregate codex goal/i.test(evidence)
1726
+ && /\bcomplete(?:d)?\b/i.test(evidence)
1727
+ && /microgoal/i.test(evidence)
1728
+ && /\b(?:unreconcilable|mismatch|loop|already complete|already completed|blocks?)\b/i.test(evidence);
1729
+ }
1698
1730
  async function findActiveGoalWorkflowReconciliationRequirement(cwd) {
1699
1731
  const ultragoal = await readJsonIfExists(join(cwd, ".omx", "ultragoal", "goals.json"));
1700
1732
  const aggregateCompletion = safeObject(ultragoal?.aggregateCompletion);
@@ -1703,6 +1735,9 @@ async function findActiveGoalWorkflowReconciliationRequirement(cwd) {
1703
1735
  const activeUltragoal = aggregateProductComplete
1704
1736
  ? undefined
1705
1737
  : ultragoals.find((goal) => safeString(goal.status) === "in_progress" || safeString(goal.id) === safeString(ultragoal?.activeGoalId));
1738
+ if (activeUltragoal && reportsBlockedUltragoalCompletedAggregateMicrogoalLoop(activeUltragoal)) {
1739
+ return null;
1740
+ }
1706
1741
  if (activeUltragoal) {
1707
1742
  const goalId = safeString(activeUltragoal.id) || "<goal-id>";
1708
1743
  return {
@@ -2309,6 +2344,9 @@ async function readStopAutoNudgePhase(cwd, stateDir, sessionId, threadId) {
2309
2344
  }
2310
2345
  async function buildDeepInterviewQuestionStopOutput(cwd, stateDir, sessionId, threadId) {
2311
2346
  await reconcileDeepInterviewQuestionEnforcementFromAnsweredRecords(cwd, sessionId);
2347
+ if (await readAutopilotDeepInterviewQuestionWaitState(cwd, sessionId)) {
2348
+ return null;
2349
+ }
2312
2350
  const modeState = await readStopSessionPinnedState("deep-interview-state.json", cwd, sessionId, stateDir);
2313
2351
  if (!modeState)
2314
2352
  return null;
@@ -3002,8 +3040,12 @@ export async function dispatchCodexNativeHook(payload, options = {}) {
3002
3040
  triageAdditionalContext = null;
3003
3041
  }
3004
3042
  }
3005
- const reconcileHudForPromptSubmitFn = options.reconcileHudForPromptSubmitFn ?? reconcileHudForPromptSubmit;
3006
- await reconcileHudForPromptSubmitFn(cwd, { sessionId: canonicalSessionId || sessionIdForState || undefined }).catch(() => { });
3043
+ const skipHudReconcileForTeamWorkerPane = !isSubagentPromptSubmit
3044
+ && await isConfirmedTeamWorkerPromptSubmitPane(cwd).catch(() => false);
3045
+ if (!skipHudReconcileForTeamWorkerPane) {
3046
+ const reconcileHudForPromptSubmitFn = options.reconcileHudForPromptSubmitFn ?? reconcileHudForPromptSubmit;
3047
+ await reconcileHudForPromptSubmitFn(cwd, { sessionId: canonicalSessionId || sessionIdForState || undefined }).catch(() => { });
3048
+ }
3007
3049
  }
3008
3050
  if (omxEventName && !skipCanonicalSessionStartContext && !suppressNoisySubagentLifecycleDispatch) {
3009
3051
  const baseContext = buildBaseContext(cwd, payload, hookEventName, canonicalSessionId);