oh-my-opencode 2.1.5 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -113,12 +113,13 @@ Hand this doc to an agent and let them set it up.
|
|
|
113
113
|
### For Those Who Want to Read
|
|
114
114
|
|
|
115
115
|
Welcome. Introducing OmO (Oh-Mo).
|
|
116
|
-
Everything below is customizable. Take what you want.
|
|
116
|
+
Everything below is customizable. Take what you want.
|
|
117
|
+
All features are enabled by default. You don't have to do anything. Battery Included, works out of the box.
|
|
117
118
|
|
|
118
119
|
- Claude Code Compatibility: Command, Agent, Skill, MCP, Hook(PreToolUse, PostToolUse, UserPromptSubmit, Stop)
|
|
119
|
-
-
|
|
120
|
+
- Comment Checker: No AI-like Comments Anymore.
|
|
121
|
+
- Full LSP / AstGrep Support: Explore precisely, Refactor with confidence.
|
|
120
122
|
- Todo Continuation Enforcer: Forces the agent to continue if it quits halfway.
|
|
121
|
-
- Comment Checker: Prevents AI from adding excessive comments.
|
|
122
123
|
- Curated Agents
|
|
123
124
|
- OmO: Super smart main agent (Opus 4.5 High)
|
|
124
125
|
- Oracle: Design, debugging (GPT 5.2 Medium)
|
package/dist/index.js
CHANGED
|
@@ -23714,11 +23714,11 @@ tool.schema = exports_external;
|
|
|
23714
23714
|
|
|
23715
23715
|
// src/tools/lsp/tools.ts
|
|
23716
23716
|
var lsp_hover = tool({
|
|
23717
|
-
description: "Get type
|
|
23717
|
+
description: "Get type info, docs, and signature for a symbol at position.",
|
|
23718
23718
|
args: {
|
|
23719
|
-
filePath: tool.schema.string()
|
|
23720
|
-
line: tool.schema.number().min(1).describe("
|
|
23721
|
-
character: tool.schema.number().min(0).describe("
|
|
23719
|
+
filePath: tool.schema.string(),
|
|
23720
|
+
line: tool.schema.number().min(1).describe("1-based"),
|
|
23721
|
+
character: tool.schema.number().min(0).describe("0-based")
|
|
23722
23722
|
},
|
|
23723
23723
|
execute: async (args, context) => {
|
|
23724
23724
|
try {
|
|
@@ -23734,11 +23734,11 @@ var lsp_hover = tool({
|
|
|
23734
23734
|
}
|
|
23735
23735
|
});
|
|
23736
23736
|
var lsp_goto_definition = tool({
|
|
23737
|
-
description: "Jump to
|
|
23737
|
+
description: "Jump to symbol definition. Find WHERE something is defined.",
|
|
23738
23738
|
args: {
|
|
23739
|
-
filePath: tool.schema.string()
|
|
23740
|
-
line: tool.schema.number().min(1).describe("
|
|
23741
|
-
character: tool.schema.number().min(0).describe("
|
|
23739
|
+
filePath: tool.schema.string(),
|
|
23740
|
+
line: tool.schema.number().min(1).describe("1-based"),
|
|
23741
|
+
character: tool.schema.number().min(0).describe("0-based")
|
|
23742
23742
|
},
|
|
23743
23743
|
execute: async (args, context) => {
|
|
23744
23744
|
try {
|
|
@@ -23764,11 +23764,11 @@ var lsp_goto_definition = tool({
|
|
|
23764
23764
|
}
|
|
23765
23765
|
});
|
|
23766
23766
|
var lsp_find_references = tool({
|
|
23767
|
-
description: "Find ALL usages/references of a symbol across the entire workspace.
|
|
23767
|
+
description: "Find ALL usages/references of a symbol across the entire workspace.",
|
|
23768
23768
|
args: {
|
|
23769
|
-
filePath: tool.schema.string()
|
|
23770
|
-
line: tool.schema.number().min(1).describe("
|
|
23771
|
-
character: tool.schema.number().min(0).describe("
|
|
23769
|
+
filePath: tool.schema.string(),
|
|
23770
|
+
line: tool.schema.number().min(1).describe("1-based"),
|
|
23771
|
+
character: tool.schema.number().min(0).describe("0-based"),
|
|
23772
23772
|
includeDeclaration: tool.schema.boolean().optional().describe("Include the declaration itself")
|
|
23773
23773
|
},
|
|
23774
23774
|
execute: async (args, context) => {
|
|
@@ -23797,9 +23797,9 @@ var lsp_find_references = tool({
|
|
|
23797
23797
|
}
|
|
23798
23798
|
});
|
|
23799
23799
|
var lsp_document_symbols = tool({
|
|
23800
|
-
description: "Get
|
|
23800
|
+
description: "Get hierarchical outline of all symbols in a file.",
|
|
23801
23801
|
args: {
|
|
23802
|
-
filePath: tool.schema.string()
|
|
23802
|
+
filePath: tool.schema.string()
|
|
23803
23803
|
},
|
|
23804
23804
|
execute: async (args, context) => {
|
|
23805
23805
|
try {
|
|
@@ -23831,11 +23831,11 @@ var lsp_document_symbols = tool({
|
|
|
23831
23831
|
}
|
|
23832
23832
|
});
|
|
23833
23833
|
var lsp_workspace_symbols = tool({
|
|
23834
|
-
description: "Search
|
|
23834
|
+
description: "Search symbols by name across ENTIRE workspace.",
|
|
23835
23835
|
args: {
|
|
23836
|
-
filePath: tool.schema.string()
|
|
23837
|
-
query: tool.schema.string().describe("
|
|
23838
|
-
limit: tool.schema.number().optional().describe("
|
|
23836
|
+
filePath: tool.schema.string(),
|
|
23837
|
+
query: tool.schema.string().describe("Symbol name (fuzzy match)"),
|
|
23838
|
+
limit: tool.schema.number().optional().describe("Max results")
|
|
23839
23839
|
},
|
|
23840
23840
|
execute: async (args, context) => {
|
|
23841
23841
|
try {
|
|
@@ -23864,9 +23864,9 @@ var lsp_workspace_symbols = tool({
|
|
|
23864
23864
|
}
|
|
23865
23865
|
});
|
|
23866
23866
|
var lsp_diagnostics = tool({
|
|
23867
|
-
description: "Get
|
|
23867
|
+
description: "Get errors, warnings, hints from language server BEFORE running build.",
|
|
23868
23868
|
args: {
|
|
23869
|
-
filePath: tool.schema.string()
|
|
23869
|
+
filePath: tool.schema.string(),
|
|
23870
23870
|
severity: tool.schema.enum(["error", "warning", "information", "hint", "all"]).optional().describe("Filter by severity level")
|
|
23871
23871
|
},
|
|
23872
23872
|
execute: async (args, context) => {
|
|
@@ -23904,7 +23904,7 @@ var lsp_diagnostics = tool({
|
|
|
23904
23904
|
}
|
|
23905
23905
|
});
|
|
23906
23906
|
var lsp_servers = tool({
|
|
23907
|
-
description: "List
|
|
23907
|
+
description: "List available LSP servers and installation status.",
|
|
23908
23908
|
args: {},
|
|
23909
23909
|
execute: async (_args, context) => {
|
|
23910
23910
|
try {
|
|
@@ -23926,11 +23926,11 @@ var lsp_servers = tool({
|
|
|
23926
23926
|
}
|
|
23927
23927
|
});
|
|
23928
23928
|
var lsp_prepare_rename = tool({
|
|
23929
|
-
description: "Check if
|
|
23929
|
+
description: "Check if rename is valid. Use BEFORE lsp_rename.",
|
|
23930
23930
|
args: {
|
|
23931
|
-
filePath: tool.schema.string()
|
|
23932
|
-
line: tool.schema.number().min(1).describe("
|
|
23933
|
-
character: tool.schema.number().min(0).describe("
|
|
23931
|
+
filePath: tool.schema.string(),
|
|
23932
|
+
line: tool.schema.number().min(1).describe("1-based"),
|
|
23933
|
+
character: tool.schema.number().min(0).describe("0-based")
|
|
23934
23934
|
},
|
|
23935
23935
|
execute: async (args, context) => {
|
|
23936
23936
|
try {
|
|
@@ -23946,12 +23946,12 @@ var lsp_prepare_rename = tool({
|
|
|
23946
23946
|
}
|
|
23947
23947
|
});
|
|
23948
23948
|
var lsp_rename = tool({
|
|
23949
|
-
description: "Rename
|
|
23949
|
+
description: "Rename symbol across entire workspace. APPLIES changes to all files.",
|
|
23950
23950
|
args: {
|
|
23951
|
-
filePath: tool.schema.string()
|
|
23952
|
-
line: tool.schema.number().min(1).describe("
|
|
23953
|
-
character: tool.schema.number().min(0).describe("
|
|
23954
|
-
newName: tool.schema.string().describe("
|
|
23951
|
+
filePath: tool.schema.string(),
|
|
23952
|
+
line: tool.schema.number().min(1).describe("1-based"),
|
|
23953
|
+
character: tool.schema.number().min(0).describe("0-based"),
|
|
23954
|
+
newName: tool.schema.string().describe("New symbol name")
|
|
23955
23955
|
},
|
|
23956
23956
|
execute: async (args, context) => {
|
|
23957
23957
|
try {
|
|
@@ -23968,13 +23968,13 @@ var lsp_rename = tool({
|
|
|
23968
23968
|
}
|
|
23969
23969
|
});
|
|
23970
23970
|
var lsp_code_actions = tool({
|
|
23971
|
-
description: "Get available
|
|
23971
|
+
description: "Get available quick fixes, refactorings, and source actions (organize imports, fix all).",
|
|
23972
23972
|
args: {
|
|
23973
|
-
filePath: tool.schema.string()
|
|
23974
|
-
startLine: tool.schema.number().min(1).describe("
|
|
23975
|
-
startCharacter: tool.schema.number().min(0).describe("
|
|
23976
|
-
endLine: tool.schema.number().min(1).describe("
|
|
23977
|
-
endCharacter: tool.schema.number().min(0).describe("
|
|
23973
|
+
filePath: tool.schema.string(),
|
|
23974
|
+
startLine: tool.schema.number().min(1).describe("1-based"),
|
|
23975
|
+
startCharacter: tool.schema.number().min(0).describe("0-based"),
|
|
23976
|
+
endLine: tool.schema.number().min(1).describe("1-based"),
|
|
23977
|
+
endCharacter: tool.schema.number().min(0).describe("0-based"),
|
|
23978
23978
|
kind: tool.schema.enum([
|
|
23979
23979
|
"quickfix",
|
|
23980
23980
|
"refactor",
|
|
@@ -24001,10 +24001,10 @@ var lsp_code_actions = tool({
|
|
|
24001
24001
|
}
|
|
24002
24002
|
});
|
|
24003
24003
|
var lsp_code_action_resolve = tool({
|
|
24004
|
-
description: "Resolve and APPLY a code action
|
|
24004
|
+
description: "Resolve and APPLY a code action from lsp_code_actions.",
|
|
24005
24005
|
args: {
|
|
24006
|
-
filePath: tool.schema.string()
|
|
24007
|
-
codeAction: tool.schema.string().describe("
|
|
24006
|
+
filePath: tool.schema.string(),
|
|
24007
|
+
codeAction: tool.schema.string().describe("Code action JSON from lsp_code_actions")
|
|
24008
24008
|
},
|
|
24009
24009
|
execute: async (args, context) => {
|
|
24010
24010
|
try {
|
|
@@ -25438,15 +25438,9 @@ var BLOCKED_TMUX_SUBCOMMANDS = [
|
|
|
25438
25438
|
"pipe-pane",
|
|
25439
25439
|
"pipep"
|
|
25440
25440
|
];
|
|
25441
|
-
var INTERACTIVE_BASH_DESCRIPTION = `Execute tmux commands
|
|
25441
|
+
var INTERACTIVE_BASH_DESCRIPTION = `Execute tmux commands. Use "omo-{name}" session pattern.
|
|
25442
25442
|
|
|
25443
|
-
|
|
25444
|
-
|
|
25445
|
-
BLOCKED COMMANDS (use bash tool instead):
|
|
25446
|
-
- capture-pane / capturep: Use bash to read output files or pipe output
|
|
25447
|
-
- save-buffer / saveb: Use bash to save content to files
|
|
25448
|
-
- show-buffer / showb: Use bash to read buffer content
|
|
25449
|
-
- pipe-pane / pipep: Use bash for piping output`;
|
|
25443
|
+
Blocked (use bash instead): capture-pane, save-buffer, show-buffer, pipe-pane.`;
|
|
25450
25444
|
|
|
25451
25445
|
// src/tools/interactive-bash/utils.ts
|
|
25452
25446
|
var {spawn: spawn9 } = globalThis.Bun;
|
|
@@ -25584,40 +25578,11 @@ var interactive_bash = tool({
|
|
|
25584
25578
|
}
|
|
25585
25579
|
});
|
|
25586
25580
|
// src/tools/background-task/constants.ts
|
|
25587
|
-
var BACKGROUND_TASK_DESCRIPTION = `
|
|
25588
|
-
|
|
25589
|
-
The task runs in a separate session while you continue with other work. The system will notify you when the task completes.
|
|
25590
|
-
|
|
25591
|
-
Use this for:
|
|
25592
|
-
- Long-running research tasks
|
|
25593
|
-
- Complex analysis that doesn't need immediate results
|
|
25594
|
-
- Parallel workloads to maximize throughput
|
|
25595
|
-
|
|
25596
|
-
Arguments:
|
|
25597
|
-
- description: Short task description (shown in status)
|
|
25598
|
-
- prompt: Full detailed prompt for the agent (MUST be in English for optimal LLM performance)
|
|
25599
|
-
- agent: Agent type to use (any agent allowed)
|
|
25600
|
-
|
|
25601
|
-
IMPORTANT: Always write prompts in English regardless of user's language. LLMs perform significantly better with English prompts.
|
|
25602
|
-
|
|
25603
|
-
Returns immediately with task ID and session info. Use \`background_output\` to check progress or retrieve results.`;
|
|
25604
|
-
var BACKGROUND_OUTPUT_DESCRIPTION = `Get output from a background task.
|
|
25605
|
-
|
|
25606
|
-
Arguments:
|
|
25607
|
-
- task_id: Required task ID to get output from
|
|
25608
|
-
- block: If true, wait for task completion. If false (default), return current status immediately.
|
|
25609
|
-
- timeout: Max wait time in ms when blocking (default: 60000, max: 600000)
|
|
25610
|
-
|
|
25611
|
-
The system automatically notifies when background tasks complete. You typically don't need block=true.`;
|
|
25612
|
-
var BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s).
|
|
25581
|
+
var BACKGROUND_TASK_DESCRIPTION = `Run agent task in background. Returns task_id immediately; notifies on completion.
|
|
25613
25582
|
|
|
25614
|
-
|
|
25615
|
-
|
|
25616
|
-
|
|
25617
|
-
- taskId: Task ID to cancel (optional if all=true)
|
|
25618
|
-
- all: Set to true to cancel ALL running background tasks at once (default: false)
|
|
25619
|
-
|
|
25620
|
-
**Cleanup Before Answer**: When you have gathered sufficient information and are ready to provide your final answer to the user, use \`all=true\` to cancel ALL running background tasks first, then deliver your response. This conserves resources and ensures clean workflow completion.`;
|
|
25583
|
+
Use \`background_output\` to get results. Prompts MUST be in English.`;
|
|
25584
|
+
var BACKGROUND_OUTPUT_DESCRIPTION = `Get output from background task. System notifies on completion, so block=true rarely needed.`;
|
|
25585
|
+
var BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s). Use all=true to cancel ALL before final answer.`;
|
|
25621
25586
|
|
|
25622
25587
|
// src/tools/background-task/tools.ts
|
|
25623
25588
|
function formatDuration(start, end) {
|
|
@@ -25888,29 +25853,11 @@ Status: ${task.status}`;
|
|
|
25888
25853
|
}
|
|
25889
25854
|
// src/tools/call-omo-agent/constants.ts
|
|
25890
25855
|
var ALLOWED_AGENTS = ["explore", "librarian"];
|
|
25891
|
-
var CALL_OMO_AGENT_DESCRIPTION = `
|
|
25892
|
-
|
|
25893
|
-
This is a restricted version of the Task tool that only allows spawning explore and librarian agents.
|
|
25894
|
-
|
|
25895
|
-
Available agent types:
|
|
25896
|
-
{agents}
|
|
25856
|
+
var CALL_OMO_AGENT_DESCRIPTION = `Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).
|
|
25897
25857
|
|
|
25898
|
-
|
|
25858
|
+
Available: {agents}
|
|
25899
25859
|
|
|
25900
|
-
|
|
25901
|
-
- \`run_in_background=true\`: Task runs asynchronously in background. Returns immediately with task_id.
|
|
25902
|
-
The system will notify you when the task completes.
|
|
25903
|
-
Use \`background_output\` tool with task_id to check progress (block=false returns full status info).
|
|
25904
|
-
- \`run_in_background=false\`: Task runs synchronously. Waits for completion and returns full result.
|
|
25905
|
-
|
|
25906
|
-
Usage notes:
|
|
25907
|
-
1. Launch multiple agents concurrently whenever possible, to maximize performance
|
|
25908
|
-
2. When the agent is done, it will return a single message back to you
|
|
25909
|
-
3. Each agent invocation is stateless unless you provide a session_id
|
|
25910
|
-
4. Your prompt should contain a highly detailed task description for the agent to perform autonomously
|
|
25911
|
-
5. Clearly tell the agent whether you expect it to write code or just to do research
|
|
25912
|
-
6. For long-running research tasks, use run_in_background=true to avoid blocking
|
|
25913
|
-
7. **IMPORTANT**: Always write prompts in English regardless of user's language. LLMs perform significantly better with English prompts.`;
|
|
25860
|
+
Prompts MUST be in English. Use \`background_output\` for async results.`;
|
|
25914
25861
|
// src/tools/call-omo-agent/tools.ts
|
|
25915
25862
|
function createCallOmoAgent(ctx, backgroundManager) {
|
|
25916
25863
|
const agentDescriptions = ALLOWED_AGENTS.map((name) => `- ${name}: Specialized agent for ${name} tasks`).join(`
|
|
@@ -26057,14 +26004,7 @@ session_id: ${sessionID}
|
|
|
26057
26004
|
}
|
|
26058
26005
|
// src/tools/look-at/constants.ts
|
|
26059
26006
|
var MULTIMODAL_LOOKER_AGENT = "multimodal-looker";
|
|
26060
|
-
var LOOK_AT_DESCRIPTION = `Analyze media files (PDFs, images, diagrams)
|
|
26061
|
-
|
|
26062
|
-
Parameters:
|
|
26063
|
-
- file_path: Absolute path to the file to analyze
|
|
26064
|
-
- goal: What specific information to extract (be specific for better results)
|
|
26065
|
-
|
|
26066
|
-
This tool uses a separate context window with Gemini 2.5 Flash for multimodal analysis,
|
|
26067
|
-
saving tokens in the main conversation while providing accurate visual interpretation.`;
|
|
26007
|
+
var LOOK_AT_DESCRIPTION = `Analyze media files (PDFs, images, diagrams) via Gemini 2.5 Flash in separate context. Saves main context tokens.`;
|
|
26068
26008
|
// src/tools/look-at/tools.ts
|
|
26069
26009
|
function createLookAt(ctx) {
|
|
26070
26010
|
return tool({
|
|
@@ -26796,7 +26736,6 @@ var OhMyOpenCodePlugin = async (ctx) => {
|
|
|
26796
26736
|
const { name: _planName, ...planConfigWithoutName } = config3.agent?.plan ?? {};
|
|
26797
26737
|
const omoPlanOverride = pluginConfig.agents?.["OmO-Plan"];
|
|
26798
26738
|
const omoPlanBase = {
|
|
26799
|
-
...builtinAgents.OmO,
|
|
26800
26739
|
...planConfigWithoutName,
|
|
26801
26740
|
description: `${config3.agent?.plan?.description ?? "Plan agent"} (OhMyOpenCode version)`,
|
|
26802
26741
|
color: config3.agent?.plan?.color ?? "#6495ED"
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const BACKGROUND_TASK_DESCRIPTION = "
|
|
2
|
-
export declare const BACKGROUND_OUTPUT_DESCRIPTION = "Get output from
|
|
3
|
-
export declare const BACKGROUND_CANCEL_DESCRIPTION = "Cancel running background task(s)
|
|
1
|
+
export declare const BACKGROUND_TASK_DESCRIPTION = "Run agent task in background. Returns task_id immediately; notifies on completion.\n\nUse `background_output` to get results. Prompts MUST be in English.";
|
|
2
|
+
export declare const BACKGROUND_OUTPUT_DESCRIPTION = "Get output from background task. System notifies on completion, so block=true rarely needed.";
|
|
3
|
+
export declare const BACKGROUND_CANCEL_DESCRIPTION = "Cancel running background task(s). Use all=true to cancel ALL before final answer.";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const ALLOWED_AGENTS: readonly ["explore", "librarian"];
|
|
2
|
-
export declare const CALL_OMO_AGENT_DESCRIPTION = "
|
|
2
|
+
export declare const CALL_OMO_AGENT_DESCRIPTION = "Spawn explore/librarian agent. run_in_background REQUIRED (true=async with task_id, false=sync).\n\nAvailable: {agents}\n\nPrompts MUST be in English. Use `background_output` for async results.";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const DEFAULT_TIMEOUT_MS = 60000;
|
|
2
2
|
export declare const BLOCKED_TMUX_SUBCOMMANDS: string[];
|
|
3
|
-
export declare const INTERACTIVE_BASH_DESCRIPTION = "Execute tmux commands
|
|
3
|
+
export declare const INTERACTIVE_BASH_DESCRIPTION = "Execute tmux commands. Use \"omo-{name}\" session pattern.\n\nBlocked (use bash instead): capture-pane, save-buffer, show-buffer, pipe-pane.";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const MULTIMODAL_LOOKER_AGENT: "multimodal-looker";
|
|
2
|
-
export declare const LOOK_AT_DESCRIPTION = "Analyze media files (PDFs, images, diagrams)
|
|
2
|
+
export declare const LOOK_AT_DESCRIPTION = "Analyze media files (PDFs, images, diagrams) via Gemini 2.5 Flash in separate context. Saves main context tokens.";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.6",
|
|
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",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@ast-grep/cli": "^0.40.0",
|
|
50
50
|
"@ast-grep/napi": "^0.40.0",
|
|
51
|
-
"@code-yeongyu/comment-checker": "^0.
|
|
51
|
+
"@code-yeongyu/comment-checker": "^0.6.0",
|
|
52
52
|
"@openauthjs/openauth": "^0.4.3",
|
|
53
|
-
"@opencode-ai/plugin": "^1.0.
|
|
53
|
+
"@opencode-ai/plugin": "^1.0.162",
|
|
54
54
|
"hono": "^4.10.4",
|
|
55
55
|
"picomatch": "^4.0.2",
|
|
56
56
|
"xdg-basedir": "^5.1.0",
|