개선 #531
완료됨개선 #525: Codex CLI 0.142.2 app-server 대응 개발 묶음
Codex 0.142.2 turn clientUserMessageId 및 environments payload 추적 추가
100%
설명
h2. 배경
0.142.2 turn/start와 turn/steer에는 clientUserMessageId가 있고, thread/start/turn/start에는 environments 입력이 있다. 현재 Hive는 기본 대화 송신은 지원하지만 두 필드는 직접 송신하지 않아 turn dedupe/idempotency와 remote environment 추적성이 제한된다.
근거 문서: docs/design/codex-cli-0.142.2-app-server-protocol-audit.md
h2. 작업 범위
- 사용자 메시지 또는 composer submit 단위의 stable
clientUserMessageId생성/전달 방식을 설계한다. -
turn/start와turn/steerpayload에 동일한 추적 계약을 적용한다. - Hive가 실제로 지원하는 environment/remoteControl 상태만
environments에 반영하고, 미지원 remote control API 전체 노출은 피한다. - runtime metadata, logs, tests에서 idempotency와 environment trace를 확인할 수 있게 한다.
h2. 완료 기준
- 동일 turn/steer 흐름에서 client user message id가 유실되지 않는다.
- unsupported remoteControl API를 제품 UI에 성급히 노출하지 않는다.
- request construction 테스트가
clientUserMessageId와environments경계를 검증한다.
Carl Friedrich Gauss이(가) 6일 전에 변경
h2. 선행분석 결과
읽기 전용 조사만 수행했습니다. 코드/파일/Redmine 수정은 하지 않았습니다. #531은 한 일감 안에서 처리 가능해 보입니다. 단, 범위는 clientUserMessageId 전파와 이미 알려진 remote environment의 environments payload 전송까지로 닫아야 합니다. remoteControl/enable, pairing, client 관리, environment/add 같은 미지원 API를 UI에 노출하는 일은 별도 설계 대상입니다.
h3. 확인된 현 상태
- 0.142.2 generated protocol 기준
clientUserMessageId는turn/start,turn/steer에 optional field로 존재합니다. -
environments는thread/start,turn/start에 존재하며 항목 shape는{ environmentId, cwd }입니다.turn/steer에는environments가 없습니다. - Hive 현재 구현은 renderer
App.tsx에서 optimistic user message id를 생성하지만,sendUserTurn/steerTurnrequest로 전달하지 않습니다. - main
turn:start/turn:steerIPC와appServerSupervisor의 live payload builder에도clientUserMessageId/environments전달 필드가 없습니다. - remoteControl은 현재
remoteControl/status/changed및thread/started의 remoteEnvironment ref를 runtime/sidebar/HeaderBar에 투영하는 수준입니다.
h3. 권장 수정 범위
- renderer submit 시점에 stable
clientUserMessageId를 생성하고sendUserTurn/steerTurnrequest에 포함합니다. - queued turn은 queue 생성 시점에 ID를 보존합니다.
- main IPC에서 optional string 검증 후 logger와 supervisor params로 전달합니다.
- supervisor
createLiveTurnStartParams/createLiveTurnSteerParams에서 app-server payload에 포함합니다. - thread-not-found retry는 동일 ID를 재사용합니다.
- valid
{ environmentId, cwd }가 확인되는 경우에 한해thread/start/turn/startenvironmentspayload를 싣습니다. - remote environment의
cwd원천이 없는 경우 local repo path를 원격 cwd로 추정하지 말고 payload를 omit합니다.
h3. 범위 제외
remoteControl/enable, pairing, client list/revoke, environment/add는 제품 UI/bridge에 노출하지 않는 것이 맞습니다. remoteControl API 제품화/환경 선택 UI/runtimeWorkspaceRoots는 후속 일감으로 분리하는 것이 안전합니다.
h3. 볼륨 판단
request construction 추적 보강으로 닫으면 #531 한 일감 내 처리 가능합니다.
h3. 검증 계획
vitest run src/renderer/App.behavior.test.tsx src/renderer/app-server-supervisor-live.behavior.test.tsvitest run electron/liveAppServerGate.behavior.test.ts electron/appServerEventDispatcher.behavior.test.ts src/renderer/runtime-event-projection.behavior.test.ts src/renderer/runtime-store.behavior.test.tsnpm run typechecknpm run validate:package-config- 필요 시
npm run lint
Carl Friedrich Gauss이(가) 6일 전에 변경
h2. Codex app reference 기준 진행방향 업데이트
사용자가 “Hive 앱은 정식 레퍼런스로 Codex app을 따르며, 가능한 동일한 동작방식 및 표시 형태를 따라야 한다”고 방향을 확정했습니다.
공통 원칙:
- wire/protocol compatibility는 target Codex CLI 0.142.2 generated TS/schema를 기준으로 한다.
- UX, 표시 형태, suppress 여부, 사용자-facing wording은 Codex app reference를 먼저 관찰하고 가능한 동일하게 맞춘다.
- 현재 설치된
/Applications/Codex.app/Contents/Resources/codex는codex-cli 0.142.0이므로, 0.142.2 신규 필드는 0.142.2 schema로 검증하고 표시 정책은 관찰 가능한 Codex app 동작을 우선한다. - Codex app에서 보이지 않거나 확인 불가한 surface는 Hive가 임의 UI를 만들지 말고 protocol/state/diagnostics 중심으로 처리한다.
- 단, Hive Gateway credential, enterprise policy, sensitive-file warning/redaction처럼 보안/운영 경계는 Codex app parity보다 엄격해질 수 있다.
h3. #531 진행방향
clientUserMessageId와 environments는 사용자-visible 기능이 아니라 Codex app app-server payload 추적성과 remote environment 동작을 따라가는 compatibility 작업으로 진행합니다. remote environment가 Codex app처럼 header/status에 표시되는 경우 Hive도 동일하게 맞추되, valid { environmentId, cwd }가 없으면 local path를 원격 cwd로 추정하지 않고 omit합니다. remoteControl/enable, pairing, client 관리 UI는 Codex app reference와 Hive 제품 경계가 확인되기 전까지 노출하지 않습니다.
Carl Friedrich Gauss이(가) 5일 전에 변경
- 담당자을(를) 정인 김(으)로 지정되었습니다.
Carl Friedrich Gauss이(가) 5일 전에 변경
h2. remote environment 미지원 정책 반영
사용자가 remote environment는 Hive 보안정책상 미지원이라고 확정했습니다. Hive는 사내 인트라넷용 애플리케이션이며, 개발팀을 위한 숨겨진 로컬모드만 예외로 둡니다.
#531 진행방향을 다음과 같이 조정합니다.
-
clientUserMessageId생성/전달/재시도 보존은 #531 범위로 유지한다. -
remoteControl/enable, pairing, client list/revoke, environment 선택 UI는 제품 범위에서 제외한다. -
thread/start/turn/start의environmentspayload는 기본 제품 경로에서 송신하지 않는다. - 숨겨진 로컬모드에서 실제
{ environmentId, cwd }가 확인되는 경우만 guarded path로 검토한다. - remote cwd를 local repo path에서 추정하지 않는다.
따라서 이 일감은 remote environment 제품화가 아니라 user-message idempotency/traceability 및 미지원 경계 검증 작업으로 닫아야 합니다.
Redmine Admin이(가) 3일 전에 변경
- 상태을(를) 신규에서 완료(으)로 변경되었습니다.
Artifact-free close after full validation.
Final branch: codex/redmine-556-credential-redaction
Final commit: 58a7bcaf2b31edf7edc0624210ac23af2ca64d69
Full test results:
- npm run ci:production: passed (lint, typecheck, test, build:renderer, validate:fixtures, validate:package-config; release:check-signing skipped because HIVE_RELEASE_BUILD is not enabled)
- npm run validate:codex-app-server-schema: passed against local Codex 0.142.2 bundle prereq
- npm run test:live-app-server: skip-success because HIVE_CODEX_BINARY, CODEX_API_KEY or HIVE_GATEWAY_AUTH_KEY were missing
- npm run test:live-sensitive-policy: passed
Release artifacts: not created per user instruction; release/ and release-smoke/ artifact check was empty.
정인 김이(가) 3일 전에 변경
- 진척도을(를) 0에서 100(으)로 변경되었습니다.
Codex app-server 0.142.2 작업 묶음 artifact-free 검증 완료로 일감을 닫습니다.
- final branch: codex/redmine-556-credential-redaction
- final commit: 58a7bcaf2b31edf7edc0624210ac23af2ca64d69
- npm run ci:production: 통과 (lint/typecheck/Vitest 130 files/1697 tests/build renderer/fixture/package config gate 통과, release signing check는 HIVE_RELEASE_BUILD 비활성으로 skip)
- npm run validate:codex-app-server-schema: 통과
- npm run test:live-app-server: 환경 선행조건 부재로 성공 skip
- npm run test:live-sensitive-policy: hard failure 없음
- release/ 및 release-smoke/ 배포 산출물 미생성 확인
- 배포 산출물 생성은 사용자 별도 지시 예정이므로 수행하지 않았습니다.