From 568b57ff2090775182effb746fe7a6349cf64322 Mon Sep 17 00:00:00 2001 From: toki Date: Sun, 5 Jul 2026 05:50:42 +0900 Subject: [PATCH] Update roadmap: phase PHASE.md and archive openai-compatible-tool-call-boundary-hardening milestone --- ...i-compatible-tool-call-boundary-hardening.md | 17 ++++++++++------- .../PHASE.md | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) rename agent-roadmap/{ => archive}/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md (82%) diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md b/agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md similarity index 82% rename from agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md rename to agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md index 23abb93..47da22e 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md +++ b/agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md @@ -12,7 +12,7 @@ OpenAI-compatible `tools[]`가 있는 요청에서 provider-pool 또는 provider ## 상태 -[진행중] +[완료] ## 승격 조건 @@ -51,15 +51,17 @@ OpenAI-compatible provider 응답의 tool-call 후보를 요청 schema 기준으 ## 완료 리뷰 -- 상태: 보완 필요 -- 요청일: 2026-07-04 -- 완료 근거: `01_provider_text_boundary/complete.log`와 `02+01_contract_dev_smoke/complete.log`가 모든 기능 Task id의 PASS, Go 검증, dev-runtime smoke evidence를 기록한다. 다만 종료 전 코드레벨 재검토에서 native stream `tool_calls`와 raw text ``이 같이 올 때 보류 raw candidate가 flush될 수 있는 작은 누수 가능성을 local guard/test로 보강했으며, 이 guard가 반영된 source 기준 dev-runtime credentialed smoke는 아직 재수집되지 않았다. +- 상태: 통과 +- 요청일: 2026-07-05 +- 완료 근거: `01_provider_text_boundary/complete.log`, `02+01_contract_dev_smoke/complete.log`, `03+02_closure_verification/complete.log`가 모든 기능 Task id의 PASS, Go 검증, dev-runtime non-stream/stream smoke evidence를 기록한다. +- 완료 근거: 종료 전 코드레벨 재검토에서 native stream `tool_calls`와 raw/partial text tool-call 후보가 함께 오는 경로의 `FlushNonCandidate()` guard와 회귀 테스트를 확인했다. +- 완료 근거: 현재 checkout 기준 `go test ./apps/edge/internal/openai`, `go test ./apps/edge/...`, `go test ./...`가 통과했다. - 검토 항목: - [x] valid raw text tool call은 구조화되고 raw block이 노출되지 않는다 - [x] unknown/malformed tool call은 성공 content로 노출되지 않는다 - [x] Pi/Cline형 OpenAI-compatible tools smoke 근거가 남아 있다 - agent-ui 상태 반영: 해당 없음 -- 리뷰 코멘트: `agent-task/m-openai-compatible-tool-call-boundary-hardening/03+02_closure_verification/PLAN-cloud-G07.md`에서 guarded source sync, dev-runtime rebuild/refresh, Pi/Cline형 non-stream/stream smoke evidence 재수집을 완료한 뒤 `[완료]` 전환과 archive 이동을 다시 판단한다. +- 리뷰 코멘트: 남은 차단 항목 없음. archive 전 workspace lock 조회 결과 현재 Milestone 관련 lock은 없다. ## 범위 제외 @@ -77,7 +79,8 @@ OpenAI-compatible provider 응답의 tool-call 후보를 요청 schema 기준으 - 완료 메모(2026-07-04): provider route 또는 provider-pool에서 assistant content에 raw `` text가 들어오면 요청 `tools[]` schema 기준으로 구조화하거나 차단한다. 관련 단위 테스트는 provider raw text synthesis, malformed/unknown blocking, multi-candidate validation을 포함한다. - 완료 메모(2026-07-04): unknown text tool-call은 client-visible success content로 남기지 않고 bounded retry 또는 `tool_validation_error`로 처리한다. live SSE와 strict buffered stream 경로도 raw block을 flush하지 않는다. - 완료 메모(2026-07-04): [sentinel-sanitize]는 `apps/edge/internal/openai/strict_output.go`, `stream.go`, `server_test.go`에서 non-stream Chat Completions, live SSE, Responses 출력의 `<|mask_end|>` 제거와 tool-call 뒤 sentinel 제거 회귀 테스트를 추가해 완료했다. 검증: `go test ./apps/edge/internal/openai`, `go test ./apps/edge/...`. -- 관측 메모(2026-07-04): dev-runtime Edge health는 응답했지만 `/v1/models`는 Bearer 인증을 요구해 secret 없이 live provider 재현은 수행하지 않았다. 실제 Pi/Cline형 긴 prompt에서 모델이 raw block을 자발 출력하는지는 credentialed client smoke로 확인해야 한다. +- 완료 메모(2026-07-05): [stream-flush-guard]와 [native-preserve]는 native `tool_calls` 완료 시 raw/partial text tool-call 후보를 flush하지 않는 `FlushNonCandidate()` guard와 회귀 테스트로 보강했다. 검증: `go test ./apps/edge/internal/openai`, `go test ./apps/edge/...`, `go test ./...`. +- 완료 메모(2026-07-05): [client-smoke]는 final-source dev-runtime rebuild/restart 뒤 Pi/Cline형 non-stream/stream OpenAI-compatible smoke evidence를 `agent-test/runs/boundary-closure-partialguard-20260705_044102`에 남긴 것으로 종료했다. - 선행 작업: Tool Call Runtime 검증 재시도 MVP, OpenAI-compatible Think 제어 MVP에서 확인된 provider-pool/Pi raw leak 진단 - 후속 작업: Tool Call 판정 모델 Gate 리뷰, 요청 실행 로그와 Usage Ledger 기반 -- 확인 필요: dev-runtime Bearer credential이 있는 환경에서 Pi/Cline형 긴 agent prompt와 `tools[]` 요청으로 live provider raw leak 또는 차단 결과를 다시 관측한다. +- 확인 필요: 없음 diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md b/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md index b02f53e..a6e27fd 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md +++ b/agent-roadmap/phase/knowledge-tool-optimization-extension/PHASE.md @@ -23,8 +23,8 @@ Ollama serving 경로와 운영 기반이 안정화된 뒤, 단계 호출, tool/ - 경로: `agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-think-control.md` - 요약: OpenAI-compatible Chat Completions 요청에서 thinking/reasoning 생성과 응답 노출을 요청별로 제어하고 provider별 option 매핑과 unsupported 정책을 구현한다. -- [진행중] OpenAI-compatible Tool Call Boundary Hardening - - 경로: `agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md` +- [완료] OpenAI-compatible Tool Call Boundary Hardening + - 경로: `agent-roadmap/archive/phase/knowledge-tool-optimization-extension/milestones/openai-compatible-tool-call-boundary-hardening.md` - 요약: provider-pool/OpenAI-compatible 응답에서 raw text tool-call block, unknown tool name, chat-template sentinel token이 클라이언트 화면으로 새지 않도록 Edge tool-call 경계를 검증/정규화한다. - [스케치] 단계 호출과 검증 최적화 MVP