iop/apps/edge/internal/openai
toki 31fada5d08 fix(single_request): 템플릿 승인 경계를 닫고 회귀 근거를 채운다
공식 리뷰가 지적한 두 가지 승인 경계 결함을 고친다. `plan_file`/`review_file`은
edge.yaml 디렉터리 기준 상대 경로만 허용하고 절대/빈 경로는 파일 접근 전에 거부한다.
필수 heading과 Review `PASS`는 부분 문자열이 아니라 정확한 단독 줄로 검증하며,
문서화된 placeholder를 제거한 뒤 남는 `{{`/`}}`를 거부해 문법을 닫는다.

리뷰가 존재한다고 기술했지만 실제로는 없던 회귀 근거를 추가한다. admission 시
고정된 effective 템플릿 쌍이 clone과 workspace 재검증을 통과하는지, refresh가
이미 승인된 요청이 아니라 새 요청에만 적용되는지, custom Review 템플릿이 내부
artifact만 바꾸고 caller 최종 출력은 그대로인지를 각각 확정 검증한다.

현재 문서도 실제 동작에 맞춘다. Edge 실행 spec의 낡은 Plan JSON Schema 서술을
direct PlanMD 검증으로 고치고, outer Anthropic 계약과 input spec에 템플릿이
Edge 내부 stage 입력일 뿐 caller 요청/응답 계약을 바꾸지 않음을 명시한다.

Refs: agent-task/single_request_plan_review_templates/PLAN-cloud-G08.md
2026-08-09 09:25:27 +09:00
..
testdata/anthropic feat(protocol-profile): 멀티 프로토콜 프로필을 추가한다 2026-08-01 10:33:10 +09:00
anthropic_bridge.go feat(openai): extend Anthropic bridge compatibility 2026-08-06 07:04:03 +09:00
anthropic_bridge_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
anthropic_handler.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
anthropic_native.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
anthropic_native_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
anthropic_stream.go feat(openai): extend Anthropic bridge compatibility 2026-08-06 07:04:03 +09:00
anthropic_surface_test.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
anthropic_types.go fix(api): Claude thinking beta 헤더를 허용한다 2026-08-09 06:55:27 +09:00
artifact_pair.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
artifact_pair_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
buffered_sse.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
cancellation_routes_test.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
chat_completion.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
chat_decode.go feat(openai): 반복 출력 복구를 구현한다 2026-07-29 18:40:36 +09:00
chat_handler.go feat(runtime): provider liveness 복구를 dev에 병합한다 2026-08-06 08:56:24 +09:00
chat_handler_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
chat_policy.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
chat_stream_reasoning_test.go refactor: repository readable restructuring - OpenAI tests, roadmap, and cleanup 2026-07-16 13:38:19 +09:00
chat_stream_session.go feat(openai): 실제 provider별 사용량 귀속을 기록한다 2026-07-31 20:22:23 +09:00
chat_stream_session_test.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
chat_tool_synthesis_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
chat_types.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
common_types.go feat(protocol-profile): 멀티 프로토콜 프로필을 추가한다 2026-08-01 10:33:10 +09:00
credential_migration_test.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
dispatch_context.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
dispatch_context_test.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
filter_observation_sink.go feat(stream-evidence-gate-core): complete stream evidence gate core implementation 2026-07-28 04:08:12 +09:00
filter_observation_sink_test.go feat(stream-evidence-gate-core): complete stream evidence gate core implementation 2026-07-28 04:08:12 +09:00
hot_path_anthropic_gate_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_chat_gate_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_cleanup.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_cleanup_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
hot_path_direct.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_direct_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_dispatch.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_light.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_light_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_metrics.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_observation.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_observation_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_review.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_review_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
hot_path_selector.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_selector_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
hot_path_stage_input.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
hot_path_stage_stream.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_terminal_control.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
hot_path_terminal_control_test.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
identity_metering_test.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
input_estimator.go feat(protocol-profile): 멀티 프로토콜 프로필을 추가한다 2026-08-01 10:33:10 +09:00
input_estimator_test.go fix: post-commit refinements 2026-07-26 20:53:32 +09:00
json_field_patch.go feat: stream evidence gate core - full implementation 2026-07-26 20:48:53 +09:00
liveness_recovery_observability.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
liveness_recovery_observability_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
log_safety_test.go feat(stream-evidence-gate-core): complete stream evidence gate core implementation 2026-07-28 04:08:12 +09:00
normalized_sse.go feat(runtime): provider liveness 복구를 dev에 병합한다 2026-08-06 08:56:24 +09:00
ollama_passthrough.go feat: m-node-multi-target-serving-foundation task completion and edge/node updates 2026-06-11 16:51:08 +09:00
openai_auth_routes_models_test.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
openai_request_rebuilder.go feat(openai): 반복 출력 복구를 구현한다 2026-07-29 18:40:36 +09:00
openai_request_rebuilder_test.go feat(openai): 반복 출력 복구를 구현한다 2026-07-29 18:40:36 +09:00
principal.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
principal_routes.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
principal_routes_test.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
provider_dispatch_test.go feat(protocol-profile): 멀티 프로토콜 프로필을 추가한다 2026-08-01 10:33:10 +09:00
provider_model_rewrite.go feat: stream evidence gate core - full implementation 2026-07-26 20:48:53 +09:00
provider_observability_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
provider_observation.go feat(openai): 실제 provider별 사용량 귀속을 기록한다 2026-07-31 20:22:23 +09:00
provider_policy_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
provider_selection_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
provider_test_support_test.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
provider_tool_validation_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
provider_tunnel.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
provider_tunnel_auth_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
provider_tunnel_test.go refactor: readability baseline 및 테스트 구조 개선 2026-07-17 16:02:12 +09:00
request_coordinator.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
request_coordinator_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
request_coordinator_ttl.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
request_coordinator_ttl_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
request_identity_handler_test.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
request_identity_ingress.go feat(openai): 핫패스 에이전트 실행 경로를 확장한다 2026-08-06 00:09:24 +09:00
request_lineage.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
responses_completion.go feat(openai): 실제 provider별 사용량 귀속을 기록한다 2026-07-31 20:22:23 +09:00
responses_decode.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
responses_handler.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
responses_handler_test.go feat: openai-compatible output validation filters - stream gate pipeline, policy, filters, tunnel codec, model queue, provider pool, contract & spec updates 2026-07-28 15:21:09 +09:00
responses_protocol_profile_test.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
responses_stream_gate.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
responses_types.go feat(openai): 반복 출력 복구를 구현한다 2026-07-29 18:40:36 +09:00
route_resolution.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
routes.go feat(openai): extend Anthropic bridge compatibility 2026-08-06 07:04:03 +09:00
run_result.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
server.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
server_test_support_test.go refactor(runtime): promote provider-only execution boundary 2026-08-02 20:28:45 +09:00
single_request_anthropic_stream.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_anthropic_stream_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_executor.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_executor_test.go feat(single_request): implement bounded Plan and Review Markdown templates 2026-08-09 08:41:03 +09:00
single_request_handler_test.go fix(api): Claude thinking beta 헤더를 허용한다 2026-08-09 06:55:27 +09:00
single_request_metrics.go feat(agent): 단일 요청 Agent 실행 경계를 구현한다 2026-08-07 07:03:55 +09:00
single_request_plan_stage.go feat(single_request): implement bounded Plan and Review Markdown templates 2026-08-09 08:41:03 +09:00
single_request_plan_stage_test.go feat(single_request): implement bounded Plan and Review Markdown templates 2026-08-09 08:41:03 +09:00
single_request_preset_binding.go feat(single_request): implement bounded Plan and Review Markdown templates 2026-08-09 08:41:03 +09:00
single_request_preset_binding_test.go fix(single_request): 템플릿 승인 경계를 닫고 회귀 근거를 채운다 2026-08-09 09:25:27 +09:00
single_request_provider_stage.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_provider_stage_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_quality_gate.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_quality_gate_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_review_stage.go feat(single_request): implement bounded Plan and Review Markdown templates 2026-08-09 08:41:03 +09:00
single_request_review_stage_test.go fix(single_request): 템플릿 승인 경계를 닫고 회귀 근거를 채운다 2026-08-09 09:25:27 +09:00
single_request_work_stage.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
single_request_work_stage_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
sse_writer.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
stream_gate_dispatcher.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_dispatcher_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_filters.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_filters_test.go feat(stream-gate): 필터 검증 변경을 반영한다 2026-07-30 08:13:08 +09:00
stream_gate_ingress.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_ingress_test.go feat: openai-compatible output validation filters - stream gate pipeline, policy, filters, tunnel codec, model queue, provider pool, contract & spec updates 2026-07-28 15:21:09 +09:00
stream_gate_pipeline_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_policy.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_policy_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_release_sink.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_runtime.go feat(runtime): provider liveness 복구를 dev에 병합한다 2026-08-06 08:56:24 +09:00
stream_gate_stall_recovery_test.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_tunnel_codec.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
stream_gate_vertical_slice_test.go fix(openai): 채팅 터널 실패 종료를 보장한다 2026-07-30 17:42:25 +09:00
strict_output.go feat(openai): explicit reasoning 보존 로직 추가 및 관련 핸들러 개선 2026-07-09 11:23:34 +09:00
text_tool_literals.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
text_tool_markup.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
text_tool_parser.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
tool_argument_normalization.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
tool_command_normalization.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
tool_schema.go refactor: readability baseline 및 리팩토링 (에지/노드/클라이언트/설정) 2026-07-18 07:39:38 +09:00
tool_validation.go feat(runtime): provider liveness 복구를 완성한다 2026-08-06 08:49:59 +09:00
usage_attribution_attempt_test.go feat(openai): 실제 provider별 사용량 귀속을 기록한다 2026-07-31 20:22:23 +09:00
usage_metrics.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
usage_metrics_test.go feat(credential): Provider Credential Slot 라우팅을 구현한다 2026-08-02 09:10:11 +09:00
workspace_tool_binding.go feat(hot-path): 실행 프리셋과 논리 요청 흐름을 구현한다 2026-08-03 14:42:55 +09:00
workspace_tool_binding_test.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00
workspace_tool_codec.go feat(agent): 단일 요청 실행 경로를 완성한다 2026-08-08 23:35:13 +09:00