Commit Graph

70 Commits

Author SHA1 Message Date
YeonGyu-Kim ce55256eaf docs: update all 31 AGENTS.md files with current project state 2026-02-21 04:38:18 +09:00
YeonGyu-Kim 050b2fb006 test: update model-fallback and chat-headers test expectations
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-21 03:33:42 +09:00
YeonGyu-Kim 4924f62f80 fix(event): remove duplicate dispatchToHooks from merge artifact
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-21 03:33:15 +09:00
YeonGyu-Kim 8a8d21e7bb fix(model-requirements): remove custom quotio provider, restore standard providers 2026-02-21 03:03:57 +09:00
YeonGyu-Kim 82e4bf07d2 Merge branch 'pr-1959' into dev
# Conflicts:
#	src/hooks/index.ts
#	src/plugin/event.ts
#	src/tools/delegate-task/sync-task.ts
2026-02-21 02:49:39 +09:00
YeonGyu-Kim f08c12c209 fix: resolve post-rebase runtime fallback merge leftovers 2026-02-21 02:45:48 +09:00
YeonGyu-Kim b17743e50c fix(ultrawork-db): wrap microtask/setTimeout callbacks in try/catch/finally
Unhandled SQLite exceptions (SQLITE_BUSY, database locked, etc.) in queueMicrotask/setTimeout callbacks could crash the entire process. Added try/catch/finally to ensure db.close() is always called and errors are logged instead of crashing.
2026-02-21 02:42:16 +09:00
YeonGyu-Kim 3b8fba99a6 fix(chat-headers): cache internal marker lookups to prevent N+1 API calls
- BUG-4: Add in-memory cache for hasInternalMarker() results with 1000-entry limit
- Eliminates redundant session.message API calls for copilot marker detection
2026-02-21 02:41:46 +09:00
um1ng f5f54ae1ed feat(runtime-fallback): automatic model switching on API errors
Implements runtime model fallback that automatically switches to backup models
when the primary model encounters transient errors (rate limits, overload, etc.).

Features:
- runtime_fallback configuration with customizable error codes, cooldown, notifications
- Runtime fallback hook intercepts API errors (429, 503, 529)
- Support for fallback_models from agent/category configuration
- Session-state TTL and periodic cleanup to prevent memory leaks
- Robust agent name detection with explicit AGENT_NAMES array
- Session category registry for category-specific fallback lookup

Schema changes:
- Add RuntimeFallbackConfigSchema with enabled, retry_on_errors, max_fallback_attempts,
  cooldown_seconds, notify_on_fallback options
- Add fallback_models to AgentOverrideConfigSchema and CategoryConfigSchema
- Add runtime-fallback to HookNameSchema

Files added:
- src/hooks/runtime-fallback/index.ts - Main hook implementation
- src/hooks/runtime-fallback/types.ts - Type definitions
- src/hooks/runtime-fallback/constants.ts - Constants and defaults
- src/hooks/runtime-fallback/index.test.ts - Comprehensive tests
- src/config/schema/runtime-fallback.ts - Schema definition
- src/shared/session-category-registry.ts - Session category tracking

Files modified:
- src/hooks/index.ts - Export runtime-fallback hook
- src/plugin/hooks/create-session-hooks.ts - Register runtime-fallback hook
- src/config/schema.ts - Export runtime-fallback schema
- src/config/schema/oh-my-opencode-config.ts - Add runtime_fallback config
- src/config/schema/agent-overrides.ts - Add fallback_models to agent config
- src/config/schema/categories.ts - Add fallback_models to category config
- src/config/schema/hooks.ts - Add runtime-fallback to hook names
- src/shared/index.ts - Export session-category-registry
- docs/configurations.md - Add Runtime Fallback documentation
- docs/features.md - Add runtime-fallback to hooks list

Supersedes #1237, #1408
Closes #1408
2026-02-21 02:36:56 +09:00
Rebase Bot a49f80dd0b feat(config): add runtime_fallback and fallback_models schema
Add configuration schemas for runtime model fallback feature:
- RuntimeFallbackConfigSchema with enabled, retry_on_errors,
  max_fallback_attempts, cooldown_seconds, notify_on_fallback
- FallbackModelsSchema for init-time fallback model selection
- Add fallback_models to AgentOverrideConfigSchema and CategoryConfigSchema
- Export types and schemas from config/index.ts

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-21 02:28:27 +09:00
YeonGyu-Kim 4b09428d7b Merge pull request #1981 from VespianRex/fix/fallback-sync-model-ui
Fix model fallback retries for main, background, and sync subagents + show runtime fallback model in task UI
2026-02-21 02:28:18 +09:00
YeonGyu-Kim 598e451ca7 Merge pull request #1952 from gustavosmendes/codex/fix-write-existing-file-guard-1871
fix: make write-existing-file-guard read-gated with overwrite bypass
2026-02-21 02:17:11 +09:00
VespianRex 8ccb1eaef0 Address review feedback for fallback fixes 2026-02-20 17:46:12 +02:00
VespianRex ff78a7f46a Fix model fallback across main/background/sync agents 2026-02-20 17:45:53 +02:00
YeonGyu-Kim ce7a5427c0 fix(variant): respect TUI variant and enforce max in ultrawork mode
- keyword-detector: always set variant to 'max' when ultrawork/ulw keyword detected
- chat-message: remove variant resolution logic to passthrough TUI variant unchanged
- Tests updated to reflect new behavior

🤖 Generated with OhMyOpenCode assistance
2026-02-20 17:47:21 +09:00
YeonGyu-Kim bce12d2fdc Merge pull request #1953 from maximharizanov/fix/copilot-initiator-attribution
fix(copilot): mark internal hook injections as agent-initiated
2026-02-20 11:54:01 +09:00
YeonGyu-Kim f30c656ebf fix(config): promote hashline_edit to top-level flag
Move hashline_edit out of experimental so it is a stable top-level config with default-on runtime behavior and explicit disable support. Add migration and tests to preserve existing experimental.hashline_edit users without breaking configs.
2026-02-20 11:12:33 +09:00
YeonGyu-Kim e849cfe819 feat(hooks): add no-hephaestus-non-gpt hook to enforce GPT-only for Hephaestus 2026-02-20 10:49:04 +09:00
Maxim Harizanov 2e5fd99918 fix(types): restore CI compatibility for plugin hooks and tool context 2026-02-19 13:40:38 +02:00
Maxim Harizanov 8b4a1972ea fix(copilot): keep notifications visible and detect marker via message lookup 2026-02-19 13:17:02 +02:00
Maxim Harizanov dcfe72e989 fix(copilot): mark internal background notifications as agent-initiated 2026-02-19 13:17:02 +02:00
YeonGyu-Kim ce44445946 update docs 2026-02-19 18:41:37 +09:00
YeonGyu-Kim c5a7a6d410 fix(ultrawork): use session agent fallback and skip same-model override 2026-02-19 18:40:42 +09:00
YeonGyu-Kim 347ce0005f fix(ultrawork): respect variant-only schema overrides
Allow ultrawork overrides configured with only variant to apply at message time so thinking level is honored even without model replacement.
2026-02-19 18:40:42 +09:00
YeonGyu-Kim 0af912a87d feat(ultrawork): implement per-message model override with deferred DB retry strategy
- Add per-message ultrawork mode detection via keyword matching
- Implement deferred DB override strategy using microtask retry loop
- Fall back to setTimeout after 10 microtask retries for robustness
- Update agent configuration schema with ultrawork model/variant fields
- Integrate with chat.message hook to apply overrides on detection
- Add comprehensive tests for all override scenarios
- Generated schema includes ultrawork configuration

🤖 Generated with assistance of OhMyOpenCode (https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 18:40:42 +09:00
YeonGyu-Kim 9a46843f4d feat(hooks): add hashline-edit-diff-enhancer for TUI inline diff display
Capture file content before hashline edit execution and compute filediff
metadata after, enabling opencode TUI to render inline diffs for the
plugin's edit tool (which replaces the built-in EditTool).
2026-02-19 18:40:42 +09:00
YeonGyu-Kim 8dcde36031 Merge pull request #1698 from Luodian/fix/merge-skill-into-slashcommand
refactor: merge slashcommand behavior into skill tool to reduce prompt size
2026-02-19 15:51:59 +09:00
YeonGyu-Kim d5f85eb9c4 feat(hashline): enable hashline-edit by default
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 10:46:40 +09:00
YeonGyu-Kim 2df6655d1e 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
gustavosmendes d9d4aed38a fix(write-existing-file-guard): wire cleanup through event dispatcher
Forward session.deleted events to write-existing-file-guard so per-session read permissions are actually cleared in runtime.

Add plugin-level regression test to ensure event forwarding remains wired, alongside the expanded guard behavior and unit coverage.
2026-02-18 16:50:30 -03:00
YeonGyu-Kim 12db8271ad refactor: remove dead ultrawork model override code
Remove ultrawork-model-override hook and per-agent ultrawork model swap
config that relied on zen opencode.ai free tier (no longer functional).

Removed:
- src/hooks/ultrawork-model-override/ (hook, test, index)
- ultrawork field from AgentOverrideConfigSchema
- ultrawork-model-override from HookNameSchema
- UltraworkConfig type from model-fallback-types
- Non-max20 sonnet+ultrawork-opus codepath from model-fallback
- Claude subscription model table from installation docs
- All references in plugin-interface, create-session-hooks, schema.json
- Related test cases and updated snapshots
2026-02-19 03:17:40 +09:00
Bo Li 4a6335c232 refactor: merge slashcommand tool into skill tool
Per reviewer feedback (code-yeongyu), keep the 'skill' tool as the main
tool and merge slashcommand functionality INTO it, rather than the reverse.

Changes:
- skill/tools.ts: Add command discovery (discoverCommandsSync) support;
  handle both SKILL.md skills and .omo/commands/ slash commands in a single
  tool; show combined listing in tool description
- skill/types.ts: Add 'commands' option to SkillLoadOptions
- skill/constants.ts: Update description to mention both skills and commands
- plugin/tool-registry.ts: Replace createSlashcommandTool with createSkillTool;
  register tool as 'skill' instead of 'slashcommand'
- tools/index.ts: Export createSkillTool instead of createSlashcommandTool
- plugin/tool-execute-before.ts: Update tool name checks from 'slashcommand'
  to 'skill'; update arg name from 'command' to 'name'
- agents/dynamic-agent-prompt-builder.ts: Categorize 'skill' tool as 'command'
- tools/skill-mcp/tools.ts: Update hint message to reference 'skill' tool
- hooks/auto-slash-command/executor.ts: Update error message

The slashcommand/ module files are kept (they provide shared utilities used
by the skill tool), but the slashcommand tool itself is no longer registered.
2026-02-19 00:18:47 +08:00
Bo Li 6025035f27 refactor: merge skill tool into slashcommand to reduce system prompt size 2026-02-19 00:17:22 +08:00
YeonGyu-Kim 5de09070eb Merge pull request #1938 from POBIM/fix/delegate-task-agent-overrides
fix(delegate-task): pass plugin agent overrides into task resolver
2026-02-18 18:03:13 +09:00
YeonGyu-Kim c7f9fed60b feat(hooks): add ultrawork-model-override hook for per-agent model swap 2026-02-18 17:47:08 +09:00
pobim 9b72397b35 fix(delegate-task): pass agent overrides to subagent resolver 2026-02-18 15:00:09 +07:00
YeonGyu-Kim 2fbee82494 refactor(hooks): rename sisyphus-gpt-hephaestus-reminder to no-sisyphus-gpt
Shorter hook name, disableable via disabled_hooks config, migration added
for backward compatibility. Also forces agent switch to Hephaestus on
Sisyphus + GPT detection. Docs updated with new hook name.
2026-02-18 16:33:16 +09:00
YeonGyu-Kim a70ae411b0 chore: regenerate AGENTS.md knowledge base
🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) assistance
2026-02-18 01:26:19 +09:00
YeonGyu-Kim 655b69b860 feat(hooks): add sisyphus-gpt-hephaestus-reminder hook
Shows error toast when Sisyphus runs with a GPT model, nudging user to
use Hephaestus instead.

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-18 01:08:40 +09:00
YeonGyu-Kim a8addb0e63 Merge pull request #1907 from BowTiedSwan/fix/json-retry-loop
feat(hooks): add json-error-recovery hook to prevent infinite retry loops
2026-02-17 15:59:44 +09:00
YeonGyu-Kim 21144ed1e3 fix: read anthropic 1m flag from live model cache state 2026-02-17 10:51:01 +09:00
YeonGyu-Kim ce5e6857ad fix: use model cache context flag for runtime context limits 2026-02-17 10:51:01 +09:00
bowtiedswan 081f31bfc8 feat(hooks): add json-error-recovery hook to prevent infinite retry loops 2026-02-16 21:35:58 +02:00
YeonGyu-Kim 3a4325a800 Merge pull request #1884 from code-yeongyu/feat/hashline-edit
feat: port hashline edit tool from oh-my-pi
2026-02-17 01:35:22 +09:00
YeonGyu-Kim 04ee341399 Merge pull request #1729 from potb/fix/1716-disabled-agents-call-omo
fix(call-omo-agent): enforce disabled_agents config
2026-02-17 01:34:38 +09:00
YeonGyu-Kim 8a80b88a08 refactor(hashline): override native edit tool instead of separate tool + disabler hook
Replace 3-component hashline system (separate hashline_edit tool + edit
disabler hook + OpenAI-exempted read enhancer) with 2-component system
that directly overrides the native edit tool key, matching the
delegate_task pattern.

- Register hashline tool as 'edit' key to override native edit
- Delete hashline-edit-disabler hook (no longer needed)
- Delete hashline-provider-state module (no remaining consumers)
- Remove OpenAI exemption from read enhancer (explicit opt-in means all providers)
- Remove setProvider wiring from chat-params
2026-02-17 00:03:10 +09:00
YeonGyu-Kim 9bd21c8a67 feat(hashline): port hashline edit tool from oh-my-pi
This PR ports the hashline edit tool from oh-my-pi to oh-my-opencode as an experimental feature.

## Features
- New experimental.hashline_edit config flag
- hashline_edit tool with 4 operations: set_line, replace_lines, insert_after, replace
- Hash-based line anchors for safe concurrent editing
- Edit tool disabler for non-OpenAI providers
- Read output enhancer with LINE:HASH prefixes
- Provider state tracking module

## Technical Details
- xxHash32-based 2-char hex hashes
- Bottom-up edit application to prevent index shifting
- OpenAI provider exemption (uses native apply_patch)
- 90 tests covering all operations and edge cases
- All files under 200 LOC limit

## Files Added/Modified
- src/tools/hashline-edit/ (7 files, ~400 LOC)
- src/hooks/hashline-edit-disabler/ (4 files, ~200 LOC)
- src/hooks/hashline-read-enhancer/ (3 files, ~400 LOC)
- src/features/hashline-provider-state.ts (13 LOC)
- src/config/schema/experimental.ts (hashline_edit flag)
- src/config/schema/hooks.ts (2 new hook names)
- src/plugin/tool-registry.ts (conditional registration)
- src/plugin/chat-params.ts (provider state tracking)
- src/tools/index.ts (export)
- src/hooks/index.ts (exports)
2026-02-17 00:03:10 +09:00
YeonGyu-Kim 0b10245c34 refactor: create normalizeSDKResponse helper and replace scattered patterns across 37 files 2026-02-16 18:20:19 +09:00
YeonGyu-Kim e720a6cc26 fix: make sessionExists() async with SDK verification on SQLite
sessionExists() previously returned unconditional true on SQLite,
preventing ralph-loop orphaned-session cleanup from triggering.
Now uses sdkClient.session.messages() to verify session actually
exists. Callers updated to await the async result.

Addresses Cubic review feedback on PR #1837.
2026-02-16 16:13:40 +09:00
YeonGyu-Kim 0c1624a3d2 fix: preserve user-selected variant on first message instead of overriding with fallback chain default
First message variant gate was unconditionally overwriting message.variant
with the fallback chain value (e.g. 'medium' for Hephaestus), ignoring
any variant the user had already selected via OpenCode UI.

Now checks message.variant === undefined before applying the resolved
variant, matching the behavior already used for subsequent messages.

Closes #1861
2026-02-16 13:44:54 +09:00