oh-my-opencode 2.9.0 → 2.9.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 +13 -1
- package/README.ko.md +13 -1
- package/README.md +16 -1
- package/README.zh-cn.md +13 -1
- package/dist/agents/sisyphus-prompt-builder.d.ts +7 -2
- package/dist/agents/sisyphus.d.ts +2 -2
- package/dist/cli/index.js +1 -1
- package/dist/index.js +63 -14
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -759,7 +759,19 @@ Oh My OpenCode は以下の場所からフックを読み込んで実行しま
|
|
|
759
759
|
}
|
|
760
760
|
```
|
|
761
761
|
|
|
762
|
-
各エージェントでサポートされるオプション:`model`, `temperature`, `top_p`, `prompt`, `tools`, `disable`, `description`, `mode`, `color`, `permission`。
|
|
762
|
+
各エージェントでサポートされるオプション:`model`, `temperature`, `top_p`, `prompt`, `prompt_append`, `tools`, `disable`, `description`, `mode`, `color`, `permission`。
|
|
763
|
+
|
|
764
|
+
`prompt_append` を使用すると、デフォルトのシステムプロンプトを置き換えずに追加の指示を付け加えられます:
|
|
765
|
+
|
|
766
|
+
```json
|
|
767
|
+
{
|
|
768
|
+
"agents": {
|
|
769
|
+
"librarian": {
|
|
770
|
+
"prompt_append": "Emacs Lisp のドキュメント検索には常に elisp-dev-mcp を使用してください。"
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
```
|
|
763
775
|
|
|
764
776
|
`Sisyphus` (メインオーケストレーター) と `build` (デフォルトエージェント) も同じオプションで設定をオーバーライドできます。
|
|
765
777
|
|
package/README.ko.md
CHANGED
|
@@ -752,7 +752,19 @@ Schema 자동 완성이 지원됩니다:
|
|
|
752
752
|
}
|
|
753
753
|
```
|
|
754
754
|
|
|
755
|
-
각 에이전트에서 지원하는 옵션: `model`, `temperature`, `top_p`, `prompt`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
755
|
+
각 에이전트에서 지원하는 옵션: `model`, `temperature`, `top_p`, `prompt`, `prompt_append`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
756
|
+
|
|
757
|
+
`prompt_append`를 사용하면 기본 시스템 프롬프트를 대체하지 않고 추가 지시사항을 덧붙일 수 있습니다:
|
|
758
|
+
|
|
759
|
+
```json
|
|
760
|
+
{
|
|
761
|
+
"agents": {
|
|
762
|
+
"librarian": {
|
|
763
|
+
"prompt_append": "Emacs Lisp 문서 조회 시 항상 elisp-dev-mcp를 사용하세요."
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
```
|
|
756
768
|
|
|
757
769
|
`Sisyphus` (메인 오케스트레이터)와 `build` (기본 에이전트)도 동일한 옵션으로 설정을 오버라이드할 수 있습니다.
|
|
758
770
|
|
package/README.md
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
>
|
|
3
3
|
> *"I aim to spark a software revolution by creating a world where agent-generated code is indistinguishable from human code, yet capable of achieving vastly more. I have poured my personal time, passion, and funds into this journey, and I will continue to do so."*
|
|
4
4
|
>
|
|
5
|
+
> [](https://x.com/justsisyphus/status/2006250634354548963)
|
|
6
|
+
> > **The Orchestrator is coming. This Week. [Get notified on X](https://x.com/justsisyphus/status/2006250634354548963)**
|
|
7
|
+
>
|
|
5
8
|
> Be with us!
|
|
6
9
|
>
|
|
7
10
|
> | [<img alt="Discord link" src="https://img.shields.io/discord/1452487457085063218?color=5865F2&label=discord&labelColor=black&logo=discord&logoColor=white&style=flat-square" width="156px" />](https://discord.gg/PWpXmbhF) | Join our [Discord community](https://discord.gg/PWpXmbhF) to connect with contributors and fellow `oh-my-opencode` users. |
|
|
@@ -791,7 +794,19 @@ Override built-in agent settings:
|
|
|
791
794
|
}
|
|
792
795
|
```
|
|
793
796
|
|
|
794
|
-
Each agent supports: `model`, `temperature`, `top_p`, `prompt`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
797
|
+
Each agent supports: `model`, `temperature`, `top_p`, `prompt`, `prompt_append`, `tools`, `disable`, `description`, `mode`, `color`, `permission`.
|
|
798
|
+
|
|
799
|
+
Use `prompt_append` to add extra instructions without replacing the default system prompt:
|
|
800
|
+
|
|
801
|
+
```json
|
|
802
|
+
{
|
|
803
|
+
"agents": {
|
|
804
|
+
"librarian": {
|
|
805
|
+
"prompt_append": "Always use the elisp-dev-mcp for Emacs Lisp documentation lookups."
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
```
|
|
795
810
|
|
|
796
811
|
You can also override settings for `Sisyphus` (the main orchestrator) and `build` (the default agent) using the same options.
|
|
797
812
|
|
package/README.zh-cn.md
CHANGED
|
@@ -763,7 +763,19 @@ Agent 爽了,你自然也爽。但我还想直接让你爽。
|
|
|
763
763
|
}
|
|
764
764
|
```
|
|
765
765
|
|
|
766
|
-
每个 Agent 能改这些:`model`、`temperature`、`top_p`、`prompt`、`tools`、`disable`、`description`、`mode`、`color`、`permission`。
|
|
766
|
+
每个 Agent 能改这些:`model`、`temperature`、`top_p`、`prompt`、`prompt_append`、`tools`、`disable`、`description`、`mode`、`color`、`permission`。
|
|
767
|
+
|
|
768
|
+
用 `prompt_append` 可以在默认系统提示后面追加额外指令,不用替换整个提示:
|
|
769
|
+
|
|
770
|
+
```json
|
|
771
|
+
{
|
|
772
|
+
"agents": {
|
|
773
|
+
"librarian": {
|
|
774
|
+
"prompt_append": "查 Emacs Lisp 文档时用 elisp-dev-mcp。"
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
```
|
|
767
779
|
|
|
768
780
|
`Sisyphus`(主编排器)和 `build`(默认 Agent)也能改。
|
|
769
781
|
|
|
@@ -8,9 +8,14 @@ export interface AvailableTool {
|
|
|
8
8
|
name: string;
|
|
9
9
|
category: "lsp" | "ast" | "search" | "session" | "command" | "other";
|
|
10
10
|
}
|
|
11
|
+
export interface AvailableSkill {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
location: "user" | "project" | "plugin";
|
|
15
|
+
}
|
|
11
16
|
export declare function categorizeTools(toolNames: string[]): AvailableTool[];
|
|
12
|
-
export declare function buildKeyTriggersSection(agents: AvailableAgent[]): string;
|
|
13
|
-
export declare function buildToolSelectionTable(agents: AvailableAgent[], tools?: AvailableTool[]): string;
|
|
17
|
+
export declare function buildKeyTriggersSection(agents: AvailableAgent[], skills?: AvailableSkill[]): string;
|
|
18
|
+
export declare function buildToolSelectionTable(agents: AvailableAgent[], tools?: AvailableTool[], skills?: AvailableSkill[]): string;
|
|
14
19
|
export declare function buildExploreSection(agents: AvailableAgent[]): string;
|
|
15
20
|
export declare function buildLibrarianSection(agents: AvailableAgent[]): string;
|
|
16
21
|
export declare function buildDelegationTable(agents: AvailableAgent[]): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AgentConfig } from "@opencode-ai/sdk";
|
|
2
|
-
import type { AvailableAgent } from "./sisyphus-prompt-builder";
|
|
3
|
-
export declare function createSisyphusAgent(model?: string, availableAgents?: AvailableAgent[], availableToolNames?: string[]): AgentConfig;
|
|
2
|
+
import type { AvailableAgent, AvailableSkill } from "./sisyphus-prompt-builder";
|
|
3
|
+
export declare function createSisyphusAgent(model?: string, availableAgents?: AvailableAgent[], availableToolNames?: string[], availableSkills?: AvailableSkill[]): AgentConfig;
|
|
4
4
|
export declare const sisyphusAgent: AgentConfig;
|
package/dist/cli/index.js
CHANGED
|
@@ -2657,7 +2657,7 @@ var require_napi = __commonJS((exports, module) => {
|
|
|
2657
2657
|
var require_package = __commonJS((exports, module) => {
|
|
2658
2658
|
module.exports = {
|
|
2659
2659
|
name: "oh-my-opencode",
|
|
2660
|
-
version: "2.
|
|
2660
|
+
version: "2.9.0",
|
|
2661
2661
|
description: "OpenCode plugin - custom agents (oracle, librarian) and enhanced features",
|
|
2662
2662
|
main: "dist/index.js",
|
|
2663
2663
|
types: "dist/index.d.ts",
|
package/dist/index.js
CHANGED
|
@@ -1513,23 +1513,56 @@ function formatToolsForPrompt(tools) {
|
|
|
1513
1513
|
}
|
|
1514
1514
|
return parts.join(", ");
|
|
1515
1515
|
}
|
|
1516
|
-
function buildKeyTriggersSection(agents) {
|
|
1516
|
+
function buildKeyTriggersSection(agents, skills = []) {
|
|
1517
1517
|
const keyTriggers = agents.filter((a) => a.metadata.keyTrigger).map((a) => `- ${a.metadata.keyTrigger}`);
|
|
1518
|
-
|
|
1518
|
+
const skillTriggers = skills.filter((s) => s.description).map((s) => `- **Skill \`${s.name}\`**: ${extractTriggerFromDescription(s.description)}`);
|
|
1519
|
+
const allTriggers = [...keyTriggers, ...skillTriggers];
|
|
1520
|
+
if (allTriggers.length === 0)
|
|
1519
1521
|
return "";
|
|
1520
1522
|
return `### Key Triggers (check BEFORE classification):
|
|
1521
|
-
|
|
1523
|
+
|
|
1524
|
+
**BLOCKING: Check skills FIRST before any action.**
|
|
1525
|
+
If a skill matches, invoke it IMMEDIATELY via \`skill\` tool.
|
|
1526
|
+
|
|
1527
|
+
${allTriggers.join(`
|
|
1522
1528
|
`)}
|
|
1523
1529
|
- **GitHub mention (@mention in issue/PR)** \u2192 This is a WORK REQUEST. Plan full cycle: investigate \u2192 implement \u2192 create PR
|
|
1524
1530
|
- **"Look into" + "create PR"** \u2192 Not just research. Full implementation cycle expected.`;
|
|
1525
1531
|
}
|
|
1526
|
-
function
|
|
1532
|
+
function extractTriggerFromDescription(description) {
|
|
1533
|
+
const triggerMatch = description.match(/Trigger[s]?[:\s]+([^.]+)/i);
|
|
1534
|
+
if (triggerMatch)
|
|
1535
|
+
return triggerMatch[1].trim();
|
|
1536
|
+
const activateMatch = description.match(/Activate when[:\s]+([^.]+)/i);
|
|
1537
|
+
if (activateMatch)
|
|
1538
|
+
return activateMatch[1].trim();
|
|
1539
|
+
const useWhenMatch = description.match(/Use (?:this )?when[:\s]+([^.]+)/i);
|
|
1540
|
+
if (useWhenMatch)
|
|
1541
|
+
return useWhenMatch[1].trim();
|
|
1542
|
+
return description.split(".")[0] || description;
|
|
1543
|
+
}
|
|
1544
|
+
function buildToolSelectionTable(agents, tools = [], skills = []) {
|
|
1527
1545
|
const rows = [
|
|
1528
|
-
"### Tool Selection:",
|
|
1546
|
+
"### Tool & Skill Selection:",
|
|
1529
1547
|
"",
|
|
1530
|
-
"
|
|
1531
|
-
"
|
|
1548
|
+
"**Priority Order**: Skills \u2192 Direct Tools \u2192 Agents",
|
|
1549
|
+
""
|
|
1532
1550
|
];
|
|
1551
|
+
if (skills.length > 0) {
|
|
1552
|
+
rows.push("#### Skills (INVOKE FIRST if matching)");
|
|
1553
|
+
rows.push("");
|
|
1554
|
+
rows.push("| Skill | When to Use |");
|
|
1555
|
+
rows.push("|-------|-------------|");
|
|
1556
|
+
for (const skill of skills) {
|
|
1557
|
+
const shortDesc = extractTriggerFromDescription(skill.description);
|
|
1558
|
+
rows.push(`| \`${skill.name}\` | ${shortDesc} |`);
|
|
1559
|
+
}
|
|
1560
|
+
rows.push("");
|
|
1561
|
+
}
|
|
1562
|
+
rows.push("#### Tools & Agents");
|
|
1563
|
+
rows.push("");
|
|
1564
|
+
rows.push("| Resource | Cost | When to Use |");
|
|
1565
|
+
rows.push("|----------|------|-------------|");
|
|
1533
1566
|
if (tools.length > 0) {
|
|
1534
1567
|
const toolsDisplay = formatToolsForPrompt(tools);
|
|
1535
1568
|
rows.push(`| ${toolsDisplay} | FREE | Not Complex, Scope Clear, No Implicit Assumptions |`);
|
|
@@ -1541,7 +1574,7 @@ function buildToolSelectionTable(agents, tools = []) {
|
|
|
1541
1574
|
rows.push(`| \`${agent.name}\` agent | ${agent.metadata.cost} | ${shortDesc} |`);
|
|
1542
1575
|
}
|
|
1543
1576
|
rows.push("");
|
|
1544
|
-
rows.push("**Default flow**: explore/librarian (background) + tools \u2192 oracle (if required)");
|
|
1577
|
+
rows.push("**Default flow**: skill (if match) \u2192 explore/librarian (background) + tools \u2192 oracle (if required)");
|
|
1545
1578
|
return rows.join(`
|
|
1546
1579
|
`);
|
|
1547
1580
|
}
|
|
@@ -1714,10 +1747,25 @@ Named by [YeonGyu Kim](https://github.com/code-yeongyu).
|
|
|
1714
1747
|
**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.
|
|
1715
1748
|
|
|
1716
1749
|
</Role>`;
|
|
1717
|
-
var SISYPHUS_PHASE0_STEP1_3 = `### Step
|
|
1750
|
+
var SISYPHUS_PHASE0_STEP1_3 = `### Step 0: Check Skills FIRST (BLOCKING)
|
|
1751
|
+
|
|
1752
|
+
**Before ANY classification or action, scan for matching skills.**
|
|
1753
|
+
|
|
1754
|
+
\`\`\`
|
|
1755
|
+
IF request matches a skill trigger:
|
|
1756
|
+
\u2192 INVOKE skill tool IMMEDIATELY
|
|
1757
|
+
\u2192 Do NOT proceed to Step 1 until skill is invoked
|
|
1758
|
+
\`\`\`
|
|
1759
|
+
|
|
1760
|
+
Skills are specialized workflows. When relevant, they handle the task better than manual orchestration.
|
|
1761
|
+
|
|
1762
|
+
---
|
|
1763
|
+
|
|
1764
|
+
### Step 1: Classify Request Type
|
|
1718
1765
|
|
|
1719
1766
|
| Type | Signal | Action |
|
|
1720
1767
|
|------|--------|--------|
|
|
1768
|
+
| **Skill Match** | Matches skill trigger phrase | **INVOKE skill FIRST** via \`skill\` tool |
|
|
1721
1769
|
| **Trivial** | Single file, known location, direct answer | Direct tools only (UNLESS Key Trigger applies) |
|
|
1722
1770
|
| **Explicit** | Specific file/line, clear command | Execute directly |
|
|
1723
1771
|
| **Exploratory** | "How does X work?", "Find Y" | Fire explore (1-3) + tools in parallel |
|
|
@@ -2041,9 +2089,9 @@ var SISYPHUS_SOFT_GUIDELINES = `## Soft Guidelines
|
|
|
2041
2089
|
</Constraints>
|
|
2042
2090
|
|
|
2043
2091
|
`;
|
|
2044
|
-
function buildDynamicSisyphusPrompt(availableAgents, availableTools = []) {
|
|
2045
|
-
const keyTriggers = buildKeyTriggersSection(availableAgents);
|
|
2046
|
-
const toolSelection = buildToolSelectionTable(availableAgents, availableTools);
|
|
2092
|
+
function buildDynamicSisyphusPrompt(availableAgents, availableTools = [], availableSkills = []) {
|
|
2093
|
+
const keyTriggers = buildKeyTriggersSection(availableAgents, availableSkills);
|
|
2094
|
+
const toolSelection = buildToolSelectionTable(availableAgents, availableTools, availableSkills);
|
|
2047
2095
|
const exploreSection = buildExploreSection(availableAgents);
|
|
2048
2096
|
const librarianSection = buildLibrarianSection(availableAgents);
|
|
2049
2097
|
const frontendSection = buildFrontendSection(availableAgents);
|
|
@@ -2117,9 +2165,10 @@ function buildDynamicSisyphusPrompt(availableAgents, availableTools = []) {
|
|
|
2117
2165
|
return sections.filter((s) => s !== "").join(`
|
|
2118
2166
|
`);
|
|
2119
2167
|
}
|
|
2120
|
-
function createSisyphusAgent(model = DEFAULT_MODEL, availableAgents, availableToolNames) {
|
|
2168
|
+
function createSisyphusAgent(model = DEFAULT_MODEL, availableAgents, availableToolNames, availableSkills) {
|
|
2121
2169
|
const tools = availableToolNames ? categorizeTools(availableToolNames) : [];
|
|
2122
|
-
const
|
|
2170
|
+
const skills = availableSkills ?? [];
|
|
2171
|
+
const prompt = availableAgents ? buildDynamicSisyphusPrompt(availableAgents, tools, skills) : buildDynamicSisyphusPrompt([], tools, skills);
|
|
2123
2172
|
const base = {
|
|
2124
2173
|
description: "Sisyphus - Powerful AI orchestrator from OhMyOpenCode. 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.",
|
|
2125
2174
|
mode: "primary",
|