# ASLA GPT CLI 제조 설계 실행 서버

기존 Codex CLI의 인증을 재사용한다. OpenAI API 키를 새로 생성하거나 브라우저에 입력하지 않는다. `codex login status` 성공은 인증 상태 확인이며 실제 모델 응답 성공과 별도로 표시한다.

## 실행

ZIP 압축 해제 후 macOS/Linux 터미널에서 `bash start.sh --with-cad`를 실행한다. 이미 CadQuery를 사용하는 Python이 있다면 `ASLA_PYTHON=/경로/python bash start.sh`로 재사용한다. Node.js 22 이상, Python 3.11/3.12 권장. Codex가 없으면 공식 npm 패키지를 이 폴더의 `.runtime`에 설치한다. 인증이 없으면 기존 계정으로 `codex login`을 완료해야 한다. 이 프로그램은 인증 정보를 읽어서 출력하거나 복사하지 않는다.

브라우저에서 `http://127.0.0.1:8675/manufacturing-planner.html`을 연다. 제품·치수·재질·수량·품질·예산·공장 조건을 작성하고 ‘GPT CLI로 조사·설계’를 누른다. 원래 공장 메뉴는 배포된 기존 서비스로 연결된다.

## 실제 수행

1. 별도 빈 작업 디렉터리에서 `codex exec --ignore-user-config --ephemeral --sandbox read-only --disable shell_tool --config web_search="live" --json --output-schema ...`를 호출한다. 인증은 기존 CODEX_HOME을 사용한다. 사용자 MCP/명령 설정은 읽지 않고 웹 검색만 사용하도록 지시한다.
2. CLI가 제품에 맞는 CAD feature graph, 공정 DAG, 장비 후보, 원문 URL, 수동/보조/자동 구분, 미정값, 대안과 질문을 반환한다. 고정 브래킷/공정 데이터를 반환하는 폴백은 없다.
3. 공정 의존성 순환·역량 불일치·잘못된 치수/단위를 검증한다. 실제 CLI 호출 종료 코드와 응답 SHA-256을 기록한다. 장비 URL은 CLI가 보고한 출처이며 별도 원문 검수 전이다. 단순 인증 성공을 추론 성공으로 표시하지 않는다.
4. CAD 버튼은 정해진 형상 3종이 아니라 allowlist feature graph를 CadQuery/Open CASCADE에서 실행한다. box/cylinder/torus/polygon-extrude/revolve/union/subtract/intersect/translate/rotate/fillet/chamfer. 모델이 생성한 Python·셸 명령은 실행하지 않는다. 유효 솔리드에 한해 STEP/STL/실제 삼각 메시를 내보낸다. 지원하지 않는 형상은 미지원으로 남긴다.
5. 설치 치수가 있는 장비만 2D 설치 면적·0.8m 여유·공장 경계를 검사해 배치한다. 치수 미정은 막는다. 표시되는 장비 블록은 실제 장비 CAD나 디지털 트윈이 아니다.
6. 일정 실험은 입력 추정 시간·선행 관계·장비 1개 동시 용량으로 계산한다. 가공 물리·로봇 IK·품질을 증명하지 않는다. 검사/수작업을 자동으로 수행했다고 표시하지 않는다.
7. ERP 주문 초안, SCM 소재 요구, MES 공정/장비 DAG, ASLA Sandbox 후보와 이벤트를 JSON으로 인계한다. 외부 ERP/MES/SCM, 기존 학습 모델, 실제 장비에 자동 반영하지 않는다. 도메인 스키마·현장·제조성 검수 전 학습/실기체 배포는 비활성이다.

## 설정

- `ASLA_CODEX_BIN`: 기존 codex 실행 파일 절대 경로. 기본 `codex`.
- `ASLA_CODEX_MODEL`: 기존 인증에서 접근 가능한 모델명. 미설정 시 CLI 기본.
- `ASLA_PYTHON`: CadQuery가 설치된 Python 실행 파일.
- `ASLA_CLI_DATA`: 작업·CAD 결과 저장 디렉터리. 기본 사용자 홈 `.asla-manufacturing`.
- `ASLA_PORT`: 기본 8675.
- `ASLA_BIND`: 기본 127.0.0.1. 외부 바인딩에는 32자 이상 `ASLA_BRIDGE_TOKEN` 필수.

기본 서버는 로컬 전용이며 공개 터널이나 포트 개방을 자동으로 하지 않는다. Cloudflare Workers는 CLI 프로세스를 직접 실행하지 못하므로, 운영 서버에서 HTTPS로 이 실행 서버를 제공할 때 사이트의 게이트웨이 연결 기능을 사용한다. 토큰은 서버에서 암호화 저장하고 브라우저에 다시 표시하지 않는다. CLI 서버를 실행하지 않은 상태에서 사이트가 새 AI 응답을 생성한다고 주장하지 않는다.

## API

`GET /api/health`, `POST /api/jobs {requirements,floor}`, `GET /api/jobs/:id`, `POST /api/jobs/:id/cancel`, `POST /api/jobs/:id/cad {plan?}`, `GET /api/jobs/:id/files/{mesh.json,product.step,product.stl}`.

CLI 작업 1개씩, 최대 300초. CAD 최대 90초. 실행 중 서버 재시작은 interrupted로 처리한다. 요청 Origin/Host를 검사하고 임의 셸 명령 API를 제공하지 않는다. 원격 HTTPS 호출은 Bearer 토큰을 요구한다. 배포 사이트는 기존 서명 세션·역할·계정 경계로 게이트웨이를 호출하고 실제 반환 계획을 D1/R2에 저장한다.

임의 제조업의 완전 자동화·제조 가능성은 보장하지 않는다. 재료/공차/장비 API/안전·법규·도메인 검수와 장비 실측이 필요하다. CLI 응답과 실제 현장 실행은 별도 검수 대상이다.

## 이번 개발 환경의 실제 검증 결과

Codex CLI 0.166.0 설치와 기존 인증 확인은 통과했다. 그러나 제조 설계 실호출(300초) 및 최소 추론(35초)은 최종 응답을 받지 못했다. 따라서 실제 AI 설계 생성 성공, 장비 검색 완료, 운영 게이트웨이 연결 완료로 표시하지 않는다. `/manufacturing/evidence/runtime-check.json`에 이 결과를 기록했다. CAD·일정·프로토콜 시험은 수동 작성한 테스트 입력으로 검증했으며 AI 생성 증적으로 사용하지 않는다.

## 긴 CAD 작업의 실행 규격
CAD 요청은 HTTP 202로 접수한 뒤 `GET /api/jobs/:id`의 `cad.status`를 조회합니다. `running → completed` 및 `ready:true`를 확인한 경우만 파일을 내려받습니다. 실패·시간 초과·서버 재시작은 `failed` 또는 `interrupted`로 기록하며 이전 파일을 성공 결과로 노출하지 않습니다. Cloudflare는 이 비동기 상태를 보관·조회하며 CAD 커널을 Worker 내부에서 실행하지 않습니다.

## 배포 검수 상태 (2026-11-02)
- Cloudflare Worker + D1/R2 화면·업무 API: 배포 대상.
- CLI 기존 계정 인증: 현재 개발 환경에서 확인. 실제 제조 계획 추론: 제한시간 초과로 미검증. app-server 초기화도 확인했으나 thread/start 응답은 미수신.
- 실제 CAD 커널: 사람이 작성한 반지·펜던트 feature graph로 STEP 재수입·형상 유효성 검증. AI 생성 성공 증적으로 사용하지 않음.
- 원격 CLI/CAD 게이트웨이: 운영 주소·런타임 연결 미설정. 서버 자격증명을 배포 파일에 복사하지 않음.
- 장비·MES·SCM·ERP 외부 연결 및 제조 승인: 미검증. 임의 제품의 전자동 제조 완성으로 표현하지 않음.
