Commit Graph

4979 Commits

Author SHA1 Message Date
MoerAI ed6e9955da fix(mcp): normalize path separators in LSP/ast-grep cli candidate detection (fixes #4151)
On Windows, path.resolve() returns paths with backslash separators. The previous endsWith("dist/cli.js") check uses forward slashes and always returned false on Windows, causing both LSP and ast-grep MCPs to fall through to the bootstrap path even when the dist cli exists. Result: LSP MCP completely unusable on Windows with MODULE_NOT_FOUND for dist/packages/lsp-tools-mcp/dist/cli.js.

Fix: derive a platform-aware suffix at module load time by replacing forward slashes in DIST_CLI_REL / SOURCE_CLI_REL with path.sep, then use that suffix in the endsWith check.

Verification: all 4 src/mcp/lsp.test.ts cases pass on Windows (previously 2 failed); all 13 src/mcp/ast-grep.test.ts cases pass (previously 2 failed). Total: 17/17 src/mcp tests green. bun run typecheck clean.
2026-05-21 11:20:25 +09:00
ZeyuFu 860c663c80 fix-up(#4027): narrow coordinator guard to registry hard-reject set
Maintainer feedback (#4071 review): the original guard rejected
sisyphus and atlas as subagent targets even from team-mode where
resolveMember() intentionally calls resolveSubagentExecution with
allowPrimaryAgentDelegation: true. Per AGENT_ELIGIBILITY_REGISTRY
(src/features/team-mode/types.ts), only prometheus is hard-reject;
sisyphus and atlas are explicitly verdict: 'eligible' for team
membership.

Shrink COORDINATOR_AGENT_NAMES to ['prometheus'] so the guard
aligns with the registry's authoritative classification, document
the scoping rule in a comment, and add regression tests covering:

- sisyphus is NOT blocked by the coordinator guard (registry eligible)
- atlas is NOT blocked by the coordinator guard (registry eligible)
- prometheus IS blocked even when allowPrimaryAgentDelegation: true
  (registry hard-reject is authoritative)

Fixes the 5 zauc-mocks resolver tests that were locking in the
wrong rejection set (including 'allows delegating to a primary
agent when allowPrimaryAgentDelegation is enabled'). The one test
asserting the literal primary-agent error string for Prometheus
display-name was loosened to a regex that accepts either guard's
message, since prometheus is now caught by the coordinator path
which fires before the primary-agent lookup.
2026-05-20 22:05:47 -04:00
ZeyuFu 7af3007e67 fix(team-mode): reject coordinator agents as subagent targets (#4027)
Agents could select coordinator/meta agents (Prometheus, Atlas,
Sisyphus/Ultraworker) as subagent targets via task() / delegation,
producing duplicate orchestration loops and conflicting team state.
This is the inverse of #3987 / #4065 — symmetric guard on the
delegation TARGET side, using the same AGENT_ELIGIBILITY_REGISTRY
classification.

Add a runtime guard at the delegation entry point that rejects
task() calls whose subagent_type resolves to an agent marked as
hard-reject / coordinator-only in the eligibility registry, with
an actionable error naming the agent. Regression test asserts a
prometheus-targeted delegation is rejected before any subagent
session spawns.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 22:05:47 -04:00
ZeyuFu 9791019366 fix(prometheus-md-only): replace SYSTEM DIRECTIVE marker with XML tag in external prompts (#4036)
PLANNING_CONSULT_WARNING was prepended to the prompt forwarded to
subagent LLMs via task(). Its leading bracket-enclosed marker
`[SYSTEM DIRECTIVE: OH-MY-OPENCODE - PROMETHEUS READ-ONLY]` is
exactly the indirect-prompt-injection signature that Azure OpenAI
Prompt Shield flags in user-role content; on GPT-5.4 through
Azure, the model returns "I'm sorry, but I cannot assist with
that request." before any planning work runs, making Prometheus
non-functional on Azure.

The bracket marker was designed for internal hook-to-hook
filtering, but PLANNING_CONSULT_WARNING leaks it to external LLM
payloads. Replace the header with a neutral XML-tag wrapper
(`<planning-context source="prometheus-read-only">`) that Azure's
filter does not match while preserving the human-readable warning
body. Internal isSystemDirective() consumers are unaffected.

Regression test asserts the post-hook task() prompt does not
begin with the flagged bracket sequence.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 22:04:10 -04:00
William Obino 5a965fb44f fix(background-agent): skip disconnected explicit-provider fallbacks 2026-05-21 02:55:18 +03:00
heunghingwan cfe29168aa Fix ambiguous FN. notation in Final Wave label instructions
Replace 'FN.' shorthand with explicit examples 'F1.', 'F2.' to prevent
LLMs from generating literal 'FN.' labels that the parser rejects.

Identified by cubic.
2026-05-21 05:26:32 +08:00
heunghingwan 73b5a7eb0e Add plan format validator hook to detect malformed task labels
- Strengthen Prometheus plan template with FORMAT constraint
- Add task label format check to Oracle phase-2 (N/6 → N/7)
- Add format checks to self-review checklist
- New plan-format-validator hook: compares raw checkbox count
  against getPlanProgress() after plan writes, warns agent when
  labels are malformed (0/0 or partial skip scenarios)
2026-05-21 05:17:54 +08:00
YeonGyu-Kim a6e4691fcc fix: remove duplicate local isRecord declaration (conflicts with import) 2026-05-21 03:17:52 +09:00
Sami Jawhar 9c4ae26945 fix(skill-discovery): load native OpenCode skills in task delegation 2026-05-20 16:22:01 +00:00
YeonGyu-Kim 97c73b41bf Merge pull request #3147 from EZotoff/fix/notepad-directive-scope
fix(sisyphus-junior-notepad): scope plan directive to delegated workers
2026-05-21 00:59:10 +09:00
YeonGyu-Kim db4c9f49e3 Merge pull request #3316 from ahuangsnail/fix/max-output-tokens-zero-fallback
fix: treat zero limit.output as unknown to enable fallback to bundled…
2026-05-21 00:59:05 +09:00
YeonGyu-Kim 821ee92c2f Merge pull request #2965 from sjawhar/fix/chat-message-session-cache
fix(chat-message): refresh stale session-agent cache from explicit input.agent
2026-05-21 00:58:20 +09:00
YeonGyu-Kim 5b72411ba4 Merge pull request #3045 from haimingZZ/fix/gpt54-junior-edit-tool-haimingzz
fix(prompt): prefer edit tool for GPT-5.4 juniors
2026-05-21 00:58:01 +09:00
YeonGyu-Kim abcc46f44a fix: update pollSessionUntilIdle -> waitForLookAtSessionResult import 2026-05-21 00:57:36 +09:00
YeonGyu-Kim 2a4f5f2877 Merge pull request #2958 from kui123456789/fix/context-injector-prt-prefix
fix(context-injector): prefix synthetic part ids with prt_
2026-05-21 00:56:26 +09:00
YeonGyu-Kim 70da8ad695 Merge pull request #3600 from hackerh3/hackerh3/start-work-session-affinity
fix(start-work): prefer current session plan
2026-05-21 00:55:57 +09:00
YeonGyu-Kim 3dba552798 Merge pull request #2991 from GreenPi290/fix/doctor-wsl-binary-detection
fix(doctor): improve opencode binary detection for WSL
2026-05-21 00:55:17 +09:00
YeonGyu-Kim f5de4bf7be Merge pull request #3498 from Disaster-Terminator/fix/task-id-prompt-surface
fix(prompts): prefer task_id in continuation guidance
2026-05-21 00:54:47 +09:00
YeonGyu-Kim ace15a6afe Merge pull request #3785 from Biemmmmm/fix/resolve-plugin-root-in-commands
fix: resolve ${CLAUDE_PLUGIN_ROOT} in plugin commands, agents, and skills
2026-05-21 00:48:33 +09:00
YeonGyu-Kim d0719ff7b7 Merge pull request #3875 from jollyxenon/fix/3846-opencode-config-dir-additive
fix(config): align OPENCODE_CONFIG_DIR with additive OpenCode semantics
2026-05-21 00:48:00 +09:00
YeonGyu-Kim 6dcb2afd41 Merge pull request #3838 from NICxKMS/fix/team-mode-windows-atomic-write
fix(team-mode): sync atomic writes through writable handle
2026-05-21 00:46:24 +09:00
YeonGyu-Kim b18963b0a9 Merge pull request #3868 from MoerAI/fix/openai-server-error-retryable
fix(model-error-classifier): mark OpenAI server_error patterns as retryable (fixes #3799)
2026-05-21 00:46:16 +09:00
YeonGyu-Kim 2185babd28 Merge pull request #3936 from wjiuxing/fix/flaky-spawner-test-polling
fix: replace brittle setTimeout(50) with polling waitForCondition in spawner tests
2026-05-21 00:46:06 +09:00
YeonGyu-Kim cad63c97bd Merge pull request #4052 from PeterPonyu/fix/3505-attach-retry-until-session-ready
fix(tmux-subagent): wait for session readiness before spawning attach pane
2026-05-21 00:45:15 +09:00
YeonGyu-Kim 7651c856aa Merge pull request #3944 from survivor998/fix/ultraworker-display-name-zwsp
fix(display): lowercase ultraworker to avoid ZWSP rendering glitch
2026-05-21 00:45:07 +09:00
YeonGyu-Kim 10ad8d87e9 Merge pull request #4050 from PeterPonyu/fix/3822-doctor-plugin-version-detection
fix(doctor): detect oh-my-openagent version from resolved package.json
2026-05-21 00:44:13 +09:00
YeonGyu-Kim 0e49767a3e Merge pull request #4026 from dihak/fix/graceful-shutdown-exit
fix(process-cleanup): call process.exit() after SIGTERM cleanup
2026-05-21 00:43:32 +09:00
YeonGyu-Kim e824115a2f Merge pull request #4063 from PeterPonyu/fix/3963-server-url-port-zero
fix(team-mode): surface port-0 fallback and silent layout skip (#3963)
2026-05-21 00:42:20 +09:00
YeonGyu-Kim 467aa13e9f Merge pull request #4064 from PeterPonyu/fix/3923-team-error-propagation
fix(team-mode): surface member error to main agent (#3923)
2026-05-21 00:42:11 +09:00
YeonGyu-Kim cb124f75a5 Merge pull request #4065 from PeterPonyu/fix/3987-team-create-hard-reject-validation
fix(team-mode): reject team_create from hard-reject agents (#3987)
2026-05-21 00:42:04 +09:00
YeonGyu-Kim a1f03c8461 Merge pull request #4066 from PeterPonyu/fix/2887-filter-terminal-probe-replies
fix(tmux-subagent): drain terminal probe replies during delegated pane startup (#2887)
2026-05-21 00:41:57 +09:00
YeonGyu-Kim 6637a18450 Merge pull request #4067 from PeterPonyu/fix/3898-fallback-preserve-team-context
fix(team-mode): preserve team membership across model fallback (#3898)
2026-05-21 00:41:11 +09:00
YeonGyu-Kim b76e8d2e86 Merge pull request #4077 from PeterPonyu/fix/4013-todo-continuation-enforcer-loop
fix(todo-continuation-enforcer): stop looping after all todos complete (#4013)
2026-05-21 00:38:41 +09:00
YeonGyu-Kim 5eabeb80f9 Merge pull request #4082 from PeterPonyu/fix/3685-notepad-no-write-fallback
fix(notepad-guard): refuse Write tool for .sisyphus/notepads files (#3685)
2026-05-21 00:37:27 +09:00
YeonGyu-Kim 85d03298b9 Merge pull request #4098 from sjawhar/feat/look-at-async
fix(look-at): rework session poller to wait for assistant response, not just idle
2026-05-21 00:15:22 +09:00
YeonGyu-Kim aa3187bfbb Merge pull request #4180 from JacobZyy/fix/plugin-hooks-merge 2026-05-21 00:14:58 +09:00
YeonGyu-Kim 343d9ed2fe Merge pull request #4099 from sjawhar/fix/mcp-reload-survival
fix(skill-mcp): allow MCP manager to accept connections after disconnectAll
2026-05-21 00:13:29 +09:00
YeonGyu-Kim 7a5b8d831e Merge pull request #4100 from sjawhar/fix/tmux-isolated-close-no-layout
fix(tmux): skip layout enforcement when closing isolated container pane
2026-05-21 00:11:55 +09:00
YeonGyu-Kim 12ed091e93 Merge pull request #4101 from sjawhar/fix/modalities-object-shape
fix(model-capabilities): handle object-shaped modalities in readModalityKeys
2026-05-21 00:10:29 +09:00
YeonGyu-Kim aa5eeaf892 Merge pull request #4102 from sjawhar/fix/skill-directory-param
fix(skill): pass directory to getAllSkills + fix async test timing
2026-05-21 00:08:40 +09:00
YeonGyu-Kim 3ee0209a41 Merge pull request #4113 from PeterPonyu/fix/3937-runtime-fallback-quota-patterns
fix(runtime-fallback): classify more provider quota error names
2026-05-21 00:07:08 +09:00
YeonGyu-Kim f35bb95634 Merge pull request #4114 from PeterPonyu/fix/3607-detect-shell-windows-msystem
fix(non-interactive-env): use powershell syntax on Windows regardless of SHELL/MSYSTEM (#3607)
2026-05-21 00:04:45 +09:00
YeonGyu-Kim c6d754d389 Merge pull request #4115 from PeterPonyu/fix/3726-glob-grep-broken-symlinks
fix(glob,grep): tolerate broken symlinks and non-fatal I/O warnings (#3726)
2026-05-21 00:03:53 +09:00
YeonGyu-Kim 8276eb6c53 Merge pull request #4121 from mguttmann/fix-4119
fix(delegate-task): default run_in_background and load_skills instead of throwing (fixes #4119)
2026-05-21 00:01:12 +09:00
JacobZyy 33f121b113 fix: add PATH to restricted hook env, protect HOME/CLAUDE_PROJECT_DIR from allowlist override, reset plugin hooks state in tests
- P1: When allowedEnvVars is provided, PATH was missing from the base
  restricted env, causing non-builtin commands to fail at exec time
- P2: Allowlisted HOME/CLAUDE_PROJECT_DIR could overwrite normalized
  values from getHomeDirectory()/cwd with ambient process.env values
- P2: Test suite mutated shared pluginHooksState singleton without
  resetting it in afterEach, causing cross-test state leaks
2026-05-20 22:49:05 +08:00
YeonGyu-Kim 3e9c3f8ada Merge pull request #4146 from LYY/fix/skill-shortname-fallback
fix: support unambiguous short skill names in delegated skill loading
2026-05-20 23:42:44 +09:00
YeonGyu-Kim 2fd627144a Merge remote-tracking branch 'origin/dev' into dev 2026-05-20 23:41:09 +09:00
YeonGyu-Kim 791825fc20 Merge pull request #4153 from MoerAI/fix/fallback-model-string-guard
fix(shared,delegate-task,claude-code-agent-loader): guard model parsers against non-string input (fixes #4145)
2026-05-20 23:40:33 +09:00
YeonGyu-Kim e246965789 Merge pull request #4154 from MoerAI/fix/todo-description-override-fires
fix(plugin): wire tool.definition handler so todo-description-override actually fires (fixes #3705)
2026-05-20 23:38:51 +09:00
YeonGyu-Kim b463acda72 Merge pull request #4171 from MoerAI/fix/multimodal-looker-tool-usage-guidance
fix(agents): declare multimodal-looker tool allowlist in prompt to prevent death loop on small VL models (fixes #4116)
2026-05-20 23:36:10 +09:00