oh-my-customcode 0.58.0 → 0.58.2
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/README.md +3 -3
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/SHOULD-hud-statusline.md +13 -2
- package/templates/.claude/skills/post-release-followup/SKILL.md +134 -0
- package/templates/.claude/statusline.sh +43 -4
- package/templates/manifest.json +2 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
**[한국어 문서 (Korean)](./README_ko.md)**
|
|
15
15
|
|
|
16
|
-
46 agents.
|
|
16
|
+
46 agents. 95 skills. 21 rules. One command.
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
npm install -g oh-my-customcode && cd your-project && omcustom init
|
|
@@ -146,7 +146,7 @@ Each agent declares its tools, model, memory scope, and limitations in YAML fron
|
|
|
146
146
|
|
|
147
147
|
---
|
|
148
148
|
|
|
149
|
-
### Skills (
|
|
149
|
+
### Skills (95)
|
|
150
150
|
|
|
151
151
|
| Category | Count | Includes |
|
|
152
152
|
|----------|-------|----------|
|
|
@@ -282,7 +282,7 @@ your-project/
|
|
|
282
282
|
├── CLAUDE.md # Entry point
|
|
283
283
|
├── .claude/
|
|
284
284
|
│ ├── agents/ # 46 agent definitions
|
|
285
|
-
│ ├── skills/ #
|
|
285
|
+
│ ├── skills/ # 95 skill modules
|
|
286
286
|
│ ├── rules/ # 21 governance rules (R000-R021)
|
|
287
287
|
│ ├── hooks/ # 15 lifecycle hook scripts
|
|
288
288
|
│ ├── schemas/ # Tool input validation schemas
|
package/dist/cli/index.js
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -41,10 +41,10 @@ Implemented in `.claude/hooks/hooks.json` (PreToolUse → Agent/Task matcher).
|
|
|
41
41
|
### Format
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
{Cost} | {project} | {branch} | RL:{rate_limit}% | WL:{weekly_limit}% | CTX:{usage}%
|
|
44
|
+
{Cost} | {project} | {branch} | RL:{rate_limit}% {countdown} | WL:{weekly_limit}% {countdown} | CTX:{usage}%
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
Example: `$0.05 | my-project | develop | RL:45% | WL:72% | CTX:42%`
|
|
47
|
+
Example: `$0.05 | my-project | develop | RL:45% 3h20m | WL:72% 2d3h | CTX:42%`
|
|
48
48
|
|
|
49
49
|
### Configuration
|
|
50
50
|
|
|
@@ -81,6 +81,17 @@ The `RL:{rate_limit}%` segment only appears when Claude Code v2.1.80+ provides `
|
|
|
81
81
|
|
|
82
82
|
The `WL:{weekly_limit}%` segment shows the 7-day rolling rate limit percentage. Both RL and WL segments are omitted on older versions.
|
|
83
83
|
|
|
84
|
+
### Countdown Format
|
|
85
|
+
|
|
86
|
+
The `{countdown}` shows time until RL/WL resets. Omitted when data is unavailable.
|
|
87
|
+
|
|
88
|
+
| Remaining | Display | Example |
|
|
89
|
+
|-----------|---------|---------|
|
|
90
|
+
| >= 1 day | `{d}d{h}h` | `2d3h` |
|
|
91
|
+
| >= 1 hour | `{h}h{m}m` | `5h30m` |
|
|
92
|
+
| < 1 hour | `{m}m` | `45m` |
|
|
93
|
+
| expired/unavailable | (omitted) | `WL:72%` |
|
|
94
|
+
|
|
84
95
|
## Integration
|
|
85
96
|
|
|
86
97
|
Integrates with R007 (Agent ID), R008 (Tool ID), R009 (Parallel).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: post-release-followup
|
|
3
|
+
description: Analyze release workflow findings and recommend follow-up actions — execute immediately or register as issues
|
|
4
|
+
scope: harness
|
|
5
|
+
user-invocable: false
|
|
6
|
+
effort: medium
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Post-Release Follow-up
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
After PR creation in the omcustom-dev release workflow, collect unaddressed findings and present actionable follow-up recommendations. The user chooses: execute now, register as issues, or skip.
|
|
14
|
+
|
|
15
|
+
## Workflow
|
|
16
|
+
|
|
17
|
+
### 1. Collect Follow-up Candidates
|
|
18
|
+
|
|
19
|
+
Gather unfinished work from multiple sources:
|
|
20
|
+
|
|
21
|
+
**Source A — Remaining open issues**:
|
|
22
|
+
- Run: `gh issue list --label verify-done --state open --json number,title,labels`
|
|
23
|
+
- These are triaged issues NOT included in the current release
|
|
24
|
+
|
|
25
|
+
**Source B — Deep-verify findings**:
|
|
26
|
+
- Read the latest deep-verify output from `.claude/outputs/sessions/{today}/`
|
|
27
|
+
- Extract any MEDIUM or LOW severity findings that were flagged but not fixed
|
|
28
|
+
|
|
29
|
+
**Source C — Triage deferred items**:
|
|
30
|
+
- Read the latest professor-triage output from `.claude/outputs/sessions/{today}/`
|
|
31
|
+
- Extract items explicitly marked as deferred or P3
|
|
32
|
+
|
|
33
|
+
**Source D — TODO markers in changed files**:
|
|
34
|
+
- Run: `git diff develop...HEAD --name-only` to get changed files
|
|
35
|
+
- Search changed files for `TODO`, `FIXME`, `HACK` markers added in this release
|
|
36
|
+
|
|
37
|
+
**Source E — PR review feedback**:
|
|
38
|
+
- Run: `gh api repos/{owner}/{repo}/pulls/{pr_number}/comments` and `gh api repos/{owner}/{repo}/issues/{pr_number}/comments`
|
|
39
|
+
- Parse omc_pr_analyzer bot comments (Senior Architect, Project Colleague, Professor Synthesis)
|
|
40
|
+
- Extract findings categorized as Critical, High, Medium
|
|
41
|
+
- Identify: required fixes, recommended improvements, structural concerns
|
|
42
|
+
|
|
43
|
+
### 2. Deduplicate and Categorize
|
|
44
|
+
|
|
45
|
+
Remove duplicates (same issue referenced from multiple sources). Categorize:
|
|
46
|
+
|
|
47
|
+
| Category | Criteria | Default Action |
|
|
48
|
+
|----------|----------|----------------|
|
|
49
|
+
| **Immediate** | P1/P2 remaining issues, MEDIUM+ verify findings, Critical/High PR review findings | Execute now |
|
|
50
|
+
| **Trackable** | P3 issues, LOW verify findings, new TODOs, Medium PR review findings | Register as issue |
|
|
51
|
+
| **Informational** | Already-tracked issues, cosmetic notes | Skip |
|
|
52
|
+
|
|
53
|
+
### 3. Present to User
|
|
54
|
+
|
|
55
|
+
Display follow-up summary:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
[Follow-up] {n}개 후속 작업 발견
|
|
59
|
+
|
|
60
|
+
━━━ 즉시 실행 추천 ({count}개) ━━━
|
|
61
|
+
1. {description} — 출처: {source}
|
|
62
|
+
2. {description} — 출처: {source}
|
|
63
|
+
|
|
64
|
+
━━━ 이슈 등록 추천 ({count}개) ━━━
|
|
65
|
+
3. {description} — 출처: {source}
|
|
66
|
+
4. {description} — 출처: {source}
|
|
67
|
+
|
|
68
|
+
━━━ 참고 사항 ({count}개) ━━━
|
|
69
|
+
5. {description} — 이미 #{issue_number}로 추적 중
|
|
70
|
+
|
|
71
|
+
선택:
|
|
72
|
+
[A] 추천대로 실행 (즉시 실행 + 이슈 등록)
|
|
73
|
+
[B] 모두 즉시 실행
|
|
74
|
+
[C] 모두 이슈 등록
|
|
75
|
+
[D] 개별 선택 (항목별로 질문)
|
|
76
|
+
[E] 건너뛰기
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Use AskUserQuestion (or equivalent user prompt) to get the choice.
|
|
80
|
+
|
|
81
|
+
### 4. Process User Choice
|
|
82
|
+
|
|
83
|
+
**Option A (추천대로)**:
|
|
84
|
+
- "Immediate" items → delegate to appropriate specialist agents for execution
|
|
85
|
+
- "Trackable" items → create GitHub issues via `gh issue create`
|
|
86
|
+
- "Informational" items → skip
|
|
87
|
+
|
|
88
|
+
**Option B (모두 즉시 실행)**:
|
|
89
|
+
- All Immediate + Trackable items → delegate to specialist agents
|
|
90
|
+
- Follow implementation patterns from the release workflow
|
|
91
|
+
|
|
92
|
+
**Option C (모두 이슈 등록)**:
|
|
93
|
+
- All Immediate + Trackable items → `gh issue create` with appropriate labels
|
|
94
|
+
- Label: `professor` for auto-triage in next workflow run
|
|
95
|
+
|
|
96
|
+
**Option D (개별 선택)**:
|
|
97
|
+
- For each item, ask: `[{n}] {description} — 실행(E) / 이슈(I) / 건너뛰기(S)?`
|
|
98
|
+
- Process each per user choice
|
|
99
|
+
|
|
100
|
+
**Option E (건너뛰기)**:
|
|
101
|
+
- Skip all follow-up actions
|
|
102
|
+
- Complete workflow
|
|
103
|
+
|
|
104
|
+
### 5. Report
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
[Follow-up Complete]
|
|
108
|
+
├── 즉시 실행: {n}개 완료
|
|
109
|
+
├── 이슈 등록: {n}개 (#{numbers})
|
|
110
|
+
├── 건너뛰기: {n}개
|
|
111
|
+
└── 총 처리: {total}개
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Issue Creation Template
|
|
115
|
+
|
|
116
|
+
When creating follow-up issues:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
gh issue create \
|
|
120
|
+
--title "{concise description}" \
|
|
121
|
+
--body "## Source\n\nDiscovered during v{version} release workflow.\n\n## Context\n\n{detailed context from triage/verify}\n\n## Suggested Action\n\n{recommendation}" \
|
|
122
|
+
--label "professor"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Add priority label (`P1`, `P2`, `P3`) based on categorization.
|
|
126
|
+
|
|
127
|
+
## Notes
|
|
128
|
+
|
|
129
|
+
- This skill runs in the main conversation context (via workflow skill step)
|
|
130
|
+
- User interaction is expected — this is NOT a fully automated step
|
|
131
|
+
- All file modifications delegated to specialist subagents per R010
|
|
132
|
+
- Issue creation uses `gh` CLI directly (read-only operation pattern)
|
|
133
|
+
- If no follow-up candidates found, report "No follow-up actions needed" and complete
|
|
134
|
+
- PR review feedback is available shortly after PR creation — the omc_pr_analyzer bot comments automatically
|
|
@@ -66,9 +66,9 @@ fi
|
|
|
66
66
|
|
|
67
67
|
# ---------------------------------------------------------------------------
|
|
68
68
|
# 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
|
|
69
|
+
# Fields: model_name, project_dir, ctx_pct, ctx_size, cost_usd, rl_5h_pct, rl_7d_pct, rl_5h_resets, rl_7d_resets
|
|
70
70
|
# ---------------------------------------------------------------------------
|
|
71
|
-
IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct rl_7d_pct <<< "$(
|
|
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 <<< "$(
|
|
72
72
|
printf '%s' "$json" | jq -r '[
|
|
73
73
|
(.model.display_name // "unknown"),
|
|
74
74
|
(.workspace.current_dir // ""),
|
|
@@ -76,7 +76,9 @@ IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct rl_
|
|
|
76
76
|
(.context_window.context_window_size // 0),
|
|
77
77
|
(.cost.total_cost_usd // 0),
|
|
78
78
|
(.rate_limits.five_hour.used_percentage // -1),
|
|
79
|
-
(.rate_limits.seven_day.used_percentage // -1)
|
|
79
|
+
(.rate_limits.seven_day.used_percentage // -1),
|
|
80
|
+
(.rate_limits.five_hour.resets_at // -1),
|
|
81
|
+
(.rate_limits.seven_day.resets_at // -1)
|
|
80
82
|
] | @tsv'
|
|
81
83
|
)"
|
|
82
84
|
|
|
@@ -85,7 +87,32 @@ IFS=$'\t' read -r model_name project_dir ctx_pct ctx_size cost_usd rl_5h_pct rl_
|
|
|
85
87
|
# ---------------------------------------------------------------------------
|
|
86
88
|
COST_BRIDGE_FILE="/tmp/.claude-cost-${PPID}"
|
|
87
89
|
_tmp="${COST_BRIDGE_FILE}.tmp.$$"
|
|
88
|
-
printf '%s\t%s\t%s\t%s\t%s\n' "$cost_usd" "$ctx_pct" "$(date +%s)" "$rl_5h_pct" "$rl_7d_pct" > "$_tmp" 2>/dev/null && mv -f "$_tmp" "$COST_BRIDGE_FILE" 2>/dev/null || true
|
|
90
|
+
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$cost_usd" "$ctx_pct" "$(date +%s)" "$rl_5h_pct" "$rl_7d_pct" "$rl_5h_resets" "$rl_7d_resets" > "$_tmp" 2>/dev/null && mv -f "$_tmp" "$COST_BRIDGE_FILE" 2>/dev/null || true
|
|
91
|
+
|
|
92
|
+
# ---------------------------------------------------------------------------
|
|
93
|
+
# 4c. Countdown helper — converts resets_at epoch to human-readable duration
|
|
94
|
+
# ---------------------------------------------------------------------------
|
|
95
|
+
_countdown() {
|
|
96
|
+
local resets_at="$1"
|
|
97
|
+
if [[ "$resets_at" =~ ^[0-9]+$ ]] && [[ "$resets_at" -gt 0 ]]; then
|
|
98
|
+
local now
|
|
99
|
+
now=$(date +%s)
|
|
100
|
+
local remaining=$((resets_at - now))
|
|
101
|
+
if [[ "$remaining" -gt 0 ]]; then
|
|
102
|
+
local days=$((remaining / 86400))
|
|
103
|
+
local hours=$(( (remaining % 86400) / 3600 ))
|
|
104
|
+
if [[ "$days" -gt 0 ]]; then
|
|
105
|
+
printf '%dd%dh' "$days" "$hours"
|
|
106
|
+
elif [[ "$hours" -gt 0 ]]; then
|
|
107
|
+
local mins=$(( (remaining % 3600) / 60 ))
|
|
108
|
+
printf '%dh%dm' "$hours" "$mins"
|
|
109
|
+
else
|
|
110
|
+
local mins=$((remaining / 60))
|
|
111
|
+
printf '%dm' "$mins"
|
|
112
|
+
fi
|
|
113
|
+
fi
|
|
114
|
+
fi
|
|
115
|
+
}
|
|
89
116
|
|
|
90
117
|
# ---------------------------------------------------------------------------
|
|
91
118
|
# 5. Model display name + color (bash 3.2 compatible case pattern matching)
|
|
@@ -271,6 +298,12 @@ if [[ "$rl_5h_int" -ge 0 ]]; then
|
|
|
271
298
|
fi
|
|
272
299
|
fi
|
|
273
300
|
|
|
301
|
+
# Append countdown to RL display if available
|
|
302
|
+
rl_countdown="$(_countdown "$rl_5h_resets")"
|
|
303
|
+
if [[ -n "$rl_countdown" && -n "$rl_display" ]]; then
|
|
304
|
+
rl_display="${rl_display} ${rl_countdown}"
|
|
305
|
+
fi
|
|
306
|
+
|
|
274
307
|
# ---------------------------------------------------------------------------
|
|
275
308
|
# 9c. Weekly rate limit percentage with color (v2.1.80+, optional)
|
|
276
309
|
# ---------------------------------------------------------------------------
|
|
@@ -292,6 +325,12 @@ if [[ "$wl_7d_int" -ge 0 ]]; then
|
|
|
292
325
|
fi
|
|
293
326
|
fi
|
|
294
327
|
|
|
328
|
+
# Append countdown to WL display if available
|
|
329
|
+
wl_countdown="$(_countdown "$rl_7d_resets")"
|
|
330
|
+
if [[ -n "$wl_countdown" && -n "$wl_display" ]]; then
|
|
331
|
+
wl_display="${wl_display} ${wl_countdown}"
|
|
332
|
+
fi
|
|
333
|
+
|
|
295
334
|
# ---------------------------------------------------------------------------
|
|
296
335
|
# 10. Assemble and output the status line
|
|
297
336
|
# ---------------------------------------------------------------------------
|
package/templates/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.58.
|
|
2
|
+
"version": "0.58.2",
|
|
3
3
|
"lastUpdated": "2026-03-24T00:00:00.000Z",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"name": "skills",
|
|
19
19
|
"path": ".claude/skills",
|
|
20
20
|
"description": "Reusable skill modules (includes slash commands)",
|
|
21
|
-
"files":
|
|
21
|
+
"files": 95
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"name": "guides",
|