Commit Graph

4397 Commits

Author SHA1 Message Date
YeonGyu-Kim 3eb53adfc3 fix(hooks): resolve cubic review issues
- Replace two-pass env interpolation with single-pass combined regex to
  prevent re-interpolation of $-sequences in substituted header values
- Convert HookEntry to discriminated union so type: "http" requires url,
  preventing invalid configs from passing type checking
- Add regression test for double-interpolation edge case
2026-02-28 12:00:02 +09:00
YeonGyu-Kim 43dfdb2380 feat(hooks): add HTTP hook handler support
Add type: "http" hook support matching Claude Code's HTTP hook specification.
HTTP hooks send POST requests with JSON body, support env var interpolation
in headers via allowedEnvVars, and configurable timeout.

New files:
- execute-http-hook.ts: HTTP hook execution with env var interpolation
- dispatch-hook.ts: Unified dispatcher for command and HTTP hooks
- execute-http-hook.test.ts: 14 tests covering all HTTP hook scenarios

Modified files:
- types.ts: Added HookHttp interface, HookAction union type
- config.ts: Updated to accept HookAction in raw hook matchers
- pre-tool-use/post-tool-use/stop/user-prompt-submit/pre-compact:
  Updated all 5 executors to dispatch HTTP hooks via dispatchHook()
- plugin-loader/types.ts: Added "http" to HookEntry type union
2026-02-28 11:38:34 +09:00
ismeth 7cec6f7c8b fix(tools): resolve relative paths in glob/grep against project directory
When models pass relative paths (e.g. 'apps/ios/CleanSlate') to glob/grep
tools, they were passed directly to ripgrep which resolved them against
process.cwd(). In OpenCode Desktop, process.cwd() is '/' causing all
relative path lookups to fail with 'No such file or directory'.

Fix: use path.resolve(ctx.directory, args.path) to resolve relative paths
against the project directory instead of relying on process.cwd().
2026-02-28 00:58:05 +01:00
github-actions[bot] 866bd50dca @renanale has signed the CLA in code-yeongyu/oh-my-opencode#2201 2026-02-27 22:38:27 +00:00
acamq 5e726a2af2 fix(docs): remove corrupted text and duplicate entries in AGENTS.md
- Remove accidental '7ZB|' keystroke insertion on line 7
- Remove duplicate schema tree entries (start-work.ts and internal/permission.ts)
2026-02-27 13:45:35 -07:00
acamq e2e3d110b7 feat(start-work): add auto_commit config option
Add start_work.auto_commit configuration option to allow users to
disable the automatic commit step in the /start-work workflow.

When auto_commit is false:
- STEP 8: COMMIT ATOMIC UNIT is removed from orchestrator reminder
- STEP 9: PROCEED TO NEXT TASK becomes STEP 8

Resolves #2197
2026-02-27 13:38:52 -07:00
acamq f393f50131 fix(hephaestus): add tool call format instructions to prevent malformed output
GPT-5.x Codex models occasionally hallucinate malformed tool calls like:
  assistant to=functions.XXX <garbled_unicode>json\n{...}

This is a model-level issue where the model outputs tool calls as text
instead of using the native tool calling mechanism. Add explicit prompt
instructions telling the model to use the tool call interface.

Related: #2190
2026-02-27 12:58:05 -07:00
acamq deb904bbc4 fix(skill-mcp): clarify builtin MCP error hint 2026-02-27 10:03:20 -07:00
David Hardy 09fd131f24 fix: initialize config context in plugin runtime to prevent warnings
The auto-update checker hook calls getConfigDir() which requires the
config context to be initialized via initConfigContext(). When running
in the OpenCode TUI plugin runtime (vs CLI), this initialization never
happened, causing the warning:

"getConfigContext() called before initConfigContext(); defaulting to CLI paths."

This warning would appear when opening folders containing .mulch or .beads
directories because the lifecycle plugins triggered the auto-update checker.

Fix: Call initConfigContext("opencode", null) at plugin startup to ensure
the config context is properly initialized for all hooks and utilities.

Fixes upstream issue where TUI users see spurious bun install warnings.
2026-02-27 15:19:21 +00:00
Nguyen Khac Trung Kien 518e3c5da7 Merge pull request #2161 from acamq/fix/duplicate-agent-entries 2026-02-27 18:35:59 +07:00
Kenny 85126247b4 Merge pull request #2153 from devxoul/fix/docs-master-to-dev-branch
replace master branch references with dev
2026-02-27 19:33:48 +08:00
Kenny bc2eaaf89b Merge pull request #2160 from dwnmf/add-russian-readme
Add Russian README
2026-02-27 19:32:14 +08:00
github-actions[bot] 0f73504639 @mertyldrm has signed the CLA in code-yeongyu/oh-my-opencode#2184 2026-02-27 10:53:16 +00:00
Mert Yıldırım 83c024dd66 fix: remove console.warn that leaks into TUI textbox
getConfigContext() emitted a console.warn when called before
initConfigContext() completed. Since initConfigContext runs async
(spawns opencode --version subprocess), other modules calling
getConfigDir/getConfigJson could trigger this warning during startup.

The fallback behavior is intentional and safe (defaults to standard
CLI paths), but console.warn writes to stderr which the TUI captures,
causing the warning to render inside the user's textbox.

Fixes #2183
2026-02-27 13:51:51 +03:00
github-actions[bot] db32ac5ae8 @YLRong has signed the CLA in code-yeongyu/oh-my-opencode#2176 2026-02-27 09:06:59 +00:00
YLRong c1eaf5fcab fix: remove misleading hint from replace pos-only description
The hint '(MOST COMMON for single-line edits)' misleads agents into
thinking pos-only replace is the default behavior. When agents want
to replace multiple lines but only specify pos without end, the tool
only replaces one line, causing duplicate code from retained lines.
2026-02-27 17:06:40 +08:00
Lynricsy d09cf56e15 feat(delegate-task): ⚙️ make sync subagent timeout configurable via syncPollTimeoutMs
Allow users to set `background_task.syncPollTimeoutMs` in config to override
the default 10-minute sync subagent timeout. Affects sync task, sync continuation,
and unstable agent task paths. Minimum value: 60000ms (1 minute).

Co-authored-by: Wine Fox <fox@ling.plus>
2026-02-27 16:17:39 +08:00
1noilimrev fbe3b5423d refactor(test): extract shared mock helper and add try-finally for env cleanup 2026-02-27 15:30:13 +09:00
YeonGyu-Kim 2eb7994163 fix(atlas): use start-work session agent for continuation gating
Prefer the in-memory session agent set by /start-work when validating idle continuation eligibility, so stale message storage agent values do not block boulder continuation.
2026-02-27 15:01:44 +09:00
github-actions[bot] 15ad9442a4 @1noilimrev has signed the CLA in code-yeongyu/oh-my-opencode#2166 2026-02-27 05:53:45 +00:00
1noilimrev 88bf8268f5 test(hooks): add darwin notification backend selection tests 2026-02-27 14:48:34 +09:00
1noilimrev 1c6d384f14 fix(hooks): use terminal-notifier for macOS notification click-to-focus 2026-02-27 14:39:07 +09:00
LYA_CAP_OCEAN 07542d39aa Fix markdown blockquote structure in Russian README 2026-02-27 01:59:29 +03:00
acamq d6dd54867a fix(agents): remove duplicate remapped agent keys 2026-02-26 15:58:02 -07:00
github-actions[bot] f3cbc24e78 @dwnmf has signed the CLA in code-yeongyu/oh-my-opencode#2160 2026-02-26 22:51:52 +00:00
LYA_CAP_OCEAN b76abeb8e0 Add Russian README 2026-02-27 01:49:51 +03:00
edxeth d7ab5c4d7b refactor(schema): dedupe custom agent override with ref 2026-02-26 21:39:04 +01:00
edxeth 818fdc490c fix(config): avoid conflicting typo and migration guidance 2026-02-26 21:28:00 +01:00
edxeth a5749a1392 fix(custom-agents): align planner catalog and schema validation 2026-02-26 21:14:00 +01:00
edxeth 922ff7f2bc docs(config): fix custom_agents examples 2026-02-26 20:55:58 +01:00
YeonGyu-Kim 21c249e8c8 fix(ci): pre-download baseline compile targets to avoid Bun extraction failures
Bun's internal download of baseline compile targets from npm registry
consistently fails on Windows CI runners (ExtractionFailed error).
Pre-download the baseline binary via curl into Bun's cache directory
so the compile step finds it already cached and skips the download.

Also makes publish job resilient with if: always() so one failed
platform doesn't block publishing all other successful platforms.
2026-02-27 04:43:29 +09:00
YeonGyu-Kim 0749a8f138 fix(ci): make platform publish resilient to individual build failures
publish job now runs with if: always() && !cancelled(), and gates
each publish step on download.outcome == 'success'. One flaky target
(e.g. windows-x64-baseline) no longer blocks all other platforms.
2026-02-27 04:39:05 +09:00
github-actions[bot] ae54fd31f4 release: v3.9.0 2026-02-26 19:30:38 +00:00
YeonGyu-Kim bdd86b1415 fix(hephaestus): remove auto-commit policy to prevent surprise commits
The auto-commit section instructed Hephaestus to automatically commit after
implementation work. Users who didn't know about this behavior would get
surprise commits — a trust-breaking behavioral change flagged by 5 Oracle
reviews as the sole publish blocker for 3.9.0.
2026-02-27 04:27:07 +09:00
edxeth da1e160add docs(config): document custom_agents behavior and delegation flow 2026-02-26 20:01:53 +01:00
YeonGyu-Kim 76cba9b222 Merge pull request #2159 from code-yeongyu/fix/ralph-loop-completion-scoping
fix(ralph-loop): scope completion detection to messages since loop start
2026-02-27 03:23:46 +09:00
YeonGyu-Kim 2955dc868f Merge pull request #2158 from code-yeongyu/fix/hashline-diff-format-compat
test(hashline-edit): verify diff format compatibility with OpenCode UI
2026-02-27 03:23:43 +09:00
YeonGyu-Kim 3ab4b7f77b Merge pull request #2157 from code-yeongyu/fix/token-limiter-safe-truncation
fix(token-limiter): truncate at newline boundaries instead of raw slice
2026-02-27 03:23:40 +09:00
YeonGyu-Kim 3540d1c550 Merge pull request #2156 from code-yeongyu/fix/background-pending-notif-leak
fix(background-agent): clean pendingNotifications on session.deleted
2026-02-27 03:23:38 +09:00
YeonGyu-Kim 9bc9dcaa18 Merge pull request #2155 from code-yeongyu/fix/ultrawork-thinking-db-write
fix(ultrawork-db): write $.thinking alongside $.variant in deferred model override
2026-02-27 03:23:30 +09:00
YeonGyu-Kim f2a1412bf1 test(ralph-loop): harden completion detector PluginInput mock 2026-02-27 03:12:22 +09:00
YeonGyu-Kim 190c6991ac fix(ralph-loop): persist session message count at loop start 2026-02-27 03:08:30 +09:00
YeonGyu-Kim e17a00a906 fix(ralph-loop): scope completion detection to messages since loop start 2026-02-27 03:05:14 +09:00
YeonGyu-Kim c8aa1bbce4 test(hashline-edit): add diff format compatibility tests 2026-02-27 03:02:49 +09:00
YeonGyu-Kim 911710e4d4 fix(token-limiter): truncate at newline boundaries instead of raw slice 2026-02-27 03:02:04 +09:00
YeonGyu-Kim 050b93bebb fix(background-agent): clean pendingNotifications on session.deleted 2026-02-27 03:00:39 +09:00
YeonGyu-Kim 2ffa803b05 fix(ultrawork-db): write $.thinking alongside $.variant in deferred model override 2026-02-27 02:59:22 +09: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 cf97494073 Merge pull request #2154 from minpeter/feat/hashline-benchmark
fix(hashline-edit): harden deduplication, validation, and add benchmark suite
2026-02-27 02:14:12 +09:00
minpeter 8fb5949ac6 fix(benchmarks): address review feedback on error handling and validation
- headless.ts: emit error field on tool_result when output starts with Error:
- test-multi-model.ts: errored/timed-out models now shown as RED and exit(1)
- test-multi-model.ts: validate --timeout arg (reject NaN/negative)
- test-edge-cases.ts: use exact match instead of trim() for whitespace test
- test-edge-cases.ts: skip file pre-creation for create-via-append test

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-27 01:44:51 +09:00