2102 Commits

Author SHA1 Message Date
YeonGyu-Kim
7c71a2dbbf 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
35d071b1be test(hashline-read-enhancer): add hash consistency and content isolation tests
Add comprehensive test coverage for:
- Hash consistency validation between Read tool output and Edit tool validateLineRef
- Injected content isolation to prevent hashifying non-file-content lines
- Footer messages and system reminders that should pass through unchanged

Tests ensure Read hook properly handles content boundaries and maintains
hash validity for Edit tool operations.

🤖 Generated with assistance of oh-my-opencode
2026-02-19 18:40:42 +09:00
YeonGyu-Kim
64b2d69036 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
50de1a18f2 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
02bb5d43cc refactor(models): expand provider listings for robust fuzzy matching
Add alternative providers to free-tier and cross-provider models:
- k2p5: add friendli as alternative to kimi-for-coding
- kimi-k2.5-free, minimax-m2.5-free, big-pickle, gpt-5-nano: add opencode-zen-abuse
- grok-code-fast-1: add venice as alternative to github-copilot
- glm-5: add opencode as alternative to zai-coding-plan
2026-02-19 18:40:42 +09:00
YeonGyu-Kim
8c19a7b7f8 refactor(atlas): remove gemini-3-pro from fallback chain 2026-02-19 18:40:42 +09:00
YeonGyu-Kim
da561118ce refactor(multimodal-looker): reorder fallback to k2p5 → kimi-free → gemini-flash → gpt-5.2 → glm-4.6v 2026-02-19 18:40:42 +09:00
YeonGyu-Kim
29d85bb63d refactor(explore): add minimax-m2.5-free as #2 fallback after grok-code-fast-1 2026-02-19 18:40:42 +09:00
YeonGyu-Kim
b7c6391bd5 refactor(librarian): switch fallback to minimax-m2.5-free → gemini-3-flash → big-pickle 2026-02-19 18:40:42 +09:00
YeonGyu-Kim
c8eb0dbae3 refactor(models): upgrade zai-coding-plan default from glm-4.7 to glm-5 2026-02-19 18:40:42 +09:00
YeonGyu-Kim
86a1bfa493 feat(prometheus): add GPT-5.2 optimized prompt with model-based routing
- Create gpt.ts with XML-tagged, principle-driven prompt (Codex plan mode style)
- Add getPrometheusPrompt() routing: GPT models → GPT prompt, others → default
- Promote gpt-5.2 (high) to #2 in prometheus fallback chain
- Follow Atlas GPT variant pattern (isGptModel detection)
2026-02-19 18:40:42 +09:00
YeonGyu-Kim
697a2f5a4c
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
7027b55c56 fix: remove automatic antigravity plugin installation
Remove the automatic installation of opencode-antigravity-auth plugin
when users have Gemini configured. This change addresses several issues:

1. Antigravity plugin is causing Google account bans for users
2. Users are unaware the plugin was auto-installed
3. Google has built-in OAuth for Gemini that doesn't require third-party plugins

Users who need the antigravity plugin can manually add it to their
plugin configuration if desired.

Fixes issues with unexpected plugin installation and account safety.
2026-02-19 15:30:56 +09:00
YeonGyu-Kim
a551fceca9 test(todo-continuation-enforcer): cover isContinuationStopped race during countdown
Adds a regression test for the race where /stop-continuation fires after
handleSessionIdle passes the flag check but before injectContinuation runs.
Verifies no injection occurs when the flag becomes true mid-countdown.
2026-02-19 14:08:03 +09:00
YeonGyu-Kim
9fa9dace2c fix(todo-continuation-enforcer): check isContinuationStopped in injectContinuation to close race window
When /stop-continuation is invoked during the 2s countdown, the stop flag
was never checked inside injectContinuation, so the injection would still
fire after the countdown elapsed.

Propagate isContinuationStopped from handleSessionIdle through startCountdown
into injectContinuation, where it is now re-checked before any API call.
2026-02-19 14:07:52 +09:00
codeg-dev
e5ede6dc8c fix(agents): replace background_cancel(all=true) with individual task cancellation
Atlas and Sisyphus prompts instructed agents to use background_cancel(all=true)
before final answers. This destroys uncollected background task results and
contradicts existing NEVER directives in the Sisyphus prompt, causing agents
to lose explore/librarian outputs mid-session.

Replace with individual task cancellation pattern that preserves completed
task results while still cleaning up running disposable tasks.
2026-02-19 11:27:11 +09:00
YeonGyu-Kim
31dc6e206d 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
f9c78de171 fix(run): set default stabilization to 1s and coerce non-positive values
- Change MIN_STABILIZATION_MS from 0 to 1_000 to prevent premature exits
- Coerce non-positive minStabilizationMs to default instead of treating as disabled
- Fix stabilization logic: track firstWorkTimestamp inside the meaningful-work branch
- Add tests for default stabilization behavior and zero-value coercion

🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
bd2e23584b 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
YeonGyu-Kim
2034cf137a docs: add module-level AGENTS.md for config-manager, keyword-detector, ralph-loop, session-recovery, todo-continuation-enforcer
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
a28e989f83 docs: add module-level AGENTS.md for mcp-oauth, atlas, rules-injector, background-task, call-omo-agent, lsp
🤖 Generated with assistance of [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
2026-02-19 10:46:40 +09:00
YeonGyu-Kim
d5bd9cae98 feat(cli): enable timestamped run output by default 2026-02-19 10:46:40 +09:00
gustavosmendes
73d9e1f847 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
gustavosmendes
6d5d250f8f
Update src/hooks/write-existing-file-guard/index.test.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-18 16:24:20 -03:00
gustavosmendes
b6c433dae0 fix: make write-existing-file-guard read-gated and test coverage 2026-02-18 16:18:59 -03:00
Bo Li
fbf3018ee4
refactor(prompt): dedupe repeated skill guidance blocks 2026-02-19 02:22:14 +08:00
YeonGyu-Kim
6df7f73f81 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
810ebc0428
fix(skill): keep no-skills wording compatible with tests 2026-02-19 01:19:44 +08:00
Bo Li
5360cdb59b
fix(skill): eagerly build description for preloaded skills 2026-02-19 01:16:57 +08:00
YeonGyu-Kim
b4183339e7 fix(tests): stabilize auto-update-checker isolation under bun 2026-02-19 01:40:58 +09:00
Bo Li
462bf7b277
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
8b3cc5e011
fix: preserve git-master config defaults and tighten type safety 2026-02-19 00:17:22 +08:00
Bo Li
42b082b469
refactor: merge skill tool into slashcommand to reduce system prompt size 2026-02-19 00:17:22 +08:00
YeonGyu-Kim
6e16087779 fix(tests): update atlas hook and auto-update-checker tests
- atlas hook: update verification reminder assertions to match new
  4-phase QA system (MANDATORY -> PHASE 1/2, LIE -> LYING)
- auto-update-checker: add missing revertPinnedVersion mock export
  to fix SyntaxError in background-update-check tests

Note: 4 auto-update-checker tests fail only when run alongside
checker.test.ts due to bun mock.module isolation issue (pre-existing
in v3.7.3, not a regression)
2026-02-18 23:13:16 +09:00
YeonGyu-Kim
b0e8f5ec7b feat(run): print agent/model/duration on assistant completion 2026-02-18 21:10:21 +09:00
YeonGyu-Kim
6bf365595f refactor: replace opencode/glm-4.7-free with opencode/big-pickle model
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-02-18 21:10:21 +09:00
YeonGyu-Kim
096db59399 fix(run): inherit main-session tool permissions for continuation prompts 2026-02-18 21:10:21 +09:00
YeonGyu-Kim
7622eddb0d refactor(agents): convert all markdown tables to bullet lists across 12 agent files
Tables in template literal prompts render poorly in some LLM contexts.
Replaced 43 table instances with equivalent bullet list format preserving
all information. Affected: hephaestus, atlas/default, atlas/prompt-section-builder,
sisyphus-junior/gpt, librarian, explore, metis, prometheus/behavioral-summary,
prometheus/identity-constraints, prometheus/interview-mode, prometheus/plan-generation,
prometheus/plan-template.
2026-02-18 21:10:21 +09:00
YeonGyu-Kim
0d49c0cec2
Merge pull request #1535 from acamq/feature/start-work-plan-name-clean
feat(prometheus): include plan name in /start-work guidance
2026-02-18 18:20:08 +09:00
YeonGyu-Kim
305d036577
Merge pull request #1549 from MoerAI/fix/windows-path-absolute-check
fix(hooks): use path.isAbsolute() for cross-platform path detection on Windows
2026-02-18 18:04:13 +09:00
YeonGyu-Kim
a493227fe4
Merge pull request #1822 from Strocs/fix/non-interactive-env-hook-duplication
fix(non-interactive-env): prevent environment variable duplication on repeated executions
2026-02-18 18:03:50 +09:00
YeonGyu-Kim
943a4da349
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
75ff6e1be1 feat(atlas): enforce 4-phase critical QA with mandatory hands-on verification
Rewrite Atlas GPT verification from a checklist to a 4-phase protocol:
Phase 1 (Read Code First), Phase 2 (Automated Checks), Phase 3 (Hands-On QA),
Phase 4 (Gate Decision). Hands-on QA is now mandatory for user-facing changes,
not 'if applicable'. Hook message reinforces subagent distrust and requires
actually running deliverables before proceeding to next task.
2026-02-18 17:50:26 +09:00
YeonGyu-Kim
d837498318 feat(agents): boost sisyphus parallel tool call intensity, remove incorrect subagent_type enforcement from hephaestus 2026-02-18 17:47:08 +09:00
YeonGyu-Kim
617e53605a feat(cli): use sonnet-4-6 with ultrawork opus-4-6 for non-max20 Claude subscribers 2026-02-18 17:47:08 +09:00
YeonGyu-Kim
376bd7428a test(hooks): add ultrawork-model-override unit tests 2026-02-18 17:47:08 +09:00
YeonGyu-Kim
e863fe2013 feat(hooks): add ultrawork-model-override hook for per-agent model swap 2026-02-18 17:47:08 +09:00
YeonGyu-Kim
a717a95e13 fix: clear spy call history in completion-verbose-logging test
spyOn(console, 'log') accumulates calls across test files in bun:test.
Add mockClear() after spy creation to prevent cross-file contamination
when run in the same bun test batch as completion.test.ts.
2026-02-18 17:43:16 +09:00
YeonGyu-Kim
7b3a64b77e test(tmux): add boundary tests for exact split threshold with 0 agent panes 2026-02-18 17:33:26 +09:00
YeonGyu-Kim
e2e89b1f57 fix(tmux): skip agent area width guard when 0 agent panes exist
When no agent panes exist, mainPane.width equals windowWidth, making
agentAreaWidth zero. The early return guard blocked initial pane creation
before the currentCount === 0 handler could execute.

Add currentCount > 0 condition so the guard only fires when agent panes
already exist, allowing the bootstrap handler to evaluate canSplitPane.

Closes #1939
2026-02-18 17:30:05 +09:00