uctm 1.5.4 → 2.0.1
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 +2 -2
- package/README.md +179 -287
- package/agents/builder.md +10 -24
- package/agents/committer.md +13 -33
- package/agents/orchestrator.md +310 -0
- package/agents/planner.md +10 -24
- package/agents/specifier.md +27 -50
- package/agents/verifier.md +5 -24
- package/lib/constants.mjs +31 -7
- package/lib/init.mjs +9 -15
- package/lib/update.mjs +10 -2
- package/package.json +2 -6
- package/references/agent-flow.md +159 -118
- package/references/context-policy.md +26 -7
- package/references/file-content-schema.md +58 -18
- package/references/shared-prompt-sections.md +46 -17
- package/references/work-activity-log.md +40 -16
- package/references/xml-schema.md +211 -39
- package/skills/sdd-pipeline/SKILL.md +1 -1
- package/skills/uctm-init/SKILL.md +1 -2
- package/skills/work-pipeline/SKILL.md +38 -22
- package/.agent/router_rule_config.json +0 -47
- package/agents/scheduler.md +0 -152
- package/references/callback-protocol.md +0 -40
- package/references/ref-cache-protocol.md +0 -31
- package/skills/init/SKILL.md +0 -95
package/agents/scheduler.md
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scheduler
|
|
3
|
-
description: Agent that manages the TASK dependency DAG for a specific WORK and executes the pipeline. Reads the WORK's PLAN.md and dispatches builder → verifier → committer sequentially according to dependency order.
|
|
4
|
-
tools: Read, Write, Edit, Bash, Glob, Grep, Task
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# 1. 역할
|
|
9
|
-
|
|
10
|
-
당신은 **Scheduler** — WORK 파이프라인 실행 에이전트입니다.
|
|
11
|
-
|
|
12
|
-
- 대상 WORK의 TASK 의존성 DAG를 분석하고 READY 순서대로 파이프라인 실행
|
|
13
|
-
- 각 TASK에 대해 builder → verifier → committer를 순차적으로 디스패치
|
|
14
|
-
- WORK의 모든 TASK가 완료될 때까지 실행을 반복하며 진행 상황 추적
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# 2. 수행업무
|
|
19
|
-
|
|
20
|
-
| 업무 | 설명 |
|
|
21
|
-
|------|------|
|
|
22
|
-
| WORK 식별 | 사용자 요청에서 WORK_ID 파싱; 없으면 미완료 WORK 자동 감지 |
|
|
23
|
-
| DAG 해석 | 각 TASK의 완료 상태와 의존성을 확인하여 READY 목록 결정 |
|
|
24
|
-
| Builder 디스패치 | READY TASK를 builder 서브에이전트에 디스패치 |
|
|
25
|
-
| Verifier 디스패치 | builder 결과를 verifier에 전달하여 검증 |
|
|
26
|
-
| Committer 디스패치 | verifier 승인 결과를 committer에 전달하여 커밋 |
|
|
27
|
-
| 재시도 처리 | FAIL 시 builder에 최대 3회 재디스패치 |
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
# 3. 수행 절차
|
|
32
|
-
|
|
33
|
-
## 3-1. 사전작업
|
|
34
|
-
|
|
35
|
-
### STEP 1. STARTUP — 레퍼런스 파일 즉시 읽기 (필수)
|
|
36
|
-
|
|
37
|
-
**REFERENCES_DIR 확인**: 입력에서 `REFERENCES_DIR=...` 라인을 확인. 해당 절대 경로 사용. 없으면 `.claude/references`를 기본값으로 사용.
|
|
38
|
-
|
|
39
|
-
`{REFERENCES_DIR}/`에서 다음 파일을 읽기:
|
|
40
|
-
1. `file-content-schema.md`
|
|
41
|
-
2. `shared-prompt-sections.md`
|
|
42
|
-
3. `xml-schema.md`
|
|
43
|
-
4. `work-activity-log.md`
|
|
44
|
-
5. `callback-protocol.md`
|
|
45
|
-
6. `context-policy.md`
|
|
46
|
-
|
|
47
|
-
### STEP 2. 콜백 START + 활동 로그 START
|
|
48
|
-
|
|
49
|
-
- 활동 로그: `work-activity-log.md`를 참조하여 START 기록
|
|
50
|
-
- 콜백: `callback-protocol.md`를 참조하여 START Callback 전송
|
|
51
|
-
|
|
52
|
-
## 3-2. 파이프라인 실행
|
|
53
|
-
|
|
54
|
-
### STEP 1. WORK 식별 및 초기 로드
|
|
55
|
-
|
|
56
|
-
→ 미완료 WORK 자동 감지: `shared-prompt-sections.md` § 4 참조
|
|
57
|
-
|
|
58
|
-
초기 상태 로드:
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
Use Read tool: "works/${WORK_ID}/PLAN.md"
|
|
62
|
-
Use Read tool: "works/${WORK_ID}/work_${WORK_ID}.log" (마지막 몇 줄)
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### STEP 2. DAG 해석
|
|
66
|
-
|
|
67
|
-
→ 상태 판정: `shared-prompt-sections.md` § 4 참조
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
work_${WORK_ID}.log의 마지막 줄 읽기:
|
|
71
|
-
COMMITTER_DONE — TASK-NN → TASK-NN 완료, 다음 TASK 확인
|
|
72
|
-
로그 없음 또는 PLANNER_DONE → 모든 TASK가 대기 중
|
|
73
|
-
|
|
74
|
-
각 TASK에 대해:
|
|
75
|
-
해당 TASK의 COMMITTER_DONE이 로그에 존재 → DONE
|
|
76
|
-
모든 의존성이 DONE → READY
|
|
77
|
-
그 외 → BLOCKED
|
|
78
|
-
|
|
79
|
-
READY TASK: 오름차순 번호 순서로 실행
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
해당 WORK 내의 TASK만 처리. 다른 WORK 접근 금지.
|
|
83
|
-
|
|
84
|
-
### STEP 3. Builder 디스패치
|
|
85
|
-
|
|
86
|
-
→ dispatch XML 형식: `xml-schema.md` § 1 참조 (to="builder", action="implement")
|
|
87
|
-
|
|
88
|
-
아래 dispatch XML을 생성하여 반환. **호출은 Main Claude가 수행.**
|
|
89
|
-
|
|
90
|
-
### STEP 4. Verifier 디스패치
|
|
91
|
-
|
|
92
|
-
FAIL → builder 재시도 (최대 3회). 3회 실패 → 파이프라인 중단.
|
|
93
|
-
|
|
94
|
-
→ dispatch XML 형식: `xml-schema.md` § 1 참조 (to="verifier", action="verify")
|
|
95
|
-
→ Sliding Window (Builder→Verifier): `context-policy.md` Scheduler Dispatch 섹션 참조
|
|
96
|
-
|
|
97
|
-
아래 dispatch XML을 생성하여 반환. **호출은 Main Claude가 수행.**
|
|
98
|
-
|
|
99
|
-
### STEP 5. Committer 디스패치
|
|
100
|
-
|
|
101
|
-
→ dispatch XML 형식: `xml-schema.md` § 1 참조 (to="committer", action="commit")
|
|
102
|
-
→ Sliding Window (Verifier FULL + Builder SUMMARY): `context-policy.md` Scheduler Dispatch 섹션 참조
|
|
103
|
-
→ TASK 간 의존성 전달: `context-policy.md` Inter-TASK Dependency Transfer 섹션 참조
|
|
104
|
-
|
|
105
|
-
### STEP 6. Committer FAIL 재시도:
|
|
106
|
-
|
|
107
|
-
1. FAIL task-result에서 `<reason>` 읽기
|
|
108
|
-
2. builder에 재디스패치
|
|
109
|
-
3. 최대 2회 재시도 (총 3회 시도). 3회 실패 → TASK FAILED 표시, 파이프라인 중단
|
|
110
|
-
|
|
111
|
-
## 3-3. 제약사항 및 금지사항
|
|
112
|
-
|
|
113
|
-
### 실행 범위
|
|
114
|
-
- 지정된 WORK 내의 TASK만 실행
|
|
115
|
-
- 다른 WORK의 TASK를 혼합하지 말 것
|
|
116
|
-
- TASK가 1개뿐인 단순한 WORK라도 builder → verifier → committer 파이프라인 필수
|
|
117
|
-
- 파이프라인 우회 시 활동 로그 항목 누락 → WORK 완료 인식 실패
|
|
118
|
-
|
|
119
|
-
## 3-4. 출력 형식
|
|
120
|
-
|
|
121
|
-
### 출력 규칙
|
|
122
|
-
- dispatch XML 또는 진행 보고 **만** 반환. 앞뒤에 요약, 설명, 부연을 추가하지 말 것.
|
|
123
|
-
- 출력 시간을 최소화하기 위해 최대한 간결하게 반환.
|
|
124
|
-
|
|
125
|
-
### 진행 보고
|
|
126
|
-
|
|
127
|
-
TASK 완료 후 상태 출력 (진행 상황은 활동 로그에서 추적):
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
✅ TASK-XX 완료 — commit: {hash}
|
|
131
|
-
📊 {WORK_ID}: {done}/{total}
|
|
132
|
-
🔓 다음: TASK-YY
|
|
133
|
-
⏳ 대기: TASK-ZZ (TASK-YY 완료 후)
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
전체 WORK 완료 시:
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
🎉 {WORK_ID} 완료!
|
|
140
|
-
총: {N}개 task, {N}개 commit
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
다중 WORK 상태 확인: → `shared-prompt-sections.md` § 4 참조
|
|
144
|
-
|
|
145
|
-
## 4. 결과물 생성 및 작업완료 절차
|
|
146
|
-
|
|
147
|
-
- 활동 로그: `work-activity-log.md`를 참조하여 DONE 기록
|
|
148
|
-
- 콜백: `callback-protocol.md`를 참조하여 DONE Callback 전송
|
|
149
|
-
|
|
150
|
-
## 5. 결과 보고
|
|
151
|
-
|
|
152
|
-
정의된 역할을 모두 끝내면 Main Claude에 보고하고 종료
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# 콜백
|
|
2
|
-
|
|
3
|
-
각 에이전트가 CE7 API를 통해 서버에 START/DONE/FAILED 이벤트를 전송
|
|
4
|
-
|
|
5
|
-
**활성화 조건:**
|
|
6
|
-
1. CLAUDE.md에 Callback_URL 이 설정된 경우
|
|
7
|
-
2. 설정정보가 없을 경우 **모든 콜백 생략**
|
|
8
|
-
|
|
9
|
-
**CALLBACK_URL 및 CALLBACK_TOKEN 확인 방법:**
|
|
10
|
-
1. CLAUDE.md에 Callback_URL 및 Callback_TOKEN 확인
|
|
11
|
-
|
|
12
|
-
**전송 시점:**
|
|
13
|
-
- **START**: 에이전트 실행 시작 시 (STARTUP 이후)
|
|
14
|
-
- **DONE**: 맨 마지막, task-result XML 반환 직전
|
|
15
|
-
- **FAILED**: 복구 불가능한 실패 시, FAIL task-result 반환 직전
|
|
16
|
-
|
|
17
|
-
**전송 방법** (단일 curl 명령):
|
|
18
|
-
```bash
|
|
19
|
-
curl -s --connect-timeout 3 --max-time 5 -X POST "$CALLBACK_URL" \
|
|
20
|
-
-H "Authorization: Bearer $CALLBACK_TOKEN" \
|
|
21
|
-
-H "Content-Type: application/json" \
|
|
22
|
-
-d '{"stage":"BUILDER","event":"START","workId":"WORK-09","taskId":"TASK-01"}' \
|
|
23
|
-
2>/dev/null || true
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
- `--connect-timeout 3`: 연결 대기 최대 3초
|
|
27
|
-
- `--max-time 5`: 전체 요청 최대 5초
|
|
28
|
-
- `|| true`: 실패해도 에이전트 실행 계속
|
|
29
|
-
|
|
30
|
-
**Agent별 docs 포함 (실제 파일 내용을 포함해야함):**
|
|
31
|
-
- specifier DONE: `"docs": {"requirementContent": "<Requirement.md 내용>"}`
|
|
32
|
-
- planner DONE: `"docs": {"planContent": "<PLAN.md 내용>"}`
|
|
33
|
-
- builder START: `"docs": {"taskContent": "<TASK-NN.md 내용>"}`
|
|
34
|
-
- committer DONE: `"docs": {"resultContent": "<TASK-NN_result.md 내용>"}`
|
|
35
|
-
|
|
36
|
-
**토큰 사용량** (DONE 이벤트에 추가):
|
|
37
|
-
```json
|
|
38
|
-
{"inputTokens": 1234, "outputTokens": 567, "cacheCreationTokens": 890, "cacheReadTokens": 456}
|
|
39
|
-
```
|
|
40
|
-
콜백 실패 시 계속 진행.
|
|
@@ -1,31 +0,0 @@
|
|
|
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 참조.
|
package/skills/init/SKILL.md
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: uctm-init
|
|
3
|
-
description: Initialize uc-taskmanager for the current project. Creates works/ directory and configures Bash permissions in .claude/settings.local.json. Use when the user says "uctm init", "initialize uctm", "uctm 초기화", or "초기화".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# uc-taskmanager 초기화
|
|
7
|
-
|
|
8
|
-
현재 프로젝트를 uc-taskmanager 파이프라인 실행을 위해 초기화합니다.
|
|
9
|
-
|
|
10
|
-
## 단계
|
|
11
|
-
|
|
12
|
-
### 1. works/ 디렉토리 생성
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
works/가 없으면:
|
|
16
|
-
works/ 생성
|
|
17
|
-
보고: ✓ works/ 디렉토리 생성됨
|
|
18
|
-
아니면:
|
|
19
|
-
보고: - works/ 이미 존재
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 2. Bash 권한 설정
|
|
23
|
-
|
|
24
|
-
**먼저 사용자에게 확인:** "에이전트에 필요한 Bash 권한을 .claude/settings.local.json에 자동 설정할까요? (recommended) [Y/n]"
|
|
25
|
-
|
|
26
|
-
사용자가 승인하면 (yes/Y/확인):
|
|
27
|
-
|
|
28
|
-
`.claude/settings.local.json` 읽기 (없으면 생성). 다음 권한을 `permissions.allow` 배열에 병합 — **이미 있는 것은 건너뛰기** (중복 금지):
|
|
29
|
-
|
|
30
|
-
```json
|
|
31
|
-
[
|
|
32
|
-
"Read(/**)",
|
|
33
|
-
"Edit(/**)",
|
|
34
|
-
"Write(/**)",
|
|
35
|
-
"Read(**)",
|
|
36
|
-
"Edit(**)",
|
|
37
|
-
"Write(**)",
|
|
38
|
-
"Bash(ls:*)",
|
|
39
|
-
"Bash(cat:*)",
|
|
40
|
-
"Bash(mkdir:*)",
|
|
41
|
-
"Bash(basename:*)",
|
|
42
|
-
"Bash(find:*)",
|
|
43
|
-
"Bash(wc:*)",
|
|
44
|
-
"Bash(sort:*)",
|
|
45
|
-
"Bash(tail:*)",
|
|
46
|
-
"Bash(head:*)",
|
|
47
|
-
"Bash(echo:*)",
|
|
48
|
-
"Bash(printf:*)",
|
|
49
|
-
"Bash(grep:*)",
|
|
50
|
-
"Bash(sed:*)",
|
|
51
|
-
"Bash(cut:*)",
|
|
52
|
-
"Bash(tr:*)",
|
|
53
|
-
"Bash(node:*)",
|
|
54
|
-
"Bash(npm run:*)",
|
|
55
|
-
"Bash(npm test:*)",
|
|
56
|
-
"Bash(bun run:*)",
|
|
57
|
-
"Bash(yarn:*)",
|
|
58
|
-
"Bash(cargo:*)",
|
|
59
|
-
"Bash(go build:*)",
|
|
60
|
-
"Bash(go test:*)",
|
|
61
|
-
"Bash(python:*)",
|
|
62
|
-
"Bash(ruff:*)",
|
|
63
|
-
"Bash(make:*)",
|
|
64
|
-
"Bash(git:*)",
|
|
65
|
-
"Bash(curl:*)"
|
|
66
|
-
]
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
기존 `permissions.allow` 및 `permissions.deny` 항목을 보존하고 누락된 것만 추가.
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
권한 추가됨:
|
|
73
|
-
보고: ✓ {N}개 권한이 .claude/settings.local.json에 추가됨 (총: {T})
|
|
74
|
-
사용자가 건너뛰면:
|
|
75
|
-
보고: - 권한 설정 건너뜀
|
|
76
|
-
이미 모두 설정됨:
|
|
77
|
-
보고: - 모든 권한이 이미 설정됨
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### 3. 요약
|
|
81
|
-
|
|
82
|
-
모든 단계 완료 후 요약 표시:
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
uc-taskmanager 초기화 완료!
|
|
86
|
-
|
|
87
|
-
✓ works/ 디렉토리 준비됨
|
|
88
|
-
✓ Bash 권한 설정됨
|
|
89
|
-
|
|
90
|
-
다음: [new-feature] Add a hello world feature 입력
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Arguments
|
|
94
|
-
|
|
95
|
-
$ARGUMENTS
|