개선 #528
완료됨개선 #525: Codex CLI 0.142.2 app-server 대응 개발 묶음
Codex 0.142.2 app-server notification projection 보강
100%
설명
h2. 배경
Hive는 thread/turn/item 주요 이벤트와 MCP/status/warning은 처리하지만 thread/settings/updated, thread/goal/*, thread/closed, guardian/model/config 계열 일부 notification은 수신 후 드롭 또는 미표시 상태다. Hive 컨셉상 전체 raw/realtime 복제는 낮은 우선이나, 운영/진단 가치가 있는 notification은 projection 정책을 정해야 한다.
근거 문서: docs/design/codex-cli-0.142.2-app-server-protocol-audit.md
h2. 작업 범위
-
thread/settings/updated,thread/closed,thread/goal/*의 제품 반영 필요성을 확정하고 필요한 runtime snapshot/event projection을 구현한다. -
guardianWarning,configWarning,deprecationNotice,model/rerouted,model/verification,model/safetyBuffering/updated를 사용자 표시, 진단 로그, 명시적 무시 중 하나로 분류한다. - raw/realtime/fs/process 계열은 Hive 제품 범위 제외 또는 추후 과제로 문서화해 무분별한 UI 확장을 막는다.
h2. 완료 기준
- 지원하기로 한 notification은 renderer 상태 또는 diagnostic event로 관측된다.
- 의도적으로 제외한 notification은 코드 주석/테스트/문서 중 하나에 명확히 남는다.
- 기존 transcript, command output, file-change projection이 회귀하지 않는다.
Carl Friedrich Gauss이(가) 6일 전에 변경
h2. 선행분석 결과
읽기 전용으로 조사했습니다. 현재 app-server notification 경로는 appServerSupervisor가 stdout JSON-RPC를 분류하고, main.handleAppServerIncomingMessage가 MCP/turn-diff cache side effect를 먼저 반영한 뒤 appServerEventDispatcher -> runtime-event-projection -> runtime-store로 전달하는 구조입니다.
h3. 확인된 현 상태
- 0.142.2 기준
thread/settings/updated,thread/goal/updated,thread/goal/cleared,thread/closed는 dispatcher의thread/*prefix 정책으로 수신 후보에는 들어오지만 projection case와RuntimeEvent/store 상태가 없어 최종 drop됩니다. - 현재
RuntimeThreadState에도 goal/settings 전용 보존 필드가 없고,thread/readrestore도 session model/effort 일부만 복원합니다. -
configWarning,account/rateLimits/updated,item/fileChange/outputDelta,item/mcpToolCall/progress는 이미 명시적 UI suppressed 목록에 있어 조용히 무시됩니다. -
guardianWarning,model/rerouted,model/verification,model/safetyBuffering/updated,deprecationNotice,account/updated,fs/changed,process/*,rawResponseItem/completed는 dispatcher allow-list에 없거나 projection type/case가 없어 미지원/디버그 drop 상태입니다.
h3. 권장 수정 범위
-
thread/closed: sidebar 삭제가 아니라 loaded session close로 보고not_loaded또는 전용 closed event로 처리합니다. -
thread/settings/updated: transcript 표시 없이 session model/effort 및 추론 가능한 permission/session metadata를 store에 반영합니다. -
thread/goal/updated/cleared: 우선RuntimeThreadState.goalstore-only 반영으로 처리하고, 별도 visible UI는 후속 판단합니다. -
guardianWarning/configWarning/deprecationNotice/model/rerouted: transcript 카드가 아니라runtime/warningdiagnostics로 반영하는 쪽이 Hive UX에 맞습니다. -
item/autoApprovalReview/*,model/verification,model/safetyBuffering/updated,turn/moderationMetadata는 noisy/internal 성격이 강하므로 이번 범위에서는 명시 suppress 또는 diagnostic-only 후보입니다.
h3. 범위 제외
rawResponseItem/completed는 internal/experimental raw event이고, thread/realtime/*는 persisted ThreadItem이 아닌 별도 ephemeral realtime surface입니다. fs/changed는 fs/watch utility와 짝이고, process/outputDelta/process/exited는 process/spawn 계열 저수준 process API입니다. Hive는 현재 turn transcript, command/exec outputDelta, fileChange patch/diff, Git 상태를 별도 경로로 다루므로 raw/realtime/fs/process 계열은 #528 범위에서 제외하는 것이 맞습니다.
h3. 볼륨 판단
store/diagnostics 중심이면 이 일감 내 처리 가능. goal 전용 UI, model safety/verification UI, realtime/fs/process utility 지원까지 포함하면 후속 일감 분리가 필요합니다.
h3. 검증 계획
electron/appServerEventDispatcher.behavior.test.tssrc/renderer/runtime-event-projection.behavior.test.tssrc/renderer/runtime-store.behavior.test.tselectron/runtimeSnapshotProvider.behavior.test.tsnpm run typecheck- 필요 시
npm run validate:codex-app-server-schema및 live smoke
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. #528 진행방향
notification projection은 '표시하면 좋을 것'을 Hive식으로 새로 만드는 작업이 아니라 Codex app이 표시하는 notification은 동일한 성격의 surface로 표시하고, Codex app이 suppress하거나 내부 처리하는 notification은 Hive도 suppress/diagnostic-only로 맞춥니다. goal/model safety/realtime/fs/process 계열은 구현 전 reference capture가 필요하며, Codex app에서 visible UI가 확인되지 않으면 이번 범위에서는 store/diagnostics 또는 명시 suppress로 둡니다.
Carl Friedrich Gauss이(가) 5일 전에 변경
- 담당자을(를) 정인 김(으)로 지정되었습니다.
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/ 배포 산출물 미생성 확인
- 배포 산출물 생성은 사용자 별도 지시 예정이므로 수행하지 않았습니다.