oh-my-codex 0.18.1 → 0.18.3
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 +6 -6
- package/Cargo.toml +1 -1
- package/README.md +4 -2
- package/dist/agents/__tests__/definitions.test.js +23 -0
- package/dist/agents/__tests__/definitions.test.js.map +1 -1
- package/dist/agents/__tests__/native-config.test.js +20 -0
- package/dist/agents/__tests__/native-config.test.js.map +1 -1
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +40 -0
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts +1 -0
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +4 -0
- package/dist/agents/native-config.js.map +1 -1
- package/dist/auth/__tests__/config-sessions.test.d.ts +2 -0
- package/dist/auth/__tests__/config-sessions.test.d.ts.map +1 -0
- package/dist/auth/__tests__/config-sessions.test.js +48 -0
- package/dist/auth/__tests__/config-sessions.test.js.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts +2 -0
- package/dist/auth/__tests__/quota-rotation.test.d.ts.map +1 -0
- package/dist/auth/__tests__/quota-rotation.test.js +33 -0
- package/dist/auth/__tests__/quota-rotation.test.js.map +1 -0
- package/dist/auth/__tests__/redact.test.d.ts +2 -0
- package/dist/auth/__tests__/redact.test.d.ts.map +1 -0
- package/dist/auth/__tests__/redact.test.js +20 -0
- package/dist/auth/__tests__/redact.test.js.map +1 -0
- package/dist/auth/__tests__/storage.test.d.ts +2 -0
- package/dist/auth/__tests__/storage.test.d.ts.map +1 -0
- package/dist/auth/__tests__/storage.test.js +108 -0
- package/dist/auth/__tests__/storage.test.js.map +1 -0
- package/dist/auth/config.d.ts +9 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +77 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/hotswap.d.ts +36 -0
- package/dist/auth/hotswap.d.ts.map +1 -0
- package/dist/auth/hotswap.js +159 -0
- package/dist/auth/hotswap.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/paths.d.ts +12 -0
- package/dist/auth/paths.d.ts.map +1 -0
- package/dist/auth/paths.js +78 -0
- package/dist/auth/paths.js.map +1 -0
- package/dist/auth/quota-detector.d.ts +10 -0
- package/dist/auth/quota-detector.d.ts.map +1 -0
- package/dist/auth/quota-detector.js +40 -0
- package/dist/auth/quota-detector.js.map +1 -0
- package/dist/auth/redact.d.ts +2 -0
- package/dist/auth/redact.d.ts.map +1 -0
- package/dist/auth/redact.js +26 -0
- package/dist/auth/redact.js.map +1 -0
- package/dist/auth/rotation.d.ts +9 -0
- package/dist/auth/rotation.d.ts.map +1 -0
- package/dist/auth/rotation.js +26 -0
- package/dist/auth/rotation.js.map +1 -0
- package/dist/auth/sessions.d.ts +15 -0
- package/dist/auth/sessions.d.ts.map +1 -0
- package/dist/auth/sessions.js +62 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/storage.d.ts +27 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +111 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/catalog/__tests__/generator.test.js +4 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -1
- package/dist/cli/__tests__/auth.test.d.ts +2 -0
- package/dist/cli/__tests__/auth.test.d.ts.map +1 -0
- package/dist/cli/__tests__/auth.test.js +168 -0
- package/dist/cli/__tests__/auth.test.js.map +1 -0
- package/dist/cli/__tests__/doctor-warning-copy.test.js +112 -5
- package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
- package/dist/cli/__tests__/explore.test.js +20 -0
- package/dist/cli/__tests__/explore.test.js.map +1 -1
- package/dist/cli/__tests__/index.test.js +171 -21
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/launch-fallback.test.js +51 -3
- package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
- package/dist/cli/__tests__/nested-help-routing.test.js +1 -0
- package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
- package/dist/cli/__tests__/question.test.js +2 -2
- package/dist/cli/__tests__/question.test.js.map +1 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js +30 -1
- package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
- package/dist/cli/__tests__/setup-install-mode.test.js +47 -0
- package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
- package/dist/cli/auth.d.ts +4 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +89 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +190 -7
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/explore.d.ts.map +1 -1
- package/dist/cli/explore.js +12 -0
- package/dist/cli/explore.js.map +1 -1
- package/dist/cli/index.d.ts +27 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +245 -47
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +11 -3
- package/dist/cli/setup.js.map +1 -1
- package/dist/config/__tests__/codex-hooks.test.js +3 -3
- package/dist/config/__tests__/codex-hooks.test.js.map +1 -1
- package/dist/config/__tests__/deep-interview.test.d.ts +2 -0
- package/dist/config/__tests__/deep-interview.test.d.ts.map +1 -0
- package/dist/config/__tests__/deep-interview.test.js +239 -0
- package/dist/config/__tests__/deep-interview.test.js.map +1 -0
- package/dist/config/__tests__/generator-idempotent.test.js +123 -0
- package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
- package/dist/config/codex-hooks.d.ts +1 -0
- package/dist/config/codex-hooks.d.ts.map +1 -1
- package/dist/config/codex-hooks.js +2 -4
- package/dist/config/codex-hooks.js.map +1 -1
- package/dist/config/deep-interview.d.ts +22 -0
- package/dist/config/deep-interview.d.ts.map +1 -0
- package/dist/config/deep-interview.js +151 -0
- package/dist/config/deep-interview.js.map +1 -0
- package/dist/config/generator.d.ts +19 -2
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +198 -29
- package/dist/config/generator.js.map +1 -1
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js +21 -0
- package/dist/goal-workflows/__tests__/codex-goal-snapshot.test.js.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.d.ts +3 -0
- package/dist/goal-workflows/codex-goal-snapshot.d.ts.map +1 -1
- package/dist/goal-workflows/codex-goal-snapshot.js +45 -2
- package/dist/goal-workflows/codex-goal-snapshot.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +2 -0
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js +17 -0
- package/dist/hooks/__tests__/autopilot-skill-contract.test.js.map +1 -1
- package/dist/hooks/__tests__/explore-routing.test.js +1 -0
- package/dist/hooks/__tests__/explore-routing.test.js.map +1 -1
- package/dist/hooks/__tests__/keyword-detector.test.js +471 -15
- package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
- package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts +2 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.js +320 -0
- package/dist/hooks/__tests__/prometheus-strict-contract.test.js.map +1 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js +12 -0
- package/dist/hooks/__tests__/prompt-guidance-wave-two.test.js.map +1 -1
- package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts +2 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.js +35 -0
- package/dist/hooks/__tests__/research-workflow-boundaries.test.js.map +1 -0
- package/dist/hooks/deep-interview-config-instruction.d.ts +3 -0
- package/dist/hooks/deep-interview-config-instruction.d.ts.map +1 -0
- package/dist/hooks/deep-interview-config-instruction.js +47 -0
- package/dist/hooks/deep-interview-config-instruction.js.map +1 -0
- package/dist/hooks/explore-routing.d.ts.map +1 -1
- package/dist/hooks/explore-routing.js +1 -0
- package/dist/hooks/explore-routing.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts +6 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +80 -14
- 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 +1 -0
- 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 +11 -0
- package/dist/hooks/prompt-guidance-contract.js.map +1 -1
- package/dist/hud/__tests__/hud-tmux-injection.test.js +22 -0
- package/dist/hud/__tests__/hud-tmux-injection.test.js.map +1 -1
- package/dist/hud/__tests__/reconcile.test.js +213 -17
- package/dist/hud/__tests__/reconcile.test.js.map +1 -1
- package/dist/hud/__tests__/render.test.js +84 -0
- package/dist/hud/__tests__/render.test.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +51 -1
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/__tests__/tmux.test.js +171 -23
- package/dist/hud/__tests__/tmux.test.js.map +1 -1
- package/dist/hud/index.d.ts +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +8 -3
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/reconcile.d.ts +1 -1
- package/dist/hud/reconcile.d.ts.map +1 -1
- package/dist/hud/reconcile.js +14 -3
- package/dist/hud/reconcile.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +26 -0
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/state.d.ts +2 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +62 -1
- package/dist/hud/state.js.map +1 -1
- package/dist/hud/tmux.d.ts +17 -3
- package/dist/hud/tmux.d.ts.map +1 -1
- package/dist/hud/tmux.js +96 -10
- package/dist/hud/tmux.js.map +1 -1
- package/dist/hud/types.d.ts +22 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/dist/pipeline/__tests__/orchestrator.test.js +63 -1
- package/dist/pipeline/__tests__/orchestrator.test.js.map +1 -1
- package/dist/pipeline/__tests__/stages.test.js +410 -4
- package/dist/pipeline/__tests__/stages.test.js.map +1 -1
- package/dist/pipeline/orchestrator.d.ts.map +1 -1
- package/dist/pipeline/orchestrator.js +29 -2
- package/dist/pipeline/orchestrator.js.map +1 -1
- package/dist/pipeline/stages/ralplan.d.ts.map +1 -1
- package/dist/pipeline/stages/ralplan.js +41 -6
- package/dist/pipeline/stages/ralplan.js.map +1 -1
- package/dist/question/__tests__/ui.test.js +43 -10
- package/dist/question/__tests__/ui.test.js.map +1 -1
- package/dist/question/deep-interview.d.ts +2 -0
- package/dist/question/deep-interview.d.ts.map +1 -1
- package/dist/question/deep-interview.js.map +1 -1
- package/dist/question/ui.d.ts +12 -0
- package/dist/question/ui.d.ts.map +1 -1
- package/dist/question/ui.js +83 -46
- package/dist/question/ui.js.map +1 -1
- package/dist/ralplan/__tests__/runtime.test.js +200 -10
- package/dist/ralplan/__tests__/runtime.test.js.map +1 -1
- package/dist/ralplan/consensus-gate.d.ts +23 -0
- package/dist/ralplan/consensus-gate.d.ts.map +1 -0
- package/dist/ralplan/consensus-gate.js +212 -0
- package/dist/ralplan/consensus-gate.js.map +1 -0
- package/dist/ralplan/runtime.d.ts +25 -0
- package/dist/ralplan/runtime.d.ts.map +1 -1
- package/dist/ralplan/runtime.js +144 -8
- package/dist/ralplan/runtime.js.map +1 -1
- package/dist/scripts/__tests__/codex-native-hook.test.js +1034 -28
- package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
- package/dist/scripts/__tests__/docs-site-contract.test.d.ts +2 -0
- package/dist/scripts/__tests__/docs-site-contract.test.d.ts.map +1 -0
- package/dist/scripts/__tests__/docs-site-contract.test.js +42 -0
- package/dist/scripts/__tests__/docs-site-contract.test.js.map +1 -0
- package/dist/scripts/__tests__/notify-dispatcher.test.js +115 -2
- package/dist/scripts/__tests__/notify-dispatcher.test.js.map +1 -1
- package/dist/scripts/__tests__/run-test-files.test.js +57 -0
- package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
- package/dist/scripts/__tests__/verify-native-agents.test.js +2 -2
- package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -1
- package/dist/scripts/codex-native-hook.d.ts.map +1 -1
- package/dist/scripts/codex-native-hook.js +238 -36
- package/dist/scripts/codex-native-hook.js.map +1 -1
- package/dist/scripts/notify-dispatcher.js +188 -4
- package/dist/scripts/notify-dispatcher.js.map +1 -1
- package/dist/scripts/run-test-files.js +13 -0
- package/dist/scripts/run-test-files.js.map +1 -1
- package/dist/state/__tests__/planning-gate.test.d.ts +2 -0
- package/dist/state/__tests__/planning-gate.test.d.ts.map +1 -0
- package/dist/state/__tests__/planning-gate.test.js +219 -0
- package/dist/state/__tests__/planning-gate.test.js.map +1 -0
- package/dist/state/__tests__/workflow-transition.test.js +6 -0
- package/dist/state/__tests__/workflow-transition.test.js.map +1 -1
- package/dist/state/workflow-transition.d.ts +24 -1
- package/dist/state/workflow-transition.d.ts.map +1 -1
- package/dist/state/workflow-transition.js +70 -0
- package/dist/state/workflow-transition.js.map +1 -1
- package/dist/subagents/tracker.d.ts.map +1 -1
- package/dist/subagents/tracker.js +4 -3
- package/dist/subagents/tracker.js.map +1 -1
- package/dist/team/__tests__/runtime.test.js +36 -44
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +144 -18
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +10 -20
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +22 -6
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/ultragoal/__tests__/artifacts.test.js +50 -0
- package/dist/ultragoal/__tests__/artifacts.test.js.map +1 -1
- package/dist/ultragoal/artifacts.d.ts.map +1 -1
- package/dist/ultragoal/artifacts.js +28 -2
- package/dist/ultragoal/artifacts.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/oh-my-codex/skills/autopilot/SKILL.md +16 -4
- package/plugins/oh-my-codex/skills/autoresearch/SKILL.md +4 -0
- package/plugins/oh-my-codex/skills/autoresearch-goal/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/best-practice-research/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +10 -0
- package/plugins/oh-my-codex/skills/pipeline/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/plan/SKILL.md +1 -1
- package/plugins/oh-my-codex/skills/prometheus-strict/README.md +35 -0
- package/plugins/oh-my-codex/skills/prometheus-strict/SKILL.md +219 -0
- package/plugins/oh-my-codex/skills/ralplan/SKILL.md +24 -5
- package/prompts/prometheus-strict-metis.md +274 -0
- package/prompts/prometheus-strict-momus.md +82 -0
- package/prompts/prometheus-strict-oracle.md +107 -0
- package/prompts/researcher.md +22 -3
- package/prompts/scholastic.md +11 -0
- package/skills/autopilot/SKILL.md +16 -4
- package/skills/autoresearch/SKILL.md +4 -0
- package/skills/autoresearch-goal/SKILL.md +1 -1
- package/skills/best-practice-research/SKILL.md +1 -1
- package/skills/deep-interview/SKILL.md +10 -0
- package/skills/pipeline/SKILL.md +1 -1
- package/skills/plan/SKILL.md +1 -1
- package/skills/prometheus-strict/README.md +35 -0
- package/skills/prometheus-strict/SKILL.md +219 -0
- package/skills/ralplan/SKILL.md +24 -5
- package/src/scripts/__tests__/codex-native-hook.test.ts +1307 -61
- package/src/scripts/__tests__/docs-site-contract.test.ts +47 -0
- package/src/scripts/__tests__/notify-dispatcher.test.ts +132 -3
- package/src/scripts/__tests__/run-test-files.test.ts +67 -0
- package/src/scripts/__tests__/verify-native-agents.test.ts +2 -2
- package/src/scripts/codex-native-hook.ts +260 -31
- package/src/scripts/notify-dispatcher.ts +202 -4
- package/src/scripts/run-test-files.ts +13 -0
- package/templates/catalog-manifest.json +27 -0
|
@@ -1,4 +1,27 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type DownstreamAuthority = 'plan_then_execute' | 'execute_now';
|
|
2
|
+
export interface PlanningGateState {
|
|
3
|
+
downstream_authority: DownstreamAuthority;
|
|
4
|
+
bypass_planning_gate_until?: string;
|
|
5
|
+
objective_id?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PreToolUseGateInput {
|
|
8
|
+
tool_name: string;
|
|
9
|
+
tool_input?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PreToolUseGateDecision {
|
|
12
|
+
allowed: boolean;
|
|
13
|
+
reason?: string;
|
|
14
|
+
gate_fired?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const PLANNING_GATE_BYPASS_TTL_MS: number;
|
|
17
|
+
export declare const BYPASS_PLANNING_GATE_PHRASE = "bypass planning gate";
|
|
18
|
+
export declare function isImplementationToolCall(input: PreToolUseGateInput): boolean;
|
|
19
|
+
export declare function isPlanningGateBypassActive(state: PlanningGateState, now?: Date): boolean;
|
|
20
|
+
export declare function evaluatePreToolUseGate(toolInput: PreToolUseGateInput, gateState: PlanningGateState | null | undefined, planningComplete: boolean, now?: Date): PreToolUseGateDecision;
|
|
21
|
+
export declare function computeBypassExpiry(now?: Date, ttlMs?: number): string;
|
|
22
|
+
export declare function containsBypassPlanningGatePhrase(text: string): boolean;
|
|
23
|
+
export declare function buildPlanningGateLogEvent(decision: PreToolUseGateDecision, toolInput: PreToolUseGateInput, gateState: PlanningGateState | null | undefined): Record<string, unknown>;
|
|
24
|
+
export declare const TRACKED_WORKFLOW_MODES: readonly ["autopilot", "autoresearch", "team", "ultragoal", "ralph", "ultrawork", "ultraqa", "ralplan", "deep-interview"];
|
|
2
25
|
export type TrackedWorkflowMode = (typeof TRACKED_WORKFLOW_MODES)[number];
|
|
3
26
|
export type WorkflowTransitionAction = 'activate' | 'start' | 'write';
|
|
4
27
|
export type WorkflowTransitionKind = 'allow' | 'overlap' | 'auto-complete' | 'deny';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-transition.d.ts","sourceRoot":"","sources":["../../src/state/workflow-transition.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"workflow-transition.d.ts","sourceRoot":"","sources":["../../src/state/workflow-transition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,74 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import { readFile } from 'fs/promises';
|
|
3
3
|
import { getAuthoritativeActiveStatePaths } from '../mcp/state-paths.js';
|
|
4
|
+
const IMPLEMENTATION_TOOLS = new Set(['Edit', 'Write', 'NotebookEdit']);
|
|
5
|
+
const DENIED_BASH_PATTERNS = [
|
|
6
|
+
/\bgit\s+push\b/,
|
|
7
|
+
/\bgh\s+pr\s+create\b/,
|
|
8
|
+
/\bgh\s+pr\s+merge\b/,
|
|
9
|
+
];
|
|
10
|
+
export const PLANNING_GATE_BYPASS_TTL_MS = 10 * 60 * 1000;
|
|
11
|
+
export const BYPASS_PLANNING_GATE_PHRASE = 'bypass planning gate';
|
|
12
|
+
export function isImplementationToolCall(input) {
|
|
13
|
+
if (IMPLEMENTATION_TOOLS.has(input.tool_name))
|
|
14
|
+
return true;
|
|
15
|
+
if (input.tool_name === 'Bash' && typeof input.tool_input === 'string') {
|
|
16
|
+
return DENIED_BASH_PATTERNS.some((pattern) => pattern.test(input.tool_input));
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
export function isPlanningGateBypassActive(state, now = new Date()) {
|
|
21
|
+
const raw = typeof state.bypass_planning_gate_until === 'string'
|
|
22
|
+
? state.bypass_planning_gate_until.trim()
|
|
23
|
+
: '';
|
|
24
|
+
if (!raw)
|
|
25
|
+
return false;
|
|
26
|
+
const bypassMs = Date.parse(raw);
|
|
27
|
+
if (!Number.isFinite(bypassMs))
|
|
28
|
+
return false;
|
|
29
|
+
return now.getTime() < bypassMs;
|
|
30
|
+
}
|
|
31
|
+
export function evaluatePreToolUseGate(toolInput, gateState, planningComplete, now = new Date()) {
|
|
32
|
+
if (!gateState || gateState.downstream_authority !== 'plan_then_execute') {
|
|
33
|
+
return { allowed: true };
|
|
34
|
+
}
|
|
35
|
+
if (planningComplete) {
|
|
36
|
+
return { allowed: true };
|
|
37
|
+
}
|
|
38
|
+
if (!isImplementationToolCall(toolInput)) {
|
|
39
|
+
return { allowed: true };
|
|
40
|
+
}
|
|
41
|
+
if (isPlanningGateBypassActive(gateState, now)) {
|
|
42
|
+
return { allowed: true, reason: 'bypass_planning_gate active' };
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
allowed: false,
|
|
46
|
+
gate_fired: true,
|
|
47
|
+
reason: `deep-interview downstream_authority is plan_then_execute but no ralplan consensus artifact exists; ${toolInput.tool_name} denied`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function computeBypassExpiry(now = new Date(), ttlMs = PLANNING_GATE_BYPASS_TTL_MS) {
|
|
51
|
+
return new Date(now.getTime() + ttlMs).toISOString();
|
|
52
|
+
}
|
|
53
|
+
export function containsBypassPlanningGatePhrase(text) {
|
|
54
|
+
return text.toLowerCase().includes(BYPASS_PLANNING_GATE_PHRASE);
|
|
55
|
+
}
|
|
56
|
+
export function buildPlanningGateLogEvent(decision, toolInput, gateState) {
|
|
57
|
+
return {
|
|
58
|
+
event: 'planning-gate-fired',
|
|
59
|
+
tool_name: toolInput.tool_name,
|
|
60
|
+
allowed: decision.allowed,
|
|
61
|
+
reason: decision.reason,
|
|
62
|
+
downstream_authority: gateState?.downstream_authority,
|
|
63
|
+
bypass_active: gateState ? isPlanningGateBypassActive(gateState) : false,
|
|
64
|
+
timestamp: new Date().toISOString(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
4
67
|
export const TRACKED_WORKFLOW_MODES = [
|
|
5
68
|
'autopilot',
|
|
6
69
|
'autoresearch',
|
|
7
70
|
'team',
|
|
71
|
+
'ultragoal',
|
|
8
72
|
'ralph',
|
|
9
73
|
'ultrawork',
|
|
10
74
|
'ultraqa',
|
|
@@ -16,7 +80,12 @@ const ALLOWED_OVERLAP_PAIRS = new Set([
|
|
|
16
80
|
]);
|
|
17
81
|
const AUTO_COMPLETE_TRANSITIONS = new Set([
|
|
18
82
|
'deep-interview->ralplan',
|
|
83
|
+
'deep-interview->autopilot',
|
|
19
84
|
'deep-interview->autoresearch',
|
|
85
|
+
'deep-interview->ralph',
|
|
86
|
+
'deep-interview->team',
|
|
87
|
+
'deep-interview->ultragoal',
|
|
88
|
+
'deep-interview->ultrawork',
|
|
20
89
|
'ralplan->team',
|
|
21
90
|
'ralplan->ralph',
|
|
22
91
|
'ralplan->autopilot',
|
|
@@ -31,6 +100,7 @@ const EXECUTION_LIKE_MODES = new Set([
|
|
|
31
100
|
'autopilot',
|
|
32
101
|
'autoresearch',
|
|
33
102
|
'team',
|
|
103
|
+
'ultragoal',
|
|
34
104
|
'ralph',
|
|
35
105
|
'ultrawork',
|
|
36
106
|
'ultraqa',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-transition.js","sourceRoot":"","sources":["../../src/state/workflow-transition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-transition.js","sourceRoot":"","sources":["../../src/state/workflow-transition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,iCAAiC,SAAU,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,2BAA2B,IAAI,qBAAqB,CAKnE;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CA4DpF;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ3F;AAED,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3G;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,uBAAuB,GAC7B,qBAAqB,CA2CvB;AAED,wBAAsB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAK9H;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,sBAAsB,GAAG,IAAI,CA8B/B;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAExC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { join } from 'node:path';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { getBaseStateDir } from '../state/paths.js';
|
|
4
5
|
export const SUBAGENT_TRACKING_SCHEMA_VERSION = 1;
|
|
5
6
|
export const DEFAULT_SUBAGENT_ACTIVE_WINDOW_MS = 120_000;
|
|
6
7
|
export function subagentTrackingPath(cwd) {
|
|
7
|
-
return join(cwd, '
|
|
8
|
+
return join(getBaseStateDir(cwd), 'subagent-tracking.json');
|
|
8
9
|
}
|
|
9
10
|
export function createSubagentTrackingState() {
|
|
10
11
|
return {
|
|
@@ -87,7 +88,7 @@ export async function readSubagentTrackingState(cwd) {
|
|
|
87
88
|
export async function writeSubagentTrackingState(cwd, state) {
|
|
88
89
|
const normalized = normalizeSubagentTrackingState(state);
|
|
89
90
|
const path = subagentTrackingPath(cwd);
|
|
90
|
-
await mkdir(
|
|
91
|
+
await mkdir(dirname(path), { recursive: true });
|
|
91
92
|
await writeFile(path, `${JSON.stringify(normalized, null, 2)}\n`);
|
|
92
93
|
return path;
|
|
93
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/subagents/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -884,7 +884,7 @@ esac
|
|
|
884
884
|
await rm(cwd, { recursive: true, force: true });
|
|
885
885
|
}
|
|
886
886
|
});
|
|
887
|
-
it('startTeam
|
|
887
|
+
it('startTeam rejects tmux fallback when worker startup evidence stays missing', { skip: skipSlowLifecycleUnderCoverage }, async () => {
|
|
888
888
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-startup-no-evidence-'));
|
|
889
889
|
const prevTmux = process.env.TMUX;
|
|
890
890
|
const prevTmuxPane = process.env.TMUX_PANE;
|
|
@@ -985,17 +985,14 @@ esac
|
|
|
985
985
|
}
|
|
986
986
|
})();
|
|
987
987
|
}, 20);
|
|
988
|
-
|
|
988
|
+
await assert.rejects(withoutTeamWorkerEnv(() => startTeam('team-startup-no-evidence', 'interactive startup rejects missing worker evidence without false task evidence', 'executor', 1, [{ subject: 's', description: 'd', owner: 'worker-1' }], cwd)), /worker_notify_failed:worker-1:codex_startup_no_evidence_after_fallback/);
|
|
989
989
|
if (receiptFailer) {
|
|
990
990
|
clearInterval(receiptFailer);
|
|
991
991
|
receiptFailer = null;
|
|
992
992
|
}
|
|
993
|
-
assert.ok(await readTeamConfig(runtime.teamName, cwd));
|
|
994
|
-
const workerStatus = await readWorkerStatus(runtime.teamName, 'worker-1', cwd);
|
|
995
|
-
assert.ok(['unknown', 'idle'].includes(workerStatus.state));
|
|
996
993
|
const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
|
|
997
994
|
assert.match(tmuxLog, /send-keys -t %2 -l --/);
|
|
998
|
-
await shutdownTeam(
|
|
995
|
+
await shutdownTeam(expectedTeamName, cwd, { force: true }).catch(() => { });
|
|
999
996
|
});
|
|
1000
997
|
}
|
|
1001
998
|
finally {
|
|
@@ -1659,7 +1656,7 @@ esac
|
|
|
1659
1656
|
assert.equal(applyIndex < saveIndex, true);
|
|
1660
1657
|
assert.equal(saveIndex < readyIndex, true);
|
|
1661
1658
|
});
|
|
1662
|
-
it('startTeam
|
|
1659
|
+
it('startTeam rejects startup direct trigger success when Codex startup evidence is missing', async () => {
|
|
1663
1660
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-startup-direct-fast-'));
|
|
1664
1661
|
const previousTmux = process.env.TMUX;
|
|
1665
1662
|
const previousTmuxPane = process.env.TMUX_PANE;
|
|
@@ -1668,13 +1665,14 @@ esac
|
|
|
1668
1665
|
const previousReadyTimeout = process.env.OMX_TEAM_READY_TIMEOUT_MS;
|
|
1669
1666
|
const previousStartupEvidenceTimeout = process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS;
|
|
1670
1667
|
const previousStartupDispatchRetries = process.env.OMX_TEAM_STARTUP_DISPATCH_RETRIES;
|
|
1671
|
-
|
|
1668
|
+
const teamName = `tsd-${process.pid}-${Date.now().toString(36)}`;
|
|
1672
1669
|
try {
|
|
1673
1670
|
await withMockTmuxFixture({
|
|
1674
1671
|
dirPrefix: 'omx-runtime-startup-direct-fast-bin-',
|
|
1675
1672
|
tmuxScript: () => `#!/bin/sh
|
|
1676
1673
|
set -eu
|
|
1677
1674
|
order_file="${cwd}/startup-order.log"
|
|
1675
|
+
count_file="${cwd}/startup-capture-count"
|
|
1678
1676
|
case "$1" in
|
|
1679
1677
|
-V)
|
|
1680
1678
|
echo "tmux 3.4"
|
|
@@ -1699,7 +1697,15 @@ case "$1" in
|
|
|
1699
1697
|
;;
|
|
1700
1698
|
capture-pane)
|
|
1701
1699
|
printf '%s\n' capture >> "$order_file"
|
|
1702
|
-
|
|
1700
|
+
count=0
|
|
1701
|
+
if [ -f "$count_file" ]; then count=$(cat "$count_file"); fi
|
|
1702
|
+
count=$((count + 1))
|
|
1703
|
+
printf '%s' "$count" > "$count_file"
|
|
1704
|
+
if [ "$count" -eq 1 ]; then
|
|
1705
|
+
printf 'OpenAI Codex\nmodel: test\ndirectory: /tmp/demo\n'
|
|
1706
|
+
else
|
|
1707
|
+
printf 'worker process is still starting; no agent prompt yet\n'
|
|
1708
|
+
fi
|
|
1703
1709
|
exit 0
|
|
1704
1710
|
;;
|
|
1705
1711
|
send-keys)
|
|
@@ -1725,26 +1731,15 @@ esac
|
|
|
1725
1731
|
process.env.OMX_TEAM_WORKER_LAUNCH_MODE = 'interactive';
|
|
1726
1732
|
process.env.OMX_TEAM_WORKER_CLI = 'codex';
|
|
1727
1733
|
process.env.OMX_TEAM_READY_TIMEOUT_MS = '5000';
|
|
1728
|
-
process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS = '
|
|
1734
|
+
process.env.OMX_TEAM_STARTUP_EVIDENCE_TIMEOUT_MS = '500';
|
|
1729
1735
|
process.env.OMX_TEAM_STARTUP_DISPATCH_RETRIES = '1';
|
|
1730
|
-
|
|
1731
|
-
runtimeTeamName = runtime.teamName;
|
|
1736
|
+
await assert.rejects(withoutTeamWorkerEnv(() => startTeam(teamName, 'startup direct trigger falls back to evidence-gated dispatch', 'executor', 1, [{ subject: 'w1', description: 'worker one', owner: 'worker-1' }], cwd)), /worker_notify_failed:worker-1:codex_startup_no_evidence_after_fallback/);
|
|
1732
1737
|
const order = (await readFile(join(cwd, 'startup-order.log'), 'utf-8')).trim().split('\n');
|
|
1733
1738
|
assert.ok(order.includes('send-keys'), `expected direct send-keys, got ${order.join(',')}`);
|
|
1734
|
-
|
|
1735
|
-
assert.ok(timing.events.some((event) => event.phase === 'split_returned'));
|
|
1736
|
-
assert.ok(timing.events.some((event) => event.phase === 'identity_inbox_written'));
|
|
1737
|
-
assert.ok(timing.events.some((event) => event.phase === 'direct_fallback' && /startup_direct_trigger_sent/.test(event.reason ?? '')));
|
|
1738
|
-
assert.ok(timing.events.some((event) => event.phase === 'startup_evidence' && event.reason === 'none' && event.ok === false));
|
|
1739
|
-
assert.equal(timing.events.some((event) => event.phase === 'ready_wait_start'), false);
|
|
1740
|
-
const workerStatus = await readWorkerStatus(runtime.teamName, 'worker-1', cwd);
|
|
1741
|
-
assert.equal(workerStatus?.state, 'unknown');
|
|
1742
|
-
assert.match(workerStatus?.reason ?? '', /startup_direct_no_evidence/);
|
|
1739
|
+
assert.ok(order.filter((entry) => entry === 'send-keys').length >= 2, `expected evidence-gated dispatch after startup-direct no-evidence, got ${order.join(',')}`);
|
|
1743
1740
|
});
|
|
1744
1741
|
}
|
|
1745
1742
|
finally {
|
|
1746
|
-
if (runtimeTeamName)
|
|
1747
|
-
await shutdownTeam(runtimeTeamName, cwd, { force: true }).catch(() => { });
|
|
1748
1743
|
if (typeof previousTmux === 'string')
|
|
1749
1744
|
process.env.TMUX = previousTmux;
|
|
1750
1745
|
else
|
|
@@ -1858,12 +1853,16 @@ esac
|
|
|
1858
1853
|
assert.equal(workerStatus.state, 'unknown');
|
|
1859
1854
|
assert.equal(workerStatus.reason, undefined);
|
|
1860
1855
|
const requests = await listDispatchRequests(runtime.teamName, cwd, { kind: 'inbox' });
|
|
1861
|
-
assert.
|
|
1856
|
+
assert.ok(requests.some((request) => request.status === 'notified')
|
|
1857
|
+
|| requests.some((request) => /fallback_confirmed/.test(request.last_reason ?? '')), `expected hook notification or ready-prompt fallback confirmation, got ${JSON.stringify(requests)}`);
|
|
1862
1858
|
const captureCount = Number.parseInt(await readFile(join(cwd, 'capture-count'), 'utf-8'), 10);
|
|
1863
1859
|
assert.ok(captureCount >= 2, `expected ready wait capture after bootstrapping, got ${captureCount}`);
|
|
1864
|
-
const
|
|
1865
|
-
|
|
1866
|
-
|
|
1860
|
+
const timingPath = join(cwd, '.omx', 'state', 'team', runtime.teamName, 'startup-timing.json');
|
|
1861
|
+
if (existsSync(timingPath)) {
|
|
1862
|
+
const timing = JSON.parse(await readFile(timingPath, 'utf-8'));
|
|
1863
|
+
assert.ok(timing.events.some((event) => event.phase === 'ready_wait_start'));
|
|
1864
|
+
assert.ok(timing.events.some((event) => event.phase === 'ready_wait_end' && event.ok === true));
|
|
1865
|
+
}
|
|
1867
1866
|
});
|
|
1868
1867
|
}
|
|
1869
1868
|
finally {
|
|
@@ -2158,7 +2157,7 @@ esac
|
|
|
2158
2157
|
await rm(cwd, { recursive: true, force: true });
|
|
2159
2158
|
}
|
|
2160
2159
|
});
|
|
2161
|
-
it('startTeam
|
|
2160
|
+
it('startTeam rejects no-evidence startup issues instead of treating live panes as recoverable', { skip: skipSlowLifecycleUnderCoverage }, async () => {
|
|
2162
2161
|
const cwd = await mkdtemp(join(tmpdir(), 'omx-runtime-no-startup-evidence-'));
|
|
2163
2162
|
const previousTmux = process.env.TMUX;
|
|
2164
2163
|
const previousTmuxPane = process.env.TMUX_PANE;
|
|
@@ -2171,6 +2170,7 @@ esac
|
|
|
2171
2170
|
let receiptFailer = null;
|
|
2172
2171
|
let runtime = null;
|
|
2173
2172
|
const teamName = 'team-no-startup-evidence';
|
|
2173
|
+
let observedNoEvidenceRequest = false;
|
|
2174
2174
|
try {
|
|
2175
2175
|
await withMockTmuxFixture({
|
|
2176
2176
|
dirPrefix: 'omx-runtime-no-startup-evidence-bin-',
|
|
@@ -2255,29 +2255,21 @@ process.on('SIGTERM', () => process.exit(0));
|
|
|
2255
2255
|
process.env.OMX_TEAM_STARTUP_DISPATCH_RETRY_DELAY_MS = '50';
|
|
2256
2256
|
receiptFailer = setInterval(() => {
|
|
2257
2257
|
void (async () => {
|
|
2258
|
-
const
|
|
2258
|
+
const runtimeTeamName = await resolveRuntimeTeamName(cwd, teamName);
|
|
2259
|
+
const requests = await listDispatchRequests(runtimeTeamName, cwd, { kind: 'inbox' }).catch(() => []);
|
|
2259
2260
|
for (const request of requests) {
|
|
2261
|
+
observedNoEvidenceRequest ||= /startup_no_evidence|fallback_attempted_but_unconfirmed/.test(request.last_reason ?? '');
|
|
2260
2262
|
if (request.status !== 'pending')
|
|
2261
2263
|
continue;
|
|
2262
2264
|
await transitionDispatchRequest(teamName, request.request_id, 'pending', 'failed', { last_reason: 'test_failed_receipt' }, cwd).catch(() => { });
|
|
2263
2265
|
}
|
|
2264
2266
|
})();
|
|
2265
2267
|
}, 20);
|
|
2266
|
-
|
|
2268
|
+
await assert.rejects(withoutTeamWorkerEnv(() => startTeam(teamName, 'interactive startup should reject no-evidence startup even while panes stay alive', 'executor', 2, [
|
|
2267
2269
|
{ subject: 'worker-1 task', description: 'd', owner: 'worker-1' },
|
|
2268
2270
|
{ subject: 'worker-2 task', description: 'd', owner: 'worker-2' },
|
|
2269
|
-
], cwd));
|
|
2270
|
-
|
|
2271
|
-
const worker1Status = await readWorkerStatus(runtimeTeamName, 'worker-1', cwd);
|
|
2272
|
-
const worker2Status = await readWorkerStatus(runtimeTeamName, 'worker-2', cwd);
|
|
2273
|
-
assert.equal(worker1Status.state, 'unknown');
|
|
2274
|
-
assert.equal(worker2Status.state, 'unknown');
|
|
2275
|
-
assert.match(worker1Status.reason ?? '', /startup_no_evidence|fallback_attempted_but_unconfirmed/);
|
|
2276
|
-
assert.match(worker2Status.reason ?? '', /startup_no_evidence|fallback_attempted_but_unconfirmed/);
|
|
2277
|
-
const task1 = await readTask(runtimeTeamName, '1', cwd);
|
|
2278
|
-
const task2 = await readTask(runtimeTeamName, '2', cwd);
|
|
2279
|
-
assert.equal(task1?.status, 'pending');
|
|
2280
|
-
assert.equal(task2?.status, 'pending');
|
|
2271
|
+
], cwd)), /worker_notify_failed:worker-\d+:(codex_startup_no_evidence_after_fallback|fallback_attempted_but_unconfirmed)/);
|
|
2272
|
+
assert.equal(observedNoEvidenceRequest, true);
|
|
2281
2273
|
});
|
|
2282
2274
|
}
|
|
2283
2275
|
finally {
|
|
@@ -3375,7 +3367,7 @@ exit 0
|
|
|
3375
3367
|
const standaloneHudSplitRe = new RegExp(`split-window -v -l ${HUD_TMUX_TEAM_HEIGHT_LINES} -t %1 -d -P -F #\\{pane_id\\}`, 'g');
|
|
3376
3368
|
assert.equal(tmuxLog.match(teamHudSplitRe)?.length ?? 0, 2);
|
|
3377
3369
|
assert.equal(tmuxLog.match(standaloneHudSplitRe)?.length ?? 0, 1);
|
|
3378
|
-
assert.equal(tmuxLog.match(/set-hook -
|
|
3370
|
+
assert.equal(tmuxLog.match(/set-hook -t leader:0 client-resized\[\d+\]/g)?.length ?? 0, 2);
|
|
3379
3371
|
assert.equal(tmuxLog.match(/set-hook -t leader:0 client-attached\[\d+\]/g)?.length ?? 0, 2);
|
|
3380
3372
|
assert.equal(tmuxLog.match(/run-shell -b sleep \d+; tmux resize-pane -t %3 -y \d+ >/g)?.length ?? 0, 3);
|
|
3381
3373
|
assert.equal(tmuxLog.match(/run-shell tmux resize-pane -t %3 -y \d+ >/g)?.length ?? 0, 3);
|
|
@@ -4718,7 +4710,7 @@ esac
|
|
|
4718
4710
|
const teamRoot = teamStateTestPath(cwd, 'team', 'team-shutdown-gate-failed');
|
|
4719
4711
|
assert.equal(existsSync(teamRoot), false);
|
|
4720
4712
|
const tmuxLog = await readFile(tmuxLogPath, 'utf-8');
|
|
4721
|
-
assert.match(tmuxLog, /set-hook -u -
|
|
4713
|
+
assert.match(tmuxLog, /set-hook -u -t omx-team-team-shutdown-gate-failed:0 client-resized\[\d+\]/);
|
|
4722
4714
|
assert.match(tmuxLog, /kill-session -t omx-team-team-shutdown-gate-failed/);
|
|
4723
4715
|
});
|
|
4724
4716
|
}
|