govon 1.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. govon-1.0.5/LICENSE +21 -0
  2. govon-1.0.5/PKG-INFO +422 -0
  3. govon-1.0.5/README.md +338 -0
  4. govon-1.0.5/govon.egg-info/PKG-INFO +422 -0
  5. govon-1.0.5/govon.egg-info/SOURCES.txt +62 -0
  6. govon-1.0.5/govon.egg-info/dependency_links.txt +1 -0
  7. govon-1.0.5/govon.egg-info/entry_points.txt +2 -0
  8. govon-1.0.5/govon.egg-info/requires.txt +62 -0
  9. govon-1.0.5/govon.egg-info/top_level.txt +1 -0
  10. govon-1.0.5/pyproject.toml +206 -0
  11. govon-1.0.5/setup.cfg +4 -0
  12. govon-1.0.5/src/__init__.py +8 -0
  13. govon-1.0.5/src/cli/__init__.py +8 -0
  14. govon-1.0.5/src/cli/approval_ui.py +284 -0
  15. govon-1.0.5/src/cli/commands.py +49 -0
  16. govon-1.0.5/src/cli/daemon.py +238 -0
  17. govon-1.0.5/src/cli/http_client.py +322 -0
  18. govon-1.0.5/src/cli/renderer.py +565 -0
  19. govon-1.0.5/src/cli/shell.py +506 -0
  20. govon-1.0.5/src/cli/terminal.py +56 -0
  21. govon-1.0.5/src/data_collection_preprocessing/__init__.py +13 -0
  22. govon-1.0.5/src/data_collection_preprocessing/__main__.py +5 -0
  23. govon-1.0.5/src/data_collection_preprocessing/cli.py +76 -0
  24. govon-1.0.5/src/data_collection_preprocessing/config.py +14 -0
  25. govon-1.0.5/src/data_collection_preprocessing/parsers.py +235 -0
  26. govon-1.0.5/src/data_collection_preprocessing/pipeline.py +177 -0
  27. govon-1.0.5/src/inference/__init__.py +0 -0
  28. govon-1.0.5/src/inference/actions/__init__.py +4 -0
  29. govon-1.0.5/src/inference/actions/base.py +226 -0
  30. govon-1.0.5/src/inference/actions/data_go_kr.py +931 -0
  31. govon-1.0.5/src/inference/adapter_registry.py +258 -0
  32. govon-1.0.5/src/inference/agent_manager.py +134 -0
  33. govon-1.0.5/src/inference/api_server.py +1529 -0
  34. govon-1.0.5/src/inference/db/__init__.py +58 -0
  35. govon-1.0.5/src/inference/db/alembic/env.py +82 -0
  36. govon-1.0.5/src/inference/db/alembic/versions/001_create_rag_tables.py +346 -0
  37. govon-1.0.5/src/inference/db/crud.py +306 -0
  38. govon-1.0.5/src/inference/db/database.py +77 -0
  39. govon-1.0.5/src/inference/db/models.py +448 -0
  40. govon-1.0.5/src/inference/feature_flags.py +54 -0
  41. govon-1.0.5/src/inference/graph/__init__.py +27 -0
  42. govon-1.0.5/src/inference/graph/builder.py +212 -0
  43. govon-1.0.5/src/inference/graph/capabilities/__init__.py +32 -0
  44. govon-1.0.5/src/inference/graph/capabilities/api_lookup.py +292 -0
  45. govon-1.0.5/src/inference/graph/capabilities/base.py +131 -0
  46. govon-1.0.5/src/inference/graph/capabilities/defaults.py +91 -0
  47. govon-1.0.5/src/inference/graph/capabilities/demographics_lookup.py +310 -0
  48. govon-1.0.5/src/inference/graph/capabilities/issue_detector.py +315 -0
  49. govon-1.0.5/src/inference/graph/capabilities/keyword_analyzer.py +288 -0
  50. govon-1.0.5/src/inference/graph/capabilities/registry.py +70 -0
  51. govon-1.0.5/src/inference/graph/capabilities/stats_lookup.py +323 -0
  52. govon-1.0.5/src/inference/graph/nodes.py +731 -0
  53. govon-1.0.5/src/inference/graph/state.py +79 -0
  54. govon-1.0.5/src/inference/graph/tools/__init__.py +76 -0
  55. govon-1.0.5/src/inference/graph/tools/adapter_tools.py +76 -0
  56. govon-1.0.5/src/inference/graph/tools/analysis_tools.py +232 -0
  57. govon-1.0.5/src/inference/graph/tools/search_tools.py +75 -0
  58. govon-1.0.5/src/inference/health_checker.py +115 -0
  59. govon-1.0.5/src/inference/prompt_validator.py +87 -0
  60. govon-1.0.5/src/inference/rate_tracker.py +124 -0
  61. govon-1.0.5/src/inference/response_formatter.py +123 -0
  62. govon-1.0.5/src/inference/runtime_config.py +393 -0
  63. govon-1.0.5/src/inference/schemas.py +71 -0
  64. govon-1.0.5/src/inference/session_context.py +752 -0
govon-1.0.5/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 umyunsang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
govon-1.0.5/PKG-INFO ADDED
@@ -0,0 +1,422 @@
1
+ Metadata-Version: 2.4
2
+ Name: govon
3
+ Version: 1.0.5
4
+ Summary: Agentic CLI shell for Korean public-sector civil complaint workflows
5
+ Author-email: umyunsang <dbstkd5865@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/GovOn-org/GovOn
8
+ Project-URL: Documentation, https://github.com/GovOn-org/GovOn#readme
9
+ Project-URL: Repository, https://github.com/GovOn-org/GovOn.git
10
+ Project-URL: Issues, https://github.com/GovOn-org/GovOn/issues
11
+ Keywords: agentic-shell,cli,civil-complaint,korean-nlp,public-sector
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
+ Classifier: Topic :: Text Processing :: Linguistic
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: httpx>=0.27.0
28
+ Requires-Dist: loguru>=0.7.0
29
+ Requires-Dist: rich>=13.0.0
30
+ Requires-Dist: prompt-toolkit>=3.0.0
31
+ Provides-Extra: dev
32
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
33
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
34
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
35
+ Requires-Dist: black>=23.0.0; extra == "dev"
36
+ Requires-Dist: isort>=5.12.0; extra == "dev"
37
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
38
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
39
+ Requires-Dist: pre-commit>=3.4.0; extra == "dev"
40
+ Requires-Dist: bandit>=1.7.5; extra == "dev"
41
+ Requires-Dist: safety>=2.3.5; extra == "dev"
42
+ Provides-Extra: test
43
+ Requires-Dist: pytest>=7.4.0; extra == "test"
44
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
45
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
46
+ Provides-Extra: server
47
+ Requires-Dist: torch>=2.8.0; extra == "server"
48
+ Requires-Dist: transformers>=4.53.0; extra == "server"
49
+ Requires-Dist: accelerate>=1.0.0; extra == "server"
50
+ Requires-Dist: datasets>=2.14.0; extra == "server"
51
+ Requires-Dist: bitsandbytes>=0.44.0; extra == "server"
52
+ Requires-Dist: optimum>=1.13.0; extra == "server"
53
+ Requires-Dist: autoawq>=0.2.8; extra == "server"
54
+ Requires-Dist: peft>=0.16.0; extra == "server"
55
+ Requires-Dist: trl>=0.15.0; extra == "server"
56
+ Requires-Dist: vllm>=0.14.1; extra == "server"
57
+ Requires-Dist: fastapi>=0.100.0; extra == "server"
58
+ Requires-Dist: uvicorn>=0.23.0; extra == "server"
59
+ Requires-Dist: pydantic>=2.0.0; extra == "server"
60
+ Requires-Dist: rank-bm25>=0.2.2; extra == "server"
61
+ Requires-Dist: sentence-transformers>=3.0.0; extra == "server"
62
+ Requires-Dist: faiss-cpu>=1.7.4; extra == "server"
63
+ Requires-Dist: langgraph==1.1.6; extra == "server"
64
+ Requires-Dist: langgraph-checkpoint==4.0.1; extra == "server"
65
+ Requires-Dist: langgraph-checkpoint-sqlite==3.0.3; extra == "server"
66
+ Requires-Dist: langchain-core<2.0.0,>=1.2.0; extra == "server"
67
+ Requires-Dist: langchain-openai>=0.3.0; extra == "server"
68
+ Requires-Dist: pandas>=2.0.0; extra == "server"
69
+ Requires-Dist: numpy>=1.24.0; extra == "server"
70
+ Requires-Dist: scikit-learn>=1.3.0; extra == "server"
71
+ Requires-Dist: tqdm>=4.66.0; extra == "server"
72
+ Requires-Dist: python-dotenv>=1.0.0; extra == "server"
73
+ Requires-Dist: pyyaml>=6.0.0; extra == "server"
74
+ Provides-Extra: korean-nlp
75
+ Requires-Dist: konlpy>=0.6.0; extra == "korean-nlp"
76
+ Requires-Dist: mecab-python3>=1.0.6; extra == "korean-nlp"
77
+ Provides-Extra: database
78
+ Requires-Dist: sqlalchemy>=2.0.0; extra == "database"
79
+ Requires-Dist: alembic>=1.12.0; extra == "database"
80
+ Requires-Dist: psycopg2-binary>=2.9.0; extra == "database"
81
+ Provides-Extra: all
82
+ Requires-Dist: govon[database,dev,korean-nlp,server]; extra == "all"
83
+ Dynamic: license-file
84
+
85
+ # GovOn — Agentic CLI Shell for Korean Public Sector
86
+
87
+ > **"도로 파손 민원에 대한 답변 초안을 작성해줘"** — 한마디면 AI가 법령을 찾고, 유사 사례를 조회하고, 공문서 형식의 초안을 생성합니다.
88
+
89
+ GovOn은 **동아대학교 컴퓨터공학과** 현장미러형 산학연계 프로젝트로 개발된 에이전틱 CLI 셸입니다.
90
+ 지방자치단체 공무원의 민원 답변 업무를 AI 에이전트가 보조합니다.
91
+
92
+ [![PyPI version](https://img.shields.io/pypi/v/govon?logo=pypi&logoColor=white)](https://pypi.org/project/govon/)
93
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/govon)](https://pypi.org/project/govon/)
94
+ [![Docs Portal](https://img.shields.io/badge/Docs-Portal-blue?logo=readthedocs)](https://govon-org.github.io/GovOn/)
95
+ [![Public Roadmap](https://img.shields.io/badge/Public_Roadmap-Workstreams-7C3AED)](https://github.com/GovOn-Org/GovOn/issues/402)
96
+ [![HF Space](https://img.shields.io/badge/HF_Space-Runtime-yellow?logo=huggingface)](https://huggingface.co/spaces/umyunsang/govon-runtime)
97
+ [![Discussion](https://img.shields.io/badge/Discussion-Community-green?logo=github)](https://github.com/GovOn-Org/GovOn/discussions/606)
98
+
99
+ <!-- DORA-BADGES:START -->
100
+ ![DORA Grade](https://img.shields.io/badge/DORA-Elite-brightgreen)
101
+ ![Deploy Freq](https://img.shields.io/badge/Deploy_Freq-30%2Fweek-blue)
102
+ ![Lead Time](https://img.shields.io/badge/Lead_Time-0.4h-brightgreen)
103
+ ![CFR](https://img.shields.io/badge/CFR-29.0%2525-yellow)
104
+ ![MTTR](https://img.shields.io/badge/MTTR-0.0h-brightgreen)
105
+ <!-- DORA-BADGES:END -->
106
+
107
+ ---
108
+
109
+ ## 핵심 특징
110
+
111
+ ### 1. ReAct 자율 에이전트
112
+
113
+ LLM이 사용자의 의도를 이해하고 **7개 도구 중 어떤 것을 호출할지 자율적으로 판단**합니다.
114
+ 키워드 매칭이 아니라, 맥락 기반 추론으로 도구를 선택합니다.
115
+
116
+ | 도구 | 역할 |
117
+ |------|------|
118
+ | `api_lookup` | 민원 데이터 API 조회 |
119
+ | `issue_detector` | 주요 이슈 탐지 |
120
+ | `stats_lookup` | 통계 데이터 조회 |
121
+ | `keyword_analyzer` | 핵심 키워드 분석 |
122
+ | `demographics_lookup` | 인구통계 조회 |
123
+ | `public_admin_adapter` | 공공행정 민원 답변 생성 (civil LoRA) |
124
+ | `legal_adapter` | 법률 해석 및 법령 인용 답변 생성 (legal LoRA) |
125
+
126
+ ### 2. 도메인 특화 Multi-LoRA
127
+
128
+ 단일 EXAONE 4.0-32B-AWQ 베이스 모델 위에 요청별로 LoRA 어댑터를 동적 전환합니다.
129
+
130
+ | 어댑터 | 학습 데이터 | 용도 |
131
+ |--------|-----------|------|
132
+ | [**civil-adapter**](https://huggingface.co/umyunsang/govon-civil-adapter) (r16) | 74K 민원-답변 쌍 | `public_admin_adapter` tool_call 시 attach |
133
+ | [**legal-adapter**](https://huggingface.co/siwo/govon-legal-adapter) (r16) | 270K 법률 문서 | `legal_adapter` tool_call 시 attach |
134
+
135
+ ### 3. Human-in-the-loop 승인 흐름
136
+
137
+ AI가 도구를 실행하기 전에 사용자에게 승인을 요청합니다.
138
+ 완전 자동화가 아닌, **사람의 판단을 존중하는 반자동화**입니다.
139
+
140
+ ```bash
141
+ $ govon
142
+ GovOn Shell v1.0 — 무엇을 도와드릴까요?
143
+
144
+ > 도로 파손 민원에 대한 답변 초안을 작성해줘
145
+
146
+ ┌─ 작업 승인 요청 ─────────────────┐
147
+ │ 유형: 답변 초안 작성 │
148
+ │ 목표: 도로 파손 민원 답변 생성 │
149
+ │ 작업: │
150
+ │ • 민원 처리 근거 확인 │
151
+ │ • 유사 사례 및 담당 부서 조회 │
152
+ │ │
153
+ │ ● 승인 ○ 거절 │
154
+ └───────────────────────────────────┘
155
+ ```
156
+
157
+ ---
158
+
159
+ ## 아키텍처
160
+
161
+ ```mermaid
162
+ graph LR
163
+ subgraph Client ["사용자 터미널"]
164
+ CLI["govon CLI"]
165
+ end
166
+
167
+ subgraph HFSpace ["HF Space — A100 80GB"]
168
+ subgraph FastAPI ["FastAPI :7860"]
169
+ V4["v4 Agent\n(approval flow)"]
170
+ V3["v3 Agent\n(auto-execute)"]
171
+ CTX["6-Layer\nContext Mgmt"]
172
+ end
173
+ subgraph VLLM ["vLLM :8000"]
174
+ BASE["EXAONE-4.0\n32B-AWQ"]
175
+ LORA1["civil LoRA"]
176
+ LORA2["legal LoRA"]
177
+ end
178
+ end
179
+
180
+ CLI -- "HTTP/SSE" --> V4
181
+ CLI -- "HTTP/SSE" --> V3
182
+ V4 --> CTX
183
+ V3 --> CTX
184
+ V4 -- "httpx" --> BASE
185
+ V3 -- "httpx" --> BASE
186
+ BASE --- LORA1
187
+ BASE --- LORA2
188
+
189
+ style Client fill:#e0f2fe,stroke:#0284c7
190
+ style HFSpace fill:#fef3c7,stroke:#d97706
191
+ style FastAPI fill:#dcfce7,stroke:#16a34a
192
+ style VLLM fill:#fce7f3,stroke:#db2777
193
+ ```
194
+
195
+ ### ReAct 루프 흐름
196
+
197
+ ```mermaid
198
+ graph TD
199
+ START([START]) --> SL[session_load\n컨텍스트 복원]
200
+ SL --> AGENT[agent\nLLM 자율 도구 선택]
201
+ AGENT -->|tool_calls 없음| END_NODE[persist + END]
202
+ AGENT -->|Tier 0 도구| TOOLS[tools\nToolNode 실행]
203
+ AGENT -->|승인 필요| APPROVAL[approval_wait\nHuman-in-the-loop]
204
+ APPROVAL -->|승인| TOOLS
205
+ APPROVAL -->|거절| AGENT
206
+ TOOLS --> AGENT
207
+
208
+ style SL fill:#dbeafe
209
+ style AGENT fill:#fef9c3
210
+ style TOOLS fill:#dcfce7
211
+ style END_NODE fill:#f3e8ff
212
+ style APPROVAL fill:#fee2e2
213
+ ```
214
+
215
+ ### 6-Layer 컨텍스트 관리
216
+
217
+ 장기 대화에서 토큰 오버플로를 방지하는 6단계 파이프라인:
218
+
219
+ | Layer | 단계 | 메커니즘 |
220
+ |-------|------|---------|
221
+ | L1 | 도구 실행 | 도구 출력 3000자 head+tail 절단 |
222
+ | L2 | LLM 호출 | 오래된 도구 결과 placeholder 교체 |
223
+ | L3 | LLM 호출 | 역순 토큰 예산 trim (4500 토큰) |
224
+ | L4 | LLM 호출 | 예산 초과 시 강제 제거 |
225
+ | L5 | 세션 복원 | 룰 기반 대화 요약 |
226
+ | L6 | 세션 복원 | 토큰 예산 영구 삭제 |
227
+
228
+ ---
229
+
230
+ ## 데이터 파이프라인
231
+
232
+ ```mermaid
233
+ flowchart LR
234
+ subgraph Sources["공공 데이터 소스"]
235
+ A1["AI Hub 71852\n민원 QA 29K"]
236
+ A2["AI Hub 71847\n행정법 QA 37K"]
237
+ A3["AI Hub 71841/43/48\n민사/지재/형사 200K"]
238
+ A4["HF 판례\n법원 판결 85K"]
239
+ end
240
+
241
+ subgraph Civil["Civil Adapter"]
242
+ B1["parsers.py"] --> B2["train 74K"]
243
+ B2 --> B3["HF Hub"]
244
+ end
245
+
246
+ subgraph Legal["Legal Adapter"]
247
+ C1["build_dataset.py"] --> C2["train 270K"]
248
+ C2 --> C3["HF Hub"]
249
+ end
250
+
251
+ subgraph Training["Unsloth QLoRA"]
252
+ D1["EXAONE 4.0-32B\n4-bit NF4"] --> D2["LoRA r16"]
253
+ D2 --> D3["HF Spaces\nA100 80GB"]
254
+ end
255
+
256
+ A1 --> B1
257
+ A2 --> B1
258
+ A3 --> C1
259
+ A4 --> C1
260
+ B3 --> D1
261
+ C3 --> D1
262
+
263
+ style Sources fill:#e0f2fe,stroke:#0284c7
264
+ style Civil fill:#dcfce7,stroke:#16a34a
265
+ style Legal fill:#fce7f3,stroke:#db2777
266
+ style Training fill:#fef9c3,stroke:#ca8a04
267
+ ```
268
+
269
+ | 데이터셋 | 건수 | HuggingFace Hub |
270
+ |---------|------|-----------------|
271
+ | Civil Response | 74K | [umyunsang/govon-civil-response-data](https://huggingface.co/datasets/umyunsang/govon-civil-response-data) |
272
+ | Legal Citation | 270K | [umyunsang/govon-legal-response-data](https://huggingface.co/datasets/umyunsang/govon-legal-response-data) |
273
+
274
+ ---
275
+
276
+ ## 설치
277
+
278
+ ```bash
279
+ # PyPI에서 CLI 클라이언트 설치
280
+ pip install govon
281
+
282
+ # 서버 런타임 전체 설치 (GPU 환경)
283
+ pip install govon[server]
284
+ ```
285
+
286
+ ## 빠른 시작
287
+
288
+ ```bash
289
+ # 1. HF Space 런타임에 직접 요청
290
+ export GOVON_RUNTIME_URL=https://umyunsang-govon-runtime.hf.space
291
+
292
+ # 2. v3 자동 실행 모드
293
+ curl -X POST $GOVON_RUNTIME_URL/v3/agent/run \
294
+ -H "Content-Type: application/json" \
295
+ -d '{"query": "도로 파손 민원 현황 알려줘", "session_id": "demo-1", "max_iterations": 10}'
296
+
297
+ # 3. v4 승인 흐름 (CLI 권장)
298
+ pip install govon
299
+ export GOVON_RUNTIME_URL=https://umyunsang-govon-runtime.hf.space
300
+ govon
301
+ ```
302
+
303
+ 상세한 사용법은 [사용자 가이드](docs/guide/user-guide.md)를 참고하세요.
304
+
305
+ ---
306
+
307
+ ## 검증 지표
308
+
309
+ ### E2E 테스트: 27/27 통과
310
+
311
+ | Phase | 시나리오 | 검증 대상 |
312
+ |-------|---------|---------|
313
+ | 1. Infrastructure | 3 | 헬스체크, 베이스 모델, vLLM 연결 |
314
+ | 2. v2 Pipeline | 6 | 승인 흐름, 거절, 멀티턴, 동시성 |
315
+ | 3. v3 ReAct | 10 | 직접 응답, 도구 실행, SSE 스트리밍 |
316
+ | 4. Cross-version | 2 | v2↔v3 일관성 |
317
+ | 5. Multi-turn | 3 | 컨텍스트 유지, 세션 격리, 3턴 워크플로우 |
318
+ | 6. Context Mgmt | 3 | 도구 클리어링, 5턴 요약 |
319
+
320
+ ### DORA Elite
321
+
322
+ | 지표 | 값 | 수집 방식 |
323
+ |------|---|----------|
324
+ | Deployment Frequency | 30/주 | main 머지 PR 수 |
325
+ | Lead Time | 0.9h | PR 첫 커밋 → 머지 |
326
+ | Change Failure Rate | 28.6% | hotfix/revert 비율 |
327
+ | MTTR | 0.0h | bug 이슈 open → close |
328
+
329
+ - **실시간 대시보드**: [Grafana Cloud](https://umyunsang.grafana.net/d/govon-dora/)
330
+ - **주간 보고서**: [`metrics/reports/`](metrics/reports/)
331
+
332
+ ---
333
+
334
+ ## 문서
335
+
336
+ | 문서 | 설명 |
337
+ |------|------|
338
+ | [사용자 가이드](docs/guide/user-guide.md) | 설치, CLI 사용법, 도구 설명 |
339
+ | [운영 가이드](docs/guide/ops-guide.md) | 배포, 환경변수, 모니터링, 트러블슈팅 |
340
+ | [데모 패키지](docs/demo/README.md) | 시연 시나리오 3종 + curl 재현 |
341
+ | [프로젝트 회고](docs/retrospective.md) | v1→v4 진화, 기술적 도전, KPT |
342
+ | [ADR](docs/adr/README.md) | Architecture Decision Records |
343
+ | [PRD](docs/prd.md) | Product Requirements Document |
344
+ | [WBS](docs/wbs.md) | Work Breakdown Structure |
345
+ | [Docs Portal](https://govon-org.github.io/GovOn/) | GitHub Pages 통합 문서 |
346
+
347
+ ---
348
+
349
+ ## 프로젝트 구조
350
+
351
+ ```
352
+ src/
353
+ ├── cli/ # CLI 인터페이스
354
+ │ ├── shell.py # 인터랙티브 REPL
355
+ │ ├── approval_ui.py # Rich Panel 승인 UI
356
+ │ ├── daemon.py # 백그라운드 데몬
357
+ │ └── renderer.py # 출력 렌더러
358
+ └── inference/ # 추론 엔진
359
+ ├── api_server.py # FastAPI 서버
360
+ ├── session_context.py # SQLite 세션 저장소
361
+ └── graph/ # LangGraph 코어
362
+ ├── builder.py # v4/v3 그래프 빌더
363
+ ├── nodes.py # 노드 팩토리 (5개 노드)
364
+ ├── state.py # GovOnGraphState
365
+ ├── capabilities/ # 도구 Capability 클래스
366
+ └── tools/ # StructuredTool 팩토리
367
+ ```
368
+
369
+ ---
370
+
371
+ ## API 엔드포인트
372
+
373
+ | 메서드 | 엔드포인트 | 용도 |
374
+ |--------|-----------|------|
375
+ | GET | `/health` | 헬스체크 (인증 불필요) |
376
+ | POST | `/v2/agent/stream` | v4 에이전트 스트리밍 (승인 흐름) |
377
+ | POST | `/v2/agent/run` | v4 에이전트 동기 실행 |
378
+ | POST | `/v2/agent/approve` | 도구 실행 승인/거절 |
379
+ | POST | `/v2/agent/cancel` | 실행 취소 |
380
+ | POST | `/v3/agent/stream` | v3 에이전트 SSE 스트리밍 |
381
+ | POST | `/v3/agent/run` | v3 에이전트 동기 실행 |
382
+
383
+ ---
384
+
385
+ ## 리소스
386
+
387
+ | 자원 | 링크 |
388
+ |------|------|
389
+ | HF Space (Runtime) | [umyunsang/govon-runtime](https://huggingface.co/spaces/umyunsang/govon-runtime) |
390
+ | Civil Adapter | [umyunsang/govon-civil-adapter](https://huggingface.co/umyunsang/govon-civil-adapter) |
391
+ | Legal Adapter | [siwo/govon-legal-adapter](https://huggingface.co/siwo/govon-legal-adapter) |
392
+ | Civil Dataset | [umyunsang/govon-civil-response-data](https://huggingface.co/datasets/umyunsang/govon-civil-response-data) |
393
+ | Legal Dataset | [umyunsang/govon-legal-response-data](https://huggingface.co/datasets/umyunsang/govon-legal-response-data) |
394
+ | DORA Dashboard | [Grafana Cloud](https://umyunsang.grafana.net/d/govon-dora/) |
395
+ | Public Roadmap | [#402](https://github.com/GovOn-Org/GovOn/issues/402) |
396
+
397
+ ---
398
+
399
+ ## 개발 규칙
400
+
401
+ - 브랜치 전략: GitHub Flow (`main` 단일 브랜치)
402
+ - 모든 변경은 PR을 통해 진행
403
+ - CI: lint(Black+isort+flake8) + test(pytest 3.10/3.11/3.12) + security + runtime-contract
404
+ - 기여 가이드: [CONTRIBUTING.md](CONTRIBUTING.md)
405
+
406
+ ---
407
+
408
+ ## GitHub 이슈 구조
409
+
410
+ ```
411
+ #402 Public Roadmap (root)
412
+ ├── Workstream (🧭 라벨)
413
+ │ └── Task ([Task X.Y] 접두사)
414
+ └── Workstream
415
+ └── Task
416
+ ```
417
+
418
+ ---
419
+
420
+ ## 라이선스
421
+
422
+ 이 프로젝트는 동아대학교 현장미러형 산학연계 프로젝트의 산출물입니다.