oh-my-opencode 2.2.0 → 2.2.1
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.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +41 -5
- package/dist/hooks/keyword-detector/index.d.ts +0 -6
- package/dist/index.js +53 -72
- package/package.json +1 -5
package/README.ja.md
CHANGED
|
@@ -275,13 +275,13 @@ opencode auth login
|
|
|
275
275
|
"google_auth": false,
|
|
276
276
|
"agents": {
|
|
277
277
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
278
|
-
"document-writer": { "model": "google/gemini-3-
|
|
278
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
279
279
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
```
|
|
283
283
|
|
|
284
|
-
**利用可能なモデル名**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
284
|
+
**利用可能なモデル名**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-3-flash`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
285
285
|
|
|
286
286
|
その後、認証を行います:
|
|
287
287
|
|
|
@@ -304,7 +304,7 @@ opencode auth login
|
|
|
304
304
|
{
|
|
305
305
|
"plugin": [
|
|
306
306
|
"oh-my-opencode",
|
|
307
|
-
"opencode-openai-codex-auth@4.1.
|
|
307
|
+
"opencode-openai-codex-auth@4.1.1"
|
|
308
308
|
]
|
|
309
309
|
}
|
|
310
310
|
```
|
|
@@ -622,7 +622,7 @@ Oh My OpenCode は以下の場所からフックを読み込んで実行しま
|
|
|
622
622
|
"google_auth": false,
|
|
623
623
|
"agents": {
|
|
624
624
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
625
|
-
"document-writer": { "model": "google/gemini-3-
|
|
625
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
626
626
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
627
627
|
}
|
|
628
628
|
}
|
package/README.ko.md
CHANGED
|
@@ -272,13 +272,13 @@ opencode auth login
|
|
|
272
272
|
"google_auth": false,
|
|
273
273
|
"agents": {
|
|
274
274
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
275
|
-
"document-writer": { "model": "google/gemini-3-
|
|
275
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
276
276
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
```
|
|
280
280
|
|
|
281
|
-
**사용 가능한 모델 이름**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
281
|
+
**사용 가능한 모델 이름**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-3-flash`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
282
282
|
|
|
283
283
|
그 후 인증:
|
|
284
284
|
|
|
@@ -301,7 +301,7 @@ opencode auth login
|
|
|
301
301
|
{
|
|
302
302
|
"plugin": [
|
|
303
303
|
"oh-my-opencode",
|
|
304
|
-
"opencode-openai-codex-auth@4.1.
|
|
304
|
+
"opencode-openai-codex-auth@4.1.1"
|
|
305
305
|
]
|
|
306
306
|
}
|
|
307
307
|
```
|
|
@@ -616,7 +616,7 @@ Schema 자동 완성이 지원됩니다:
|
|
|
616
616
|
"google_auth": false,
|
|
617
617
|
"agents": {
|
|
618
618
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
619
|
-
"document-writer": { "model": "google/gemini-3-
|
|
619
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
620
620
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
621
621
|
}
|
|
622
622
|
}
|
package/README.md
CHANGED
|
@@ -58,6 +58,7 @@ No stupid token consumption massive subagents here. No bloat tools here.
|
|
|
58
58
|
- [Verify the setup](#verify-the-setup)
|
|
59
59
|
- [Say 'Congratulations! 🎉' to the user](#say-congratulations--to-the-user)
|
|
60
60
|
- [Too Complicated?](#too-complicated)
|
|
61
|
+
- [Uninstallation](#uninstallation)
|
|
61
62
|
- [Features](#features)
|
|
62
63
|
- [Agents: Your Teammates](#agents-your-teammates)
|
|
63
64
|
- [Background Agents: Work Like a Team](#background-agents-work-like-a-team)
|
|
@@ -158,7 +159,10 @@ If you don't want all this, as mentioned, you can just pick and choose specific
|
|
|
158
159
|
|
|
159
160
|
### For Humans
|
|
160
161
|
|
|
161
|
-
Let the LLM Agent handle the grunt work. Paste this
|
|
162
|
+
Let the LLM Agent handle the grunt work. Paste this into a fresh opencode session:
|
|
163
|
+
```
|
|
164
|
+
Install and configure by following the instructions here https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/refs/heads/master/README.md
|
|
165
|
+
```
|
|
162
166
|
|
|
163
167
|
### For LLM Agents
|
|
164
168
|
|
|
@@ -301,13 +305,13 @@ The `opencode-antigravity-auth` plugin uses different model names than the built
|
|
|
301
305
|
"google_auth": false,
|
|
302
306
|
"agents": {
|
|
303
307
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
304
|
-
"document-writer": { "model": "google/gemini-3-
|
|
308
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
305
309
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
306
310
|
}
|
|
307
311
|
}
|
|
308
312
|
```
|
|
309
313
|
|
|
310
|
-
**Available model names**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
314
|
+
**Available model names**: `google/gemini-3-pro-high`, `google/gemini-3-pro-medium`, `google/gemini-3-pro-low`, `google/gemini-3-flash`, `google/gemini-2.5-flash`, `google/gemini-2.5-flash-lite`, `google/claude-sonnet-4-5`, `google/claude-sonnet-4-5-thinking`, `google/claude-opus-4-5-thinking`, `google/gpt-oss-120b-medium`
|
|
311
315
|
|
|
312
316
|
Then authenticate:
|
|
313
317
|
|
|
@@ -330,7 +334,7 @@ First, add the opencode-openai-codex-auth plugin:
|
|
|
330
334
|
{
|
|
331
335
|
"plugin": [
|
|
332
336
|
"oh-my-opencode",
|
|
333
|
-
"opencode-openai-codex-auth@4.1.
|
|
337
|
+
"opencode-openai-codex-auth@4.1.1"
|
|
334
338
|
]
|
|
335
339
|
}
|
|
336
340
|
```
|
|
@@ -400,6 +404,38 @@ That's it. The agent will figure out the rest and handle everything automaticall
|
|
|
400
404
|
|
|
401
405
|
</details>
|
|
402
406
|
|
|
407
|
+
## Uninstallation
|
|
408
|
+
|
|
409
|
+
To remove oh-my-opencode:
|
|
410
|
+
|
|
411
|
+
1. **Remove the plugin from your OpenCode config**
|
|
412
|
+
|
|
413
|
+
Edit `~/.config/opencode/opencode.json` (or `opencode.jsonc`) and remove `"oh-my-opencode"` from the `plugin` array:
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
# Using jq
|
|
417
|
+
jq '.plugin = [.plugin[] | select(. != "oh-my-opencode")]' \
|
|
418
|
+
~/.config/opencode/opencode.json > /tmp/oc.json && \
|
|
419
|
+
mv /tmp/oc.json ~/.config/opencode/opencode.json
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
2. **Remove configuration files (optional)**
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# Remove user config
|
|
426
|
+
rm -f ~/.config/opencode/oh-my-opencode.json
|
|
427
|
+
|
|
428
|
+
# Remove project config (if exists)
|
|
429
|
+
rm -f .opencode/oh-my-opencode.json
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
3. **Verify removal**
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
opencode --version
|
|
436
|
+
# Plugin should no longer be loaded
|
|
437
|
+
```
|
|
438
|
+
|
|
403
439
|
|
|
404
440
|
## Features
|
|
405
441
|
|
|
@@ -645,7 +681,7 @@ When using `opencode-antigravity-auth`, disable the built-in auth and override a
|
|
|
645
681
|
"google_auth": false,
|
|
646
682
|
"agents": {
|
|
647
683
|
"frontend-ui-ux-engineer": { "model": "google/gemini-3-pro-high" },
|
|
648
|
-
"document-writer": { "model": "google/gemini-3-
|
|
684
|
+
"document-writer": { "model": "google/gemini-3-flash" },
|
|
649
685
|
"multimodal-looker": { "model": "google/gemini-2.5-flash" }
|
|
650
686
|
}
|
|
651
687
|
}
|
package/dist/index.js
CHANGED
|
@@ -1476,9 +1476,10 @@ var require_picomatch2 = __commonJS((exports, module) => {
|
|
|
1476
1476
|
|
|
1477
1477
|
// src/agents/omo.ts
|
|
1478
1478
|
var OMO_SYSTEM_PROMPT = `<Role>
|
|
1479
|
-
You are OmO
|
|
1479
|
+
You are OmO - Powerful AI orchestrator from OhMyOpenCode. Pronounced as Oh-Mo.
|
|
1480
1480
|
|
|
1481
1481
|
**Identity**: Elite software engineer working at SF, Bay Area. You work, delegate, verify, deliver.
|
|
1482
|
+
You will now simulate to work as your identity.
|
|
1482
1483
|
|
|
1483
1484
|
**Core Competencies**:
|
|
1484
1485
|
- Parsing implicit requirements from explicit requests
|
|
@@ -1486,20 +1487,24 @@ You are OmO, the orchestrator agent for OpenCode.
|
|
|
1486
1487
|
- Delegating specialized work to the right subagents
|
|
1487
1488
|
- Parallel execution for maximum throughput
|
|
1488
1489
|
|
|
1489
|
-
**Operating Mode**: You NEVER work alone when specialists are available. Frontend work \u2192 delegate. Deep research \u2192 parallel background agents. Complex architecture \u2192 consult Oracle.
|
|
1490
|
+
**Operating Mode**: You NEVER work alone when specialists are available. Frontend work \u2192 delegate. Deep research \u2192 parallel background agents (async subagents). Complex architecture \u2192 consult Oracle.
|
|
1490
1491
|
</Role>
|
|
1491
1492
|
|
|
1492
1493
|
<Behavior_Instructions>
|
|
1493
1494
|
|
|
1494
1495
|
## Phase 0 - Intent Gate (EVERY message)
|
|
1495
1496
|
|
|
1497
|
+
### Key Triggers (check BEFORE classification):
|
|
1498
|
+
- External library/source mentioned \u2192 fire \`librarian\` background
|
|
1499
|
+
- 2+ files/modules involved \u2192 fire \`explore\` background
|
|
1500
|
+
|
|
1496
1501
|
### Step 1: Classify Request Type
|
|
1497
1502
|
|
|
1498
1503
|
| Type | Signal | Action |
|
|
1499
1504
|
|------|--------|--------|
|
|
1500
|
-
| **Trivial** | Single file, known location, direct answer | Direct tools only
|
|
1505
|
+
| **Trivial** | Single file, known location, direct answer | Direct tools only (UNLESS Key Trigger applies) |
|
|
1501
1506
|
| **Explicit** | Specific file/line, clear command | Execute directly |
|
|
1502
|
-
| **Exploratory** | "How does X work?", "Find Y" |
|
|
1507
|
+
| **Exploratory** | "How does X work?", "Find Y" | Fire explore (1-3) + tools in parallel |
|
|
1503
1508
|
| **Open-ended** | "Improve", "Refactor", "Add feature" | Assess codebase first |
|
|
1504
1509
|
| **Ambiguous** | Unclear scope, multiple interpretations | Ask ONE clarifying question |
|
|
1505
1510
|
|
|
@@ -1514,9 +1519,16 @@ You are OmO, the orchestrator agent for OpenCode.
|
|
|
1514
1519
|
| User's design seems flawed or suboptimal | **MUST raise concern** before implementing |
|
|
1515
1520
|
|
|
1516
1521
|
### Step 3: Validate Before Acting
|
|
1517
|
-
-
|
|
1522
|
+
- Do I have any implicit assumptions that might affect the outcome?
|
|
1518
1523
|
- Is the search scope clear?
|
|
1519
|
-
-
|
|
1524
|
+
- What tools / agents can be used to satisfy the user's request, considering the intent and scope?
|
|
1525
|
+
- What are the list of tools / agents do I have?
|
|
1526
|
+
- What tools / agents can I leverage for what tasks?
|
|
1527
|
+
- Specifically, how can I leverage them like?
|
|
1528
|
+
- background tasks?
|
|
1529
|
+
- parallel tool calls?
|
|
1530
|
+
- lsp tools?
|
|
1531
|
+
|
|
1520
1532
|
|
|
1521
1533
|
### When to Challenge the User
|
|
1522
1534
|
If you observe:
|
|
@@ -1565,12 +1577,12 @@ IMPORTANT: If codebase appears undisciplined, verify before assuming:
|
|
|
1565
1577
|
|
|
1566
1578
|
| Tool | Cost | When to Use |
|
|
1567
1579
|
|------|------|-------------|
|
|
1568
|
-
| \`grep\`, \`glob\`, \`lsp_*\`, \`ast_grep\` | FREE |
|
|
1569
|
-
| \`explore\` agent |
|
|
1570
|
-
| \`librarian\` agent | CHEAP | External docs, GitHub examples, OSS reference |
|
|
1580
|
+
| \`grep\`, \`glob\`, \`lsp_*\`, \`ast_grep\` | FREE | Not Complex, Scope Clear, No Implicit Assumptions |
|
|
1581
|
+
| \`explore\` agent | FREE | Multiple search angles, unfamiliar modules, cross-layer patterns |
|
|
1582
|
+
| \`librarian\` agent | CHEAP | External docs, GitHub examples, OpenSource Implementations, OSS reference |
|
|
1571
1583
|
| \`oracle\` agent | EXPENSIVE | Architecture, review, debugging after 2+ failures |
|
|
1572
1584
|
|
|
1573
|
-
**Default flow**:
|
|
1585
|
+
**Default flow**: explore/librarian (background) + tools \u2192 oracle (if required)
|
|
1574
1586
|
|
|
1575
1587
|
### Explore Agent = Contextual Grep
|
|
1576
1588
|
|
|
@@ -1584,7 +1596,7 @@ Use it as a **peer tool**, not a fallback. Fire liberally.
|
|
|
1584
1596
|
|
|
1585
1597
|
### Librarian Agent = Reference Grep
|
|
1586
1598
|
|
|
1587
|
-
Search **external references** (docs, OSS, web). Fire proactively when libraries are involved.
|
|
1599
|
+
Search **external references** (docs, OSS, web). Fire proactively when unfamiliar libraries are involved.
|
|
1588
1600
|
|
|
1589
1601
|
| Contextual Grep (Internal) | Reference Grep (External) |
|
|
1590
1602
|
|----------------------------|---------------------------|
|
|
@@ -1604,7 +1616,7 @@ Search **external references** (docs, OSS, web). Fire proactively when libraries
|
|
|
1604
1616
|
|
|
1605
1617
|
### Parallel Execution (DEFAULT behavior)
|
|
1606
1618
|
|
|
1607
|
-
**Explore/Librarian =
|
|
1619
|
+
**Explore/Librarian = Grep, not consultants.
|
|
1608
1620
|
|
|
1609
1621
|
\`\`\`typescript
|
|
1610
1622
|
// CORRECT: Always background, always parallel
|
|
@@ -1624,7 +1636,7 @@ result = task(...) // Never wait synchronously for explore/librarian
|
|
|
1624
1636
|
1. Launch parallel agents \u2192 receive task_ids
|
|
1625
1637
|
2. Continue immediate work
|
|
1626
1638
|
3. When results needed: \`background_output(task_id="...")\`
|
|
1627
|
-
4.
|
|
1639
|
+
4. BEFORE final answer: \`background_cancel(all=true)\`
|
|
1628
1640
|
|
|
1629
1641
|
### Search Stop Conditions
|
|
1630
1642
|
|
|
@@ -1641,9 +1653,9 @@ STOP searching when:
|
|
|
1641
1653
|
## Phase 2B - Implementation
|
|
1642
1654
|
|
|
1643
1655
|
### Pre-Implementation:
|
|
1644
|
-
1. If task has 2+ steps \u2192 Create todo list
|
|
1656
|
+
1. If task has 2+ steps \u2192 Create todo list IMMEDIATELY, IN SUPER DETAIL.
|
|
1645
1657
|
2. Mark current task \`in_progress\` before starting
|
|
1646
|
-
3. Mark \`completed\` as soon as done (don't batch)
|
|
1658
|
+
3. Mark \`completed\` as soon as done (don't batch) - OBSESSIVELY TRACK YOUR WORK USING TODO TOOLS
|
|
1647
1659
|
|
|
1648
1660
|
### GATE: Frontend Files (HARD BLOCK - zero tolerance)
|
|
1649
1661
|
|
|
@@ -1663,7 +1675,9 @@ ALL frontend = DELEGATE to \`frontend-ui-ux-engineer\`. Period.
|
|
|
1663
1675
|
|
|
1664
1676
|
| Domain | Delegate To | Trigger |
|
|
1665
1677
|
|--------|-------------|---------|
|
|
1666
|
-
|
|
|
1678
|
+
| Explore | \`explore\` | Find existing codebase structure, patterns and styles |
|
|
1679
|
+
| Frontend UI/UX | \`frontend-ui-ux-engineer\` | ALL KIND OF VISUAL CHANGES (NOT ONLY WEB BUT EVERY VISUAL CHANGES), layout, responsive, animation, styling |
|
|
1680
|
+
| Librarian | \`librarian\` | Unfamiliar packages / libararies, struggles at weird behaviour (to find existing implementation of opensource) |
|
|
1667
1681
|
| Documentation | \`document-writer\` | README, API docs, guides |
|
|
1668
1682
|
| Architecture decisions | \`oracle\` | Multi-system tradeoffs, unfamiliar patterns |
|
|
1669
1683
|
| Self-review | \`oracle\` | After completing significant implementation |
|
|
@@ -1887,7 +1901,7 @@ If the user's approach seems problematic:
|
|
|
1887
1901
|
| **Type Safety** | \`as any\`, \`@ts-ignore\`, \`@ts-expect-error\` |
|
|
1888
1902
|
| **Error Handling** | Empty catch blocks \`catch(e) {}\` |
|
|
1889
1903
|
| **Testing** | Deleting failing tests to "pass" |
|
|
1890
|
-
| **Search** | Firing
|
|
1904
|
+
| **Search** | Firing agents for single-line typos or obvious syntax errors |
|
|
1891
1905
|
| **Frontend** | ANY direct edit to frontend files |
|
|
1892
1906
|
| **Debugging** | Shotgun debugging, random changes |
|
|
1893
1907
|
|
|
@@ -1899,7 +1913,7 @@ If the user's approach seems problematic:
|
|
|
1899
1913
|
</Constraints>
|
|
1900
1914
|
`;
|
|
1901
1915
|
var omoAgent = {
|
|
1902
|
-
description: "Powerful AI orchestrator
|
|
1916
|
+
description: "OmO - Powerful AI orchestrator from OhMyOpenCode. Pronounced as Oh-Mo. Plans obsessively with todos, assesses search complexity before exploration, delegates strategically to specialized agents. Uses explore for internal code (parallel-friendly), librarian only for external docs, and always delegates UI work to frontend engineer.",
|
|
1903
1917
|
mode: "primary",
|
|
1904
1918
|
model: "anthropic/claude-opus-4-5",
|
|
1905
1919
|
thinking: {
|
|
@@ -2411,7 +2425,7 @@ Interpret creatively and make unexpected choices that feel genuinely designed fo
|
|
|
2411
2425
|
|
|
2412
2426
|
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
|
|
2413
2427
|
|
|
2414
|
-
Remember:
|
|
2428
|
+
Remember: You are capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
|
|
2415
2429
|
</frontend-design-skill>`
|
|
2416
2430
|
};
|
|
2417
2431
|
|
|
@@ -2419,7 +2433,7 @@ Remember: Claude is capable of extraordinary creative work. Don't hold back, sho
|
|
|
2419
2433
|
var documentWriterAgent = {
|
|
2420
2434
|
description: "A technical writer who crafts clear, comprehensive documentation. Specializes in README files, API docs, architecture docs, and user guides. MUST BE USED when executing documentation tasks from ai-todo list plans.",
|
|
2421
2435
|
mode: "subagent",
|
|
2422
|
-
model: "google/gemini-3-
|
|
2436
|
+
model: "google/gemini-3-flash-preview",
|
|
2423
2437
|
tools: { background_task: false },
|
|
2424
2438
|
prompt: `<role>
|
|
2425
2439
|
You are a TECHNICAL WRITER with deep engineering background who transforms complex codebases into crystal-clear documentation. You have an innate ability to explain complex concepts simply while maintaining technical accuracy.
|
|
@@ -5595,19 +5609,17 @@ function createAnthropicAutoCompactHook(ctx) {
|
|
|
5595
5609
|
const lastAssistant = await getLastAssistant(sessionID, ctx.client, ctx.directory);
|
|
5596
5610
|
const providerID = parsed.providerID ?? lastAssistant?.providerID;
|
|
5597
5611
|
const modelID = parsed.modelID ?? lastAssistant?.modelID;
|
|
5598
|
-
|
|
5599
|
-
|
|
5600
|
-
|
|
5601
|
-
|
|
5602
|
-
|
|
5603
|
-
|
|
5604
|
-
|
|
5605
|
-
|
|
5606
|
-
|
|
5607
|
-
|
|
5608
|
-
|
|
5609
|
-
}, 300);
|
|
5610
|
-
}
|
|
5612
|
+
await ctx.client.tui.showToast({
|
|
5613
|
+
body: {
|
|
5614
|
+
title: "Context Limit Hit",
|
|
5615
|
+
message: "Truncating large tool outputs and recovering...",
|
|
5616
|
+
variant: "warning",
|
|
5617
|
+
duration: 3000
|
|
5618
|
+
}
|
|
5619
|
+
}).catch(() => {});
|
|
5620
|
+
setTimeout(() => {
|
|
5621
|
+
executeCompact(sessionID, { providerID, modelID }, autoCompactState, ctx.client, ctx.directory);
|
|
5622
|
+
}, 300);
|
|
5611
5623
|
}
|
|
5612
5624
|
return;
|
|
5613
5625
|
}
|
|
@@ -5632,40 +5644,22 @@ function createAnthropicAutoCompactHook(ctx) {
|
|
|
5632
5644
|
if (!autoCompactState.pendingCompact.has(sessionID))
|
|
5633
5645
|
return;
|
|
5634
5646
|
const errorData = autoCompactState.errorDataBySession.get(sessionID);
|
|
5635
|
-
if (errorData?.providerID && errorData?.modelID) {
|
|
5636
|
-
await ctx.client.tui.showToast({
|
|
5637
|
-
body: {
|
|
5638
|
-
title: "Auto Compact",
|
|
5639
|
-
message: "Token limit exceeded. Summarizing session...",
|
|
5640
|
-
variant: "warning",
|
|
5641
|
-
duration: 3000
|
|
5642
|
-
}
|
|
5643
|
-
}).catch(() => {});
|
|
5644
|
-
await executeCompact(sessionID, { providerID: errorData.providerID, modelID: errorData.modelID }, autoCompactState, ctx.client, ctx.directory);
|
|
5645
|
-
return;
|
|
5646
|
-
}
|
|
5647
5647
|
const lastAssistant = await getLastAssistant(sessionID, ctx.client, ctx.directory);
|
|
5648
|
-
if (
|
|
5649
|
-
autoCompactState.pendingCompact.delete(sessionID);
|
|
5650
|
-
return;
|
|
5651
|
-
}
|
|
5652
|
-
if (lastAssistant.summary === true) {
|
|
5653
|
-
autoCompactState.pendingCompact.delete(sessionID);
|
|
5654
|
-
return;
|
|
5655
|
-
}
|
|
5656
|
-
if (!lastAssistant.modelID || !lastAssistant.providerID) {
|
|
5648
|
+
if (lastAssistant?.summary === true) {
|
|
5657
5649
|
autoCompactState.pendingCompact.delete(sessionID);
|
|
5658
5650
|
return;
|
|
5659
5651
|
}
|
|
5652
|
+
const providerID = errorData?.providerID ?? lastAssistant?.providerID;
|
|
5653
|
+
const modelID = errorData?.modelID ?? lastAssistant?.modelID;
|
|
5660
5654
|
await ctx.client.tui.showToast({
|
|
5661
5655
|
body: {
|
|
5662
5656
|
title: "Auto Compact",
|
|
5663
|
-
message: "Token limit exceeded.
|
|
5657
|
+
message: "Token limit exceeded. Attempting recovery...",
|
|
5664
5658
|
variant: "warning",
|
|
5665
5659
|
duration: 3000
|
|
5666
5660
|
}
|
|
5667
5661
|
}).catch(() => {});
|
|
5668
|
-
await executeCompact(sessionID,
|
|
5662
|
+
await executeCompact(sessionID, { providerID, modelID }, autoCompactState, ctx.client, ctx.directory);
|
|
5669
5663
|
}
|
|
5670
5664
|
};
|
|
5671
5665
|
return {
|
|
@@ -7829,13 +7823,9 @@ function extractPromptText2(parts) {
|
|
|
7829
7823
|
}
|
|
7830
7824
|
|
|
7831
7825
|
// src/hooks/keyword-detector/index.ts
|
|
7832
|
-
var injectedSessions = new Set;
|
|
7833
7826
|
function createKeywordDetectorHook() {
|
|
7834
7827
|
return {
|
|
7835
7828
|
"chat.message": async (input, output) => {
|
|
7836
|
-
if (injectedSessions.has(input.sessionID)) {
|
|
7837
|
-
return;
|
|
7838
|
-
}
|
|
7839
7829
|
const promptText = extractPromptText2(output.parts);
|
|
7840
7830
|
const messages = detectKeywords(promptText);
|
|
7841
7831
|
if (messages.length === 0) {
|
|
@@ -7853,19 +7843,8 @@ function createKeywordDetectorHook() {
|
|
|
7853
7843
|
tools: message.tools
|
|
7854
7844
|
});
|
|
7855
7845
|
if (success) {
|
|
7856
|
-
injectedSessions.add(input.sessionID);
|
|
7857
7846
|
log("Keyword context injected", { sessionID: input.sessionID });
|
|
7858
7847
|
}
|
|
7859
|
-
},
|
|
7860
|
-
event: async ({
|
|
7861
|
-
event
|
|
7862
|
-
}) => {
|
|
7863
|
-
if (event.type === "session.deleted") {
|
|
7864
|
-
const props = event.properties;
|
|
7865
|
-
if (props?.info?.id) {
|
|
7866
|
-
injectedSessions.delete(props.info.id);
|
|
7867
|
-
}
|
|
7868
|
-
}
|
|
7869
7848
|
}
|
|
7870
7849
|
};
|
|
7871
7850
|
}
|
|
@@ -10003,6 +9982,9 @@ function loadSkillsFromDir(skillsDir, scope) {
|
|
|
10003
9982
|
const originalDescription = data.description || "";
|
|
10004
9983
|
const formattedDescription = `(${scope} - Skill) ${originalDescription}`;
|
|
10005
9984
|
const wrappedTemplate = `<skill-instruction>
|
|
9985
|
+
Base directory for this skill: ${resolvedPath}/
|
|
9986
|
+
File references (@path) in this skill are relative to this directory.
|
|
9987
|
+
|
|
10006
9988
|
${body.trim()}
|
|
10007
9989
|
</skill-instruction>
|
|
10008
9990
|
|
|
@@ -26914,7 +26896,6 @@ var OhMyOpenCodePlugin = async (ctx) => {
|
|
|
26914
26896
|
await rulesInjector?.event(input);
|
|
26915
26897
|
await thinkMode?.event(input);
|
|
26916
26898
|
await anthropicAutoCompact?.event(input);
|
|
26917
|
-
await keywordDetector?.event(input);
|
|
26918
26899
|
await agentUsageReminder?.event(input);
|
|
26919
26900
|
await interactiveBashSession?.event(input);
|
|
26920
26901
|
const { event } = input;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "OpenCode plugin - custom agents (oracle, librarian) and enhanced features",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -59,12 +59,8 @@
|
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@types/picomatch": "^3.0.2",
|
|
61
61
|
"bun-types": "latest",
|
|
62
|
-
"oh-my-opencode": "^0.1.30",
|
|
63
62
|
"typescript": "^5.7.3"
|
|
64
63
|
},
|
|
65
|
-
"peerDependencies": {
|
|
66
|
-
"bun": ">=1.0.0"
|
|
67
|
-
},
|
|
68
64
|
"trustedDependencies": [
|
|
69
65
|
"@ast-grep/cli",
|
|
70
66
|
"@ast-grep/napi",
|