oh-my-customcode 0.174.0 → 0.176.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
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
241
241
  workspaces: [
242
242
  "packages/*"
243
243
  ],
244
- version: "0.174.0",
244
+ version: "0.176.0",
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.100.1",
292
+ "@anthropic-ai/sdk": "^0.102.0",
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: "0.174.0",
2034
+ version: "0.176.0",
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.100.1",
2082
+ "@anthropic-ai/sdk": "^0.102.0",
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.174.0",
6
+ "version": "0.176.0",
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.100.1",
54
+ "@anthropic-ai/sdk": "^0.102.0",
55
55
  "@biomejs/biome": "^2.3.12",
56
56
  "@types/bun": "^1.3.6",
57
57
  "@types/js-yaml": "^4.0.9",
@@ -96,6 +96,10 @@ Never accept "pre-existing" without direct base-branch evidence. A false "pre-ex
96
96
  | "UI changes done" / "CSS updated" | type-check passes but browser render not verified; visual output unknown | Start dev server, open browser, confirm visual output; capture screenshot or describe what was seen |
97
97
  -->
98
98
 
99
+ ### Tool-Call Payload Completeness
100
+
101
+ 도구 호출의 required 파라미터는 invoke 전에 확인한다(완료 선언 후가 아니라 호출 시점의 전제조건). announce(prefix)만 출력하고 payload 의 required 필드를 누락하는 패턴은 R008 "Required-Parameter Completeness Check"가 canonical owner다. Reference: #1324.
102
+
99
103
  ## Completion Contract Format — [Contract] + [Done] with criterion/evidence pairs. See template via Read tool.
100
104
 
101
105
  <!-- DETAIL: Completion Contract Format
@@ -50,6 +50,17 @@ Before writing/editing multiple files:
50
50
 
51
51
  > **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.
52
52
 
53
+ ### LLM Batch Output Token Budget
54
+
55
+ The giant-prompt heuristic above governs INPUT tokens. The symmetric OUTPUT-side rule: when a single LLM call processes N items (scoring/classifying/extracting) and must emit structured output (e.g. JSON) per item, pre-compute the output budget = N × per-item output tokens BEFORE the call. Exceeding `max_tokens` truncates the response mid-structure → silent parse failure (the call "succeeds" but JSON.parse throws).
56
+
57
+ | Anti-pattern | Required |
58
+ |--------------|----------|
59
+ | Single batch call over a variable-size list with a fixed small max_tokens | Chunk into ≤40-item batches; constrain per-item output length (e.g. reason ≤10 words); raise max_tokens to fit one chunk |
60
+ | Raising max_tokens alone | Insufficient — defers the failure as the list grows. Chunking is the invariant fix. |
61
+
62
+ Reference: #1320 (fix), #1321 (session 113 retrospective 찐빠 #1), `feedback_llm_batch_truncation.md`.
63
+
53
64
  <!-- DETAIL: Full violation examples (4 pairs)
54
65
  ❌ WRONG: Writing files one by one
55
66
  Write(file1.kt) → Write(file2.kt) → Write(file3.kt) → Write(file4.kt)
@@ -31,6 +31,17 @@ Incorrect parallel: tool_call(url1), tool_call(url2), tool_call(cmd) — no iden
31
31
  Correct parallel: list ALL [agent][model] → Tool/Fetching/Running lines FIRST, then all tool_calls
32
32
  -->
33
33
 
34
+ ### Required-Parameter Completeness Check
35
+
36
+ R008 prefix(announce)와 실제 도구 호출은 분리된 단계다. prefix 를 출력한 뒤 호출 payload 에서 도구 스키마상 required 파라미터를 누락하면 호출이 실패하거나 빈 동작이 된다. 호출 직전, prefix 존재뿐 아니라 required 파라미터가 모두 채워졌는지 확인한다.
37
+
38
+ | Anti-pattern | Required |
39
+ |--------------|----------|
40
+ | `[agent][model] → Tool: AskUserQuestion` prefix 만 출력하고 `questions` 파라미터 없이/빈 배열로 호출 | prefix + `questions` 배열(최소 1개) 모두 채워 호출 |
41
+ | announce 후 payload 의 required 필드 누락 (announce-payload separation gap) | announce 와 동일 메시지에서 required 필드 완비 호출 |
42
+
43
+ Cross-reference: R020 (action-completeness precondition — invoke 전에 required 파라미터 확인). Reference issue: #1324 (찐빠: AskUserQuestion `questions`-missing recurrence).
44
+
34
45
  ## Models
35
46
 
36
47
  | Model | Use |
@@ -81,6 +92,21 @@ matches the spawn announcement:
81
92
  [2] lang-python-expert:sonnet → Python code review
82
93
  ```
83
94
 
95
+ ## Tier-3 Interaction Tool Prefix (MANDATORY)
96
+
97
+ R008 "every tool call" applies to Tier-3 interaction tools too — NOT only file/exec tools. Applying the `[agent][model] → Tool:` prefix to Agent/Bash/Read while omitting it on `AskUserQuestion`, `TodoWrite`, `EnterPlanMode`, etc. is a violation.
98
+
99
+ | Tool | R008 prefix required? |
100
+ |------|----------------------|
101
+ | AskUserQuestion | YES — `[agent][model] → Tool: AskUserQuestion` before the call |
102
+ | TodoWrite | YES |
103
+ | EnterPlanMode / ExitPlanMode | YES |
104
+ | Skill | NO separate R008 prefix — identified via R007 `claude → {skill-name}` integrated header instead |
105
+
106
+ Skill invocation is the one exception: it is identified through the R007 integrated identification block (`┌─ Agent: claude → {skill-name}`), not a standalone R008 tool prefix.
107
+
108
+ Reference issue: #1321 (session 113 retrospective, 찐빠 #2 — AskUserQuestion prefix omitted twice).
109
+
84
110
  ## Example
85
111
 
86
112
  ```
@@ -102,8 +128,9 @@ Agent(description: "[2] Python code review", subagent_type: "lang-python-expert"
102
128
 
103
129
  1. 이 호출 위에 `[agent-name][model] → Tool: <tool-name>` 라인이 있는가?
104
130
  2. agent-name 과 model 이 현재 컨텍스트와 일치하는가?
131
+ 3. 이 호출에 도구 스키마상 required 파라미터가 모두 채워져 있는가? (예: AskUserQuestion 는 `questions` 배열이 비어 있지 않아야 함) prefix(announce)만 출력하고 실제 호출 payload 의 required 필드를 누락하면 안 된다.
105
132
 
106
- 체크 실패 시 즉시 prefix 추가 후 호출.
133
+ 체크 실패 시 즉시 prefix/필수 파라미터를 보완한 후 호출.
107
134
 
108
135
  ### Common Multi-Turn Violation
109
136
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.174.0",
2
+ "version": "0.176.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)",