oh-my-codex 0.15.2 → 0.16.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.
- package/Cargo.lock +10 -7
- package/Cargo.toml +1 -1
- package/README.md +3 -0
- package/crates/omx-explore/Cargo.toml +3 -0
- package/crates/omx-explore/src/main.rs +517 -16
- package/dist/agents/__tests__/native-config.test.js +33 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/autoresearch/goal.d.ts +90 -0
- package/dist/autoresearch/goal.d.ts.map +1 -0
- package/dist/autoresearch/goal.js +237 -0
- package/dist/autoresearch/goal.js.map +1 -0
- package/dist/autoresearch/skill-validation.d.ts +1 -0
- package/dist/autoresearch/skill-validation.d.ts.map +1 -1
- package/dist/autoresearch/skill-validation.js +10 -3
- package/dist/autoresearch/skill-validation.js.map +1 -1
- package/dist/catalog/__tests__/generator.test.js +9 -4
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +29 -2
- package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +1 -1
- package/dist/catalog/__tests__/schema.test.js +14 -3
- package/dist/catalog/__tests__/schema.test.js.map +1 -1
- package/dist/catalog/schema.js +1 -1
- package/dist/catalog/schema.js.map +1 -1
- package/dist/cli/__tests__/autoresearch-goal.test.d.ts +2 -0
- package/dist/cli/__tests__/autoresearch-goal.test.d.ts.map +1 -0
- package/dist/cli/__tests__/autoresearch-goal.test.js +194 -0
- package/dist/cli/__tests__/autoresearch-goal.test.js.map +1 -0
- package/dist/cli/__tests__/cleanup.test.js +82 -1
- package/dist/cli/__tests__/cleanup.test.js.map +1 -1
- package/dist/cli/__tests__/codex-plugin-layout.test.js +7 -4
- package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -1
- package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor-context-window-warning.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor-context-window-warning.test.js +122 -0
- package/dist/cli/__tests__/doctor-context-window-warning.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +25 -2
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/exec.test.js +1 -0
- package/dist/cli/__tests__/exec.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +48 -18
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +222 -10
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +58 -0
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/mcp-serve.test.js +27 -1
- package/dist/cli/__tests__/mcp-serve.test.js.map +1 -1
- package/dist/cli/__tests__/native-assets.test.js +26 -1
- package/dist/cli/__tests__/native-assets.test.js.map +1 -1
- package/dist/cli/__tests__/package-bin-contract.test.js +2 -2
- package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
- package/dist/cli/__tests__/performance-goal.test.d.ts +2 -0
- package/dist/cli/__tests__/performance-goal.test.d.ts.map +1 -0
- package/dist/cli/__tests__/performance-goal.test.js +144 -0
- package/dist/cli/__tests__/performance-goal.test.js.map +1 -0
- package/dist/cli/__tests__/question.test.js +8 -0
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.d.ts +2 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +31 -0
- package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -0
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +5 -4
- package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -1
- package/dist/cli/__tests__/ralph-prd-smoke.test.js +7 -0
- package/dist/cli/__tests__/ralph-prd-smoke.test.js.map +1 -1
- package/dist/cli/__tests__/ralph.test.js +59 -1
- package/dist/cli/__tests__/ralph.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +57 -21
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/__tests__/setup-refresh.test.js +27 -8
- package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.js +20 -10
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skill-validation.test.js +11 -11
- package/dist/cli/__tests__/setup-skill-validation.test.js.map +1 -1
- package/dist/cli/__tests__/setup-skills-overwrite.test.js +12 -12
- package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/team.test.js +242 -10
- package/dist/cli/__tests__/team.test.js.map +1 -1
- package/dist/cli/__tests__/ultragoal.test.d.ts +2 -0
- package/dist/cli/__tests__/ultragoal.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ultragoal.test.js +106 -0
- package/dist/cli/__tests__/ultragoal.test.js.map +1 -0
- package/dist/cli/__tests__/uninstall.test.js +11 -0
- package/dist/cli/__tests__/uninstall.test.js.map +1 -1
- package/dist/cli/autoresearch-goal.d.ts +3 -0
- package/dist/cli/autoresearch-goal.d.ts.map +1 -0
- package/dist/cli/autoresearch-goal.js +175 -0
- package/dist/cli/autoresearch-goal.js.map +1 -0
- package/dist/cli/cleanup.d.ts +3 -1
- package/dist/cli/cleanup.d.ts.map +1 -1
- package/dist/cli/cleanup.js +42 -2
- package/dist/cli/cleanup.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +95 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +10 -2
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +21 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +268 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp-serve.d.ts +1 -0
- package/dist/cli/mcp-serve.d.ts.map +1 -1
- package/dist/cli/mcp-serve.js +8 -0
- package/dist/cli/mcp-serve.js.map +1 -1
- package/dist/cli/native-assets.js +1 -1
- package/dist/cli/native-assets.js.map +1 -1
- package/dist/cli/performance-goal.d.ts +3 -0
- package/dist/cli/performance-goal.d.ts.map +1 -0
- package/dist/cli/performance-goal.js +186 -0
- package/dist/cli/performance-goal.js.map +1 -0
- package/dist/cli/ralph.d.ts +2 -0
- package/dist/cli/ralph.d.ts.map +1 -1
- package/dist/cli/ralph.js +25 -1
- package/dist/cli/ralph.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +13 -6
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +6 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +113 -33
- package/dist/cli/team.js.map +1 -1
- package/dist/cli/tmux-hook.d.ts.map +1 -1
- package/dist/cli/tmux-hook.js +2 -1
- package/dist/cli/tmux-hook.js.map +1 -1
- package/dist/cli/ultragoal.d.ts +3 -0
- package/dist/cli/ultragoal.d.ts.map +1 -0
- package/dist/cli/ultragoal.js +191 -0
- package/dist/cli/ultragoal.js.map +1 -0
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +4 -2
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config/__tests__/generator-idempotent.test.js +39 -6
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +5 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/commit-lore-guard.d.ts +3 -0
- package/dist/config/commit-lore-guard.d.ts.map +1 -0
- package/dist/config/commit-lore-guard.js +9 -0
- package/dist/config/commit-lore-guard.js.map +1 -0
- package/dist/config/generator.d.ts +14 -4
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +166 -66
- package/dist/config/generator.js.map +1 -1
- package/dist/config/omx-first-party-mcp.d.ts +1 -0
- package/dist/config/omx-first-party-mcp.d.ts.map +1 -1
- package/dist/config/omx-first-party-mcp.js +4 -1
- package/dist/config/omx-first-party-mcp.js.map +1 -1
- package/dist/goal-workflows/__tests__/artifacts.test.d.ts +2 -0
- package/dist/goal-workflows/__tests__/artifacts.test.d.ts.map +1 -0
- package/dist/goal-workflows/__tests__/artifacts.test.js +96 -0
- package/dist/goal-workflows/__tests__/artifacts.test.js.map +1 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.d.ts +2 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.d.ts.map +1 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +54 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -0
- package/dist/goal-workflows/artifacts.d.ts +62 -0
- package/dist/goal-workflows/artifacts.d.ts.map +1 -0
- package/dist/goal-workflows/artifacts.js +132 -0
- package/dist/goal-workflows/artifacts.js.map +1 -0
- package/dist/goal-workflows/codex-goal-snapshot.d.ts +28 -0
- package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -0
- package/dist/goal-workflows/codex-goal-snapshot.js +110 -0
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -0
- package/dist/goal-workflows/handoff.d.ts +10 -0
- package/dist/goal-workflows/handoff.d.ts.map +1 -0
- package/dist/goal-workflows/handoff.js +31 -0
- package/dist/goal-workflows/handoff.js.map +1 -0
- package/dist/goal-workflows/validation.d.ts +13 -0
- package/dist/goal-workflows/validation.d.ts.map +1 -0
- package/dist/goal-workflows/validation.js +36 -0
- package/dist/goal-workflows/validation.js.map +1 -0
- package/dist/hooks/__tests__/agents-overlay.test.js +59 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/anti-slop-workflow.test.js +109 -18
- package/dist/hooks/__tests__/anti-slop-workflow.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +45 -32
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js +3 -3
- package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +2 -1
- package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +17 -24
- package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +3 -3
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/__tests__/task-size-detector.test.js +1 -1
- package/dist/hooks/__tests__/task-size-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/visual-ralph-skill.test.js +3 -3
- package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +1 -1
- package/dist/hooks/__tests__/visual-verdict-loop.test.js +7 -11
- package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -1
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +23 -2
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +12 -13
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hooks/keyword-registry.d.ts.map +1 -1
- package/dist/hooks/keyword-registry.js +2 -10
- package/dist/hooks/keyword-registry.js.map +1 -1
- package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
- package/dist/hooks/prompt-guidance-contract.js +0 -4
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hooks/session.js +2 -2
- package/dist/hooks/session.js.map +1 -1
- package/dist/hooks/task-size-detector.d.ts.map +1 -1
- package/dist/hooks/task-size-detector.js +1 -0
- package/dist/hooks/task-size-detector.js.map +1 -1
- package/dist/hud/__tests__/index.test.js +30 -14
- package/dist/hud/__tests__/index.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +29 -7
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/reconcile.d.ts +2 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +12 -0
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/mcp/__tests__/bootstrap.test.js +15 -2
- package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
- package/dist/mcp/__tests__/state-paths.test.js +54 -0
- package/dist/mcp/__tests__/state-paths.test.js.map +1 -1
- package/dist/mcp/__tests__/state-server.test.js +36 -0
- package/dist/mcp/__tests__/state-server.test.js.map +1 -1
- package/dist/mcp/bootstrap.d.ts +1 -1
- package/dist/mcp/bootstrap.d.ts.map +1 -1
- package/dist/mcp/bootstrap.js +9 -7
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +17 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +36 -2
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/modes/__tests__/base-session-scope.test.js +26 -0
- package/dist/modes/__tests__/base-session-scope.test.js.map +1 -1
- package/dist/modes/base.d.ts +1 -0
- package/dist/modes/base.d.ts.map +1 -1
- package/dist/modes/base.js +35 -5
- package/dist/modes/base.js.map +1 -1
- package/dist/notifications/__tests__/http-client.test.d.ts +2 -0
- package/dist/notifications/__tests__/http-client.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/http-client.test.js +90 -0
- package/dist/notifications/__tests__/http-client.test.js.map +1 -0
- package/dist/notifications/__tests__/notifier.test.js +22 -60
- package/dist/notifications/__tests__/notifier.test.js.map +1 -1
- package/dist/notifications/dispatcher.d.ts.map +1 -1
- package/dist/notifications/dispatcher.js +35 -60
- package/dist/notifications/dispatcher.js.map +1 -1
- package/dist/notifications/http-client.d.ts +22 -0
- package/dist/notifications/http-client.d.ts.map +1 -0
- package/dist/notifications/http-client.js +298 -0
- package/dist/notifications/http-client.js.map +1 -0
- package/dist/notifications/notifier.d.ts +3 -2
- package/dist/notifications/notifier.d.ts.map +1 -1
- package/dist/notifications/notifier.js +17 -22
- package/dist/notifications/notifier.js.map +1 -1
- package/dist/openclaw/__tests__/dispatcher.test.js +63 -2
- package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
- package/dist/openclaw/dispatcher.d.ts.map +1 -1
- package/dist/openclaw/dispatcher.js +3 -2
- package/dist/openclaw/dispatcher.js.map +1 -1
- package/dist/performance-goal/artifacts.d.ts +76 -0
- package/dist/performance-goal/artifacts.d.ts.map +1 -0
- package/dist/performance-goal/artifacts.js +221 -0
- package/dist/performance-goal/artifacts.js.map +1 -0
- package/dist/pipeline/__tests__/stages.test.js +423 -14
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/stages/team-exec.d.ts +8 -4
- package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
- package/dist/pipeline/stages/team-exec.js +181 -13
- package/dist/pipeline/stages/team-exec.js.map +1 -1
- package/dist/planning/__tests__/artifacts.test.js +261 -1
- package/dist/planning/__tests__/artifacts.test.js.map +1 -1
- package/dist/planning/artifact-names.d.ts +13 -0
- package/dist/planning/artifact-names.d.ts.map +1 -0
- package/dist/planning/artifact-names.js +108 -0
- package/dist/planning/artifact-names.js.map +1 -0
- package/dist/planning/artifacts.d.ts +23 -1
- package/dist/planning/artifacts.d.ts.map +1 -1
- package/dist/planning/artifacts.js +171 -59
- package/dist/planning/artifacts.js.map +1 -1
- package/dist/ralph/__tests__/persistence.test.js +21 -1
- package/dist/ralph/__tests__/persistence.test.js.map +1 -1
- package/dist/ralph/persistence.d.ts.map +1 -1
- package/dist/ralph/persistence.js +6 -4
- package/dist/ralph/persistence.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +2 -0
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +6 -0
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +1749 -88
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/hook-derived-watcher.test.js +33 -1
- package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +1 -1
- package/dist/scripts/__tests__/run-test-files.test.js +36 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +570 -45
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/codex-native-pre-post.d.ts +7 -0
- package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
- package/dist/scripts/codex-native-pre-post.js +341 -15
- package/dist/scripts/codex-native-pre-post.js.map +1 -1
- package/dist/scripts/hook-derived-watcher.js +2 -1
- package/dist/scripts/hook-derived-watcher.js.map +1 -1
- package/dist/scripts/notify-fallback-watcher.js +2 -1
- package/dist/scripts/notify-fallback-watcher.js.map +1 -1
- package/dist/scripts/notify-hook/orchestration-intent.d.ts +1 -2
- package/dist/scripts/notify-hook/orchestration-intent.d.ts.map +1 -1
- package/dist/scripts/notify-hook/orchestration-intent.js +2 -3
- package/dist/scripts/notify-hook/orchestration-intent.js.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts +0 -2
- package/dist/scripts/notify-hook/team-leader-nudge.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-leader-nudge.js +8 -60
- package/dist/scripts/notify-hook/team-leader-nudge.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker-posttooluse.js +1 -1
- package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -1
- package/dist/scripts/notify-hook/team-worker-stop.d.ts +15 -0
- package/dist/scripts/notify-hook/team-worker-stop.d.ts.map +1 -0
- package/dist/scripts/notify-hook/team-worker-stop.js +224 -0
- package/dist/scripts/notify-hook/team-worker-stop.js.map +1 -0
- package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
- package/dist/scripts/notify-hook/team-worker.js +26 -18
- package/dist/scripts/notify-hook/team-worker.js.map +1 -1
- package/dist/scripts/notify-hook.js +1 -1
- package/dist/scripts/notify-hook.js.map +1 -1
- package/dist/scripts/run-test-files.js +17 -1
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/scripts/sync-plugin-mirror.d.ts +1 -0
- package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -1
- package/dist/scripts/sync-plugin-mirror.js +10 -4
- package/dist/scripts/sync-plugin-mirror.js.map +1 -1
- package/dist/state/__tests__/operations.test.js +26 -0
- package/dist/state/__tests__/operations.test.js.map +1 -1
- package/dist/state/__tests__/skill-active.test.js +76 -0
- package/dist/state/__tests__/skill-active.test.js.map +1 -1
- package/dist/state/operations.d.ts +3 -1
- package/dist/state/operations.d.ts.map +1 -1
- package/dist/state/operations.js +8 -4
- package/dist/state/operations.js.map +1 -1
- package/dist/state/skill-active.d.ts +1 -0
- package/dist/state/skill-active.d.ts.map +1 -1
- package/dist/state/skill-active.js +54 -13
- package/dist/state/skill-active.js.map +1 -1
- package/dist/team/__tests__/api-interop.test.js +279 -0
- package/dist/team/__tests__/api-interop.test.js.map +1 -1
- package/dist/team/__tests__/approved-execution.test.d.ts +2 -0
- package/dist/team/__tests__/approved-execution.test.d.ts.map +1 -0
- package/dist/team/__tests__/approved-execution.test.js +124 -0
- package/dist/team/__tests__/approved-execution.test.js.map +1 -0
- package/dist/team/__tests__/delivery-e2e-smoke.test.js +2 -4
- package/dist/team/__tests__/delivery-e2e-smoke.test.js.map +1 -1
- package/dist/team/__tests__/delivery-log.test.d.ts +2 -0
- package/dist/team/__tests__/delivery-log.test.d.ts.map +1 -0
- package/dist/team/__tests__/delivery-log.test.js +44 -0
- package/dist/team/__tests__/delivery-log.test.js.map +1 -0
- package/dist/team/__tests__/model-contract.test.js +40 -9
- package/dist/team/__tests__/model-contract.test.js.map +1 -1
- package/dist/team/__tests__/repo-aware-decomposition.test.js +41 -0
- package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -1
- package/dist/team/__tests__/role-router.test.js +4 -4
- package/dist/team/__tests__/role-router.test.js.map +1 -1
- package/dist/team/__tests__/runtime-boxed-state.test.d.ts +2 -0
- package/dist/team/__tests__/runtime-boxed-state.test.d.ts.map +1 -0
- package/dist/team/__tests__/runtime-boxed-state.test.js +39 -0
- package/dist/team/__tests__/runtime-boxed-state.test.js.map +1 -0
- package/dist/team/__tests__/runtime-cli.test.js +24 -0
- package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +563 -72
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state-root.test.js +13 -0
- package/dist/team/__tests__/state-root.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +13 -0
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/team-identity.test.d.ts +2 -0
- package/dist/team/__tests__/team-identity.test.d.ts.map +1 -0
- package/dist/team/__tests__/team-identity.test.js +166 -0
- package/dist/team/__tests__/team-identity.test.js.map +1 -0
- package/dist/team/__tests__/tmux-session.test.js +58 -1
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +62 -0
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/api-interop.d.ts +1 -0
- package/dist/team/api-interop.d.ts.map +1 -1
- package/dist/team/api-interop.js +163 -132
- package/dist/team/api-interop.js.map +1 -1
- package/dist/team/approved-execution.d.ts +37 -0
- package/dist/team/approved-execution.d.ts.map +1 -0
- package/dist/team/approved-execution.js +136 -0
- package/dist/team/approved-execution.js.map +1 -0
- package/dist/team/delivery-log.d.ts +1 -1
- package/dist/team/delivery-log.d.ts.map +1 -1
- package/dist/team/delivery-log.js +2 -1
- package/dist/team/delivery-log.js.map +1 -1
- package/dist/team/followup-planner.js +2 -2
- package/dist/team/followup-planner.js.map +1 -1
- package/dist/team/goal-workflow.d.ts +20 -0
- package/dist/team/goal-workflow.d.ts.map +1 -0
- package/dist/team/goal-workflow.js +57 -0
- package/dist/team/goal-workflow.js.map +1 -0
- package/dist/team/orchestrator.js +2 -2
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/repo-aware-decomposition.d.ts +3 -0
- package/dist/team/repo-aware-decomposition.d.ts.map +1 -1
- package/dist/team/repo-aware-decomposition.js +2 -0
- package/dist/team/repo-aware-decomposition.js.map +1 -1
- package/dist/team/role-router.js +5 -5
- package/dist/team/role-router.js.map +1 -1
- package/dist/team/runtime-cli.d.ts +32 -2
- package/dist/team/runtime-cli.d.ts.map +1 -1
- package/dist/team/runtime-cli.js +78 -26
- package/dist/team/runtime-cli.js.map +1 -1
- package/dist/team/runtime.d.ts +7 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +383 -40
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/scaling.d.ts.map +1 -1
- package/dist/team/scaling.js +2 -0
- package/dist/team/scaling.js.map +1 -1
- package/dist/team/state.d.ts +9 -0
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +21 -0
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-identity.d.ts +26 -0
- package/dist/team/team-identity.d.ts.map +1 -0
- package/dist/team/team-identity.js +169 -0
- package/dist/team/team-identity.js.map +1 -0
- package/dist/team/tmux-session.d.ts +18 -0
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +65 -3
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +4 -0
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +28 -2
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.d.ts +2 -0
- package/dist/ultragoal/__tests__/artifacts.test.d.ts.map +1 -0
- package/dist/ultragoal/__tests__/artifacts.test.js +93 -0
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -0
- package/dist/ultragoal/artifacts.d.ts +89 -0
- package/dist/ultragoal/artifacts.d.ts.map +1 -0
- package/dist/ultragoal/artifacts.js +233 -0
- package/dist/ultragoal/artifacts.js.map +1 -0
- package/dist/utils/__tests__/agents-model-table.test.js +3 -1
- package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
- package/dist/utils/__tests__/paths.test.js +31 -1
- package/dist/utils/__tests__/paths.test.js.map +1 -1
- package/dist/utils/agents-model-table.d.ts.map +1 -1
- package/dist/utils/agents-model-table.js +12 -1
- package/dist/utils/agents-model-table.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +23 -7
- package/dist/utils/paths.js.map +1 -1
- package/dist/verification/__tests__/ci-rust-gates.test.js +30 -19
- package/dist/verification/__tests__/ci-rust-gates.test.js.map +1 -1
- package/package.json +5 -5
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +30 -5
- package/plugins/oh-my-codex/skills/ask/SKILL.md +58 -0
- package/plugins/oh-my-codex/skills/autoresearch-goal/SKILL.md +36 -0
- package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +2 -2
- package/plugins/oh-my-codex/skills/performance-goal/SKILL.md +65 -0
- package/plugins/oh-my-codex/skills/plan/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/ralph/SKILL.md +22 -3
- package/plugins/oh-my-codex/skills/team/SKILL.md +6 -2
- package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +49 -0
- package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +9 -9
- package/prompts/api-reviewer.md +1 -1
- package/prompts/code-reviewer.md +2 -0
- package/prompts/performance-reviewer.md +1 -1
- package/prompts/quality-reviewer.md +1 -1
- package/prompts/quality-strategist.md +2 -2
- package/prompts/style-reviewer.md +1 -1
- package/prompts/test-engineer.md +1 -1
- package/skills/ai-slop-cleaner/SKILL.md +30 -5
- package/skills/ask/SKILL.md +58 -0
- package/skills/ask-claude/SKILL.md +3 -54
- package/skills/ask-gemini/SKILL.md +3 -54
- package/skills/autoresearch-goal/SKILL.md +36 -0
- package/skills/build-fix/SKILL.md +4 -139
- package/skills/deepsearch/SKILL.md +4 -32
- package/skills/ecomode/SKILL.md +4 -108
- package/skills/help/SKILL.md +4 -196
- package/skills/note/SKILL.md +4 -56
- package/skills/omx-setup/SKILL.md +2 -2
- package/skills/performance-goal/SKILL.md +65 -0
- package/skills/plan/SKILL.md +1 -1
- package/skills/ralph/SKILL.md +22 -3
- package/skills/ralph-init/SKILL.md +4 -40
- package/skills/review/SKILL.md +4 -32
- package/skills/security-review/SKILL.md +4 -294
- package/skills/swarm/SKILL.md +4 -19
- package/skills/tdd/SKILL.md +4 -100
- package/skills/team/SKILL.md +6 -2
- package/skills/trace/SKILL.md +4 -27
- package/skills/ultragoal/SKILL.md +49 -0
- package/skills/visual-ralph/SKILL.md +9 -9
- package/skills/visual-verdict/SKILL.md +4 -70
- package/skills/web-clone/SKILL.md +4 -18
- package/src/scripts/__tests__/codex-native-hook.test.ts +2923 -1030
- package/src/scripts/__tests__/hook-derived-watcher.test.ts +45 -1
- package/src/scripts/__tests__/run-test-files.test.ts +46 -0
- package/src/scripts/codex-native-hook.ts +696 -46
- package/src/scripts/codex-native-pre-post.ts +369 -16
- package/src/scripts/hook-derived-watcher.ts +2 -1
- package/src/scripts/notify-fallback-watcher.ts +2 -1
- package/src/scripts/notify-hook/orchestration-intent.ts +1 -3
- package/src/scripts/notify-hook/team-leader-nudge.ts +7 -63
- package/src/scripts/notify-hook/team-worker-posttooluse.ts +1 -1
- package/src/scripts/notify-hook/team-worker-stop.ts +246 -0
- package/src/scripts/notify-hook/team-worker.ts +23 -14
- package/src/scripts/notify-hook.ts +1 -1
- package/src/scripts/run-test-files.ts +20 -1
- package/src/scripts/sync-plugin-mirror.ts +13 -4
- package/templates/catalog-manifest.json +45 -27
- package/plugins/oh-my-codex/skills/ask-claude/SKILL.md +0 -61
- package/plugins/oh-my-codex/skills/ask-gemini/SKILL.md +0 -61
- package/plugins/oh-my-codex/skills/help/SKILL.md +0 -202
- package/plugins/oh-my-codex/skills/note/SKILL.md +0 -62
- package/plugins/oh-my-codex/skills/security-review/SKILL.md +0 -300
- package/plugins/oh-my-codex/skills/trace/SKILL.md +0 -33
- package/plugins/oh-my-codex/skills/visual-verdict/SKILL.md +0 -76
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { createGoalWorkflowRun, readGoalWorkflowRun, transitionGoalWorkflowRun, } from '../artifacts.js';
|
|
7
|
+
import { buildGoalWorkflowHandoff } from '../handoff.js';
|
|
8
|
+
import { assertGoalWorkflowCanComplete, normalizeGoalWorkflowValidation, GoalWorkflowValidationError, } from '../validation.js';
|
|
9
|
+
async function withTempRepo(run) {
|
|
10
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-goal-workflow-'));
|
|
11
|
+
try {
|
|
12
|
+
return await run(cwd);
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
await rm(cwd, { recursive: true, force: true });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
describe('goal-workflow artifacts', () => {
|
|
19
|
+
it('creates durable status and ledger artifacts under .omx/goals', async () => {
|
|
20
|
+
await withTempRepo(async (cwd) => {
|
|
21
|
+
const run = await createGoalWorkflowRun(cwd, {
|
|
22
|
+
workflow: 'performance-goal',
|
|
23
|
+
slug: 'Latency Pass',
|
|
24
|
+
objective: 'Reduce p95 latency below 100ms.',
|
|
25
|
+
now: new Date('2026-05-04T10:00:00Z'),
|
|
26
|
+
});
|
|
27
|
+
assert.equal(run.artifactDir, '.omx/goals/performance-goal/latency-pass');
|
|
28
|
+
assert.equal(run.status, 'pending');
|
|
29
|
+
assert.equal((await readGoalWorkflowRun(cwd, 'performance-goal', 'latency-pass')).objective, 'Reduce p95 latency below 100ms.');
|
|
30
|
+
const ledger = await readFile(join(cwd, '.omx/goals/performance-goal/latency-pass/ledger.jsonl'), 'utf-8');
|
|
31
|
+
assert.match(ledger, /"event":"workflow_created"/);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it('requires a real validation artifact when entering validation_passed', async () => {
|
|
35
|
+
await withTempRepo(async (cwd) => {
|
|
36
|
+
await createGoalWorkflowRun(cwd, { workflow: 'scrum-goal', slug: 'strict', objective: 'Strictly validate release.' });
|
|
37
|
+
await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed' }), /Completion requires a validation artifact/);
|
|
38
|
+
const placeholder = normalizeGoalWorkflowValidation({
|
|
39
|
+
status: 'pass',
|
|
40
|
+
summary: 'TODO placeholder evaluator says pass.',
|
|
41
|
+
artifactPath: '.omx/goals/scrum-goal/strict/audit.json',
|
|
42
|
+
});
|
|
43
|
+
await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed', validation: placeholder }), /real validation evidence/);
|
|
44
|
+
const missingArtifact = normalizeGoalWorkflowValidation({
|
|
45
|
+
status: 'pass',
|
|
46
|
+
summary: 'Leader audit passed with concrete test output.',
|
|
47
|
+
artifactPath: ' ',
|
|
48
|
+
});
|
|
49
|
+
await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'strict', { status: 'validation_passed', validation: missingArtifact }), /validation artifact path/);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it('blocks completion until validation passes and records ledger transitions', async () => {
|
|
53
|
+
await withTempRepo(async (cwd) => {
|
|
54
|
+
await createGoalWorkflowRun(cwd, { workflow: 'scrum-goal', slug: 'release', objective: 'Ship release.' });
|
|
55
|
+
await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'in_progress', now: new Date('2026-05-04T10:01:00Z') });
|
|
56
|
+
await assert.rejects(() => transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'complete', evidence: 'looks done' }), /passing validation artifact/);
|
|
57
|
+
const validation = normalizeGoalWorkflowValidation({
|
|
58
|
+
status: 'pass',
|
|
59
|
+
summary: 'Worker evidence matrix passed leader audit.',
|
|
60
|
+
artifactPath: '.omx/goals/scrum-goal/release/audit.json',
|
|
61
|
+
checkedAt: new Date('2026-05-04T10:02:00Z'),
|
|
62
|
+
});
|
|
63
|
+
assertGoalWorkflowCanComplete(validation);
|
|
64
|
+
await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'validation_passed', validation });
|
|
65
|
+
const completed = await transitionGoalWorkflowRun(cwd, 'scrum-goal', 'release', { status: 'complete', evidence: 'audit passed' });
|
|
66
|
+
assert.equal(completed.status, 'complete');
|
|
67
|
+
const ledger = await readFile(join(cwd, '.omx/goals/scrum-goal/release/ledger.jsonl'), 'utf-8');
|
|
68
|
+
assert.match(ledger, /"event":"goal_started"/);
|
|
69
|
+
assert.match(ledger, /"event":"validation_passed"/);
|
|
70
|
+
assert.match(ledger, /"event":"goal_completed"/);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('goal-workflow handoff and validation', () => {
|
|
75
|
+
it('renders truthful Codex goal handoff instructions for degraded mode', async () => {
|
|
76
|
+
await withTempRepo(async (cwd) => {
|
|
77
|
+
const run = await createGoalWorkflowRun(cwd, { workflow: 'autoresearch-goal', objective: 'Research safe rollout options.' });
|
|
78
|
+
const handoff = buildGoalWorkflowHandoff({ run, degradedMode: true });
|
|
79
|
+
assert.match(handoff, /call get_goal/i);
|
|
80
|
+
assert.match(handoff, /Call create_goal only if no active goal exists/i);
|
|
81
|
+
assert.match(handoff, /update_goal\(\{status: "complete"\}\) only after/i);
|
|
82
|
+
assert.match(handoff, /fresh complete snapshot/i);
|
|
83
|
+
assert.match(handoff, /did not mutate hidden Codex goal state/i);
|
|
84
|
+
assert.match(handoff, /Research safe rollout options/);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it('rejects placeholder validation evidence', () => {
|
|
88
|
+
const validation = normalizeGoalWorkflowValidation({
|
|
89
|
+
status: true,
|
|
90
|
+
summary: 'TODO placeholder evaluator says pass.',
|
|
91
|
+
artifactPath: '.omx/goals/demo/evaluator.json',
|
|
92
|
+
});
|
|
93
|
+
assert.throws(() => assertGoalWorkflowCanComplete(validation), GoalWorkflowValidationError);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=artifacts.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.test.js","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/artifacts.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-goal-snapshot.test.d.ts","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/codex-goal-snapshot.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { CodexGoalSnapshotError, parseCodexGoalSnapshot, readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot, } from '../codex-goal-snapshot.js';
|
|
7
|
+
describe('codex goal snapshot reconciliation', () => {
|
|
8
|
+
it('normalizes get_goal JSON shape', () => {
|
|
9
|
+
const snapshot = parseCodexGoalSnapshot({
|
|
10
|
+
goal: { objective: 'Ship the feature', status: 'completed', token_budget: 1000 },
|
|
11
|
+
remainingTokens: 25,
|
|
12
|
+
});
|
|
13
|
+
assert.equal(snapshot.available, true);
|
|
14
|
+
assert.equal(snapshot.objective, 'Ship the feature');
|
|
15
|
+
assert.equal(snapshot.status, 'complete');
|
|
16
|
+
assert.equal(snapshot.tokenBudget, 1000);
|
|
17
|
+
assert.equal(snapshot.remainingTokens, 25);
|
|
18
|
+
});
|
|
19
|
+
it('reports absent snapshots as warnings unless required', () => {
|
|
20
|
+
const optional = reconcileCodexGoalSnapshot(null, { expectedObjective: 'Ship' });
|
|
21
|
+
assert.equal(optional.ok, true);
|
|
22
|
+
assert.match(optional.warnings.join('\n'), /call get_goal/);
|
|
23
|
+
const required = reconcileCodexGoalSnapshot(null, { expectedObjective: 'Ship', requireSnapshot: true });
|
|
24
|
+
assert.equal(required.ok, false);
|
|
25
|
+
assert.match(required.errors.join('\n'), /call get_goal/);
|
|
26
|
+
});
|
|
27
|
+
it('detects objective mismatches and incomplete completion proof', () => {
|
|
28
|
+
const mismatch = reconcileCodexGoalSnapshot(parseCodexGoalSnapshot({ goal: { objective: 'Different', status: 'active' } }), { expectedObjective: 'Expected', requireSnapshot: true, requireComplete: true });
|
|
29
|
+
assert.equal(mismatch.ok, false);
|
|
30
|
+
assert.match(mismatch.errors.join('\n'), /objective mismatch/);
|
|
31
|
+
assert.match(mismatch.errors.join('\n'), /not complete/);
|
|
32
|
+
});
|
|
33
|
+
it('accepts compatible complete proof', () => {
|
|
34
|
+
const result = reconcileCodexGoalSnapshot(parseCodexGoalSnapshot({ goal: { objective: 'Expected objective', status: 'complete' } }), { expectedObjective: 'Expected objective', requireSnapshot: true, requireComplete: true });
|
|
35
|
+
assert.equal(result.ok, true);
|
|
36
|
+
assert.deepEqual(result.errors, []);
|
|
37
|
+
});
|
|
38
|
+
it('reads inline JSON and path input but rejects malformed sources', async () => {
|
|
39
|
+
const cwd = await mkdtemp(join(tmpdir(), 'omx-codex-goal-snapshot-'));
|
|
40
|
+
try {
|
|
41
|
+
const fromJson = await readCodexGoalSnapshotInput('{"goal":{"objective":"A","status":"active"}}', cwd);
|
|
42
|
+
assert.equal(fromJson?.objective, 'A');
|
|
43
|
+
await writeFile(join(cwd, 'goal.json'), '{"goal":{"objective":"B","status":"complete"}}');
|
|
44
|
+
const fromPath = await readCodexGoalSnapshotInput('goal.json', cwd);
|
|
45
|
+
assert.equal(fromPath?.objective, 'B');
|
|
46
|
+
await assert.rejects(() => readCodexGoalSnapshotInput('{not-json}', cwd), CodexGoalSnapshotError);
|
|
47
|
+
await assert.rejects(() => readCodexGoalSnapshotInput('missing.json', cwd), /neither valid JSON nor a readable path/);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await rm(cwd, { recursive: true, force: true });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=codex-goal-snapshot.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-goal-snapshot.test.js","sourceRoot":"","sources":["../../../src/goal-workflows/__tests__/codex-goal-snapshot.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare const GOAL_WORKFLOWS_DIR = ".omx/goals";
|
|
2
|
+
export declare const GOAL_WORKFLOW_STATUS = "status.json";
|
|
3
|
+
export declare const GOAL_WORKFLOW_LEDGER = "ledger.jsonl";
|
|
4
|
+
export type GoalWorkflowStatus = 'pending' | 'in_progress' | 'validation_passed' | 'blocked' | 'failed' | 'complete';
|
|
5
|
+
export type GoalWorkflowLedgerEvent = 'workflow_created' | 'goal_started' | 'validation_passed' | 'validation_failed' | 'goal_handoff_emitted' | 'goal_completed' | 'goal_failed';
|
|
6
|
+
export interface GoalWorkflowRun {
|
|
7
|
+
version: 1;
|
|
8
|
+
workflow: string;
|
|
9
|
+
slug: string;
|
|
10
|
+
objective: string;
|
|
11
|
+
status: GoalWorkflowStatus;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
artifactDir: string;
|
|
15
|
+
statusPath: string;
|
|
16
|
+
ledgerPath: string;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
validation?: GoalWorkflowValidationSummary;
|
|
19
|
+
evidence?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface GoalWorkflowValidationSummary {
|
|
22
|
+
status: Extract<GoalWorkflowStatus, 'validation_passed' | 'blocked' | 'failed'>;
|
|
23
|
+
summary: string;
|
|
24
|
+
artifactPath?: string;
|
|
25
|
+
checkedAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface GoalWorkflowLedgerEntry {
|
|
28
|
+
ts: string;
|
|
29
|
+
event: GoalWorkflowLedgerEvent;
|
|
30
|
+
status?: GoalWorkflowStatus;
|
|
31
|
+
message?: string;
|
|
32
|
+
evidence?: string;
|
|
33
|
+
validation?: GoalWorkflowValidationSummary;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
export interface CreateGoalWorkflowRunOptions {
|
|
37
|
+
workflow: string;
|
|
38
|
+
slug?: string;
|
|
39
|
+
objective: string;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
now?: Date;
|
|
42
|
+
force?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface TransitionGoalWorkflowOptions {
|
|
45
|
+
status: Exclude<GoalWorkflowStatus, 'pending'>;
|
|
46
|
+
message?: string;
|
|
47
|
+
evidence?: string;
|
|
48
|
+
validation?: GoalWorkflowValidationSummary;
|
|
49
|
+
metadata?: Record<string, unknown>;
|
|
50
|
+
now?: Date;
|
|
51
|
+
}
|
|
52
|
+
export declare class GoalWorkflowError extends Error {
|
|
53
|
+
}
|
|
54
|
+
export declare function normalizeGoalWorkflowSegment(value: string, fallback?: string): string;
|
|
55
|
+
export declare function goalWorkflowDir(cwd: string, workflow: string, slug: string): string;
|
|
56
|
+
export declare function goalWorkflowStatusPath(cwd: string, workflow: string, slug: string): string;
|
|
57
|
+
export declare function goalWorkflowLedgerPath(cwd: string, workflow: string, slug: string): string;
|
|
58
|
+
export declare function appendGoalWorkflowLedger(cwd: string, run: GoalWorkflowRun, entry: GoalWorkflowLedgerEntry): Promise<void>;
|
|
59
|
+
export declare function createGoalWorkflowRun(cwd: string, options: CreateGoalWorkflowRunOptions): Promise<GoalWorkflowRun>;
|
|
60
|
+
export declare function readGoalWorkflowRun(cwd: string, workflow: string, slug: string): Promise<GoalWorkflowRun>;
|
|
61
|
+
export declare function transitionGoalWorkflowRun(cwd: string, workflow: string, slug: string, options: TransitionGoalWorkflowOptions): Promise<GoalWorkflowRun>;
|
|
62
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join, relative } from 'node:path';
|
|
4
|
+
import { assertGoalWorkflowCanComplete } from './validation.js';
|
|
5
|
+
export const GOAL_WORKFLOWS_DIR = '.omx/goals';
|
|
6
|
+
export const GOAL_WORKFLOW_STATUS = 'status.json';
|
|
7
|
+
export const GOAL_WORKFLOW_LEDGER = 'ledger.jsonl';
|
|
8
|
+
export class GoalWorkflowError extends Error {
|
|
9
|
+
}
|
|
10
|
+
function iso(now = new Date()) {
|
|
11
|
+
return now.toISOString();
|
|
12
|
+
}
|
|
13
|
+
function cleanSegment(value, fallback) {
|
|
14
|
+
const segment = value
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
17
|
+
.replace(/^-+|-+$/g, '')
|
|
18
|
+
.slice(0, 72)
|
|
19
|
+
.replace(/-+$/g, '');
|
|
20
|
+
return segment || fallback;
|
|
21
|
+
}
|
|
22
|
+
function slugFromObjective(objective) {
|
|
23
|
+
const firstLine = objective.split(/\r?\n/).map((line) => line.trim()).find(Boolean) ?? 'goal-workflow';
|
|
24
|
+
return cleanSegment(firstLine, 'goal-workflow');
|
|
25
|
+
}
|
|
26
|
+
function repoRelative(cwd, path) {
|
|
27
|
+
return relative(cwd, path).split('\\').join('/');
|
|
28
|
+
}
|
|
29
|
+
export function normalizeGoalWorkflowSegment(value, fallback = 'workflow') {
|
|
30
|
+
return cleanSegment(value, fallback);
|
|
31
|
+
}
|
|
32
|
+
export function goalWorkflowDir(cwd, workflow, slug) {
|
|
33
|
+
return join(cwd, GOAL_WORKFLOWS_DIR, normalizeGoalWorkflowSegment(workflow), normalizeGoalWorkflowSegment(slug, 'goal-workflow'));
|
|
34
|
+
}
|
|
35
|
+
export function goalWorkflowStatusPath(cwd, workflow, slug) {
|
|
36
|
+
return join(goalWorkflowDir(cwd, workflow, slug), GOAL_WORKFLOW_STATUS);
|
|
37
|
+
}
|
|
38
|
+
export function goalWorkflowLedgerPath(cwd, workflow, slug) {
|
|
39
|
+
return join(goalWorkflowDir(cwd, workflow, slug), GOAL_WORKFLOW_LEDGER);
|
|
40
|
+
}
|
|
41
|
+
export async function appendGoalWorkflowLedger(cwd, run, entry) {
|
|
42
|
+
await mkdir(join(cwd, run.artifactDir), { recursive: true });
|
|
43
|
+
await appendFile(join(cwd, run.ledgerPath), `${JSON.stringify(entry)}\n`);
|
|
44
|
+
}
|
|
45
|
+
async function writeRun(cwd, run) {
|
|
46
|
+
await mkdir(join(cwd, run.artifactDir), { recursive: true });
|
|
47
|
+
await writeFile(join(cwd, run.statusPath), `${JSON.stringify(run, null, 2)}\n`);
|
|
48
|
+
}
|
|
49
|
+
export async function createGoalWorkflowRun(cwd, options) {
|
|
50
|
+
if (!options.objective.trim())
|
|
51
|
+
throw new GoalWorkflowError('Missing goal workflow objective.');
|
|
52
|
+
const workflow = normalizeGoalWorkflowSegment(options.workflow);
|
|
53
|
+
const slug = normalizeGoalWorkflowSegment(options.slug ?? slugFromObjective(options.objective), 'goal-workflow');
|
|
54
|
+
const statusPath = goalWorkflowStatusPath(cwd, workflow, slug);
|
|
55
|
+
if (!options.force && existsSync(statusPath)) {
|
|
56
|
+
throw new GoalWorkflowError(`Refusing to overwrite existing ${repoRelative(cwd, statusPath)}; pass force to recreate it.`);
|
|
57
|
+
}
|
|
58
|
+
const now = iso(options.now);
|
|
59
|
+
const artifactDir = repoRelative(cwd, goalWorkflowDir(cwd, workflow, slug));
|
|
60
|
+
const run = {
|
|
61
|
+
version: 1,
|
|
62
|
+
workflow,
|
|
63
|
+
slug,
|
|
64
|
+
objective: options.objective.trim(),
|
|
65
|
+
status: 'pending',
|
|
66
|
+
createdAt: now,
|
|
67
|
+
updatedAt: now,
|
|
68
|
+
artifactDir,
|
|
69
|
+
statusPath: `${artifactDir}/${GOAL_WORKFLOW_STATUS}`,
|
|
70
|
+
ledgerPath: `${artifactDir}/${GOAL_WORKFLOW_LEDGER}`,
|
|
71
|
+
metadata: options.metadata,
|
|
72
|
+
};
|
|
73
|
+
await writeRun(cwd, run);
|
|
74
|
+
await writeFile(join(cwd, run.ledgerPath), '');
|
|
75
|
+
await appendGoalWorkflowLedger(cwd, run, { ts: now, event: 'workflow_created', status: run.status, message: 'Goal workflow created' });
|
|
76
|
+
return run;
|
|
77
|
+
}
|
|
78
|
+
export async function readGoalWorkflowRun(cwd, workflow, slug) {
|
|
79
|
+
const path = goalWorkflowStatusPath(cwd, workflow, slug);
|
|
80
|
+
let raw;
|
|
81
|
+
try {
|
|
82
|
+
raw = await readFile(path, 'utf-8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
throw new GoalWorkflowError(`No goal workflow run found at ${repoRelative(cwd, path)}.`);
|
|
86
|
+
}
|
|
87
|
+
const parsed = JSON.parse(raw);
|
|
88
|
+
if (parsed.version !== 1 || !parsed.workflow || !parsed.slug || !parsed.objective) {
|
|
89
|
+
throw new GoalWorkflowError(`Invalid goal workflow run at ${repoRelative(cwd, path)}.`);
|
|
90
|
+
}
|
|
91
|
+
return parsed;
|
|
92
|
+
}
|
|
93
|
+
function eventForStatus(status) {
|
|
94
|
+
switch (status) {
|
|
95
|
+
case 'in_progress': return 'goal_started';
|
|
96
|
+
case 'validation_passed': return 'validation_passed';
|
|
97
|
+
case 'blocked':
|
|
98
|
+
case 'failed': return 'goal_failed';
|
|
99
|
+
case 'complete': return 'goal_completed';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export async function transitionGoalWorkflowRun(cwd, workflow, slug, options) {
|
|
103
|
+
const run = await readGoalWorkflowRun(cwd, workflow, slug);
|
|
104
|
+
if (options.status === 'validation_passed') {
|
|
105
|
+
assertGoalWorkflowCanComplete(options.validation);
|
|
106
|
+
}
|
|
107
|
+
if (options.status === 'complete') {
|
|
108
|
+
if (run.status !== 'validation_passed') {
|
|
109
|
+
throw new GoalWorkflowError('Goal workflow completion requires a passing validation artifact first.');
|
|
110
|
+
}
|
|
111
|
+
assertGoalWorkflowCanComplete(run.validation);
|
|
112
|
+
}
|
|
113
|
+
const now = iso(options.now);
|
|
114
|
+
run.status = options.status;
|
|
115
|
+
run.updatedAt = now;
|
|
116
|
+
run.evidence = options.evidence ?? run.evidence;
|
|
117
|
+
run.metadata = { ...run.metadata, ...options.metadata };
|
|
118
|
+
if (options.validation)
|
|
119
|
+
run.validation = options.validation;
|
|
120
|
+
await writeRun(cwd, run);
|
|
121
|
+
await appendGoalWorkflowLedger(cwd, run, {
|
|
122
|
+
ts: now,
|
|
123
|
+
event: eventForStatus(options.status),
|
|
124
|
+
status: run.status,
|
|
125
|
+
message: options.message,
|
|
126
|
+
evidence: options.evidence,
|
|
127
|
+
validation: options.validation,
|
|
128
|
+
metadata: options.metadata,
|
|
129
|
+
});
|
|
130
|
+
return run;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/goal-workflows/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type CodexGoalSnapshotStatus = 'active' | 'complete' | 'cancelled' | 'failed' | 'unknown';
|
|
2
|
+
export interface CodexGoalSnapshot {
|
|
3
|
+
available: boolean;
|
|
4
|
+
objective?: string;
|
|
5
|
+
status?: CodexGoalSnapshotStatus;
|
|
6
|
+
tokenBudget?: number;
|
|
7
|
+
remainingTokens?: number | null;
|
|
8
|
+
raw: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface CodexGoalReconciliation {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
snapshot: CodexGoalSnapshot;
|
|
13
|
+
warnings: string[];
|
|
14
|
+
errors: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ReconcileCodexGoalOptions {
|
|
17
|
+
expectedObjective: string;
|
|
18
|
+
allowedStatuses?: readonly CodexGoalSnapshotStatus[];
|
|
19
|
+
requireSnapshot?: boolean;
|
|
20
|
+
requireComplete?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class CodexGoalSnapshotError extends Error {
|
|
23
|
+
}
|
|
24
|
+
export declare function parseCodexGoalSnapshot(value: unknown): CodexGoalSnapshot;
|
|
25
|
+
export declare function readCodexGoalSnapshotInput(raw: string | undefined, cwd?: string): Promise<CodexGoalSnapshot | null>;
|
|
26
|
+
export declare function reconcileCodexGoalSnapshot(snapshot: CodexGoalSnapshot | null | undefined, options: ReconcileCodexGoalOptions): CodexGoalReconciliation;
|
|
27
|
+
export declare function formatCodexGoalReconciliation(reconciliation: CodexGoalReconciliation): string;
|
|
28
|
+
//# sourceMappingURL=codex-goal-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-goal-snapshot.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AA2BpD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA+BxE;AAED,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAgBhI;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC9C,OAAO,EAAE,yBAAyB,GACjC,uBAAuB,CA8BzB;AAED,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,uBAAuB,GAAG,MAAM,CAG7F"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
export class CodexGoalSnapshotError extends Error {
|
|
5
|
+
}
|
|
6
|
+
function safeObject(value) {
|
|
7
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
8
|
+
}
|
|
9
|
+
function safeString(value) {
|
|
10
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
11
|
+
}
|
|
12
|
+
function safeNumber(value) {
|
|
13
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
14
|
+
}
|
|
15
|
+
function normalizeStatus(value) {
|
|
16
|
+
const status = safeString(value).toLowerCase();
|
|
17
|
+
if (status === 'complete' || status === 'completed' || status === 'done')
|
|
18
|
+
return 'complete';
|
|
19
|
+
if (status === 'cancelled' || status === 'canceled')
|
|
20
|
+
return 'cancelled';
|
|
21
|
+
if (status === 'failed' || status === 'failure')
|
|
22
|
+
return 'failed';
|
|
23
|
+
if (status === 'active' || status === 'in_progress' || status === 'pending' || status === 'running')
|
|
24
|
+
return 'active';
|
|
25
|
+
return 'unknown';
|
|
26
|
+
}
|
|
27
|
+
function normalizeObjective(value) {
|
|
28
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
29
|
+
}
|
|
30
|
+
export function parseCodexGoalSnapshot(value) {
|
|
31
|
+
const root = safeObject(value);
|
|
32
|
+
const goalValue = Object.hasOwn(root, 'goal') ? root.goal : value;
|
|
33
|
+
if (goalValue === null || goalValue === undefined || goalValue === false) {
|
|
34
|
+
return { available: false, raw: value };
|
|
35
|
+
}
|
|
36
|
+
const goal = safeObject(goalValue);
|
|
37
|
+
const objective = safeString(goal.objective
|
|
38
|
+
?? goal.goal
|
|
39
|
+
?? goal.description
|
|
40
|
+
?? root.objective);
|
|
41
|
+
const status = normalizeStatus(goal.status ?? root.status);
|
|
42
|
+
const tokenBudget = safeNumber(goal.token_budget
|
|
43
|
+
?? goal.tokenBudget
|
|
44
|
+
?? root.token_budget
|
|
45
|
+
?? root.tokenBudget);
|
|
46
|
+
const remainingTokens = safeNumber(root.remainingTokens ?? root.remaining_tokens);
|
|
47
|
+
return {
|
|
48
|
+
available: Boolean(objective || status !== 'unknown'),
|
|
49
|
+
...(objective ? { objective } : {}),
|
|
50
|
+
status,
|
|
51
|
+
...(tokenBudget !== undefined ? { tokenBudget } : {}),
|
|
52
|
+
remainingTokens: remainingTokens ?? null,
|
|
53
|
+
raw: value,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export async function readCodexGoalSnapshotInput(raw, cwd = process.cwd()) {
|
|
57
|
+
if (!raw?.trim())
|
|
58
|
+
return null;
|
|
59
|
+
const trimmed = raw.trim();
|
|
60
|
+
try {
|
|
61
|
+
return parseCodexGoalSnapshot(JSON.parse(trimmed));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
const path = resolve(cwd, trimmed);
|
|
65
|
+
if (!existsSync(path)) {
|
|
66
|
+
throw new CodexGoalSnapshotError(`Codex goal snapshot is neither valid JSON nor a readable path: ${trimmed}`);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return parseCodexGoalSnapshot(JSON.parse(await readFile(path, 'utf-8')));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw new CodexGoalSnapshotError(`Codex goal snapshot path does not contain valid JSON: ${trimmed}${error instanceof Error ? ` (${error.message})` : ''}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export function reconcileCodexGoalSnapshot(snapshot, options) {
|
|
77
|
+
const effectiveSnapshot = snapshot ?? { available: false, raw: null };
|
|
78
|
+
const errors = [];
|
|
79
|
+
const warnings = [];
|
|
80
|
+
if (!effectiveSnapshot.available) {
|
|
81
|
+
const message = 'Codex goal snapshot is absent or reports no active goal; call get_goal and pass its JSON with --codex-goal-json.';
|
|
82
|
+
if (options.requireSnapshot)
|
|
83
|
+
errors.push(message);
|
|
84
|
+
else
|
|
85
|
+
warnings.push(message);
|
|
86
|
+
return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
|
|
87
|
+
}
|
|
88
|
+
const expected = normalizeObjective(options.expectedObjective);
|
|
89
|
+
const actual = normalizeObjective(effectiveSnapshot.objective ?? '');
|
|
90
|
+
if (!actual) {
|
|
91
|
+
errors.push('Codex goal snapshot is missing objective text.');
|
|
92
|
+
}
|
|
93
|
+
else if (actual !== expected) {
|
|
94
|
+
errors.push(`Codex goal objective mismatch: expected "${expected}", got "${actual}".`);
|
|
95
|
+
}
|
|
96
|
+
const allowed = options.allowedStatuses ?? (options.requireComplete ? ['complete'] : ['active', 'complete']);
|
|
97
|
+
const actualStatus = effectiveSnapshot.status ?? 'unknown';
|
|
98
|
+
if (!allowed.includes(actualStatus)) {
|
|
99
|
+
errors.push(`Codex goal status mismatch: expected ${allowed.join(' or ')}, got ${actualStatus}.`);
|
|
100
|
+
}
|
|
101
|
+
if (options.requireComplete && actualStatus !== 'complete') {
|
|
102
|
+
errors.push(`Codex goal is not complete; call update_goal({status: "complete"}) only after the objective is actually complete, then pass the fresh get_goal JSON.`);
|
|
103
|
+
}
|
|
104
|
+
return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
|
|
105
|
+
}
|
|
106
|
+
export function formatCodexGoalReconciliation(reconciliation) {
|
|
107
|
+
const parts = [...reconciliation.errors, ...reconciliation.warnings];
|
|
108
|
+
return parts.join(' ');
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=codex-goal-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-goal-snapshot.js","sourceRoot":"","sources":["../../src/goal-workflows/codex-goal-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GoalWorkflowRun } from './artifacts.js';
|
|
2
|
+
export interface GoalWorkflowHandoffOptions {
|
|
3
|
+
run: GoalWorkflowRun;
|
|
4
|
+
title?: string;
|
|
5
|
+
tokenBudget?: number;
|
|
6
|
+
completionCommand?: string;
|
|
7
|
+
degradedMode?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function buildGoalWorkflowHandoff(options: GoalWorkflowHandoffOptions): string;
|
|
10
|
+
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,eAAe,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CA6BpF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function buildGoalWorkflowHandoff(options) {
|
|
2
|
+
const createPayload = {
|
|
3
|
+
objective: options.run.objective,
|
|
4
|
+
...(options.tokenBudget ? { token_budget: options.tokenBudget } : {}),
|
|
5
|
+
};
|
|
6
|
+
return [
|
|
7
|
+
options.title ?? `${options.run.workflow} goal-workflow handoff`,
|
|
8
|
+
`Status: ${options.run.status}`,
|
|
9
|
+
`Artifacts: ${options.run.artifactDir}`,
|
|
10
|
+
`Ledger: ${options.run.ledgerPath}`,
|
|
11
|
+
'',
|
|
12
|
+
'Codex goal integration constraints:',
|
|
13
|
+
'- First call get_goal to inspect the active Codex thread goal.',
|
|
14
|
+
'- Call create_goal only if no active goal exists and this handoff is the explicit objective to start.',
|
|
15
|
+
'- If a different active Codex goal exists, finish, checkpoint, or ask the leader before replacing focus.',
|
|
16
|
+
'- Work only this objective until the workflow-specific completion audit passes.',
|
|
17
|
+
'- Call update_goal({status: "complete"}) only after the OMX completion audit and validation artifacts pass, then call get_goal again for a fresh complete snapshot.',
|
|
18
|
+
options.completionCommand ? `- Then record OMX completion evidence with the fresh snapshot: ${options.completionCommand}` : '- Then record OMX completion evidence in the workflow ledger/status artifacts with the fresh get_goal snapshot when the workflow supports --codex-goal-json.',
|
|
19
|
+
'',
|
|
20
|
+
options.degradedMode
|
|
21
|
+
? 'Degraded-mode warning: this shell-rendered handoff did not mutate hidden Codex goal state; the active agent must use get_goal/create_goal/update_goal when those tools are available.'
|
|
22
|
+
: 'Truth boundary: OMX owns durable workflow artifacts; Codex owns active-thread focus/accounting.',
|
|
23
|
+
'',
|
|
24
|
+
'create_goal payload:',
|
|
25
|
+
JSON.stringify(createPayload, null, 2),
|
|
26
|
+
'',
|
|
27
|
+
'Objective:',
|
|
28
|
+
options.run.objective,
|
|
29
|
+
].join('\n');
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/goal-workflows/handoff.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,wBAAwB,CAAC,OAAmC;IAC1E,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAChC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;IACF,OAAO;QACL,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,wBAAwB;QAChE,WAAW,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QAC/B,cAAc,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QACvC,WAAW,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;QACnC,EAAE;QACF,qCAAqC;QACrC,gEAAgE;QAChE,uGAAuG;QACvG,0GAA0G;QAC1G,iFAAiF;QACjF,qKAAqK;QACrK,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,kEAAkE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,8JAA8J;QAC1R,EAAE;QACF,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,uLAAuL;YACzL,CAAC,CAAC,iGAAiG;QACrG,EAAE;QACF,sBAAsB;QACtB,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,EAAE;QACF,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,SAAS;KACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { GoalWorkflowValidationSummary } from './artifacts.js';
|
|
2
|
+
export type GoalWorkflowValidationStatus = 'pass' | 'fail' | 'blocker';
|
|
3
|
+
export interface GoalWorkflowValidationInput {
|
|
4
|
+
status: GoalWorkflowValidationStatus | boolean;
|
|
5
|
+
summary: string;
|
|
6
|
+
artifactPath?: string;
|
|
7
|
+
checkedAt?: Date;
|
|
8
|
+
}
|
|
9
|
+
export declare class GoalWorkflowValidationError extends Error {
|
|
10
|
+
}
|
|
11
|
+
export declare function normalizeGoalWorkflowValidation(input: GoalWorkflowValidationInput): GoalWorkflowValidationSummary;
|
|
12
|
+
export declare function assertGoalWorkflowCanComplete(validation: GoalWorkflowValidationSummary | undefined): void;
|
|
13
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/goal-workflows/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;CAAG;AAUzD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,2BAA2B,GAAG,6BAA6B,CAajH;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,6BAA6B,GAAG,SAAS,GAAG,IAAI,CASzG"}
|