oh-my-customcode 0.162.1 → 0.164.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/index.js CHANGED
@@ -2031,7 +2031,7 @@ var package_default = {
2031
2031
  workspaces: [
2032
2032
  "packages/*"
2033
2033
  ],
2034
- version: "0.162.1",
2034
+ version: "0.164.0",
2035
2035
  description: "Batteries-included agent harness for Claude Code",
2036
2036
  type: "module",
2037
2037
  bin: {
@@ -2074,12 +2074,12 @@ var package_default = {
2074
2074
  dependencies: {
2075
2075
  "@clack/prompts": "^1.1.0",
2076
2076
  "@inquirer/prompts": "^8.3.2",
2077
- commander: "^14.0.2",
2077
+ commander: "^15.0.0",
2078
2078
  i18next: "^26.0.2",
2079
2079
  yaml: "^2.8.2"
2080
2080
  },
2081
2081
  devDependencies: {
2082
- "@anthropic-ai/sdk": "^0.98.0",
2082
+ "@anthropic-ai/sdk": "^0.100.1",
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": "0.162.1",
6
+ "version": "0.164.0",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -46,12 +46,12 @@
46
46
  "dependencies": {
47
47
  "@clack/prompts": "^1.1.0",
48
48
  "@inquirer/prompts": "^8.3.2",
49
- "commander": "^14.0.2",
49
+ "commander": "^15.0.0",
50
50
  "i18next": "^26.0.2",
51
51
  "yaml": "^2.8.2"
52
52
  },
53
53
  "devDependencies": {
54
- "@anthropic-ai/sdk": "^0.98.0",
54
+ "@anthropic-ai/sdk": "^0.100.1",
55
55
  "@biomejs/biome": "^2.3.12",
56
56
  "@types/bun": "^1.3.6",
57
57
  "@types/js-yaml": "^4.0.9",
@@ -267,6 +267,75 @@ User Model data feeds into intent-detection (R015) and routing skill confidence
267
267
 
268
268
  -->
269
269
 
270
+ ## Attention-Weight Memory Tiering
271
+
272
+ > Origin: #1279 (Dual-Brain scout:internalize 부분 내재화 — attention-weight tiering만)
273
+
274
+ 메모리 항목은 신뢰도(confidence)와 접근성(attention weight)의 **두 축**으로 관리한다. 이 두 축은 직교한다.
275
+
276
+ | 축 | 태그 예시 | 의미 | 관리 주체 |
277
+ |----|-----------|------|-----------|
278
+ | 신뢰도 | `[confidence: high/medium/low]` | 검증 수준 — 얼마나 믿을 수 있는가 | Confidence Lifecycle (위 DETAIL) |
279
+ | Attention Weight | `[tier: hot/warm/cold/archived]` | 접근성 — 얼마나 자주/최근 참조했는가 | Tiering (이 섹션) |
280
+
281
+ ### 4-Tier 정의
282
+
283
+ | Tier | 의미 | 기준 (attention weight) | 위치/처리 |
284
+ |------|------|------------------------|----------|
285
+ | **Hot** | 현재 세션 활성 컨텍스트 | 최근 접근 + 고빈도 (이번 세션 내 2회 이상 참조) | `MEMORY.md` 상단 200줄 내 최우선 배치 |
286
+ | **Warm** | 최근 관련 패턴 | 중간 빈도/최근성 (최근 3세션 내 1회 이상 참조) | `MEMORY.md` 본문 (Hot 이후 배치) |
287
+ | **Cold** | 드물게 참조 | 저빈도 (3세션 이상 미참조, 아직 가치 있음) | archive 파일 (`sessions_archive_*.md`) — MEMORY.md 인덱스만 유지 |
288
+ | **Archived** | 비활성 | 장기 미접근 (Temporal Decay 90일+ 기준 충족) | 별도 archive, 인덱스 참조만 |
289
+
290
+ ### Attention Weight 산정 신호
291
+
292
+ | 신호 | 가중치 |
293
+ |------|--------|
294
+ | 이번 세션 내 직접 참조 횟수 | 높음 |
295
+ | 최근성 (마지막 접근 세션과의 거리) | 중간 |
296
+ | 세션 간 재확인 횟수 (confidence re-verification 횟수와 동일) | 중간 |
297
+ | 사용자 명시 중요도 (`[permanent]` 태그) | 높음 — 강등 면제 |
298
+
299
+ ### Tier 승강 규칙
300
+
301
+ ```
302
+ 접근 시 승격: Cold → Warm → Hot (해당 세션에서 참조 발생 시)
303
+ 미접근 시 강등:
304
+ Hot → Warm (1세션 미접근)
305
+ Warm → Cold (3세션 미접근)
306
+ Cold → Archived (Temporal Decay 90일+ 기준 충족 시 — 두 조건 모두 충족 시 강등)
307
+ ```
308
+
309
+ 강등은 세션 종료 시 sys-memory-keeper가 수행한다. 승격은 참조 발생 시 즉시 적용한다.
310
+
311
+ ### 200줄 MEMORY.md 예산과의 연계
312
+
313
+ | Tier | MEMORY.md 상주 여부 | 처리 |
314
+ |------|---------------------|------|
315
+ | Hot | 상주 (상단 배치 우선) | 직접 본문 |
316
+ | Warm | 상주 (Hot 이후 배치) | 직접 본문 |
317
+ | Cold | 미상주 | archive 파일에 이동, MEMORY.md에 `[archive: sessions_archive_*.md]` 인덱스만 유지 |
318
+ | Archived | 미상주 | 별도 archive, 인덱스 참조만 |
319
+
320
+ 예산 초과 시 처리 우선순위: Cold 항목 → archive 이동, Warm 하위 항목 → Cold 강등, Hot은 마지막에 처리.
321
+
322
+ ### Temporal Decay와의 상호작용
323
+
324
+ Temporal Decay(시간 경과 기반)와 Attention-Weight Tiering(접근 빈도 기반)은 **독립적으로 동작하되 함께 적용**한다.
325
+
326
+ | 상황 | 결과 |
327
+ |------|------|
328
+ | 고빈도 접근 + 오래된 timestamp | Tier=Hot이지만 confidence 강등 가능 — re-verify 필요 |
329
+ | 저빈도 접근 + 최신 timestamp | Tier=Cold지만 confidence는 high 유지 가능 |
330
+ | 저빈도 접근 + 오래된 timestamp (90일+) | Tier=Archived + `[REVIEW NEEDED]` — 두 메커니즘 모두 강등 신호 |
331
+ | `[permanent]` 태그 | Temporal Decay 면제, Tiering 강등도 면제 |
332
+
333
+ ### sys-memory-keeper 책임
334
+
335
+ - 세션 시작: MEMORY.md 스캔 → Cold 항목 archive 이동 여부 평가
336
+ - 세션 종료: 이번 세션 참조 여부 기반 tier 재평가 → archive 이동 실행
337
+ - archive 이동 시: `sessions_archive_*.md`에 append, MEMORY.md에 인덱스 라인 유지
338
+
270
339
  ## Mid-Session Immediate Save
271
340
 
272
341
  Save memory IMMEDIATELY upon surprising discovery — do not defer to session end.
@@ -112,46 +112,73 @@ steps:
112
112
 
113
113
  - name: compression-mode-eval
114
114
  prompt: |
115
- Evaluate whether this pipeline run qualifies for docs-only compression mode (G6).
115
+ Evaluate the pipeline compression mode (G6). Three tiers exist:
116
+ docs-only (heaviest compression) → lite (intermediate) → standard (no compression).
116
117
 
117
- ## Compression Eligibility Check
118
+ ## Reference
118
119
 
119
- Reference: .claude/skills/pipeline/labels.md — "Compression Eligibility" section
120
+ .claude/skills/pipeline/labels.md — "Compression Eligibility" section
120
121
 
121
- Conditions for compression_mode=docs-only:
122
+ ## Tier 1 — docs-only
123
+
124
+ Conditions (BOTH must hold):
122
125
  1. scope size ≤ 3 (number of issues in release manifest)
123
126
  2. ALL scoped issues have labels ∩ {documentation, automated, claude-code-release, enhancement-yaml-only} ≠ ∅
124
127
 
125
- ## Decision
126
-
127
- If BOTH conditions met → set compression_mode=docs-only
128
+ If met → set compression_mode=docs-only
128
129
  - triage step: skip professor-triage skill; perform direct manifest summary instead
129
130
  - plan step: skip release-plan skill; single-response plan instead
130
131
  - deep-plan step: skip deep-plan skill; single-response implementation notes instead
131
132
  - deep-verify step: skip deep-verify skill; perform self-review checklist instead
132
133
  - Log: "[compression-mode] docs-only compression activated (scope={n}, all docs/yaml labels)"
133
134
 
134
- Otherwise set compression_mode=standard
135
+ ## Tier 2 — lite (intermediate)
136
+
137
+ Evaluate ONLY if docs-only NOT met. Conditions (ALL must hold):
138
+ 1. scope size ≤ 7
139
+ 2. ALL scoped issues are low-risk: for EVERY issue,
140
+ labels ∩ {documentation, automated, claude-code-release, feedback, professor, enhancement} ≠ ∅
141
+ 3. NO scoped issue carries a breaking-change or decision-needed label
142
+ 4. No code logic change is expected — work is docs/rule/skill/config/script-centric
143
+ (verify against each issue body; if any issue implies application code logic change, FAIL the lite check)
144
+
145
+ If met → set compression_mode=lite
146
+ - triage step: MAY replace professor-triage skill spawn with orchestrator integrated analysis
147
+ - plan step: MAY replace release-plan skill spawn with orchestrator integrated analysis
148
+ - deep-plan step: MAY replace deep-plan skill spawn with orchestrator integrated analysis
149
+ - deep-verify step: perform via mgr-sauron R017 structural verification + core self-check
150
+ (instead of full deep-verify skill spawn)
151
+ - implement / verify-build / release / ci-check / post-release-followup: execute normally (no compression)
152
+ - MANDATORY justification log (REQUIRED whenever a skill stage is replaced by integrated analysis):
153
+ "[compression-mode] lite — skill 단계 통합 분석 대체. 정당화: scope={n}, 모든 이슈 저위험(라벨 {labels}), 구현 대상 이슈 본문 명시 {issue_refs}"
154
+ - If the justification cannot be stated concretely (e.g., a stage cannot be safely integrated),
155
+ do NOT compress that stage — fall back to full skill spawn for it.
156
+
157
+ ## Tier 3 — standard (fallback)
158
+
159
+ If neither docs-only nor lite met → set compression_mode=standard
135
160
  - All pipeline steps execute normally with full skill spawns
136
- - Log: "[compression-mode] standard mode (scope={n}, mixed labels or large scope)"
161
+ - Log: "[compression-mode] standard mode (scope={n}, mixed/high-risk labels, large scope, or code logic change)"
162
+
163
+ ## Output
137
164
 
138
- Output: compression_mode value as pipeline state for downstream steps.
139
- description: "Evaluate docs-only compression eligibility; set compression_mode state"
165
+ compression_mode {docs-only, lite, standard} as pipeline state for downstream steps.
166
+ description: "Evaluate compression tier (docs-only/lite/standard); set compression_mode state"
140
167
  depends_on: scope-selection
141
168
 
142
169
  - name: triage
143
170
  skill: professor-triage
144
- description: "Cross-analysis triage with priority assessment (scoped to release manifest) — skipped if compression_mode=docs-only"
171
+ description: "Cross-analysis triage with priority assessment (scoped to release manifest) — skipped if docs-only, integrated-analysis allowed if lite"
145
172
  depends_on: compression-mode-eval
146
173
 
147
174
  - name: plan
148
175
  skill: release-plan
149
- description: "Release unit plan from triaged issues — skipped if compression_mode=docs-only"
176
+ description: "Release unit plan from triaged issues — skipped if docs-only, integrated-analysis allowed if lite"
150
177
  depends_on: triage
151
178
 
152
179
  - name: deep-plan
153
180
  skill: deep-plan
154
- description: "Research-validated implementation plan (research → plan → verify) — skipped if compression_mode=docs-only"
181
+ description: "Research-validated implementation plan (research → plan → verify) — skipped if docs-only, integrated-analysis allowed if lite"
155
182
  depends_on: plan
156
183
 
157
184
  - name: implement
@@ -229,7 +256,7 @@ steps:
229
256
 
230
257
  - name: deep-verify
231
258
  skill: deep-verify
232
- description: "Multi-angle release quality verification — self-review checklist only if compression_mode=docs-only"
259
+ description: "Multi-angle release quality verification — self-review checklist if docs-only; mgr-sauron R017 + core self-check if lite"
233
260
  depends_on: verify-build
234
261
 
235
262
  - name: release
@@ -2,7 +2,7 @@
2
2
  name: scout
3
3
  description: Analyze external URL to evaluate fit with oh-my-customcode project and auto-create GitHub issue with verdict
4
4
  scope: core
5
- version: 1.0.0
5
+ version: 1.0.1
6
6
  user-invocable: true
7
7
  argument-hint: "<url>"
8
8
  ---
@@ -29,6 +29,15 @@ Analyze an external URL (tech blog, tool, library, methodology) to evaluate its
29
29
 
30
30
  ## Pre-flight Guards
31
31
 
32
+ ### Pre-flight Execution Checklist (MANDATORY before Phase 1)
33
+
34
+ **Both guards MUST be executed before entering Phase 1.** Skipping either guard is a workflow violation.
35
+
36
+ - [ ] Guard 1: URL Validity check passed (abort if invalid)
37
+ - [ ] Guard 2: Duplicate Scout check passed (warn and confirm if duplicate found)
38
+
39
+ Proceed to Phase 1 only after both checkboxes are satisfied.
40
+
32
41
  ### Guard 1: URL Validity (GATE)
33
42
 
34
43
  Before any work, validate the URL:
@@ -52,6 +61,8 @@ gh issue list --state all --label "scout:internalize,scout:integrate,scout:skip"
52
61
 
53
62
  If found: `[Pre-flight] WARN: Similar URL already scouted in issue #N. Proceed anyway? [Y/n]`
54
63
 
64
+ > **Why mandatory?** Guard 2 생략으로 인해 동일 도메인 중복 scout 이슈가 생성된 사례 발생 (세션 회고 #1281). 중복 triage 낭비를 방지하기 위해 Pre-flight 체크리스트로 승격.
65
+
55
66
  ## Display Format
56
67
 
57
68
  Before execution, show the plan:
@@ -67,6 +78,8 @@ Before execution, show the plan:
67
78
  실행하시겠습니까? [Y/n]
68
79
  ```
69
80
 
81
+ > **암묵 승인 시 필수**: "되면 /scout으로 보고", "실행해줘" 등 묵시적 승인인 경우에도 위 plan 요약을 **반드시 1줄 이상 표시한 뒤 진행**한다 (R015 intent transparency). plan 표시 없이 바로 Phase 1으로 진입하는 것은 위반.
82
+
70
83
  ## Workflow
71
84
 
72
85
  ### Phase 1: Fetch & Summarize
@@ -90,6 +103,13 @@ Before execution, show the plan:
90
103
 
91
104
  ### Phase 3: Fit Analysis
92
105
 
106
+ > **MUST**: Agent tool 호출 시 반드시 `mode: "bypassPermissions"` 파라미터를 포함해야 한다 (R010 Universal bypassPermissions). CC Agent tool의 기본값은 `acceptEdits`이며, 이는 agent frontmatter의 `permissionMode`를 덮어쓴다. `mode` 누락 시 Bash/WebFetch 권한 프롬프트가 발생하여 비대화형 실행이 중단된다.
107
+ >
108
+ > ```
109
+ > ❌ Agent(subagent_type: "general-purpose", prompt: "...")
110
+ > ✓ Agent(subagent_type: "general-purpose", mode: "bypassPermissions", prompt: "...")
111
+ > ```
112
+
93
113
  Spawn 1 sonnet agent with `mode: "bypassPermissions"` and the following analysis prompt.
94
114
 
95
115
  **Inputs**:
@@ -141,6 +161,8 @@ Return a structured verdict:
141
161
 
142
162
  ### Phase 4: Issue Creation
143
163
 
164
+ > **NOTE**: Phase 4는 orchestrator가 직접 `gh issue create` (Bash)로 처리한다. 만약 이슈 생성을 Agent(mgr-gitnerd 등)에 위임할 경우, 해당 Agent tool 호출에도 반드시 `mode: "bypassPermissions"`를 포함해야 한다 (R010).
165
+
144
166
  1. Ensure scout labels exist (defensive, idempotent):
145
167
  ```bash
146
168
  gh label create "scout:internalize" --color "0E8A16" --description "Scout: should be internalized" 2>/dev/null || true
@@ -15,8 +15,29 @@
15
15
  # "rate_limits": { (v2.1.80+, optional)
16
16
  # "five_hour": { "used_percentage": 10, "resets_at": 1773979200 },
17
17
  # "seven_day": { "used_percentage": 90, "resets_at": 1773979200 }
18
- # }
18
+ # },
19
+ # "output_style": "korean-engineer", (v2.1.145+, optional)
20
+ # "gh": { (v2.1.145+, optional, #1197)
21
+ # "repo": "owner/repo",
22
+ # "pr_number": 1234,
23
+ # "pr_state": "OPEN"
24
+ # },
25
+ # "agents": [ (v2.1.145+, optional, #1195)
26
+ # { "name": "researcher-1", "status": "running" },
27
+ # { "name": "researcher-2", "status": "running" }
28
+ # ]
19
29
  # }
30
+ #
31
+ # External status line providers (#1275):
32
+ # Set STATUSLINE_EXTRA_PROVIDERS to a colon-separated list of provider
33
+ # script paths. Each is executed after the main status line and its output
34
+ # is appended on its own line. Providers run fail-safe (errors never affect
35
+ # the main line) with stdin redirected from /dev/null. Interpreter is chosen
36
+ # by extension: .mjs/.js -> node, .sh -> bash, otherwise executed directly
37
+ # if the file is executable. Unset by default (no behavior change).
38
+ #
39
+ # Example:
40
+ # export STATUSLINE_EXTRA_PROVIDERS="$HOME/.claude/hud/claudenews-hud.mjs:/opt/hud/extra.sh"
20
41
 
21
42
  # ---------------------------------------------------------------------------
22
43
  # 1. Color detection
@@ -66,22 +87,35 @@ fi
66
87
 
67
88
  # ---------------------------------------------------------------------------
68
89
  # 4. Single jq call — extract all fields as TSV
69
- # Fields: model_name, project_dir, ctx_pct, ctx_size, cost_usd, rl_5h_pct, rl_7d_pct, rl_5h_resets, rl_7d_resets
90
+ # Fields: model_name, project_dir, ctx_pct, ctx_size, cost_usd,
91
+ # rl_5h_pct, rl_7d_pct, rl_5h_resets, rl_7d_resets,
92
+ # gh_repo, gh_pr_number, gh_pr_state, agent_count (v2.1.145+)
70
93
  # ---------------------------------------------------------------------------
71
- IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct rl_7d_pct rl_5h_resets rl_7d_resets <<< "$(
94
+ # Note: empty string fields are emitted as sentinel "_" to prevent
95
+ # bash `read` from collapsing leading empty TSV fields (bash 3.2 IFS quirk).
96
+ IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct rl_7d_pct rl_5h_resets rl_7d_resets gh_repo gh_pr_number gh_pr_state agent_count <<< "$(
72
97
  printf '%s' "$json" | jq -r '[
73
98
  (.model.display_name // "unknown"),
74
- (.workspace.current_dir // ""),
99
+ ((.workspace.current_dir // "") | if . == "" then "_" else . end),
75
100
  (if .context_window.used != null and .context_window.total != null and .context_window.total > 0 then (.context_window.used / .context_window.total * 100) elif .context_window.used_percentage != null then .context_window.used_percentage else 0 end),
76
101
  (.context_window.context_window_size // 0),
77
102
  (.cost.total_cost_usd // 0),
78
103
  (.rate_limits.five_hour.used_percentage // -1),
79
104
  (.rate_limits.seven_day.used_percentage // -1),
80
105
  (.rate_limits.five_hour.resets_at // -1),
81
- (.rate_limits.seven_day.resets_at // -1)
106
+ (.rate_limits.seven_day.resets_at // -1),
107
+ ((.gh.repo // "") | if . == "" then "_" else . end),
108
+ (.gh.pr_number // -1),
109
+ ((.gh.pr_state // "") | if . == "" then "_" else . end),
110
+ (if (.agents | type) == "array" then (.agents | length) else -1 end)
82
111
  ] | @tsv'
83
112
  )"
84
113
 
114
+ # Convert sentinel "_" back to empty string for downstream code
115
+ [[ "$project_dir" == "_" ]] && project_dir=""
116
+ [[ "$gh_repo" == "_" ]] && gh_repo=""
117
+ [[ "$gh_pr_state" == "_" ]] && gh_pr_state=""
118
+
85
119
  # ---------------------------------------------------------------------------
86
120
  # 4b. Cost & context data bridge — write to temp file for hooks
87
121
  # ---------------------------------------------------------------------------
@@ -229,10 +263,30 @@ if [[ -n "$git_branch" && -n "$project_dir" ]]; then
229
263
  fi
230
264
 
231
265
  # ---------------------------------------------------------------------------
232
- # 8. PR number — cached by branch to avoid gh call on every refresh
266
+ # 8. PR number — prefer v2.1.145 native gh.* JSON fields; fall back to gh CLI cache
233
267
  # ---------------------------------------------------------------------------
234
268
  pr_display=""
235
- if [[ -n "$git_branch" ]] && command -v gh >/dev/null 2>&1; then
269
+
270
+ # 8a. Native gh.* fields (CC v2.1.145+, #1197) — zero-cost, no subprocess
271
+ if [[ "$gh_pr_number" =~ ^[0-9]+$ ]] && [[ "$gh_pr_number" -gt 0 ]]; then
272
+ case "$gh_pr_state" in
273
+ OPEN) pr_state_label="open" ;;
274
+ CLOSED) pr_state_label="closed" ;;
275
+ MERGED) pr_state_label="merged" ;;
276
+ DRAFT) pr_state_label="draft" ;;
277
+ "") pr_state_label="" ;;
278
+ *) # bash 3.2 compatible lowercase via tr
279
+ pr_state_label="$(printf '%s' "$gh_pr_state" | tr '[:upper:]' '[:lower:]')" ;;
280
+ esac
281
+ if [[ -n "$pr_state_label" ]]; then
282
+ pr_display="PR #${gh_pr_number} (${pr_state_label})"
283
+ else
284
+ pr_display="PR #${gh_pr_number}"
285
+ fi
286
+ fi
287
+
288
+ # 8b. Fallback — gh CLI with per-branch cache (pre-v2.1.145 or repos without native gh.*)
289
+ if [[ -z "$pr_display" ]] && [[ -n "$git_branch" ]] && command -v gh >/dev/null 2>&1; then
236
290
  cache_file="/tmp/statusline-pr-${project_name}"
237
291
  cached_branch=""
238
292
  cached_pr=""
@@ -337,6 +391,15 @@ if [[ -n "$wl_countdown" && -n "$wl_display" ]]; then
337
391
  wl_display="${wl_display} ${wl_countdown}"
338
392
  fi
339
393
 
394
+ # ---------------------------------------------------------------------------
395
+ # 9d. Active agents count (CC v2.1.145+, #1195)
396
+ # Only displayed when 1+ agents are active. agent_count=-1 means field absent.
397
+ # ---------------------------------------------------------------------------
398
+ agent_display=""
399
+ if [[ "$agent_count" =~ ^[0-9]+$ ]] && [[ "$agent_count" -ge 1 ]]; then
400
+ agent_display="A:${agent_count}"
401
+ fi
402
+
340
403
  # ---------------------------------------------------------------------------
341
404
  # 10. Assemble and output the status line
342
405
  # ---------------------------------------------------------------------------
@@ -366,21 +429,81 @@ if [[ -n "$wl_display" ]]; then
366
429
  wl_segment=" | ${wl_color}${wl_display}${COLOR_RESET}"
367
430
  fi
368
431
 
432
+ # Build the agents segment (with separator) if present
433
+ agent_segment=""
434
+ if [[ -n "$agent_display" ]]; then
435
+ agent_segment=" | ${agent_display}"
436
+ fi
437
+
369
438
  if [[ -n "$git_branch" ]]; then
370
- printf "${cost_color}%s${COLOR_RESET} | %s | %s%s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
439
+ printf "${cost_color}%s${COLOR_RESET} | %s | %s%s%s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
371
440
  "$cost_display" \
372
441
  "$project_name" \
373
442
  "$branch_display" \
374
443
  "$pr_segment" \
375
444
  "$rl_segment" \
376
445
  "$wl_segment" \
446
+ "$agent_segment" \
377
447
  "$ctx_display"
378
448
  else
379
- printf "${cost_color}%s${COLOR_RESET} | %s%s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
449
+ printf "${cost_color}%s${COLOR_RESET} | %s%s%s%s%s | ${ctx_color}%s${COLOR_RESET}\n" \
380
450
  "$cost_display" \
381
451
  "$project_name" \
382
452
  "$pr_segment" \
383
453
  "$rl_segment" \
384
454
  "$wl_segment" \
455
+ "$agent_segment" \
385
456
  "$ctx_display"
386
457
  fi
458
+
459
+ # ---------------------------------------------------------------------------
460
+ # 11. External status line providers (#1275)
461
+ # Merge output from external HUD/status providers (e.g. claudenews) so they
462
+ # coexist with the internal status line instead of being shadowed by the
463
+ # project's statusLine.command. Opt-in via STATUSLINE_EXTRA_PROVIDERS
464
+ # (colon-separated paths). Unset = no behavior change (backward compatible).
465
+ #
466
+ # Each provider runs fail-safe:
467
+ # - existence (-f) + interpreter availability checked before running
468
+ # - stdin redirected from /dev/null (statusline stdin already consumed)
469
+ # - stderr suppressed; failures never affect the main status line
470
+ # - output appended only when non-empty, on its own line
471
+ # Interpreter by extension: .mjs/.js -> node, .sh -> bash,
472
+ # otherwise executed directly if the file is executable.
473
+ # ---------------------------------------------------------------------------
474
+ if [[ -n "${STATUSLINE_EXTRA_PROVIDERS}" ]]; then
475
+ # bash 3.2 compatible split on ':' without arrays/mapfile
476
+ _saved_ifs="$IFS"
477
+ IFS=':'
478
+ set -f # disable globbing while iterating raw paths
479
+ for _provider in ${STATUSLINE_EXTRA_PROVIDERS}; do
480
+ [[ -z "$_provider" ]] && continue
481
+ [[ -f "$_provider" ]] || continue
482
+
483
+ _provider_out=""
484
+ case "$_provider" in
485
+ *.mjs|*.js)
486
+ if command -v node >/dev/null 2>&1; then
487
+ _provider_out="$(node "$_provider" </dev/null 2>/dev/null)"
488
+ fi
489
+ ;;
490
+ *.sh)
491
+ if command -v bash >/dev/null 2>&1; then
492
+ _provider_out="$(bash "$_provider" </dev/null 2>/dev/null)"
493
+ fi
494
+ ;;
495
+ *)
496
+ # No known interpreter — run directly only if executable
497
+ if [[ -x "$_provider" ]]; then
498
+ _provider_out="$("$_provider" </dev/null 2>/dev/null)"
499
+ fi
500
+ ;;
501
+ esac
502
+
503
+ if [[ -n "$_provider_out" ]]; then
504
+ printf '%s\n' "$_provider_out"
505
+ fi
506
+ done
507
+ set +f
508
+ IFS="$_saved_ifs"
509
+ fi
@@ -1,7 +1,7 @@
1
1
  # Claude Code Version Compatibility
2
2
 
3
- > Updated: 2026-05-29
4
- > Source: Claude Code release notes (#967, #968, #969, #1126 auto-detected by claude-native skill, #1137, #1158, #1242, #1243, #1244, #1245)
3
+ > Updated: 2026-06-02
4
+ > Source: Claude Code release notes (#967, #968, #969, #1126 auto-detected by claude-native skill, #1137, #1158, #1242, #1243, #1244, #1245, #1276, #1280)
5
5
 
6
6
  ## Compatibility Baseline
7
7
 
@@ -495,6 +495,8 @@ docs/superpowers/plans/**
495
495
  | v2.1.153 | statusline `COLUMNS`/`LINES` env (R012), `skipLfs` marketplace option, `claude agents` autocomplete improvement. | P3 follow-up |
496
496
  | v2.1.154 | Opus 4.8 + `opus48` alias (R006), dynamic workflows (R009/R018), lean system prompt default, `CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE` deprecated 06/01. | P3 follow-up |
497
497
  | v2.1.156 | Opus 4.8 thinking-block API-error fix — no harness change needed. | None |
498
+ | v2.1.159 | 내부 인프라 개선만, 사용자 대면 변경 없음. 조치 불필요. | None |
499
+ | v2.1.160 | `acceptEdits` 환경은 build-tool config 파일 쓰기 시 추가 prompt 인지 필요. bypassPermissions 사용 시 영향 없음. single-file grep → read-before-edit 충족(토큰 효율 개선). | `acceptEdits` 환경 주의 |
498
500
  | #1241 | Agent tool malformed-parsing on long/special-char prompts — mitigations documented in Known Platform Issues. | See below |
499
501
 
500
502
  ## v2.1.144 (2026-05-19) — 호환성 점검
@@ -1104,6 +1106,91 @@ Claude가 스스로 판단할 수 있는 상황에서는 multiple-choice prompt
1104
1106
  | Claude-managed worktree 종료 시 자동 unlock (`git worktree remove/prune` 가능) | 워크트리 정리 자동화 | R006 worktree 참조 |
1105
1107
  | 다수 버그 수정 (이미지 처리, sandbox 권한, `claude agents` 세션, `--resume`) | 안정성 향상 | 영향 없음 |
1106
1108
 
1109
+ ## v2.1.160 (2026-06-02) — 호환성 점검
1110
+
1111
+ > Issue: #1280
1112
+
1113
+ ### shell startup 파일 및 build-tool config 파일 쓰기 전 prompt 추가
1114
+
1115
+ `.zshenv`, `.zlogin`, `.bash_login` 등 shell startup 파일과 `~/.config/git/` 쓰기 전 확인 prompt가 추가되었습니다. 의도치 않은 shell 명령 실행 방지가 목적입니다.
1116
+
1117
+ **oh-my-customcode 연관**: R001 안전 규칙과 정합. `bypassPermissions` 모드에서는 이 prompt가 우회됩니다 — R010 Universal bypassPermissions를 사용하는 워크플로우에는 영향 없음.
1118
+
1119
+ ### `acceptEdits` 모드에서 build-tool config 파일 쓰기 전 prompt (R002/R006)
1120
+
1121
+ `acceptEdits` 모드에서 code-execution 권한을 부여할 수 있는 build-tool config 파일(`.npmrc`, `.yarnrc*`, `bunfig.toml`, `.bazelrc`, `.pre-commit-config.yaml`, `.devcontainer/` 등) 쓰기 전 확인 prompt가 추가되었습니다.
1122
+
1123
+ **oh-my-customcode 연관**: R002 권한 티어 및 R006 `acceptEdits` 모드 동작과 직접 연관됩니다. **`bypassPermissions` 모드를 사용하는 경우(R010 Universal bypassPermissions) 이 prompt는 우회됩니다** — 기존 oh-my-customcode 서브에이전트 워크플로우에 영향 없음. `acceptEdits` 모드로 운영하는 환경에서는 위 파일 타입 쓰기 시 추가 확인이 발생합니다.
1124
+
1125
+ ### single-file `grep` 명령이 read-before-edit 체크 충족 (R023/도구 효율)
1126
+
1127
+ single-file `grep`/`egrep`/`fgrep` 명령 실행이 해당 파일에 대한 read-before-edit 체크를 충족합니다. Edit 이전에 별도 Read 호출 없이 `grep` 결과만으로도 사전 읽기 조건을 만족합니다.
1128
+
1129
+ **oh-my-customcode 연관**: R023 Verification Ladder의 Tier 1(결정론적 검사) 시프트-레프트 원칙과 정합됩니다. `grep`으로 파일 내용을 확인한 후 Edit를 사용하는 워크플로우에서 불필요한 Read 호출이 줄어들어 토큰 효율이 개선됩니다.
1130
+
1131
+ ### `claude agents` 완료 세션 복원 시 chat history 유실 수정
1132
+
1133
+ `claude agents`에서 완료된 세션 복원 시 chat history가 유실되고 원본 prompt가 재실행되던 버그가 수정되었습니다.
1134
+
1135
+ **oh-my-customcode 연관**: R018 Agent Teams 장시간 세션 복원 신뢰성이 향상됩니다.
1136
+
1137
+ ### 야간 retire 후 재연결된 background 세션 conversation 유실 수정
1138
+
1139
+ 야간 retire 후 재연결된 background 세션에서 conversation이 유실되던 버그가 수정되었습니다.
1140
+
1141
+ **oh-my-customcode 연관**: R011 native auto-memory 세션 지속성 및 R018 Agent Teams 장기 실행 세션 안정성이 향상됩니다.
1142
+
1143
+ ### `claude --bg` cold-start "socket missing" 오류 수정
1144
+
1145
+ `claude --bg` cold-start 시 "socket missing" 오류가 발생하던 버그가 수정되었습니다.
1146
+
1147
+ **oh-my-customcode 연관**: R010 Universal bypassPermissions + `/bg` 플로우의 초기 기동 안정성이 개선됩니다.
1148
+
1149
+ ### WSL copy-on-select Windows 클립보드 수정
1150
+
1151
+ WSL 환경에서 copy-on-select 시 Windows 클립보드가 정상 동작하도록 수정되었습니다 (PowerShell interop).
1152
+
1153
+ **oh-my-customcode 연관**: macOS 개발 환경에는 직접 영향 없음.
1154
+
1155
+ ### oh-my-customcode 연관 평가
1156
+
1157
+ | 변경 | oh-my-customcode 영향 | 조치 |
1158
+ |------|----------------------|------|
1159
+ | shell startup + `~/.config/git/` 쓰기 prompt | R001 안전 강화. bypassPermissions 모드는 우회 | None (bypassPermissions 사용 시 영향 없음) |
1160
+ | `acceptEdits` build-tool config 파일 쓰기 prompt | R002/R006 연관. bypassPermissions 모드는 우회 | **`acceptEdits` 환경**은 대상 파일 타입 쓰기 시 확인 발생 |
1161
+ | single-file `grep` → read-before-edit 충족 | R023 Tier 1 시프트-레프트, 토큰 효율 개선 | None (자동 적용, 도구 사용 패턴 최적화 가능) |
1162
+ | `claude agents` 완료 세션 복원 chat history 유실 수정 | R018 세션 복원 신뢰성 | None |
1163
+ | background 세션 conversation 유실 수정 | R011/R018 장기 세션 안정성 | None |
1164
+ | `claude --bg` cold-start fix | R010 `/bg` 기동 안정성 | None |
1165
+ | WSL 클립보드 수정 | macOS 환경 영향 없음 | None |
1166
+
1167
+ **Action items**:
1168
+ - **`acceptEdits` 모드 환경**: `.npmrc`, `bunfig.toml`, `.devcontainer/` 등 build-tool config 파일 쓰기 워크플로우에서 추가 확인 prompt 발생 여부 인지 필요. `bypassPermissions` 모드 전환으로 해소 가능 (R010 권고).
1169
+ - 본 릴리스에서 코드 변경 없음 (docs-only)
1170
+
1171
+ ---
1172
+
1173
+ ## v2.1.159 (2026-05-31) — 호환성 점검
1174
+
1175
+ > Issue: #1276
1176
+
1177
+ ### 내부 인프라 개선
1178
+
1179
+ 내부 인프라 개선으로, 사용자 대면 변경 사항은 없습니다.
1180
+
1181
+ **oh-my-customcode 연관**: 코드 및 문서 변경 불필요. 추적 기록용 docs-only 항목입니다.
1182
+
1183
+ ### oh-my-customcode 연관 평가
1184
+
1185
+ | 변경 | oh-my-customcode 영향 | 조치 |
1186
+ |------|----------------------|------|
1187
+ | 내부 인프라 개선 | 사용자 대면 변경 없음 | 조치 불필요 |
1188
+
1189
+ **Action items**:
1190
+ - 코드 및 문서 변경 불필요 (추적 기록용 docs-only)
1191
+
1192
+ ---
1193
+
1107
1194
  ## v2.1.156 (2026-05-29) — 호환성 점검
1108
1195
 
1109
1196
  > Issue: #1245 — CC v2.1.156 tracking
@@ -1165,6 +1252,8 @@ Opus 4.8에서 thinking blocks가 수정되어 API 오류가 발생하던 버그
1165
1252
  - #1243 — Claude Code v2.1.153 compatibility documentation
1166
1253
  - #1244 — Claude Code v2.1.154 compatibility documentation
1167
1254
  - #1245 — Claude Code v2.1.156 compatibility documentation
1255
+ - #1276 — Claude Code v2.1.159 compatibility documentation
1256
+ - #1280 — Claude Code v2.1.160 compatibility documentation
1168
1257
  - `.claude/skills/claude-native/` — auto-generation source
1169
1258
  - `.claude/rules/SHOULD-hud-statusline.md` — R012 statusline integration
1170
1259
  - `.claude/rules/MUST-agent-design.md` — R006 agent frontmatter spec
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.162.1",
2
+ "version": "0.164.0",
3
3
  "lastUpdated": "2026-05-20T00:00:00.000Z",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",