@wolfx/oh-my-openagent 3.17.15 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +153 -113
- package/README.ko.md +196 -149
- package/README.md +53 -50
- package/README.ru.md +92 -70
- package/README.zh-cn.md +112 -71
- package/dist/agents/agent-skill-resolution.d.ts +1 -0
- package/dist/agents/builtin-agents/available-skills.d.ts +1 -1
- package/dist/agents/builtin-agents/general-agents.d.ts +1 -0
- package/dist/agents/builtin-agents.d.ts +1 -1
- package/dist/agents/dynamic-agent-core-sections.d.ts +1 -0
- package/dist/agents/dynamic-agent-prompt-builder.d.ts +1 -1
- package/dist/agents/hephaestus/gpt-5-5.d.ts +0 -4
- package/dist/agents/types.d.ts +1 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/schema/agent-names.d.ts +1 -0
- package/dist/config/schema/agent-overrides.d.ts +45 -0
- package/dist/config/schema/categories.d.ts +7 -1
- package/dist/config/schema/commands.d.ts +1 -0
- package/dist/config/schema/fallback-models.d.ts +5 -0
- package/dist/config/schema/hooks.d.ts +1 -0
- package/dist/config/schema/keyword-detector.d.ts +21 -0
- package/dist/config/schema/oh-my-opencode-config.d.ts +70 -0
- package/dist/config/schema/team-mode.d.ts +16 -0
- package/dist/config/schema.d.ts +2 -0
- package/dist/create-hooks.d.ts +3 -0
- package/dist/features/background-agent/manager.d.ts +3 -0
- package/dist/features/background-agent/types.d.ts +4 -0
- package/dist/features/boulder-state/storage.d.ts +1 -0
- package/dist/features/builtin-commands/commands.d.ts +1 -0
- package/dist/features/builtin-commands/templates/hyperplan.d.ts +1 -0
- package/dist/features/builtin-commands/templates/refactor.d.ts +1 -0
- package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +1 -1
- package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +1 -1
- package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +1 -1
- package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +1 -1
- package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +1 -1
- package/dist/features/builtin-skills/skills/index.d.ts +1 -0
- package/dist/features/builtin-skills/skills/team-mode.d.ts +2 -0
- package/dist/features/builtin-skills/skills.d.ts +1 -0
- package/dist/features/claude-code-plugin-loader/discovery.d.ts +1 -0
- package/dist/features/hook-message-injector/injector.d.ts +2 -2
- package/dist/features/opencode-skill-loader/loader.d.ts +2 -2
- package/dist/features/opencode-skill-loader/skill-resolution-options.d.ts +1 -0
- package/dist/features/team-mode/deps.d.ts +6 -0
- package/dist/features/team-mode/member-guidance.d.ts +2 -0
- package/dist/features/team-mode/member-parser.d.ts +16 -0
- package/dist/features/team-mode/member-session-resolution.d.ts +6 -0
- package/dist/features/team-mode/member-session-routing.d.ts +19 -0
- package/dist/features/team-mode/team-layout-tmux/close-team-member-pane.d.ts +4 -0
- package/dist/features/team-mode/team-layout-tmux/layout.d.ts +26 -6
- package/dist/features/team-mode/team-layout-tmux/rebalance-team-window.d.ts +9 -0
- package/dist/features/team-mode/team-layout-tmux/resolve-caller-tmux-session.d.ts +7 -0
- package/dist/features/team-mode/team-layout-tmux/sweep-stale-team-sessions.d.ts +8 -0
- package/dist/features/team-mode/team-mailbox/ack.d.ts +2 -0
- package/dist/features/team-mode/team-mailbox/inbox.d.ts +3 -0
- package/dist/features/team-mode/team-mailbox/index.d.ts +7 -0
- package/dist/features/team-mode/team-mailbox/poll.d.ts +10 -0
- package/dist/features/team-mode/team-mailbox/reservation.d.ts +11 -0
- package/dist/features/team-mode/team-mailbox/send.d.ts +27 -0
- package/dist/features/team-mode/team-registry/index.d.ts +3 -0
- package/dist/features/team-mode/team-registry/loader.d.ts +12 -0
- package/dist/features/team-mode/team-registry/paths.d.ts +13 -0
- package/dist/features/team-mode/team-registry/team-spec-input-normalizer.d.ts +6 -0
- package/dist/features/team-mode/team-registry/validator.d.ts +10 -0
- package/dist/features/team-mode/team-runtime/activate-team-layout.d.ts +4 -0
- package/dist/features/team-mode/team-runtime/cleanup-team-run-resources.d.ts +17 -0
- package/dist/features/team-mode/team-runtime/create.d.ts +25 -0
- package/dist/features/team-mode/team-runtime/delete-team.d.ts +16 -0
- package/dist/features/team-mode/team-runtime/index.d.ts +2 -0
- package/dist/features/team-mode/team-runtime/resolve-member-dependencies.d.ts +3 -0
- package/dist/features/team-mode/team-runtime/resolve-member.d.ts +17 -0
- package/dist/features/team-mode/team-runtime/shutdown-helpers.d.ts +11 -0
- package/dist/features/team-mode/team-runtime/shutdown-test-fixtures.d.ts +46 -0
- package/dist/features/team-mode/team-runtime/shutdown.d.ts +5 -0
- package/dist/features/team-mode/team-runtime/status.d.ts +36 -0
- package/dist/features/team-mode/team-session-registry.d.ts +11 -0
- package/dist/features/team-mode/team-state-store/index.d.ts +1 -0
- package/dist/features/team-mode/team-state-store/locks.d.ts +12 -0
- package/dist/features/team-mode/team-state-store/resume.d.ts +10 -0
- package/dist/features/team-mode/team-state-store/store.d.ts +21 -0
- package/dist/features/team-mode/team-tasklist/claim.d.ts +10 -0
- package/dist/features/team-mode/team-tasklist/dependencies.d.ts +2 -0
- package/dist/features/team-mode/team-tasklist/get.d.ts +3 -0
- package/dist/features/team-mode/team-tasklist/index.d.ts +6 -0
- package/dist/features/team-mode/team-tasklist/list.d.ts +8 -0
- package/dist/features/team-mode/team-tasklist/store.d.ts +3 -0
- package/dist/features/team-mode/team-tasklist/test-support.d.ts +9 -0
- package/dist/features/team-mode/team-tasklist/update.d.ts +9 -0
- package/dist/features/team-mode/tools/index.d.ts +1 -0
- package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +188 -0
- package/dist/features/team-mode/tools/lifecycle.d.ts +37 -0
- package/dist/features/team-mode/tools/messaging.d.ts +31 -0
- package/dist/features/team-mode/tools/query.d.ts +16 -0
- package/dist/features/team-mode/tools/tasks.d.ts +18 -0
- package/dist/features/team-mode/types.d.ts +137 -5
- package/dist/features/tmux-subagent/action-executor-core.d.ts +1 -0
- package/dist/features/tmux-subagent/action-executor.d.ts +1 -0
- package/dist/features/tmux-subagent/attachable-session-status.d.ts +4 -0
- package/dist/features/tmux-subagent/manager.d.ts +32 -3
- package/dist/features/tmux-subagent/pane-state-querier.d.ts +10 -0
- package/dist/features/tmux-subagent/polling.d.ts +1 -0
- package/dist/hooks/atlas/atlas-hook.d.ts +1 -1
- package/dist/hooks/atlas/boulder-continuation-injector.d.ts +2 -3
- package/dist/hooks/atlas/recent-model-resolver.d.ts +9 -1
- package/dist/hooks/atlas/tool-execute-after.d.ts +2 -1
- package/dist/hooks/atlas/tool-execute-before.d.ts +1 -0
- package/dist/hooks/atlas/types.d.ts +8 -2
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/keyword-detector/constants.d.ts +6 -0
- package/dist/hooks/keyword-detector/detector.d.ts +5 -3
- package/dist/hooks/keyword-detector/hook.d.ts +2 -1
- package/dist/hooks/keyword-detector/hyperplan/default.d.ts +13 -0
- package/dist/hooks/keyword-detector/hyperplan/index.d.ts +1 -0
- package/dist/hooks/keyword-detector/team/default.d.ts +13 -0
- package/dist/hooks/keyword-detector/team/index.d.ts +1 -0
- package/dist/hooks/session-recovery/recover-tool-result-missing.d.ts +2 -2
- package/dist/hooks/team-mailbox-injector/hook.d.ts +31 -0
- package/dist/hooks/team-mailbox-injector/index.d.ts +2 -0
- package/dist/hooks/team-mode-status-injector/hook.d.ts +28 -0
- package/dist/hooks/team-mode-status-injector/index.d.ts +1 -0
- package/dist/hooks/team-session-events/team-idle-wake-hint.d.ts +38 -0
- package/dist/hooks/team-session-events/team-lead-orphan-handler.d.ts +12 -0
- package/dist/hooks/team-session-events/team-member-error-handler.d.ts +10 -0
- package/dist/hooks/team-session-events/team-member-status-handler.d.ts +10 -0
- package/dist/hooks/team-tool-gating/hook.d.ts +3 -0
- package/dist/hooks/team-tool-gating/index.d.ts +1 -0
- package/dist/hooks/write-existing-file-guard/hook.d.ts +6 -1
- package/dist/hooks/write-existing-file-guard/tool-execute-before-handler.d.ts +1 -0
- package/dist/index.js +89963 -81321
- package/dist/oh-my-opencode.schema.json +191 -47
- package/dist/plugin/hooks/create-core-hooks.d.ts +3 -0
- package/dist/plugin/hooks/create-tool-guard-hooks.d.ts +2 -1
- package/dist/plugin/hooks/create-transform-hooks.d.ts +3 -1
- package/dist/plugin/recent-synthetic-idles.d.ts +1 -0
- package/dist/plugin/tool-registry.d.ts +16 -0
- package/dist/shared/bun-spawn-shim.d.ts +1 -0
- package/dist/shared/project-discovery-dirs.d.ts +1 -0
- package/dist/shared/shell-env.d.ts +1 -0
- package/dist/shared/tmux/constants.d.ts +1 -1
- package/dist/shared/tmux/index.d.ts +1 -0
- package/dist/shared/tmux/runner.d.ts +13 -0
- package/dist/shared/tmux/tmux-utils/pane-replace.d.ts +1 -1
- package/dist/shared/tmux/tmux-utils/pane-spawn.d.ts +13 -1
- package/dist/shared/tmux/tmux-utils/session-spawn.d.ts +13 -1
- package/dist/shared/tmux/tmux-utils/stale-session-sweep.d.ts +9 -2
- package/dist/shared/tmux/tmux-utils/window-spawn.d.ts +13 -1
- package/dist/shared/tmux/tmux-utils.d.ts +1 -1
- package/dist/tools/delegate-task/openai-categories.d.ts +1 -0
- package/dist/tools/delegate-task/skill-resolver.d.ts +1 -0
- package/dist/tools/delegate-task/subagent-resolver.d.ts +5 -1
- package/dist/tools/delegate-task/types.d.ts +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/look-at/missing-file-error.d.ts +2 -0
- package/dist/tools/skill/types.d.ts +2 -0
- package/package.json +2 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type RunTmuxOptions = {
|
|
2
|
+
retry?: number;
|
|
3
|
+
timeoutMs?: number;
|
|
4
|
+
};
|
|
5
|
+
export type TmuxCommandResult = {
|
|
6
|
+
success: boolean;
|
|
7
|
+
output: string;
|
|
8
|
+
stdout: string;
|
|
9
|
+
stderr: string;
|
|
10
|
+
exitCode: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function runTmuxCommand(tmuxPath: string, args: string[], options?: RunTmuxOptions): Promise<TmuxCommandResult>;
|
|
13
|
+
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { TmuxConfig } from "../../../config/schema";
|
|
2
2
|
import type { SpawnPaneResult } from "../types";
|
|
3
|
-
export declare function replaceTmuxPane(paneId: string, sessionId: string, description: string, config: TmuxConfig, serverUrl: string): Promise<SpawnPaneResult>;
|
|
3
|
+
export declare function replaceTmuxPane(paneId: string, sessionId: string, description: string, config: TmuxConfig, serverUrl: string, directory: string): Promise<SpawnPaneResult>;
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import type { TmuxConfig } from "../../../config/schema";
|
|
2
|
+
import { getTmuxPath } from "../../../tools/interactive-bash/tmux-path-resolver";
|
|
2
3
|
import type { SpawnPaneResult } from "../types";
|
|
4
|
+
import type { runTmuxCommand as RunTmuxCommand } from "../runner";
|
|
3
5
|
import type { SplitDirection } from "./environment";
|
|
4
|
-
|
|
6
|
+
import { isInsideTmux } from "./environment";
|
|
7
|
+
import { isServerRunning } from "./server-health";
|
|
8
|
+
type SpawnTmuxPaneDeps = {
|
|
9
|
+
log: (message: string, data?: unknown) => void;
|
|
10
|
+
runTmuxCommand: typeof RunTmuxCommand;
|
|
11
|
+
isInsideTmux: typeof isInsideTmux;
|
|
12
|
+
isServerRunning: typeof isServerRunning;
|
|
13
|
+
getTmuxPath: typeof getTmuxPath;
|
|
14
|
+
};
|
|
15
|
+
export declare function spawnTmuxPane(sessionId: string, description: string, config: TmuxConfig, serverUrl: string, directory: string, targetPaneId?: string, splitDirection?: SplitDirection, depsInput?: Partial<SpawnTmuxPaneDeps>): Promise<SpawnPaneResult>;
|
|
16
|
+
export {};
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import type { TmuxConfig } from "../../../config/schema";
|
|
2
|
+
import { getTmuxPath } from "../../../tools/interactive-bash/tmux-path-resolver";
|
|
2
3
|
import type { SpawnPaneResult } from "../types";
|
|
4
|
+
import type { runTmuxCommand as RunTmuxCommand } from "../runner";
|
|
5
|
+
import { isInsideTmux } from "./environment";
|
|
6
|
+
import { isServerRunning } from "./server-health";
|
|
7
|
+
type SpawnTmuxSessionDeps = {
|
|
8
|
+
log: (message: string, data?: unknown) => void;
|
|
9
|
+
runTmuxCommand: typeof RunTmuxCommand;
|
|
10
|
+
isInsideTmux: typeof isInsideTmux;
|
|
11
|
+
isServerRunning: typeof isServerRunning;
|
|
12
|
+
getTmuxPath: typeof getTmuxPath;
|
|
13
|
+
};
|
|
3
14
|
export declare function getIsolatedSessionName(pid?: number): string;
|
|
4
|
-
export declare function spawnTmuxSession(sessionId: string, description: string, config: TmuxConfig, serverUrl: string, sourcePaneId?: string): Promise<SpawnPaneResult>;
|
|
15
|
+
export declare function spawnTmuxSession(sessionId: string, description: string, config: TmuxConfig, serverUrl: string, directory: string, sourcePaneId?: string, depsInput?: Partial<SpawnTmuxSessionDeps>): Promise<SpawnPaneResult>;
|
|
16
|
+
export {};
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type SweepTmuxSessionsDeps = {
|
|
2
2
|
isInsideTmux: () => boolean;
|
|
3
3
|
getTmuxPath: () => Promise<string | null | undefined>;
|
|
4
4
|
listCandidateSessions: (tmux: string) => Promise<string[]>;
|
|
5
5
|
killSession: (sessionName: string) => Promise<boolean>;
|
|
6
|
+
log: (message: string, payload?: unknown) => void;
|
|
7
|
+
};
|
|
8
|
+
export type SweepDeps = SweepTmuxSessionsDeps & {
|
|
6
9
|
processAlive: (pid: number) => boolean;
|
|
7
10
|
currentPid: number;
|
|
8
|
-
log: (message: string, payload?: unknown) => void;
|
|
9
11
|
};
|
|
12
|
+
export type SweepTmuxSessionsOptions = {
|
|
13
|
+
prefix?: string;
|
|
14
|
+
predicate?: (sessionName: string) => boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function sweepTmuxSessionsWith(deps: SweepTmuxSessionsDeps, options: SweepTmuxSessionsOptions): Promise<string[]>;
|
|
10
17
|
export declare function sweepStaleOmoAgentSessionsWith(deps: SweepDeps): Promise<number>;
|
|
11
18
|
export declare function sweepStaleOmoAgentSessions(): Promise<number>;
|
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
import type { TmuxConfig } from "../../../config/schema";
|
|
2
|
+
import { getTmuxPath } from "../../../tools/interactive-bash/tmux-path-resolver";
|
|
2
3
|
import type { SpawnPaneResult } from "../types";
|
|
3
|
-
|
|
4
|
+
import { isInsideTmux } from "./environment";
|
|
5
|
+
import { isServerRunning } from "./server-health";
|
|
6
|
+
import type { runTmuxCommand as RunTmuxCommand } from "../runner";
|
|
7
|
+
type SpawnTmuxWindowDeps = {
|
|
8
|
+
log: (message: string, data?: unknown) => void;
|
|
9
|
+
runTmuxCommand: typeof RunTmuxCommand;
|
|
10
|
+
isInsideTmux: typeof isInsideTmux;
|
|
11
|
+
isServerRunning: typeof isServerRunning;
|
|
12
|
+
getTmuxPath: typeof getTmuxPath;
|
|
13
|
+
};
|
|
14
|
+
export declare function spawnTmuxWindow(sessionId: string, description: string, config: TmuxConfig, serverUrl: string, directory: string, depsInput?: Partial<SpawnTmuxWindowDeps>): Promise<SpawnPaneResult>;
|
|
15
|
+
export {};
|
|
@@ -9,5 +9,5 @@ export { replaceTmuxPane } from "./tmux-utils/pane-replace";
|
|
|
9
9
|
export { spawnTmuxWindow } from "./tmux-utils/window-spawn";
|
|
10
10
|
export { spawnTmuxSession, getIsolatedSessionName } from "./tmux-utils/session-spawn";
|
|
11
11
|
export { killTmuxSessionIfExists } from "./tmux-utils/session-kill";
|
|
12
|
-
export { sweepStaleOmoAgentSessions } from "./tmux-utils/stale-session-sweep";
|
|
12
|
+
export { sweepStaleOmoAgentSessions, sweepTmuxSessionsWith } from "./tmux-utils/stale-session-sweep";
|
|
13
13
|
export { applyLayout, enforceMainPaneWidth } from "./tmux-utils/layout";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BuiltinCategoryDefinition } from "./builtin-category-definition";
|
|
2
2
|
export declare const DEEP_CATEGORY_PROMPT_APPEND = "<Category_Context>\nYou are working on GOAL-ORIENTED AUTONOMOUS tasks.\n\nYou are NOT an interactive assistant. You are an autonomous problem-solver.\n\nBEFORE making ANY changes:\n1. Silently explore the codebase extensively (5-15 minutes of reading is normal)\n2. Read related files, trace dependencies, understand the full context\n3. Build a complete mental model of the problem space\n4. Do not ask clarifying questions - the goal is already defined\n\nYou receive a GOAL. When the goal includes numbered steps or phases, treat them as one atomic task broken into sub-steps, not as separate independent tasks. Figure out HOW to achieve it yourself. Thorough research before any action.\n\nSub-steps of ONE goal = execute all steps as phases of one atomic task.\nGenuinely independent tasks = flag and refuse, require separate delegations.\n\nApproach: explore extensively, understand deeply, then act decisively. Prefer comprehensive solutions over quick patches. If the goal is unclear, make reasonable assumptions and proceed.\n\nMinimal status updates. Focus on results, not play-by-play. Report completion with summary of changes.\n</Category_Context>";
|
|
3
|
+
export declare const DEEP_CATEGORY_PROMPT_APPEND_GPT_5_3_CODEX = "<Category_Context name=\"deep\">\nYou are operating in DEEP mode on GPT-5.3-Codex. This category is reserved for goal-oriented autonomous coding work on hairy problems that reward depth over speed and a complete solution over a quick patch.\n\nThe orchestrator routed you here for autonomous execution. Do not stop to ask the orchestrator for permission, do not produce an upfront plan and wait for approval, do not stop at a proof of concept.\n\n# Autonomy and persistence\n\n- Once the goal is given, gather context, implement, verify, and explain outcomes within this turn whenever feasible.\n- Persist end-to-end: do not stop at analysis or partial fixes; carry changes through implementation, verification, and a clear explanation unless you hit a genuine blocker (missing secret, design decision only the user can make, three materially different attempts all failed).\n- Bias to action: default to implementing with reasonable assumptions. Do not end your turn with clarifying questions unless truly blocked. Document assumptions in the final message instead.\n- Avoid excessive looping. If you find yourself re-reading or re-editing the same files without clear progress, stop and end the turn with a concise summary and any clarifying questions needed.\n\n# Goal, not plan\n\nYou receive a GOAL describing the desired outcome. You figure out HOW. The orchestrator deliberately did not hand you a step-by-step plan; producing one and pausing for approval is not what was asked.\n\nWhen the goal contains numbered steps or phases, treat them as sub-steps of ONE atomic task and execute them all in this turn. Splitting them across turns is wrong unless they reveal an architectural blocker that requires the user's input. If the steps turn out to be genuinely independent tasks that should have been separate delegations, flag that in your final message and refuse the ones beyond scope.\n\n# Exploration\n\n- Think first. Before any tool call, decide ALL files and resources you will need.\n- Batch everything. If you need multiple files (even from different places), read them together using parallel tool calls.\n- Always maximize parallelism: never read files one-by-one unless logically unavoidable. For broader questions fire 2-5 explore/librarian sub-agents in parallel.\n- Workflow: (a) plan all needed reads, (b) issue one parallel batch, (c) analyze results, (d) repeat if new unpredictable reads arise. Sequential reads only when you truly cannot know the next file without seeing a prior result first.\n\nBuild a complete mental model before the first edit. Exploration is an investment, not overhead - the orchestrator routed depth tasks here specifically because rushing to implementation is the failure mode.\n\n# Code implementation\n\n- Discerning engineer mindset: optimize for correctness, clarity, and reliability over speed. Cover the root cause, not just a symptom or a narrow slice. Trace at least two levels up before settling - a null check around `foo()` is a symptom; fixing what causes `foo()` to return unexpected values is the root.\n- Conform to codebase conventions: follow existing patterns, helpers, naming, formatting, localization. If you must diverge, state why.\n- Behavior-safe defaults: preserve intended behavior and UX; gate or flag intentional changes; add tests when behavior shifts.\n- Tight error handling: no broad try/catch blocks, no success-shaped fallbacks; propagate or surface errors explicitly. No silent failures - do not early-return on invalid input without logging consistent with repo patterns.\n- Efficient, coherent edits: read enough context before changing a file; batch logical edits together rather than thrashing with many tiny patches.\n- Type safety: changes must pass build and type-check; avoid `as any` or `as unknown as ...`; prefer proper types and guards; reuse existing helpers.\n- Reuse / DRY: search for prior art before adding helpers; reuse or extract a shared helper instead of duplicating.\n- Ambition scaled to context: greenfield = strong defaults, avoid AI-slop, produce work you would hand to another senior engineer. Existing codebase = surgical, respect existing patterns. Depth does not mean invasiveness.\n\n# Completion bar\n\n\"Simplified version\", \"proof of concept\", and \"you can extend this later\" are not acceptable for a deep task. The orchestrator routed here specifically for a complete solution. If you hit a genuine blocker, document it and return; otherwise, finish the task.\n\n# Worktree safety\n\n- NEVER revert existing changes you did not make unless explicitly requested - those changes were made by the user.\n- If asked to commit and there are unrelated changes in those files, do not revert them.\n- If you notice unexpected changes you did not make in unrelated files, ignore them.\n- If you notice unexpected mid-rollout changes you did not make and are not sure how to proceed, stop and ask.\n- NEVER use destructive commands like `git reset --hard` or `git checkout --` unless explicitly requested.\n\n# Status cadence\n\nThe user is not on the other side of this conversation; the orchestrator is, and they will synthesize your progress. Send commentary only at meaningful phase transitions (starting exploration, starting implementation, starting verification, hitting a genuine blocker). Do not narrate every tool call; silence during focused work is expected.\n\nIf you used a planning tool, mark every previously stated intention as Done, Blocked (one-sentence reason + targeted question), or Cancelled (with reason) before finishing. Do not end with in_progress or pending items.\n\n# Final message\n\n- Be concise; pragmatic, not chatty. Higher actionable information per token; fewer social flourishes.\n- Lead with a quick explanation of the change, then context covering where and why. Do not start with \"Summary\"; jump in.\n- Reference paths only - do not dump file contents. Do not say \"save/copy this file\" - the user is on the same machine.\n- For substantial work, summarize clearly with high-level headings.\n- File references: inline code with standalone path. Examples: `src/app.ts`, `src/app.ts:42`. Do not use `file://`, `vscode://`, or `https://` URIs. Do not provide line ranges.\n- Suggest natural next steps (tests, commits, build) only if there are real ones; otherwise omit.\n</Category_Context>";
|
|
3
4
|
export declare const DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 = "<Category_Context name=\"deep\">\nYou are operating in DEEP mode. This is the category reserved for goal-oriented autonomous work on hairy problems that reward thorough exploration and comprehensive solutions.\n\nThe orchestrator chose this category because the task benefits from depth over speed. You should feel empowered to spend the time needed: five to fifteen minutes of silent exploration before the first edit is normal and correct. Rushing to implementation on a deep task is a failure mode, not a feature.\n\n# How deep mode adjusts the base behavior\n\n**Exploration budget: generous.** Read the files you need, trace dependencies both directions, fire 2-5 explore/librarian sub-agents in parallel for broader questions. Build a complete mental model before the first `apply_patch`. Exploration here is an investment, not overhead.\n\n**Goal, not plan.** You receive a GOAL describing the desired outcome. You figure out HOW to achieve it. The orchestrator deliberately did not hand you a step-by-step plan; producing one and asking for approval is not what was asked. Execute.\n\n**Atomic task treatment.** When the goal contains numbered steps or phases, treat them as sub-steps of ONE task and execute them all in this turn. Splitting them across turns is wrong unless they reveal an architectural blocker that requires the user's input. If the \"steps\" turn out to be genuinely independent tasks that should have been separate delegations, flag that in your final message and refuse the ones beyond scope.\n\n**Root cause bias.** Prefer root-cause fixes over symptom fixes. A null check around `foo()` is a symptom fix; fixing whatever causes `foo()` to return unexpected values is the root fix. Trace at least two levels up before settling on an answer. In deep mode, you have permission (and the expectation) to do the deeper fix.\n\n**Ambition scaled to context.** For brand-new greenfield work, be ambitious. Choose strong defaults, avoid AI-slop aesthetics, produce something you would be proud to hand to another senior engineer. For changes in an existing codebase, be surgical and respect the existing patterns; depth does not mean invasiveness.\n\n**Completion bar: full delivery.** \"Simplified version\", \"proof of concept\", and \"you can extend this later\" are not acceptable deliveries for a deep task. The orchestrator routed here specifically for a complete solution. If you hit a genuine blocker (missing secret, design decision only the user can make, three materially different attempts all failed), document it and return; otherwise, finish the task.\n\n**Status cadence: sparse.** The user is not on the other side of this conversation; the orchestrator is, and they will synthesize your progress. Send commentary only at meaningful phase transitions (starting exploration, starting implementation, starting verification, hitting a genuine blocker). Do not narrate every tool call; silence during focused work is expected.\n</Category_Context>";
|
|
4
5
|
export declare function resolveDeepCategoryPromptAppend(model: string | undefined): string;
|
|
5
6
|
export declare const OPENAI_CATEGORIES: BuiltinCategoryDefinition[];
|
|
@@ -3,6 +3,7 @@ export declare function resolveSkillContent(skills: string[], options: {
|
|
|
3
3
|
gitMasterConfig?: GitMasterConfig;
|
|
4
4
|
browserProvider?: BrowserAutomationProvider;
|
|
5
5
|
disabledSkills?: Set<string>;
|
|
6
|
+
teamModeEnabled?: boolean;
|
|
6
7
|
directory?: string;
|
|
7
8
|
}): Promise<{
|
|
8
9
|
content: string | undefined;
|
|
@@ -2,7 +2,11 @@ import type { DelegateTaskArgs } from "./types";
|
|
|
2
2
|
import type { ExecutorContext } from "./executor-types";
|
|
3
3
|
import type { DelegatedModelConfig } from "./types";
|
|
4
4
|
import type { FallbackEntry } from "../../shared/model-requirements";
|
|
5
|
-
export
|
|
5
|
+
export interface ResolveSubagentExecutionOptions {
|
|
6
|
+
allowSisyphusJuniorDirect?: boolean;
|
|
7
|
+
allowPrimaryAgentDelegation?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveSubagentExecution(args: DelegateTaskArgs, executorCtx: ExecutorContext, parentAgent: string | undefined, categoryExamples: string, options?: ResolveSubagentExecutionOptions): Promise<{
|
|
6
10
|
agentToUse: string;
|
|
7
11
|
categoryModel: DelegatedModelConfig | undefined;
|
|
8
12
|
fallbackChain?: FallbackEntry[];
|
|
@@ -57,6 +57,7 @@ export interface DelegateTaskToolOptions {
|
|
|
57
57
|
sisyphusJuniorModel?: string;
|
|
58
58
|
browserProvider?: BrowserAutomationProvider;
|
|
59
59
|
disabledSkills?: Set<string>;
|
|
60
|
+
teamModeEnabled?: boolean;
|
|
60
61
|
availableCategories?: AvailableCategory[];
|
|
61
62
|
availableSkills?: AvailableSkill[];
|
|
62
63
|
agentOverrides?: AgentOverrides;
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -17,5 +17,6 @@ export { createLookAt } from "./look-at";
|
|
|
17
17
|
export { createDelegateTask } from "./delegate-task";
|
|
18
18
|
export { createTaskCreateTool, createTaskGetTool, createTaskList, createTaskUpdateTool, } from "./task";
|
|
19
19
|
export { createHashlineEditTool } from "./hashline-edit";
|
|
20
|
+
export { createTeamSendMessageTool } from "../features/team-mode/tools/messaging";
|
|
20
21
|
export declare function createBackgroundTools(manager: BackgroundManager, client: OpencodeClient): Record<string, ToolDefinition>;
|
|
21
22
|
export declare const builtinTools: Record<string, ToolDefinition>;
|
|
@@ -32,6 +32,8 @@ export interface SkillLoadOptions {
|
|
|
32
32
|
disabledSkills?: Set<string>;
|
|
33
33
|
/** Browser automation provider for provider-gated skill filtering */
|
|
34
34
|
browserProvider?: BrowserAutomationProvider;
|
|
35
|
+
/** Whether team mode built-in docs should be exposed */
|
|
36
|
+
teamModeEnabled?: boolean;
|
|
35
37
|
/** Include Claude marketplace plugin commands in discovery (default: true) */
|
|
36
38
|
pluginsEnabled?: boolean;
|
|
37
39
|
/** Override plugin enablement from Claude settings by plugin key */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wolfx/oh-my-openagent",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "A fork of oh-my-openagent",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"zod": "^4.3.0"
|
|
72
72
|
},
|
|
73
73
|
|
|
74
|
+
|
|
74
75
|
"overrides": {},
|
|
75
76
|
"trustedDependencies": [
|
|
76
77
|
"@ast-grep/cli",
|