oh-my-customcode 1.1.29 → 1.1.31

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
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  workspaces: [
242
242
  "packages/*"
243
243
  ],
244
- version: "1.1.29",
244
+ version: "1.1.31",
245
245
  description: "Batteries-included agent harness for Claude Code",
246
246
  type: "module",
247
247
  bin: {
@@ -289,7 +289,7 @@ var init_package = __esm(() => {
289
289
  yaml: "^2.8.2"
290
290
  },
291
291
  devDependencies: {
292
- "@anthropic-ai/sdk": "^0.111.0",
292
+ "@anthropic-ai/sdk": "^0.112.3",
293
293
  "@biomejs/biome": "^2.3.12",
294
294
  "@types/bun": "^1.3.6",
295
295
  "@types/js-yaml": "^4.0.9",
package/dist/index.js CHANGED
@@ -2031,7 +2031,7 @@ var package_default = {
2031
2031
  workspaces: [
2032
2032
  "packages/*"
2033
2033
  ],
2034
- version: "1.1.29",
2034
+ version: "1.1.31",
2035
2035
  description: "Batteries-included agent harness for Claude Code",
2036
2036
  type: "module",
2037
2037
  bin: {
@@ -2079,7 +2079,7 @@ var package_default = {
2079
2079
  yaml: "^2.8.2"
2080
2080
  },
2081
2081
  devDependencies: {
2082
- "@anthropic-ai/sdk": "^0.111.0",
2082
+ "@anthropic-ai/sdk": "^0.112.3",
2083
2083
  "@biomejs/biome": "^2.3.12",
2084
2084
  "@types/bun": "^1.3.6",
2085
2085
  "@types/js-yaml": "^4.0.9",
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "1.1.29",
6
+ "version": "1.1.31",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -51,7 +51,7 @@
51
51
  "yaml": "^2.8.2"
52
52
  },
53
53
  "devDependencies": {
54
- "@anthropic-ai/sdk": "^0.111.0",
54
+ "@anthropic-ai/sdk": "^0.112.3",
55
55
  "@biomejs/biome": "^2.3.12",
56
56
  "@types/bun": "^1.3.6",
57
57
  "@types/js-yaml": "^4.0.9",
@@ -73,7 +73,7 @@ Never accept "pre-existing" without direct base-branch evidence. A false "pre-ex
73
73
 
74
74
  ### Verification-Delegation Non-Termination (검증 위임 판정 종료 보장)
75
75
 
76
- 구조 검증(mgr-sauron R017)·판정·품질 게이트를 서브에이전트에 위임할 때, 위임 프롬프트에 **"최종 PASS/FAIL 판정 없이 turn을 종료하지 말라"**를 명시한다 — 단 이 clause는 **보조 수단**일 뿐 1차 방어선이 아니다. clause를 명시해도 mid-step 종료가 5회 재발했다(v1.1.13/14/17/18/19, 아래 Origin 참조). **1차 방어선은 오케스트레이터의 직접 ground-truth 실측**이다.
76
+ 구조 검증(mgr-sauron R017)·판정·품질 게이트를 서브에이전트에 위임할 때, 위임 프롬프트에 **"최종 PASS/FAIL 판정 없이 turn을 종료하지 말라"**를 명시한다 — 단 이 clause는 **보조 수단**일 뿐 1차 방어선이 아니다. clause를 명시해도 mid-step 종료가 **누적 11회** 재발했다(v1.1.13/14/17/18/19 … v1.1.30, 아래 Origin 참조). **1차 방어선은 오케스트레이터의 직접 ground-truth 실측**이다.
77
77
 
78
78
  mid-step 종료는 예상 가능한 정상 실패 모드로 취급한다 — 발생 시 즉시 ground-truth를 실측해 실제 진행 상태를 확인한다. **증상만으로 결과를 넘겨짚지 않는다**: 같은 "...중" 한 줄 종료라도 실측 결과는 다를 수 있다(예: "merging now" 후 종료 → 실측 시 PR 이미 MERGED, resume 불필요 / "CI 실행 중" 후 종료 → 실측 시 PR OPEN 미머지, resume 필요). 미완이면 SendMessage로 resume하되, 오케스트레이터가 실측한 값(예: "CI 전부 통과, mergeStateStatus=CLEAN")을 resume 메시지에 동봉해 에이전트가 재폴링 후 재종료하는 루프를 끊는다.
79
79
 
@@ -83,7 +83,7 @@ mid-step 종료는 예상 가능한 정상 실패 모드로 취급한다 — 발
83
83
  | mid-step 종료 증상(예: "merging now")으로 결과를 넘겨짚음 | 매번 `gh pr view`/`gh run list` 등으로 실측 후 완료/미완료 판정 |
84
84
  | resume 시 빈 재촉만 전달 | 실측값을 resume 메시지에 동봉해 재폴링 루프 차단 |
85
85
 
86
- Origin: #1443 (Session 126 회고 찐빠 #1) — v1.1.3 R017 검증에서 mgr-sauron이 source-hash 대조 중 판정 없이 종료 → resume 후 PASS. v1.1.4에서 "판정 반드시 출력" 명시로 1회 완료(대조 실증). **5회 재발 확인(#1492, Session 132)**: v1.1.13/14/17(clause 명시에도 재발) → v1.1.18(완료조건 6항목+종료금지 명시에도 "merging now" 한 줄 남기고 종료, 실측 결과 이미 완료) → v1.1.19(위임 프롬프트에 "4회 무시됨"까지 명시했으나 "CI 실행 중" 한 줄 남기고 종료, 실측 결과 미완료). Session 132에서 2회 모두 오케스트레이터 직접 실측으로 복구 — clause 강화가 아니라 실측 습관화가 유일하게 실증된 방어선.
86
+ Origin: #1443 (Session 126 회고 찐빠 #1) — v1.1.3 R017 검증에서 mgr-sauron이 source-hash 대조 중 판정 없이 종료 → resume 후 PASS. v1.1.4에서 "판정 반드시 출력" 명시로 1회 완료(대조 실증). **5회 재발 확인(#1492, Session 132)**: v1.1.13/14/17(clause 명시에도 재발) → v1.1.18(완료조건 6항목+종료금지 명시에도 "merging now" 한 줄 남기고 종료, 실측 결과 이미 완료) → v1.1.19(위임 프롬프트에 "4회 무시됨"까지 명시했으나 "CI 실행 중" 한 줄 남기고 종료, 실측 결과 미완료). Session 132에서 2회 모두 오케스트레이터 직접 실측으로 복구 — clause 강화가 아니라 실측 습관화가 유일하게 실증된 방어선. **누적 11회 확인(#1518 찐빠 #2, Session 136)**: v1.1.30 릴리즈 세션에서도 "완료 조건 5항목 실측 + 판정 없이 종료 금지" 명시에도 mgr-gitnerd가 "폴링 완료 통지를 기다리겠습니다" 한 줄만 남기고 종료 → 오케스트레이터 직접 실측으로 복구(lockfile push 완료 / CI pending / PR OPEN); 이번엔 "대기 중" 증상이 실제 미완료였고 Session 132의 "머지 중" 증상은 실제 완료였다는 대비로 증상→결과 추론 금지가 재확인됨.
87
87
 
88
88
  Cross-reference: R018 (Member Completion Verification), `feedback_release_delegation_phasing`, `feedback_orchestrator_direct_verify` (release delegation phasing을 verification 위임에도 확장).
89
89
 
@@ -280,6 +280,18 @@ Cross-reference: the Subagent Scope-Creep STOP Protocol (reactive halt after tri
280
280
  > **v2.1.178+**: Auto mode now evaluates subagent spawns with the safety classifier BEFORE launch, closing a gap where a spawned subagent could request a blocked action without prior review. This is the PLATFORM-level complement to the (advisory) Pre-Delegation Privileged-Scope Boundary above: the orchestrator still states the approved/forbidden scope in the delegation prompt (proactive, model-level), and CC now also gates the spawn itself (platform-level). The two are defense-in-depth — the prompt-stated boundary remains required because the classifier gates ACTIONS, not task SCOPE.
281
281
  -->
282
282
 
283
+ ### Parallel Delegation — Sibling-Agent Disclosure
284
+
285
+ 2개 이상의 서브에이전트를 같은 메시지에서 병렬 스폰할 때, 각 위임 프롬프트는 **형제 에이전트의 존재와 각자의 담당 범위**를 고지해야 한다. 서브에이전트는 격리된 컨텍스트에서 실행되어 형제를 인지할 수 없으므로, 고지가 없으면 `git status` 같은 **저장소 전역 공유 뷰**의 출력을 자기 변경분으로 오독하거나 경합 원인을 "외부 세션/프로세스"로 오귀속한다.
286
+
287
+ 고지에 포함할 것: 동시 실행 에이전트 수, 각 에이전트의 담당 파일/영역, 그리고 "공유 뷰에 타 에이전트 변경분이 함께 보이므로 **자기 담당 범위만 기준으로 보고**하라"는 지시.
288
+
289
+ | Anti-pattern | Required |
290
+ |--------------|----------|
291
+ | 병렬 스폰 프롬프트에 형제 에이전트 고지 없이 위임 → 공유 뷰 출력을 오독하거나 원인을 "외부 프로세스"로 오귀속 | 각 프롬프트에 동시 실행 에이전트 수 + 각자 담당 범위 + "자기 담당 범위만 기준으로 보고" 지시 명시 |
292
+
293
+ > Origin: #1518 (찐빠 #3 — 미고지 git 에이전트가 형제를 "외부 프로세스"로 오귀속; 같은 세션에서 고지한 4개 구현 에이전트는 전원 정확히 구분 보고 — 대조 실증). Cross-ref: R009 (병렬 실행 조건).
294
+
283
295
  ## Universal bypassPermissions
284
296
 
285
297
  > **This section is the canonical single source for the bypassPermissions requirement.** R002 (MUST-permissions.md) and R006 (MUST-agent-design.md) reference this section rather than repeating it.
@@ -15,6 +15,16 @@ Independent (MUST parallelize):
15
15
 
16
16
  Examples: creating multiple agents, reviewing multiple files, batch operations on different resources.
17
17
 
18
+ ### File-Disjoint ≠ Independent (Local Git State)
19
+
20
+ 로컬 git 상태를 변경하는 작업(`checkout` / `pull` / `branch` 생성·삭제·rename / `commit` / `stash` / `merge` / `rebase`)은 편집 대상 파일이 disjoint하더라도 **워킹트리·브랜치 포인터·인덱스·HEAD**라는 프로세스 수준 단일 공유 가변 상태를 경합하므로 **직렬화**한다. 실무 규칙: **동시 실행하는 git 상태변경 에이전트는 1개**. git 단계를 먼저 직렬로 끝낸 뒤 나머지를 병렬화한다. read-only 조회(`git status`/`log`/`diff`, `gh` 조회)는 병렬 가능 — 제한 대상은 상태 변경뿐이다.
21
+
22
+ | Anti-pattern | Required |
23
+ |--------------|----------|
24
+ | 편집 파일이 disjoint하다는 이유로 git 상태변경 에이전트 2개 이상을 병렬 스폰 | git 상태변경은 동시 1개로 직렬화; 완료 후 나머지 작업 병렬화 |
25
+
26
+ Origin: #1518 (찐빠 #1 — git 에이전트 2개 근접 실행으로 작업 브랜치 stale; 편집 파일은 disjoint였음).
27
+
18
28
  ## Agent Teams Gate (R018)
19
29
 
20
30
  > Before spawning 2+ parallel agents, evaluate Agent Teams eligibility.
@@ -32,8 +42,8 @@ Before writing/editing multiple files:
32
42
  3. Specialized agent available? → Use it (not general-purpose)
33
43
  4. Agent Teams available? → **Check R018 criteria before spawning 2+ agents; for a 3+ agent batch, announce the gate result (Agent Tool fallback reason or Agent Teams choice) — see R018 Self-Check "Gate Transparency"**
34
44
  5. Running agent stalled (2x+ duration)? → Spawn independent follow-up tasks immediately
35
- 6. Announced a parallel dispatch in prose? → ALL announced tool calls MUST be in the SAME message as the announcement (announce-execution consistency)
36
- - **Verify-Bash + action-delegate asymmetry**: when the batch is a verification Bash PLUS an action delegate (Agent/Workflow), the action delegate is the call most often dropped — the Bash fires and the delegate silently slips to the next turn. Dispatch BOTH in the SAME message. Recurred v1.1.22 (resume turn) and v1.1.23 (verify-build turn) — ≥2 occurrences, R016 rule-update mandate.
45
+ 6. Announced a parallel dispatch in prose? → **발화 직전 카운트 대조**: announce 산문이 명시한 도구 개수 N == 이 메시지에 실제 포함된 tool_use 블록 개수. 불일치면 보완한 뒤 발화 (announce-execution consistency)
46
+ - 누락 방향은 무작위다 — verify Bash가 빠지기도(v1.1.22/23), action delegate가 빠지기도(v1.1.27 세션) 했다. 방향별 서술 강화는 3회 재발로 실패가 실증됐으므로, 유일한 실효 방어선은 N↔N 카운트 대조다. Origin: #1512, #1503.
37
47
 
38
48
  ### Common Violations to Avoid
39
49
 
@@ -45,11 +55,8 @@ Before writing/editing multiple files:
45
55
  → Latency timeout, user cancellation, context waste, no review loop
46
56
  ✓ CORRECT: Pre-decompose by domain, spawn parallel agents per area (R009) or use Agent Teams (R018)
47
57
 
48
- ❌ WRONG: Announce "milestone 생성 + 구조 확인 병렬" but only dispatch one tool; the other runs next turn (announce-execution mismatch)
49
- ✓ CORRECT: When announcing N parallel tools, include ALL N tool calls in the SAME message as the announcement
50
-
51
- ❌ WRONG: Announce "verify build (Bash) + delegate fix (Agent) 병렬" but dispatch only the Bash; the Agent delegate slips to next turn (verify-bash + action-delegate asymmetry — the expensive action call is the one dropped)
52
- ✓ CORRECT: Dispatch BOTH the verification Bash AND the action delegate (Agent/Workflow) in the SAME message as the announcement
58
+ ❌ WRONG: Announce N개 병렬 도구(예: verify Bash + action delegate)를 예고했으나 메시지에 tool_use가 N-1개만 포함 — 누락 방향은 무작위(Bash가 빠지기도, delegate가 빠지기도)
59
+ ✓ CORRECT: 발화 직전 announce의 N과 tool_use 블록 개수를 대조해 일치시킨 뒤 같은 메시지로 발화
53
60
  ```
54
61
 
55
62
  > **Token threshold heuristic**: When a delegated agent prompt exceeds ~5000 tokens or spans 3+ unrelated domains, decompose by domain and spawn parallel agents. See R018 for Agent Teams criteria when review cycles are needed. Reference: #1085.
@@ -77,6 +77,17 @@ Wiki verification is also enforced by CI (`.github/workflows/wiki-sync.yml`).
77
77
  ```
78
78
  -->
79
79
 
80
+ ### Release Commit Staging Hygiene (빌드 산출물 오염 방지)
81
+
82
+ 릴리즈 커밋(및 `bun run build`를 수행한 모든 커밋) 직전, `git diff --cached --name-only`로 **스테이징 목록을 실측**하여 `dist/` 등 빌드 산출물이 포함되지 않았는지 확인한다. gitignored 경로라도 `git add -f` 또는 광범위 `git add` 조합으로 스테이징될 수 있으므로, .gitignore 존재가 방어를 보장하지 않는다. 발견 시 `git reset dist/`로 제외한 뒤 커밋한다. 이는 v1.1.12의 `dist/` untrack 조치에 대한 **회귀 방지 게이트**다.
83
+
84
+ | Anti-pattern | Required |
85
+ |--------------|----------|
86
+ | 빌드 후 광범위 `git add`로 커밋 → gitignored `dist/` force-add 위험 | 커밋 직전 `git diff --cached --name-only` 실측으로 빌드 산출물 부재 확인 |
87
+ | .gitignore에 있으니 안전하다고 가정 | force-add 경로는 .gitignore를 우회하므로 실측 필요 |
88
+
89
+ Origin: #1512 (v1.1.28 커밋 staging에 dist/ 2파일 포함, 커밋 전 실측으로 정정; v1.1.12 dist/ untrack 회귀 방지). Cross-ref: R020 (완료 검증 — "실행됨 ≠ 성공").
90
+
80
91
  ## When Required
81
92
 
82
93
  Any change to: agents, agent frontmatter, skills, guides, routing patterns, rules, wiki pages.
@@ -144,6 +144,7 @@ Before invoking a Workflow script, deterministically verify:
144
144
  | Template-literal / string concatenation produces the intended prompt (assemble-before-call, see above) | Post-call concatenation (`agent(prompt) + FACTS`) silently drops content |
145
145
  | Script parses — balanced braces/quotes, valid JS | A syntax error aborts the entire run after partial work |
146
146
  | 프롬프트 문자열 내 셸 변수 `${...}`(`$?`, `${PIPESTATUS[0]}`, `$(...)` 등)가 `\${...}`로 이스케이프되어 있는지 사전 grep 확인 | JS 템플릿 리터럴 안의 이스케이프 안 된 셸 `${...}`를 JS가 JS 표현식으로 평가 → 런타임 `ReferenceError`(예: `PIPESTATUS is not defined`). `node --check`는 문법만 검사하여 이 런타임 오류를 못 잡으므로 별도 결정론 grep 검사가 필요함 |
147
+ | Workflow `args`를 사용하는 스크립트가 `typeof args === 'string' ? JSON.parse(args) : args` 방어를 거친 뒤 필드에 접근하는지 확인 | 하니스가 객체 args를 문자열로 인코딩해 전달하면 `args.<field>`가 undefined가 되어 스크립트가 즉시 런타임 실패(0 agents 실행). `node --check`는 문법만 검사하므로 위 셸 `${...}` 이스케이프 항목과 동일한 런타임 계열을 잡지 못함 |
147
148
 
148
149
  #### Common Violation (#1271)
149
150
  Session 106 follow-up to #1266 ③: a Workflow authoring error recurred — the guardrail fact-sheet was concatenated onto the agent's RETURN VALUE instead of the prompt string, and a placeholder/assembly slip went uncaught because no pre-run sanity check existed. This check is the deterministic Tier-1 guard that catches such slips before the expensive run.
@@ -153,6 +154,9 @@ Origin: #1271 (Workflow authoring error recurrence, session 106).
153
154
  #### Common Violation (#1438)
154
155
  Origin: #1438 (Session 125 회고 찐빠 #2) — fix Workflow의 verify 프롬프트에 `${PIPESTATUS[0]}`를 이스케이프 없이 사용 → `PIPESTATUS is not defined` ReferenceError로 verify 단계 실패. `node --check`는 통과했으나 런타임에서 실패.
155
156
 
157
+ #### Common Violation (#1512)
158
+ Origin: #1512 (v1.1.27 세션 회고 찐빠 #2) — Workflow `args`를 JSON 객체로 전달했으나 하니스가 문자열로 인코딩해 `args.paths`가 undefined → 0 agents 실행으로 즉시 런타임 실패. `typeof args === 'string' ? JSON.parse(args) : args` 방어 추가 후 재실행 성공.
159
+
156
160
  ### Verifier Ground-Truth for Cross-Cutting Facts
157
161
 
158
162
  Cross-cutting facts not verifiable from the primary source (external URLs, in-cluster DNS/hostnames, infra topology) MUST be supplied to the verifier as explicit ground-truth. Otherwise an adversarial verifier cannot distinguish a hallucinated value from a correct one — a verification blind spot.
@@ -28,6 +28,24 @@ When agents, skills, rules, or guides are created or modified, corresponding wik
28
28
  | `/omcustom:wiki lint` | After major structural changes |
29
29
  | Automatic (CI) | `.github/workflows/wiki-sync.yml` checks on PR |
30
30
 
31
+ ### Resync Completeness — 페이지 갱신 + 매니페스트 재시딩
32
+
33
+ wiki 재동기화는 **두 단계 모두 완료해야 끝난다**: (a) 페이지 본문/`updated` 필드 갱신, (b) 매니페스트 재시딩. drift 판정은 페이지의 `updated` 필드가 아니라 **매니페스트의 SHA-256 대조**로 이루어지므로, 페이지만 갱신하면 drift가 잔존한다. 반대로 매니페스트만 재생성하면 drift 0으로 보이나 페이지 내용은 stale한 **false-green**이 된다 — 양방향 모두 불완전하다.
34
+
35
+ ```bash
36
+ bash .github/scripts/lib/source-hash.sh generate wiki/.source-hashes.json
37
+ ```
38
+
39
+ 재시딩 대상은 **항상 `wiki/.source-hashes.json`**이며 `templates/manifest.json`이 아니다(#1423 혼동 사례와 동일 경계).
40
+
41
+ | Anti-pattern | Required |
42
+ |--------------|----------|
43
+ | 페이지만 갱신하고 매니페스트 재시딩 누락 → drift 잔존 | 페이지 갱신 + 매니페스트 재시딩 두 단계 모두 수행 |
44
+ | 매니페스트만 재생성 → false-green (drift 0이나 페이지 stale) | 페이지를 실제로 갱신한 뒤 재시딩 |
45
+
46
+ Origin: #1512 (v1.1.27 세션 — 71페이지 갱신 후 drift 71→68 잔존, 매니페스트 재시딩으로 drift 0 달성).
47
+ Cross-reference: R017 (동기화 검증 — Phase 3 wiki sync), R020 (완료 검증 — actual outcome ≠ attempt).
48
+
31
49
  ## Delegation — All wiki writes via wiki-curator agent (R010). See workflow via Read tool.
32
50
 
33
51
  <!-- DETAIL: Delegation
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.29",
2
+ "version": "1.1.31",
3
3
  "lastUpdated": "2026-07-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)",