oh-my-opencode 3.0.0-beta.1 → 3.0.0-beta.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.ja.md +6 -3
- package/README.md +6 -3
- package/README.zh-cn.md +6 -3
- package/dist/agents/metis.d.ts +1 -0
- package/dist/agents/orchestrator-sisyphus.d.ts +1 -0
- package/dist/cli/index.js +9 -3
- package/dist/config/schema.d.ts +204 -0
- package/dist/hooks/auto-update-checker/index.d.ts +3 -0
- package/dist/hooks/auto-update-checker/index.test.d.ts +1 -0
- package/dist/index.js +143 -64
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
> [!NOTE]
|
|
2
2
|
>
|
|
3
|
-
>
|
|
3
|
+
> [](https://sisyphuslabs.ai)
|
|
4
|
+
> > **Sisyphusの完全製品化バージョンを構築中です。フロンティアエージェントの未来を定義します。<br />[こちら](https://sisyphuslabs.ai)からウェイトリストに参加してください。**
|
|
5
|
+
|
|
6
|
+
> [!TIP]
|
|
4
7
|
>
|
|
5
|
-
> [](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.1)
|
|
9
|
+
> > **オーケストレーターがベータ版で利用可能になりました。`oh-my-opencode@3.0.0-beta.1`を使用してインストールしてください。**
|
|
7
10
|
>
|
|
8
11
|
> 一緒に歩みましょう!
|
|
9
12
|
>
|
package/README.md
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
> [!NOTE]
|
|
2
2
|
>
|
|
3
|
-
>
|
|
3
|
+
> [](https://sisyphuslabs.ai)
|
|
4
|
+
> > **We're building a fully productized version of Sisyphus to define the future of frontier agents. <br />Join the waitlist [here](https://sisyphuslabs.ai).**
|
|
5
|
+
|
|
6
|
+
> [!TIP]
|
|
4
7
|
>
|
|
5
|
-
> [](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.1)
|
|
9
|
+
> > **The Orchestrator is now available in beta. Use `oh-my-opencode@3.0.0-beta.1` to install it.**
|
|
7
10
|
>
|
|
8
11
|
> Be with us!
|
|
9
12
|
>
|
package/README.zh-cn.md
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
> [!NOTE]
|
|
2
2
|
>
|
|
3
|
-
>
|
|
3
|
+
> [](https://sisyphuslabs.ai)
|
|
4
|
+
> > **我们正在构建Sisyphus的完全产品化版本,定义前沿代理的未来。<br />[点击此处](https://sisyphuslabs.ai)加入候补名单。**
|
|
5
|
+
|
|
6
|
+
> [!TIP]
|
|
4
7
|
>
|
|
5
|
-
> [](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.1)
|
|
9
|
+
> > **编排器现已推出测试版。使用`oh-my-opencode@3.0.0-beta.1`来安装。**
|
|
7
10
|
>
|
|
8
11
|
> 与我们同行!
|
|
9
12
|
>
|
package/dist/agents/metis.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ import type { AgentPromptMetadata } from "./types";
|
|
|
14
14
|
* - Prepare directives for the planner agent
|
|
15
15
|
*/
|
|
16
16
|
export declare const METIS_SYSTEM_PROMPT = "# Metis - Pre-Planning Consultant\n\n## CONSTRAINTS\n\n- **READ-ONLY**: You analyze, question, advise. You do NOT implement or modify files.\n- **OUTPUT**: Your analysis feeds into Prometheus (planner). Be actionable.\n\n---\n\n## PHASE 0: INTENT CLASSIFICATION (MANDATORY FIRST STEP)\n\nBefore ANY analysis, classify the work intent. This determines your entire strategy.\n\n### Step 1: Identify Intent Type\n\n| Intent | Signals | Your Primary Focus |\n|--------|---------|-------------------|\n| **Refactoring** | \"refactor\", \"restructure\", \"clean up\", changes to existing code | SAFETY: regression prevention, behavior preservation |\n| **Build from Scratch** | \"create new\", \"add feature\", greenfield, new module | DISCOVERY: explore patterns first, informed questions |\n| **Mid-sized Task** | Scoped feature, specific deliverable, bounded work | GUARDRAILS: exact deliverables, explicit exclusions |\n| **Collaborative** | \"help me plan\", \"let's figure out\", wants dialogue | INTERACTIVE: incremental clarity through dialogue |\n| **Architecture** | \"how should we structure\", system design, infrastructure | STRATEGIC: long-term impact, Oracle recommendation |\n| **Research** | Investigation needed, goal exists but path unclear | INVESTIGATION: exit criteria, parallel probes |\n\n### Step 2: Validate Classification\n\nConfirm:\n- [ ] Intent type is clear from request\n- [ ] If ambiguous, ASK before proceeding\n\n---\n\n## PHASE 1: INTENT-SPECIFIC ANALYSIS\n\n### IF REFACTORING\n\n**Your Mission**: Ensure zero regressions, behavior preservation.\n\n**Tool Guidance** (recommend to Prometheus):\n- `lsp_find_references`: Map all usages before changes\n- `lsp_rename` / `lsp_prepare_rename`: Safe symbol renames\n- `ast_grep_search`: Find structural patterns to preserve\n- `ast_grep_replace(dryRun=true)`: Preview transformations\n\n**Questions to Ask**:\n1. What specific behavior must be preserved? (test commands to verify)\n2. What's the rollback strategy if something breaks?\n3. Should this change propagate to related code, or stay isolated?\n\n**Directives for Prometheus**:\n- MUST: Define pre-refactor verification (exact test commands + expected outputs)\n- MUST: Verify after EACH change, not just at the end\n- MUST NOT: Change behavior while restructuring\n- MUST NOT: Refactor adjacent code not in scope\n\n---\n\n### IF BUILD FROM SCRATCH\n\n**Your Mission**: Discover patterns before asking, then surface hidden requirements.\n\n**Pre-Analysis Actions** (YOU should do before questioning):\n```\n// Launch these explore agents FIRST\ncall_omo_agent(subagent_type=\"explore\", prompt=\"Find similar implementations...\")\ncall_omo_agent(subagent_type=\"explore\", prompt=\"Find project patterns for this type...\")\ncall_omo_agent(subagent_type=\"librarian\", prompt=\"Find best practices for [technology]...\")\n```\n\n**Questions to Ask** (AFTER exploration):\n1. Found pattern X in codebase. Should new code follow this, or deviate? Why?\n2. What should explicitly NOT be built? (scope boundaries)\n3. What's the minimum viable version vs full vision?\n\n**Directives for Prometheus**:\n- MUST: Follow patterns from `[discovered file:lines]`\n- MUST: Define \"Must NOT Have\" section (AI over-engineering prevention)\n- MUST NOT: Invent new patterns when existing ones work\n- MUST NOT: Add features not explicitly requested\n\n---\n\n### IF MID-SIZED TASK\n\n**Your Mission**: Define exact boundaries. AI slop prevention is critical.\n\n**Questions to Ask**:\n1. What are the EXACT outputs? (files, endpoints, UI elements)\n2. What must NOT be included? (explicit exclusions)\n3. What are the hard boundaries? (no touching X, no changing Y)\n4. Acceptance criteria: how do we know it's done?\n\n**AI-Slop Patterns to Flag**:\n| Pattern | Example | Ask |\n|---------|---------|-----|\n| Scope inflation | \"Also tests for adjacent modules\" | \"Should I add tests beyond [TARGET]?\" |\n| Premature abstraction | \"Extracted to utility\" | \"Do you want abstraction, or inline?\" |\n| Over-validation | \"15 error checks for 3 inputs\" | \"Error handling: minimal or comprehensive?\" |\n| Documentation bloat | \"Added JSDoc everywhere\" | \"Documentation: none, minimal, or full?\" |\n\n**Directives for Prometheus**:\n- MUST: \"Must Have\" section with exact deliverables\n- MUST: \"Must NOT Have\" section with explicit exclusions\n- MUST: Per-task guardrails (what each task should NOT do)\n- MUST NOT: Exceed defined scope\n\n---\n\n### IF COLLABORATIVE\n\n**Your Mission**: Build understanding through dialogue. No rush.\n\n**Behavior**:\n1. Start with open-ended exploration questions\n2. Use explore/librarian to gather context as user provides direction\n3. Incrementally refine understanding\n4. Don't finalize until user confirms direction\n\n**Questions to Ask**:\n1. What problem are you trying to solve? (not what solution you want)\n2. What constraints exist? (time, tech stack, team skills)\n3. What trade-offs are acceptable? (speed vs quality vs cost)\n\n**Directives for Prometheus**:\n- MUST: Record all user decisions in \"Key Decisions\" section\n- MUST: Flag assumptions explicitly\n- MUST NOT: Proceed without user confirmation on major decisions\n\n---\n\n### IF ARCHITECTURE\n\n**Your Mission**: Strategic analysis. Long-term impact assessment.\n\n**Oracle Consultation** (RECOMMEND to Prometheus):\n```\nTask(\n subagent_type=\"oracle\",\n prompt=\"Architecture consultation:\n Request: [user's request]\n Current state: [gathered context]\n \n Analyze: options, trade-offs, long-term implications, risks\"\n)\n```\n\n**Questions to Ask**:\n1. What's the expected lifespan of this design?\n2. What scale/load should it handle?\n3. What are the non-negotiable constraints?\n4. What existing systems must this integrate with?\n\n**AI-Slop Guardrails for Architecture**:\n- MUST NOT: Over-engineer for hypothetical future requirements\n- MUST NOT: Add unnecessary abstraction layers\n- MUST NOT: Ignore existing patterns for \"better\" design\n- MUST: Document decisions and rationale\n\n**Directives for Prometheus**:\n- MUST: Consult Oracle before finalizing plan\n- MUST: Document architectural decisions with rationale\n- MUST: Define \"minimum viable architecture\"\n- MUST NOT: Introduce complexity without justification\n\n---\n\n### IF RESEARCH\n\n**Your Mission**: Define investigation boundaries and exit criteria.\n\n**Questions to Ask**:\n1. What's the goal of this research? (what decision will it inform?)\n2. How do we know research is complete? (exit criteria)\n3. What's the time box? (when to stop and synthesize)\n4. What outputs are expected? (report, recommendations, prototype?)\n\n**Investigation Structure**:\n```\n// Parallel probes\ncall_omo_agent(subagent_type=\"explore\", prompt=\"Find how X is currently handled...\")\ncall_omo_agent(subagent_type=\"librarian\", prompt=\"Find official docs for Y...\")\ncall_omo_agent(subagent_type=\"librarian\", prompt=\"Find OSS implementations of Z...\")\n```\n\n**Directives for Prometheus**:\n- MUST: Define clear exit criteria\n- MUST: Specify parallel investigation tracks\n- MUST: Define synthesis format (how to present findings)\n- MUST NOT: Research indefinitely without convergence\n\n---\n\n## OUTPUT FORMAT\n\n```markdown\n## Intent Classification\n**Type**: [Refactoring | Build | Mid-sized | Collaborative | Architecture | Research]\n**Confidence**: [High | Medium | Low]\n**Rationale**: [Why this classification]\n\n## Pre-Analysis Findings\n[Results from explore/librarian agents if launched]\n[Relevant codebase patterns discovered]\n\n## Questions for User\n1. [Most critical question first]\n2. [Second priority]\n3. [Third priority]\n\n## Identified Risks\n- [Risk 1]: [Mitigation]\n- [Risk 2]: [Mitigation]\n\n## Directives for Prometheus\n- MUST: [Required action]\n- MUST: [Required action]\n- MUST NOT: [Forbidden action]\n- MUST NOT: [Forbidden action]\n- PATTERN: Follow `[file:lines]`\n- TOOL: Use `[specific tool]` for [purpose]\n\n## Recommended Approach\n[1-2 sentence summary of how to proceed]\n```\n\n---\n\n## TOOL REFERENCE\n\n| Tool | When to Use | Intent |\n|------|-------------|--------|\n| `lsp_find_references` | Map impact before changes | Refactoring |\n| `lsp_rename` | Safe symbol renames | Refactoring |\n| `ast_grep_search` | Find structural patterns | Refactoring, Build |\n| `explore` agent | Codebase pattern discovery | Build, Research |\n| `librarian` agent | External docs, best practices | Build, Architecture, Research |\n| `oracle` agent | Read-only consultation. High-IQ debugging, architecture | Architecture |\n\n---\n\n## CRITICAL RULES\n\n**NEVER**:\n- Skip intent classification\n- Ask generic questions (\"What's the scope?\")\n- Proceed without addressing ambiguity\n- Make assumptions about user's codebase\n\n**ALWAYS**:\n- Classify intent FIRST\n- Be specific (\"Should this change UserService only, or also AuthService?\")\n- Explore before asking (for Build/Research intents)\n- Provide actionable directives for Prometheus\n";
|
|
17
|
+
export declare function createMetisAgent(model?: string): AgentConfig;
|
|
17
18
|
export declare const metisAgent: AgentConfig;
|
|
18
19
|
export declare const metisPromptMetadata: AgentPromptMetadata;
|
|
@@ -9,6 +9,7 @@ import type { CategoryConfig } from "../config/schema";
|
|
|
9
9
|
* You are the conductor of a symphony of specialized agents.
|
|
10
10
|
*/
|
|
11
11
|
export interface OrchestratorContext {
|
|
12
|
+
model?: string;
|
|
12
13
|
availableAgents?: AvailableAgent[];
|
|
13
14
|
availableSkills?: AvailableSkill[];
|
|
14
15
|
userCategories?: Record<string, CategoryConfig>;
|
package/dist/cli/index.js
CHANGED
|
@@ -22556,7 +22556,9 @@ var BuiltinAgentNameSchema = exports_external.enum([
|
|
|
22556
22556
|
"frontend-ui-ux-engineer",
|
|
22557
22557
|
"document-writer",
|
|
22558
22558
|
"multimodal-looker",
|
|
22559
|
-
"Metis (Plan Consultant)"
|
|
22559
|
+
"Metis (Plan Consultant)",
|
|
22560
|
+
"Momus (Plan Reviewer)",
|
|
22561
|
+
"orchestrator-sisyphus"
|
|
22560
22562
|
]);
|
|
22561
22563
|
var BuiltinSkillNameSchema = exports_external.enum([
|
|
22562
22564
|
"playwright",
|
|
@@ -22570,12 +22572,14 @@ var OverridableAgentNameSchema = exports_external.enum([
|
|
|
22570
22572
|
"OpenCode-Builder",
|
|
22571
22573
|
"Prometheus (Planner)",
|
|
22572
22574
|
"Metis (Plan Consultant)",
|
|
22575
|
+
"Momus (Plan Reviewer)",
|
|
22573
22576
|
"oracle",
|
|
22574
22577
|
"librarian",
|
|
22575
22578
|
"explore",
|
|
22576
22579
|
"frontend-ui-ux-engineer",
|
|
22577
22580
|
"document-writer",
|
|
22578
|
-
"multimodal-looker"
|
|
22581
|
+
"multimodal-looker",
|
|
22582
|
+
"orchestrator-sisyphus"
|
|
22579
22583
|
]);
|
|
22580
22584
|
var HookNameSchema = exports_external.enum([
|
|
22581
22585
|
"todo-continuation-enforcer",
|
|
@@ -22636,12 +22640,14 @@ var AgentOverridesSchema = exports_external.object({
|
|
|
22636
22640
|
"OpenCode-Builder": AgentOverrideConfigSchema.optional(),
|
|
22637
22641
|
"Prometheus (Planner)": AgentOverrideConfigSchema.optional(),
|
|
22638
22642
|
"Metis (Plan Consultant)": AgentOverrideConfigSchema.optional(),
|
|
22643
|
+
"Momus (Plan Reviewer)": AgentOverrideConfigSchema.optional(),
|
|
22639
22644
|
oracle: AgentOverrideConfigSchema.optional(),
|
|
22640
22645
|
librarian: AgentOverrideConfigSchema.optional(),
|
|
22641
22646
|
explore: AgentOverrideConfigSchema.optional(),
|
|
22642
22647
|
"frontend-ui-ux-engineer": AgentOverrideConfigSchema.optional(),
|
|
22643
22648
|
"document-writer": AgentOverrideConfigSchema.optional(),
|
|
22644
|
-
"multimodal-looker": AgentOverrideConfigSchema.optional()
|
|
22649
|
+
"multimodal-looker": AgentOverrideConfigSchema.optional(),
|
|
22650
|
+
"orchestrator-sisyphus": AgentOverrideConfigSchema.optional()
|
|
22645
22651
|
});
|
|
22646
22652
|
var ClaudeCodeConfigSchema = exports_external.object({
|
|
22647
22653
|
mcp: exports_external.boolean().optional(),
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare const BuiltinAgentNameSchema: z.ZodEnum<{
|
|
|
8
8
|
"document-writer": "document-writer";
|
|
9
9
|
"multimodal-looker": "multimodal-looker";
|
|
10
10
|
"Metis (Plan Consultant)": "Metis (Plan Consultant)";
|
|
11
|
+
"Momus (Plan Reviewer)": "Momus (Plan Reviewer)";
|
|
12
|
+
"orchestrator-sisyphus": "orchestrator-sisyphus";
|
|
11
13
|
}>;
|
|
12
14
|
export declare const BuiltinSkillNameSchema: z.ZodEnum<{
|
|
13
15
|
playwright: "playwright";
|
|
@@ -23,6 +25,8 @@ export declare const OverridableAgentNameSchema: z.ZodEnum<{
|
|
|
23
25
|
"document-writer": "document-writer";
|
|
24
26
|
"multimodal-looker": "multimodal-looker";
|
|
25
27
|
"Metis (Plan Consultant)": "Metis (Plan Consultant)";
|
|
28
|
+
"Momus (Plan Reviewer)": "Momus (Plan Reviewer)";
|
|
29
|
+
"orchestrator-sisyphus": "orchestrator-sisyphus";
|
|
26
30
|
build: "build";
|
|
27
31
|
plan: "plan";
|
|
28
32
|
"OpenCode-Builder": "OpenCode-Builder";
|
|
@@ -37,6 +41,8 @@ export declare const AgentNameSchema: z.ZodEnum<{
|
|
|
37
41
|
"document-writer": "document-writer";
|
|
38
42
|
"multimodal-looker": "multimodal-looker";
|
|
39
43
|
"Metis (Plan Consultant)": "Metis (Plan Consultant)";
|
|
44
|
+
"Momus (Plan Reviewer)": "Momus (Plan Reviewer)";
|
|
45
|
+
"orchestrator-sisyphus": "orchestrator-sisyphus";
|
|
40
46
|
}>;
|
|
41
47
|
export declare const HookNameSchema: z.ZodEnum<{
|
|
42
48
|
"todo-continuation-enforcer": "todo-continuation-enforcer";
|
|
@@ -419,6 +425,55 @@ export declare const AgentOverridesSchema: z.ZodObject<{
|
|
|
419
425
|
}>>;
|
|
420
426
|
}, z.core.$strip>>;
|
|
421
427
|
}, z.core.$strip>>;
|
|
428
|
+
"Momus (Plan Reviewer)": z.ZodOptional<z.ZodObject<{
|
|
429
|
+
model: z.ZodOptional<z.ZodString>;
|
|
430
|
+
category: z.ZodOptional<z.ZodString>;
|
|
431
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
432
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
433
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
434
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
435
|
+
prompt_append: z.ZodOptional<z.ZodString>;
|
|
436
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
437
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
438
|
+
description: z.ZodOptional<z.ZodString>;
|
|
439
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
440
|
+
subagent: "subagent";
|
|
441
|
+
primary: "primary";
|
|
442
|
+
all: "all";
|
|
443
|
+
}>>;
|
|
444
|
+
color: z.ZodOptional<z.ZodString>;
|
|
445
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
446
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
447
|
+
allow: "allow";
|
|
448
|
+
ask: "ask";
|
|
449
|
+
deny: "deny";
|
|
450
|
+
}>>;
|
|
451
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
452
|
+
allow: "allow";
|
|
453
|
+
ask: "ask";
|
|
454
|
+
deny: "deny";
|
|
455
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
456
|
+
allow: "allow";
|
|
457
|
+
ask: "ask";
|
|
458
|
+
deny: "deny";
|
|
459
|
+
}>>]>>;
|
|
460
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
461
|
+
allow: "allow";
|
|
462
|
+
ask: "ask";
|
|
463
|
+
deny: "deny";
|
|
464
|
+
}>>;
|
|
465
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
466
|
+
allow: "allow";
|
|
467
|
+
ask: "ask";
|
|
468
|
+
deny: "deny";
|
|
469
|
+
}>>;
|
|
470
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
471
|
+
allow: "allow";
|
|
472
|
+
ask: "ask";
|
|
473
|
+
deny: "deny";
|
|
474
|
+
}>>;
|
|
475
|
+
}, z.core.$strip>>;
|
|
476
|
+
}, z.core.$strip>>;
|
|
422
477
|
oracle: z.ZodOptional<z.ZodObject<{
|
|
423
478
|
model: z.ZodOptional<z.ZodString>;
|
|
424
479
|
category: z.ZodOptional<z.ZodString>;
|
|
@@ -713,6 +768,55 @@ export declare const AgentOverridesSchema: z.ZodObject<{
|
|
|
713
768
|
}>>;
|
|
714
769
|
}, z.core.$strip>>;
|
|
715
770
|
}, z.core.$strip>>;
|
|
771
|
+
"orchestrator-sisyphus": z.ZodOptional<z.ZodObject<{
|
|
772
|
+
model: z.ZodOptional<z.ZodString>;
|
|
773
|
+
category: z.ZodOptional<z.ZodString>;
|
|
774
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
775
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
776
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
777
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
778
|
+
prompt_append: z.ZodOptional<z.ZodString>;
|
|
779
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
780
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
781
|
+
description: z.ZodOptional<z.ZodString>;
|
|
782
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
783
|
+
subagent: "subagent";
|
|
784
|
+
primary: "primary";
|
|
785
|
+
all: "all";
|
|
786
|
+
}>>;
|
|
787
|
+
color: z.ZodOptional<z.ZodString>;
|
|
788
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
789
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
790
|
+
allow: "allow";
|
|
791
|
+
ask: "ask";
|
|
792
|
+
deny: "deny";
|
|
793
|
+
}>>;
|
|
794
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
795
|
+
allow: "allow";
|
|
796
|
+
ask: "ask";
|
|
797
|
+
deny: "deny";
|
|
798
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
799
|
+
allow: "allow";
|
|
800
|
+
ask: "ask";
|
|
801
|
+
deny: "deny";
|
|
802
|
+
}>>]>>;
|
|
803
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
804
|
+
allow: "allow";
|
|
805
|
+
ask: "ask";
|
|
806
|
+
deny: "deny";
|
|
807
|
+
}>>;
|
|
808
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
809
|
+
allow: "allow";
|
|
810
|
+
ask: "ask";
|
|
811
|
+
deny: "deny";
|
|
812
|
+
}>>;
|
|
813
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
814
|
+
allow: "allow";
|
|
815
|
+
ask: "ask";
|
|
816
|
+
deny: "deny";
|
|
817
|
+
}>>;
|
|
818
|
+
}, z.core.$strip>>;
|
|
819
|
+
}, z.core.$strip>>;
|
|
716
820
|
}, z.core.$strip>;
|
|
717
821
|
export declare const ClaudeCodeConfigSchema: z.ZodObject<{
|
|
718
822
|
mcp: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -935,6 +1039,8 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
935
1039
|
"document-writer": "document-writer";
|
|
936
1040
|
"multimodal-looker": "multimodal-looker";
|
|
937
1041
|
"Metis (Plan Consultant)": "Metis (Plan Consultant)";
|
|
1042
|
+
"Momus (Plan Reviewer)": "Momus (Plan Reviewer)";
|
|
1043
|
+
"orchestrator-sisyphus": "orchestrator-sisyphus";
|
|
938
1044
|
}>>>;
|
|
939
1045
|
disabled_skills: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
940
1046
|
playwright: "playwright";
|
|
@@ -1273,6 +1379,55 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
1273
1379
|
}>>;
|
|
1274
1380
|
}, z.core.$strip>>;
|
|
1275
1381
|
}, z.core.$strip>>;
|
|
1382
|
+
"Momus (Plan Reviewer)": z.ZodOptional<z.ZodObject<{
|
|
1383
|
+
model: z.ZodOptional<z.ZodString>;
|
|
1384
|
+
category: z.ZodOptional<z.ZodString>;
|
|
1385
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1386
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
1387
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
1388
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
1389
|
+
prompt_append: z.ZodOptional<z.ZodString>;
|
|
1390
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
1391
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
1392
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1393
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
1394
|
+
subagent: "subagent";
|
|
1395
|
+
primary: "primary";
|
|
1396
|
+
all: "all";
|
|
1397
|
+
}>>;
|
|
1398
|
+
color: z.ZodOptional<z.ZodString>;
|
|
1399
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
1400
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
1401
|
+
allow: "allow";
|
|
1402
|
+
ask: "ask";
|
|
1403
|
+
deny: "deny";
|
|
1404
|
+
}>>;
|
|
1405
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
1406
|
+
allow: "allow";
|
|
1407
|
+
ask: "ask";
|
|
1408
|
+
deny: "deny";
|
|
1409
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
1410
|
+
allow: "allow";
|
|
1411
|
+
ask: "ask";
|
|
1412
|
+
deny: "deny";
|
|
1413
|
+
}>>]>>;
|
|
1414
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
1415
|
+
allow: "allow";
|
|
1416
|
+
ask: "ask";
|
|
1417
|
+
deny: "deny";
|
|
1418
|
+
}>>;
|
|
1419
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
1420
|
+
allow: "allow";
|
|
1421
|
+
ask: "ask";
|
|
1422
|
+
deny: "deny";
|
|
1423
|
+
}>>;
|
|
1424
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
1425
|
+
allow: "allow";
|
|
1426
|
+
ask: "ask";
|
|
1427
|
+
deny: "deny";
|
|
1428
|
+
}>>;
|
|
1429
|
+
}, z.core.$strip>>;
|
|
1430
|
+
}, z.core.$strip>>;
|
|
1276
1431
|
oracle: z.ZodOptional<z.ZodObject<{
|
|
1277
1432
|
model: z.ZodOptional<z.ZodString>;
|
|
1278
1433
|
category: z.ZodOptional<z.ZodString>;
|
|
@@ -1567,6 +1722,55 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
1567
1722
|
}>>;
|
|
1568
1723
|
}, z.core.$strip>>;
|
|
1569
1724
|
}, z.core.$strip>>;
|
|
1725
|
+
"orchestrator-sisyphus": z.ZodOptional<z.ZodObject<{
|
|
1726
|
+
model: z.ZodOptional<z.ZodString>;
|
|
1727
|
+
category: z.ZodOptional<z.ZodString>;
|
|
1728
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1729
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
1730
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
1731
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
1732
|
+
prompt_append: z.ZodOptional<z.ZodString>;
|
|
1733
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
1734
|
+
disable: z.ZodOptional<z.ZodBoolean>;
|
|
1735
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1736
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
1737
|
+
subagent: "subagent";
|
|
1738
|
+
primary: "primary";
|
|
1739
|
+
all: "all";
|
|
1740
|
+
}>>;
|
|
1741
|
+
color: z.ZodOptional<z.ZodString>;
|
|
1742
|
+
permission: z.ZodOptional<z.ZodObject<{
|
|
1743
|
+
edit: z.ZodOptional<z.ZodEnum<{
|
|
1744
|
+
allow: "allow";
|
|
1745
|
+
ask: "ask";
|
|
1746
|
+
deny: "deny";
|
|
1747
|
+
}>>;
|
|
1748
|
+
bash: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
1749
|
+
allow: "allow";
|
|
1750
|
+
ask: "ask";
|
|
1751
|
+
deny: "deny";
|
|
1752
|
+
}>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
1753
|
+
allow: "allow";
|
|
1754
|
+
ask: "ask";
|
|
1755
|
+
deny: "deny";
|
|
1756
|
+
}>>]>>;
|
|
1757
|
+
webfetch: z.ZodOptional<z.ZodEnum<{
|
|
1758
|
+
allow: "allow";
|
|
1759
|
+
ask: "ask";
|
|
1760
|
+
deny: "deny";
|
|
1761
|
+
}>>;
|
|
1762
|
+
doom_loop: z.ZodOptional<z.ZodEnum<{
|
|
1763
|
+
allow: "allow";
|
|
1764
|
+
ask: "ask";
|
|
1765
|
+
deny: "deny";
|
|
1766
|
+
}>>;
|
|
1767
|
+
external_directory: z.ZodOptional<z.ZodEnum<{
|
|
1768
|
+
allow: "allow";
|
|
1769
|
+
ask: "ask";
|
|
1770
|
+
deny: "deny";
|
|
1771
|
+
}>>;
|
|
1772
|
+
}, z.core.$strip>>;
|
|
1773
|
+
}, z.core.$strip>>;
|
|
1570
1774
|
}, z.core.$strip>>;
|
|
1571
1775
|
categories: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1572
1776
|
model: z.ZodString;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
2
|
import type { AutoUpdateCheckerOptions } from "./types";
|
|
3
|
+
export declare function isPrereleaseVersion(version: string): boolean;
|
|
4
|
+
export declare function isDistTag(version: string): boolean;
|
|
5
|
+
export declare function isPrereleaseOrDistTag(pinnedVersion: string | null): boolean;
|
|
3
6
|
export declare function createAutoUpdateCheckerHook(ctx: PluginInput, options?: AutoUpdateCheckerOptions): {
|
|
4
7
|
event: ({ event }: {
|
|
5
8
|
event: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.js
CHANGED
|
@@ -19567,6 +19567,18 @@ async function runBunInstallWithDetails() {
|
|
|
19567
19567
|
|
|
19568
19568
|
// src/hooks/auto-update-checker/index.ts
|
|
19569
19569
|
var SISYPHUS_SPINNER = ["\xB7", "\u2022", "\u25CF", "\u25CB", "\u25CC", "\u25E6", " "];
|
|
19570
|
+
function isPrereleaseVersion(version) {
|
|
19571
|
+
return version.includes("-");
|
|
19572
|
+
}
|
|
19573
|
+
function isDistTag(version) {
|
|
19574
|
+
const startsWithDigit = /^\d/.test(version);
|
|
19575
|
+
return !startsWithDigit;
|
|
19576
|
+
}
|
|
19577
|
+
function isPrereleaseOrDistTag(pinnedVersion) {
|
|
19578
|
+
if (!pinnedVersion)
|
|
19579
|
+
return false;
|
|
19580
|
+
return isPrereleaseVersion(pinnedVersion) || isDistTag(pinnedVersion);
|
|
19581
|
+
}
|
|
19570
19582
|
function createAutoUpdateCheckerHook(ctx, options = {}) {
|
|
19571
19583
|
const { showStartupToast = true, isSisyphusEnabled = false, autoUpdate = true } = options;
|
|
19572
19584
|
const getToastMessage = (isUpdate, latestVersion) => {
|
|
@@ -19637,7 +19649,15 @@ async function runBackgroundUpdateCheck(ctx, autoUpdate, getToastMessage) {
|
|
|
19637
19649
|
log("[auto-update-checker] Auto-update disabled, notification only");
|
|
19638
19650
|
return;
|
|
19639
19651
|
}
|
|
19652
|
+
if (isPrereleaseVersion(currentVersion)) {
|
|
19653
|
+
log(`[auto-update-checker] Skipping auto-update for prerelease version: ${currentVersion}`);
|
|
19654
|
+
return;
|
|
19655
|
+
}
|
|
19640
19656
|
if (pluginInfo.isPinned) {
|
|
19657
|
+
if (isPrereleaseOrDistTag(pluginInfo.pinnedVersion)) {
|
|
19658
|
+
log(`[auto-update-checker] Skipping auto-update for prerelease/dist-tag: ${pluginInfo.pinnedVersion}`);
|
|
19659
|
+
return;
|
|
19660
|
+
}
|
|
19641
19661
|
const updated = updatePinnedVersion(pluginInfo.configPath, pluginInfo.entry, latestVersion);
|
|
19642
19662
|
if (!updated) {
|
|
19643
19663
|
await showUpdateAvailableToast(ctx, latestVersion, getToastMessage);
|
|
@@ -19755,6 +19775,8 @@ var TARGET_TOOLS = new Set([
|
|
|
19755
19775
|
"safe_glob",
|
|
19756
19776
|
"webfetch",
|
|
19757
19777
|
"context7_resolve-library-id",
|
|
19778
|
+
"context7_query-docs",
|
|
19779
|
+
"websearch_web_search_exa",
|
|
19758
19780
|
"context7_get-library-docs",
|
|
19759
19781
|
"grep_app_searchgithub"
|
|
19760
19782
|
]);
|
|
@@ -48454,7 +48476,9 @@ var BuiltinAgentNameSchema = exports_external.enum([
|
|
|
48454
48476
|
"frontend-ui-ux-engineer",
|
|
48455
48477
|
"document-writer",
|
|
48456
48478
|
"multimodal-looker",
|
|
48457
|
-
"Metis (Plan Consultant)"
|
|
48479
|
+
"Metis (Plan Consultant)",
|
|
48480
|
+
"Momus (Plan Reviewer)",
|
|
48481
|
+
"orchestrator-sisyphus"
|
|
48458
48482
|
]);
|
|
48459
48483
|
var BuiltinSkillNameSchema = exports_external.enum([
|
|
48460
48484
|
"playwright",
|
|
@@ -48468,12 +48492,14 @@ var OverridableAgentNameSchema = exports_external.enum([
|
|
|
48468
48492
|
"OpenCode-Builder",
|
|
48469
48493
|
"Prometheus (Planner)",
|
|
48470
48494
|
"Metis (Plan Consultant)",
|
|
48495
|
+
"Momus (Plan Reviewer)",
|
|
48471
48496
|
"oracle",
|
|
48472
48497
|
"librarian",
|
|
48473
48498
|
"explore",
|
|
48474
48499
|
"frontend-ui-ux-engineer",
|
|
48475
48500
|
"document-writer",
|
|
48476
|
-
"multimodal-looker"
|
|
48501
|
+
"multimodal-looker",
|
|
48502
|
+
"orchestrator-sisyphus"
|
|
48477
48503
|
]);
|
|
48478
48504
|
var HookNameSchema = exports_external.enum([
|
|
48479
48505
|
"todo-continuation-enforcer",
|
|
@@ -48534,12 +48560,14 @@ var AgentOverridesSchema = exports_external.object({
|
|
|
48534
48560
|
"OpenCode-Builder": AgentOverrideConfigSchema.optional(),
|
|
48535
48561
|
"Prometheus (Planner)": AgentOverrideConfigSchema.optional(),
|
|
48536
48562
|
"Metis (Plan Consultant)": AgentOverrideConfigSchema.optional(),
|
|
48563
|
+
"Momus (Plan Reviewer)": AgentOverrideConfigSchema.optional(),
|
|
48537
48564
|
oracle: AgentOverrideConfigSchema.optional(),
|
|
48538
48565
|
librarian: AgentOverrideConfigSchema.optional(),
|
|
48539
48566
|
explore: AgentOverrideConfigSchema.optional(),
|
|
48540
48567
|
"frontend-ui-ux-engineer": AgentOverrideConfigSchema.optional(),
|
|
48541
48568
|
"document-writer": AgentOverrideConfigSchema.optional(),
|
|
48542
|
-
"multimodal-looker": AgentOverrideConfigSchema.optional()
|
|
48569
|
+
"multimodal-looker": AgentOverrideConfigSchema.optional(),
|
|
48570
|
+
"orchestrator-sisyphus": AgentOverrideConfigSchema.optional()
|
|
48543
48571
|
});
|
|
48544
48572
|
var ClaudeCodeConfigSchema = exports_external.object({
|
|
48545
48573
|
mcp: exports_external.boolean().optional(),
|
|
@@ -49759,7 +49787,7 @@ function createOracleAgent(model = DEFAULT_MODEL2) {
|
|
|
49759
49787
|
var oracleAgent = createOracleAgent();
|
|
49760
49788
|
|
|
49761
49789
|
// src/agents/librarian.ts
|
|
49762
|
-
var DEFAULT_MODEL3 = "
|
|
49790
|
+
var DEFAULT_MODEL3 = "anthropic/claude-sonnet-4-5";
|
|
49763
49791
|
var LIBRARIAN_PROMPT_METADATA = {
|
|
49764
49792
|
category: "exploration",
|
|
49765
49793
|
cost: "CHEAP",
|
|
@@ -49777,24 +49805,17 @@ var LIBRARIAN_PROMPT_METADATA = {
|
|
|
49777
49805
|
]
|
|
49778
49806
|
};
|
|
49779
49807
|
function createLibrarianAgent(model = DEFAULT_MODEL3) {
|
|
49780
|
-
const restrictions = createAgentToolRestrictions([
|
|
49781
|
-
"write",
|
|
49782
|
-
"edit",
|
|
49783
|
-
"task",
|
|
49784
|
-
"sisyphus_task",
|
|
49785
|
-
"call_omo_agent"
|
|
49786
|
-
]);
|
|
49787
49808
|
return {
|
|
49788
49809
|
description: "Specialized codebase understanding agent for multi-repository analysis, searching remote codebases, retrieving official documentation, and finding implementation examples using GitHub CLI, Context7, and Web Search. MUST BE USED when users ask to look up code in remote repositories, explain library internals, or find usage examples in open source.",
|
|
49789
49810
|
mode: "subagent",
|
|
49790
49811
|
model,
|
|
49791
49812
|
temperature: 0.1,
|
|
49792
|
-
|
|
49813
|
+
tools: { write: false, edit: false, background_task: false },
|
|
49793
49814
|
prompt: `# THE LIBRARIAN
|
|
49794
49815
|
|
|
49795
49816
|
You are **THE LIBRARIAN**, a specialized open-source codebase understanding agent.
|
|
49796
49817
|
|
|
49797
|
-
Your job: Answer questions about open-source libraries
|
|
49818
|
+
Your job: Answer questions about open-source libraries by finding **EVIDENCE** with **GitHub permalinks**.
|
|
49798
49819
|
|
|
49799
49820
|
## CRITICAL: DATE AWARENESS
|
|
49800
49821
|
|
|
@@ -49806,20 +49827,64 @@ Your job: Answer questions about open-source libraries. Provide **EVIDENCE** wit
|
|
|
49806
49827
|
|
|
49807
49828
|
---
|
|
49808
49829
|
|
|
49809
|
-
## PHASE 0:
|
|
49830
|
+
## PHASE 0: REQUEST CLASSIFICATION (MANDATORY FIRST STEP)
|
|
49810
49831
|
|
|
49811
|
-
|
|
49812
|
-
|
|
49813
|
-
**Search when**: version-specific info, implementation internals, recent changes, unfamiliar libraries, user explicitly requests source/examples.
|
|
49814
|
-
|
|
49815
|
-
**If search needed**, classify into:
|
|
49832
|
+
Classify EVERY request into one of these categories before taking action:
|
|
49816
49833
|
|
|
49817
49834
|
| Type | Trigger Examples | Tools |
|
|
49818
49835
|
|------|------------------|-------|
|
|
49819
|
-
| **TYPE A: CONCEPTUAL** | "How do I use X?", "Best practice for Y?" |
|
|
49836
|
+
| **TYPE A: CONCEPTUAL** | "How do I use X?", "Best practice for Y?" | Doc Discovery \u2192 context7 + websearch |
|
|
49820
49837
|
| **TYPE B: IMPLEMENTATION** | "How does X implement Y?", "Show me source of Z" | gh clone + read + blame |
|
|
49821
|
-
| **TYPE C: CONTEXT** | "Why was this changed?", "
|
|
49822
|
-
| **TYPE D: COMPREHENSIVE** | Complex/ambiguous requests |
|
|
49838
|
+
| **TYPE C: CONTEXT** | "Why was this changed?", "History of X?" | gh issues/prs + git log/blame |
|
|
49839
|
+
| **TYPE D: COMPREHENSIVE** | Complex/ambiguous requests | Doc Discovery \u2192 ALL tools |
|
|
49840
|
+
|
|
49841
|
+
---
|
|
49842
|
+
|
|
49843
|
+
## PHASE 0.5: DOCUMENTATION DISCOVERY (FOR TYPE A & D)
|
|
49844
|
+
|
|
49845
|
+
**When to execute**: Before TYPE A or TYPE D investigations involving external libraries/frameworks.
|
|
49846
|
+
|
|
49847
|
+
### Step 1: Find Official Documentation
|
|
49848
|
+
\`\`\`
|
|
49849
|
+
websearch("library-name official documentation site")
|
|
49850
|
+
\`\`\`
|
|
49851
|
+
- Identify the **official documentation URL** (not blogs, not tutorials)
|
|
49852
|
+
- Note the base URL (e.g., \`https://docs.example.com\`)
|
|
49853
|
+
|
|
49854
|
+
### Step 2: Version Check (if version specified)
|
|
49855
|
+
If user mentions a specific version (e.g., "React 18", "Next.js 14", "v2.x"):
|
|
49856
|
+
\`\`\`
|
|
49857
|
+
websearch("library-name v{version} documentation")
|
|
49858
|
+
// OR check if docs have version selector:
|
|
49859
|
+
webfetch(official_docs_url + "/versions")
|
|
49860
|
+
// or
|
|
49861
|
+
webfetch(official_docs_url + "/v{version}")
|
|
49862
|
+
\`\`\`
|
|
49863
|
+
- Confirm you're looking at the **correct version's documentation**
|
|
49864
|
+
- Many docs have versioned URLs: \`/docs/v2/\`, \`/v14/\`, etc.
|
|
49865
|
+
|
|
49866
|
+
### Step 3: Sitemap Discovery (understand doc structure)
|
|
49867
|
+
\`\`\`
|
|
49868
|
+
webfetch(official_docs_base_url + "/sitemap.xml")
|
|
49869
|
+
// Fallback options:
|
|
49870
|
+
webfetch(official_docs_base_url + "/sitemap-0.xml")
|
|
49871
|
+
webfetch(official_docs_base_url + "/docs/sitemap.xml")
|
|
49872
|
+
\`\`\`
|
|
49873
|
+
- Parse sitemap to understand documentation structure
|
|
49874
|
+
- Identify relevant sections for the user's question
|
|
49875
|
+
- This prevents random searching\u2014you now know WHERE to look
|
|
49876
|
+
|
|
49877
|
+
### Step 4: Targeted Investigation
|
|
49878
|
+
With sitemap knowledge, fetch the SPECIFIC documentation pages relevant to the query:
|
|
49879
|
+
\`\`\`
|
|
49880
|
+
webfetch(specific_doc_page_from_sitemap)
|
|
49881
|
+
context7_query-docs(libraryId: id, query: "specific topic")
|
|
49882
|
+
\`\`\`
|
|
49883
|
+
|
|
49884
|
+
**Skip Doc Discovery when**:
|
|
49885
|
+
- TYPE B (implementation) - you're cloning repos anyway
|
|
49886
|
+
- TYPE C (context/history) - you're looking at issues/PRs
|
|
49887
|
+
- Library has no official docs (rare OSS projects)
|
|
49823
49888
|
|
|
49824
49889
|
---
|
|
49825
49890
|
|
|
@@ -49828,15 +49893,15 @@ Your job: Answer questions about open-source libraries. Provide **EVIDENCE** wit
|
|
|
49828
49893
|
### TYPE A: CONCEPTUAL QUESTION
|
|
49829
49894
|
**Trigger**: "How do I...", "What is...", "Best practice for...", rough/general questions
|
|
49830
49895
|
|
|
49831
|
-
**
|
|
49896
|
+
**Execute Documentation Discovery FIRST (Phase 0.5)**, then:
|
|
49832
49897
|
\`\`\`
|
|
49833
49898
|
Tool 1: context7_resolve-library-id("library-name")
|
|
49834
|
-
\u2192 then
|
|
49835
|
-
Tool 2:
|
|
49836
|
-
Tool 3 (
|
|
49899
|
+
\u2192 then context7_query-docs(libraryId: id, query: "specific-topic")
|
|
49900
|
+
Tool 2: webfetch(relevant_pages_from_sitemap) // Targeted, not random
|
|
49901
|
+
Tool 3: grep_app_searchGitHub(query: "usage pattern", language: ["TypeScript"])
|
|
49837
49902
|
\`\`\`
|
|
49838
49903
|
|
|
49839
|
-
**Output**: Summarize findings with links to official docs and real-world examples.
|
|
49904
|
+
**Output**: Summarize findings with links to official docs (versioned if applicable) and real-world examples.
|
|
49840
49905
|
|
|
49841
49906
|
---
|
|
49842
49907
|
|
|
@@ -49860,7 +49925,7 @@ Step 4: Construct permalink
|
|
|
49860
49925
|
https://github.com/owner/repo/blob/<sha>/path/to/file#L10-L20
|
|
49861
49926
|
\`\`\`
|
|
49862
49927
|
|
|
49863
|
-
**
|
|
49928
|
+
**Parallel acceleration (4+ calls)**:
|
|
49864
49929
|
\`\`\`
|
|
49865
49930
|
Tool 1: gh repo clone owner/repo \${TMPDIR:-/tmp}/repo -- --depth 1
|
|
49866
49931
|
Tool 2: grep_app_searchGitHub(query: "function_name", repo: "owner/repo")
|
|
@@ -49873,7 +49938,7 @@ Tool 4: context7_get-library-docs(id, topic: "relevant-api")
|
|
|
49873
49938
|
### TYPE C: CONTEXT & HISTORY
|
|
49874
49939
|
**Trigger**: "Why was this changed?", "What's the history?", "Related issues/PRs?"
|
|
49875
49940
|
|
|
49876
|
-
**
|
|
49941
|
+
**Execute in parallel (4+ calls)**:
|
|
49877
49942
|
\`\`\`
|
|
49878
49943
|
Tool 1: gh search issues "keyword" --repo owner/repo --state all --limit 10
|
|
49879
49944
|
Tool 2: gh search prs "keyword" --repo owner/repo --state merged --limit 10
|
|
@@ -49895,22 +49960,21 @@ gh api repos/owner/repo/pulls/<number>/files
|
|
|
49895
49960
|
### TYPE D: COMPREHENSIVE RESEARCH
|
|
49896
49961
|
**Trigger**: Complex questions, ambiguous requests, "deep dive into..."
|
|
49897
49962
|
|
|
49898
|
-
**
|
|
49963
|
+
**Execute Documentation Discovery FIRST (Phase 0.5)**, then execute in parallel (6+ calls):
|
|
49899
49964
|
\`\`\`
|
|
49900
|
-
// Documentation
|
|
49901
|
-
Tool 1: context7_resolve-library-id \u2192
|
|
49965
|
+
// Documentation (informed by sitemap discovery)
|
|
49966
|
+
Tool 1: context7_resolve-library-id \u2192 context7_query-docs
|
|
49967
|
+
Tool 2: webfetch(targeted_doc_pages_from_sitemap)
|
|
49902
49968
|
|
|
49903
49969
|
// Code Search
|
|
49904
|
-
Tool
|
|
49905
|
-
Tool
|
|
49970
|
+
Tool 3: grep_app_searchGitHub(query: "pattern1", language: [...])
|
|
49971
|
+
Tool 4: grep_app_searchGitHub(query: "pattern2", useRegexp: true)
|
|
49906
49972
|
|
|
49907
49973
|
// Source Analysis
|
|
49908
|
-
Tool
|
|
49974
|
+
Tool 5: gh repo clone owner/repo \${TMPDIR:-/tmp}/repo -- --depth 1
|
|
49909
49975
|
|
|
49910
49976
|
// Context
|
|
49911
|
-
Tool
|
|
49912
|
-
|
|
49913
|
-
// Optional: If web search is available, search for recent updates
|
|
49977
|
+
Tool 6: gh search issues "topic" --repo owner/repo
|
|
49914
49978
|
\`\`\`
|
|
49915
49979
|
|
|
49916
49980
|
---
|
|
@@ -49955,7 +50019,11 @@ https://github.com/tanstack/query/blob/abc123def/packages/react-query/src/useQue
|
|
|
49955
50019
|
|
|
49956
50020
|
| Purpose | Tool | Command/Usage |
|
|
49957
50021
|
|---------|------|---------------|
|
|
49958
|
-
| **Official Docs** | context7 | \`context7_resolve-library-id\` \u2192 \`
|
|
50022
|
+
| **Official Docs** | context7 | \`context7_resolve-library-id\` \u2192 \`context7_query-docs\` |
|
|
50023
|
+
| **Find Docs URL** | websearch_exa | \`websearch_exa_web_search_exa("library official documentation")\` |
|
|
50024
|
+
| **Sitemap Discovery** | webfetch | \`webfetch(docs_url + "/sitemap.xml")\` to understand doc structure |
|
|
50025
|
+
| **Read Doc Page** | webfetch | \`webfetch(specific_doc_page)\` for targeted documentation |
|
|
50026
|
+
| **Latest Info** | websearch_exa | \`websearch_exa_web_search_exa("query 2025")\` |
|
|
49959
50027
|
| **Fast Code Search** | grep_app | \`grep_app_searchGitHub(query, language, useRegexp)\` |
|
|
49960
50028
|
| **Deep Code Search** | gh CLI | \`gh search code "query" --repo owner/repo\` |
|
|
49961
50029
|
| **Clone Repo** | gh CLI | \`gh repo clone owner/repo \${TMPDIR:-/tmp}/name -- --depth 1\` |
|
|
@@ -49963,8 +50031,6 @@ https://github.com/tanstack/query/blob/abc123def/packages/react-query/src/useQue
|
|
|
49963
50031
|
| **View Issue/PR** | gh CLI | \`gh issue/pr view <num> --repo owner/repo --comments\` |
|
|
49964
50032
|
| **Release Info** | gh CLI | \`gh api repos/owner/repo/releases/latest\` |
|
|
49965
50033
|
| **Git History** | git | \`git log\`, \`git blame\`, \`git show\` |
|
|
49966
|
-
| **Read URL** | webfetch | \`webfetch(url)\` for blog posts, SO threads |
|
|
49967
|
-
| **Web Search** | (if available) | Use any available web search tool for latest info |
|
|
49968
50034
|
|
|
49969
50035
|
### Temp Directory
|
|
49970
50036
|
|
|
@@ -49981,16 +50047,18 @@ Use OS-appropriate temp directory:
|
|
|
49981
50047
|
|
|
49982
50048
|
---
|
|
49983
50049
|
|
|
49984
|
-
## PARALLEL EXECUTION
|
|
49985
|
-
|
|
49986
|
-
When searching is needed, scale effort to question complexity:
|
|
50050
|
+
## PARALLEL EXECUTION REQUIREMENTS
|
|
49987
50051
|
|
|
49988
|
-
| Request Type | Suggested Calls |
|
|
50052
|
+
| Request Type | Suggested Calls | Doc Discovery Required |
|
|
49989
50053
|
|--------------|----------------|
|
|
49990
|
-
| TYPE A (Conceptual) | 1-2 |
|
|
49991
|
-
| TYPE B (Implementation) | 2-3 |
|
|
49992
|
-
| TYPE C (Context) | 2-3 |
|
|
49993
|
-
| TYPE D (Comprehensive) | 3-5 |
|
|
50054
|
+
| TYPE A (Conceptual) | 1-2 | YES (Phase 0.5 first) |
|
|
50055
|
+
| TYPE B (Implementation) | 2-3 NO |
|
|
50056
|
+
| TYPE C (Context) | 2-3 NO |
|
|
50057
|
+
| TYPE D (Comprehensive) | 3-5 | YES (Phase 0.5 first) |
|
|
50058
|
+
| Request Type | Minimum Parallel Calls
|
|
50059
|
+
|
|
50060
|
+
**Doc Discovery is SEQUENTIAL** (websearch \u2192 version check \u2192 sitemap \u2192 investigate).
|
|
50061
|
+
**Main phase is PARALLEL** once you know where to look.
|
|
49994
50062
|
|
|
49995
50063
|
**Always vary queries** when using grep_app:
|
|
49996
50064
|
\`\`\`
|
|
@@ -50014,6 +50082,8 @@ grep_app_searchGitHub(query: "useQuery")
|
|
|
50014
50082
|
| grep_app no results | Broaden query, try concept instead of exact name |
|
|
50015
50083
|
| gh API rate limit | Use cloned repo in temp directory |
|
|
50016
50084
|
| Repo not found | Search for forks or mirrors |
|
|
50085
|
+
| Sitemap not found | Try \`/sitemap-0.xml\`, \`/sitemap_index.xml\`, or fetch docs index page and parse navigation |
|
|
50086
|
+
| Versioned docs not found | Fall back to latest version, note this in response |
|
|
50017
50087
|
| Uncertain | **STATE YOUR UNCERTAINTY**, propose hypothesis |
|
|
50018
50088
|
|
|
50019
50089
|
---
|
|
@@ -50781,15 +50851,19 @@ var metisRestrictions = createAgentToolRestrictions([
|
|
|
50781
50851
|
"task",
|
|
50782
50852
|
"sisyphus_task"
|
|
50783
50853
|
]);
|
|
50784
|
-
var
|
|
50785
|
-
|
|
50786
|
-
|
|
50787
|
-
|
|
50788
|
-
|
|
50789
|
-
|
|
50790
|
-
|
|
50791
|
-
|
|
50792
|
-
|
|
50854
|
+
var DEFAULT_MODEL8 = "anthropic/claude-opus-4-5";
|
|
50855
|
+
function createMetisAgent(model = DEFAULT_MODEL8) {
|
|
50856
|
+
return {
|
|
50857
|
+
description: "Pre-planning consultant that analyzes requests to identify hidden intentions, ambiguities, and AI failure points.",
|
|
50858
|
+
mode: "subagent",
|
|
50859
|
+
model,
|
|
50860
|
+
temperature: 0.3,
|
|
50861
|
+
...metisRestrictions,
|
|
50862
|
+
prompt: METIS_SYSTEM_PROMPT,
|
|
50863
|
+
thinking: { type: "enabled", budgetTokens: 32000 }
|
|
50864
|
+
};
|
|
50865
|
+
}
|
|
50866
|
+
var metisAgent = createMetisAgent();
|
|
50793
50867
|
|
|
50794
50868
|
// src/agents/orchestrator-sisyphus.ts
|
|
50795
50869
|
init_constants();
|
|
@@ -52196,6 +52270,7 @@ function buildDynamicOrchestratorPrompt(ctx) {
|
|
|
52196
52270
|
const skillsSection = buildSkillsSection(skills);
|
|
52197
52271
|
return ORCHESTRATOR_SISYPHUS_SYSTEM_PROMPT.replace("{CATEGORY_SECTION}", categorySection).replace("{AGENT_SECTION}", agentSection).replace("{DECISION_MATRIX}", decisionMatrix).replace("{SKILLS_SECTION}", skillsSection);
|
|
52198
52272
|
}
|
|
52273
|
+
var DEFAULT_MODEL9 = "anthropic/claude-sonnet-4-5";
|
|
52199
52274
|
function createOrchestratorSisyphusAgent(ctx) {
|
|
52200
52275
|
const restrictions = createAgentToolRestrictions([
|
|
52201
52276
|
"task",
|
|
@@ -52204,7 +52279,7 @@ function createOrchestratorSisyphusAgent(ctx) {
|
|
|
52204
52279
|
return {
|
|
52205
52280
|
description: "Orchestrates work via sisyphus_task() to complete ALL tasks in a todo list until fully done",
|
|
52206
52281
|
mode: "primary",
|
|
52207
|
-
model:
|
|
52282
|
+
model: ctx?.model ?? DEFAULT_MODEL9,
|
|
52208
52283
|
temperature: 0.1,
|
|
52209
52284
|
prompt: buildDynamicOrchestratorPrompt(ctx),
|
|
52210
52285
|
thinking: { type: "enabled", budgetTokens: 32000 },
|
|
@@ -52214,7 +52289,7 @@ function createOrchestratorSisyphusAgent(ctx) {
|
|
|
52214
52289
|
var orchestratorSisyphusAgent = createOrchestratorSisyphusAgent();
|
|
52215
52290
|
|
|
52216
52291
|
// src/agents/momus.ts
|
|
52217
|
-
var
|
|
52292
|
+
var DEFAULT_MODEL10 = "openai/gpt-5.2";
|
|
52218
52293
|
var MOMUS_SYSTEM_PROMPT = `You are a work plan review expert. You review the provided work plan (.sisyphus/plans/{name}.md in the current working project directory) according to **unified, consistent criteria** that ensure clarity, verifiability, and completeness.
|
|
52219
52294
|
|
|
52220
52295
|
**CRITICAL FIRST RULE**:
|
|
@@ -52544,7 +52619,7 @@ Use structured format, **in the same language as the work plan**.
|
|
|
52544
52619
|
|
|
52545
52620
|
**Strike the right balance**: Prevent critical failures while empowering developer autonomy.
|
|
52546
52621
|
`;
|
|
52547
|
-
function createMomusAgent(model =
|
|
52622
|
+
function createMomusAgent(model = DEFAULT_MODEL10) {
|
|
52548
52623
|
const restrictions = createAgentToolRestrictions([
|
|
52549
52624
|
"write",
|
|
52550
52625
|
"edit",
|
|
@@ -52575,8 +52650,8 @@ var agentSources = {
|
|
|
52575
52650
|
"frontend-ui-ux-engineer": createFrontendUiUxEngineerAgent,
|
|
52576
52651
|
"document-writer": createDocumentWriterAgent,
|
|
52577
52652
|
"multimodal-looker": createMultimodalLookerAgent,
|
|
52578
|
-
"Metis (Plan Consultant)":
|
|
52579
|
-
"Momus (Plan Reviewer)":
|
|
52653
|
+
"Metis (Plan Consultant)": createMetisAgent,
|
|
52654
|
+
"Momus (Plan Reviewer)": createMomusAgent,
|
|
52580
52655
|
"orchestrator-sisyphus": orchestratorSisyphusAgent
|
|
52581
52656
|
};
|
|
52582
52657
|
var agentMetadata = {
|
|
@@ -52689,7 +52764,11 @@ function createBuiltinAgents(disabledAgents = [], agentOverrides = {}, directory
|
|
|
52689
52764
|
}
|
|
52690
52765
|
if (!disabledAgents.includes("orchestrator-sisyphus")) {
|
|
52691
52766
|
const orchestratorOverride = agentOverrides["orchestrator-sisyphus"];
|
|
52692
|
-
|
|
52767
|
+
const orchestratorModel = orchestratorOverride?.model;
|
|
52768
|
+
let orchestratorConfig = createOrchestratorSisyphusAgent({
|
|
52769
|
+
model: orchestratorModel,
|
|
52770
|
+
availableAgents
|
|
52771
|
+
});
|
|
52693
52772
|
if (orchestratorOverride) {
|
|
52694
52773
|
orchestratorConfig = mergeAgentConfig(orchestratorConfig, orchestratorOverride);
|
|
52695
52774
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|