uctm 1.5.3 → 1.5.4
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.
- package/.claude-plugin/plugin.json +1 -1
- package/agents/builder.md +90 -84
- package/agents/committer.md +98 -91
- package/agents/planner.md +68 -111
- package/agents/scheduler.md +85 -104
- package/agents/specifier.md +295 -116
- package/agents/verifier.md +71 -62
- package/package.json +1 -1
- package/references/agent-flow.md +107 -128
- package/references/callback-protocol.md +40 -0
- package/references/context-policy.md +37 -37
- package/references/file-content-schema.md +136 -67
- package/references/ref-cache-protocol.md +31 -31
- package/references/shared-prompt-sections.md +95 -201
- package/references/work-activity-log.md +26 -26
- package/references/xml-schema.md +52 -52
- package/skills/init/SKILL.md +26 -26
- package/skills/uctm-init/SKILL.md +95 -0
- package/skills/work-pipeline/SKILL.md +30 -39
- package/skills/work-status/SKILL.md +17 -17
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# Context Handoff
|
|
1
|
+
# Context Handoff 정책
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
에이전트 간 슬라이딩 윈도우 컨텍스트 전달 규칙.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 슬라이딩 윈도우
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
| 2
|
|
11
|
-
| 3
|
|
7
|
+
| 단계 거리 | 상세 레벨 | 규칙 |
|
|
8
|
+
|-----------|----------|------|
|
|
9
|
+
| 직전 (1단계) | `FULL` | 4개 필드 모두 전달 |
|
|
10
|
+
| 2단계 전 | `SUMMARY` | `what` 필드만, 1-3줄 |
|
|
11
|
+
| 3단계+ | `DROP` | 생략 |
|
|
12
12
|
|
|
13
|
-
## Context-Handoff 4
|
|
13
|
+
## Context-Handoff 4개 필드
|
|
14
14
|
|
|
15
|
-
|
|
|
16
|
-
|
|
17
|
-
| `what` | ✅ | ✅ |
|
|
18
|
-
| `why` | ✅ | ❌ |
|
|
19
|
-
| `caution` | ✅ | ❌ |
|
|
20
|
-
| `incomplete` | ✅ | ❌ |
|
|
15
|
+
| 필드 | FULL | SUMMARY | 내용 |
|
|
16
|
+
|------|:----:|:-------:|------|
|
|
17
|
+
| `what` | ✅ | ✅ | 변경/검증 요약 (2-5줄) |
|
|
18
|
+
| `why` | ✅ | ❌ | 결정 근거 (2-4줄) |
|
|
19
|
+
| `caution` | ✅ | ❌ | 주의사항, 조건부 완료 (1-3줄) |
|
|
20
|
+
| `incomplete` | ✅ | ❌ | 미완료 항목 (1-2줄, 없으면 "None") |
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## 파이프라인 단계별 입출력
|
|
23
23
|
|
|
24
24
|
### Builder
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
입력: TASK 스펙 + 의존 TASK result.md context-handoff (슬라이딩 윈도우)
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
출력:
|
|
29
29
|
```xml
|
|
30
30
|
<task-result status="PASS|FAIL">
|
|
31
31
|
<context-handoff from="builder" detail-level="FULL">
|
|
32
|
-
<what
|
|
32
|
+
<what>변경 내용</what><why>근거</why><caution>주의사항</caution><incomplete>미완료 항목</incomplete>
|
|
33
33
|
</context-handoff>
|
|
34
34
|
</task-result>
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
### Verifier
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
입력: TASK 스펙 + Builder context-handoff (FULL)
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
출력:
|
|
42
42
|
```xml
|
|
43
43
|
<task-result status="PASS|FAIL">
|
|
44
44
|
<context-handoff from="verifier" detail-level="FULL">
|
|
45
|
-
<what
|
|
45
|
+
<what>검증 결과</what><why>판단 근거</why><caution>수동 확인 필요 항목</caution><incomplete>검증할 수 없었던 항목</incomplete>
|
|
46
46
|
</context-handoff>
|
|
47
47
|
</task-result>
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### Committer
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
입력: Verifier context-handoff (FULL) + Builder context-handoff (SUMMARY)
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
1.
|
|
56
|
-
2.
|
|
54
|
+
처리:
|
|
55
|
+
1. builder 성공 여부 확인 (context-handoff 상태 확인)
|
|
56
|
+
2. result.md 작성 + git commit
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
출력: → `{REFERENCES_DIR}/file-content-schema.md` § 4 참조
|
|
59
59
|
|
|
60
|
-
##
|
|
60
|
+
## TASK 간 의존성 전달
|
|
61
61
|
|
|
62
|
-
-
|
|
63
|
-
- 2
|
|
64
|
-
- 3
|
|
62
|
+
- 직전 의존 TASK: context-handoff **FULL** (4개 필드 모두)
|
|
63
|
+
- 2단계 전: **SUMMARY** (what만)
|
|
64
|
+
- 3단계+: **DROP**
|
|
65
65
|
|
|
66
|
-
## Scheduler
|
|
66
|
+
## Scheduler 디스패치
|
|
67
67
|
|
|
68
68
|
```xml
|
|
69
69
|
<!-- Verifier: Builder FULL -->
|
|
@@ -77,7 +77,7 @@ Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
|
|
|
77
77
|
<context-handoff from="builder" detail-level="SUMMARY"><what>...</what></context-handoff>
|
|
78
78
|
</dispatch>
|
|
79
79
|
|
|
80
|
-
<!--
|
|
80
|
+
<!-- 다음 TASK Builder: 의존성 거리 적용 -->
|
|
81
81
|
<dispatch to="builder" task="TASK-YY">
|
|
82
82
|
<previous-results>
|
|
83
83
|
<context-handoff from="prev-task" task="TASK-XX" detail-level="FULL">...</context-handoff>
|
|
@@ -86,8 +86,8 @@ Output: → `{REFERENCES_DIR}/file-content-schema.md` § 4 reference
|
|
|
86
86
|
</dispatch>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
## Committer
|
|
89
|
+
## Committer 재시도
|
|
90
90
|
|
|
91
|
-
1.
|
|
92
|
-
2.
|
|
93
|
-
3.
|
|
91
|
+
1. 실패 원인: 검증 FAIL / 변경 파일 없음
|
|
92
|
+
2. builder에 재디스패치
|
|
93
|
+
3. 최대 2회 재시도 (총 3회 시도). 3회 실패 → TASK FAILED, 파이프라인 중단
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 파일 내용 스키마
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
파이프라인 산출물 파일 형식의 단일 정의 소스.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 준수사항
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
| `
|
|
10
|
-
| `
|
|
11
|
-
| `TASK-
|
|
12
|
-
| `TASK-XX_result.md`
|
|
7
|
+
| 생성 파일 | 참조 섹션 | 위반 시 결과 |
|
|
8
|
+
|-----------|----------|-------------|
|
|
9
|
+
| `Requirement.md` | § 0 | |
|
|
10
|
+
| `PLAN.md` | § 1 | `parsePlanMd()` 파싱 실패, scheduler 작동 불가 |
|
|
11
|
+
| `TASK-XX.md` | § 2 | `parseTaskFilename()` DB 등록 누락 |
|
|
12
|
+
| `TASK-XX_result.md` | § 3 | context-handoff 누락 |
|
|
13
|
+
| `TASK-XX_result.md` (direct) | § 4 | result.md 인식 실패 |
|
|
13
14
|
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
## § 0. Requirement.md
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
경로: `works/{WORK_ID}/Requirement.md`
|
|
19
20
|
|
|
20
21
|
```markdown
|
|
21
22
|
# Requirement — WORK-NN
|
|
22
23
|
|
|
23
24
|
## Original Request
|
|
24
|
-
>
|
|
25
|
+
> 사용자의 정확한 입력
|
|
25
26
|
|
|
26
27
|
## Functional Requirements
|
|
27
28
|
- FR-01: ...
|
|
@@ -31,100 +32,168 @@ Path: `works/{WORK_ID}/Requirement.md`
|
|
|
31
32
|
- NFR-01: ...
|
|
32
33
|
|
|
33
34
|
## Acceptance Criteria
|
|
34
|
-
- [ ]
|
|
35
|
+
- [ ] 검증 가능한 기준
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
생성 주체: Specifier (모든 요청에 필수)
|
|
38
39
|
|
|
39
40
|
---
|
|
40
41
|
|
|
41
42
|
## § 1. PLAN.md
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
경로: `works/{WORK_ID}/PLAN.md`
|
|
45
|
+
|
|
46
|
+
> 요구사항 수준에 따라 ## 설계 이하 간략화 가능
|
|
44
47
|
|
|
45
48
|
```markdown
|
|
46
|
-
# WORK-01: {
|
|
49
|
+
# WORK-01: {제목}
|
|
47
50
|
|
|
48
51
|
> Created: {YYYY-MM-DD}
|
|
49
|
-
> Requirement: {REQ-XXX |
|
|
52
|
+
> Requirement: {REQ-XXX | 사용자 요청 텍스트}
|
|
50
53
|
> Execution-Mode: {direct | pipeline | full}
|
|
51
|
-
> Project: {
|
|
52
|
-
> Tech Stack: {
|
|
54
|
+
> Project: {프로젝트 이름}
|
|
55
|
+
> Tech Stack: {스택}
|
|
53
56
|
> Language: {lang_code}
|
|
54
57
|
> Status: PLANNED
|
|
55
58
|
|
|
56
|
-
##
|
|
57
|
-
{1-2
|
|
59
|
+
## 목표
|
|
60
|
+
{1-2문장}
|
|
61
|
+
|
|
62
|
+
## 설계
|
|
63
|
+
|
|
64
|
+
### 1. 아키텍처 방향
|
|
65
|
+
|
|
66
|
+
- **접근 방식**: 신규 구축 / 기존 수정 / 확장
|
|
67
|
+
- **구조**: (계층형, 이벤트 기반, 마이크로서비스 등)
|
|
68
|
+
- **데이터 흐름**: (입력 → 처리 → 출력 경로 요약)
|
|
69
|
+
|
|
70
|
+
### 2. 데이터 설계
|
|
71
|
+
|
|
72
|
+
| 항목 | 내용 |
|
|
73
|
+
|------|------|
|
|
74
|
+
| 스키마 변경 | 있음 / 없음 |
|
|
75
|
+
| 마이그레이션 필요 | 있음 / 없음 |
|
|
76
|
+
| 변경 내용 | |
|
|
77
|
+
|
|
78
|
+
### 3. 인터페이스 설계
|
|
79
|
+
|
|
80
|
+
| 인터페이스 | 방식 | 엔드포인트/형식 | 관련 FR |
|
|
81
|
+
|-----------|------|---------------|--------|
|
|
82
|
+
| | REST / GraphQL / gRPC / 파일 | | |
|
|
83
|
+
|
|
84
|
+
### 4. NFR 대응 설계
|
|
85
|
+
|
|
86
|
+
| NFR ID | 요구사항 | 대응 방안 |
|
|
87
|
+
|--------|---------|----------|
|
|
88
|
+
| NFR-01 | | |
|
|
89
|
+
| NFR-02 | | |
|
|
90
|
+
|
|
91
|
+
## 작업 목록
|
|
92
|
+
|
|
93
|
+
| Task ID | 제목 | 의존관계 | Phase | 우선순위 | 매핑 FR/NFR | 예상 규모 |
|
|
94
|
+
|---------|------|---------|-------|---------|------------|----------|
|
|
95
|
+
| TASK-01 | | 없음 | 1 | Must | FR-01 | S/M/L |
|
|
96
|
+
| TASK-02 | | TASK-01 | 2 | Must | FR-02, NFR-01 | S/M/L |
|
|
97
|
+
| TASK-03 | | 없음 | 1 | Should | FR-03 | S/M/L |
|
|
98
|
+
| | | | | | | |
|
|
58
99
|
|
|
59
|
-
## Task Dependency Graph
|
|
60
|
-
{ASCII diagram}
|
|
61
100
|
|
|
62
|
-
##
|
|
101
|
+
## Task 의존성 그래프
|
|
102
|
+
{ASCII 다이어그램}
|
|
63
103
|
|
|
64
|
-
|
|
65
|
-
- **Depends on**: (none)
|
|
66
|
-
- **Scope**: {description}
|
|
67
|
-
- **Files**:
|
|
68
|
-
- `path/to/file` — {description}
|
|
104
|
+
## 리스크 및 대응
|
|
69
105
|
|
|
70
|
-
|
|
71
|
-
|
|
106
|
+
| # | 리스크 | 발생 가능성 | 영향도 | 대응 전략 | 비고 |
|
|
107
|
+
|---|--------|-----------|-------|----------|------|
|
|
108
|
+
| R-01 | | 높/중/낮 | 높/중/낮 | 회피 / 완화 / 수용 | |
|
|
109
|
+
| R-02 | | | | | |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 추적성 매트릭스
|
|
114
|
+
|
|
115
|
+
| 원본 요청 | FR/NFR | Task | 인수 기준 | 검증 방법 |
|
|
116
|
+
|----------|--------|------|----------|----------|
|
|
117
|
+
| | FR-01 | TASK-01 | AC-01 | 단위테스트 / 수동확인 / 자동화 |
|
|
118
|
+
| | FR-02 | TASK-02 | AC-02 | |
|
|
119
|
+
| | NFR-01 | TASK-02 | AC-03 | |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 자체 검증 체크리스트
|
|
124
|
+
|
|
125
|
+
- [ ] 모든 FR이 최소 1개 Task에 매핑됨
|
|
126
|
+
- [ ] 모든 NFR이 설계 또는 Task에 반영됨
|
|
127
|
+
- [ ] Task 간 순환 의존 없음
|
|
128
|
+
- [ ] 제약조건 내 실현 가능
|
|
129
|
+
- [ ] 각 Task에 완료 조건이 있음
|
|
130
|
+
- [ ] 리스크가 식별되고 대응 전략이 있음
|
|
131
|
+
- [ ] 실행 순서가 의존관계와 일치함
|
|
132
|
+
|
|
133
|
+
---
|
|
72
134
|
```
|
|
73
135
|
|
|
74
|
-
|
|
136
|
+
제목 형식: `# WORK-NN: title` — `# PLAN WORK-NN:` 금지 (`parsePlanMd()` 오류)
|
|
75
137
|
|
|
76
138
|
---
|
|
77
139
|
|
|
78
140
|
## § 2. TASK-XX.md
|
|
79
141
|
|
|
80
|
-
|
|
142
|
+
경로: `works/{WORK_ID}/TASK-XX.md`
|
|
81
143
|
|
|
82
|
-
> `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK
|
|
144
|
+
> `parseTaskFilename()` regex: `/^TASK-(\d+)\.md$/` — WORK 접두사 금지
|
|
83
145
|
|
|
84
146
|
```markdown
|
|
85
|
-
# TASK-XX: {
|
|
147
|
+
# TASK-XX: {제목}
|
|
86
148
|
|
|
87
149
|
## WORK
|
|
88
|
-
{WORK_ID}: {WORK
|
|
150
|
+
{WORK_ID}: {WORK 제목}
|
|
151
|
+
|
|
152
|
+
## Task 개요
|
|
89
153
|
|
|
90
|
-
|
|
91
|
-
|
|
154
|
+
| 항목 | 내용 |
|
|
155
|
+
|------|------|
|
|
156
|
+
| 목적 | (이 Task가 완료되면 무엇이 달라지는가) |
|
|
157
|
+
| 매핑 요구사항 | FR-{NN}, NFR-{NN} |
|
|
158
|
+
| 우선순위 | Must / Should / Could |
|
|
159
|
+
| 예상 규모 | S / M / L |
|
|
160
|
+
| 의존관계 | 없음 / TASK-{NN} 완료 후 |
|
|
161
|
+
| Phase | Phase {N} |
|
|
92
162
|
|
|
93
163
|
## Scope
|
|
94
|
-
{
|
|
164
|
+
{설명}
|
|
95
165
|
|
|
96
166
|
## Files
|
|
97
167
|
| Path | Action | Description |
|
|
98
168
|
|------|--------|-------------|
|
|
99
|
-
| `src/file.ts` | CREATE |
|
|
169
|
+
| `src/file.ts` | CREATE | 설명 |
|
|
100
170
|
|
|
101
171
|
## Acceptance Criteria
|
|
102
|
-
- [ ] {
|
|
172
|
+
- [ ] {기준}
|
|
103
173
|
|
|
104
174
|
## Verify
|
|
105
175
|
```bash
|
|
106
|
-
{
|
|
107
|
-
```
|
|
176
|
+
{검증 명령}
|
|
108
177
|
```
|
|
109
178
|
|
|
110
179
|
---
|
|
111
180
|
|
|
112
181
|
## § 3. TASK-XX_result.md (full / pipeline)
|
|
113
182
|
|
|
114
|
-
|
|
183
|
+
경로: `works/{WORK_ID}/TASK-XX_result.md`
|
|
115
184
|
|
|
116
185
|
```markdown
|
|
117
186
|
# TASK-XX Result
|
|
118
187
|
|
|
119
|
-
> WORK: {WORK_ID} — {
|
|
188
|
+
> WORK: {WORK_ID} — {제목}
|
|
120
189
|
> Completed: {YYYY-MM-DD HH:MM}
|
|
121
190
|
> Status: **DONE**
|
|
122
191
|
|
|
123
192
|
{## Summary | ## 요약 | ## サマリー}
|
|
124
|
-
{1-2
|
|
193
|
+
{1-2줄}
|
|
125
194
|
|
|
126
195
|
{## Completed Checklist | ## 완료 체크리스트 | ## 完了チェックリスト}
|
|
127
|
-
- [x] {
|
|
196
|
+
- [x] {항목}
|
|
128
197
|
|
|
129
198
|
{## Verification Results | ## 검증 결과 | ## 検証結果}
|
|
130
199
|
- Build: ✅
|
|
@@ -133,7 +202,7 @@ Path: `works/{WORK_ID}/TASK-XX_result.md`
|
|
|
133
202
|
|
|
134
203
|
{## Files Changed | ## 변경 파일 | ## 変更ファイル}
|
|
135
204
|
### Created
|
|
136
|
-
- `path` — {
|
|
205
|
+
- `path` — {설명}
|
|
137
206
|
|
|
138
207
|
{## Issues Encountered | ## 발생 이슈 | ## 発生した問題}
|
|
139
208
|
None
|
|
@@ -144,14 +213,14 @@ None
|
|
|
144
213
|
{## Context Handoff | ## 컨텍스트 핸드오프 | ## コンテキスト引き継ぎ}
|
|
145
214
|
|
|
146
215
|
### Builder Context (SUMMARY)
|
|
147
|
-
{builder what
|
|
216
|
+
{builder what 필드 1-3줄}
|
|
148
217
|
|
|
149
218
|
### Verifier Context (FULL)
|
|
150
|
-
{verifier context-handoff 4
|
|
219
|
+
{verifier context-handoff 4개 필드}
|
|
151
220
|
```
|
|
152
221
|
|
|
153
|
-
|
|
|
154
|
-
|
|
222
|
+
| 섹션 | en | ko | ja |
|
|
223
|
+
|------|----|----|-----|
|
|
155
224
|
| Summary | `## Summary` | `## 요약` | `## サマリー` |
|
|
156
225
|
| Completed Checklist | `## Completed Checklist` | `## 완료 체크리스트` | `## 完了チェックリスト` |
|
|
157
226
|
| Verification Results | `## Verification Results` | `## 검증 결과` | `## 検証結果` |
|
|
@@ -162,37 +231,37 @@ None
|
|
|
162
231
|
|
|
163
232
|
---
|
|
164
233
|
|
|
165
|
-
## § 4. TASK-XX_result.md (direct
|
|
234
|
+
## § 4. TASK-XX_result.md (direct 모드)
|
|
166
235
|
|
|
167
236
|
```markdown
|
|
168
237
|
# TASK-00 Result
|
|
169
238
|
|
|
170
|
-
> WORK: WORK-NN — {
|
|
239
|
+
> WORK: WORK-NN — {제목}
|
|
171
240
|
> Completed: {YYYY-MM-DD HH:MM}
|
|
172
241
|
> Execution-Mode: direct
|
|
173
242
|
> Status: **DONE**
|
|
174
243
|
|
|
175
|
-
##
|
|
176
|
-
{1
|
|
244
|
+
## 요약
|
|
245
|
+
{1줄}
|
|
177
246
|
|
|
178
|
-
##
|
|
179
|
-
- `{path}` — {
|
|
247
|
+
## 변경 파일
|
|
248
|
+
- `{path}` — {설명}
|
|
180
249
|
|
|
181
|
-
##
|
|
250
|
+
## 검증
|
|
182
251
|
- Build: PASS (self-check)
|
|
183
252
|
- Lint: PASS (self-check)
|
|
184
253
|
```
|
|
185
254
|
|
|
186
255
|
---
|
|
187
256
|
|
|
188
|
-
## § 5.
|
|
257
|
+
## § 5. 파일 이름 규칙
|
|
189
258
|
|
|
190
|
-
|
|
|
191
|
-
|
|
192
|
-
|
|
|
193
|
-
| WORK
|
|
194
|
-
| TASK
|
|
195
|
-
| TASK
|
|
196
|
-
|
|
|
259
|
+
| 유형 | 형식 | 생성 주체 |
|
|
260
|
+
|------|------|-----------|
|
|
261
|
+
| 요구사항 | `Requirement.md` | specifier |
|
|
262
|
+
| WORK 계획 | `PLAN.md` | planner / specifier |
|
|
263
|
+
| TASK 계획 | `TASK-NN.md` | planner / specifier |
|
|
264
|
+
| TASK 결과 | `TASK-NN_result.md` | committer |
|
|
265
|
+
| 활동 로그 | `work_WORK-NN.log` | 모든 에이전트 (추가) |
|
|
197
266
|
|
|
198
|
-
`WORK-NN-TASK-NN.md`
|
|
267
|
+
`WORK-NN-TASK-NN.md` 형식 금지 → `parseTaskFilename()`이 인식할 수 없음.
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# ref-cache
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
ref-cache
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
1.
|
|
11
|
-
2.
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
3.
|
|
15
|
-
4.
|
|
16
|
-
|
|
17
|
-
## ref-cache XML
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```xml
|
|
22
|
-
<ref-cache>
|
|
23
|
-
<ref key="file-content-schema"
|
|
24
|
-
<ref key="shared-prompt-sections"
|
|
25
|
-
<!--
|
|
26
|
-
</ref-cache>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
##
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
# ref-cache 프로토콜
|
|
2
|
+
|
|
3
|
+
## 개요
|
|
4
|
+
|
|
5
|
+
ref-cache는 파이프라인 내 서브에이전트 호출 간 중복 파일 읽기를 방지하는 메커니즘입니다.
|
|
6
|
+
레퍼런스 파일이 매번 디스크에서 다시 읽히는 대신 `<ref-cache>` XML 요소를 통해 에이전트 간에 전달됩니다.
|
|
7
|
+
|
|
8
|
+
## 프로토콜 (4단계)
|
|
9
|
+
|
|
10
|
+
1. 수신한 dispatch XML에 `<ref-cache>`가 있는지 **확인**
|
|
11
|
+
2. 각 필수 레퍼런스 파일에 대해:
|
|
12
|
+
- ref-cache에 있으면 → **파일 읽기 건너뛰기**, 캐시된 내용 사용
|
|
13
|
+
- ref-cache에 없으면 → `{REFERENCES_DIR}/{filename}.md`에서 읽고 ref-cache에 추가
|
|
14
|
+
3. 작업 완료 시, 반환하는 task-result XML에 병합된 `<ref-cache>` 포함
|
|
15
|
+
4. **하위 호환성**: dispatch에 `<ref-cache>`가 없으면 모든 레퍼런스 파일을 정상적으로 읽기 (기존 동작)
|
|
16
|
+
|
|
17
|
+
## ref-cache XML 형식
|
|
18
|
+
|
|
19
|
+
전체 스키마는 `xml-schema.md` § 4 참조.
|
|
20
|
+
|
|
21
|
+
```xml
|
|
22
|
+
<ref-cache>
|
|
23
|
+
<ref key="file-content-schema">...내용...</ref>
|
|
24
|
+
<ref key="shared-prompt-sections">...내용...</ref>
|
|
25
|
+
<!-- 로딩된 레퍼런스 파일당 하나의 <ref> -->
|
|
26
|
+
</ref-cache>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 체인 전파
|
|
30
|
+
|
|
31
|
+
파이프라인에서 ref-cache가 에이전트 간에 어떻게 흐르는지는 `agent-flow.md` § ref-cache Chain Propagation 참조.
|