feat: add field-bootstrap-test-port-readiness milestone and archive ollama-field-validation-follow-up
- Add new milestone for field bootstrap test port readiness - Archive completed ollama field validation follow-up milestone - Update PHASE.md, current.md, project rules, and deploy docs
This commit is contained in:
parent
6a4c141e97
commit
183c3d12a6
7 changed files with 317 additions and 19 deletions
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
## 상태
|
||||
|
||||
[진행중]
|
||||
[완료]
|
||||
|
||||
## 승격 조건
|
||||
|
||||
|
|
@ -37,20 +37,22 @@
|
|||
|
||||
사용자 실테스트 결과를 현재 활성 Ollama 연동 작업으로 받아 후속 안정화 범위를 정한다.
|
||||
|
||||
- [ ] [split-host-env] code-server 컨테이너를 Edge로, 컨테이너 호스트를 Node/Ollama host로 두는 split-host field smoke 환경이 구성되어 있다. 검증: host Node가 컨테이너 Edge 주소로 등록되고 Edge에서 node registration을 확인할 수 있다.
|
||||
- [ ] [field-test] split-host 환경에서 실제 Ollama 연동 실테스트 결과와 재현 로그가 기록되어 있다. 검증: 실제 모델 조회와 non-streaming/streaming chat 결과 또는 실패 로그가 남아 있다.
|
||||
- [ ] [issue-triage] 실테스트에서 나온 후속 작업이 API compatibility, option passthrough, reasoning stream, config/docs, routing/fallback 후보로 분류되어 있다.
|
||||
- [ ] [follow-up-scope] 코드 수정이 필요한 항목은 이 Milestone의 추가 Task 또는 같은 Milestone task group의 후속 plan으로 정리되어 있다.
|
||||
- [x] [split-host-env] code-server 컨테이너를 Edge로, 컨테이너 호스트를 Node/Ollama host로 두는 split-host field smoke 환경이 구성되어 있다. 검증: host Node가 컨테이너 Edge 주소로 등록되고 Edge에서 node registration을 확인할 수 있다.
|
||||
- [x] [field-test] split-host 환경에서 실제 Ollama 연동 실테스트 결과와 재현 로그가 기록되어 있다. 검증: 실제 모델 조회와 non-streaming/streaming chat 결과 또는 실패 로그가 남아 있다.
|
||||
- [x] [issue-triage] 실테스트에서 나온 후속 작업이 API compatibility, option passthrough, reasoning stream, config/docs, routing/fallback 후보로 분류되어 있다.
|
||||
- [x] [follow-up-scope] 코드 수정이 필요한 항목은 이 Milestone의 추가 Task 또는 같은 Milestone task group의 후속 plan으로 정리되어 있다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
||||
- 상태: 없음
|
||||
- 요청일: 없음
|
||||
- 완료 근거: 사용자 실테스트와 후속 작업 분류가 아직 충족되지 않았다.
|
||||
- 상태: 승인됨
|
||||
- 요청일: 2026-05-26
|
||||
- 완료 근거: Apple Silicon용 Node 바이너리를 Edge에서 다운로드 가능한 형태로 빌드하고, reverse SSH tunnel 기반 split-host field 환경에서 `node-silicon-ollama` registration을 확인했다.
|
||||
- 완료 근거: Edge OpenAI-compatible API에서 `/v1/models`, non-streaming `/v1/chat/completions`, streaming SSE, reasoning/content 분리, `/api/tags` API passthrough, `think:false`와 Ollama options passthrough가 실제 Ollama endpoint 기준으로 통과했다.
|
||||
- 완료 근거: 후속 후보는 OpenAI/Ollama compatibility 본선 문제가 아니라 field harness/runtime lifecycle 보완으로 분류했다.
|
||||
- 리뷰 필요:
|
||||
- [ ] 사용자가 완료 결과를 확인했다
|
||||
- [ ] archive 이동을 승인했다
|
||||
- 리뷰 코멘트: 없음
|
||||
- [x] 사용자가 완료 결과를 확인했다
|
||||
- [x] archive 이동을 승인했다
|
||||
- 리뷰 코멘트: 사용자 승인으로 완료 처리하고 archive 이동한다. `edge serve`로 실행했을 때 node/openai listener가 내려가고 metrics만 남는 상태가 관찰되어, 필드 테스트는 `edge console`로 재기동해 통과했다. 이 항목은 후속 `Field Bootstrap UX와 테스트 포트 정비` Milestone에서 다룬다.
|
||||
|
||||
## 범위 제외
|
||||
|
||||
|
|
@ -67,5 +69,7 @@
|
|||
- 표준선(선택): 초기 필드 smoke는 code-server 컨테이너 내부 Edge와 컨테이너 호스트 Node/Ollama를 분리해 실제 네트워크 경계를 통과하도록 구성한다.
|
||||
- 결정됨: split-host 실테스트 뒤 생긴 Ollama 경로 후속 안정화 작업은 이 Milestone에서 계속 처리한다.
|
||||
- 선행 작업: Ollama E2E 서빙 안정화
|
||||
- 후속 작업: split-host 실테스트에서 확인된 Ollama 경로 안정화 보완
|
||||
- 확인 필요: split-host 실테스트 결과, cloud fallback/Responses API/품질 평가로 넘길 항목
|
||||
- 실테스트 결과: Apple Silicon `darwin/arm64` Node가 reverse SSH tunnel을 통해 Edge에 등록되었고, Edge에서 `gemma4:26b` 모델 조회, non-streaming chat, streaming SSE, reasoning/content 분리, option/API passthrough를 확인했다.
|
||||
- 분류 결과: API compatibility, reasoning stream, option passthrough, Ollama API passthrough는 통과했다. routing/fallback, cloud fallback, Responses API, 품질 평가는 이번 범위 밖 후속 Phase 후보로 유지한다.
|
||||
- 후속 plan 후보: `edge serve` 실행 시 startup context/lifecycle 때문에 node/openai listener가 유지되지 않는 현상을 조사하고, field runbook에는 SSH tunnel 또는 reverse tunnel 기준 다운로드/연결 절차를 보강한다.
|
||||
- 확인 필요: 사용자의 완료 확인과 archive 이동 승인
|
||||
|
|
@ -7,9 +7,9 @@
|
|||
|
||||
## 활성 Milestone
|
||||
|
||||
- [진행중] Ollama 실테스트와 후속 안정화
|
||||
- [진행중] Field Bootstrap UX와 테스트 포트 정비
|
||||
- Phase: `agent-ops/roadmap/phase/serving-routing-optimization/PHASE.md`
|
||||
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/ollama-field-validation-follow-up.md`
|
||||
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`
|
||||
|
||||
## 선택 규칙
|
||||
|
||||
|
|
|
|||
|
|
@ -19,9 +19,13 @@ Edge OpenAI-compatible API에서 Node의 Ollama adapter까지 이어지는 단
|
|||
- 경로: `agent-ops/roadmap/archive/phase/serving-routing-optimization/milestones/model-serving-load-routing.md`
|
||||
- 요약: Edge OpenAI-compatible API를 통해 Node에서 serving 중인 Ollama를 일반 OpenAI/Ollama client 경험에 가깝게 조회, 선택, 호출하는 E2E 한 사이클과 Ollama option/API passthrough를 완료했다. 자동 라우팅, cloud fallback, 품질 평가는 후속으로 미룬다.
|
||||
|
||||
- [진행중] Ollama 실테스트와 후속 안정화
|
||||
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/ollama-field-validation-follow-up.md`
|
||||
- 요약: 완료 처리된 Ollama E2E baseline을 사용자 실테스트로 다시 확인하고, 실제 사용 중 발견되는 후속 안정화 작업을 정리한다.
|
||||
- [완료] Ollama 실테스트와 후속 안정화
|
||||
- 경로: `agent-ops/roadmap/archive/phase/serving-routing-optimization/milestones/ollama-field-validation-follow-up.md`
|
||||
- 요약: Apple Silicon Node와 실제 Ollama endpoint를 split-host 환경에서 검증했고, 모델 조회, non-streaming/streaming chat, reasoning/content 분리, option/API passthrough를 확인했다. `edge serve` lifecycle 보완은 후속 Milestone으로 분리했다.
|
||||
|
||||
- [진행중] Field Bootstrap UX와 테스트 포트 정비
|
||||
- 경로: `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`
|
||||
- 요약: code-server field 테스트 포트와 Node artifact/bootstrap 경로를 정리해, 사용자가 Jenkins agent처럼 한 줄 명령으로 Node 다운로드와 Edge 접속을 끝낼 수 있게 만든다.
|
||||
|
||||
## Phase 경계
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
# Milestone: Field Bootstrap UX와 테스트 포트 정비
|
||||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-ops/roadmap/ROADMAP.md`
|
||||
- Phase: `agent-ops/roadmap/phase/serving-routing-optimization/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
field 테스트 환경을 Jenkins agent 연결처럼 매끄럽게 만든다.
|
||||
code-server 컨테이너는 외부 테스트용 web/bootstrap, Node transport, OTO/specialized agent 포트를 안정적으로 노출하고, Edge는 Node 빌드 산출물을 정해진 위치에 준비해 사용자가 한 줄 bootstrap 명령만 실행하면 다운로드, 설정 생성, Edge 접속까지 이어지게 한다.
|
||||
|
||||
## 상태
|
||||
|
||||
[진행중]
|
||||
|
||||
## 승격 조건
|
||||
|
||||
- 없음
|
||||
|
||||
## 구현 잠금
|
||||
|
||||
- 상태: 해제
|
||||
- 결정 필요: 없음
|
||||
|
||||
## 범위
|
||||
|
||||
- `ssh toki@toki-labs.com`의 `~/docker/services/code-server/compose/docker-compose.yml`에서 code-server 컨테이너 외부 테스트 포트 노출을 정리한다.
|
||||
- IOP field 테스트용 포트를 web/bootstrap HTTP, Node Edge transport, OTO/specialized agent transport 용도로 분리해 재부팅 후 바로 사용할 수 있게 한다.
|
||||
- Edge 쪽 build artifact 위치와 URL 규칙을 정하고, Apple Silicon Node를 우선 대상으로 한 one-line bootstrap UX를 만든다.
|
||||
- bootstrap 명령은 바이너리 다운로드, checksum 또는 버전 확인, 임시 config 생성, `iop-node serve` 실행까지 한 줄 수준으로 이어지는 것을 목표로 한다.
|
||||
- 이번 Milestone은 테스트 환경과 bootstrap UX를 다루며, Control Plane 기반 장기 enrollment/credential 관리와 OTO agent 본격 구현은 후속 Phase/Milestone에서 다룬다.
|
||||
|
||||
## 기능
|
||||
|
||||
### Epic: [field-bootstrap] Field Bootstrap and Port Readiness
|
||||
|
||||
field 테스트를 매번 수동 터널과 임시 명령 조합으로 만들지 않고, 재현 가능한 외부 포트와 한 줄 bootstrap 명령으로 수렴시킨다.
|
||||
|
||||
- [x] [compose-ports] code-server compose가 field 테스트용 web/bootstrap, Node transport, OTO/specialized agent 포트를 외부에 노출한다. 검증: `docker compose config`에서 `18080`, `18081`, `19090`, `19190` 계열 포트 매핑이 확인된다.
|
||||
- [ ] [artifact-layout] Node field build 산출물의 고정 위치와 URL 규칙이 정리되어 있다. 검증: Apple Silicon용 `iop-node`를 정해진 URL에서 다운로드할 수 있다.
|
||||
- [ ] [one-line-node] 사용자가 한 줄 명령으로 Apple Silicon Node를 다운로드하고 Edge에 접속할 수 있다. 검증: Mac 테스트 환경에서 command 한 줄 실행 후 Edge에서 node registration을 확인한다.
|
||||
- [ ] [serve-lifecycle] `edge serve`가 field bootstrap에 사용할 node/openai listener를 안정적으로 유지한다. 검증: `edge serve --config <field-config>` 실행 후 Node registration과 `/v1/models` 호출이 통과한다.
|
||||
- [x] [runbook] field bootstrap runbook에 직접 포트 방식과 터널 fallback 방식이 구분되어 있다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
||||
- 상태: 없음
|
||||
- 요청일: 없음
|
||||
- 완료 근거: 테스트 환경 포트 개방과 one-line bootstrap UX가 아직 충족되지 않았다.
|
||||
- 리뷰 필요:
|
||||
- [ ] 사용자가 완료 결과를 확인했다
|
||||
- [ ] archive 이동을 승인했다
|
||||
- 리뷰 코멘트: 없음
|
||||
|
||||
## 범위 제외
|
||||
|
||||
- Control Plane 기반 장기 agent enrollment/credential 구현
|
||||
- OTO agent 본격 구현
|
||||
- cloud fallback, 자동 부하 라우팅, 품질 평가 feedback 구현
|
||||
- 외부 공개 도메인/인증 정책의 장기 확정
|
||||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `docs/deploy-dev.md`, `bin/build/field-binaries.sh`, `bin/edge.sh`, `apps/edge/cmd/edge`, `apps/edge/internal/bootstrap`, `apps/edge/internal/input`, `apps/edge/internal/transport`, 원격 `~/docker/services/code-server/compose/docker-compose.yml`
|
||||
- 표준선(선택): Edge-Node transport는 TCP proto-socket을 유지하고, HTTP는 artifact/bootstrap과 OpenAI-compatible 입력 표면에만 사용한다.
|
||||
- 표준선(선택): 외부 테스트 포트는 기존 code-server compose의 안전 remap 관례를 따라 host 충돌 포트를 피하고, 재부팅 타이밍은 사용자가 결정한다.
|
||||
- 표준선(선택): bootstrap UX는 Jenkins agent처럼 Edge가 command를 제시하고 대상 host가 실행하는 흐름을 목표로 하되, 초기 field 단계에서는 static artifact URL과 one-time-ish token/config로 시작한다.
|
||||
- 선행 작업: Ollama 실테스트와 후속 안정화
|
||||
- 진행 기록: 원격 `~/docker/services/code-server/compose/docker-compose.yml`에 `18080:18080`, `18081:8080`, `19190:9190`을 추가하고 기존 `19090:9090`, `19092:9092`를 역할 주석으로 정리했다. `/usr/local/bin/docker compose config --quiet` 검증은 통과했으며, 실제 포트 적용은 사용자가 정한 code-server compose 재기동 시점 이후 확인한다.
|
||||
- 진행 기록: `agent-ops/rules/project/rules.md`에서 field 테스트 환경 작업을 `docs/deploy-dev.md`와 이 Milestone으로 라우팅하도록 보강했고, `docs/deploy-dev.md`에 code-server compose 원본, 기준 포트, 직접 포트/터널 fallback, Apple Silicon `darwin/arm64` 기준을 기록했다.
|
||||
- 후속 작업: Agent Bootstrap과 OTO 등록, Control Plane 기반 enrollment
|
||||
- 확인 필요: 재부팅 후 code-server compose 포트 적용 확인, one-line bootstrap 명령의 최종 URL/토큰 수명 정책
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
- `bin/` — 사용자가 직접 실행하는 edge/node/web shell entrypoint와 field binary build entrypoint이다.
|
||||
- `scripts/` — 보조 E2E smoke와 입력 표면 검증 스크립트이다.
|
||||
- `Makefile` — 빌드와 테스트 진입점을 정의한다.
|
||||
- `docs/` — 아키텍처 및 운영 방향 문서이다.
|
||||
- `docs/` — 아키텍처 및 운영 방향 문서이다. field 테스트 환경, 외부 테스트 포트, one-line bootstrap 기준은 `docs/deploy-dev.md`를 우선 진입점으로 본다.
|
||||
|
||||
## 기술 스택
|
||||
|
||||
|
|
@ -53,6 +53,8 @@
|
|||
- 앱 설정 구조 변경 시 `packages/config`의 struct/default와 `configs/*.yaml` 예시를 함께 확인한다.
|
||||
- 테스트는 변경 범위에 맞춰 `go test ./...` 또는 대상 패키지 테스트를 실행한다.
|
||||
- 사용자 실행 파이프라인에 닿는 작업을 한 경우, 작업 완료 후 `agent-ops/rules/project/domain/testing/rules.md`의 검증 기준을 따른다.
|
||||
- field 테스트 환경 또는 one-line bootstrap 작업은 `docs/deploy-dev.md`의 Field 테스트 환경 라우팅과 활성 Milestone `Field Bootstrap UX와 테스트 포트 정비`를 먼저 확인한다.
|
||||
- code-server 기반 field 테스트 포트는 원격 `ssh toki@toki-labs.com`의 `~/docker/services/code-server/compose/docker-compose.yml`에서 관리한다. 기준 host port는 web/dev `13000-13099`, artifact/bootstrap HTTP `18080`, OpenAI-compatible HTTP `18081`, Edge-Node transport `19090`, Edge metrics `19092`, OTO/specialized agent transport `19190`이다.
|
||||
- 상세 DB schema, event schema, permission/policy/audit model, federation, mTLS 구현 세부, Portal UI 세부 기획은 각 작업에서 별도로 결정한다.
|
||||
|
||||
## 도메인 룰 로딩
|
||||
|
|
@ -83,4 +85,5 @@
|
|||
## 스킬 라우팅
|
||||
|
||||
- 사용자 실행 파이프라인 검증, bin shell 사용자 흐름, 메시지 2회 왕복, edge command 응답, 보조 E2E smoke, full-cycle 실제 구동, `bin/edge.sh`/`bin/node.sh` 통합 테스트: `agent-ops/skills/project/e2e-smoke/SKILL.md`
|
||||
- field 테스트 포트, artifact/bootstrap HTTP, one-line Node bootstrap, code-server compose 기반 외부 테스트 환경: `docs/deploy-dev.md`와 활성 Milestone `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`
|
||||
- 반복 작업이 확인되면 `agent-ops/skills/project/<skill-name>/SKILL.md`를 생성하고 이 표에 등록한다.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,187 @@
|
|||
# Reboot Handoff: Field Bootstrap UX와 테스트 포트 정비
|
||||
|
||||
## 주입용 요약
|
||||
|
||||
다음 세션은 `/config/workspace/iop`에서 `AGENTS.md`의 필수 규칙을 먼저 읽고, 이어서 이 파일을 읽은 뒤 작업을 계속한다.
|
||||
현재 활성 Milestone은 `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`다.
|
||||
목표는 code-server field 테스트 환경을 Jenkins agent 연결처럼 만들고, 사용자가 Apple Silicon Mac에서 한 줄 bootstrap 명령으로 Node 다운로드, config 생성, Edge 접속까지 끝내게 하는 것이다.
|
||||
|
||||
## 현재 상태
|
||||
|
||||
- 이전 Milestone `Ollama 실테스트와 후속 안정화`는 `[완료]` 처리 후 `agent-ops/roadmap/archive/phase/serving-routing-optimization/milestones/ollama-field-validation-follow-up.md`로 이동했다.
|
||||
- `current.md`는 새 활성 Milestone `Field Bootstrap UX와 테스트 포트 정비`를 가리킨다.
|
||||
- `agent-ops/rules/project/rules.md`는 field 테스트 환경과 one-line bootstrap 작업을 `docs/deploy-dev.md`와 활성 Milestone으로 라우팅하도록 갱신됐다.
|
||||
- `docs/deploy-dev.md`에는 `Field 테스트 환경 라우팅` 섹션이 추가됐다.
|
||||
- 원격 `ssh toki@toki-labs.com`의 `~/docker/services/code-server/compose/docker-compose.yml`에는 field 테스트 포트 매핑이 반영됐다.
|
||||
- 재부팅/재생성 타이밍은 사용자가 잡기로 했고, 작업자는 사용자가 명시하기 전 code-server 컨테이너를 재시작하지 않는다.
|
||||
|
||||
## 원격 code-server 포트 의도
|
||||
|
||||
원격 compose 원본:
|
||||
|
||||
```text
|
||||
ssh toki@toki-labs.com
|
||||
~/docker/services/code-server/compose/docker-compose.yml
|
||||
```
|
||||
|
||||
기준 포트:
|
||||
|
||||
```text
|
||||
13000-13099 -> 3000-3099 web/dev app preview range
|
||||
18080 -> 18080 IOP field artifact/bootstrap HTTP
|
||||
18081 -> 8080 Edge OpenAI-compatible HTTP
|
||||
19080 -> 19080 Portal/Control Plane wire test endpoint
|
||||
19090 -> 9090 Edge-Node TCP transport
|
||||
19092 -> 9092 Edge metrics
|
||||
19190 -> 9190 OTO/specialized agent field transport reserve
|
||||
```
|
||||
|
||||
검증 완료:
|
||||
|
||||
```bash
|
||||
ssh toki@toki-labs.com 'cd ~/docker/services/code-server/compose && /usr/local/bin/docker compose config --quiet'
|
||||
```
|
||||
|
||||
주의: Docker port mapping은 단순 프로세스 재시작이 아니라 컨테이너 recreate가 필요할 수 있다. 재부팅 뒤에도 `docker ps`에 새 포트가 보이지 않으면 사용자가 정한 타이밍에 compose recreate가 필요하다.
|
||||
|
||||
## 재부팅 후 첫 확인
|
||||
|
||||
원격에서 code-server 컨테이너 포트가 실제 적용됐는지 확인한다.
|
||||
|
||||
```bash
|
||||
ssh toki@toki-labs.com '/usr/local/bin/docker ps --format "{{.Names}} {{.Ports}}" | grep "^code-server "'
|
||||
```
|
||||
|
||||
기대: `18080`, `18081`, `19090`, `19092`, `19190`이 `code-server` 포트 목록에 보인다.
|
||||
|
||||
컨테이너 내부에서 포트가 열리는지는 서비스 기동 후 확인한다.
|
||||
|
||||
```bash
|
||||
curl -fsS http://127.0.0.1:18080/healthz
|
||||
curl -fsS http://127.0.0.1:18081/healthz
|
||||
```
|
||||
|
||||
`18080`은 아직 artifact/bootstrap HTTP 서버를 직접 띄워야 응답한다.
|
||||
|
||||
## 바로 이어갈 작업 순서
|
||||
|
||||
1. `edge serve` lifecycle 문제를 먼저 확인/수정한다.
|
||||
- 관찰된 현상: `edge serve`로 실행하면 node/openai listener가 내려가고 metrics만 남았다.
|
||||
- 추정 원인: Fx `OnStart` startup context를 long-running server lifetime context로 넘겨, `OnStart` 반환 뒤 context cancellation이 listener shutdown으로 이어지는 구조.
|
||||
- 후보 수정: `apps/edge/internal/bootstrap.Runtime`이 자체 runtime context/cancel을 소유하고 `Stop()`에서 cancel하도록 한다. `Start(ctx)`의 `ctx`는 startup timeout 용도로만 사용한다.
|
||||
- 검증: `edge serve --config <field-config>` 실행 후 `9090`, `8080`, `9092` listener가 유지되고 Node registration과 `/v1/models`가 통과한다.
|
||||
|
||||
2. field Edge config를 준비한다.
|
||||
- Edge listen은 컨테이너 내부 포트 기준으로 둔다.
|
||||
- Node는 Mac에서 실행되므로 Ollama base URL은 Node 관점의 `http://127.0.0.1:11434`가 맞다.
|
||||
|
||||
```yaml
|
||||
edge:
|
||||
id: "edge-field-bootstrap"
|
||||
name: "Field Bootstrap Edge"
|
||||
|
||||
server:
|
||||
listen: "0.0.0.0:9090"
|
||||
|
||||
openai:
|
||||
enabled: true
|
||||
listen: "0.0.0.0:8080"
|
||||
node: "node-silicon-ollama"
|
||||
adapter: "ollama"
|
||||
target: ""
|
||||
models:
|
||||
- "gemma4:26b"
|
||||
session_id: "openai-field"
|
||||
timeout_sec: 300
|
||||
|
||||
metrics:
|
||||
port: 9092
|
||||
|
||||
nodes:
|
||||
- id: "node-silicon-ollama"
|
||||
alias: "silicon-ollama"
|
||||
token: "CHANGE_ME_FIELD_TOKEN"
|
||||
adapters:
|
||||
ollama:
|
||||
enabled: true
|
||||
base_url: "http://127.0.0.1:11434"
|
||||
context_size: 262144
|
||||
```
|
||||
|
||||
3. Apple Silicon Node artifact layout를 고정한다.
|
||||
- Apple Silicon은 `darwin/arm64`다.
|
||||
- `linux/arm64`는 Mac 실행 대상이 아니다.
|
||||
- 기존 build entrypoint:
|
||||
|
||||
```bash
|
||||
VERSION=<field-version> APPS=node TARGETS="darwin/arm64" DIST_DIR=dist/field ./bin/build/field-binaries.sh
|
||||
```
|
||||
|
||||
4. artifact/bootstrap HTTP를 `18080`에 띄우고 URL 규칙을 정한다.
|
||||
- 임시 시작점 후보:
|
||||
|
||||
```bash
|
||||
python3 -m http.server 18080 --bind 0.0.0.0 -d dist/field/<field-version>
|
||||
```
|
||||
|
||||
- 외부 URL 후보:
|
||||
|
||||
```text
|
||||
http://toki-labs.com:18080/darwin-arm64/iop-node
|
||||
http://toki-labs.com:18080/bootstrap/node-darwin-arm64.sh
|
||||
```
|
||||
|
||||
5. one-line Node bootstrap을 만든다.
|
||||
- 목표 UX:
|
||||
|
||||
```bash
|
||||
curl -fsSL http://toki-labs.com:18080/bootstrap/node-darwin-arm64.sh | bash
|
||||
```
|
||||
|
||||
- 스크립트 책임:
|
||||
- `~/iop-field` 생성
|
||||
- `darwin-arm64/iop-node` 다운로드
|
||||
- 가능하면 checksum 확인
|
||||
- `chmod +x`
|
||||
- macOS quarantine xattr 제거
|
||||
- `node.yaml` 생성
|
||||
- `./iop-node serve --config ./node.yaml` 실행
|
||||
|
||||
6. Edge에서 테스트한다.
|
||||
- Node registration 확인
|
||||
- `/v1/models`
|
||||
- non-streaming `/v1/chat/completions`
|
||||
- streaming SSE와 `data: [DONE]`
|
||||
- `/api/tags` passthrough
|
||||
- `think:false`와 `options` passthrough
|
||||
|
||||
## Milestone 체크 상태
|
||||
|
||||
현재 완료:
|
||||
|
||||
- `[compose-ports]`
|
||||
- `[runbook]`
|
||||
|
||||
남은 항목:
|
||||
|
||||
- `[artifact-layout]`
|
||||
- `[one-line-node]`
|
||||
- `[serve-lifecycle]`
|
||||
|
||||
## 관련 파일
|
||||
|
||||
- `agent-ops/rules/project/rules.md`
|
||||
- `docs/deploy-dev.md`
|
||||
- `agent-ops/roadmap/current.md`
|
||||
- `agent-ops/roadmap/phase/serving-routing-optimization/PHASE.md`
|
||||
- `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`
|
||||
- `apps/edge/cmd/edge/main.go`
|
||||
- `apps/edge/internal/bootstrap/runtime.go`
|
||||
- `bin/build/field-binaries.sh`
|
||||
- 원격: `ssh toki@toki-labs.com:~/docker/services/code-server/compose/docker-compose.yml`
|
||||
|
||||
## 다음 세션에 붙여넣을 한 줄
|
||||
|
||||
```text
|
||||
/config/workspace/iop의 AGENTS.md 필수 규칙을 읽고, agent-task/m-field-bootstrap-test-port-readiness/reboot-handoff.md를 읽은 뒤 Field Bootstrap UX와 테스트 포트 정비 작업을 이어가. 우선 재부팅 후 code-server 포트 적용 여부를 확인하고, edge serve lifecycle 문제를 수정한 다음 Apple Silicon one-line Node bootstrap 테스트로 들어가.
|
||||
```
|
||||
|
|
@ -117,6 +117,33 @@ repo root에서 수동으로 검증할 때는 기존 helper를 사용할 수 있
|
|||
IOP_EDGE_ADDR=<edge-host>:9090 ./bin/node.sh
|
||||
```
|
||||
|
||||
## Field 테스트 환경 라우팅
|
||||
|
||||
field 테스트의 1차 기준 환경은 `ssh toki@toki-labs.com`의 code-server 컨테이너다.
|
||||
컨테이너 compose 원본은 원격 `~/docker/services/code-server/compose/docker-compose.yml`이며, 재기동 타이밍은 운영자가 정한다.
|
||||
이 저장소의 작업자는 compose를 수정할 수 있지만, 사용자가 명시하지 않으면 code-server 컨테이너를 재시작하지 않는다.
|
||||
|
||||
| Host port | Container port | Purpose |
|
||||
|---:|---:|---|
|
||||
| `13000-13099` | `3000-3099` | web/dev app preview range |
|
||||
| `18080` | `18080` | IOP field artifact/bootstrap HTTP |
|
||||
| `18081` | `8080` | Edge OpenAI-compatible HTTP |
|
||||
| `19080` | `19080` | Portal/Control Plane wire test endpoint |
|
||||
| `19090` | `9090` | Edge-Node TCP transport |
|
||||
| `19092` | `9092` | Edge metrics |
|
||||
| `19190` | `9190` | OTO/specialized agent field transport reserve |
|
||||
|
||||
field bootstrap UX는 Jenkins agent 연결처럼 Edge가 command를 제시하고 대상 host가 실행하는 형태를 목표로 한다.
|
||||
초기 field 단계의 Node bootstrap은 다음 요구를 만족해야 한다.
|
||||
|
||||
- Edge 또는 field artifact server가 `dist/field/<version>/<goos>-<goarch>/iop-node`를 정해진 URL로 노출한다.
|
||||
- Apple Silicon Mac은 `darwin/arm64` 산출물을 사용한다. `linux/arm64`는 Mac 실행 대상이 아니다.
|
||||
- 사용자가 실행하는 명령은 한 줄 수준으로 유지하고, 내부에서 다운로드, 실행 권한 부여, config 생성, `iop-node serve`까지 이어진다.
|
||||
- 직접 포트가 아직 적용되지 않았거나 외부망에서 막히면 SSH tunnel 또는 reverse tunnel은 fallback으로만 사용한다.
|
||||
|
||||
현재 활성 작업 좌표는 `agent-ops/roadmap/phase/serving-routing-optimization/milestones/field-bootstrap-test-port-readiness.md`다.
|
||||
이 Milestone이 끝나기 전까지 field bootstrap 관련 구현, 문서, 테스트 포트 변경은 해당 Milestone 범위로 판단한다.
|
||||
|
||||
## 공통 Ollama 필드 테스트 환경
|
||||
|
||||
OpenAI-compatible Ollama E2E 서빙 검증은 아래 필드 환경을 공통 기준으로 사용한다.
|
||||
|
|
|
|||
Loading…
Reference in a new issue