oh-my-opencode-slim 1.1.0 → 1.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/README.ja-JP.md +638 -0
- package/README.ko-KR.md +634 -0
- package/README.md +48 -12
- package/README.zh-CN.md +627 -0
- package/dist/cli/background-subagents.d.ts +13 -0
- package/dist/cli/index.js +65 -92
- package/dist/cli/skills.d.ts +2 -30
- package/dist/cli/types.d.ts +0 -1
- package/dist/config/fallback-chains.d.ts +1 -0
- package/dist/config/schema.d.ts +7 -0
- package/dist/hooks/auto-update-checker/checker.d.ts +7 -1
- package/dist/hooks/auto-update-checker/constants.d.ts +1 -0
- package/dist/hooks/auto-update-checker/types.d.ts +10 -0
- package/dist/hooks/deepwork/index.d.ts +13 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/session-goal/index.d.ts +38 -0
- package/dist/index.js +852 -435
- package/dist/multiplexer/session-manager.d.ts +3 -1
- package/dist/tools/ast-grep/tools.d.ts +1 -1
- package/dist/tools/cancel-task.d.ts +16 -0
- package/dist/tools/preset-manager.d.ts +6 -7
- package/dist/tools/subtask/tools.d.ts +6 -1
- package/dist/tui.js +17 -62
- package/dist/utils/background-job-board.d.ts +90 -0
- package/oh-my-opencode-slim.schema.json +11 -0
- package/package.json +6 -3
- package/dist/agents/council-master.d.ts +0 -2
- package/dist/background/background-manager.d.ts +0 -203
- package/dist/background/index.d.ts +0 -3
- package/dist/background/multiplexer-session-manager.d.ts +0 -70
- package/dist/background/subagent-depth.d.ts +0 -35
- package/dist/cli/divoom.d.ts +0 -23
- package/dist/integrations/divoom/index.d.ts +0 -3
- package/dist/integrations/divoom/status-manager.d.ts +0 -31
- package/dist/integrations/divoom/swift-helper-source.d.ts +0 -1
- package/dist/integrations/divoom/swift-transport.d.ts +0 -26
- package/dist/integrations/divoom/types.d.ts +0 -41
- package/dist/tools/background.d.ts +0 -13
- package/dist/tools/fork/command.d.ts +0 -28
- package/dist/tools/fork/files.d.ts +0 -33
- package/dist/tools/fork/index.d.ts +0 -10
- package/dist/tools/fork/state.d.ts +0 -7
- package/dist/tools/fork/tools.d.ts +0 -23
- package/dist/tools/fork/vendor.d.ts +0 -28
- package/dist/tools/handoff/command.d.ts +0 -29
- package/dist/tools/handoff/files.d.ts +0 -33
- package/dist/tools/handoff/index.d.ts +0 -10
- package/dist/tools/handoff/state.d.ts +0 -7
- package/dist/tools/handoff/tools.d.ts +0 -23
- package/dist/tools/handoff/vendor.d.ts +0 -28
- package/dist/tools/lsp/client.d.ts +0 -81
- package/dist/tools/lsp/config-store.d.ts +0 -29
- package/dist/tools/lsp/config.d.ts +0 -5
- package/dist/tools/lsp/constants.d.ts +0 -24
- package/dist/tools/lsp/index.d.ts +0 -4
- package/dist/tools/lsp/tools.d.ts +0 -5
- package/dist/tools/lsp/types.d.ts +0 -45
- package/dist/tools/lsp/utils.d.ts +0 -34
- package/dist/utils/tmux-debug-log.d.ts +0 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type BackgroundSubagentsMode = 'ask' | 'yes' | 'no';
|
|
2
|
+
export type ShellKind = 'bash' | 'fish' | 'zsh';
|
|
3
|
+
export declare function isBackgroundSubagentsEnabled(value: string | undefined): boolean;
|
|
4
|
+
export declare function detectShellKind(shell: string | undefined): ShellKind | undefined;
|
|
5
|
+
export declare function detectBackgroundSubagentsTarget(env?: NodeJS.ProcessEnv): string | undefined;
|
|
6
|
+
export declare function getBackgroundSubagentsBlock(targetPath: string): string;
|
|
7
|
+
export declare function manualBackgroundSubagentsInstructions(options?: {
|
|
8
|
+
targetPath?: string;
|
|
9
|
+
shell?: ShellKind;
|
|
10
|
+
}): string;
|
|
11
|
+
export declare function expandHomePath(targetPath: string): string;
|
|
12
|
+
export declare function upsertBackgroundSubagentsBlock(content: string, block: string): string;
|
|
13
|
+
export declare function writeBackgroundSubagentsBlock(targetPath: string): void;
|
package/dist/cli/index.js
CHANGED
|
@@ -100,7 +100,7 @@ function getConfigSearchDirs() {
|
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
102
|
function getOpenCodeConfigPaths() {
|
|
103
|
-
const configDir =
|
|
103
|
+
const configDir = getConfigDir();
|
|
104
104
|
return [join(configDir, "opencode.json"), join(configDir, "opencode.jsonc")];
|
|
105
105
|
}
|
|
106
106
|
function getConfigJson() {
|
|
@@ -373,6 +373,9 @@ var TodoContinuationConfigSchema = z2.object({
|
|
|
373
373
|
autoEnable: z2.boolean().default(false).describe("Automatically enable auto-continue when the orchestrator session has enough todos"),
|
|
374
374
|
autoEnableThreshold: z2.number().int().min(1).max(50).default(4).describe("Number of todos that triggers auto-enable (only used when autoEnable is true)")
|
|
375
375
|
});
|
|
376
|
+
var SubtaskConfigSchema = z2.object({
|
|
377
|
+
timeoutMs: z2.number().int().min(0).max(24 * 60 * 60 * 1000).optional().describe("Subtask worker timeout in ms. 0 disables the timeout. Defaults to 300000 (5 minutes).")
|
|
378
|
+
});
|
|
376
379
|
var FailoverConfigSchema = z2.object({
|
|
377
380
|
enabled: z2.boolean().default(true),
|
|
378
381
|
timeoutMs: z2.number().min(0).default(15000),
|
|
@@ -420,6 +423,7 @@ var PluginConfigSchema = z2.object({
|
|
|
420
423
|
sessionManager: SessionManagerConfigSchema.optional(),
|
|
421
424
|
divoom: DivoomConfigSchema.optional(),
|
|
422
425
|
todoContinuation: TodoContinuationConfigSchema.optional(),
|
|
426
|
+
subtask: SubtaskConfigSchema.optional(),
|
|
423
427
|
fallback: FailoverConfigSchema.optional(),
|
|
424
428
|
council: CouncilConfigSchema.optional()
|
|
425
429
|
}).superRefine((value, ctx) => {
|
|
@@ -515,56 +519,6 @@ function installCustomSkill(skill) {
|
|
|
515
519
|
}
|
|
516
520
|
}
|
|
517
521
|
|
|
518
|
-
// src/cli/skills.ts
|
|
519
|
-
import { spawnSync } from "node:child_process";
|
|
520
|
-
var RECOMMENDED_SKILLS = [
|
|
521
|
-
{
|
|
522
|
-
name: "agent-browser",
|
|
523
|
-
repo: "https://github.com/vercel-labs/agent-browser",
|
|
524
|
-
skillName: "agent-browser",
|
|
525
|
-
allowedAgents: ["designer"],
|
|
526
|
-
description: "High-performance browser automation",
|
|
527
|
-
postInstallCommands: [
|
|
528
|
-
"npm install -g agent-browser",
|
|
529
|
-
"agent-browser install"
|
|
530
|
-
]
|
|
531
|
-
}
|
|
532
|
-
];
|
|
533
|
-
function installSkill(skill) {
|
|
534
|
-
const args = [
|
|
535
|
-
"skills",
|
|
536
|
-
"add",
|
|
537
|
-
skill.repo,
|
|
538
|
-
"--skill",
|
|
539
|
-
skill.skillName,
|
|
540
|
-
"-a",
|
|
541
|
-
"opencode",
|
|
542
|
-
"-y",
|
|
543
|
-
"--global"
|
|
544
|
-
];
|
|
545
|
-
try {
|
|
546
|
-
const result = spawnSync("npx", args, { stdio: "inherit" });
|
|
547
|
-
if (result.status !== 0) {
|
|
548
|
-
return false;
|
|
549
|
-
}
|
|
550
|
-
if (skill.postInstallCommands && skill.postInstallCommands.length > 0) {
|
|
551
|
-
console.log(`Running post-install commands for ${skill.name}...`);
|
|
552
|
-
for (const cmd of skill.postInstallCommands) {
|
|
553
|
-
console.log(`> ${cmd}`);
|
|
554
|
-
const [command, ...cmdArgs] = cmd.split(" ");
|
|
555
|
-
const cmdResult = spawnSync(command, cmdArgs, { stdio: "inherit" });
|
|
556
|
-
if (cmdResult.status !== 0) {
|
|
557
|
-
console.warn(`Post-install command failed: ${cmd}`);
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
return true;
|
|
562
|
-
} catch (error) {
|
|
563
|
-
console.error(`Failed to install skill: ${skill.name}`, error);
|
|
564
|
-
return false;
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
|
|
568
522
|
// src/cli/providers.ts
|
|
569
523
|
var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json";
|
|
570
524
|
var GENERATED_PRESETS = ["openai", "opencode-go"];
|
|
@@ -637,12 +591,8 @@ function generateLiteConfig(installConfig) {
|
|
|
637
591
|
const createAgentConfig = (agentName, modelInfo) => {
|
|
638
592
|
const isOrchestrator = agentName === "orchestrator";
|
|
639
593
|
const skills = isOrchestrator ? ["*"] : [
|
|
640
|
-
...RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName),
|
|
641
594
|
...CUSTOM_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.name)
|
|
642
595
|
];
|
|
643
|
-
if (agentName === "designer" && !skills.includes("agent-browser")) {
|
|
644
|
-
skills.push("agent-browser");
|
|
645
|
-
}
|
|
646
596
|
return {
|
|
647
597
|
model: modelInfo.model,
|
|
648
598
|
variant: modelInfo.variant,
|
|
@@ -673,6 +623,12 @@ function generateLiteConfig(installConfig) {
|
|
|
673
623
|
|
|
674
624
|
// src/cli/config-io.ts
|
|
675
625
|
var PACKAGE_NAME = "oh-my-opencode-slim";
|
|
626
|
+
var DEFAULT_OPENCODE_AGENTS_TO_DISABLE = [
|
|
627
|
+
"build",
|
|
628
|
+
"explore",
|
|
629
|
+
"general",
|
|
630
|
+
"plan"
|
|
631
|
+
];
|
|
676
632
|
function isString(value) {
|
|
677
633
|
return typeof value === "string";
|
|
678
634
|
}
|
|
@@ -753,17 +709,49 @@ function getPluginEntry() {
|
|
|
753
709
|
return PACKAGE_NAME;
|
|
754
710
|
}
|
|
755
711
|
}
|
|
756
|
-
function
|
|
712
|
+
function getPinnedVersionFromConfig() {
|
|
713
|
+
try {
|
|
714
|
+
const { config } = parseConfig(getExistingConfigPath());
|
|
715
|
+
if (!config)
|
|
716
|
+
return;
|
|
717
|
+
for (const entry of getPlugins(config)) {
|
|
718
|
+
const spec = getPluginSpec(entry);
|
|
719
|
+
if (!spec)
|
|
720
|
+
continue;
|
|
721
|
+
if (spec === PACKAGE_NAME)
|
|
722
|
+
return;
|
|
723
|
+
if (spec.startsWith(`${PACKAGE_NAME}@`)) {
|
|
724
|
+
const version = spec.slice(PACKAGE_NAME.length + 1);
|
|
725
|
+
if (version && version !== "latest")
|
|
726
|
+
return version;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
} catch {}
|
|
730
|
+
return;
|
|
731
|
+
}
|
|
732
|
+
function getVersionFromPackageRoot(packageRoot) {
|
|
733
|
+
try {
|
|
734
|
+
const packageJsonPath = join3(packageRoot, "package.json");
|
|
735
|
+
if (!existsSync3(packageJsonPath))
|
|
736
|
+
return;
|
|
737
|
+
const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
738
|
+
return pkg.version;
|
|
739
|
+
} catch {
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
function getOpenCodePluginCacheDir(version) {
|
|
757
744
|
const cacheDir = process.env.XDG_CACHE_HOME?.trim() || join3(homedir2(), ".cache");
|
|
758
|
-
|
|
745
|
+
const suffix = version ? `${PACKAGE_NAME}@${version}` : `${PACKAGE_NAME}@latest`;
|
|
746
|
+
return join3(cacheDir, "opencode", "packages", suffix);
|
|
759
747
|
}
|
|
760
|
-
function writeOpenCodePluginCacheManifest(cacheDir) {
|
|
748
|
+
function writeOpenCodePluginCacheManifest(cacheDir, version = "latest") {
|
|
761
749
|
try {
|
|
762
750
|
writeFileSync(join3(cacheDir, "package.json"), JSON.stringify({
|
|
763
751
|
name: `${PACKAGE_NAME}-cache`,
|
|
764
752
|
private: true,
|
|
765
753
|
dependencies: {
|
|
766
|
-
[PACKAGE_NAME]:
|
|
754
|
+
[PACKAGE_NAME]: version
|
|
767
755
|
}
|
|
768
756
|
}, null, 2));
|
|
769
757
|
return null;
|
|
@@ -811,7 +799,10 @@ async function warmOpenCodePluginCache() {
|
|
|
811
799
|
if (!packageRoot || !isPackageManagerInstall(packageRoot)) {
|
|
812
800
|
return null;
|
|
813
801
|
}
|
|
814
|
-
const
|
|
802
|
+
const pinnedVersion = getPinnedVersionFromConfig();
|
|
803
|
+
const runningVersion = getVersionFromPackageRoot(packageRoot);
|
|
804
|
+
const cacheVersion = pinnedVersion ?? runningVersion;
|
|
805
|
+
const cacheDir = getOpenCodePluginCacheDir(cacheVersion);
|
|
815
806
|
try {
|
|
816
807
|
mkdirSync3(cacheDir, { recursive: true });
|
|
817
808
|
} catch (err) {
|
|
@@ -821,7 +812,7 @@ async function warmOpenCodePluginCache() {
|
|
|
821
812
|
error: `Failed to create OpenCode cache directory: ${err}`
|
|
822
813
|
};
|
|
823
814
|
}
|
|
824
|
-
const manifestError = writeOpenCodePluginCacheManifest(cacheDir);
|
|
815
|
+
const manifestError = writeOpenCodePluginCacheManifest(cacheDir, cacheVersion);
|
|
825
816
|
if (manifestError)
|
|
826
817
|
return manifestError;
|
|
827
818
|
try {
|
|
@@ -1004,8 +995,13 @@ function disableDefaultAgents() {
|
|
|
1004
995
|
}
|
|
1005
996
|
const config = parsedConfig ?? {};
|
|
1006
997
|
const agent = config.agent ?? {};
|
|
1007
|
-
|
|
1008
|
-
|
|
998
|
+
for (const agentName of DEFAULT_OPENCODE_AGENTS_TO_DISABLE) {
|
|
999
|
+
const existing = agent[agentName];
|
|
1000
|
+
agent[agentName] = {
|
|
1001
|
+
...existing && typeof existing === "object" && !Array.isArray(existing) ? existing : {},
|
|
1002
|
+
disable: true
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1009
1005
|
config.agent = agent;
|
|
1010
1006
|
writeConfig(configPath, config);
|
|
1011
1007
|
return { success: true, configPath };
|
|
@@ -1136,7 +1132,8 @@ function mergePluginConfigs(base, override) {
|
|
|
1136
1132
|
sessionManager: deepMerge(base.sessionManager, override.sessionManager),
|
|
1137
1133
|
divoom: deepMerge(base.divoom, override.divoom),
|
|
1138
1134
|
fallback: deepMerge(base.fallback, override.fallback),
|
|
1139
|
-
council: deepMerge(base.council, override.council)
|
|
1135
|
+
council: deepMerge(base.council, override.council),
|
|
1136
|
+
subtask: deepMerge(base.subtask, override.subtask)
|
|
1140
1137
|
};
|
|
1141
1138
|
}
|
|
1142
1139
|
function deepMerge(base, override) {
|
|
@@ -1355,13 +1352,13 @@ Options:
|
|
|
1355
1352
|
import { existsSync as existsSync5 } from "node:fs";
|
|
1356
1353
|
import { createInterface } from "node:readline/promises";
|
|
1357
1354
|
// src/cli/system.ts
|
|
1358
|
-
import { spawnSync
|
|
1355
|
+
import { spawnSync } from "node:child_process";
|
|
1359
1356
|
import { statSync as statSync4 } from "node:fs";
|
|
1360
1357
|
var cachedOpenCodePath = null;
|
|
1361
1358
|
function resolvePathCommand(command) {
|
|
1362
1359
|
try {
|
|
1363
1360
|
const resolver = process.platform === "win32" ? "where" : "which";
|
|
1364
|
-
const result =
|
|
1361
|
+
const result = spawnSync(resolver, [command], {
|
|
1365
1362
|
encoding: "utf-8",
|
|
1366
1363
|
stdio: ["ignore", "pipe", "ignore"]
|
|
1367
1364
|
});
|
|
@@ -1376,7 +1373,7 @@ function resolvePathCommand(command) {
|
|
|
1376
1373
|
}
|
|
1377
1374
|
function canExecute(command, args) {
|
|
1378
1375
|
try {
|
|
1379
|
-
const result =
|
|
1376
|
+
const result = spawnSync(command, args, {
|
|
1380
1377
|
stdio: "ignore"
|
|
1381
1378
|
});
|
|
1382
1379
|
return result.status === 0;
|
|
@@ -1578,8 +1575,6 @@ async function runInstall(config) {
|
|
|
1578
1575
|
const isUpdate = detected.isInstalled;
|
|
1579
1576
|
printHeader(isUpdate);
|
|
1580
1577
|
let totalSteps = 6;
|
|
1581
|
-
if (config.installSkills)
|
|
1582
|
-
totalSteps += 1;
|
|
1583
1578
|
if (config.installCustomSkills)
|
|
1584
1579
|
totalSteps += 1;
|
|
1585
1580
|
totalSteps += 1;
|
|
@@ -1658,27 +1653,6 @@ ${JSON.stringify(liteConfig, null, 2)}
|
|
|
1658
1653
|
return 1;
|
|
1659
1654
|
}
|
|
1660
1655
|
}
|
|
1661
|
-
if (config.installSkills) {
|
|
1662
|
-
printStep(step++, totalSteps, "Installing recommended skills...");
|
|
1663
|
-
if (config.dryRun) {
|
|
1664
|
-
printInfo("Dry run mode - would install skills:");
|
|
1665
|
-
for (const skill of RECOMMENDED_SKILLS) {
|
|
1666
|
-
printInfo(` - ${skill.name}`);
|
|
1667
|
-
}
|
|
1668
|
-
} else {
|
|
1669
|
-
let skillsInstalled = 0;
|
|
1670
|
-
for (const skill of RECOMMENDED_SKILLS) {
|
|
1671
|
-
printInfo(`Installing ${skill.name}...`);
|
|
1672
|
-
if (installSkill(skill)) {
|
|
1673
|
-
printSuccess(`Installed: ${skill.name}`);
|
|
1674
|
-
skillsInstalled++;
|
|
1675
|
-
} else {
|
|
1676
|
-
printInfo(`Skipped: ${skill.name} (already installed)`);
|
|
1677
|
-
}
|
|
1678
|
-
}
|
|
1679
|
-
printSuccess(`${skillsInstalled}/${RECOMMENDED_SKILLS.length} skills processed`);
|
|
1680
|
-
}
|
|
1681
|
-
}
|
|
1682
1656
|
if (config.installCustomSkills) {
|
|
1683
1657
|
printStep(step++, totalSteps, "Installing custom skills...");
|
|
1684
1658
|
if (config.dryRun) {
|
|
@@ -1735,7 +1709,6 @@ ${JSON.stringify(liteConfig, null, 2)}
|
|
|
1735
1709
|
async function install(args) {
|
|
1736
1710
|
const config = {
|
|
1737
1711
|
hasTmux: false,
|
|
1738
|
-
installSkills: args.skills === "yes",
|
|
1739
1712
|
installCustomSkills: args.skills === "yes",
|
|
1740
1713
|
preset: args.preset,
|
|
1741
1714
|
promptForStar: args.tui,
|
|
@@ -1792,7 +1765,7 @@ Usage:
|
|
|
1792
1765
|
bunx oh-my-opencode-slim doctor [OPTIONS]
|
|
1793
1766
|
|
|
1794
1767
|
Options:
|
|
1795
|
-
--skills=yes|no Install
|
|
1768
|
+
--skills=yes|no Install bundled skills (default: yes)
|
|
1796
1769
|
--preset=<name> Active generated config preset (default: openai)
|
|
1797
1770
|
--no-tui Non-interactive mode
|
|
1798
1771
|
--dry-run Simulate install without writing files
|
package/dist/cli/skills.d.ts
CHANGED
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A recommended skill to install via `npx skills add`.
|
|
3
|
-
*/
|
|
4
|
-
export interface RecommendedSkill {
|
|
5
|
-
/** Human-readable name for prompts */
|
|
6
|
-
name: string;
|
|
7
|
-
/** GitHub repo URL for `npx skills add` */
|
|
8
|
-
repo: string;
|
|
9
|
-
/** Skill name within the repo (--skill flag) */
|
|
10
|
-
skillName: string;
|
|
11
|
-
/** List of agents that should auto-allow this skill */
|
|
12
|
-
allowedAgents: string[];
|
|
13
|
-
/** Description shown to user during install */
|
|
14
|
-
description: string;
|
|
15
|
-
/** Optional commands to run after the skill is added */
|
|
16
|
-
postInstallCommands?: string[];
|
|
17
|
-
}
|
|
18
1
|
/**
|
|
19
2
|
* A skill that is managed externally (e.g. user-installed) and needs
|
|
20
3
|
* permission grants but is NOT installed by this plugin's CLI.
|
|
@@ -27,26 +10,15 @@ export interface PermissionOnlySkill {
|
|
|
27
10
|
/** Human-readable description (for documentation only) */
|
|
28
11
|
description: string;
|
|
29
12
|
}
|
|
30
|
-
/**
|
|
31
|
-
* List of recommended skills.
|
|
32
|
-
* Add new skills here to include them in the installation flow.
|
|
33
|
-
*/
|
|
34
|
-
export declare const RECOMMENDED_SKILLS: RecommendedSkill[];
|
|
35
13
|
/**
|
|
36
14
|
* Skills managed externally (not installed by this plugin's CLI).
|
|
37
15
|
* Entries here only affect agent permission grants — nothing is installed.
|
|
38
16
|
*/
|
|
39
17
|
export declare const PERMISSION_ONLY_SKILLS: PermissionOnlySkill[];
|
|
40
18
|
/**
|
|
41
|
-
*
|
|
42
|
-
* @param skill - The skill to install
|
|
43
|
-
* @returns True if installation succeeded, false otherwise
|
|
44
|
-
*/
|
|
45
|
-
export declare function installSkill(skill: RecommendedSkill): boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Get permission presets for a specific agent based on recommended skills.
|
|
19
|
+
* Get permission presets for a specific agent based on bundled skills.
|
|
48
20
|
* @param agentName - The name of the agent
|
|
49
|
-
* @param skillList - Optional explicit list of skills to allow (overrides
|
|
21
|
+
* @param skillList - Optional explicit list of skills to allow (overrides defaults)
|
|
50
22
|
* @returns Permission rules for the skill permission type
|
|
51
23
|
*/
|
|
52
24
|
export declare function getSkillPermissionsForAgent(agentName: string, skillList?: string[]): Record<string, 'allow' | 'ask' | 'deny'>;
|
package/dist/cli/types.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function normalizeFallbackChainsForPreset(chains: Record<string, string[] | undefined>, presetName: string | null | undefined): Record<string, string[]>;
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -183,6 +183,10 @@ export declare const TodoContinuationConfigSchema: z.ZodObject<{
|
|
|
183
183
|
autoEnableThreshold: z.ZodDefault<z.ZodNumber>;
|
|
184
184
|
}, z.core.$strip>;
|
|
185
185
|
export type TodoContinuationConfig = z.infer<typeof TodoContinuationConfigSchema>;
|
|
186
|
+
export declare const SubtaskConfigSchema: z.ZodObject<{
|
|
187
|
+
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
188
|
+
}, z.core.$strip>;
|
|
189
|
+
export type SubtaskConfig = z.infer<typeof SubtaskConfigSchema>;
|
|
186
190
|
export declare const FailoverConfigSchema: z.ZodObject<{
|
|
187
191
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
188
192
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
@@ -338,6 +342,9 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
338
342
|
autoEnable: z.ZodDefault<z.ZodBoolean>;
|
|
339
343
|
autoEnableThreshold: z.ZodDefault<z.ZodNumber>;
|
|
340
344
|
}, z.core.$strip>>;
|
|
345
|
+
subtask: z.ZodOptional<z.ZodObject<{
|
|
346
|
+
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
347
|
+
}, z.core.$strip>>;
|
|
341
348
|
fallback: z.ZodOptional<z.ZodObject<{
|
|
342
349
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
343
350
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PluginEntryInfo } from './types';
|
|
1
|
+
import type { CompatibleVersionResult, PluginEntryInfo } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Extracts the update channel (latest, alpha, beta, etc.) from a version string.
|
|
4
4
|
* @param version The version or tag to analyze.
|
|
@@ -30,3 +30,9 @@ export declare function updatePinnedVersion(configPath: string, oldEntry: string
|
|
|
30
30
|
* Fetches the latest version for a specific channel from the NPM registry.
|
|
31
31
|
*/
|
|
32
32
|
export declare function getLatestVersion(channel?: string): Promise<string | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Resolves the newest version that is safe for the current install to use.
|
|
35
|
+
* Auto-update never crosses major versions; newer majors are surfaced as a
|
|
36
|
+
* manual migration notification instead.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getLatestCompatibleVersion(currentVersion: string, channel?: string): Promise<CompatibleVersionResult>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const PACKAGE_NAME = "oh-my-opencode-slim";
|
|
2
2
|
export declare const NPM_REGISTRY_URL = "https://registry.npmjs.org/-/package/oh-my-opencode-slim/dist-tags";
|
|
3
|
+
export declare const NPM_PACKAGE_URL = "https://registry.npmjs.org/oh-my-opencode-slim";
|
|
3
4
|
export declare const NPM_FETCH_TIMEOUT = 5000;
|
|
4
5
|
/** The directory used by OpenCode to cache node_modules for plugins. */
|
|
5
6
|
export declare const CACHE_DIR: string;
|
|
@@ -2,6 +2,16 @@ export interface NpmDistTags {
|
|
|
2
2
|
latest: string;
|
|
3
3
|
[key: string]: string;
|
|
4
4
|
}
|
|
5
|
+
export interface NpmPackageMetadata {
|
|
6
|
+
'dist-tags'?: NpmDistTags;
|
|
7
|
+
versions?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface CompatibleVersionResult {
|
|
10
|
+
latestVersion: string | null;
|
|
11
|
+
latestMajorVersion: string | null;
|
|
12
|
+
blockedByMajor: boolean;
|
|
13
|
+
unsafeReason?: 'unparseable-current-version';
|
|
14
|
+
}
|
|
5
15
|
export interface OpencodeConfig {
|
|
6
16
|
plugin?: unknown[];
|
|
7
17
|
[key: string]: unknown;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function createDeepworkCommandHook(): {
|
|
2
|
+
registerCommand: (config: Record<string, unknown>) => void;
|
|
3
|
+
handleCommandExecuteBefore: (input: {
|
|
4
|
+
command: string;
|
|
5
|
+
sessionID: string;
|
|
6
|
+
arguments: string;
|
|
7
|
+
}, output: {
|
|
8
|
+
parts: Array<{
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
}>;
|
|
12
|
+
}) => Promise<void>;
|
|
13
|
+
};
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -9,5 +9,6 @@ export { processImageAttachments } from './image-hook';
|
|
|
9
9
|
export { createJsonErrorRecoveryHook } from './json-error-recovery';
|
|
10
10
|
export { createPhaseReminderHook } from './phase-reminder';
|
|
11
11
|
export { createPostFileToolNudgeHook } from './post-file-tool-nudge';
|
|
12
|
+
export { createSessionGoalHook } from './session-goal';
|
|
12
13
|
export { createTaskSessionManagerHook } from './task-session-manager';
|
|
13
14
|
export { createTodoContinuationHook } from './todo-continuation';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PluginInput } from '@opencode-ai/plugin';
|
|
2
|
+
import type { PluginConfig } from '../../config';
|
|
3
|
+
interface GoalState {
|
|
4
|
+
text: string;
|
|
5
|
+
source?: 'manual' | 'interview';
|
|
6
|
+
sourcePath?: string;
|
|
7
|
+
inheritedFrom?: string;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
}
|
|
10
|
+
interface SystemTransformOutput {
|
|
11
|
+
system: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function createSessionGoalHook(ctx: PluginInput, config: PluginConfig, options?: {
|
|
14
|
+
getAgentName?: (sessionID: string) => string | undefined;
|
|
15
|
+
}): {
|
|
16
|
+
registerCommand: (config: Record<string, unknown>) => void;
|
|
17
|
+
handleCommandExecuteBefore: (input: {
|
|
18
|
+
command: string;
|
|
19
|
+
sessionID: string;
|
|
20
|
+
arguments: string;
|
|
21
|
+
}, output: {
|
|
22
|
+
parts: Array<{
|
|
23
|
+
type: string;
|
|
24
|
+
text?: string;
|
|
25
|
+
}>;
|
|
26
|
+
}) => Promise<void>;
|
|
27
|
+
handleEvent: (input: {
|
|
28
|
+
event: {
|
|
29
|
+
type: string;
|
|
30
|
+
properties?: Record<string, unknown>;
|
|
31
|
+
};
|
|
32
|
+
}) => void;
|
|
33
|
+
handleSystemTransform: (input: {
|
|
34
|
+
sessionID?: string;
|
|
35
|
+
}, output: SystemTransformOutput) => void;
|
|
36
|
+
getGoal: (sessionID: string) => GoalState | undefined;
|
|
37
|
+
};
|
|
38
|
+
export {};
|