oh-my-opencode 3.15.1 → 3.15.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/dist/agents/hephaestus/gpt-5-4.d.ts +22 -1
- package/dist/cli/index.js +51 -31
- package/dist/create-runtime-tmux-config.d.ts +1 -0
- package/dist/features/background-agent/spawner.d.ts +3 -0
- package/dist/features/claude-code-plugin-loader/discovery.d.ts +2 -1
- package/dist/features/claude-code-plugin-loader/loader.d.ts +1 -0
- package/dist/features/claude-code-plugin-loader/types.d.ts +10 -0
- package/dist/hooks/auto-update-checker/constants.d.ts +3 -3
- package/dist/index.js +381 -316
- package/dist/plugin/tool-registry.d.ts +1 -0
- package/package.json +12 -12
|
@@ -1,3 +1,24 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* GPT-5.4 optimized Hephaestus prompt - entropy-reduced rewrite.
|
|
3
|
+
*
|
|
4
|
+
* Design principles (aligned with OpenAI GPT-5.4 prompting guidance):
|
|
5
|
+
* - Personality/tone at position 1 for strong tonal priming
|
|
6
|
+
* - Prose-based instructions; no FORBIDDEN/MUST/NEVER rhetoric
|
|
7
|
+
* - 3 targeted prompt blocks: tool_persistence, dig_deeper, dependency_checks
|
|
8
|
+
* - GPT-5.4 follows instructions well - trust it, fewer threats needed
|
|
9
|
+
* - Conflicts eliminated: no "every 30s" + "be concise" contradiction
|
|
10
|
+
* - Each concern appears in exactly one section
|
|
11
|
+
*
|
|
12
|
+
* Architecture (XML-tagged blocks, consistent with Sisyphus GPT-5.4):
|
|
13
|
+
* 1. <identity> - Role, personality/tone, autonomy, scope
|
|
14
|
+
* 2. <intent> - Intent mapping, complexity classification, ambiguity protocol
|
|
15
|
+
* 3. <explore> - Tool selection, tool_persistence, dig_deeper, dependency_checks, parallelism
|
|
16
|
+
* 4. <constraints> - Hard blocks + anti-patterns (after explore, before execution)
|
|
17
|
+
* 5. <execution> - 5-step workflow, verification, failure recovery, completion check
|
|
18
|
+
* 6. <tracking> - Todo/task discipline
|
|
19
|
+
* 7. <progress> - Update style with examples
|
|
20
|
+
* 8. <delegation> - Category+skills, prompt structure, session continuity, oracle
|
|
21
|
+
* 9. <communication> - Output format, tone guidance
|
|
22
|
+
*/
|
|
2
23
|
import type { AvailableAgent, AvailableTool, AvailableSkill, AvailableCategory } from "../dynamic-agent-prompt-builder";
|
|
3
24
|
export declare function buildHephaestusPrompt(availableAgents?: AvailableAgent[], availableTools?: AvailableTool[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): string;
|
package/dist/cli/index.js
CHANGED
|
@@ -6360,7 +6360,7 @@ function getOpenCodeConfigPaths(options) {
|
|
|
6360
6360
|
configJson: join4(configDir, "opencode.json"),
|
|
6361
6361
|
configJsonc: join4(configDir, "opencode.jsonc"),
|
|
6362
6362
|
packageJson: join4(configDir, "package.json"),
|
|
6363
|
-
omoConfig: join4(configDir,
|
|
6363
|
+
omoConfig: join4(configDir, `${CONFIG_BASENAME}.json`)
|
|
6364
6364
|
};
|
|
6365
6365
|
}
|
|
6366
6366
|
var TAURI_APP_IDENTIFIER = "ai.opencode.desktop", TAURI_APP_IDENTIFIER_DEV = "ai.opencode.desktop.dev";
|
|
@@ -48620,6 +48620,7 @@ var init_hook_loader = __esm(() => {
|
|
|
48620
48620
|
});
|
|
48621
48621
|
|
|
48622
48622
|
// src/features/claude-code-plugin-loader/loader.ts
|
|
48623
|
+
var cachedPluginComponentsByKey;
|
|
48623
48624
|
var init_loader = __esm(() => {
|
|
48624
48625
|
init_logger();
|
|
48625
48626
|
init_discovery();
|
|
@@ -48634,6 +48635,7 @@ var init_loader = __esm(() => {
|
|
|
48634
48635
|
init_agent_loader();
|
|
48635
48636
|
init_mcp_server_loader();
|
|
48636
48637
|
init_hook_loader();
|
|
48638
|
+
cachedPluginComponentsByKey = new Map;
|
|
48637
48639
|
});
|
|
48638
48640
|
|
|
48639
48641
|
// src/features/claude-code-plugin-loader/index.ts
|
|
@@ -48764,6 +48766,10 @@ function getConfigJsonc() {
|
|
|
48764
48766
|
return getConfigContext().paths.configJsonc;
|
|
48765
48767
|
}
|
|
48766
48768
|
function getOmoConfigPath() {
|
|
48769
|
+
const configDir = getConfigContext().paths.configDir;
|
|
48770
|
+
const detected = detectPluginConfigFile(configDir);
|
|
48771
|
+
if (detected.format !== "none")
|
|
48772
|
+
return detected.path;
|
|
48767
48773
|
return getConfigContext().paths.omoConfig;
|
|
48768
48774
|
}
|
|
48769
48775
|
var configContext = null;
|
|
@@ -49636,7 +49642,16 @@ function getWindowsAppdataDir() {
|
|
|
49636
49642
|
return null;
|
|
49637
49643
|
return process.env.APPDATA ?? path4.join(os3.homedir(), "AppData", "Roaming");
|
|
49638
49644
|
}
|
|
49639
|
-
|
|
49645
|
+
function getUserConfigDir() {
|
|
49646
|
+
return getOpenCodeConfigDir({ binary: "opencode" });
|
|
49647
|
+
}
|
|
49648
|
+
function getUserOpencodeConfig() {
|
|
49649
|
+
return path4.join(getUserConfigDir(), "opencode.json");
|
|
49650
|
+
}
|
|
49651
|
+
function getUserOpencodeConfigJsonc() {
|
|
49652
|
+
return path4.join(getUserConfigDir(), "opencode.jsonc");
|
|
49653
|
+
}
|
|
49654
|
+
var PACKAGE_NAME = "oh-my-openagent", NPM_REGISTRY_URL, NPM_FETCH_TIMEOUT = 5000, CACHE_ROOT_DIR, CACHE_DIR, VERSION_FILE, INSTALLED_PACKAGE_JSON;
|
|
49640
49655
|
var init_constants3 = __esm(() => {
|
|
49641
49656
|
init_data_path();
|
|
49642
49657
|
init_opencode_config_dir();
|
|
@@ -49644,9 +49659,6 @@ var init_constants3 = __esm(() => {
|
|
|
49644
49659
|
CACHE_ROOT_DIR = getOpenCodeCacheDir();
|
|
49645
49660
|
CACHE_DIR = path4.join(CACHE_ROOT_DIR, "packages");
|
|
49646
49661
|
VERSION_FILE = path4.join(CACHE_ROOT_DIR, "version");
|
|
49647
|
-
USER_CONFIG_DIR = getOpenCodeConfigDir({ binary: "opencode" });
|
|
49648
|
-
USER_OPENCODE_CONFIG = path4.join(USER_CONFIG_DIR, "opencode.json");
|
|
49649
|
-
USER_OPENCODE_CONFIG_JSONC = path4.join(USER_CONFIG_DIR, "opencode.jsonc");
|
|
49650
49662
|
INSTALLED_PACKAGE_JSON = path4.join(CACHE_DIR, "node_modules", PACKAGE_NAME, "package.json");
|
|
49651
49663
|
});
|
|
49652
49664
|
|
|
@@ -49654,17 +49666,18 @@ var init_constants3 = __esm(() => {
|
|
|
49654
49666
|
import * as os4 from "os";
|
|
49655
49667
|
import * as path5 from "path";
|
|
49656
49668
|
function getConfigPaths(directory) {
|
|
49669
|
+
const userConfigDir = getUserConfigDir();
|
|
49657
49670
|
const paths = [
|
|
49658
49671
|
path5.join(directory, ".opencode", "opencode.json"),
|
|
49659
49672
|
path5.join(directory, ".opencode", "opencode.jsonc"),
|
|
49660
|
-
|
|
49661
|
-
|
|
49673
|
+
getUserOpencodeConfig(),
|
|
49674
|
+
getUserOpencodeConfigJsonc()
|
|
49662
49675
|
];
|
|
49663
49676
|
if (process.platform === "win32") {
|
|
49664
49677
|
const crossPlatformDir = path5.join(os4.homedir(), ".config");
|
|
49665
49678
|
const appdataDir = getWindowsAppdataDir();
|
|
49666
49679
|
if (appdataDir) {
|
|
49667
|
-
const alternateDir =
|
|
49680
|
+
const alternateDir = userConfigDir === crossPlatformDir ? appdataDir : crossPlatformDir;
|
|
49668
49681
|
const alternateConfig = path5.join(alternateDir, "opencode", "opencode.json");
|
|
49669
49682
|
const alternateConfigJsonc = path5.join(alternateDir, "opencode", "opencode.jsonc");
|
|
49670
49683
|
if (!paths.includes(alternateConfig)) {
|
|
@@ -50121,8 +50134,9 @@ function removeFromBunLock(packageName) {
|
|
|
50121
50134
|
}
|
|
50122
50135
|
function invalidatePackage(packageName = PACKAGE_NAME) {
|
|
50123
50136
|
try {
|
|
50137
|
+
const userConfigDir = getUserConfigDir();
|
|
50124
50138
|
const pkgDirs = [
|
|
50125
|
-
path9.join(
|
|
50139
|
+
path9.join(userConfigDir, "node_modules", packageName),
|
|
50126
50140
|
path9.join(CACHE_DIR, "node_modules", packageName)
|
|
50127
50141
|
];
|
|
50128
50142
|
let packageRemoved = false;
|
|
@@ -50583,7 +50597,7 @@ var {
|
|
|
50583
50597
|
// package.json
|
|
50584
50598
|
var package_default = {
|
|
50585
50599
|
name: "oh-my-opencode",
|
|
50586
|
-
version: "3.15.
|
|
50600
|
+
version: "3.15.2",
|
|
50587
50601
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
50588
50602
|
main: "./dist/index.js",
|
|
50589
50603
|
types: "dist/index.d.ts",
|
|
@@ -50661,17 +50675,17 @@ var package_default = {
|
|
|
50661
50675
|
typescript: "^5.7.3"
|
|
50662
50676
|
},
|
|
50663
50677
|
optionalDependencies: {
|
|
50664
|
-
"oh-my-opencode-darwin-arm64": "3.15.
|
|
50665
|
-
"oh-my-opencode-darwin-x64": "3.15.
|
|
50666
|
-
"oh-my-opencode-darwin-x64-baseline": "3.15.
|
|
50667
|
-
"oh-my-opencode-linux-arm64": "3.15.
|
|
50668
|
-
"oh-my-opencode-linux-arm64-musl": "3.15.
|
|
50669
|
-
"oh-my-opencode-linux-x64": "3.15.
|
|
50670
|
-
"oh-my-opencode-linux-x64-baseline": "3.15.
|
|
50671
|
-
"oh-my-opencode-linux-x64-musl": "3.15.
|
|
50672
|
-
"oh-my-opencode-linux-x64-musl-baseline": "3.15.
|
|
50673
|
-
"oh-my-opencode-windows-x64": "3.15.
|
|
50674
|
-
"oh-my-opencode-windows-x64-baseline": "3.15.
|
|
50678
|
+
"oh-my-opencode-darwin-arm64": "3.15.2",
|
|
50679
|
+
"oh-my-opencode-darwin-x64": "3.15.2",
|
|
50680
|
+
"oh-my-opencode-darwin-x64-baseline": "3.15.2",
|
|
50681
|
+
"oh-my-opencode-linux-arm64": "3.15.2",
|
|
50682
|
+
"oh-my-opencode-linux-arm64-musl": "3.15.2",
|
|
50683
|
+
"oh-my-opencode-linux-x64": "3.15.2",
|
|
50684
|
+
"oh-my-opencode-linux-x64-baseline": "3.15.2",
|
|
50685
|
+
"oh-my-opencode-linux-x64-musl": "3.15.2",
|
|
50686
|
+
"oh-my-opencode-linux-x64-musl-baseline": "3.15.2",
|
|
50687
|
+
"oh-my-opencode-windows-x64": "3.15.2",
|
|
50688
|
+
"oh-my-opencode-windows-x64-baseline": "3.15.2"
|
|
50675
50689
|
},
|
|
50676
50690
|
overrides: {
|
|
50677
50691
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -66662,7 +66676,7 @@ function mergeConfigs(base, override) {
|
|
|
66662
66676
|
function loadPluginConfig(directory, ctx) {
|
|
66663
66677
|
const configDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
66664
66678
|
const userDetected = detectPluginConfigFile(configDir);
|
|
66665
|
-
let userConfigPath = userDetected.format !== "none" ? userDetected.path : path3.join(configDir,
|
|
66679
|
+
let userConfigPath = userDetected.format !== "none" ? userDetected.path : path3.join(configDir, `${CONFIG_BASENAME}.json`);
|
|
66666
66680
|
if (userDetected.legacyPath) {
|
|
66667
66681
|
log("Canonical plugin config detected alongside legacy config. Remove the legacy file to avoid confusion.", {
|
|
66668
66682
|
canonicalPath: userDetected.path,
|
|
@@ -66670,12 +66684,15 @@ function loadPluginConfig(directory, ctx) {
|
|
|
66670
66684
|
});
|
|
66671
66685
|
}
|
|
66672
66686
|
if (userDetected.format !== "none" && path3.basename(userDetected.path).startsWith(LEGACY_CONFIG_BASENAME)) {
|
|
66673
|
-
migrateLegacyConfigFile(userDetected.path);
|
|
66674
|
-
|
|
66687
|
+
const migrated = migrateLegacyConfigFile(userDetected.path);
|
|
66688
|
+
const canonicalPath = path3.join(path3.dirname(userDetected.path), `${CONFIG_BASENAME}${path3.extname(userDetected.path)}`);
|
|
66689
|
+
if (migrated || fs3.existsSync(canonicalPath)) {
|
|
66690
|
+
userConfigPath = canonicalPath;
|
|
66691
|
+
}
|
|
66675
66692
|
}
|
|
66676
66693
|
const projectBasePath = path3.join(directory, ".opencode");
|
|
66677
66694
|
const projectDetected = detectPluginConfigFile(projectBasePath);
|
|
66678
|
-
let projectConfigPath = projectDetected.format !== "none" ? projectDetected.path : path3.join(projectBasePath,
|
|
66695
|
+
let projectConfigPath = projectDetected.format !== "none" ? projectDetected.path : path3.join(projectBasePath, `${CONFIG_BASENAME}.json`);
|
|
66679
66696
|
if (projectDetected.legacyPath) {
|
|
66680
66697
|
log("Canonical plugin config detected alongside legacy config. Remove the legacy file to avoid confusion.", {
|
|
66681
66698
|
canonicalPath: projectDetected.path,
|
|
@@ -66683,8 +66700,11 @@ function loadPluginConfig(directory, ctx) {
|
|
|
66683
66700
|
});
|
|
66684
66701
|
}
|
|
66685
66702
|
if (projectDetected.format !== "none" && path3.basename(projectDetected.path).startsWith(LEGACY_CONFIG_BASENAME)) {
|
|
66686
|
-
migrateLegacyConfigFile(projectDetected.path);
|
|
66687
|
-
|
|
66703
|
+
const projectMigrated = migrateLegacyConfigFile(projectDetected.path);
|
|
66704
|
+
const canonicalProjectPath = path3.join(path3.dirname(projectDetected.path), `${CONFIG_BASENAME}${path3.extname(projectDetected.path)}`);
|
|
66705
|
+
if (projectMigrated || fs3.existsSync(canonicalProjectPath)) {
|
|
66706
|
+
projectConfigPath = canonicalProjectPath;
|
|
66707
|
+
}
|
|
66688
66708
|
}
|
|
66689
66709
|
const userConfig = loadConfigFromPath(userConfigPath, ctx);
|
|
66690
66710
|
let config2 = userConfig ?? OhMyOpenCodeConfigSchema.parse({});
|
|
@@ -69798,7 +69818,6 @@ init_model_capabilities();
|
|
|
69798
69818
|
init_shared();
|
|
69799
69819
|
import { readFileSync as readFileSync24 } from "fs";
|
|
69800
69820
|
import { join as join24 } from "path";
|
|
69801
|
-
var USER_CONFIG_DIR2 = getOpenCodeConfigPaths({ binary: "opencode", version: null }).configDir;
|
|
69802
69821
|
var PROJECT_CONFIG_DIR = join24(process.cwd(), ".opencode");
|
|
69803
69822
|
function loadOmoConfig() {
|
|
69804
69823
|
const projectDetected = detectPluginConfigFile(PROJECT_CONFIG_DIR);
|
|
@@ -69810,7 +69829,8 @@ function loadOmoConfig() {
|
|
|
69810
69829
|
return null;
|
|
69811
69830
|
}
|
|
69812
69831
|
}
|
|
69813
|
-
const
|
|
69832
|
+
const userConfigDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
69833
|
+
const userDetected = detectPluginConfigFile(userConfigDir);
|
|
69814
69834
|
if (userDetected.format !== "none") {
|
|
69815
69835
|
try {
|
|
69816
69836
|
const content = readFileSync24(userDetected.path, "utf-8");
|
|
@@ -70021,13 +70041,13 @@ async function checkModels() {
|
|
|
70021
70041
|
}
|
|
70022
70042
|
|
|
70023
70043
|
// src/cli/doctor/checks/config.ts
|
|
70024
|
-
var USER_CONFIG_DIR3 = getOpenCodeConfigDir({ binary: "opencode" });
|
|
70025
70044
|
var PROJECT_CONFIG_DIR2 = join26(process.cwd(), ".opencode");
|
|
70026
70045
|
function findConfigPath() {
|
|
70027
70046
|
const projectConfig = detectPluginConfigFile(PROJECT_CONFIG_DIR2);
|
|
70028
70047
|
if (projectConfig.format !== "none")
|
|
70029
70048
|
return projectConfig.path;
|
|
70030
|
-
const
|
|
70049
|
+
const userConfigDir = getOpenCodeConfigDir({ binary: "opencode" });
|
|
70050
|
+
const userConfig = detectPluginConfigFile(userConfigDir);
|
|
70031
70051
|
if (userConfig.format !== "none")
|
|
70032
70052
|
return userConfig.path;
|
|
70033
70053
|
return null;
|
|
@@ -4,6 +4,7 @@ export declare function isTmuxIntegrationEnabled(pluginConfig: {
|
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
} | undefined;
|
|
6
6
|
}): boolean;
|
|
7
|
+
export declare function isInteractiveBashEnabled(which?: (binary: string) => string | null): boolean;
|
|
7
8
|
export declare function createRuntimeTmuxConfig(pluginConfig: {
|
|
8
9
|
tmux?: OhMyOpenCodeConfig["tmux"];
|
|
9
10
|
}): TmuxConfig;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { BackgroundTask, LaunchInput, ResumeInput } from "./types";
|
|
2
2
|
import type { OpencodeClient, OnSubagentSessionCreated, QueueItem } from "./constants";
|
|
3
3
|
import type { ConcurrencyManager } from "./concurrency";
|
|
4
|
+
export declare const FALLBACK_AGENT = "general";
|
|
5
|
+
export declare function isAgentNotFoundError(error: unknown): boolean;
|
|
6
|
+
export declare function buildFallbackBody(originalBody: Record<string, unknown>, fallbackAgent: string): Record<string, unknown>;
|
|
4
7
|
export interface SpawnerContext {
|
|
5
8
|
client: OpencodeClient;
|
|
6
9
|
directory: string;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import type { PluginLoadResult, PluginLoaderOptions } from "./types";
|
|
1
|
+
import type { PluginManifest, PluginLoadResult, PluginLoaderOptions } from "./types";
|
|
2
|
+
export declare function loadPluginManifest(installPath: string): PluginManifest | null;
|
|
2
3
|
export declare function discoverInstalledPlugins(options?: PluginLoaderOptions): PluginLoadResult;
|
|
@@ -17,4 +17,5 @@ export interface PluginComponentsResult {
|
|
|
17
17
|
plugins: LoadedPlugin[];
|
|
18
18
|
errors: PluginLoadError[];
|
|
19
19
|
}
|
|
20
|
+
export declare function clearPluginComponentsCache(): void;
|
|
20
21
|
export declare function loadAllPluginComponents(options?: PluginLoaderOptions): Promise<PluginComponentsResult>;
|
|
@@ -204,6 +204,16 @@ export interface ClaudeSettings {
|
|
|
204
204
|
* Plugin loader options
|
|
205
205
|
*/
|
|
206
206
|
export interface PluginLoaderOptions {
|
|
207
|
+
/**
|
|
208
|
+
* Override the plugins home directory for testing.
|
|
209
|
+
* If not provided, uses CLAUDE_PLUGINS_HOME env var or ~/.claude/plugins
|
|
210
|
+
*/
|
|
211
|
+
pluginsHomeOverride?: string;
|
|
212
|
+
/**
|
|
213
|
+
* Override plugin manifest loading for testing.
|
|
214
|
+
* Return null to force plugin name derivation from the plugin key.
|
|
215
|
+
*/
|
|
216
|
+
loadPluginManifestOverride?: (installPath: string) => PluginManifest | null;
|
|
207
217
|
/**
|
|
208
218
|
* Override enabled plugins from oh-my-opencode config.
|
|
209
219
|
* Key format: "pluginName@marketplace" (e.g., "shell-scripting@claude-code-workflows")
|
|
@@ -5,7 +5,7 @@ export declare const CACHE_ROOT_DIR: string;
|
|
|
5
5
|
export declare const CACHE_DIR: string;
|
|
6
6
|
export declare const VERSION_FILE: string;
|
|
7
7
|
export declare function getWindowsAppdataDir(): string | null;
|
|
8
|
-
export declare
|
|
9
|
-
export declare
|
|
10
|
-
export declare
|
|
8
|
+
export declare function getUserConfigDir(): string;
|
|
9
|
+
export declare function getUserOpencodeConfig(): string;
|
|
10
|
+
export declare function getUserOpencodeConfigJsonc(): string;
|
|
11
11
|
export declare const INSTALLED_PACKAGE_JSON: string;
|