MCPcopy Index your code
hub / github.com/tiann/hapi / runCodex

Function runCodex

cli/src/codex/runCodex.ts:27–381  ·  view source on GitHub ↗
(opts: {
    startedBy?: 'runner' | 'terminal';
    codexArgs?: string[];
    permissionMode?: PermissionMode;
    resumeSessionId?: string;
    model?: string;
    modelReasoningEffort?: ReasoningEffort;
    collaborationMode?: EnhancedMode['collaborationMode'];
    existingSessionId?: string;
    workingDirectory?: string;
})

Source from the content-addressed store, hash-verified

25const REASONING_EFFORTS = new Set<ReasoningEffort>(['none', 'minimal', 'low', 'medium', 'high', 'xhigh'])
26
27export async function runCodex(opts: {
28 startedBy?: 'runner' | 'terminal';
29 codexArgs?: string[];
30 permissionMode?: PermissionMode;
31 resumeSessionId?: string;
32 model?: string;
33 modelReasoningEffort?: ReasoningEffort;
34 collaborationMode?: EnhancedMode['collaborationMode'];
35 existingSessionId?: string;
36 workingDirectory?: string;
37}): Promise<void> {
38 const workingDirectory = opts.workingDirectory ?? getInvokedCwd();
39 const startedBy = opts.startedBy ?? 'terminal';
40
41 logger.debug(`[codex] Starting with options: startedBy=${startedBy}`);
42
43 let state: AgentState = {
44 controlledByUser: false
45 };
46 const bootstrap = opts.existingSessionId
47 ? await bootstrapExistingSession({
48 sessionId: opts.existingSessionId,
49 flavor: 'codex',
50 startedBy,
51 workingDirectory
52 })
53 : await bootstrapSession({
54 flavor: 'codex',
55 startedBy,
56 workingDirectory,
57 agentState: state,
58 model: opts.model,
59 modelReasoningEffort: opts.modelReasoningEffort
60 });
61 const { api, session } = bootstrap;
62
63 const startingMode: 'local' | 'remote' = startedBy === 'runner' ? 'remote' : 'local';
64
65 setControlledByUser(session, startingMode);
66
67 const messageQueue = new MessageQueue2<EnhancedMode>((mode) => hashObject({
68 permissionMode: mode.permissionMode,
69 model: mode.model,
70 modelReasoningEffort: mode.modelReasoningEffort,
71 collaborationMode: mode.collaborationMode
72 }));
73
74 const codexCliOverrides = parseCodexCliOverrides(opts.codexArgs);
75 const sessionWrapperRef: { current: CodexSession | null } = { current: null };
76 // 中文注释:当用户直接把现成的 Codex thread 导入到一个全新的 Hapi 会话时,
77 // 需要在首次附着 transcript 时回放已有历史;恢复已有 Hapi 会话时则保持原来的增量模式,避免重复灌入旧消息。
78 const replayTranscriptHistoryOnStart = Boolean(opts.resumeSessionId && !opts.existingSessionId);
79
80 let currentPermissionMode: PermissionMode = opts.permissionMode ?? 'default';
81 let currentModel = opts.model;
82 let currentModelReasoningEffort: ReasoningEffort | undefined = opts.modelReasoningEffort;
83 let currentCollaborationMode: EnhancedMode['collaborationMode'] = opts.collaborationMode ?? 'default';
84

Callers 2

dispatchLocalResumeFunction · 0.85
codex.tsFile · 0.85

Calls 15

pushIsolateAndClearMethod · 0.95
pushMethod · 0.95
cancelByLocalIdMethod · 0.95
getInvokedCwdFunction · 0.90
bootstrapExistingSessionFunction · 0.90
bootstrapSessionFunction · 0.90
setControlledByUserFunction · 0.90
hashObjectFunction · 0.90
parseCodexCliOverridesFunction · 0.90
createRunnerLifecycleFunction · 0.90

Tested by

no test coverage detected