iop/apps/web
toki 1479949db0 feat(node/cli): improve persistent session handling and Claude terminal support
- Add writePrompt with character-by-character typing for terminal profiles (2ms delay)
- Separate cliOutput into text and markerLine fields for precise completion matching
- Add consumeCompleteLines for buffered output parsing
- Add matchAny for multi-line completion marker checking
- Auto-accept Claude Code Bypass Permissions warning at startup
- Change PTY output reader from bufio.Scanner to ptmx.Read for raw byte output
- Improve drainUntilIdle with profile info and Claude bypass warning handling
- Add Claude status raw output fallback when usage parsing fails
- Add comprehensive blackbox tests for persistent sessions (21 test cases)
- Update e2e smoke test with proper wait functions, mock CLI script, and timeout variables
- Update edge.yaml console target from gemini to claude-tui, increase timeouts
- Update web app: add dev documentation, verify script, engines field, test message
2026-05-18 14:22:58 +09:00
..
public feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
src feat(node/cli): improve persistent session handling and Claude terminal support 2026-05-18 14:22:58 +09:00
.dockerignore feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
components.json feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
Dockerfile feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
next-env.d.ts feat(node/cli): improve persistent session handling and Claude terminal support 2026-05-18 14:22:58 +09:00
next.config.ts feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
package-lock.json feat(node/cli): improve persistent session handling and Claude terminal support 2026-05-18 14:22:58 +09:00
package.json feat(node/cli): improve persistent session handling and Claude terminal support 2026-05-18 14:22:58 +09:00
postcss.config.mjs feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00
README.md feat(node/cli): improve persistent session handling and Claude terminal support 2026-05-18 14:22:58 +09:00
tsconfig.json feat: add control-plane, web, and docker-compose 2026-05-18 06:21:48 +09:00

web - IOP Web Portal

apps/web은 IOP 전체 Web Portal을 위한 Next.js 스캐폴드다. 현재는 root dummy 화면만 제공하며, /nodes, /models, /jobs 같은 도메인 페이지는 아직 만들지 않는다.

Control Plane과의 주요 통신은 edge-node에서 사용 중인 protobuf-socket을 IOP Wire Protocol 기준으로 확장한다. 현재 src/lib/iop-client/에는 TypeScript 클라이언트 연결 위치와 TODO만 둔다. 브라우저 직접 WebSocket transport가 확정되기 전까지는 Next.js server-side bridge가 필요할 수 있다.

Local

웹 개발과 테스트는 기본적으로 호스트 환경에서 수행한다. Docker는 컨테이너 패키징과 compose 통합 확인이 필요할 때 사용한다.

필요한 런타임:

  • Node.js >=20.9.0
  • npm >=10
  • Go toolchain

루트에서 Control Plane을 먼저 실행한다.

go run ./apps/control-plane/cmd/control-plane serve --config configs/control-plane.yaml

다른 터미널에서 Web Portal을 실행한다.

npm ci --prefix apps/web
./bin/web.sh

기본 호스트 endpoint는 코드 기본값과 configs/control-plane.yaml 기준을 따른다.

CONTROL_PLANE_INTERNAL_HTTP_URL=http://localhost:9080
NEXT_PUBLIC_CONTROL_PLANE_HTTP_URL=http://localhost:9080
NEXT_PUBLIC_CONTROL_PLANE_WIRE_URL=tcp://localhost:19080

호스트 검증은 다음 명령을 기준으로 한다.

cd apps/web
npm run verify

현재 npm run verify는 TypeScript check와 production build를 수행한다. Next.js 16 기준 lint는 next lint가 아니라 ESLint CLI(eslint .)를 사용한다. 아직 이 앱에는 ESLint 의존성, 설정 파일, lint script가 없으므로 lint는 필수 검증에 포함하지 않는다.

lint를 도입할 때는 다음 기준을 따른다.

  • eslint, eslint-config-next와 flat config(eslint.config.*)를 함께 추가한다.
  • package.json에는 "lint": "eslint ."를 추가한다.
  • verifynpm run check && npm run lint && npm run build 순서로 갱신한다.

production standalone 실행을 확인할 때는 먼저 build를 만든 뒤 실행한다.

cd apps/web
npm run build
PORT=3000 HOSTNAME=0.0.0.0 npm run start

Docker

Docker는 compose 기반 통합 확인이 필요할 때 루트에서 실행한다.

docker compose up --build