YeonGyu-Kim
2beb29f326
refactor(opencode-skill-loader): split loader and merger into focused modules
...
Extract skill loading pipeline into single-responsibility modules:
- skill-discovery.ts, skill-directory-loader.ts, skill-deduplication.ts
- loaded-skill-from-path.ts, loaded-skill-template-extractor.ts
- skill-template-resolver.ts, skill-definition-record.ts
- git-master-template-injection.ts, allowed-tools-parser.ts
- skill-mcp-config.ts, skill-resolution-options.ts
- merger/ directory for skill merging logic
2026-02-08 16:21:19 +09:00
YeonGyu-Kim
964c8f61fd
refactor(tmux-subagent): split manager and decision-engine into focused modules
...
Extract session lifecycle, polling, grid planning, and event handling:
- polling.ts: session polling controller with stability detection
- event-handlers.ts: session created/deleted handlers
- grid-planning.ts, spawn-action-decider.ts, spawn-target-finder.ts
- session-status-parser.ts, session-message-count.ts
- cleanup.ts, polling-constants.ts, tmux-grid-constants.ts
2026-02-08 16:21:04 +09:00
YeonGyu-Kim
fdcee08460
refactor(background-agent): split manager.ts into focused modules
...
Extract 30+ single-responsibility modules from manager.ts (1556 LOC):
- task lifecycle: task-starter, task-completer, task-canceller, task-resumer
- task queries: task-queries, task-poller, task-queue-processor
- notifications: notification-builder, notification-tracker, parent-session-notifier
- session handling: session-validator, session-output-validator, session-todo-checker
- spawner: spawner/ directory with focused spawn modules
- utilities: duration-formatter, error-classifier, message-storage-locator
- result handling: result-handler-context, background-task-completer
- shutdown: background-manager-shutdown, process-signal
2026-02-08 16:20:52 +09:00
YeonGyu-Kim
152225b470
Merge pull request #1652 from code-yeongyu/fix-1623-v2
...
fix(agents): include custom agents in orchestrator delegation prompt (#1623 )
2026-02-08 16:02:09 +09:00
YeonGyu-Kim
638e4a8d7d
Merge pull request #1643 from code-yeongyu/fix/exa-api-key-1627
...
fix(mcp): append EXA_API_KEY to Exa MCP URL when env var is set (#1627 )
2026-02-08 16:01:59 +09:00
YeonGyu-Kim
0cdb6e0727
Merge pull request #1658 from code-yeongyu/fix-1233
...
fix: detect completion tags in ralph/ULW loop (#1233 )
2026-02-08 15:51:16 +09:00
YeonGyu-Kim
3a559d2593
fix(agents): use config data instead of client API to avoid init deadlock ( #1623 )
2026-02-08 15:34:47 +09:00
YeonGyu-Kim
3ec0a4f5a4
fix: resolve all test failures and Cubic review issues
...
- Fix unstable-agent-babysitter: add promptAsync to test mock
- Fix claude-code-mcp-loader: isolate tests from user home configs
- Fix npm-dist-tags: encode packageName for scoped packages
- Fix agent-builder: clone source to prevent shared object mutation
- Fix add-plugin-to-opencode-config: handle JSONC with leading comments
- Fix auth-plugins/add-provider-config: error on parse failures
- Fix bun-install: clear timeout on completion
- Fix git-diff-stats: include untracked files in diff summary
2026-02-08 15:31:32 +09:00
YeonGyu-Kim
fe52902b36
test(mcp): restore Tavily tests and add encoding edge case ( #1627 )
2026-02-08 15:28:31 +09:00
YeonGyu-Kim
1b48aceb3b
Merge pull request #1657 from code-yeongyu/fix-1366-lsp-unblock
...
fix(lsp): reset safety block on server restart (#1366 )
2026-02-08 15:13:30 +09:00
YeonGyu-Kim
cea97f896b
refactor: wave 2 - split atlas, auto-update-checker, session-recovery, todo-enforcer, background-task hooks
...
- Extract atlas/ into 15 focused modules (hook, event handler, tool policies, types, etc.)
- Split auto-update-checker into checker/ and hook/ subdirectories with single-purpose files
- Decompose session-recovery into separate recovery strategy files per error type
- Extract todo-continuation-enforcer from monolith to directory with dedicated modules
- Split background-task/tools.ts into individual tool creator files
- Extract command-executor, tmux-utils into focused sub-modules
- Split config/schema.ts into domain-specific schema files
- Decompose cli/config-manager.ts into focused modules
- Rollback skill-mcp-manager, model-availability, index.ts splits that broke tests
- Fix all import path depths for moved files (../../ -> ../../../)
- Add explicit type annotations to resolve TS7006 implicit any errors
Typecheck: 0 errors
Tests: 2359 pass, 5 fail (all pre-existing)
2026-02-08 15:01:42 +09:00
YeonGyu-Kim
2195464776
fix(mcp): remove duplicate x-api-key header, add test ( #1627 )
2026-02-08 14:56:43 +09:00
YeonGyu-Kim
df4d8fe692
fix: detect completion tags in ralph/ULW loop to stop iteration ( #1233 )
2026-02-08 14:50:36 +09:00
YeonGyu-Kim
f4cb1c21c9
fix(lsp): reset safety block on server restart to prevent permanent blocks ( #1366 )
2026-02-08 14:34:11 +09:00
YeonGyu-Kim
22cc0b0dca
fix(mcp): remove duplicate x-api-key header from Exa config ( #1627 )
2026-02-08 14:19:50 +09:00
YeonGyu-Kim
0187c95e13
Merge pull request #1647 from code-yeongyu/fix/subagent-type-respect-model-config-1357
...
fix(delegate-task): resolve user agent model config in subagent_type path (#1357 )
2026-02-08 14:12:21 +09:00
YeonGyu-Kim
3b58ecf09b
Merge pull request #1646 from code-yeongyu/fix/background-task-race-condition-1582
...
fix(background-agent): serialize parent notifications (#1582 )
2026-02-08 14:12:14 +09:00
YeonGyu-Kim
a80a25f2e3
Merge pull request #1656 from code-yeongyu/fix/deny-todo-tools-for-task-system
...
fix: deny todowrite/todoread per-agent when task_system is enabled
2026-02-08 14:09:29 +09:00
YeonGyu-Kim
abdb1d7b37
Merge pull request #1648 from code-yeongyu/fix/category-delegation-respect-agent-model-1295
...
test: add regression tests for sisyphus-junior model override in category delegation (#1295 )
2026-02-08 14:07:15 +09:00
YeonGyu-Kim
bf889b1af3
Merge pull request #1645 from code-yeongyu/fix/load-skills-default-1493
...
fix: add default value for load_skills parameter in task tool (#1493 )
2026-02-08 14:07:08 +09:00
YeonGyu-Kim
038c3f545f
fix: deny todowrite/todoread per-agent when task_system is enabled
...
When experimental.task_system is enabled, add todowrite: deny and
todoread: deny to per-agent permissions for all primary agents
(sisyphus, hephaestus, atlas, prometheus, sisyphus-junior).
This ensures the model never sees these tools in its tool list,
complementing the existing global tools config and runtime hook.
2026-02-08 14:05:53 +09:00
YeonGyu-Kim
cd0f70f12f
refactor: extract git worktree parser from atlas hook
2026-02-08 14:01:31 +09:00
YeonGyu-Kim
c24fd00edc
Merge pull request #1655 from code-yeongyu/fix/sync-continuation-variant-loss
...
fix: preserve variant in sync continuation to maintain thinking budget
2026-02-08 14:00:56 +09:00
YeonGyu-Kim
df03300211
refactor: wave 1 - extract leaf modules, rename catch-all files, split index.ts hooks
...
- Split 25+ index.ts files into hook.ts + extracted modules
- Rename all catch-all utils.ts/helpers.ts to domain-specific names
- Split src/tools/lsp/ into ~15 focused modules
- Split src/tools/delegate-task/ into ~18 focused modules
- Separate shared types from implementation
- 155 files changed, 60+ new files created
- All typecheck clean, 61 tests pass
2026-02-08 13:57:26 +09:00
YeonGyu-Kim
57589c1992
test: assert variant forwarded in sync continuation
2026-02-08 13:57:13 +09:00
YeonGyu-Kim
c446b52a0f
fix: preserve variant in sync continuation to maintain thinking budget
2026-02-08 13:55:35 +09:00
YeonGyu-Kim
24cca1ad8e
Merge pull request #1653 from code-yeongyu/fix/plan-prometheus-decoupling
...
fix(delegation): decouple plan from prometheus and fix sync task responses
2026-02-08 13:46:40 +09:00
YeonGyu-Kim
bc2fa69b58
fix(delegation): use blocking prompt for sync tasks instead of polling
...
Replace promptAsync + manual polling loop with promptSyncWithModelSuggestionRetry
(session.prompt) which blocks until the LLM response completes. This matches
OpenCode's native task tool behavior and fixes empty/broken responses that
occurred when polling declared stability prematurely.
Applied to both executeSyncTask and executeSyncContinuation paths.
2026-02-08 13:42:23 +09:00
YeonGyu-Kim
002567c121
fix(delegation): decouple plan agent from prometheus - remove aliasing
...
Remove 'prometheus' from PLAN_AGENT_NAMES so isPlanAgent() no longer
matches prometheus. The only remaining connection is model inheritance
via buildPlanDemoteConfig() in plan-model-inheritance.ts.
- Remove 'prometheus' from PLAN_AGENT_NAMES array
- Update self-delegation error message to say 'plan agent' not 'prometheus'
- Update tests: prometheus is no longer treated as a plan agent
- Update task permission: only plan agents get task tool, not prometheus
2026-02-08 13:42:15 +09:00
YeonGyu-Kim
ef49e1700c
fix(agents): include custom agents in orchestrator delegation prompt ( #1623 )
2026-02-08 13:34:47 +09:00
YeonGyu-Kim
441cbf5901
refactor: extract git worktree parser from atlas hook
2026-02-08 13:30:00 +09:00
YeonGyu-Kim
5ff08eda3e
fix: encode EXA_API_KEY before appending to URL query parameter
2026-02-08 13:28:08 +09:00
YeonGyu-Kim
ed7bec5b81
fix(config): plan agent inherits model settings from prometheus when not explicitly configured
...
Previously, demoted plan agent only received { mode: 'subagent' } with no
model settings, causing fallback to step-3.5-flash. Now inherits all
model-related settings (model, variant, temperature, top_p, maxTokens,
thinking, reasoningEffort, textVerbosity, providerOptions) from the
resolved prometheus config. User overrides via agents.plan.* take priority.
Prompt, permission, description, and color are intentionally NOT inherited.
2026-02-08 13:22:56 +09:00
YeonGyu-Kim
d72ed98ab3
Merge pull request #1649 from code-yeongyu/feat/anthropic-prefill-recovery
...
feat: auto-recover from Anthropic assistant message prefill errors
2026-02-08 13:19:38 +09:00
YeonGyu-Kim
e20da1fa25
feat: auto-recover from Anthropic assistant message prefill errors
...
When Anthropic models reject requests with 'This model does not support
assistant message prefill', detect this as a recoverable error type and
automatically send 'Continue' once to resume the conversation.
Extends session-recovery hook with new 'assistant_prefill_unsupported'
error type. The existing session.error handler in index.ts already sends
'continue' after successful recovery, so no additional logic needed.
2026-02-08 13:16:16 +09:00
YeonGyu-Kim
3757f6b9b9
fix(delegate-task): resolve user agent model config in subagent_type path ( #1357 )
2026-02-08 13:14:11 +09:00
YeonGyu-Kim
ed94eeb6dd
test: add regression tests for sisyphus-junior model override in category delegation ( #1295 )
...
Add targeted regression tests for the exact reproduction scenario from issue #1295 :
- quick category with sisyphusJuniorModel override (the reported scenario)
- user-defined custom category with sisyphusJuniorModel fallback
The underlying fix was already applied in PRs #1470 and #1556 . These tests
ensure the fix does not regress.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-08 13:13:47 +09:00
YeonGyu-Kim
7271185361
fix: add default value for load_skills parameter in task tool ( #1493 )
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai >
2026-02-08 13:09:58 +09:00
YeonGyu-Kim
d81b3cf2b8
fix(background-agent): serialize parent notifications ( #1582 )
2026-02-08 13:05:06 +09:00
YeonGyu-Kim
ab73b1e765
fix(mcp): append EXA_API_KEY to Exa MCP URL when env var is set ( #1627 )
2026-02-08 12:38:42 +09:00
github-actions[bot]
1bd21cb052
release: v3.3.2
2026-02-08 03:38:39 +00:00
YeonGyu-Kim
7a15c1f3f9
Merge pull request #1622 from itsnebulalol/dev
2026-02-08 11:44:40 +09:00
github-actions[bot]
fd2b4709ef
@QiRaining has signed the CLA in code-yeongyu/oh-my-opencode#1641
2026-02-08 02:34:48 +00:00
github-actions[bot]
bd45ea0a5f
@quantmind-br has signed the CLA in code-yeongyu/oh-my-opencode#1634
2026-02-07 18:38:33 +00:00
github-actions[bot]
393cb0bd63
release: v3.3.1
2026-02-07 17:48:30 +00:00
YeonGyu-Kim
9378c19f87
release: v3.3.1
2026-02-08 02:45:38 +09:00
YeonGyu-Kim
df52d0e9c7
Merge pull request #1632 from code-yeongyu/fix/look-at-sync-prompt
...
fix(look-at): use synchronous prompt to fix race condition (#1620 regression)
2026-02-08 02:45:06 +09:00
YeonGyu-Kim
822686292f
test: fix ralph-loop tests by adding promptAsync to mock
...
The ralph-loop hook calls promptAsync in the implementation, but the
test mock only defined prompt(). Added promptAsync with identical
behavior to make tests pass.
- All 38 ralph-loop tests now pass
- Total test suite: 2361 pass, 3 fail (unrelated to this change)
2026-02-08 02:41:29 +09:00
YeonGyu-Kim
93f40c2d2f
fix(look-at): use synchronous prompt to fix race condition ( #1620 regression)
...
PR #1620 migrated all prompt calls from session.prompt (blocking) to
session.promptAsync (fire-and-forget HTTP 204). This broke look_at which
needs the multimodal-looker response to be available immediately after
the prompt call returns.
Fix: add promptSyncWithModelSuggestionRetry() that uses session.prompt
(blocking) with model suggestion retry support. look_at now uses this
sync variant while all other callers keep using promptAsync.
- Add promptSyncWithModelSuggestionRetry to model-suggestion-retry.ts
- Switch look_at from promptWithModelSuggestionRetry to sync variant
- Add comprehensive tests for the new sync function
- No changes to other callers (delegate-task, background-agent)
2026-02-08 02:36:27 +09:00
github-actions[bot]
3fc02351fc
@mkusaka has signed the CLA in code-yeongyu/oh-my-opencode#1629
2026-02-07 16:54:49 +00:00