Skip to content

Commit c765e3b

Browse files
MaorDavidzonclaude
andcommitted
CM-62984: Align Codex integration with session-start refactor
Post-merge fixes after #434 (session-start refactor) landed on main: - consts.py: Codex SessionStart now calls CYCODE_SESSION_START_COMMAND with --ide codex, matching the Cursor/Claude-code pattern (the old CYCODE_ENSURE_AUTH_COMMAND constant was removed). - session_start_command.py: add Codex branch to _build_session_payload so session_start works for the Codex IDE. - handlers.py: drop ai_client.create_conversation() call from handle_before_command_exec; conversation creation now happens in the session-start command, matching the other three handlers. - test_hooks_manager.py: update Codex SessionStart test to assert on CYCODE_SESSION_START_COMMAND + --ide codex. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 0a5b30d commit c765e3b

4 files changed

Lines changed: 14 additions & 4 deletions

File tree

cycode/cli/apps/ai_guardrails/consts.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ def _get_codex_hooks_config(async_mode: bool = False) -> dict:
170170
reads are not exposed to hooks.
171171
"""
172172
command = f'{CYCODE_SCAN_PROMPT_COMMAND} --ide {AIIDEType.CODEX.value}'
173+
session_start_command = f'{CYCODE_SESSION_START_COMMAND} --ide {AIIDEType.CODEX.value}'
173174

174175
hook_entry = {'type': 'command', 'command': command}
175176
if async_mode:
@@ -181,7 +182,7 @@ def _get_codex_hooks_config(async_mode: bool = False) -> dict:
181182
'SessionStart': [
182183
{
183184
'matcher': 'startup',
184-
'hooks': [{'type': 'command', 'command': CYCODE_ENSURE_AUTH_COMMAND}],
185+
'hooks': [{'type': 'command', 'command': session_start_command}],
185186
}
186187
],
187188
'UserPromptSubmit': [

cycode/cli/apps/ai_guardrails/scan/handlers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,6 @@ def handle_before_command_exec(ctx: typer.Context, payload: AIHookPayload, polic
269269
response_builder = get_response_builder(ide)
270270

271271
command_config = get_policy_value(policy, 'command_exec', default={})
272-
ai_client.create_conversation(payload)
273272
if not get_policy_value(command_config, 'enabled', default=True):
274273
ai_client.create_event(payload, AiHookEventType.COMMAND_EXEC, AIHookOutcome.ALLOWED)
275274
return response_builder.allow_permission()

cycode/cli/apps/ai_guardrails/session_start_command.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ def _build_session_payload(payload: dict, ide: str) -> AIHookPayload:
4141
ide_version=ide_version,
4242
)
4343

44+
if ide == AIIDEType.CODEX:
45+
return AIHookPayload(
46+
conversation_id=payload.get('session_id'),
47+
generation_id=payload.get('turn_id'),
48+
model=payload.get('model'),
49+
ide_provider=AIIDEType.CODEX.value,
50+
ide_version=payload.get('codex_version'),
51+
)
52+
4453
# Cursor
4554
return AIHookPayload(
4655
conversation_id=payload.get('conversation_id'),

tests/cli/commands/ai_guardrails/test_hooks_manager.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,13 @@ def test_get_hooks_config_codex_async() -> None:
151151

152152

153153
def test_get_hooks_config_codex_session_start() -> None:
154-
"""Test Codex hooks config includes SessionStart auth check."""
154+
"""Test Codex hooks config includes SessionStart with --ide flag."""
155155
config = get_hooks_config(AIIDEType.CODEX)
156156
assert 'SessionStart' in config['hooks']
157157
entries = config['hooks']['SessionStart']
158158
assert len(entries) == 1
159-
assert entries[0]['hooks'][0]['command'] == CYCODE_ENSURE_AUTH_COMMAND
159+
assert CYCODE_SESSION_START_COMMAND in entries[0]['hooks'][0]['command']
160+
assert '--ide codex' in entries[0]['hooks'][0]['command']
160161

161162

162163
def test_get_hooks_config_codex_pretooluse_bash_only() -> None:

0 commit comments

Comments
 (0)