Commit Graph

146 Commits

Author SHA1 Message Date
acamq 2e8f0835d8 Merge pull request #2306 from Romanok2805/fix/builtin-agent-mode-override
fix(agents): prevent user/project .md agents from overriding builtin agent modes
2026-03-08 18:57:59 -06:00
acamq 621cad7268 Merge pull request #2230 from Chocothin/fix/respect-config-question-permission
fix(tool-config): respect question permission from OPENCODE_CONFIG_CONTENT
2026-03-07 14:02:47 -07:00
YeonGyu-Kim 58d4f8b40a Revert "Merge pull request #2339 from JimMoen/fix/external-directory-default-ask"
This reverts commit 8a1352fc9b, reversing
changes made to d08bc04e67.
2026-03-07 06:40:19 +09:00
YeonGyu-Kim fade6740ae chore: update GPT-5.2 references to GPT-5.4
Align runtime defaults, tests, docs, and generated artifacts with the newer GPT-5.4 baseline. Keep think-mode and prompt-routing expectations consistent after the model version bump.
2026-03-07 05:46:05 +09:00
JimMoen a1ca658d76 fix(tool-config): stop overriding external_directory permission
Remove the hardcoded external_directory: "allow" default from
applyToolConfig(). This was silently overriding OpenCode's built-in
default of "ask" and any user-configured external_directory permission.

With this change, external_directory permission is fully controlled by
OpenCode's defaults and user configuration, as intended.

Fixes #1973
Fixes #2194
2026-03-06 17:58:08 +08:00
YeonGyu-Kim 23dcd99c9a docs(agents): refresh generated AGENTS guides
🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-03-06 17:59:05 +09:00
Romanok 7f2188bd07 fix(agents): prevent user/project .md agents from overriding builtin agent modes
When users have .md agent files in ~/.claude/agents/ with the same names
as builtin agents (e.g. sisyphus.md, hephaestus.md, atlas.md),
loadAgentsFromDir() hardcodes mode: "subagent" for all loaded agents.

Because the config assembly spreads userAgents after builtinAgents:

  config.agent = {
    ...builtinAgents,  // sisyphus: mode="primary"
    ...userAgents,     // sisyphus: mode="subagent" ← overrides
  }

this causes all primary agents to become subagents. The TUI filters out
subagents, so only non-plugin agents (like "docs") appear in the agent
selector.

Fix:
- Filter out user/project agents that share names with builtin agents
  before spreading into config.agent (both sisyphus-enabled and fallback
  branches)
- Respect frontmatter `mode` field in .md agent files instead of
  hardcoding "subagent"
- Add `mode` to AgentFrontmatter type

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:29:29 +05:00
YeonGyu-Kim f383d7abb5 Revert "Merge pull request #1951 from edxeth/feat/custom-agents"
This reverts commit 47e300b17e, reversing
changes made to 243ce1b7e8.
2026-03-02 23:55:48 +09:00
YeonGyu-Kim 33d39597ae docs(agents): regenerate AGENTS.md hierarchy with updated metrics and model configs
- 1208→1243 TS files (+35), 143k→155k LOC (+12k)
- Update all agent models: Sisyphus, Hephaestus, Oracle, Librarian, Atlas, Metis, Momus
- Add 6 new hook directories (39→45 dirs): beast-mode-system, hashline-edit-diff-enhancer, anthropic-image-context, task-reminder, compaction-todo-preserver, runtime-fallback
- Update category models: visual-engineering/artistry gemini-3-pro→gemini-3.1-pro
- Add 2 config schema files: fallback-models.ts, runtime-fallback.ts
- Timestamp: 2026-03-02 | Commit: 1c2caa09

🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-03-02 23:40:38 +09:00
YeonGyu-Kim 47e300b17e Merge pull request #1951 from edxeth/feat/custom-agents
feat(config): make custom agents first-class for planning and delegation
2026-03-02 23:28:57 +09:00
YeonGyu-Kim e5d972cc2c Merge pull request #1984 from MoerAI/fix/respect-user-external-directory-permission
fix(config): respect user's external_directory permission setting
2026-03-02 23:28:22 +09:00
Chocothin 65bc742881 fix(tool-config): respect question permission from OPENCODE_CONFIG_CONTENT
applyToolConfig() unconditionally set question permission based only on
OPENCODE_CLI_RUN_MODE, ignoring the question:deny already configured via
OPENCODE_CONFIG_CONTENT. This caused agents to hang in headless environments
(e.g. Maestro Auto Run) where the host sets question:deny but does not
know about the plugin-internal OPENCODE_CLI_RUN_MODE variable.

Read permission.question from OPENCODE_CONFIG_CONTENT and give it highest
priority: config deny > CLI run mode deny > default allow.
2026-03-01 22:49:47 +09:00
acamq d6dd54867a fix(agents): remove duplicate remapped agent keys 2026-02-26 15:58:02 -07:00
edxeth a5749a1392 fix(custom-agents): align planner catalog and schema validation 2026-02-26 21:14:00 +01:00
edxeth 7e90c2c48f Merge remote-tracking branch 'origin/dev' into feat/custom-agents
# Conflicts:
#	src/agents/utils.test.ts
#	src/plugin-handlers/agent-config-handler.ts
2026-02-26 18:53:29 +01:00
YeonGyu-Kim 2ece7c3d0a Merge pull request #1963 from MoerAI/fix/multi-issue-1888-1693-1891
fix: resolve issues #1888, #1693, #1891
2026-02-26 23:13:00 +09:00
YeonGyu-Kim 0c62656cc6 Merge pull request #2146 from code-yeongyu/fix/issue-2065-1968-model-updates
fix(models): update Gemini 3→3.1 Pro and add Kimi K2.5 to writing category
2026-02-26 21:07:23 +09:00
YeonGyu-Kim fb194fc944 Merge pull request #2147 from code-yeongyu/fix/issue-2117-preserve-formatter-config
fix(config): preserve formatter config from opencode settings
2026-02-26 21:05:46 +09:00
YeonGyu-Kim 7ff8352a0a fix(config): preserve formatter config from opencode settings
Closes #2117
2026-02-26 21:01:31 +09:00
YeonGyu-Kim d425f9bb80 fix(models): update Gemini 3 to 3.1 Pro and add Kimi to writing category fallback
Closes #2065

Closes #1968
2026-02-26 21:01:26 +09:00
YeonGyu-Kim df02c73a54 fix(agents): retain original agent keys in remapAgentKeysToDisplayNames to prevent crash
Closes #1922
2026-02-26 20:58:47 +09:00
edxeth fb139a7a01 fix(custom-agents): preserve summary flags during description merge 2026-02-24 18:46:49 +01:00
edxeth ae12f2e9d2 feat(config): add custom_agents overrides and strict agent validation 2026-02-24 18:46:49 +01:00
YeonGyu-Kim 73453a7191 docs(agents): update hook counts 44→46, add hashline-edit documentation
- Update root AGENTS.md: hook count 44→46, commit fcb90d92, generated 2026-02-24
- Update src/AGENTS.md: core hooks 35→37, session hooks 21→23
- Update src/hooks/AGENTS.md: 46 hooks total, add modelFallback/noSisyphusGpt/noHephaestusNonGpt/runtimeFallback, jsonErrorRecovery moved to tool-guard (tier 2)
- Create src/tools/hashline-edit/AGENTS.md (93 lines): documents three-op model, LINE#ID format, execution pipeline
- Refresh timestamps: 2026-02-21→2026-02-24 on 28 files
- Update plugin/AGENTS.md hook composition counts

🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-25 00:02:05 +09:00
MoerAI 718884210b fix: resolve issues #1888, #1693, #1891
- fix(hooks): skip todo continuation when agent has pending question (#1888)
  Add pending-question-detection module that walks messages backwards
  to detect unanswered question tool_use, preventing CONTINUATION_PROMPT
  injection while awaiting user response.

- fix(config): allow custom agent names in disabled_agents (#1693)
  Change disabled_agents schema from BuiltinAgentNameSchema to z.string()
  and add filterDisabledAgents helper in agent-config-handler to filter
  user, project, and plugin agents with case-insensitive matching.

- fix(agents): change primary agents mode to 'all' (#1891)
  Update Sisyphus, Hephaestus, and Atlas agent modes from 'primary'
  to 'all' so they are available for @mention routing and task()
  delegation in addition to direct chat.
2026-02-24 16:57:02 +09:00
MoerAI ad79246376 fix(config): respect user's external_directory permission setting
applyToolConfig() forcibly overrode the user's external_directory
permission to 'allow' by placing OMO defaults after the user config
spread. Reorder so defaults come first and user config spreads on
top, allowing users to set 'ask' or 'deny'. The task permission
remains forced to 'deny' after the spread for security.

Closes #1973
2026-02-24 16:31:44 +09:00
YeonGyu-Kim 9f804c2a6a fix(test): sync AGENTS_WITH_TODO_DENY with tool-config-handler implementation 2026-02-24 02:08:30 +09:00
YeonGyu-Kim 35ab9b19c8 fix: deny todo tools for prometheus and sisyphus-junior when task_system enabled
Amp-Thread-ID: https://ampcode.com/threads/T-019c848f-b2a8-7037-9eb5-a258df14b683
Co-authored-by: Amp <amp@ampcode.com>
2026-02-22 17:58:42 +09:00
YeonGyu-Kim fe415319e5 fix: resolve publish blockers for v3.7.4→v3.8.0 release
- Fix #1991 crash: optional chaining for task-history sessionID access
- Fix #1992 think-mode: add antigravity entries to HIGH_VARIANT_MAP
- Fix #1949 Copilot premium misattribution: use createInternalAgentTextPart
- Fix #1982 load_skills: pass directory to discoverSkills for project-level skills
- Fix command priority: sort scopePriority before .find(), project-first return
- Fix Google provider transform: apply in userFallbackModels path
- Fix ralph-loop TUI: optional chaining for event handler
- Fix runtime-fallback: unify dual fallback engines, remove HTTP 400 from retry,
  fix pendingFallbackModel stuck state, add priority gate to skip model-fallback
  when runtime-fallback is active
- Fix Prometheus task system: exempt from todowrite/todoread deny
- Fix background_output: default full_session to true
- Remove orphan hooks: hashline-edit-diff-enhancer (redundant with hashline_edit
  built-in diff), task-reminder (dead code)
- Remove orphan config entries: 3 stale hook names from Zod schema
- Fix disabled_hooks schema: accept arbitrary strings for forward compatibility
- Register json-error-recovery hook in tool-guard pipeline
- Add disabled_hooks gating for question-label-truncator, task-resume-info,
  claude-code-hooks
- Update test expectations to match new behavior
2026-02-21 16:24:18 +09:00
YeonGyu-Kim b48804e3cb fix(config-handler): preserve disable_omo_env wiring in agent setup 2026-02-21 05:33:52 +09:00
YeonGyu-Kim b1eccf7425 docs: update all 31 AGENTS.md files with current project state 2026-02-21 04:38:18 +09:00
ControlNet 3bcbd12e2a test(config-handler): update tests for disable_omo_env behavior
- Refactor test descriptions for clarity regarding the presence of <omo-env> in generated prompts.
- Ensure that when disable_omo_env is true, <omo-env> is omitted from the sisyphus prompt.
- Confirm that <omo-env> remains in the prompt when disable_omo_env is not specified.
2026-02-20 03:03:57 +11:00
ControlNet ddc2edfa0a feat(environment): introduce disable_omo_env configuration option
- Added a new configuration option `disable_omo_env` to control the injection of the `<omo-env>` block in agent prompts.
- Updated relevant functions and tests to support this feature, ensuring that the environment context can be toggled on or off as needed.
- Enhanced documentation to reflect the new option and its implications for API cost and cache hit rates.
2026-02-20 02:31:18 +11:00
YeonGyu-Kim 86a1bfa493 feat(prometheus): add GPT-5.2 optimized prompt with model-based routing
- Create gpt.ts with XML-tagged, principle-driven prompt (Codex plan mode style)
- Add getPrometheusPrompt() routing: GPT models → GPT prompt, others → default
- Promote gpt-5.2 (high) to #2 in prometheus fallback chain
- Follow Atlas GPT variant pattern (isGptModel detection)
2026-02-19 18:40:42 +09:00
YeonGyu-Kim bd2e23584b docs: update AGENTS.md metadata
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 10:46:40 +09:00
YeonGyu-Kim 8384fd1d07 Merge pull request #1911 from jkoelker/preserve-default-agent
fix(config): normalize configured default_agent
2026-02-17 15:59:36 +09:00
code-yeongyu a2ad7ce6a7 fix(config): scope default_agent normalization to Sisyphus mode 2026-02-17 15:50:08 +09:00
YeonGyu-Kim aac79f03b5 docs: regenerate all AGENTS.md files from comprehensive codebase exploration
- Fired 33 parallel explore agents across all major directories
- Analyzed 1164 TS files, 133k LOC, 41 hooks, 26 tools, 11 agents, 18 features
- Regenerated 13 AGENTS.md files with 905 total lines
- Root: plugin architecture, initialization flow, 7 OpenCode hook handlers
- src/: entry point orchestration, hook composition pipeline
- agents/: 11 agent inventory with tool restrictions and factory patterns
- hooks/: 41 hooks organized by 5 tiers, key complex hooks documented
- tools/: 26 tools across 14 directories, delegation categories
- features/: 18 modules mapped by complexity (HIGH/MEDIUM/LOW)
- shared/: 101 utilities in 13 categories, model resolution pipeline
- config/: 22 schema files, Zod v4 validation system
- cli/: 5 commands, doctor checks, model fallback system
- mcp/: 3-tier MCP system architecture
- plugin-handlers/: 6-phase config loading pipeline
- claude-code-hooks/: CC settings.json compatibility layer
- claude-tasks/: task schema + file-based persistence

🤖 Generated with assistance of oh-my-opencode
2026-02-17 11:17:01 +09:00
Jason Kölker a562e3aa4b fix(config): normalize configured default_agent
Agent keys are remapped to display names, so preserving `default_agent`
values could still select a missing key at runtime.

This regression surfaced after d94a739203 remapped `config.agent` keys
to display names without canonicalizing configured defaults.

Normalize configured `default_agent` through display-name mapping before
fallback logic and extend tests to cover canonical and display-name
inputs.
2026-02-17 01:45:47 +00:00
Jason Kölker 90ede4487b fix(config): preserve configured default_agent
oh-my-opencode overwrote OpenCode's default_agent with sisyphus whenever
Sisyphus orchestration was enabled. This made explicit defaults like
Hephaestus ineffective and forced manual agent switching in new sessions.

Only assign sisyphus as default when default_agent is missing or blank,
and preserve existing configured values. Add tests for both preservation
and fallback behavior to prevent regressions.
2026-02-17 01:41:52 +09:00
YeonGyu-Kim 7e9b9cedec Merge pull request #1721 from edxeth/fix/disable-mcps
fix(mcp): preserve user's enabled:false and apply disabled_mcps to all MCP sources
2026-02-16 23:52:24 +09:00
YeonGyu-Kim cb601ddd77 fix: resolve category delegation and command routing with display name agent keys
Category-based delegation (task(category='quick')) was broken because
SISYPHUS_JUNIOR_AGENT sent 'sisyphus-junior' to session.prompt but
config.agent keys are now display names ('Sisyphus-Junior').

- Use getAgentDisplayName() for SISYPHUS_JUNIOR_AGENT constant
- Replace hardcoded 'sisyphus-junior' strings in tools.ts with constant
- Update background-output local constants to use display names
- Add remapCommandAgentFields() to translate command agent fields
- Add raw-key fallback in tool-config-handler agentByKey()
2026-02-16 21:32:33 +09:00
YeonGyu-Kim be2e45b4cb test: update assertions for display name agent keys
- config-handler.test: look up agents by display name keys
- agent-key-remapper.test: new tests for key remapping function
- Rebuild schema asset
2026-02-16 20:43:18 +09:00
YeonGyu-Kim d94a739203 Remap config.agent keys to display names at output boundary
Use display names as config.agent keys so opencode shows proper names in UI
(Tab/@ menu). Key remapping happens after all agents are assembled but before
reordering, via remapAgentKeysToDisplayNames().

- agent-config-handler: set default_agent to display name, add key remapping
- agent-key-remapper: new module to transform lowercase keys to display names
- agent-priority-order: CORE_AGENT_ORDER uses display names
- tool-config-handler: look up agents by config key via agentByKey() helper
2026-02-16 20:42:58 +09:00
YeonGyu-Kim c71a80a86c Revert name fields from agent configs, add getAgentConfigKey reverse lookup
Remove crash-causing name fields from 6 agent configs (sisyphus, hephaestus,
atlas, metis, momus, prometheus). The name field approach breaks opencode
because Agent.get(agent.name) uses name as lookup key.

Add getAgentConfigKey() to agent-display-names.ts for resolving display names
back to lowercase config keys (e.g. 'Atlas (Plan Executor)' -> 'atlas').
2026-02-16 20:42:45 +09:00
YeonGyu-Kim 71df52fc5c Add display names to all core agents via name field
Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder),
Atlas (Plan Executor), Metis (Plan Consultant), Momus (Plan Critic).

Requires opencode fix: Agent.get() fallback to name-based lookup when key
lookup fails, since opencode stores agent.name in messages and reuses it
for subsequent Agent.get() calls.
2026-02-16 20:15:58 +09:00
YeonGyu-Kim e97f8ce082 Revert "Add display names to core agents: Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder), Atlas (Plan Executor)"
This reverts commit 655899a264.
2026-02-16 20:12:24 +09:00
YeonGyu-Kim 655899a264 Add display names to core agents: Sisyphus (Ultraworker), Hephaestus (Deep Agent), Prometheus (Plan Builder), Atlas (Plan Executor) 2026-02-16 18:36:11 +09:00
YeonGyu-Kim cfb8164d9a docs: regenerate all 13 AGENTS.md files from deep codebase exploration 2026-02-16 16:13:40 +09:00
Willy f9ea9a4ee9 fix(project): use directory param instead of process.cwd() for agents, commands, and slash commands
Extends the process.cwd() fix to cover all project-level loaders. In the desktop app, process.cwd() points to the app installation directory instead of the project directory, causing project-level agents, commands, and slash commands to not be discovered. Each function now accepts an optional directory parameter (defaulting to process.cwd() for backward compatibility) and callers pass ctx.directory from the plugin context.
2026-02-13 11:09:35 +08:00