Commit Graph

3231 Commits

Author SHA1 Message Date
YeonGyu-Kim b5d92c76a5 fix(background-agent): queue notifications for idle parent sessions
When a background task completes and the parent session is waiting for
user input, promptAsync() fails with an aborted error. Previously the
notification was silently dropped — lost forever.

Fix: queue the notification text in-memory on the BackgroundManager
when promptAsync fails with an aborted/idle error. On the user's next
message to that session, the queued notifications are injected into the
chat context before the agent sees the message.

- BackgroundManager: add pendingNotifications map + queuePendingNotification()
  and injectPendingNotificationsIntoChatMessage() methods
- background-notification hook: add chat.message handler that calls injection
- chat-message.ts: wire backgroundNotificationHook.chat.message into the
  message processing chain
- Add tests covering queue-on-abort and next-message delivery
2026-02-25 16:26:31 +09:00
YeonGyu-Kim 130239f313 Merge pull request #2110 from code-yeongyu/fix/boulder-continuation-agent-check
fix(atlas): boulder continuation deadlock after /start-work + 30s→5s cooldown
2026-02-25 16:22:58 +09:00
YeonGyu-Kim e9b5518dfa test(atlas): update agent check tests to match fixed behavior
- Rename test to 'should inject when last agent is sisyphus and boulder targets atlas
  explicitly' and flip expectation to toHaveBeenCalled() - the old assertion was
  testing the buggy deadlock behavior
- Add 'should not inject when last agent is non-sisyphus and does not match boulder
  agent' to verify hephaestus (unrelated agents) are still correctly skipped
2026-02-25 16:18:59 +09:00
YeonGyu-Kim 624d345bb9 Merge pull request #2108 from code-yeongyu/fix/issue-2100-reset-strategy-race-condition
fix(ralph-loop): fix race condition in --strategy=reset
2026-02-25 16:16:53 +09:00
YeonGyu-Kim da1378acb3 Merge pull request #2107 from code-yeongyu/fix/issue-2054-hephaestus-model-opt-out
fix(no-hephaestus-non-gpt): add opt-out for model enforcement
2026-02-25 16:16:50 +09:00
YeonGyu-Kim 7727bc0d0f Merge pull request #2106 from code-yeongyu/fix/issue-2049-ultrawork-thinking-config
fix(ultrawork-model-override): fix thinking config when upgrading variant
2026-02-25 16:16:48 +09:00
YeonGyu-Kim 69ffa35a0a fix(agents/utils.test): correct hephaestus github-copilot provider test expectation
The test 'hephaestus is created when github-copilot provider is connected'
had incorrect expectation. github-copilot does not provide gpt-5.3-codex,
so hephaestus should NOT be created when only github-copilot is connected.

This test was causing CI flakiness due to incorrect assertion and
missing readConnectedProvidersCache mock (state pollution between tests).

Also adds cacheSpy mock for proper isolation.
2026-02-25 14:17:36 +09:00
YeonGyu-Kim 44f56a3551 fix(agents/utils.test): correct hephaestus github-copilot provider test expectation
The test 'hephaestus is created when github-copilot provider is connected'
had incorrect expectation. github-copilot does not provide gpt-5.3-codex,
so hephaestus should NOT be created when only github-copilot is connected.

This test was causing CI flakiness due to incorrect assertion and
missing readConnectedProvidersCache mock (state pollution between tests).

Also adds cacheSpy mock for proper isolation.
2026-02-25 14:17:34 +09:00
YeonGyu-Kim 82b19994de fix(agents/utils.test): correct hephaestus github-copilot provider test expectation
The test 'hephaestus is created when github-copilot provider is connected'
had incorrect expectation. github-copilot does not provide gpt-5.3-codex,
so hephaestus should NOT be created when only github-copilot is connected.

This test was causing CI flakiness due to incorrect assertion and
missing readConnectedProvidersCache mock (state pollution between tests).

Also adds cacheSpy mock for proper isolation.
2026-02-25 14:17:33 +09:00
YeonGyu-Kim e1742e7ac9 Revert "fix(model-requirements): add github-copilot to hephaestus requiresProvider"
This reverts commit 2acf6fa124.
2026-02-25 14:16:26 +09:00
YeonGyu-Kim 50cc20ef61 Revert "fix(model-requirements): add github-copilot to hephaestus requiresProvider"
This reverts commit 7e5872935a.
2026-02-25 14:16:26 +09:00
YeonGyu-Kim 7649b89e52 Revert "fix(model-requirements): add github-copilot to hephaestus requiresProvider"
This reverts commit 6458fe9fce.
2026-02-25 14:16:25 +09:00
YeonGyu-Kim e6a3bbfc35 fix(atlas): allow Sisyphus as last agent when boulder targets atlas explicitly
The boulder continuation in event-handler.ts skipped injection whenever
the last agent was 'sisyphus' and the boulder state had agent='atlas'
set explicitly. The allowSisyphusWhenDefaultAtlas guard required
boulderAgentWasNotExplicitlySet=true, but start-work-hook.ts always
calls createBoulderState(..., 'atlas') which sets the agent explicitly.

This created a chicken-and-egg deadlock: boulder continuation needs
atlas to be the last agent, but the continuation itself is what switches
to atlas. With /start-work, the first iteration was always blocked.

Fix: drop the boulderAgentWasNotExplicitlySet constraint so Sisyphus is
always allowed when the boulder targets atlas (whether explicit or default).

Also reduce todo-continuation-enforcer CONTINUATION_COOLDOWN_MS from
30s to 5s to match atlas hook cooldown and recover interruptions faster.
2026-02-25 14:16:17 +09:00
YeonGyu-Kim 169cca6a10 fix(model-requirements): add github-copilot to hephaestus requiresProvider
Hephaestus requires GPT models, which can be provided by github-copilot.
The requiresProvider list was missing github-copilot, causing hephaestus
to not be created when github-copilot was the only GPT provider connected.

This also fixes a flaky CI test that documented this expected behavior.
2026-02-25 14:12:52 +09:00
YeonGyu-Kim a5e6375fda fix(model-requirements): add github-copilot to hephaestus requiresProvider
Hephaestus requires GPT models, which can be provided by github-copilot.
The requiresProvider list was missing github-copilot, causing hephaestus
to not be created when github-copilot was the only GPT provider connected.

This also fixes a flaky CI test that documented this expected behavior.
2026-02-25 14:12:45 +09:00
YeonGyu-Kim 6f5458c8ee fix(model-requirements): add github-copilot to hephaestus requiresProvider
Hephaestus requires GPT models, which can be provided by github-copilot.
The requiresProvider list was missing github-copilot, causing hephaestus
to not be created when github-copilot was the only GPT provider connected.

This also fixes a flaky CI test that documented this expected behavior.
2026-02-25 14:12:43 +09:00
YeonGyu-Kim e272e828e9 Merge pull request #2109 from code-yeongyu/fix/issue-1815-1733-prompt-token-count
fix(delegate-task): prevent prompt context overflow with token counting
2026-02-25 14:09:17 +09:00
YeonGyu-Kim 15848105c7 fix(delegate-task): add token counting and truncation to prevent context overflow
Fixes #1815, #1733
2026-02-25 14:03:47 +09:00
YeonGyu-Kim 5cc11789cd fix(ralph-loop): prevent race condition in reset strategy between session ID update and TUI switch
Fixes #2100
2026-02-25 14:01:27 +09:00
YeonGyu-Kim cddbd502b4 fix(no-hephaestus-non-gpt): add allow_non_gpt_model config opt-out
Fixes #2054
2026-02-25 14:01:26 +09:00
YeonGyu-Kim 5c1bdaf5fa fix(ultrawork-model-override): set thinking config object instead of variant string
Fixes #2049
2026-02-25 14:01:03 +09:00
edxeth e06121d294 test(agents): stabilize provider gating and skill filter tests 2026-02-24 19:04:45 +01:00
edxeth 72875a1ebf chore(schema): regenerate schema after rebase conflict resolution 2026-02-24 18:49:34 +01:00
edxeth 593b722122 fix(custom-agents): preserve summary flags during description merge 2026-02-24 18:46:49 +01:00
edxeth 36f42e00f2 chore(schema): regenerate config schema after rebase 2026-02-24 18:46:49 +01:00
edxeth 560eb43e16 feat(config): add custom_agents overrides and strict agent validation 2026-02-24 18:46:49 +01:00
github-actions[bot] 91ce705b7d @Pantoria has signed the CLA in code-yeongyu/oh-my-opencode#1983 2026-02-24 17:12:43 +00:00
YeonGyu-Kim f6ab55356f Merge pull request #2099 from code-yeongyu/fix/gpt-5-3-codex-github-copilot-provider
fix: remove github-copilot from gpt-5.3-codex provider list
2026-02-25 00:33:27 +09:00
YeonGyu-Kim d3a567ee91 fix: remove github-copilot from gpt-5.3-codex provider list
gpt-5.3-codex is not available on GitHub Copilot. The fallback chains
incorrectly listed github-copilot as a valid provider for this model,
causing the doctor to report 'configured model github-copilot/gpt-5.3-codex
is not valid' for Hephaestus agent.

Affected agents: hephaestus (requiresProvider + fallbackChain)
Affected categories: ultrabrain, deep, unspecified-low

Copilot users can still use Hephaestus via openai or opencode providers.

Fixes #2047
2026-02-25 00:29:00 +09:00
YeonGyu-Kim f69ae16036 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
YeonGyu-Kim 9157c1f0e8 refactor(hashline-edit): replace custom diff with diff library
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-24 22:30:06 +09:00
github-actions[bot] 742903c66b @PHP-Expert has signed the CLA in code-yeongyu/oh-my-opencode#2098 2026-02-24 13:27:28 +00:00
sisyphus-dev-ai c665a6a4d8 chore: changes by sisyphus-dev-ai 2026-02-24 13:21:54 +00:00
YeonGyu-Kim fe1708e0ad test(run): make completion metadata timing assertion deterministic
Avoid Date.now call-order flakiness by pinning the mocked current time and setting the message start time explicitly in the test setup.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-24 21:43:52 +09:00
YeonGyu-Kim f2107b2e66 fix(hooks): stabilize session notification checks in parallel tests
Use sender-module indirection and an optional main-session filter guard to keep notification assertions deterministic across concurrent test execution.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-24 21:43:47 +09:00
CloudWaddie 477cfcc703 fix: address code review feedback on PR #1988
- Fix operator precedence bug in hasActiveWork boolean expression
- Reuse getMainSessionStatus result from watchdog to avoid duplicate API calls
- Add flag to only check secondary timeout once to avoid unnecessary API traffic
2026-02-24 21:32:07 +09:00
CloudWaddie 8976c8a514 fix(run): add event watchdog and secondary timeout for hasReceivedMeaningfulWork
Implements fixes from issue #1880 and #1934 to prevent exit code 130 timeout in CI environments:

- Add lastEventTimestamp to EventState for tracking when events were last received
- Add event watchdog: if no events for 30s, verify session status via direct API call
- Add secondary timeout: after 60s without meaningful work events, check for active children/todos and assume work is in progress

This prevents the poll loop from waiting for full 600s timeout when:
1. Event stream drops silently (common in CI with network instability)
2. Main session delegates to children without producing meaningful work on main session
2026-02-24 21:32:07 +09:00
github-actions[bot] 0f993965e7 release: v3.8.5 2026-02-24 09:45:36 +00:00
YeonGyu-Kim 1cbb4ef1e8 Merge pull request #2088 from minpeter/feat/hashline-edit-error-hints
fix(hashline-edit): improve error messages for invalid LINE#ID references
2026-02-24 18:36:04 +09:00
YeonGyu-Kim 4e8d55fc77 fix(hashline-edit): tolerate >>> prefix and spaces around # in line refs 2026-02-24 18:21:05 +09:00
YeonGyu-Kim 72b4b36bb5 fix(hashline-edit): use instanceof for hash mismatch error detection 2026-02-24 18:21:05 +09:00
YeonGyu-Kim 74b5547b97 fix(hashline-read-enhancer): skip hashifying OpenCode-truncated lines 2026-02-24 18:21:05 +09:00
YeonGyu-Kim d1ed3297f3 fix(hashline-edit): add same-line operation precedence ordering 2026-02-24 18:21:05 +09:00
YeonGyu-Kim 1278b1e59d fix(hashline-read-enhancer): guard against overwriting error output with success message 2026-02-24 17:52:04 +09:00
YeonGyu-Kim 71259916d6 fix(hashline-edit): address Oracle review feedback
- Extract WRITE_SUCCESS_MARKER constant to couple guard and output string
- Remove double blank line after parseLineRefWithHint
- Add comment clarifying normalized equals ref.trim() in error paths
2026-02-24 17:41:30 +09:00
YeonGyu-Kim 5f4e928bc0 fix(hashline-edit): widen non-numeric prefix detection and remove duplicate try-catch
- Replace regex /^([A-Za-z_]+)#.../ with indexOf-based prefix check to catch
  line-ref#VK and line.ref#VK style inputs that were previously giving generic errors
- Extract parseLineRefWithHint helper to eliminate duplicated try-catch in
  validateLineRef and validateLineRefs
- Restore idempotency guard in appendWriteHashlineOutput using new output format
- Add tests for LINE42 extraction, line-ref hint, line.ref hint, and guard behavior

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-24 17:32:44 +09:00
MoerAI 478269f6cc 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 247fa05432 fix(test): update EventState inline literal to use createEventState() spread
EventState interface gained new required fields; the inline literal in the
session.status test was missing them, causing type errors and runtime failures.
2026-02-24 16:31:44 +09:00
MoerAI 1d20cac582 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
minpeter 7e1927569c fix(hashline-read-enhancer): simplify write tool output to line count summary
Replace full hashlined file content in write tool response with a simple
'File written successfully. N lines written.' summary to reduce context
bloat.
2026-02-24 16:00:23 +09:00