oh-my-customcode 0.137.0 → 0.138.0

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/dist/cli/index.js CHANGED
@@ -2334,7 +2334,7 @@ var init_package = __esm(() => {
2334
2334
  workspaces: [
2335
2335
  "packages/*"
2336
2336
  ],
2337
- version: "0.137.0",
2337
+ version: "0.138.0",
2338
2338
  description: "Batteries-included agent harness for Claude Code",
2339
2339
  type: "module",
2340
2340
  bin: {
package/dist/index.js CHANGED
@@ -2014,7 +2014,7 @@ var package_default = {
2014
2014
  workspaces: [
2015
2015
  "packages/*"
2016
2016
  ],
2017
- version: "0.137.0",
2017
+ version: "0.138.0",
2018
2018
  description: "Batteries-included agent harness for Claude Code",
2019
2019
  type: "module",
2020
2020
  bin: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "0.137.0",
6
+ "version": "0.138.0",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -0,0 +1,52 @@
1
+ # Pipeline Label Standards
2
+
3
+ Canonical reference for GitHub issue label semantics in the auto-dev pipeline.
4
+ Used by `scope-selection` to include/exclude issues and by `implement` for lifecycle management.
5
+
6
+ ## Label Definitions
7
+
8
+ | Label | Meaning | scope-selection 처리 |
9
+ |-------|---------|----------------------|
10
+ | `verify-ready` | Triage 완료, 즉시 verify 가능 (자동화 후보) | INCLUDE (preferred) |
11
+ | `verify-done` | Triage 완료했으나 deferred 또는 이미 처리됨 (이번 사이클 미포함) | EXCLUDE |
12
+ | `in-progress` | 작업 진행 중 (다른 세션에서 claim됨) | EXCLUDE |
13
+ | `needs-review` | 사람 검토 필요 (자동 파이프라인 진입 불가) | EXCLUDE |
14
+ | `decision-needed` | 결정 필요 (보안, 정책 critical) | EXCLUDE |
15
+ | `automated` | Auto-generated issue (claude-native skill 등) | INCLUDE if other criteria met |
16
+ | `claude-code-release` | CC version compat docs trigger | INCLUDE (preferred) |
17
+ | `documentation` | Docs scope | INCLUDE (preferred for docs-only release) |
18
+ | `enhancement-yaml-only` | YAML/config-only scope change | INCLUDE (eligible for docs-only compression) |
19
+
20
+ ## Selection Rule
21
+
22
+ ```
23
+ EXCLUDE if:
24
+ - blocked_by_decision == true
25
+ - labels ∩ {decision-needed, needs-review, verify-done, manual-action, in-progress} ≠ ∅
26
+
27
+ INCLUDE (preferred tier):
28
+ - labels ∩ {verify-ready, claude-code-release, documentation} ≠ ∅
29
+
30
+ INCLUDE (standard tier):
31
+ - P1/P2/P3 issues not in excluded set
32
+
33
+ Tie-break priority: P1 > P2 > P3 > unclassified
34
+ ```
35
+
36
+ ## Compression Eligibility (G6)
37
+
38
+ An issue is eligible for `docs-only` compression mode if its labels include at least one of:
39
+ `documentation`, `automated`, `claude-code-release`, `enhancement-yaml-only`
40
+
41
+ If ALL scoped issues are compression-eligible AND scope size ≤ 3, the pipeline MAY use
42
+ `compression_mode=docs-only` (skip professor-triage / release-plan / deep-plan / deep-verify skill spawns).
43
+
44
+ ## Lifecycle Labels (set by `implement` step)
45
+
46
+ | Transition | Action |
47
+ |-----------|--------|
48
+ | Work started | Add `in-progress`, assign @me |
49
+ | Work succeeded | Remove `in-progress`, add `verify-ready` |
50
+ | Work failed | Remove `in-progress`, add `needs-review` |
51
+ | Released | Remove `verify-ready`, close with "Fixed in v{version}" |
52
+ | Deferred | Add `verify-done`, label "Deferred from v{version}" |
@@ -1,6 +1,6 @@
1
1
  name: auto-dev
2
2
  description: "Automated development pipeline — from issue triage to release"
3
- version: "2.0.0"
3
+ version: "2.1.0"
4
4
 
5
5
  # Design rule: each pipeline run produces ONE bounded release unit (3-7 issues), not all open issues.
6
6
  # This pipeline is a project-agnostic template. Project-specific overrides belong in
@@ -31,7 +31,20 @@ steps:
31
31
  - Local HEAD: git rev-parse --short HEAD
32
32
  - Behind state: synced or 0
33
33
 
34
- 5. Cross-reference: compare latest tag with any "vX.Y.Z" version references in pipeline memory/context. Flag mismatches for awareness.
34
+ 5. Cross-reference checks (advisory, do NOT halt):
35
+ a. Memory vs git consistency (G7):
36
+ - latest_tag=$(git tag --sort=-v:refname | head -1)
37
+ - Compare with "Last release" or equivalent line in pipeline memory/context
38
+ - If mismatch: stderr warning "[pre-triage] WARNING: memory says vX.Y.Z but git latest tag is vA.B.C — update memory after pipeline completion"
39
+ - Do NOT halt (advisory only — memory updates are session-end responsibility)
40
+
41
+ b. Issue body stale version references (G5):
42
+ - Retrieve open issues: gh issue list --state open --limit 100 --json number,body
43
+ - For each issue body, extract all vX.Y.Z patterns (regex: v\d+\.\d+\.\d+)
44
+ - Retrieve git tag list: git tag --list
45
+ - Flag any issue referencing a version not present in git tags:
46
+ "[pre-triage] WARNING: Issue #N references vX.Y.Z (not in git tags) — body may be stale"
47
+ - Output all warnings as advisory log; do NOT halt
35
48
 
36
49
  Phase 1 — Ensure required labels exist, then scan issues.
37
50
 
@@ -50,44 +63,95 @@ steps:
50
63
  - order: topological sort over dependencies
51
64
 
52
65
  4. Output: dependency-sorted issue table with blocked_by_decision flag.
53
- description: "Ensure labels exist, scan issues, dependency-analyze"
66
+ description: "Sync remote, stale-version check, memory consistency check, scan issues"
54
67
 
55
68
  - name: scope-selection
56
69
  prompt: |
57
70
  Select a single bounded release scope (3-7 issues) for THIS pipeline run.
58
71
 
59
- Selection rules:
72
+ ## Step 0 — Milestone state pre-check (G3)
73
+
74
+ Before creating a milestone for version vX.Y.Z:
75
+ 1. Query all milestones (open and closed):
76
+ existing=$(gh api 'repos/{owner}/{repo}/milestones?state=all&per_page=100' --jq '.[] | select(.title == "vX.Y.Z") | "\(.number)|\(.state)"')
77
+ 2. Evaluate:
78
+ - If existing && state=closed:
79
+ HALT with "[scope-selection] BLOCKED: milestone vX.Y.Z already exists and is closed. Bump version or reopen milestone manually."
80
+ - If existing && state=open:
81
+ Use existing milestone as-is (do not create new)
82
+ - If not existing:
83
+ Create new milestone: gh api repos/{owner}/{repo}/milestones --method POST --field title="vX.Y.Z"
84
+
85
+ ## Step 1 — Label-based filtering (G4)
86
+
87
+ Reference label semantics: .claude/skills/pipeline/labels.md
88
+
89
+ Apply filter rules:
90
+ - EXCLUDE: blocked_by_decision == true OR labels ∩ {decision-needed, needs-review, verify-done, manual-action, in-progress} ≠ ∅
91
+ - INCLUDE (preferred): labels ∩ {verify-ready, claude-code-release, documentation} ≠ ∅
92
+ - INCLUDE (standard): P1/P2/P3 issues not in excluded set
93
+ - Tie-break: P1 > P2 > P3 > unclassified
94
+
95
+ ## Step 2 — Selection rules
96
+
60
97
  1. Determine release tier:
61
98
  - No tags yet → v0.1.0
62
99
  - Otherwise: highest-priority open tier (bug → chore → feature)
63
- 2. Exclude:
64
- - blocked_by_decision == true
65
- - Issues requiring manual/human action
100
+ 2. Apply Step 1 filter (label-based exclusion and preference)
66
101
  3. Sort by dependency: prerequisites before dependents
67
102
  4. Cap at 7 issues; if priority issues < 7, stop at that priority (don't mix tiers)
68
103
  5. Minimum 1 issue; if 0 eligible, halt with "no eligible issues for auto-dev run"
69
104
 
70
- Create release milestone and assign scoped issues.
105
+ Assign scoped issues to milestone.
71
106
  Output markdown release manifest:
72
- | order | # | title | prerequisite | effort |
107
+ | order | # | title | prerequisite | effort | labels |
73
108
 
74
109
  Persist manifest as pipeline state for subsequent steps.
75
- description: "Pick 3-7 issues as v{X.Y.Z} scope, create milestone"
110
+ description: "Milestone state pre-check, label filter, pick 3-7 issues as v{X.Y.Z} scope"
76
111
  depends_on: pre-triage
77
112
 
113
+ - name: compression-mode-eval
114
+ prompt: |
115
+ Evaluate whether this pipeline run qualifies for docs-only compression mode (G6).
116
+
117
+ ## Compression Eligibility Check
118
+
119
+ Reference: .claude/skills/pipeline/labels.md — "Compression Eligibility" section
120
+
121
+ Conditions for compression_mode=docs-only:
122
+ 1. scope size ≤ 3 (number of issues in release manifest)
123
+ 2. ALL scoped issues have labels ∩ {documentation, automated, claude-code-release, enhancement-yaml-only} ≠ ∅
124
+
125
+ ## Decision
126
+
127
+ If BOTH conditions met → set compression_mode=docs-only
128
+ - triage step: skip professor-triage skill; perform direct manifest summary instead
129
+ - plan step: skip release-plan skill; single-response plan instead
130
+ - deep-plan step: skip deep-plan skill; single-response implementation notes instead
131
+ - deep-verify step: skip deep-verify skill; perform self-review checklist instead
132
+ - Log: "[compression-mode] docs-only compression activated (scope={n}, all docs/yaml labels)"
133
+
134
+ Otherwise → set compression_mode=standard
135
+ - All pipeline steps execute normally with full skill spawns
136
+ - Log: "[compression-mode] standard mode (scope={n}, mixed labels or large scope)"
137
+
138
+ Output: compression_mode value as pipeline state for downstream steps.
139
+ description: "Evaluate docs-only compression eligibility; set compression_mode state"
140
+ depends_on: scope-selection
141
+
78
142
  - name: triage
79
143
  skill: professor-triage
80
- description: "Cross-analysis triage with priority assessment (scoped to release manifest)"
81
- depends_on: scope-selection
144
+ description: "Cross-analysis triage with priority assessment (scoped to release manifest) — skipped if compression_mode=docs-only"
145
+ depends_on: compression-mode-eval
82
146
 
83
147
  - name: plan
84
148
  skill: release-plan
85
- description: "Release unit plan from triaged issues"
149
+ description: "Release unit plan from triaged issues — skipped if compression_mode=docs-only"
86
150
  depends_on: triage
87
151
 
88
152
  - name: deep-plan
89
153
  skill: deep-plan
90
- description: "Research-validated implementation plan (research → plan → verify)"
154
+ description: "Research-validated implementation plan (research → plan → verify) — skipped if compression_mode=docs-only"
91
155
  depends_on: plan
92
156
 
93
157
  - name: implement
@@ -165,7 +229,7 @@ steps:
165
229
 
166
230
  - name: deep-verify
167
231
  skill: deep-verify
168
- description: "Multi-angle release quality verification"
232
+ description: "Multi-angle release quality verification — self-review checklist only if compression_mode=docs-only"
169
233
  depends_on: verify-build
170
234
 
171
235
  - name: release
@@ -0,0 +1,195 @@
1
+ # templates/
2
+
3
+ > **oh-my-customcode 배포 디렉토리**
4
+ >
5
+ > `omcustom init` 실행 시 새 프로젝트에 복사되는 파일들의 소스입니다.
6
+
7
+ ---
8
+
9
+ ## 목적 (Purpose)
10
+
11
+ `templates/`는 oh-my-customcode의 **배포 구조(distribution structure)**입니다.
12
+
13
+ 사용자가 새 프로젝트에서 `omcustom init`을 실행하면, 이 디렉토리의 내용이 대상 프로젝트 루트로 복사됩니다. 즉, 이 디렉토리는 oh-my-customcode가 제공하는 에이전트 시스템의 **완성된 스냅샷**입니다.
14
+
15
+ ```
16
+ oh-my-customcode 소스 레포
17
+ └── templates/ ← 배포 소스 (이 디렉토리)
18
+ ├── .claude/
19
+ ├── guides/
20
+ └── CLAUDE.md
21
+
22
+ 사용자 프로젝트 (omcustom init 후)
23
+ └── your-project/
24
+ ├── .claude/ ← templates/.claude/ 에서 복사
25
+ ├── guides/ ← templates/guides/ 에서 복사
26
+ └── CLAUDE.md ← templates/CLAUDE.md 에서 복사
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 메인 README와의 관계
32
+
33
+ | 문서 | 대상 | 설명 |
34
+ |------|------|------|
35
+ | [`/README.md`](../README.md) | oh-my-customcode **자체** | 프로젝트 소개, 철학, 설치 가이드 |
36
+ | `templates/README.md` (이 파일) | **배포 콘텐츠** | 배포되는 파일 구조와 카운트 |
37
+
38
+ 메인 README는 oh-my-customcode라는 도구를 설명합니다. 이 파일은 그 도구가 배포하는 내용물을 설명합니다.
39
+
40
+ ---
41
+
42
+ ## 디렉토리 구조
43
+
44
+ ```
45
+ templates/
46
+ ├── README.md # 이 파일 (배포 콘텐츠 문서)
47
+ ├── CLAUDE.md # 에이전트 시스템 진입점
48
+ ├── manifest.json # 배포 컴포넌트 카운트 및 메타데이터
49
+ ├── .claude/
50
+ │ ├── agents/ # 에이전트 정의 파일 (*.md, 49개)
51
+ │ ├── skills/ # 스킬 모듈 (각 디렉토리에 SKILL.md, 117개)
52
+ │ ├── rules/ # 전역 규칙 (R000–R022, 22개)
53
+ │ ├── hooks/
54
+ │ │ ├── hooks.json # 훅 이벤트 설정 (PreToolUse/PostToolUse 등)
55
+ │ │ └── scripts/ # 훅 셸 스크립트 (34개)
56
+ │ ├── contexts/ # 컨텍스트 설정 파일 (ecomode 등)
57
+ │ └── ontology/ # Ontology-RAG 지식 그래프
58
+ └── guides/ # 레퍼런스 문서 디렉토리 (50개)
59
+ ```
60
+
61
+ ---
62
+
63
+ ## 컴포넌트 (Components)
64
+
65
+ 아래 카운트는 `templates/manifest.json`과 동기화됩니다.
66
+ CI의 `verify-template-sync.sh`가 소스와 templates/ 간 일치를 검증합니다.
67
+
68
+ ### Agents (49)
69
+
70
+ `.claude/agents/*.md` — 에이전트 정의 파일.
71
+
72
+ 각 파일은 단일 전문가 에이전트를 정의합니다. frontmatter에 `name`, `description`, `model`, `tools`가 필수 포함됩니다.
73
+
74
+ | 카테고리 | 수량 |
75
+ |----------|------|
76
+ | SW Engineer / Language | 6 |
77
+ | SW Engineer / Backend | 6 |
78
+ | SW Engineer / Frontend | 5 |
79
+ | SW Engineer / Tooling | 4 |
80
+ | DE Engineer | 6 |
81
+ | SW Engineer / Database | 4 |
82
+ | Security | 1 |
83
+ | SW Architect | 2 |
84
+ | Infra Engineer | 2 |
85
+ | QA Team | 3 |
86
+ | Manager | 6 |
87
+ | System | 4 |
88
+
89
+ ### Skills (117)
90
+
91
+ `.claude/skills/*/SKILL.md` — 재사용 가능한 스킬 모듈.
92
+
93
+ 각 스킬 디렉토리에 `SKILL.md`가 있으며, 필요에 따라 `scripts/` 서브디렉토리를 포함합니다.
94
+
95
+ 스킬 범위(`scope`):
96
+ - `core` — 범용 개발 도구 (init 시 배포됨)
97
+ - `harness` — 에이전트/스킬/룰 유지보수 도구 (init 시 배포됨)
98
+ - `package` — 패키지 특화 도구 (선택 배포)
99
+
100
+ ### Rules (22)
101
+
102
+ `.claude/rules/*.md` — 에이전트 행동 규칙 (R000–R022, R014 없음).
103
+
104
+ 파일명 형식: `{PRIORITY}-{name}.md` (예: `MUST-agent-identification.md`)
105
+
106
+ | 우선순위 | 의미 | 예 |
107
+ |----------|------|-----|
108
+ | `MUST` | 절대 준수 | R007 에이전트 식별, R009 병렬 실행 |
109
+ | `SHOULD` | 강력 권장 | R003 상호작용, R013 Ecomode |
110
+ | `MAY` | 선택 | R005 최적화 |
111
+
112
+ ### Guides (50)
113
+
114
+ `guides/*/` — 레퍼런스 문서 디렉토리.
115
+
116
+ 각 디렉토리는 단일 토픽에 대한 best practices, 튜토리얼, 또는 설계 가이드를 담습니다. 에이전트가 작업 중 참조합니다 (R006 관심사 분리).
117
+
118
+ ### Hooks (34)
119
+
120
+ `.claude/hooks/scripts/*.sh` — 라이프사이클 훅 스크립트.
121
+
122
+ `hooks.json`에 정의된 이벤트(PreToolUse, PostToolUse, Stop 등)에 반응합니다.
123
+
124
+ 주요 훅 스크립트:
125
+
126
+ | 스크립트 | 역할 |
127
+ |----------|------|
128
+ | `secret-filter.sh` | API 키/시크릿 노출 방지 |
129
+ | `stage-blocker.sh` | 스테이지 게이트 강제 |
130
+ | `rule-deletion-guard.sh` | 규칙 파일 삭제 차단 |
131
+ | `stuck-detector.sh` | 에이전트 무한루프 감지 |
132
+ | `context-budget-advisor.sh` | 컨텍스트 예산 경고 |
133
+ | `cost-cap-advisor.sh` | 비용 한도 초과 경고 |
134
+
135
+ ---
136
+
137
+ ## 사용 방법 (Usage)
138
+
139
+ ### omcustom init
140
+
141
+ ```bash
142
+ # 전역 설치
143
+ npm install -g oh-my-customcode
144
+
145
+ # 프로젝트에 oh-my-customcode 초기화
146
+ cd your-project
147
+ omcustom init
148
+ ```
149
+
150
+ `omcustom init`은 이 `templates/` 디렉토리의 내용을 대상 프로젝트에 복사합니다:
151
+ 1. `.claude/` 전체 (agents, skills, rules, hooks, contexts, ontology)
152
+ 2. `guides/` 전체
153
+ 3. `CLAUDE.md` (프로젝트 진입점)
154
+
155
+ ### 선택적 업데이트
156
+
157
+ 이미 초기화된 프로젝트를 최신 버전으로 업데이트할 때:
158
+
159
+ ```bash
160
+ omcustom update
161
+ ```
162
+
163
+ ---
164
+
165
+ ## 동기화 검증
166
+
167
+ 소스(`.claude/`, `guides/`)와 `templates/` 간 동기화는 CI에서 자동 검증됩니다.
168
+
169
+ ```bash
170
+ # 로컬 검증
171
+ bash .github/scripts/verify-template-sync.sh
172
+ ```
173
+
174
+ 검증 항목:
175
+ - 스킬 수 일치 (`.claude/skills/` ↔ `templates/.claude/skills/`)
176
+ - 에이전트 수 일치
177
+ - 룰 수 일치
178
+ - 가이드 수 일치
179
+ - 훅 스크립트 수 일치
180
+ - `manifest.json` 카운트 일치
181
+
182
+ 소스에 새 파일을 추가할 때는 반드시 `templates/`에도 동기화해야 합니다.
183
+ `manifest.json`의 카운트도 함께 업데이트하세요.
184
+
185
+ ---
186
+
187
+ ## 기여 가이드 참조
188
+
189
+ 에이전트, 스킬, 룰 추가/수정 시 3중 동기화가 필요합니다:
190
+
191
+ 1. **원본**: `.claude/agents/`, `.claude/skills/`, `.claude/rules/`, `guides/`
192
+ 2. **templates 복사**: `templates/.claude/agents/`, `templates/.claude/skills/` 등
193
+ 3. **카운트 업데이트**: `templates/manifest.json`, `README.md`, `CLAUDE.md` 등
194
+
195
+ 자세한 내용은 프로젝트 루트의 기여 가이드 및 `guides/` 참조 문서를 확인하세요.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.137.0",
2
+ "version": "0.138.0",
3
3
  "lastUpdated": "2026-05-14T00:00:00.000Z",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",