oh-my-opencode-serverlocal 0.1.0 → 0.1.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/cli/index.js +37 -37
- package/dist/config/constants.d.ts +1 -1
- package/dist/config/loader.d.ts +4 -4
- package/dist/hooks/auto-update-checker/skill-sync.d.ts +2 -2
- package/dist/hooks/phase-reminder/index.d.ts +1 -1
- package/dist/hooks/task-session-manager/index.d.ts +1 -1
- package/dist/index.js +50 -50
- package/dist/tui.js +14 -14
- package/dist/utils/internal-initiator.d.ts +2 -2
- package/package.json +1 -1
- package/src/companion/companion-manifest.json +6 -6
- package/src/skills/clonedeps/SKILL.md +4 -4
- package/src/skills/codemap/README.md +1 -1
- package/src/skills/codemap/SKILL.md +3 -3
- package/src/skills/codemap.md +2 -2
- package/src/skills/{oh-my-opencode-slim → oh-my-opencode-serverlocal}/SKILL.md +24 -24
- package/src/skills/reflect/SKILL.md +5 -5
- package/src/skills/simplify/README.md +1 -1
- package/src/skills/worktrees/SKILL.md +4 -4
package/dist/cli/index.js
CHANGED
|
@@ -215,10 +215,10 @@ function getConfigJsonc() {
|
|
|
215
215
|
return getOpenCodeConfigPaths()[1];
|
|
216
216
|
}
|
|
217
217
|
function getLiteConfig() {
|
|
218
|
-
return join(getConfigDir(), "oh-my-opencode-
|
|
218
|
+
return join(getConfigDir(), "oh-my-opencode-serverlocal.json");
|
|
219
219
|
}
|
|
220
220
|
function getLiteConfigJsonc() {
|
|
221
|
-
return join(getConfigDir(), "oh-my-opencode-
|
|
221
|
+
return join(getConfigDir(), "oh-my-opencode-serverlocal.jsonc");
|
|
222
222
|
}
|
|
223
223
|
function getTuiConfig() {
|
|
224
224
|
const customConfigPath = getCustomTuiConfigPath();
|
|
@@ -639,10 +639,10 @@ var CUSTOM_SKILLS = [
|
|
|
639
639
|
sourcePath: "src/skills/reflect"
|
|
640
640
|
},
|
|
641
641
|
{
|
|
642
|
-
name: "oh-my-opencode-
|
|
643
|
-
description: "Configure, customize, and safely improve oh-my-opencode-
|
|
642
|
+
name: "oh-my-opencode-serverlocal",
|
|
643
|
+
description: "Configure, customize, and safely improve oh-my-opencode-serverlocal setups",
|
|
644
644
|
allowedAgents: ["orchestrator"],
|
|
645
|
-
sourcePath: "src/skills/oh-my-opencode-
|
|
645
|
+
sourcePath: "src/skills/oh-my-opencode-serverlocal"
|
|
646
646
|
},
|
|
647
647
|
{
|
|
648
648
|
name: "worktrees",
|
|
@@ -653,7 +653,7 @@ var CUSTOM_SKILLS = [
|
|
|
653
653
|
];
|
|
654
654
|
|
|
655
655
|
// src/cli/providers.ts
|
|
656
|
-
var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-
|
|
656
|
+
var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-serverlocal@latest/oh-my-opencode-serverlocal.schema.json";
|
|
657
657
|
var GENERATED_PRESETS = ["openai", "opencode-go"];
|
|
658
658
|
var MODEL_MAPPINGS = {
|
|
659
659
|
openai: {
|
|
@@ -765,7 +765,7 @@ function generateLiteConfig(installConfig) {
|
|
|
765
765
|
}
|
|
766
766
|
|
|
767
767
|
// src/cli/config-io.ts
|
|
768
|
-
var PACKAGE_NAME = "oh-my-opencode-
|
|
768
|
+
var PACKAGE_NAME = "oh-my-opencode-serverlocal";
|
|
769
769
|
var DEFAULT_OPENCODE_AGENTS_TO_DISABLE = ["explore", "general"];
|
|
770
770
|
function isString(value) {
|
|
771
771
|
return typeof value === "string";
|
|
@@ -1292,8 +1292,8 @@ function findConfigPathInDirs(configDirs, baseName) {
|
|
|
1292
1292
|
return null;
|
|
1293
1293
|
}
|
|
1294
1294
|
function findPluginConfigPaths(directory) {
|
|
1295
|
-
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-
|
|
1296
|
-
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-
|
|
1295
|
+
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-serverlocal");
|
|
1296
|
+
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-serverlocal");
|
|
1297
1297
|
const projectConfigPath = findConfigPath(projectConfigBasePath);
|
|
1298
1298
|
return { userConfigPath, projectConfigPath };
|
|
1299
1299
|
}
|
|
@@ -1505,7 +1505,7 @@ function formatJsonDoctorResult(result) {
|
|
|
1505
1505
|
}
|
|
1506
1506
|
async function doctor(args) {
|
|
1507
1507
|
if (args.help) {
|
|
1508
|
-
console.log(`Usage: oh-my-opencode-
|
|
1508
|
+
console.log(`Usage: oh-my-opencode-serverlocal doctor [OPTIONS]
|
|
1509
1509
|
|
|
1510
1510
|
Options:
|
|
1511
1511
|
--json Print diagnostics as JSON
|
|
@@ -1966,7 +1966,7 @@ function syncBundledSkillsFromPackage(packageRoot, options = {}) {
|
|
|
1966
1966
|
} catch (err) {
|
|
1967
1967
|
log(`[skill-sync] Failed to read package version from ${packageRoot}:`, err);
|
|
1968
1968
|
}
|
|
1969
|
-
const manifestDir = path2.join(getConfigDir(), ".oh-my-opencode-
|
|
1969
|
+
const manifestDir = path2.join(getConfigDir(), ".oh-my-opencode-serverlocal");
|
|
1970
1970
|
const lockDir = path2.join(manifestDir, "skills.lock");
|
|
1971
1971
|
try {
|
|
1972
1972
|
mkdirSync3(manifestDir, { recursive: true });
|
|
@@ -2474,8 +2474,8 @@ import { existsSync as existsSync5, mkdirSync as mkdirSync4, readFileSync as rea
|
|
|
2474
2474
|
import { homedir as homedir3 } from "node:os";
|
|
2475
2475
|
import { dirname as dirname4, join as join5 } from "node:path";
|
|
2476
2476
|
var ENV_NAME = "OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS";
|
|
2477
|
-
var START_MARKER = "# >>> oh-my-opencode-
|
|
2478
|
-
var END_MARKER = "# <<< oh-my-opencode-
|
|
2477
|
+
var START_MARKER = "# >>> oh-my-opencode-serverlocal background subagents >>>";
|
|
2478
|
+
var END_MARKER = "# <<< oh-my-opencode-serverlocal background subagents <<<";
|
|
2479
2479
|
function isBackgroundSubagentsEnabled(value) {
|
|
2480
2480
|
if (!value)
|
|
2481
2481
|
return false;
|
|
@@ -2590,13 +2590,13 @@ var FIRST_METADATA_VERSION = "0.1.2";
|
|
|
2590
2590
|
var COMPANION_MANIFEST = {
|
|
2591
2591
|
version: "0.1.3",
|
|
2592
2592
|
tag: "companion-v0.1.3",
|
|
2593
|
-
repo: "
|
|
2593
|
+
repo: "Darthph0enix7/oh-my-opencode-serverlocal",
|
|
2594
2594
|
checksums: {
|
|
2595
|
-
"oh-my-opencode-
|
|
2596
|
-
"oh-my-opencode-
|
|
2597
|
-
"oh-my-opencode-
|
|
2598
|
-
"oh-my-opencode-
|
|
2599
|
-
"oh-my-opencode-
|
|
2595
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-apple-darwin.tar.gz": "b4885f9b1900c02376e5f8f5ae6f3b8a89d26f7514b03f836d7e3d618164a0ed",
|
|
2596
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-unknown-linux-gnu.tar.gz": "ed7cffc583e1eaa78c9bea702e6b6aa3bbc5bb4d881713fb2050237ba6b7aca5",
|
|
2597
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-apple-darwin.tar.gz": "98d8ea7c7bc4415b18e0d4c524adb4eb9a84c872919840fdc021f0f50c61f808",
|
|
2598
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-pc-windows-msvc.zip": "9316a49bf01f3b4fb1ce2d62edfc46094e73bb153d6ce023fb7df085afcf77bd",
|
|
2599
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-unknown-linux-gnu.tar.gz": "33f5fd4b6c80155a019391e5efb13904ca9531ba8dd8c6cba30a161f1b07b764"
|
|
2600
2600
|
}
|
|
2601
2601
|
};
|
|
2602
2602
|
function getCompanionTarget() {
|
|
@@ -2621,7 +2621,7 @@ function getCompanionTarget() {
|
|
|
2621
2621
|
function getCompanionBinaryPath() {
|
|
2622
2622
|
const xdg = process.env.XDG_DATA_HOME?.trim();
|
|
2623
2623
|
const base = xdg && path3.isAbsolute(xdg) ? xdg : path3.join(homedir4(), ".local", "share");
|
|
2624
|
-
return path3.join(base, "opencode", "storage", "oh-my-opencode-
|
|
2624
|
+
return path3.join(base, "opencode", "storage", "oh-my-opencode-serverlocal", "bin", platform() === "win32" ? "oh-my-opencode-serverlocal-companion.exe" : "oh-my-opencode-serverlocal-companion");
|
|
2625
2625
|
}
|
|
2626
2626
|
async function ensureCompanionVersion(options) {
|
|
2627
2627
|
const { config, dryRun = false } = options;
|
|
@@ -2748,7 +2748,7 @@ async function installCompanionArchive(finalBinaryPath, target, manifest, downlo
|
|
|
2748
2748
|
};
|
|
2749
2749
|
}
|
|
2750
2750
|
}
|
|
2751
|
-
const binaryName = isWindows ? "oh-my-opencode-
|
|
2751
|
+
const binaryName = isWindows ? "oh-my-opencode-serverlocal-companion.exe" : "oh-my-opencode-serverlocal-companion";
|
|
2752
2752
|
const extractedBinaryPath = path3.join(extractedDir, binaryName);
|
|
2753
2753
|
if (!existsSync6(extractedBinaryPath)) {
|
|
2754
2754
|
return {
|
|
@@ -2856,7 +2856,7 @@ async function withCompanionInstallLock(binaryPath, timeoutMs, staleMs, run) {
|
|
|
2856
2856
|
}
|
|
2857
2857
|
function companionArchiveName(version, target, isWindows = process.platform === "win32") {
|
|
2858
2858
|
const ext = isWindows ? "zip" : "tar.gz";
|
|
2859
|
-
return `oh-my-opencode-
|
|
2859
|
+
return `oh-my-opencode-serverlocal-companion-v${version}-${target}.${ext}`;
|
|
2860
2860
|
}
|
|
2861
2861
|
function compareSemver(a, b) {
|
|
2862
2862
|
const left = parseSemver(a);
|
|
@@ -2892,7 +2892,7 @@ async function installCompanion(config) {
|
|
|
2892
2892
|
};
|
|
2893
2893
|
}
|
|
2894
2894
|
const ext = process.platform === "win32" ? "zip" : "tar.gz";
|
|
2895
|
-
const archiveName = `oh-my-opencode-
|
|
2895
|
+
const archiveName = `oh-my-opencode-serverlocal-companion-v${COMPANION_MANIFEST.version}-${target}.${ext}`;
|
|
2896
2896
|
const downloadUrl = `https://github.com/${COMPANION_MANIFEST.repo}/releases/download/${COMPANION_MANIFEST.tag}/${archiveName}`;
|
|
2897
2897
|
if (config.dryRun) {
|
|
2898
2898
|
console.log(` [dry-run] Detected companion target: ${target}`);
|
|
@@ -3064,11 +3064,11 @@ var SYMBOLS = {
|
|
|
3064
3064
|
warn: `${YELLOW}[!]${RESET}`,
|
|
3065
3065
|
star: `${YELLOW}★${RESET}`
|
|
3066
3066
|
};
|
|
3067
|
-
var GITHUB_REPO = "
|
|
3067
|
+
var GITHUB_REPO = "Darthph0enix7/oh-my-opencode-serverlocal";
|
|
3068
3068
|
var GITHUB_URL = `https://github.com/${GITHUB_REPO}`;
|
|
3069
3069
|
function printHeader(isUpdate) {
|
|
3070
3070
|
console.log();
|
|
3071
|
-
console.log(`${BOLD}oh-my-opencode-
|
|
3071
|
+
console.log(`${BOLD}oh-my-opencode-serverlocal ${isUpdate ? "Update" : "Install"}${RESET}`);
|
|
3072
3072
|
console.log("=".repeat(30));
|
|
3073
3073
|
console.log();
|
|
3074
3074
|
}
|
|
@@ -3248,7 +3248,7 @@ async function runInstall(config) {
|
|
|
3248
3248
|
if (!ok)
|
|
3249
3249
|
return 1;
|
|
3250
3250
|
}
|
|
3251
|
-
printStep(step++, totalSteps, "Adding oh-my-opencode-
|
|
3251
|
+
printStep(step++, totalSteps, "Adding oh-my-opencode-serverlocal plugin...");
|
|
3252
3252
|
if (config.dryRun) {
|
|
3253
3253
|
printInfo("Dry run mode - skipping plugin installation");
|
|
3254
3254
|
} else {
|
|
@@ -3305,7 +3305,7 @@ async function runInstall(config) {
|
|
|
3305
3305
|
if (!companionResult.success)
|
|
3306
3306
|
config.companion = "no";
|
|
3307
3307
|
}
|
|
3308
|
-
printStep(step++, totalSteps, "Writing oh-my-opencode-
|
|
3308
|
+
printStep(step++, totalSteps, "Writing oh-my-opencode-serverlocal configuration...");
|
|
3309
3309
|
if (config.dryRun) {
|
|
3310
3310
|
const liteConfig = generateLiteConfig(config);
|
|
3311
3311
|
printInfo("Dry run mode - configuration that would be written:");
|
|
@@ -3416,7 +3416,7 @@ ${JSON.stringify(liteConfig, null, 2)}
|
|
|
3416
3416
|
console.log(`${modelsInfo}`);
|
|
3417
3417
|
const altProviders = "For the full configuration reference, see:";
|
|
3418
3418
|
console.log(altProviders);
|
|
3419
|
-
const docsUrl = "https://github.com/
|
|
3419
|
+
const docsUrl = "https://github.com/Darthph0enix7/oh-my-opencode-serverlocal/blob/master/docs/configuration.md";
|
|
3420
3420
|
console.log(` ${BLUE}${docsUrl}${RESET}`);
|
|
3421
3421
|
console.log();
|
|
3422
3422
|
await askToStarRepo(config);
|
|
@@ -3495,11 +3495,11 @@ function parseArgs(args) {
|
|
|
3495
3495
|
}
|
|
3496
3496
|
function printHelp() {
|
|
3497
3497
|
console.log(`
|
|
3498
|
-
oh-my-opencode-
|
|
3498
|
+
oh-my-opencode-serverlocal installer
|
|
3499
3499
|
|
|
3500
3500
|
Usage:
|
|
3501
|
-
bunx oh-my-opencode-
|
|
3502
|
-
bunx oh-my-opencode-
|
|
3501
|
+
bunx oh-my-opencode-serverlocal install [OPTIONS]
|
|
3502
|
+
bunx oh-my-opencode-serverlocal doctor [OPTIONS]
|
|
3503
3503
|
|
|
3504
3504
|
Options:
|
|
3505
3505
|
--skills=yes|no Install bundled skills (default: yes)
|
|
@@ -3526,12 +3526,12 @@ OpenAI is active unless --preset selects another generated preset.
|
|
|
3526
3526
|
For the full config reference, see docs/configuration.md.
|
|
3527
3527
|
|
|
3528
3528
|
Examples:
|
|
3529
|
-
bunx oh-my-opencode-
|
|
3530
|
-
bunx oh-my-opencode-
|
|
3531
|
-
bunx oh-my-opencode-
|
|
3532
|
-
bunx oh-my-opencode-
|
|
3533
|
-
bunx oh-my-opencode-
|
|
3534
|
-
bunx oh-my-opencode-
|
|
3529
|
+
bunx oh-my-opencode-serverlocal install
|
|
3530
|
+
bunx oh-my-opencode-serverlocal install --no-tui --skills=yes
|
|
3531
|
+
bunx oh-my-opencode-serverlocal install --background-subagents=yes
|
|
3532
|
+
bunx oh-my-opencode-serverlocal install --preset=opencode-go
|
|
3533
|
+
bunx oh-my-opencode-serverlocal install --reset
|
|
3534
|
+
bunx oh-my-opencode-serverlocal doctor
|
|
3535
3535
|
`);
|
|
3536
3536
|
}
|
|
3537
3537
|
async function main() {
|
|
@@ -7,7 +7,7 @@ export declare const PROTECTED_AGENTS: Set<string>;
|
|
|
7
7
|
/**
|
|
8
8
|
* Default models for each agent.
|
|
9
9
|
* All set to undefined so agents follow the global/session model.
|
|
10
|
-
* Users can override per-agent via oh-my-opencode-
|
|
10
|
+
* Users can override per-agent via oh-my-opencode-serverlocal.json agents.<name>.model.
|
|
11
11
|
*/
|
|
12
12
|
export declare const DEFAULT_MODELS: Record<AgentName, string | undefined>;
|
|
13
13
|
export declare const POLL_INTERVAL_MS = 500;
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface LoadPluginConfigOptions {
|
|
|
29
29
|
/**
|
|
30
30
|
* Find plugin config paths (user and project) for a given directory.
|
|
31
31
|
* User config uses getConfigSearchDirs() for lookup.
|
|
32
|
-
* Project config uses <directory>/.opencode/oh-my-opencode-
|
|
32
|
+
* Project config uses <directory>/.opencode/oh-my-opencode-serverlocal.
|
|
33
33
|
*
|
|
34
34
|
* @param directory - Project directory to search for .opencode config
|
|
35
35
|
* @returns Object with userConfigPath and projectConfigPath (null if not found)
|
|
@@ -56,9 +56,9 @@ export declare function deepMerge<T extends Record<string, unknown>>(base?: T, o
|
|
|
56
56
|
* Load plugin configuration from user and project config files, merging them appropriately.
|
|
57
57
|
*
|
|
58
58
|
* Configuration is loaded from two locations:
|
|
59
|
-
* 1. User config: $OPENCODE_CONFIG_DIR/oh-my-opencode-
|
|
60
|
-
* or ~/.config/opencode/oh-my-opencode-
|
|
61
|
-
* 2. Project config: <directory>/.opencode/oh-my-opencode-
|
|
59
|
+
* 1. User config: $OPENCODE_CONFIG_DIR/oh-my-opencode-serverlocal.jsonc or .json,
|
|
60
|
+
* or ~/.config/opencode/oh-my-opencode-serverlocal.jsonc or .json (or $XDG_CONFIG_HOME)
|
|
61
|
+
* 2. Project config: <directory>/.opencode/oh-my-opencode-serverlocal.jsonc or .json
|
|
62
62
|
*
|
|
63
63
|
* JSONC format is preferred over JSON (allows comments and trailing commas).
|
|
64
64
|
* Project config takes precedence over user config. Nested objects (agents, tmux) are
|
|
@@ -33,7 +33,7 @@ interface SkillSyncOptions {
|
|
|
33
33
|
* from the published npm package tarballs to allow upgrading existing users.
|
|
34
34
|
*
|
|
35
35
|
* How to populate:
|
|
36
|
-
* 1. Download previous releases of the npm package: `npm pack oh-my-opencode-
|
|
36
|
+
* 1. Download previous releases of the npm package: `npm pack oh-my-opencode-serverlocal@<version>`
|
|
37
37
|
* 2. Compute directory hash for each legacy skill directory inside the unpacked tarball:
|
|
38
38
|
* `import { computeDirectoryHash } from './skill-sync';`
|
|
39
39
|
* `const hash = computeDirectoryHash('path/to/extracted/package/src/skills/<skill-name>');`
|
|
@@ -51,7 +51,7 @@ export declare const LEGACY_MANAGED_SKILL_HASHES: Record<string, string[]>;
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function computeDirectoryHash(dirPath: string): string;
|
|
53
53
|
/**
|
|
54
|
-
* Acquires a simple lock under .oh-my-opencode-
|
|
54
|
+
* Acquires a simple lock under .oh-my-opencode-serverlocal.
|
|
55
55
|
* Avoids stealing active locks purely by time; writes owner metadata
|
|
56
56
|
* and only steals dead same-host pid if detectable.
|
|
57
57
|
*/
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { PHASE_REMINDER } from '../../config/constants';
|
|
9
9
|
import { type MessagePart } from '../types';
|
|
10
10
|
export { PHASE_REMINDER };
|
|
11
|
-
export declare const PHASE_REMINDER_METADATA_KEY = "oh-my-opencode-
|
|
11
|
+
export declare const PHASE_REMINDER_METADATA_KEY = "oh-my-opencode-serverlocal.phaseReminder";
|
|
12
12
|
export declare function hasPhaseReminder(part: MessagePart): boolean;
|
|
13
13
|
interface PhaseReminderOptions {
|
|
14
14
|
shouldInject?: (sessionID: string) => boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PluginInput } from '@opencode-ai/plugin';
|
|
2
2
|
import { type BackgroundJobStore } from '../../utils';
|
|
3
3
|
import type { SessionLifecycle } from '../session-lifecycle';
|
|
4
|
-
export declare const BACKGROUND_JOB_BOARD_METADATA_KEY = "oh-my-opencode-
|
|
4
|
+
export declare const BACKGROUND_JOB_BOARD_METADATA_KEY = "oh-my-opencode-serverlocal.backgroundJobBoard";
|
|
5
5
|
export declare function createTaskSessionManagerHook(_ctx: PluginInput, options: {
|
|
6
6
|
maxSessionsPerAgent: number;
|
|
7
7
|
readContextMinLines?: number;
|
package/dist/index.js
CHANGED
|
@@ -18376,10 +18376,10 @@ var CUSTOM_SKILLS = [
|
|
|
18376
18376
|
sourcePath: "src/skills/reflect"
|
|
18377
18377
|
},
|
|
18378
18378
|
{
|
|
18379
|
-
name: "oh-my-opencode-
|
|
18380
|
-
description: "Configure, customize, and safely improve oh-my-opencode-
|
|
18379
|
+
name: "oh-my-opencode-serverlocal",
|
|
18380
|
+
description: "Configure, customize, and safely improve oh-my-opencode-serverlocal setups",
|
|
18381
18381
|
allowedAgents: ["orchestrator"],
|
|
18382
|
-
sourcePath: "src/skills/oh-my-opencode-
|
|
18382
|
+
sourcePath: "src/skills/oh-my-opencode-serverlocal"
|
|
18383
18383
|
},
|
|
18384
18384
|
{
|
|
18385
18385
|
name: "worktrees",
|
|
@@ -18867,7 +18867,7 @@ var PluginConfigSchema = z2.object({
|
|
|
18867
18867
|
});
|
|
18868
18868
|
|
|
18869
18869
|
// src/config/loader.ts
|
|
18870
|
-
var PROMPTS_DIR_NAME = "oh-my-opencode-
|
|
18870
|
+
var PROMPTS_DIR_NAME = "oh-my-opencode-serverlocal";
|
|
18871
18871
|
function loadConfigFromPath(configPath, options) {
|
|
18872
18872
|
try {
|
|
18873
18873
|
const content = fs.readFileSync(configPath, "utf-8");
|
|
@@ -18884,7 +18884,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
18884
18884
|
message
|
|
18885
18885
|
});
|
|
18886
18886
|
if (!options?.silent) {
|
|
18887
|
-
console.warn(`[oh-my-opencode-
|
|
18887
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid JSON in ${configPath}:`, message);
|
|
18888
18888
|
}
|
|
18889
18889
|
return null;
|
|
18890
18890
|
}
|
|
@@ -18897,7 +18897,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
18897
18897
|
formatted: result.error.format()
|
|
18898
18898
|
});
|
|
18899
18899
|
if (!options?.silent) {
|
|
18900
|
-
console.warn(`[oh-my-opencode-
|
|
18900
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid config at ${configPath}:`);
|
|
18901
18901
|
console.warn(result.error.format());
|
|
18902
18902
|
}
|
|
18903
18903
|
return null;
|
|
@@ -18911,7 +18911,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
18911
18911
|
message: error.message
|
|
18912
18912
|
});
|
|
18913
18913
|
if (!options?.silent) {
|
|
18914
|
-
console.warn(`[oh-my-opencode-
|
|
18914
|
+
console.warn(`[oh-my-opencode-serverlocal] Error reading config from ${configPath}:`, error.message);
|
|
18915
18915
|
}
|
|
18916
18916
|
}
|
|
18917
18917
|
return null;
|
|
@@ -18950,13 +18950,13 @@ function validateFinalImageRouting(config, configPath, options) {
|
|
|
18950
18950
|
message
|
|
18951
18951
|
});
|
|
18952
18952
|
if (!options?.silent) {
|
|
18953
|
-
console.warn(`[oh-my-opencode-
|
|
18953
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid config: ${message}`);
|
|
18954
18954
|
}
|
|
18955
18955
|
return false;
|
|
18956
18956
|
}
|
|
18957
18957
|
function findPluginConfigPaths(directory) {
|
|
18958
|
-
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-
|
|
18959
|
-
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-
|
|
18958
|
+
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-serverlocal");
|
|
18959
|
+
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-serverlocal");
|
|
18960
18960
|
const projectConfigPath = findConfigPath(projectConfigBasePath);
|
|
18961
18961
|
return { userConfigPath, projectConfigPath };
|
|
18962
18962
|
}
|
|
@@ -19019,7 +19019,7 @@ function loadPluginConfig(directory, options) {
|
|
|
19019
19019
|
message
|
|
19020
19020
|
});
|
|
19021
19021
|
if (!options?.silent) {
|
|
19022
|
-
console.warn(`[oh-my-opencode-
|
|
19022
|
+
console.warn(`[oh-my-opencode-serverlocal] ${message}`);
|
|
19023
19023
|
}
|
|
19024
19024
|
}
|
|
19025
19025
|
}
|
|
@@ -19072,7 +19072,7 @@ function loadAgentPrompt(agentName, optionsOrPreset) {
|
|
|
19072
19072
|
try {
|
|
19073
19073
|
return fs.readFileSync(promptPath, "utf-8");
|
|
19074
19074
|
} catch (error) {
|
|
19075
|
-
console.warn(`[oh-my-opencode-
|
|
19075
|
+
console.warn(`[oh-my-opencode-serverlocal] ${errorPrefix} ${promptPath}:`, error instanceof Error ? error.message : String(error));
|
|
19076
19076
|
}
|
|
19077
19077
|
}
|
|
19078
19078
|
return;
|
|
@@ -20435,7 +20435,7 @@ import * as fs2 from "node:fs";
|
|
|
20435
20435
|
import { appendFile } from "node:fs/promises";
|
|
20436
20436
|
import * as os from "node:os";
|
|
20437
20437
|
import * as path2 from "node:path";
|
|
20438
|
-
var LOG_PREFIX = "oh-my-opencode-
|
|
20438
|
+
var LOG_PREFIX = "oh-my-opencode-serverlocal.";
|
|
20439
20439
|
var LOG_SUFFIX = ".log";
|
|
20440
20440
|
var RETENTION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
20441
20441
|
var logFile = null;
|
|
@@ -20513,12 +20513,12 @@ var activeManagers = new Set;
|
|
|
20513
20513
|
function stateFilePath() {
|
|
20514
20514
|
const xdg = process.env.XDG_DATA_HOME?.trim();
|
|
20515
20515
|
const base = xdg && path3.isAbsolute(xdg) ? xdg : path3.join(os2.homedir(), ".local", "share");
|
|
20516
|
-
return path3.join(base, "opencode", "storage", "oh-my-opencode-
|
|
20516
|
+
return path3.join(base, "opencode", "storage", "oh-my-opencode-serverlocal", "companion-state.json");
|
|
20517
20517
|
}
|
|
20518
20518
|
function pidFilePath() {
|
|
20519
20519
|
const xdg = process.env.XDG_DATA_HOME?.trim();
|
|
20520
20520
|
const base = xdg && path3.isAbsolute(xdg) ? xdg : path3.join(os2.homedir(), ".local", "share");
|
|
20521
|
-
return path3.join(base, "opencode", "storage", "oh-my-opencode-
|
|
20521
|
+
return path3.join(base, "opencode", "storage", "oh-my-opencode-serverlocal", "companion.pid");
|
|
20522
20522
|
}
|
|
20523
20523
|
function isProcessAlive(pid) {
|
|
20524
20524
|
if (!Number.isInteger(pid) || pid <= 0)
|
|
@@ -20589,8 +20589,8 @@ function pidFileLockHasLiveOwner(lock) {
|
|
|
20589
20589
|
function defaultBinaryPath() {
|
|
20590
20590
|
const xdg = process.env.XDG_DATA_HOME?.trim();
|
|
20591
20591
|
const base = xdg && path3.isAbsolute(xdg) ? xdg : path3.join(os2.homedir(), ".local", "share");
|
|
20592
|
-
const binaryName = os2.platform() === "win32" ? "oh-my-opencode-
|
|
20593
|
-
return path3.join(base, "opencode", "storage", "oh-my-opencode-
|
|
20592
|
+
const binaryName = os2.platform() === "win32" ? "oh-my-opencode-serverlocal-companion.exe" : "oh-my-opencode-serverlocal-companion";
|
|
20593
|
+
return path3.join(base, "opencode", "storage", "oh-my-opencode-serverlocal", "bin", binaryName);
|
|
20594
20594
|
}
|
|
20595
20595
|
function resolveCompanionBinaryPath(config) {
|
|
20596
20596
|
const configured = config?.binaryPath?.trim();
|
|
@@ -20940,13 +20940,13 @@ var FIRST_METADATA_VERSION = "0.1.2";
|
|
|
20940
20940
|
var COMPANION_MANIFEST = {
|
|
20941
20941
|
version: "0.1.3",
|
|
20942
20942
|
tag: "companion-v0.1.3",
|
|
20943
|
-
repo: "
|
|
20943
|
+
repo: "Darthph0enix7/oh-my-opencode-serverlocal",
|
|
20944
20944
|
checksums: {
|
|
20945
|
-
"oh-my-opencode-
|
|
20946
|
-
"oh-my-opencode-
|
|
20947
|
-
"oh-my-opencode-
|
|
20948
|
-
"oh-my-opencode-
|
|
20949
|
-
"oh-my-opencode-
|
|
20945
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-apple-darwin.tar.gz": "b4885f9b1900c02376e5f8f5ae6f3b8a89d26f7514b03f836d7e3d618164a0ed",
|
|
20946
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-unknown-linux-gnu.tar.gz": "ed7cffc583e1eaa78c9bea702e6b6aa3bbc5bb4d881713fb2050237ba6b7aca5",
|
|
20947
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-apple-darwin.tar.gz": "98d8ea7c7bc4415b18e0d4c524adb4eb9a84c872919840fdc021f0f50c61f808",
|
|
20948
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-pc-windows-msvc.zip": "9316a49bf01f3b4fb1ce2d62edfc46094e73bb153d6ce023fb7df085afcf77bd",
|
|
20949
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-unknown-linux-gnu.tar.gz": "33f5fd4b6c80155a019391e5efb13904ca9531ba8dd8c6cba30a161f1b07b764"
|
|
20950
20950
|
}
|
|
20951
20951
|
};
|
|
20952
20952
|
function getCompanionTarget() {
|
|
@@ -20971,7 +20971,7 @@ function getCompanionTarget() {
|
|
|
20971
20971
|
function getCompanionBinaryPath() {
|
|
20972
20972
|
const xdg = process.env.XDG_DATA_HOME?.trim();
|
|
20973
20973
|
const base = xdg && path4.isAbsolute(xdg) ? xdg : path4.join(homedir4(), ".local", "share");
|
|
20974
|
-
return path4.join(base, "opencode", "storage", "oh-my-opencode-
|
|
20974
|
+
return path4.join(base, "opencode", "storage", "oh-my-opencode-serverlocal", "bin", platform2() === "win32" ? "oh-my-opencode-serverlocal-companion.exe" : "oh-my-opencode-serverlocal-companion");
|
|
20975
20975
|
}
|
|
20976
20976
|
function loadCompanionManifestFromPackageRoot(packageRoot) {
|
|
20977
20977
|
const manifestPath = path4.join(packageRoot, "src", "companion", "companion-manifest.json");
|
|
@@ -21115,7 +21115,7 @@ async function installCompanionArchive(finalBinaryPath, target, manifest, downlo
|
|
|
21115
21115
|
};
|
|
21116
21116
|
}
|
|
21117
21117
|
}
|
|
21118
|
-
const binaryName = isWindows ? "oh-my-opencode-
|
|
21118
|
+
const binaryName = isWindows ? "oh-my-opencode-serverlocal-companion.exe" : "oh-my-opencode-serverlocal-companion";
|
|
21119
21119
|
const extractedBinaryPath = path4.join(extractedDir, binaryName);
|
|
21120
21120
|
if (!existsSync3(extractedBinaryPath)) {
|
|
21121
21121
|
return {
|
|
@@ -21223,7 +21223,7 @@ async function withCompanionInstallLock(binaryPath, timeoutMs, staleMs, run) {
|
|
|
21223
21223
|
}
|
|
21224
21224
|
function companionArchiveName(version, target, isWindows = process.platform === "win32") {
|
|
21225
21225
|
const ext = isWindows ? "zip" : "tar.gz";
|
|
21226
|
-
return `oh-my-opencode-
|
|
21226
|
+
return `oh-my-opencode-serverlocal-companion-v${version}-${target}.${ext}`;
|
|
21227
21227
|
}
|
|
21228
21228
|
function compareSemver(a, b) {
|
|
21229
21229
|
const left = parseSemver(a);
|
|
@@ -23935,7 +23935,7 @@ function syncBundledSkillsFromPackage(packageRoot, options = {}) {
|
|
|
23935
23935
|
} catch (err) {
|
|
23936
23936
|
log(`[skill-sync] Failed to read package version from ${packageRoot}:`, err);
|
|
23937
23937
|
}
|
|
23938
|
-
const manifestDir = path10.join(getConfigDir(), ".oh-my-opencode-
|
|
23938
|
+
const manifestDir = path10.join(getConfigDir(), ".oh-my-opencode-serverlocal");
|
|
23939
23939
|
const lockDir = path10.join(manifestDir, "skills.lock");
|
|
23940
23940
|
try {
|
|
23941
23941
|
mkdirSync4(manifestDir, { recursive: true });
|
|
@@ -24613,8 +24613,8 @@ Version is pinned. Update your plugin config to apply.`, "info", 8000);
|
|
|
24613
24613
|
}
|
|
24614
24614
|
}
|
|
24615
24615
|
function showMajorUpgradeToast(ctx, version) {
|
|
24616
|
-
showToast(ctx, `oh-my-opencode-
|
|
24617
|
-
Run: bunx oh-my-opencode-
|
|
24616
|
+
showToast(ctx, `oh-my-opencode-serverlocal v${version} is available.`, `It requires OpenCode background subagents.
|
|
24617
|
+
Run: bunx oh-my-opencode-serverlocal@latest install`, "info", 12000);
|
|
24618
24618
|
}
|
|
24619
24619
|
async function runBunInstallSafe(installDir) {
|
|
24620
24620
|
try {
|
|
@@ -25341,7 +25341,7 @@ function isRecord2(value) {
|
|
|
25341
25341
|
|
|
25342
25342
|
// src/utils/internal-initiator.ts
|
|
25343
25343
|
var SLIM_INTERNAL_INITIATOR_MARKER = "<!-- SLIM_INTERNAL_INITIATOR -->";
|
|
25344
|
-
var INTERNAL_INITIATOR_METADATA_KEY = "oh-my-opencode-
|
|
25344
|
+
var INTERNAL_INITIATOR_METADATA_KEY = "oh-my-opencode-serverlocal.internalInitiator";
|
|
25345
25345
|
function createInternalAgentTextPart(text) {
|
|
25346
25346
|
return {
|
|
25347
25347
|
type: "text",
|
|
@@ -26405,7 +26405,7 @@ function createLoopCommandHook() {
|
|
|
26405
26405
|
};
|
|
26406
26406
|
}
|
|
26407
26407
|
// src/hooks/phase-reminder/index.ts
|
|
26408
|
-
var PHASE_REMINDER_METADATA_KEY = "oh-my-opencode-
|
|
26408
|
+
var PHASE_REMINDER_METADATA_KEY = "oh-my-opencode-serverlocal.phaseReminder";
|
|
26409
26409
|
function hasPhaseReminder(part) {
|
|
26410
26410
|
return part.synthetic === true && isRecord2(part.metadata) && part.metadata[PHASE_REMINDER_METADATA_KEY] === true;
|
|
26411
26411
|
}
|
|
@@ -26700,7 +26700,7 @@ function extractReadFiles(root, output) {
|
|
|
26700
26700
|
}
|
|
26701
26701
|
|
|
26702
26702
|
// src/hooks/task-session-manager/index.ts
|
|
26703
|
-
var BACKGROUND_JOB_BOARD_METADATA_KEY = "oh-my-opencode-
|
|
26703
|
+
var BACKGROUND_JOB_BOARD_METADATA_KEY = "oh-my-opencode-serverlocal.backgroundJobBoard";
|
|
26704
26704
|
var BACKGROUND_COMPLETION_COMPLETED = /^Background task completed: /;
|
|
26705
26705
|
var BACKGROUND_COMPLETION_FAILED = /^Background task failed: /;
|
|
26706
26706
|
var MAX_PROCESSED_INJECTED_COMPLETIONS = 500;
|
|
@@ -33788,7 +33788,7 @@ class CmuxClosePolicy {
|
|
|
33788
33788
|
}
|
|
33789
33789
|
|
|
33790
33790
|
// src/multiplexer/cmux/session-state.ts
|
|
33791
|
-
var STORE_KEY = Symbol.for("oh-my-opencode-
|
|
33791
|
+
var STORE_KEY = Symbol.for("oh-my-opencode-serverlocal.cmux-session-store");
|
|
33792
33792
|
function records() {
|
|
33793
33793
|
const globalStore = globalThis;
|
|
33794
33794
|
globalStore[STORE_KEY] ??= new Map;
|
|
@@ -34396,7 +34396,7 @@ class CmuxSessionLifecycle {
|
|
|
34396
34396
|
}
|
|
34397
34397
|
|
|
34398
34398
|
// src/multiplexer/session-manager.ts
|
|
34399
|
-
var SHARED_STATE_KEY = Symbol.for("oh-my-opencode-
|
|
34399
|
+
var SHARED_STATE_KEY = Symbol.for("oh-my-opencode-serverlocal.multiplexer-session-manager.state");
|
|
34400
34400
|
function getSharedState() {
|
|
34401
34401
|
const globalWithState = globalThis;
|
|
34402
34402
|
globalWithState[SHARED_STATE_KEY] ??= {
|
|
@@ -34993,8 +34993,8 @@ class AcpClient {
|
|
|
34993
34993
|
protocolVersion: 1,
|
|
34994
34994
|
clientCapabilities: {},
|
|
34995
34995
|
clientInfo: {
|
|
34996
|
-
name: "oh-my-opencode-
|
|
34997
|
-
title: "oh-my-opencode-
|
|
34996
|
+
name: "oh-my-opencode-serverlocal",
|
|
34997
|
+
title: "oh-my-opencode-serverlocal ACP bridge"
|
|
34998
34998
|
}
|
|
34999
34999
|
});
|
|
35000
35000
|
this.authMethods = readAuthMethods(init);
|
|
@@ -35314,11 +35314,11 @@ function getCacheDir2() {
|
|
|
35314
35314
|
if (process.platform === "win32") {
|
|
35315
35315
|
const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA;
|
|
35316
35316
|
const base2 = localAppData || join14(homedir6(), "AppData", "Local");
|
|
35317
|
-
return join14(base2, "oh-my-opencode-
|
|
35317
|
+
return join14(base2, "oh-my-opencode-serverlocal", "bin");
|
|
35318
35318
|
}
|
|
35319
35319
|
const xdgCache = process.env.XDG_CACHE_HOME;
|
|
35320
35320
|
const base = xdgCache || join14(homedir6(), ".cache");
|
|
35321
|
-
return join14(base, "oh-my-opencode-
|
|
35321
|
+
return join14(base, "oh-my-opencode-serverlocal", "bin");
|
|
35322
35322
|
}
|
|
35323
35323
|
function getBinaryName() {
|
|
35324
35324
|
return process.platform === "win32" ? "sg.exe" : "sg";
|
|
@@ -35331,7 +35331,7 @@ async function downloadAstGrep(version = DEFAULT_VERSION) {
|
|
|
35331
35331
|
const platformKey = `${process.platform}-${process.arch}`;
|
|
35332
35332
|
const platformInfo = PLATFORM_MAP[platformKey];
|
|
35333
35333
|
if (!platformInfo) {
|
|
35334
|
-
console.error(`[oh-my-opencode-
|
|
35334
|
+
console.error(`[oh-my-opencode-serverlocal] Unsupported platform for ast-grep: ${platformKey}`);
|
|
35335
35335
|
return null;
|
|
35336
35336
|
}
|
|
35337
35337
|
const cacheDir = getCacheDir2();
|
|
@@ -35343,7 +35343,7 @@ async function downloadAstGrep(version = DEFAULT_VERSION) {
|
|
|
35343
35343
|
const { arch, os: os6 } = platformInfo;
|
|
35344
35344
|
const assetName = `app-${arch}-${os6}.zip`;
|
|
35345
35345
|
const downloadUrl = `https://github.com/${REPO}/releases/download/${version}/${assetName}`;
|
|
35346
|
-
console.log(`[oh-my-opencode-
|
|
35346
|
+
console.log(`[oh-my-opencode-serverlocal] Downloading ast-grep binary...`);
|
|
35347
35347
|
try {
|
|
35348
35348
|
if (!existsSync10(cacheDir)) {
|
|
35349
35349
|
mkdirSync7(cacheDir, { recursive: true });
|
|
@@ -35362,10 +35362,10 @@ async function downloadAstGrep(version = DEFAULT_VERSION) {
|
|
|
35362
35362
|
if (process.platform !== "win32" && existsSync10(binaryPath)) {
|
|
35363
35363
|
chmodSync2(binaryPath, 493);
|
|
35364
35364
|
}
|
|
35365
|
-
console.log(`[oh-my-opencode-
|
|
35365
|
+
console.log(`[oh-my-opencode-serverlocal] ast-grep binary ready.`);
|
|
35366
35366
|
return binaryPath;
|
|
35367
35367
|
} catch (err) {
|
|
35368
|
-
console.error(`[oh-my-opencode-
|
|
35368
|
+
console.error(`[oh-my-opencode-serverlocal] Failed to download ast-grep: ${err instanceof Error ? err.message : err}`);
|
|
35369
35369
|
return null;
|
|
35370
35370
|
}
|
|
35371
35371
|
}
|
|
@@ -36291,7 +36291,7 @@ import { createHash as createHash4 } from "node:crypto";
|
|
|
36291
36291
|
import * as fs9 from "node:fs";
|
|
36292
36292
|
import * as os6 from "node:os";
|
|
36293
36293
|
import * as path18 from "node:path";
|
|
36294
|
-
var STATE_DIR = "oh-my-opencode-
|
|
36294
|
+
var STATE_DIR = "oh-my-opencode-serverlocal";
|
|
36295
36295
|
var STATE_FILE = "tui-state.json";
|
|
36296
36296
|
function dataDir() {
|
|
36297
36297
|
return process.env.XDG_DATA_HOME ?? path18.join(os6.homedir(), ".local", "share");
|
|
@@ -36406,7 +36406,7 @@ function createPresetManager(ctx, config) {
|
|
|
36406
36406
|
const preset = presets[presetName];
|
|
36407
36407
|
if (!preset) {
|
|
36408
36408
|
const available = Object.keys(presets);
|
|
36409
|
-
const hint = available.length > 0 ? `Available presets: ${available.join(", ")}` : "No presets configured. Define presets in oh-my-opencode-
|
|
36409
|
+
const hint = available.length > 0 ? `Available presets: ${available.join(", ")}` : "No presets configured. Define presets in oh-my-opencode-serverlocal.jsonc.";
|
|
36410
36410
|
output.parts.push(createInternalAgentTextPart(`Preset "${presetName}" not found. ${hint}`));
|
|
36411
36411
|
return;
|
|
36412
36412
|
}
|
|
@@ -36491,7 +36491,7 @@ ${summaryParts.join(`
|
|
|
36491
36491
|
function formatPresetList(presets) {
|
|
36492
36492
|
const names = Object.keys(presets);
|
|
36493
36493
|
if (names.length === 0) {
|
|
36494
|
-
return 'No presets configured. Define presets in oh-my-opencode-
|
|
36494
|
+
return 'No presets configured. Define presets in oh-my-opencode-serverlocal.jsonc under the "presets" field.';
|
|
36495
36495
|
}
|
|
36496
36496
|
const lines = ["Available presets:"];
|
|
36497
36497
|
for (const name of names) {
|
|
@@ -38900,11 +38900,11 @@ function collapseSystemInPlace(system2) {
|
|
|
38900
38900
|
async function appLog(ctx, level, message) {
|
|
38901
38901
|
try {
|
|
38902
38902
|
await ctx.client.app.log({
|
|
38903
|
-
body: { service: "oh-my-opencode-
|
|
38903
|
+
body: { service: "oh-my-opencode-serverlocal", level, message }
|
|
38904
38904
|
});
|
|
38905
38905
|
} catch {
|
|
38906
38906
|
const prefix2 = level === "error" ? "ERROR" : level === "warn" ? "WARN" : "INFO";
|
|
38907
|
-
console.error(`[oh-my-opencode-
|
|
38907
|
+
console.error(`[oh-my-opencode-serverlocal] ${prefix2}: ${message}`);
|
|
38908
38908
|
}
|
|
38909
38909
|
}
|
|
38910
38910
|
var HEALTH_CHECK = {
|
|
@@ -39103,7 +39103,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
39103
39103
|
toolCount = Object.keys(tools).length;
|
|
39104
39104
|
} catch (err) {
|
|
39105
39105
|
log("[plugin] FATAL: init failed", String(err));
|
|
39106
|
-
await appLog(ctx, "error", `INIT FAILED: ${String(err)}. Report at github.com/
|
|
39106
|
+
await appLog(ctx, "error", `INIT FAILED: ${String(err)}. Report at github.com/Darthph0enix7/oh-my-opencode-serverlocal/issues/310`);
|
|
39107
39107
|
throw err;
|
|
39108
39108
|
}
|
|
39109
39109
|
const agentCount = Object.keys(agents).length;
|
|
@@ -39117,7 +39117,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
39117
39117
|
` mcps: ${mcpCount} (expected >=${mcpThreshold})`,
|
|
39118
39118
|
"This usually means a dependency failed to resolve (jsdom, etc).",
|
|
39119
39119
|
"If you recently updated opencode, see:",
|
|
39120
|
-
" github.com/
|
|
39120
|
+
" github.com/Darthph0enix7/oh-my-opencode-serverlocal/issues/310"
|
|
39121
39121
|
].join(`
|
|
39122
39122
|
`);
|
|
39123
39123
|
log(`[plugin] WARN: ${msg}`);
|
|
@@ -39169,7 +39169,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
39169
39169
|
return;
|
|
39170
39170
|
}
|
|
39171
39171
|
return {
|
|
39172
|
-
name: "oh-my-opencode-
|
|
39172
|
+
name: "oh-my-opencode-serverlocal",
|
|
39173
39173
|
agent: agents,
|
|
39174
39174
|
tool: tools,
|
|
39175
39175
|
mcp: mcps,
|
package/dist/tui.js
CHANGED
|
@@ -577,10 +577,10 @@ var CUSTOM_SKILLS = [
|
|
|
577
577
|
sourcePath: "src/skills/reflect"
|
|
578
578
|
},
|
|
579
579
|
{
|
|
580
|
-
name: "oh-my-opencode-
|
|
581
|
-
description: "Configure, customize, and safely improve oh-my-opencode-
|
|
580
|
+
name: "oh-my-opencode-serverlocal",
|
|
581
|
+
description: "Configure, customize, and safely improve oh-my-opencode-serverlocal setups",
|
|
582
582
|
allowedAgents: ["orchestrator"],
|
|
583
|
-
sourcePath: "src/skills/oh-my-opencode-
|
|
583
|
+
sourcePath: "src/skills/oh-my-opencode-serverlocal"
|
|
584
584
|
},
|
|
585
585
|
{
|
|
586
586
|
name: "worktrees",
|
|
@@ -598,7 +598,7 @@ function stripJsonComments(json) {
|
|
|
598
598
|
}
|
|
599
599
|
|
|
600
600
|
// src/config/loader.ts
|
|
601
|
-
var PROMPTS_DIR_NAME = "oh-my-opencode-
|
|
601
|
+
var PROMPTS_DIR_NAME = "oh-my-opencode-serverlocal";
|
|
602
602
|
function loadConfigFromPath(configPath, options) {
|
|
603
603
|
try {
|
|
604
604
|
const content = fs.readFileSync(configPath, "utf-8");
|
|
@@ -615,7 +615,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
615
615
|
message
|
|
616
616
|
});
|
|
617
617
|
if (!options?.silent) {
|
|
618
|
-
console.warn(`[oh-my-opencode-
|
|
618
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid JSON in ${configPath}:`, message);
|
|
619
619
|
}
|
|
620
620
|
return null;
|
|
621
621
|
}
|
|
@@ -628,7 +628,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
628
628
|
formatted: result.error.format()
|
|
629
629
|
});
|
|
630
630
|
if (!options?.silent) {
|
|
631
|
-
console.warn(`[oh-my-opencode-
|
|
631
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid config at ${configPath}:`);
|
|
632
632
|
console.warn(result.error.format());
|
|
633
633
|
}
|
|
634
634
|
return null;
|
|
@@ -642,7 +642,7 @@ function loadConfigFromPath(configPath, options) {
|
|
|
642
642
|
message: error.message
|
|
643
643
|
});
|
|
644
644
|
if (!options?.silent) {
|
|
645
|
-
console.warn(`[oh-my-opencode-
|
|
645
|
+
console.warn(`[oh-my-opencode-serverlocal] Error reading config from ${configPath}:`, error.message);
|
|
646
646
|
}
|
|
647
647
|
}
|
|
648
648
|
return null;
|
|
@@ -681,13 +681,13 @@ function validateFinalImageRouting(config, configPath, options) {
|
|
|
681
681
|
message
|
|
682
682
|
});
|
|
683
683
|
if (!options?.silent) {
|
|
684
|
-
console.warn(`[oh-my-opencode-
|
|
684
|
+
console.warn(`[oh-my-opencode-serverlocal] Invalid config: ${message}`);
|
|
685
685
|
}
|
|
686
686
|
return false;
|
|
687
687
|
}
|
|
688
688
|
function findPluginConfigPaths(directory) {
|
|
689
|
-
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-
|
|
690
|
-
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-
|
|
689
|
+
const userConfigPath = findConfigPathInDirs(getConfigSearchDirs(), "oh-my-opencode-serverlocal");
|
|
690
|
+
const projectConfigBasePath = path.join(directory, ".opencode", "oh-my-opencode-serverlocal");
|
|
691
691
|
const projectConfigPath = findConfigPath(projectConfigBasePath);
|
|
692
692
|
return { userConfigPath, projectConfigPath };
|
|
693
693
|
}
|
|
@@ -750,7 +750,7 @@ function loadPluginConfig(directory, options) {
|
|
|
750
750
|
message
|
|
751
751
|
});
|
|
752
752
|
if (!options?.silent) {
|
|
753
|
-
console.warn(`[oh-my-opencode-
|
|
753
|
+
console.warn(`[oh-my-opencode-serverlocal] ${message}`);
|
|
754
754
|
}
|
|
755
755
|
}
|
|
756
756
|
}
|
|
@@ -803,7 +803,7 @@ function loadAgentPrompt(agentName, optionsOrPreset) {
|
|
|
803
803
|
try {
|
|
804
804
|
return fs.readFileSync(promptPath, "utf-8");
|
|
805
805
|
} catch (error) {
|
|
806
|
-
console.warn(`[oh-my-opencode-
|
|
806
|
+
console.warn(`[oh-my-opencode-serverlocal] ${errorPrefix} ${promptPath}:`, error instanceof Error ? error.message : String(error));
|
|
807
807
|
}
|
|
808
808
|
}
|
|
809
809
|
return;
|
|
@@ -836,7 +836,7 @@ import { createHash } from "node:crypto";
|
|
|
836
836
|
import * as fs2 from "node:fs";
|
|
837
837
|
import * as os from "node:os";
|
|
838
838
|
import * as path2 from "node:path";
|
|
839
|
-
var STATE_DIR = "oh-my-opencode-
|
|
839
|
+
var STATE_DIR = "oh-my-opencode-serverlocal";
|
|
840
840
|
var STATE_FILE = "tui-state.json";
|
|
841
841
|
function dataDir() {
|
|
842
842
|
return process.env.XDG_DATA_HOME ?? path2.join(os.homedir(), ".local", "share");
|
|
@@ -924,7 +924,7 @@ function isPluginDisabledByEnv(env = process.env) {
|
|
|
924
924
|
}
|
|
925
925
|
|
|
926
926
|
// src/tui.ts
|
|
927
|
-
var PLUGIN_NAME = "oh-my-opencode-
|
|
927
|
+
var PLUGIN_NAME = "oh-my-opencode-serverlocal";
|
|
928
928
|
var CONFIG_WARNING_COLOR = "orange";
|
|
929
929
|
var FALLBACK_SIDEBAR_AGENTS = SUBAGENT_NAMES.filter((agent) => agent !== "councillor" && agent !== "council" && !DEFAULT_DISABLED_AGENTS.includes(agent));
|
|
930
930
|
var BORDER = { type: "single" };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export declare const SLIM_INTERNAL_INITIATOR_MARKER = "<!-- SLIM_INTERNAL_INITIATOR -->";
|
|
2
|
-
export declare const INTERNAL_INITIATOR_METADATA_KEY = "oh-my-opencode-
|
|
2
|
+
export declare const INTERNAL_INITIATOR_METADATA_KEY = "oh-my-opencode-serverlocal.internalInitiator";
|
|
3
3
|
export declare function createInternalAgentTextPart(text: string): {
|
|
4
4
|
type: 'text';
|
|
5
5
|
text: string;
|
|
6
6
|
synthetic: true;
|
|
7
7
|
metadata: {
|
|
8
|
-
'oh-my-opencode-
|
|
8
|
+
'oh-my-opencode-serverlocal.internalInitiator': true;
|
|
9
9
|
};
|
|
10
10
|
};
|
|
11
11
|
export declare function isInternalInitiatorPart(part: unknown): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode-serverlocal",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Custom serverlocal fork of oh-my-opencode-slim — fully owned, custom prompts + commands, dist synced via opencode-dotfiles",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "0.1.3",
|
|
3
3
|
"tag": "companion-v0.1.3",
|
|
4
|
-
"repo": "
|
|
4
|
+
"repo": "Darthph0enix7/oh-my-opencode-serverlocal",
|
|
5
5
|
"checksums": {
|
|
6
|
-
"oh-my-opencode-
|
|
7
|
-
"oh-my-opencode-
|
|
8
|
-
"oh-my-opencode-
|
|
9
|
-
"oh-my-opencode-
|
|
10
|
-
"oh-my-opencode-
|
|
6
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-apple-darwin.tar.gz": "b4885f9b1900c02376e5f8f5ae6f3b8a89d26f7514b03f836d7e3d618164a0ed",
|
|
7
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-aarch64-unknown-linux-gnu.tar.gz": "ed7cffc583e1eaa78c9bea702e6b6aa3bbc5bb4d881713fb2050237ba6b7aca5",
|
|
8
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-apple-darwin.tar.gz": "98d8ea7c7bc4415b18e0d4c524adb4eb9a84c872919840fdc021f0f50c61f808",
|
|
9
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-pc-windows-msvc.zip": "9316a49bf01f3b4fb1ce2d62edfc46094e73bb153d6ce023fb7df085afcf77bd",
|
|
10
|
+
"oh-my-opencode-serverlocal-companion-v0.1.3-x86_64-unknown-linux-gnu.tar.gz": "33f5fd4b6c80155a019391e5efb13904ca9531ba8dd8c6cba30a161f1b07b764"
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -111,15 +111,15 @@ while the `.ignore` allowlist keeps them readable to OpenCode.
|
|
|
111
111
|
`.gitignore`:
|
|
112
112
|
|
|
113
113
|
```gitignore
|
|
114
|
-
# BEGIN oh-my-opencode-
|
|
114
|
+
# BEGIN oh-my-opencode-serverlocal clonedeps
|
|
115
115
|
.slim/clonedeps/repos/
|
|
116
|
-
# END oh-my-opencode-
|
|
116
|
+
# END oh-my-opencode-serverlocal clonedeps
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
`.ignore`:
|
|
120
120
|
|
|
121
121
|
```ignore
|
|
122
|
-
# BEGIN oh-my-opencode-
|
|
122
|
+
# BEGIN oh-my-opencode-serverlocal clonedeps
|
|
123
123
|
!.slim/
|
|
124
124
|
!.slim/clonedeps.json
|
|
125
125
|
!.slim/clonedeps/
|
|
@@ -127,7 +127,7 @@ while the `.ignore` allowlist keeps them readable to OpenCode.
|
|
|
127
127
|
!.slim/clonedeps/repos/**
|
|
128
128
|
.slim/clonedeps/repos/**/.git/
|
|
129
129
|
.slim/clonedeps/repos/**/.git/**
|
|
130
|
-
# END oh-my-opencode-
|
|
130
|
+
# END oh-my-opencode-serverlocal clonedeps
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
### Step 5: Clone Sources Manually
|
|
@@ -56,4 +56,4 @@ Empty templates created in each folder for fixers to fill with:
|
|
|
56
56
|
|
|
57
57
|
## Installation
|
|
58
58
|
|
|
59
|
-
Installed automatically via oh-my-opencode-
|
|
59
|
+
Installed automatically via oh-my-opencode-serverlocal installer when custom skills are enabled.
|
|
@@ -126,7 +126,7 @@ Defines agent personalities and manages their configuration lifecycle.
|
|
|
126
126
|
## Design
|
|
127
127
|
Each agent is a prompt + permission set. Config system uses:
|
|
128
128
|
- Default prompts (orchestrator.ts, explorer.ts, etc.)
|
|
129
|
-
- User overrides from ~/.config/opencode/oh-my-opencode-
|
|
129
|
+
- User overrides from ~/.config/opencode/oh-my-opencode-serverlocal.json
|
|
130
130
|
- Permission wildcards for skill/MCP access control
|
|
131
131
|
|
|
132
132
|
## Flow
|
|
@@ -144,7 +144,7 @@ Each agent is a prompt + permission set. Config system uses:
|
|
|
144
144
|
Example **Root Codemap (Atlas)**:
|
|
145
145
|
|
|
146
146
|
```markdown
|
|
147
|
-
# Repository Atlas: oh-my-opencode-
|
|
147
|
+
# Repository Atlas: oh-my-opencode-serverlocal
|
|
148
148
|
|
|
149
149
|
## Project Responsibility
|
|
150
150
|
A high-performance, low-latency agent orchestration plugin for OpenCode, focusing on specialized sub-agent delegation and multiplexer-assisted child sessions.
|
|
@@ -152,7 +152,7 @@ A high-performance, low-latency agent orchestration plugin for OpenCode, focusin
|
|
|
152
152
|
## System Entry Points
|
|
153
153
|
- `src/index.ts`: Plugin initialization and OpenCode integration.
|
|
154
154
|
- `package.json`: Dependency manifest and build scripts.
|
|
155
|
-
- `oh-my-opencode-
|
|
155
|
+
- `oh-my-opencode-serverlocal.json`: User configuration schema.
|
|
156
156
|
|
|
157
157
|
## Directory Map (Aggregated)
|
|
158
158
|
| Directory | Responsibility Summary | Detailed Map |
|
package/src/skills/codemap.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
| `verification-planning/` | Orchestrator-only | Project-specific evidence planning and verification affordances before non-trivial implementation |
|
|
25
25
|
| `reflect/` | Orchestrator-only | Learning from repeated work and suggesting reusable improvements |
|
|
26
26
|
| `worktrees/` | Orchestrator-only | Safe Git worktree lanes for parallel, risky, or isolated work |
|
|
27
|
-
| `oh-my-opencode-
|
|
27
|
+
| `oh-my-opencode-serverlocal/` | Orchestrator-only | Plugin configuration and self-improvement guidance |
|
|
28
28
|
|
|
29
29
|
### Installation Pipeline
|
|
30
30
|
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
- `src/skills/verification-planning/SKILL.md`
|
|
61
61
|
- `src/skills/reflect/SKILL.md`
|
|
62
62
|
- `src/skills/worktrees/SKILL.md`
|
|
63
|
-
- `src/skills/oh-my-opencode-
|
|
63
|
+
- `src/skills/oh-my-opencode-serverlocal/SKILL.md`
|
|
64
64
|
- `package.json` scripts (`verify:release`, `build`) rely on these assets to ensure install-time skill availability
|
|
65
65
|
|
|
66
66
|
### Permission System
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: oh-my-opencode-
|
|
3
|
-
description: Configure and improve oh-my-opencode-
|
|
2
|
+
name: oh-my-opencode-serverlocal
|
|
3
|
+
description: Configure and improve oh-my-opencode-serverlocal for the current user. Use when users want to tune agents, models, prompts, custom agents, skills, MCPs, presets, or plugin behavior. Also use when recurring workflow friction suggests a safe config or prompt improvement.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# oh-my-opencode-
|
|
6
|
+
# oh-my-opencode-serverlocal Configuration Skill
|
|
7
7
|
|
|
8
8
|
You help users configure, customize, and safely improve their
|
|
9
|
-
oh-my-opencode-
|
|
9
|
+
oh-my-opencode-serverlocal setup.
|
|
10
10
|
|
|
11
11
|
The goal is not just to answer configuration questions. When useful, help the
|
|
12
12
|
user make their agent system better for future runs: tune models, adjust
|
|
@@ -17,7 +17,7 @@ restart requirements.
|
|
|
17
17
|
|
|
18
18
|
Use this skill when the user asks about or is likely to benefit from changes to:
|
|
19
19
|
|
|
20
|
-
- `~/.config/opencode/oh-my-opencode-
|
|
20
|
+
- `~/.config/opencode/oh-my-opencode-serverlocal.json` or `.jsonc`
|
|
21
21
|
- `.opencode/` or `~/.config/opencode/` plugin/agent configuration
|
|
22
22
|
- agent models, variants, presets, or provider routing
|
|
23
23
|
- orchestrator delegation behavior or specialist-agent prompts
|
|
@@ -33,16 +33,16 @@ follow a project-specific rule, suggest adding that rule to a prompt or config.
|
|
|
33
33
|
|
|
34
34
|
## What Is Possible
|
|
35
35
|
|
|
36
|
-
oh-my-opencode-
|
|
36
|
+
oh-my-opencode-serverlocal is configured through a plugin config file, usually:
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
|
-
~/.config/opencode/oh-my-opencode-
|
|
39
|
+
~/.config/opencode/oh-my-opencode-serverlocal.json
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
or:
|
|
43
43
|
|
|
44
44
|
```text
|
|
45
|
-
~/.config/opencode/oh-my-opencode-
|
|
45
|
+
~/.config/opencode/oh-my-opencode-serverlocal.jsonc
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
Concrete files agents should know:
|
|
@@ -50,13 +50,13 @@ Concrete files agents should know:
|
|
|
50
50
|
| Path | Use |
|
|
51
51
|
|---|---|
|
|
52
52
|
| `~/.config/opencode/opencode.json` | OpenCode core config: plugin registration and providers |
|
|
53
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
54
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
55
|
-
| `<project>/.opencode/oh-my-opencode-
|
|
56
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
57
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
58
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
59
|
-
| `~/.config/opencode/oh-my-opencode-
|
|
53
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal.jsonc` | User plugin config with comments/trailing commas; takes precedence over `.json` |
|
|
54
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal.json` | User plugin config generated by installer |
|
|
55
|
+
| `<project>/.opencode/oh-my-opencode-serverlocal.json` | Project-local plugin overrides checked before user config |
|
|
56
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal/{agent}.md` | Full prompt replacement for a built-in agent |
|
|
57
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal/{agent}_append.md` | Append-only prompt tuning for a built-in agent |
|
|
58
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal/{preset}/{agent}.md` | Preset-specific full prompt replacement |
|
|
59
|
+
| `~/.config/opencode/oh-my-opencode-serverlocal/{preset}/{agent}_append.md` | Preset-specific append-only prompt tuning |
|
|
60
60
|
| `~/.config/opencode/skills/<skill-name>/SKILL.md` | Installed skill prompt payload |
|
|
61
61
|
|
|
62
62
|
Built-in agent prompt file names are exact agent names:
|
|
@@ -76,8 +76,8 @@ the user intentionally wants to replace the bundled prompt entirely.
|
|
|
76
76
|
Prompt override lookup order:
|
|
77
77
|
|
|
78
78
|
1. If a `preset` is active, check
|
|
79
|
-
`~/.config/opencode/oh-my-opencode-
|
|
80
|
-
2. Fall back to `~/.config/opencode/oh-my-opencode-
|
|
79
|
+
`~/.config/opencode/oh-my-opencode-serverlocal/{preset}/` first.
|
|
80
|
+
2. Fall back to `~/.config/opencode/oh-my-opencode-serverlocal/`.
|
|
81
81
|
3. If both `{agent}.md` and `{agent}_append.md` exist, the replacement prompt is
|
|
82
82
|
loaded first and the append file is added after it.
|
|
83
83
|
4. If no prompt files exist, the built-in prompt from the plugin package is used.
|
|
@@ -106,7 +106,7 @@ Important schema boundary:
|
|
|
106
106
|
`designer`, `fixer`, `observer`, `council`) can set models, variants, skills,
|
|
107
107
|
MCPs, options, and display names in config.
|
|
108
108
|
- Built-in agent `prompt` and `orchestratorPrompt` fields are **not** supported
|
|
109
|
-
in `oh-my-opencode-
|
|
109
|
+
in `oh-my-opencode-serverlocal.json[c]`; use markdown prompt override files instead.
|
|
110
110
|
- Unknown keys under top-level `agents` are custom agents. Custom agents may use
|
|
111
111
|
`prompt` and `orchestratorPrompt` directly in config.
|
|
112
112
|
|
|
@@ -143,13 +143,13 @@ Edit the active preset under `presets.<preset>.<agent>`:
|
|
|
143
143
|
Create, for example:
|
|
144
144
|
|
|
145
145
|
```text
|
|
146
|
-
~/.config/opencode/oh-my-opencode-
|
|
146
|
+
~/.config/opencode/oh-my-opencode-serverlocal/orchestrator_append.md
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
or for only the `openai` preset:
|
|
150
150
|
|
|
151
151
|
```text
|
|
152
|
-
~/.config/opencode/oh-my-opencode-
|
|
152
|
+
~/.config/opencode/oh-my-opencode-serverlocal/openai/orchestrator_append.md
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
Example content:
|
|
@@ -166,7 +166,7 @@ Example content:
|
|
|
166
166
|
Create:
|
|
167
167
|
|
|
168
168
|
```text
|
|
169
|
-
~/.config/opencode/oh-my-opencode-
|
|
169
|
+
~/.config/opencode/oh-my-opencode-serverlocal/orchestrator.md
|
|
170
170
|
```
|
|
171
171
|
|
|
172
172
|
Use this rarely. Full replacements must restate all essential plugin behavior,
|
|
@@ -200,7 +200,7 @@ Configuration changes affect future agent behavior, so treat them as user-owned.
|
|
|
200
200
|
When making or proposing changes:
|
|
201
201
|
|
|
202
202
|
1. **Inspect current setup**
|
|
203
|
-
- Read the existing oh-my-opencode-
|
|
203
|
+
- Read the existing oh-my-opencode-serverlocal config file.
|
|
204
204
|
- Identify active `preset` and relevant agent blocks.
|
|
205
205
|
- Check whether the user has local project `.opencode/` overrides.
|
|
206
206
|
2. **Decide the smallest useful change**
|
|
@@ -295,7 +295,7 @@ Proposal:
|
|
|
295
295
|
```text
|
|
296
296
|
I can add a narrow Orchestrator prompt rule to avoid parallel writer agents in
|
|
297
297
|
the same directory unless their file ownership is explicit. Target:
|
|
298
|
-
~/.config/opencode/oh-my-opencode-
|
|
298
|
+
~/.config/opencode/oh-my-opencode-serverlocal/orchestrator_append.md. Apply it?
|
|
299
299
|
```
|
|
300
300
|
|
|
301
301
|
### Add a project-specific reviewer
|
|
@@ -305,7 +305,7 @@ Proposal:
|
|
|
305
305
|
```text
|
|
306
306
|
This looks repeatable enough for a custom read-only reviewer agent. I can add
|
|
307
307
|
`api-reviewer` with no skills or MCPs and an `orchestratorPrompt` that routes
|
|
308
|
-
public API changes to it. Apply to your oh-my-opencode-
|
|
308
|
+
public API changes to it. Apply to your oh-my-opencode-serverlocal config?
|
|
309
309
|
```
|
|
310
310
|
|
|
311
311
|
### Warn about restart
|
|
@@ -20,7 +20,7 @@ Use Reflect when the user asks to:
|
|
|
20
20
|
- run `/reflect --sessions` for session archaeology;
|
|
21
21
|
- learn from recent sessions or repeated workflows;
|
|
22
22
|
- find work they keep doing manually;
|
|
23
|
-
- improve their oh-my-opencode-
|
|
23
|
+
- improve their oh-my-opencode-serverlocal setup based on actual usage using oh-my-opencode-serverlocal skill;
|
|
24
24
|
- review whether a recurring process should become a reusable playbook;
|
|
25
25
|
- turn repeated workflow friction into a safer future default.
|
|
26
26
|
|
|
@@ -57,7 +57,7 @@ For each session, analyze and produce a structured summary:
|
|
|
57
57
|
```json
|
|
58
58
|
{
|
|
59
59
|
"session": "ses_14de9c68effegtZtlATm42wnz7",
|
|
60
|
-
"project": "/home/user/Projects/oh-my-opencode-
|
|
60
|
+
"project": "/home/user/Projects/oh-my-opencode-serverlocal",
|
|
61
61
|
"timestamp": "2026-06-10T15:08:45.427Z",
|
|
62
62
|
"goal": "Fix CI failure",
|
|
63
63
|
"success": true,
|
|
@@ -84,7 +84,7 @@ For each session, analyze and produce a structured summary:
|
|
|
84
84
|
|
|
85
85
|
### Storage and Caching
|
|
86
86
|
|
|
87
|
-
Store session summaries in `~/.config/opencode/oh-my-opencode-
|
|
87
|
+
Store session summaries in `~/.config/opencode/oh-my-opencode-serverlocal/reflections/sessions/`.
|
|
88
88
|
|
|
89
89
|
**Cache logic:**
|
|
90
90
|
1. Check if `<session-id>.json` exists in reflections directory
|
|
@@ -180,7 +180,7 @@ Use available evidence in this order:
|
|
|
180
180
|
2. Project-local guidance and memories, such as `AGENTS.md`, `.opencode/`,
|
|
181
181
|
`.slim/`, notes, checkpoints, task progress files, and codemaps.
|
|
182
182
|
3. Existing skills, commands, agents, prompt overrides, MCP permissions, and
|
|
183
|
-
oh-my-opencode-
|
|
183
|
+
oh-my-opencode-serverlocal configuration.
|
|
184
184
|
4. Recent OpenCode logs or session artifacts if they are available and safe to
|
|
185
185
|
inspect.
|
|
186
186
|
5. External docs only when a proposed workflow depends on a third-party tool or
|
|
@@ -213,7 +213,7 @@ Before proposing anything, identify what already exists:
|
|
|
213
213
|
- custom agents and their `orchestratorPrompt` guidance;
|
|
214
214
|
- custom commands;
|
|
215
215
|
- prompt overrides and append files;
|
|
216
|
-
- active oh-my-opencode-
|
|
216
|
+
- active oh-my-opencode-serverlocal preset, model routing, skills, and MCP permissions;
|
|
217
217
|
- project playbooks, docs, codemaps, and local workflow notes.
|
|
218
218
|
|
|
219
219
|
If an existing asset already covers the candidate, recommend extending or using
|
|
@@ -90,21 +90,21 @@ keeps them readable to OpenCode.
|
|
|
90
90
|
`.gitignore`:
|
|
91
91
|
|
|
92
92
|
```gitignore
|
|
93
|
-
# BEGIN oh-my-opencode-
|
|
93
|
+
# BEGIN oh-my-opencode-serverlocal worktrees
|
|
94
94
|
.slim/worktrees/
|
|
95
95
|
.slim/worktrees.json
|
|
96
|
-
# END oh-my-opencode-
|
|
96
|
+
# END oh-my-opencode-serverlocal worktrees
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
`.ignore`:
|
|
100
100
|
|
|
101
101
|
```ignore
|
|
102
|
-
# BEGIN oh-my-opencode-
|
|
102
|
+
# BEGIN oh-my-opencode-serverlocal worktrees
|
|
103
103
|
!.slim/
|
|
104
104
|
!.slim/worktrees.json
|
|
105
105
|
!.slim/worktrees/
|
|
106
106
|
!.slim/worktrees/**
|
|
107
|
-
# END oh-my-opencode-
|
|
107
|
+
# END oh-my-opencode-serverlocal worktrees
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
---
|