oh-my-codex 0.11.11 → 0.11.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +5 -5
- package/Cargo.toml +1 -1
- package/README.de.md +12 -6
- package/README.el.md +223 -0
- package/README.es.md +12 -6
- package/README.fr.md +11 -5
- package/README.it.md +12 -6
- package/README.ja.md +12 -6
- package/README.ko.md +12 -6
- package/README.md +56 -28
- package/README.pl.md +216 -0
- package/README.pt.md +12 -6
- package/README.ru.md +12 -6
- package/README.tr.md +12 -6
- package/README.vi.md +148 -183
- package/README.zh-TW.md +14 -17
- package/README.zh.md +12 -6
- package/crates/omx-runtime-core/src/engine.rs +122 -4
- package/crates/omx-runtime-core/src/lib.rs +17 -0
- package/dist/autoresearch/contracts.d.ts.map +1 -1
- package/dist/autoresearch/contracts.js +1 -0
- package/dist/autoresearch/contracts.js.map +1 -1
- package/dist/autoresearch/runtime.d.ts.map +1 -1
- package/dist/autoresearch/runtime.js +7 -1
- package/dist/autoresearch/runtime.js.map +1 -1
- package/dist/cli/__tests__/agents.test.js +24 -1
- package/dist/cli/__tests__/agents.test.js.map +1 -1
- package/dist/cli/__tests__/autoresearch.test.js +11 -0
- package/dist/cli/__tests__/autoresearch.test.js.map +1 -1
- package/dist/cli/__tests__/cleanup.test.js +117 -4
- package/dist/cli/__tests__/cleanup.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-warning-copy.test.js +33 -3
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/error-handling-warnings.test.js +13 -0
- package/dist/cli/__tests__/error-handling-warnings.test.js.map +1 -1
- package/dist/cli/__tests__/exec.test.js +6 -0
- package/dist/cli/__tests__/exec.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +101 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +3 -0
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +10 -0
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/packaged-script-resolution.test.js +4 -3
- package/dist/cli/__tests__/packaged-script-resolution.test.js.map +1 -1
- package/dist/cli/__tests__/resume.test.js +6 -0
- package/dist/cli/__tests__/resume.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +29 -12
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +1 -1
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/star-prompt.test.js +16 -0
- package/dist/cli/__tests__/star-prompt.test.js.map +1 -1
- package/dist/cli/__tests__/uninstall.test.js +112 -1
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts +2 -0
- package/dist/cli/__tests__/windows-popup-loop-contract.test.d.ts.map +1 -0
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js +30 -0
- package/dist/cli/__tests__/windows-popup-loop-contract.test.js.map +1 -0
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +9 -3
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/autoresearch-guided.d.ts.map +1 -1
- package/dist/cli/autoresearch-guided.js +9 -3
- package/dist/cli/autoresearch-guided.js.map +1 -1
- package/dist/cli/autoresearch.d.ts.map +1 -1
- package/dist/cli/autoresearch.js +8 -2
- package/dist/cli/autoresearch.js.map +1 -1
- package/dist/cli/cleanup.d.ts +2 -0
- package/dist/cli/cleanup.d.ts.map +1 -1
- package/dist/cli/cleanup.js +27 -1
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/doctor.js +7 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +9 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +171 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +18 -15
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/star-prompt.d.ts.map +1 -1
- package/dist/cli/star-prompt.js +2 -0
- package/dist/cli/star-prompt.js.map +1 -1
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +5 -1
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/tmux-hook.d.ts.map +1 -1
- package/dist/cli/tmux-hook.js +4 -1
- package/dist/cli/tmux-hook.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +26 -0
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +1 -0
- package/dist/cli/update.js.map +1 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js +84 -1
- package/dist/compat/__tests__/rust-runtime-compat.test.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +4 -4
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/mcp-registry.test.js +13 -16
- package/dist/config/__tests__/mcp-registry.test.js.map +1 -1
- package/dist/config/mcp-registry.d.ts +1 -0
- package/dist/config/mcp-registry.d.ts.map +1 -1
- package/dist/config/mcp-registry.js +4 -4
- package/dist/config/mcp-registry.js.map +1 -1
- package/dist/config/models.d.ts +1 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +39 -1
- package/dist/config/models.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +12 -1
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +554 -18
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +347 -16
- package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.js +5 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js +597 -0
- package/dist/hooks/__tests__/notify-hook-ralph-resume.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js +19 -1
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js +73 -53
- package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +193 -2
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +183 -0
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +255 -97
- package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js +0 -0
- package/dist/hooks/__tests__/notify-hook-tmux-scrollback.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +46 -0
- package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-team-routing.test.js +34 -0
- package/dist/hooks/__tests__/prompt-team-routing.test.js.map +1 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js +32 -1
- package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
- package/dist/hooks/code-simplifier/index.d.ts.map +1 -1
- package/dist/hooks/code-simplifier/index.js +1 -0
- package/dist/hooks/code-simplifier/index.js.map +1 -1
- package/dist/hooks/codebase-map.d.ts.map +1 -1
- package/dist/hooks/codebase-map.js +1 -0
- package/dist/hooks/codebase-map.js.map +1 -1
- package/dist/hooks/extensibility/sdk/tmux.d.ts.map +1 -1
- package/dist/hooks/extensibility/sdk/tmux.js +3 -1
- package/dist/hooks/extensibility/sdk/tmux.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +1 -0
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +48 -0
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +6 -0
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.d.ts.map +1 -1
- package/dist/hooks/session.js +1 -0
- package/dist/hooks/session.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +70 -1
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/authority.d.ts.map +1 -1
- package/dist/hud/authority.js +1 -0
- package/dist/hud/authority.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +52 -0
- package/dist/hud/state.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +5 -0
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/modes/__tests__/base-session-scope.test.js +46 -0
- package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +4 -0
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts +2 -0
- package/dist/notifications/__tests__/custom-alias-enablement.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/custom-alias-enablement.test.js +84 -0
- package/dist/notifications/__tests__/custom-alias-enablement.test.js.map +1 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js +55 -0
- package/dist/notifications/__tests__/idle-cooldown.test.js.map +1 -1
- package/dist/notifications/idle-cooldown.d.ts +8 -6
- package/dist/notifications/idle-cooldown.d.ts.map +1 -1
- package/dist/notifications/idle-cooldown.js +53 -22
- package/dist/notifications/idle-cooldown.js.map +1 -1
- package/dist/notifications/notifier.js +1 -1
- package/dist/notifications/notifier.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +1 -0
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +4 -0
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/openclaw/config.js +2 -2
- package/dist/openclaw/config.js.map +1 -1
- package/dist/runtime/bridge.d.ts +2 -0
- package/dist/runtime/bridge.d.ts.map +1 -1
- package/dist/runtime/bridge.js +8 -0
- package/dist/runtime/bridge.js.map +1 -1
- package/dist/scripts/notify-fallback-watcher.js +103 -53
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.d.ts +2 -1
- package/dist/scripts/notify-hook/auto-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/auto-nudge.js +90 -104
- package/dist/scripts/notify-hook/auto-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/managed-tmux.d.ts +19 -0
- package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -0
- package/dist/scripts/notify-hook/managed-tmux.js +320 -0
- package/dist/scripts/notify-hook/managed-tmux.js.map +1 -0
- package/dist/scripts/notify-hook/operational-events.d.ts.map +1 -1
- package/dist/scripts/notify-hook/operational-events.js +2 -0
- package/dist/scripts/notify-hook/operational-events.js.map +1 -1
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts +22 -0
- package/dist/scripts/notify-hook/ralph-session-resume.d.ts.map +1 -0
- package/dist/scripts/notify-hook/ralph-session-resume.js +277 -0
- package/dist/scripts/notify-hook/ralph-session-resume.js.map +1 -0
- package/dist/scripts/notify-hook/state-io.d.ts +1 -1
- package/dist/scripts/notify-hook/state-io.d.ts.map +1 -1
- package/dist/scripts/notify-hook/state-io.js +2 -10
- package/dist/scripts/notify-hook/state-io.js.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts +1 -1
- package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-dispatch.js +123 -72
- package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts +2 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +13 -5
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-tmux-guard.js +1 -19
- package/dist/scripts/notify-hook/team-tmux-guard.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +4 -4
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts +1 -1
- package/dist/scripts/notify-hook/tmux-injection.d.ts.map +1 -1
- package/dist/scripts/notify-hook/tmux-injection.js +102 -35
- package/dist/scripts/notify-hook/tmux-injection.js.map +1 -1
- package/dist/scripts/notify-hook.js +144 -20
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/run-provider-advisor.js +2 -0
- package/dist/scripts/run-provider-advisor.js.map +1 -1
- package/dist/scripts/run-test-files.d.ts +2 -0
- package/dist/scripts/run-test-files.d.ts.map +1 -0
- package/dist/scripts/run-test-files.js +41 -0
- package/dist/scripts/run-test-files.js.map +1 -0
- package/dist/scripts/tmux-hook-engine.d.ts +2 -0
- package/dist/scripts/tmux-hook-engine.d.ts.map +1 -1
- package/dist/scripts/tmux-hook-engine.js +15 -0
- package/dist/scripts/tmux-hook-engine.js.map +1 -1
- package/dist/team/__tests__/api-interop.test.js +136 -4
- package/dist/team/__tests__/api-interop.test.js.map +1 -1
- package/dist/team/__tests__/leader-activity.test.js +107 -2
- package/dist/team/__tests__/leader-activity.test.js.map +1 -1
- package/dist/team/__tests__/runtime-cli.test.js +32 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +148 -0
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/shutdown-fallback.test.js +13 -0
- package/dist/team/__tests__/shutdown-fallback.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.js +11 -1
- package/dist/team/__tests__/state-root.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +237 -0
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +521 -2
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +41 -31
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/commit-hygiene.d.ts +60 -0
- package/dist/team/commit-hygiene.d.ts.map +1 -0
- package/dist/team/commit-hygiene.js +232 -0
- package/dist/team/commit-hygiene.js.map +1 -0
- package/dist/team/leader-activity.d.ts.map +1 -1
- package/dist/team/leader-activity.js +56 -4
- package/dist/team/leader-activity.js.map +1 -1
- package/dist/team/runtime-cli.d.ts +9 -1
- package/dist/team/runtime-cli.d.ts.map +1 -1
- package/dist/team/runtime-cli.js +15 -6
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +7 -2
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +392 -171
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +6 -2
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state/dispatch.d.ts +2 -0
- package/dist/team/state/dispatch.d.ts.map +1 -1
- package/dist/team/state/dispatch.js +86 -40
- package/dist/team/state/dispatch.js.map +1 -1
- package/dist/team/state/mailbox.d.ts +3 -0
- package/dist/team/state/mailbox.d.ts.map +1 -1
- package/dist/team/state/mailbox.js +93 -19
- package/dist/team/state/mailbox.js.map +1 -1
- package/dist/team/state-root.d.ts +1 -1
- package/dist/team/state-root.d.ts.map +1 -1
- package/dist/team/state-root.js +8 -3
- package/dist/team/state-root.js.map +1 -1
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +96 -2
- package/dist/team/state.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +81 -29
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +4 -0
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.d.ts.map +1 -1
- package/dist/team/worktree.js +9 -0
- package/dist/team/worktree.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +98 -11
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/__tests__/platform-command.test.js +101 -2
- package/dist/utils/__tests__/platform-command.test.js.map +1 -1
- package/dist/utils/git-layout.d.ts +8 -0
- package/dist/utils/git-layout.d.ts.map +1 -0
- package/dist/utils/git-layout.js +58 -0
- package/dist/utils/git-layout.js.map +1 -0
- package/dist/utils/paths.d.ts +3 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +14 -4
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/platform-command.d.ts.map +1 -1
- package/dist/utils/platform-command.js +35 -3
- package/dist/utils/platform-command.js.map +1 -1
- package/package.json +9 -5
- package/src/scripts/notify-fallback-watcher.ts +103 -53
- package/src/scripts/notify-hook/auto-nudge.ts +97 -103
- package/src/scripts/notify-hook/managed-tmux.ts +324 -0
- package/src/scripts/notify-hook/operational-events.ts +2 -0
- package/src/scripts/notify-hook/ralph-session-resume.ts +337 -0
- package/src/scripts/notify-hook/state-io.ts +2 -10
- package/src/scripts/notify-hook/team-dispatch.ts +131 -66
- package/src/scripts/notify-hook/team-leader-nudge.ts +19 -5
- package/src/scripts/notify-hook/team-tmux-guard.ts +0 -20
- package/src/scripts/notify-hook/team-worker.ts +4 -4
- package/src/scripts/notify-hook/tmux-injection.ts +103 -33
- package/src/scripts/notify-hook.ts +150 -21
- package/src/scripts/run-provider-advisor.ts +4 -2
- package/src/scripts/run-test-files.ts +48 -0
- package/src/scripts/tmux-hook-engine.ts +16 -0
- package/templates/AGENTS.md +51 -43
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
import { describe, it } from 'node:test';
|
|
2
2
|
import assert from 'node:assert/strict';
|
|
3
|
-
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { mkdir, mkdtemp, readFile, rm, utimes, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
|
-
import { join } from 'node:path';
|
|
5
|
+
import { join, relative } from 'node:path';
|
|
6
6
|
import { tmpdir } from 'node:os';
|
|
7
7
|
import { isLeaderRuntimeStale, readLatestLeaderActivityMsFromStateDir, recordLeaderRuntimeActivity, } from '../leader-activity.js';
|
|
8
|
+
async function withWindowsPlatform(run) {
|
|
9
|
+
const originalPlatform = Object.getOwnPropertyDescriptor(process, 'platform');
|
|
10
|
+
Object.defineProperty(process, 'platform', { value: 'win32', configurable: true });
|
|
11
|
+
try {
|
|
12
|
+
await run();
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
if (originalPlatform) {
|
|
16
|
+
Object.defineProperty(process, 'platform', originalPlatform);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function createWorktreePointerFixture(cwd) {
|
|
21
|
+
const gitDir = join(cwd, '.git-admin', 'worktrees', 'feature');
|
|
22
|
+
const commonDir = join(cwd, '.git-admin');
|
|
23
|
+
await mkdir(join(gitDir, 'logs'), { recursive: true });
|
|
24
|
+
await mkdir(join(commonDir, 'logs', 'refs', 'heads'), { recursive: true });
|
|
25
|
+
await mkdir(commonDir, { recursive: true });
|
|
26
|
+
await writeFile(join(cwd, '.git'), `gitdir: ${relative(cwd, gitDir)}\n`);
|
|
27
|
+
await writeFile(join(gitDir, 'HEAD'), 'ref: refs/heads/worktree-branch\n');
|
|
28
|
+
await writeFile(join(gitDir, 'commondir'), '../..\n');
|
|
29
|
+
await writeFile(join(gitDir, 'logs', 'HEAD'), 'old\n');
|
|
30
|
+
await writeFile(join(commonDir, 'logs', 'refs', 'heads', 'worktree-branch'), 'new\n');
|
|
31
|
+
await writeFile(join(commonDir, 'config'), '');
|
|
32
|
+
return { gitDir, commonDir };
|
|
33
|
+
}
|
|
8
34
|
describe('leader runtime activity', () => {
|
|
9
35
|
it('records team status activity with shared leader activity metadata', async () => {
|
|
10
36
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-leader-activity-'));
|
|
@@ -110,6 +136,85 @@ describe('leader runtime activity', () => {
|
|
|
110
136
|
await rm(cwd, { recursive: true, force: true });
|
|
111
137
|
}
|
|
112
138
|
});
|
|
139
|
+
it('treats worktree .git file pointers as recent branch activity on Windows', async () => {
|
|
140
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-leader-activity-worktree-'));
|
|
141
|
+
try {
|
|
142
|
+
const { gitDir, commonDir } = await createWorktreePointerFixture(cwd);
|
|
143
|
+
const stateDir = join(cwd, '.omx', 'state');
|
|
144
|
+
await mkdir(stateDir, { recursive: true });
|
|
145
|
+
await writeFile(join(stateDir, 'hud-state.json'), JSON.stringify({
|
|
146
|
+
last_turn_at: '2026-03-21T04:00:00.000Z',
|
|
147
|
+
}));
|
|
148
|
+
await writeFile(join(stateDir, 'leader-runtime-activity.json'), JSON.stringify({
|
|
149
|
+
last_activity_at: '2026-03-21T04:00:00.000Z',
|
|
150
|
+
last_source: 'team_status',
|
|
151
|
+
}));
|
|
152
|
+
const staleMs = Date.parse('2026-03-21T04:00:00.000Z');
|
|
153
|
+
const recentMs = Date.parse('2026-03-21T04:10:00.000Z');
|
|
154
|
+
const staleDate = new Date(staleMs);
|
|
155
|
+
const recentDate = new Date(recentMs);
|
|
156
|
+
await utimes(join(gitDir, 'HEAD'), staleDate, staleDate);
|
|
157
|
+
await utimes(join(gitDir, 'logs', 'HEAD'), staleDate, staleDate);
|
|
158
|
+
await utimes(join(commonDir, 'logs', 'refs', 'heads', 'worktree-branch'), recentDate, recentDate);
|
|
159
|
+
await withWindowsPlatform(async () => {
|
|
160
|
+
assert.equal(await isLeaderRuntimeStale(stateDir, 30_000, recentMs + 5_000), false);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
await rm(cwd, { recursive: true, force: true });
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
it('uses absolute git-path results for real worktree reflogs', async () => {
|
|
168
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-leader-activity-worktree-real-'));
|
|
169
|
+
const worktreePath = `${cwd}-wt`;
|
|
170
|
+
try {
|
|
171
|
+
execFileSync('git', ['init'], { cwd, stdio: 'ignore' });
|
|
172
|
+
execFileSync('git', ['config', 'user.email', 'test@example.com'], { cwd, stdio: 'ignore' });
|
|
173
|
+
execFileSync('git', ['config', 'user.name', 'Test User'], { cwd, stdio: 'ignore' });
|
|
174
|
+
await writeFile(join(cwd, 'README.md'), 'hello\n', 'utf-8');
|
|
175
|
+
execFileSync('git', ['add', 'README.md'], { cwd, stdio: 'ignore' });
|
|
176
|
+
execFileSync('git', ['commit', '-m', 'init'], {
|
|
177
|
+
cwd,
|
|
178
|
+
stdio: 'ignore',
|
|
179
|
+
env: {
|
|
180
|
+
...process.env,
|
|
181
|
+
GIT_AUTHOR_DATE: '2026-03-21T04:00:00.000Z',
|
|
182
|
+
GIT_COMMITTER_DATE: '2026-03-21T04:00:00.000Z',
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
execFileSync('git', ['worktree', 'add', '-b', 'feature', worktreePath], { cwd, stdio: 'ignore' });
|
|
186
|
+
const stateDir = join(worktreePath, '.omx', 'state');
|
|
187
|
+
await mkdir(stateDir, { recursive: true });
|
|
188
|
+
await writeFile(join(stateDir, 'hud-state.json'), JSON.stringify({
|
|
189
|
+
last_turn_at: '2026-03-21T04:00:00.000Z',
|
|
190
|
+
}));
|
|
191
|
+
await writeFile(join(stateDir, 'leader-runtime-activity.json'), JSON.stringify({
|
|
192
|
+
last_activity_at: '2026-03-21T04:00:00.000Z',
|
|
193
|
+
last_source: 'team_status',
|
|
194
|
+
}));
|
|
195
|
+
const headLogPath = execFileSync('git', ['rev-parse', '--git-path', 'logs/HEAD'], {
|
|
196
|
+
cwd: worktreePath,
|
|
197
|
+
encoding: 'utf-8',
|
|
198
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
199
|
+
}).trim();
|
|
200
|
+
const branchLogPath = execFileSync('git', ['rev-parse', '--git-path', 'logs/refs/heads/feature'], {
|
|
201
|
+
cwd: worktreePath,
|
|
202
|
+
encoding: 'utf-8',
|
|
203
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
204
|
+
}).trim();
|
|
205
|
+
const staleMs = Date.parse('2026-03-21T04:00:00.000Z');
|
|
206
|
+
const recentMs = Date.parse('2026-03-21T04:10:00.000Z');
|
|
207
|
+
const staleDate = new Date(staleMs);
|
|
208
|
+
const recentDate = new Date(recentMs);
|
|
209
|
+
await utimes(headLogPath, staleDate, staleDate);
|
|
210
|
+
await utimes(branchLogPath, recentDate, recentDate);
|
|
211
|
+
assert.equal(await isLeaderRuntimeStale(stateDir, 30_000, recentMs + 5_000), false);
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
await rm(worktreePath, { recursive: true, force: true });
|
|
215
|
+
await rm(cwd, { recursive: true, force: true });
|
|
216
|
+
}
|
|
217
|
+
});
|
|
113
218
|
it('treats missing or invalid runtime evidence as not stale', async () => {
|
|
114
219
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-leader-activity-'));
|
|
115
220
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leader-activity.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/leader-activity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,sCAAsC,EACtC,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,0BAA0B,CAAC;YAC1C,MAAM,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAEvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,CAAC,EAAE,OAAO,CAAC,CAK9G,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7E,gBAAgB,EAAE,0BAA0B;gBAC5C,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAC;YAEJ,MAAM,cAAc,GAAG,MAAM,sCAAsC,CAAC,QAAQ,CAAC,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvE,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAIH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAErD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7E,gBAAgB,EAAE,0BAA0B;gBAC5C,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAErD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7E,gBAAgB,EAAE,0BAA0B;gBAC5C,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAIH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5F,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC5D,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAExE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC7E,gBAAgB,EAAE,0BAA0B;gBAC5C,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAC;YAEJ,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAClE,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEnF,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;gBAChF,GAAG;gBACH,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YAElB,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QACpF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAE9E,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAClG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE1G,MAAM,CAAC,KAAK,CAAC,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"leader-activity.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/leader-activity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,38 @@ describe('runtime-cli helpers', () => {
|
|
|
55
55
|
assert.equal(liveBehavior.deadWorkerFailure, true);
|
|
56
56
|
assert.equal(liveBehavior.fixingWithNoWorkers, false);
|
|
57
57
|
});
|
|
58
|
+
it('reads task results from explicit OMX_TEAM_STATE_ROOT during shutdown collection', async () => {
|
|
59
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-cli-env-root-cwd-'));
|
|
60
|
+
const explicitStateRoot = await mkdtemp(join(tmpdir(), 'omx-runtime-cli-env-root-state-'));
|
|
61
|
+
const previousTeamStateRoot = process.env.OMX_TEAM_STATE_ROOT;
|
|
62
|
+
process.env.OMX_TEAM_STATE_ROOT = explicitStateRoot;
|
|
63
|
+
try {
|
|
64
|
+
await initTeamState('env-root-results', 'task', 'executor', 1, cwd);
|
|
65
|
+
await createTask('env-root-results', {
|
|
66
|
+
subject: 'completed task',
|
|
67
|
+
description: 'stored under explicit state root',
|
|
68
|
+
status: 'completed',
|
|
69
|
+
owner: 'worker-1',
|
|
70
|
+
result: 'PASS: explicit root task result',
|
|
71
|
+
}, cwd);
|
|
72
|
+
const runtimeCli = await loadRuntimeCliModule();
|
|
73
|
+
const stateRoot = runtimeCli.resolveRuntimeCliStateRoot(cwd);
|
|
74
|
+
assert.equal(stateRoot, explicitStateRoot);
|
|
75
|
+
assert.deepEqual(runtimeCli.collectTaskResults(stateRoot, 'env-root-results'), [{
|
|
76
|
+
taskId: '1',
|
|
77
|
+
status: 'completed',
|
|
78
|
+
summary: 'PASS: explicit root task result',
|
|
79
|
+
}]);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
if (typeof previousTeamStateRoot === 'string')
|
|
83
|
+
process.env.OMX_TEAM_STATE_ROOT = previousTeamStateRoot;
|
|
84
|
+
else
|
|
85
|
+
delete process.env.OMX_TEAM_STATE_ROOT;
|
|
86
|
+
await rm(explicitStateRoot, { recursive: true, force: true });
|
|
87
|
+
await rm(cwd, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
58
90
|
it('gracefully shuts down only when the leader explicitly requests shutdown', async () => {
|
|
59
91
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-cli-shutdown-'));
|
|
60
92
|
const previousTeamStateRoot = process.env.OMX_TEAM_STATE_ROOT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-cli.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/runtime-cli.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-cli.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/runtime-cli.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1321,6 +1321,91 @@ process.on('SIGTERM', () => {
|
|
|
1321
1321
|
await rm(cwd, { recursive: true, force: true });
|
|
1322
1322
|
}
|
|
1323
1323
|
});
|
|
1324
|
+
it('shutdownTeam reaps detached prompt-worker descendants', async () => {
|
|
1325
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-prompt-descendants-'));
|
|
1326
|
+
const binDir = join(cwd, 'bin');
|
|
1327
|
+
const fakeCodexPath = join(binDir, 'codex');
|
|
1328
|
+
const helperPidPath = join(cwd, 'helper.pid');
|
|
1329
|
+
await mkdir(binDir, { recursive: true });
|
|
1330
|
+
await writeFile(fakeCodexPath, `#!/usr/bin/env node
|
|
1331
|
+
const { spawn } = require('child_process');
|
|
1332
|
+
const { writeFileSync } = require('fs');
|
|
1333
|
+
const helper = spawn(process.execPath, ['-e', \`
|
|
1334
|
+
process.on('SIGTERM', () => {});
|
|
1335
|
+
setInterval(() => {}, 1000);
|
|
1336
|
+
\`], { detached: true, stdio: 'ignore' });
|
|
1337
|
+
helper.unref();
|
|
1338
|
+
writeFileSync(process.env.OMX_HELPER_PID_PATH, String(helper.pid));
|
|
1339
|
+
process.stdin.resume();
|
|
1340
|
+
setInterval(() => {}, 1000);
|
|
1341
|
+
process.on('SIGTERM', () => process.exit(0));
|
|
1342
|
+
`, { mode: 0o755 });
|
|
1343
|
+
const prevPath = process.env.PATH;
|
|
1344
|
+
const prevTmux = process.env.TMUX;
|
|
1345
|
+
const prevLaunchMode = process.env.OMX_TEAM_WORKER_LAUNCH_MODE;
|
|
1346
|
+
const prevWorkerCli = process.env.OMX_TEAM_WORKER_CLI;
|
|
1347
|
+
const prevHelperPidPath = process.env.OMX_HELPER_PID_PATH;
|
|
1348
|
+
process.env.PATH = `${binDir}:${prevPath ?? ''}`;
|
|
1349
|
+
delete process.env.TMUX;
|
|
1350
|
+
process.env.OMX_TEAM_WORKER_LAUNCH_MODE = 'prompt';
|
|
1351
|
+
process.env.OMX_TEAM_WORKER_CLI = 'codex';
|
|
1352
|
+
process.env.OMX_HELPER_PID_PATH = helperPidPath;
|
|
1353
|
+
let runtime = null;
|
|
1354
|
+
let helperPid = 0;
|
|
1355
|
+
try {
|
|
1356
|
+
runtime = await withoutTeamWorkerEnv(() => startTeam('team-prompt-descendants', 'prompt-mode detached descendant teardown', 'executor', 1, [{ subject: 's', description: 'd', owner: 'worker-1' }], cwd));
|
|
1357
|
+
for (let attempt = 0; attempt < 40; attempt += 1) {
|
|
1358
|
+
if (existsSync(helperPidPath))
|
|
1359
|
+
break;
|
|
1360
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
1361
|
+
}
|
|
1362
|
+
helperPid = Number((await readFile(helperPidPath, 'utf-8')).trim());
|
|
1363
|
+
assert.ok(helperPid > 0, 'detached helper pid should be captured');
|
|
1364
|
+
await shutdownTeam(runtime.teamName, cwd, { force: true });
|
|
1365
|
+
runtime = null;
|
|
1366
|
+
let alive = false;
|
|
1367
|
+
try {
|
|
1368
|
+
process.kill(helperPid, 0);
|
|
1369
|
+
alive = true;
|
|
1370
|
+
}
|
|
1371
|
+
catch {
|
|
1372
|
+
alive = false;
|
|
1373
|
+
}
|
|
1374
|
+
assert.equal(alive, false, `detached helper pid ${helperPid} should be terminated after shutdown`);
|
|
1375
|
+
}
|
|
1376
|
+
finally {
|
|
1377
|
+
if (runtime) {
|
|
1378
|
+
await shutdownTeam(runtime.teamName, cwd, { force: true }).catch(() => { });
|
|
1379
|
+
}
|
|
1380
|
+
if (helperPid > 0) {
|
|
1381
|
+
try {
|
|
1382
|
+
process.kill(helperPid, 'SIGKILL');
|
|
1383
|
+
}
|
|
1384
|
+
catch { }
|
|
1385
|
+
}
|
|
1386
|
+
if (typeof prevPath === 'string')
|
|
1387
|
+
process.env.PATH = prevPath;
|
|
1388
|
+
else
|
|
1389
|
+
delete process.env.PATH;
|
|
1390
|
+
if (typeof prevTmux === 'string')
|
|
1391
|
+
process.env.TMUX = prevTmux;
|
|
1392
|
+
else
|
|
1393
|
+
delete process.env.TMUX;
|
|
1394
|
+
if (typeof prevLaunchMode === 'string')
|
|
1395
|
+
process.env.OMX_TEAM_WORKER_LAUNCH_MODE = prevLaunchMode;
|
|
1396
|
+
else
|
|
1397
|
+
delete process.env.OMX_TEAM_WORKER_LAUNCH_MODE;
|
|
1398
|
+
if (typeof prevWorkerCli === 'string')
|
|
1399
|
+
process.env.OMX_TEAM_WORKER_CLI = prevWorkerCli;
|
|
1400
|
+
else
|
|
1401
|
+
delete process.env.OMX_TEAM_WORKER_CLI;
|
|
1402
|
+
if (typeof prevHelperPidPath === 'string')
|
|
1403
|
+
process.env.OMX_HELPER_PID_PATH = prevHelperPidPath;
|
|
1404
|
+
else
|
|
1405
|
+
delete process.env.OMX_HELPER_PID_PATH;
|
|
1406
|
+
await rm(cwd, { recursive: true, force: true });
|
|
1407
|
+
}
|
|
1408
|
+
});
|
|
1324
1409
|
it('monitorTeam returns null for non-existent team', async () => {
|
|
1325
1410
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-'));
|
|
1326
1411
|
try {
|
|
@@ -1628,6 +1713,11 @@ process.on('SIGTERM', () => {
|
|
|
1628
1713
|
// Verify worker's changes are integrated into leader
|
|
1629
1714
|
const snapshot = await readMonitorSnapshot('team-auto-commit', repo);
|
|
1630
1715
|
assert.ok(snapshot?.integrationByWorker?.['worker-1']?.last_integrated_head, 'auto-committed changes should be integrated');
|
|
1716
|
+
const ledgerPath = join(repo, '.omx', 'reports', 'team-commit-hygiene', 'team-auto-commit.ledger.json');
|
|
1717
|
+
assert.equal(existsSync(ledgerPath), true, 'commit hygiene ledger should be written for runtime operational commits');
|
|
1718
|
+
const ledger = JSON.parse(await readFile(ledgerPath, 'utf-8'));
|
|
1719
|
+
assert.equal(ledger.entries.some((entry) => entry.operation === 'auto_checkpoint'), true);
|
|
1720
|
+
assert.equal(ledger.entries.some((entry) => entry.operation === 'integration_merge'), true);
|
|
1631
1721
|
}
|
|
1632
1722
|
finally {
|
|
1633
1723
|
if (workerPath) {
|
|
@@ -1680,6 +1770,61 @@ process.on('SIGTERM', () => {
|
|
|
1680
1770
|
await rm(repo, { recursive: true, force: true });
|
|
1681
1771
|
}
|
|
1682
1772
|
});
|
|
1773
|
+
it('monitorTeam integrates detached worker worktree by commit sha instead of merging leader HEAD into itself', async () => {
|
|
1774
|
+
const repo = await initRepo();
|
|
1775
|
+
let workerPath = '';
|
|
1776
|
+
try {
|
|
1777
|
+
workerPath = await addWorktree(repo, 'wk1-detached-merge-branch', 'omx-runtime-wk1-detached-merge-');
|
|
1778
|
+
await writeFile(join(workerPath, 'detached-feature.txt'), 'detached worker feature\n', 'utf-8');
|
|
1779
|
+
execFileSync('git', ['add', 'detached-feature.txt'], { cwd: workerPath, stdio: 'ignore' });
|
|
1780
|
+
execFileSync('git', ['commit', '-m', 'detached worker feature'], { cwd: workerPath, stdio: 'ignore' });
|
|
1781
|
+
execFileSync('git', ['checkout', '--detach', 'HEAD'], { cwd: workerPath, stdio: 'ignore' });
|
|
1782
|
+
const workerHead = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: workerPath, encoding: 'utf-8' }).trim();
|
|
1783
|
+
const detachedName = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: workerPath, encoding: 'utf-8' }).trim();
|
|
1784
|
+
assert.equal(detachedName, 'HEAD');
|
|
1785
|
+
const leaderHeadBefore = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: repo, encoding: 'utf-8' }).trim();
|
|
1786
|
+
await initTeamState('team-merge-detached', 'merge detached head test', 'executor', 1, repo);
|
|
1787
|
+
const cfg = await readTeamConfig('team-merge-detached', repo);
|
|
1788
|
+
assert.ok(cfg);
|
|
1789
|
+
if (!cfg)
|
|
1790
|
+
throw new Error('missing config');
|
|
1791
|
+
cfg.leader_pane_id = '';
|
|
1792
|
+
cfg.workers[0] = {
|
|
1793
|
+
...cfg.workers[0],
|
|
1794
|
+
assigned_tasks: ['1'],
|
|
1795
|
+
worktree_repo_root: repo,
|
|
1796
|
+
worktree_path: workerPath,
|
|
1797
|
+
worktree_branch: undefined,
|
|
1798
|
+
worktree_detached: true,
|
|
1799
|
+
worktree_created: false,
|
|
1800
|
+
};
|
|
1801
|
+
await saveTeamConfig(cfg, repo);
|
|
1802
|
+
await monitorTeam('team-merge-detached', repo);
|
|
1803
|
+
const leaderHeadAfter = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: repo, encoding: 'utf-8' }).trim();
|
|
1804
|
+
assert.notEqual(leaderHeadAfter, leaderHeadBefore, 'leader HEAD should advance for detached worker integration');
|
|
1805
|
+
assert.equal(await readFile(join(repo, 'detached-feature.txt'), 'utf-8'), 'detached worker feature\n');
|
|
1806
|
+
const commitObj = execFileSync('git', ['cat-file', '-p', leaderHeadAfter], { cwd: repo, encoding: 'utf-8' });
|
|
1807
|
+
const parentCount = commitObj.split('\n').filter((l) => l.startsWith('parent ')).length;
|
|
1808
|
+
assert.equal(parentCount, 2, 'detached worker integration should still produce a merge commit');
|
|
1809
|
+
const workerMerged = execFileSync('git', ['merge-base', '--is-ancestor', workerHead, 'HEAD'], { cwd: repo, encoding: 'utf-8' });
|
|
1810
|
+
assert.equal(workerMerged.length >= 0, true);
|
|
1811
|
+
const leaderMailbox = await listMailboxMessages('team-merge-detached', 'leader-fixed', repo);
|
|
1812
|
+
assert.equal(leaderMailbox.some((message) => message.body.includes(`INTEGRATED: merged worker-1 (${workerHead.slice(0, 12)})`)
|
|
1813
|
+
&& message.body.includes(leaderHeadAfter.slice(0, 12))), true);
|
|
1814
|
+
const ledgerPath = join(repo, '.omx', 'reports', 'team-commit-hygiene', 'team-merge-detached.ledger.json');
|
|
1815
|
+
const ledger = JSON.parse(await readFile(ledgerPath, 'utf-8'));
|
|
1816
|
+
assert.equal(ledger.entries.some((entry) => entry.operation === 'integration_merge'
|
|
1817
|
+
&& entry.status === 'applied'
|
|
1818
|
+
&& entry.source_commit === workerHead
|
|
1819
|
+
&& entry.leader_head_before !== entry.leader_head_after), true);
|
|
1820
|
+
}
|
|
1821
|
+
finally {
|
|
1822
|
+
if (workerPath) {
|
|
1823
|
+
await rm(workerPath, { recursive: true, force: true });
|
|
1824
|
+
}
|
|
1825
|
+
await rm(repo, { recursive: true, force: true });
|
|
1826
|
+
}
|
|
1827
|
+
});
|
|
1683
1828
|
it('monitorTeam uses cherry-pick for diverged worker (hybrid cherry-pick path)', async () => {
|
|
1684
1829
|
const repo = await initRepo();
|
|
1685
1830
|
let workerPath = '';
|
|
@@ -1781,6 +1926,9 @@ process.on('SIGTERM', () => {
|
|
|
1781
1926
|
const newLeaderHead = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: repo, encoding: 'utf-8' }).trim();
|
|
1782
1927
|
const mergeBase = execFileSync('git', ['merge-base', newLeaderHead, 'wk2-xr-branch'], { cwd: repo, encoding: 'utf-8' }).trim();
|
|
1783
1928
|
assert.equal(mergeBase, newLeaderHead, 'worker-2 should be rebased onto new leader HEAD');
|
|
1929
|
+
const ledgerPath = join(repo, '.omx', 'reports', 'team-commit-hygiene', 'team-cross-rebase.ledger.json');
|
|
1930
|
+
const ledger = JSON.parse(await readFile(ledgerPath, 'utf-8'));
|
|
1931
|
+
assert.equal(ledger.entries.some((entry) => entry.operation === 'cross_rebase' && entry.worker_name === 'worker-2' && entry.status === 'applied'), true);
|
|
1784
1932
|
}
|
|
1785
1933
|
finally {
|
|
1786
1934
|
if (worker1Path) {
|